[PATCH 07/11] soundwire: intel: Only call sdw stream APIs for the first cpu_dai

Liao, Bard bard.liao at intel.com
Fri Aug 28 03:47:14 CEST 2020


> -----Original Message-----
> From: Vinod Koul <vkoul at kernel.org>
> Sent: Wednesday, August 26, 2020 5:47 PM
> To: Bard Liao <yung-chuan.liao at linux.intel.com>
> Cc: alsa-devel at alsa-project.org; linux-kernel at vger.kernel.org; tiwai at suse.de;
> broonie at kernel.org; gregkh at linuxfoundation.org; jank at cadence.com;
> srinivas.kandagatla at linaro.org; rander.wang at linux.intel.com;
> ranjani.sridharan at linux.intel.com; hui.wang at canonical.com; pierre-
> louis.bossart at linux.intel.com; Kale, Sanyog R <sanyog.r.kale at intel.com>; Lin,
> Mengdong <mengdong.lin at intel.com>; Liao, Bard <bard.liao at intel.com>
> Subject: Re: [PATCH 07/11] soundwire: intel: Only call sdw stream APIs for
> the first cpu_dai
> 
> On 18-08-20, 10:41, Bard Liao wrote:
> > We should call these APIs once per stream. So we can only call it when
> > the dai ops is invoked for the first cpu dai.
> >
> > Signed-off-by: Bard Liao <yung-chuan.liao at linux.intel.com>
> > Reviewed-by: Pierre-Louis Bossart
> > <pierre-louis.bossart at linux.intel.com>
> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> > ---
> >  drivers/soundwire/intel.c | 45
> > +++++++++++++++++++++++++++++++++------
> >  1 file changed, 39 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
> > index 89a8ad1f80e8..7c63581270fd 100644
> > --- a/drivers/soundwire/intel.c
> > +++ b/drivers/soundwire/intel.c
> > @@ -941,11 +941,13 @@ static int intel_hw_params(struct
> > snd_pcm_substream *substream,  static int intel_prepare(struct
> snd_pcm_substream *substream,
> >  			 struct snd_soc_dai *dai)
> >  {
> > +	struct snd_soc_pcm_runtime *rtd = substream->private_data;
> > +	struct snd_soc_dai *first_cpu_dai = asoc_rtd_to_cpu(rtd, 0);
> >  	struct sdw_cdns *cdns = snd_soc_dai_get_drvdata(dai);
> >  	struct sdw_intel *sdw = cdns_to_intel(cdns);
> >  	struct sdw_cdns_dma_data *dma;
> >  	int ch, dir;
> > -	int ret;
> > +	int ret = 0;
> >
> >  	dma = snd_soc_dai_get_dma_data(dai, substream);
> >  	if (!dma) {
> > @@ -985,7 +987,13 @@ static int intel_prepare(struct
> snd_pcm_substream *substream,
> >  			goto err;
> >  	}
> >
> > -	ret = sdw_prepare_stream(dma->stream);
> > +	/*
> > +	 * All cpu dais belong to a stream. To ensure sdw_prepare_stream
> > +	 * is called once per stream, we should call it only when
> > +	 * dai = first_cpu_dai.
> > +	 */
> > +	if (first_cpu_dai == dai)
> > +		ret = sdw_prepare_stream(dma->stream);
> 
> Hmmm why not use the one place which is unique in the card to call this,
> hint machine dais are only called once.

Yes, we can call it in machine driver. But, shouldn't it belong to platform
level? The point is that if we move the stuff to machine driver, it will
force people to implement these stuff on their own Intel machine driver.

> 
> ~Vinod


More information about the Alsa-devel mailing list