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@xxxxxxxxxxxxxxx> > Signed-off-by: Hui Wang <hui.wang@xxxxxxxxxxxxx> 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 >