Re: [PATCH] ASoC: hdmi-codec: fix missing report for jack initial status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>
>




[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux