[PATCH] ALSA: hda/hdmi: add keep-alive support for ADL-P and DG2

Takashi Iwai tiwai at suse.de
Wed Feb 16 10:13:49 CET 2022


On Wed, 16 Feb 2022 09:38:44 +0100,
Amadeusz SX2awiX4ski wrote:
> 
> On 2/15/2022 3:01 PM, Kai Vehmanen wrote:
> 
> >   static void silent_stream_disable(struct hda_codec *codec,
> > @@ -1726,7 +1786,16 @@ static void silent_stream_disable(struct hda_codec *codec,
> >   {
> >   	struct hdmi_spec *spec = codec->spec;
> >   	struct hdmi_spec_per_cvt *per_cvt;
> > -	int cvt_idx;
> > +	int cvt_idx, err;
> > +
> > +	err = snd_hda_power_up_pm(codec);
> > +	if (err < 0 && err != -EACCES) {
> > +		codec_err(codec,
> > +			  "Failed to power up codec for silent stream disable ret=[%d]\n",
> > +			  err);
> > +		snd_hda_power_down_pm(codec);
> 
> If power up failed, do you need to power down?

Yes, it's essentially pm_runtime_get(), and you need to put down also
at an error path.

But, what I don't follow in the patch is about the part:

>  static void silent_stream_enable(struct hda_codec *codec,
>  				 struct hdmi_spec_per_pin *per_pin)
>  {
(snip)
>   unlock_out:
>  	mutex_unlock(&per_pin->lock);
> +
> +	if (err || !keep_power)
> +		snd_hda_power_down_pm(codec);

So this may leave the power up.  But where is the corresponding part
that turns it down?  The newly added snd_hda_power_up_pm() in
silent_stream_disable() is paired with the one at the tail of that
function, so it looks like a refcount unbalance.  Kai?


thanks,

Takashi


More information about the Alsa-devel mailing list