alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Mark Brown <broonie@opensource.wolfsonmicro.com>
To: Jarkko Nikula <jhnikula@gmail.com>
Cc: alsa-devel@alsa-project.org, Liam Girdwood <lrg@slimlogic.co.uk>
Subject: Re: [RFC_i/iv 1/3] ASoC: Decouple DAPM from CODECs. Part core (will be squashed)
Date: Fri, 29 Oct 2010 13:04:29 -0700	[thread overview]
Message-ID: <20101029200428.GD3921@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <1288353618-21753-2-git-send-email-jhnikula@gmail.com>

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).

> @@ -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.

>  	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...

  reply	other threads:[~2010-10-29 20:04 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 [this message]
2010-10-30 18:01     ` Liam Girdwood
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=20101029200428.GD3921@opensource.wolfsonmicro.com \
    --to=broonie@opensource.wolfsonmicro.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=jhnikula@gmail.com \
    --cc=lrg@slimlogic.co.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).