From: Liam Girdwood <lrg@slimlogic.co.uk>
To: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: [RFC_i/iv 1/3] ASoC: Decouple DAPM from CODECs. Part core (will be squashed)
Date: Sat, 30 Oct 2010 19:01:54 +0100 [thread overview]
Message-ID: <1288461714.3286.143.camel@odin> (raw)
In-Reply-To: <20101029200428.GD3921@opensource.wolfsonmicro.com>
On Fri, 2010-10-29 at 13:04 -0700, Mark Brown wrote:
> On Fri, Oct 29, 2010 at 03:00:16PM +0300, Jarkko Nikula wrote:
>
> > codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644,
> > codec->debugfs_codec_root,
> > - &codec->pop_time);
> > + &codec->dapm->pop_time);
>
> The pop time feels like it should have an effect over the full card
> rather than over individual CODECs - the power sequencing is obviously
> going to be done over the entire card rather than individual devices so
> it's a little unclear how competing values for different devices would
> be applied. This is a simple code motion patch and this is only debugfs
> but perhaps it's worth first doing this as a split which moves the pop
> time onto the card.
>
> > for (i = 0; i < card->num_rtd; i++) {
> > run_delayed_work(&card->rtd[i].delayed_work);
> > - card->rtd[i].codec->suspend_bias_level = card->rtd[i].codec->bias_level;
> > + card->rtd[i].codec->dapm->suspend_bias_level = card->rtd[i].codec->dapm->bias_level;
>
> Hrm, this is going to miss out devices that don't have a DAI (and run
> multiple times on devices that do have a DAI, which is unfortunate).
Ah, I think we may be missing a later patch here that did add a DAPM
context to card and platform.
Btw, not sure what you mean by this 1 line change being run multiple
times being different to the old line.
>
> > @@ -2957,6 +2957,21 @@ static inline char *fmt_multiple_name(struct device *dev,
> > return kstrdup(dai_drv->name, GFP_KERNEL);
> > }
> >
> > +static struct snd_soc_dapm_context *soc_new_dapm_context(struct device *dev)
> > +{
> > + struct snd_soc_dapm_context *dapm;
> > +
> > + dapm = kzalloc(sizeof(struct snd_soc_dapm_context), GFP_KERNEL);
> > + if (dapm) {
> > + INIT_LIST_HEAD(&dapm->widgets);
> > + INIT_LIST_HEAD(&dapm->paths);
> > + dapm->bias_level = SND_SOC_BIAS_OFF;
> > + dapm->dev = dev;
> > + }
> > + return dapm;
>
> I'd be more inclined to just embed the struct in the objects that need
> it rather than individually allocating them - it saves error checking
> and deallocation, and I can't see any cases where we'd want to
> optionally have a DAPM object.
Yeah, the reason for this is because it was unclear at the time whether
we will need to share a context between DAI backend and frontends. So
this can be embedded now.
>
> > if (ret == 0) {
> > - if (codec->driver->set_bias_level)
> > - ret = codec->driver->set_bias_level(codec, level);
> > + if (dapm->codec && dapm->codec->driver->set_bias_level)
> > + ret = dapm->codec->driver->set_bias_level(dapm->codec, level);
> > else
> > - codec->bias_level = level;
> > + dapm->bias_level = level;
>
> This is all feeling like the DAPM object needs a vtable to do this
> indirection to the operation on the individual object types.
>
> > /* If we're changing to all on or all off then prepare */
> > - if ((sys_power && codec->bias_level == SND_SOC_BIAS_STANDBY) ||
> > - (!sys_power && codec->bias_level == SND_SOC_BIAS_ON)) {
> > - ret = snd_soc_dapm_set_bias_level(card, codec, SND_SOC_BIAS_PREPARE);
> > + if ((sys_power && dapm->bias_level == SND_SOC_BIAS_STANDBY) ||
> > + (!sys_power && dapm->bias_level == SND_SOC_BIAS_ON)) {
> > + ret = snd_soc_dapm_set_bias_level(card, dapm, SND_SOC_BIAS_PREPARE);
>
> So, this is all going to be run per DAPM object from the looks of
> things. That's really not what we want - we want to be doing the
> sequencing over all DAPM objects in the card, rather than per DAPM
> object. It'll need to be fixed at some point later in the series...
I should just add that Jarkko picked this up as work in progress, with
some of the details requiring completion or cleanup.
Liam
--
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk
next prev parent reply other threads:[~2010-10-30 18:02 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-29 12:00 [RFC i-iv] ASoC: Add support for cross-device paths without dai and without name collision Jarkko Nikula
2010-10-29 12:00 ` [RFC_i/iv 1/3] ASoC: Decouple DAPM from CODECs. Part core (will be squashed) Jarkko Nikula
2010-10-29 20:04 ` Mark Brown
2010-10-30 18:01 ` Liam Girdwood [this message]
2010-10-31 18:13 ` Jarkko Nikula
2010-11-01 13:13 ` Mark Brown
2010-11-04 12:38 ` [PATCH] ASoC: Decouple DAPM from CODECs Jarkko Nikula
2010-11-05 3:29 ` Mark Brown
2010-11-05 7:20 ` Jarkko Nikula
2010-11-05 13:38 ` Mark Brown
2010-11-05 13:53 ` Jarkko Nikula
2010-11-05 14:02 ` Mark Brown
[not found] ` <1288353618-21753-3-git-send-email-jhnikula@gmail.com>
2010-10-29 13:45 ` [RFC_i/iv 2/3] ASoC: Decouple DAPM from CODECs. Part codecs (will be squashed) Jarkko Nikula
2010-10-29 20:45 ` Mark Brown
[not found] ` <1288353618-21753-4-git-send-email-jhnikula@gmail.com>
2010-10-29 20:47 ` [RFC_i/iv 3/3] ASoC: Decouple DAPM from CODECs. Part platforms " Mark Brown
2010-10-31 18:11 ` Jarkko Nikula
2010-11-01 13:14 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1288461714.3286.143.camel@odin \
--to=lrg@slimlogic.co.uk \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@opensource.wolfsonmicro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.