Tested-by: Zhengqiao Xia <xiazhengqiao@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> On Mon, Dec 18, 2023 at 10:57 PM Jerome Brunet <jbrunet@xxxxxxxxxxxx> wrote: > This fixes a problem introduced while fixing ELD reporting with no jack > set. > > Most driver using the hdmi-codec will call the 'plugged_cb' callback > directly when registered to report the initial state of the HDMI connector. > > With the commit mentionned, this occurs before jack is ready and the > initial report is lost for platforms actually providing a jack for HDMI. > > Fix this by storing the hdmi connector status regardless of jack being set > or not and report the last status when jack gets set. > > With this, the initial state is reported correctly even if it is > disconnected. This was not done initially and is also a fix. > > Fixes: 15be353d55f9 ("ASoC: hdmi-codec: register hpd callback on component > probe") > Reported-by: Zhengqiao Xia <xiazhengqiao@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> > Closes: > https://lore.kernel.org/alsa-devel/CADYyEwTNyY+fR9SgfDa-g6iiDwkU3MUdPVCYexs2_3wbcM8_vg@xxxxxxxxxxxxxx/ > Cc: Hsin-Yi Wang <hsinyi@xxxxxxxxxx> > Signed-off-by: Jerome Brunet <jbrunet@xxxxxxxxxxxx> > --- > sound/soc/codecs/hdmi-codec.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c > index 20da1eaa4f1c..0938671700c6 100644 > --- a/sound/soc/codecs/hdmi-codec.c > +++ b/sound/soc/codecs/hdmi-codec.c > @@ -850,8 +850,9 @@ static int hdmi_dai_probe(struct snd_soc_dai *dai) > static void hdmi_codec_jack_report(struct hdmi_codec_priv *hcp, > unsigned int jack_status) > { > - if (hcp->jack && jack_status != hcp->jack_status) { > - snd_soc_jack_report(hcp->jack, jack_status, > SND_JACK_LINEOUT); > + if (jack_status != hcp->jack_status) { > + if (hcp->jack) > + snd_soc_jack_report(hcp->jack, jack_status, > SND_JACK_LINEOUT); > hcp->jack_status = jack_status; > } > } > @@ -880,6 +881,13 @@ static int hdmi_codec_set_jack(struct > snd_soc_component *component, > > if (hcp->hcd.ops->hook_plugged_cb) { > hcp->jack = jack; > + > + /* > + * Report the initial jack status which may have been > provided > + * by the parent hdmi driver while the hpd hook was > registered. > + */ > + snd_soc_jack_report(jack, hcp->jack_status, > SND_JACK_LINEOUT); > + > return 0; > } > > -- > 2.42.0 > >