[alsa-devel] [PATCH 2/3] ASoC: SOF: Intel: hda: Enable jack detection in sof hda driver
Ranjani Sridharan
ranjani.sridharan at linux.intel.com
Thu Jun 27 07:36:05 CEST 2019
On Wed, 2019-06-26 at 23:03 +0200, Cezary Rojewski wrote:
> On 2019-06-26 22:22, Ranjani Sridharan wrote:
> > From: Rander Wang <rander.wang at linux.intel.com>
> >
> > In commit 7d4f606c50ff ("ALSA: hda - WAKEEN feature enabling for
> > runtime pm"), legacy HD-A driver sets hda controller in reset mode
> > after
> > entering runtime-suspend. And when resuming from suspend mode, it
> > checks
> > hda controller & codec status to detect headphone hotplug event.
> > Now
> > this patch does the same job in SOF runtime pm functions.
> >
> > And we need to check all the non-hdmi codecs for some cases like
> > playback
> > with HDMI or capture with DMIC connected to dsp. In these cases,
> > only
> > controller is active and codecs are suspended, so codecs can't send
> > unsolicited event to controller. The jack polling operation will
> > activate
> > codecs and unsolicited event can work even codecs become suspended
> > later.
> >
> > Tested on whiskylake with hda codecs.
> >
> > Signed-off-by: Rander Wang <rander.wang at linux.intel.com>
> > Signed-off-by: Pierre-Louis Bossart <
> > pierre-louis.bossart at linux.intel.com>
> > Signed-off-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com
> > >
> > ---
> > sound/soc/sof/intel/hda-codec.c | 45
> > +++++++++++++++++++++++++++++++--
> > sound/soc/sof/intel/hda-dsp.c | 29 ++++++++++++++++-----
> > sound/soc/sof/intel/hda.h | 4 +++
> > 3 files changed, 70 insertions(+), 8 deletions(-)
> >
> > diff --git a/sound/soc/sof/intel/hda-codec.c
> > b/sound/soc/sof/intel/hda-codec.c
> > index b8b37f082309..c711792534da 100644
> > --- a/sound/soc/sof/intel/hda-codec.c
> > +++ b/sound/soc/sof/intel/hda-codec.c
> > @@ -10,6 +10,7 @@
> >
> > #include <linux/module.h>
> > #include <sound/hdaudio_ext.h>
> > +#include <sound/hda_register.h>
> > #include <sound/hda_codec.h>
> > #include <sound/hda_i915.h>
> > #include <sound/sof.h>
> > @@ -37,16 +38,55 @@ static void hda_codec_load_module(struct
> > hda_codec *codec)
> > static void hda_codec_load_module(struct hda_codec *codec) {}
> > #endif
> >
> > +/* check jack status after resuming from suspend mode */
> > +void hda_codec_jack_check(struct snd_sof_dev *sdev, int status)
> > +{
> > + struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
> > + struct hda_bus *hbus = sof_to_hbus(sdev);
> > + struct hdac_bus *bus = sof_to_bus(sdev);
> > + struct hda_codec *codec;
> > + int mask;
> > +
> > + /*
> > + * there are two reasons for runtime resume
> > + * (1) waken up by interrupt triggered by WAKEEN feature
> > + * (2) waken up by pm get functions for some audio operations
> > + * For case (1), the bits in status mean which codec triggers
> > + * the interrupt and jacks will be checked on these codecs.
> > + * For case (2), we need to check all the non-hdmi codecs for
> > some
> > + * cases like playback with HDMI or capture with DMIC. In these
> > + * cases, only controller is active and codecs are suspended,
> > so
> > + * codecs can't send unsolicited event to controller. The jack
> > polling
> > + * operation will activate codecs and unsolicited event can
> > work
> > + * even codecs become suspended later.
> > + */
>
> This block is huge. I'd suggest entering some whitespaces to make it
> more readable.
>
> On the second thought, I bet this stuff is not SOF specific and if
> so,
> being more strict may prove more informative than being so explicit
> -
> reference to HDA spec/ kernel HDA documentation etc.
>
> > + mask = status ? status : hda->hda_codec_mask;
> > +
> > + list_for_each_codec(codec, hbus)
> > + if (mask & BIT(codec->core.addr))
> > + schedule_delayed_work(&codec->jackpoll_work,
> > + codec-
> > >jackpoll_interval);
> > +
> > + /* disable controller Wake Up event*/
> > + snd_hdac_chip_writew(bus, WAKEEN,
> > + snd_hdac_chip_readw(bus, WAKEEN) &
> > + ~hda->hda_codec_mask);
>
> Any reason for not using snd_hdac_chip_updatew?
Thanks, Cezary for the feedback. We're working to optimize the jack
detection logic during runtime suspend. Let me get back with a v2 and
address your concerns.
Thanks,
Ranjani
More information about the Alsa-devel
mailing list