[alsa-devel] [PATCH] ALSA: hda/hdmi - add a parameter to let users decide if checking the eld_valid

Takashi Iwai tiwai at suse.de
Mon Nov 11 16:33:45 CET 2019


On Mon, 11 Nov 2019 15:45:02 +0100,
Hui Wang wrote:
> 
> With the commit 7f641e26a6df ("ALSA: hda/hdmi - Consider eld_valid
> when reporting jack event"), the driver checks eld_valid before
> reporting Jack state, this fixes the 4 HDMI/DP audio devices issue.
> 
> But recently some users complained that the hdmi audio on their
> machines couldn't work anymore with this commit. On their machines,
> the monitor_present is 1 while the eld_valid is 0 when plugging a
> monitor, and the hdmi audio could work even the eld_valid is 0.
> 
> To make the hdmi audio work again on those machines, adding a module
> parameter, if usrs want to skip the checking eld_valid, they
> could set checking_eld_valid=0 when loading the module. And this
> parameter only applies to sense_via_verbs, for those getting eld via
> component, no need to apply this parameter since it is impossible
> that present is 1 while eld_valid is 0.
> 
> BugLink: https://bugs.launchpad.net/bugs/1834771
> Fixes: 7f641e26a6df ("ALSA: hda/hdmi - Consider eld_valid when reporting jack event")
> Cc: <stable at vger.kernel.org>
> Signed-off-by: Hui Wang <hui.wang at canonical.com>

Well, this sort of module option is rather a last resort, so I
hesitate to apply this.

The bug reports in the above are a bit hard to digest quickly.
Could you tell exactly which hardware (and drivers) show the problem?

FWIW, amdgpu driver already got the audio-component binding recently,
so this problem shouldn't be triggered, at least in this code path.
And, for nouveau and radeon, I already submitted the patches to
support the audio-component binding, but by some reason they haven't
been merged to the upstream.  In that case, we'd need to ping DRM
guys.


thanks,

Takashi


> ---
>  sound/pci/hda/patch_hdmi.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index be8a977fc684..d70fca4f4411 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -37,6 +37,11 @@ static bool static_hdmi_pcm;
>  module_param(static_hdmi_pcm, bool, 0644);
>  MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
>  
> +static bool checking_eld_valid = true;
> +module_param(checking_eld_valid, bool, 0644);
> +MODULE_PARM_DESC(checking_eld_valid, "Checking eld_valid before reporting Jack "
> +		 "state (default = 1, using verbs only)");
> +
>  #define is_haswell(codec)  ((codec)->core.vendor_id == 0x80862807)
>  #define is_broadwell(codec)    ((codec)->core.vendor_id == 0x80862808)
>  #define is_skylake(codec) ((codec)->core.vendor_id == 0x80862809)
> @@ -1557,8 +1562,9 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
>  	jack = snd_hda_jack_tbl_get(codec, pin_nid);
>  	if (jack) {
>  		jack->block_report = !ret;
> -		jack->pin_sense = (eld->monitor_present && eld->eld_valid) ?
> -			AC_PINSENSE_PRESENCE : 0;
> +		if (checking_eld_valid)
> +			jack->pin_sense = (eld->monitor_present && eld->eld_valid) ?
> +				AC_PINSENSE_PRESENCE : 0;
>  	}
>  	mutex_unlock(&per_pin->lock);
>  	return ret;
> -- 
> 2.17.1
> 


More information about the Alsa-devel mailing list