All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Henningsson <david.henningsson@canonical.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH] ALSA: hda - Don't overwrite the pin default configs
Date: Thu, 22 Nov 2012 18:02:34 +0100	[thread overview]
Message-ID: <50AE5AAA.20007@canonical.com> (raw)
In-Reply-To: <s5hehjlr37b.wl%tiwai@suse.de>

On 11/22/2012 05:51 PM, Takashi Iwai wrote:
> Since we keep the pin default config values anyway internally, we
> don't have to set the values in the codec.  This patch removes the
> code writing the pincfg values.
>
> As a gratis bonus, we can remove also the code restoring the original
> pincfg values at PM resume or module free.  This will give us more
> benefit, as it can reduce the unnecessary power-up of codecs.
>
> This won't change the driver functionality.  The only difference would
> be that the codec proc file will show the original pincfg values
> instead of the actually referred values.  The actually referred values
> can be determined from sysfs *_pin_configs files.
> (Also hda-emu was updated to follow this change.)
>
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>
> David, this change may hit your QA test.  As mentioned, the only
> difference is the default pincfg outputs in proc files.

Thanks. I don't think it'll hit my testing as hda-emu and 
hda-jack-retask both read from the sysfs where available.

Not powering up the codecs might need some careful testing though? I 
remember the ivybridge-hdmi error (which I sent a patch for recently) 
was less likely to occur if codec was powered up after resume.



>
>   sound/pci/hda/hda_codec.c | 45 +++------------------------------------------
>   1 file changed, 3 insertions(+), 42 deletions(-)
>
> diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
> index d9fd439..c8f6c3b 100644
> --- a/sound/pci/hda/hda_codec.c
> +++ b/sound/pci/hda/hda_codec.c
> @@ -991,19 +991,6 @@ static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
>   	return NULL;
>   }
>
> -/* write a config value for the given NID */
> -static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
> -		       unsigned int cfg)
> -{
> -	int i;
> -	for (i = 0; i < 4; i++) {
> -		snd_hda_codec_write(codec, nid, 0,
> -				    AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
> -				    cfg & 0xff);
> -		cfg >>= 8;
> -	}
> -}
> -
>   /* set the current pin config value for the given NID.
>    * the value is cached, and read via snd_hda_codec_get_pincfg()
>    */
> @@ -1011,12 +998,10 @@ int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
>   		       hda_nid_t nid, unsigned int cfg)
>   {
>   	struct hda_pincfg *pin;
> -	unsigned int oldcfg;
>
>   	if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
>   		return -EINVAL;
>
> -	oldcfg = snd_hda_codec_get_pincfg(codec, nid);
>   	pin = look_up_pincfg(codec, list, nid);
>   	if (!pin) {
>   		pin = snd_array_new(list);
> @@ -1025,13 +1010,6 @@ int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
>   		pin->nid = nid;
>   	}
>   	pin->cfg = cfg;
> -
> -	/* change only when needed; e.g. if the pincfg is already present
> -	 * in user_pins[], don't write it
> -	 */
> -	cfg = snd_hda_codec_get_pincfg(codec, nid);
> -	if (oldcfg != cfg)
> -		set_pincfg(codec, nid, cfg);
>   	return 0;
>   }
>
> @@ -1080,17 +1058,6 @@ unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
>   }
>   EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
>
> -/* restore all current pin configs */
> -static void restore_pincfgs(struct hda_codec *codec)
> -{
> -	int i;
> -	for (i = 0; i < codec->init_pins.used; i++) {
> -		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
> -		set_pincfg(codec, pin->nid,
> -			   snd_hda_codec_get_pincfg(codec, pin->nid));
> -	}
> -}
> -
>   /**
>    * snd_hda_shutup_pins - Shut up all pins
>    * @codec: the HDA codec
> @@ -1152,17 +1119,13 @@ static void init_hda_cache(struct hda_cache_rec *cache,
>   			   unsigned int record_size);
>   static void free_hda_cache(struct hda_cache_rec *cache);
>
> -/* restore the initial pin cfgs and release all pincfg lists */
> -static void restore_init_pincfgs(struct hda_codec *codec)
> +/* release all pincfg lists */
> +static void free_init_pincfgs(struct hda_codec *codec)
>   {
> -	/* first free driver_pins and user_pins, then call restore_pincfg
> -	 * so that only the values in init_pins are restored
> -	 */
>   	snd_array_free(&codec->driver_pins);
>   #ifdef CONFIG_SND_HDA_HWDEP
>   	snd_array_free(&codec->user_pins);
>   #endif
> -	restore_pincfgs(codec);
>   	snd_array_free(&codec->init_pins);
>   }
>
> @@ -1205,7 +1168,7 @@ static void snd_hda_codec_free(struct hda_codec *codec)
>   		return;
>   	cancel_delayed_work_sync(&codec->jackpoll_work);
>   	snd_hda_jack_tbl_clear(codec);
> -	restore_init_pincfgs(codec);
> +	free_init_pincfgs(codec);
>   #ifdef CONFIG_PM
>   	cancel_delayed_work(&codec->power_work);
>   	flush_workqueue(codec->bus->workq);
> @@ -2394,7 +2357,6 @@ int snd_hda_codec_reset(struct hda_codec *codec)
>   	init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
>   	/* free only driver_pins so that init_pins + user_pins are restored */
>   	snd_array_free(&codec->driver_pins);
> -	restore_pincfgs(codec);
>   	snd_array_free(&codec->cvt_setups);
>   	snd_array_free(&codec->spdif_out);
>   	codec->num_pcms = 0;
> @@ -3687,7 +3649,6 @@ static void hda_call_codec_resume(struct hda_codec *codec)
>   	 */
>   	hda_keep_power_on(codec);
>   	hda_set_power_state(codec, AC_PWRST_D0);
> -	restore_pincfgs(codec); /* restore all current pin configs */
>   	restore_shutup_pins(codec);
>   	hda_exec_init_verbs(codec);
>   	if (codec->patch_ops.resume)
>



-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic

  reply	other threads:[~2012-11-22 17:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-22 16:51 [PATCH] ALSA: hda - Don't overwrite the pin default configs Takashi Iwai
2012-11-22 17:02 ` David Henningsson [this message]
2012-11-22 17:08   ` Takashi Iwai

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=50AE5AAA.20007@canonical.com \
    --to=david.henningsson@canonical.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=tiwai@suse.de \
    /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.