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

From: Liao, Bard
Date: Thu Aug 27 2020 - 21:47:26 EST


> -----Original Message-----
> From: Vinod Koul <vkoul@xxxxxxxxxx>
> Sent: Wednesday, August 26, 2020 5:47 PM
> To: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx>
> Cc: alsa-devel@xxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; tiwai@xxxxxxx;
> broonie@xxxxxxxxxx; gregkh@xxxxxxxxxxxxxxxxxxx; jank@xxxxxxxxxxx;
> srinivas.kandagatla@xxxxxxxxxx; rander.wang@xxxxxxxxxxxxxxx;
> ranjani.sridharan@xxxxxxxxxxxxxxx; hui.wang@xxxxxxxxxxxxx; pierre-
> louis.bossart@xxxxxxxxxxxxxxx; Kale, Sanyog R <sanyog.r.kale@xxxxxxxxx>; Lin,
> Mengdong <mengdong.lin@xxxxxxxxx>; Liao, Bard <bard.liao@xxxxxxxxx>
> 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@xxxxxxxxxxxxxxx>
> > Reviewed-by: Pierre-Louis Bossart
> > <pierre-louis.bossart@xxxxxxxxxxxxxxx>
> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx>
> > ---
> > 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