Re: [PATCH RFC] drm/vc4: hdmi: Add jack detection to HDMI audio driver

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



On Wed, Feb 26, 2025 at 12:04:56PM +0100, Stefan Wahren wrote:
> Hi Dmitry,
> 
> Am 24.02.25 um 04:15 schrieb Dmitry Baryshkov:
> > On Sat, Feb 22, 2025 at 11:29:21AM +0100, Stefan Wahren wrote:
> > > From: David Turner <david.turner@xxxxxxxxxxxxxxx>
> > > 
> > > Add ALSA jack detection to the vc4-hdmi audio driver so userspace knows
> > > when to add/remove HDMI audio devices.
> > > 
> > > Signed-off-by: David Turner <david.turner@xxxxxxxxxxxxxxx>
> > > Signed-off-by: Stefan Wahren <wahrenst@xxxxxxx>
> > > ---
> > >   drivers/gpu/drm/vc4/vc4_hdmi.c | 26 ++++++++++++++++++++++++--
> > >   drivers/gpu/drm/vc4/vc4_hdmi.h |  7 +++++++
> > >   2 files changed, 31 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > > index 47d9ada98430..d24ae86d799e 100644
> > > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> > > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > > @@ -51,6 +51,7 @@
> > >   #include <linux/reset.h>
> > >   #include <sound/dmaengine_pcm.h>
> > >   #include <sound/hdmi-codec.h>
> > > +#include <sound/jack.h>
> > >   #include <sound/pcm_drm_eld.h>
> > >   #include <sound/pcm_params.h>
> > >   #include <sound/soc.h>
> > > @@ -386,6 +387,12 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi,
> > >   	struct drm_connector *connector = &vc4_hdmi->connector;
> > >   	int ret;
> > > 
> > > +	/*
> > > +	 * Needs to be called for both connects and disconnects for HDMI
> > > +	 * audio hotplug to work correctly.
> > > +	 */
> > > +	drm_atomic_helper_connector_hdmi_hotplug(connector, status);
> > > +
> > >   	/*
> > >   	 * NOTE: This function should really be called with vc4_hdmi->mutex
> > >   	 * held, but doing so results in reentrancy issues since
> > > @@ -405,8 +412,6 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi,
> > >   		return;
> > >   	}
> > > 
> > > -	drm_atomic_helper_connector_hdmi_hotplug(connector, status);
> > > -
> > >   	cec_s_phys_addr(vc4_hdmi->cec_adap,
> > >   			connector->display_info.source_physical_address, false);
> > > 
> > > @@ -2203,6 +2208,22 @@ static const struct drm_connector_hdmi_audio_funcs vc4_hdmi_audio_funcs = {
> > >   	.shutdown = vc4_hdmi_audio_shutdown,
> > >   };
> > > 
> > > +static int vc4_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
> > > +{
> > > +	struct vc4_hdmi *vc4_hdmi = snd_soc_card_get_drvdata(rtd->card);
> > > +	struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
> > > +	int ret;
> > > +
> > > +	ret = snd_soc_card_jack_new(rtd->card, "HDMI Jack", SND_JACK_LINEOUT,
> > > +				    &vc4_hdmi->hdmi_jack);
> > > +	if (ret) {
> > > +		dev_err(rtd->dev, "HDMI Jack creation failed: %d\n", ret);
> > > +		return ret;
> > > +	}
> > > +
> > > +	return snd_soc_component_set_jack(component, &vc4_hdmi->hdmi_jack, NULL);
> > PLease excuse my ignorance, but dows this work. In other words, how is
> > the driver exporting the plugged state through this jack?
> there is no ignorance just a valid question. Unfortunately my knowledge
> here is very limited and I just wanted to minimize the delta between
> vendor and mainline tree. That's why I marked it as RFC.
> 
> Can someone from Raspberry Pi helps here?

Okay, I found it, the hdmi-codec calls snd_soc_jack_report() when
plugged_cb() is called by the HDMI driver.

Please split the patch into two pieces:
- one which moves a call to drm_atomic_helper_connector_hdmi_hotplug()
  to a proper place. The "Needs to be called" comment should go to the
  commit message insteads of the source code.

- another one which adds a jack to the sound card.

> 
> The patch seems to fix an issue? But I don't know the broader context.
> 
> Regards

-- 
With best wishes
Dmitry




[Index of Archives]     [Pulseaudio]     [Linux Audio Users]     [ALSA Devel]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux