All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liao, Bard" <bard.liao@intel.com>
To: Vinod Koul <vkoul@kernel.org>,
	Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"tiwai@suse.de" <tiwai@suse.de>,
	"broonie@kernel.org" <broonie@kernel.org>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"srinivas.kandagatla@linaro.org" <srinivas.kandagatla@linaro.org>,
	"pierre-louis.bossart@linux.intel.com" 
	<pierre-louis.bossart@linux.intel.com>,
	"Kale, Sanyog R" <sanyog.r.kale@intel.com>
Subject: RE: [PATCH 7/7] soundwire: intel: remove PDM support
Date: Thu, 23 Dec 2021 07:46:36 +0000	[thread overview]
Message-ID: <DM6PR11MB4074FEE19010B83F0CDDE8A9FF7E9@DM6PR11MB4074.namprd11.prod.outlook.com> (raw)
In-Reply-To: <YcQeRJ060/u4n6fR@matsya>

> -----Original Message-----
> From: Vinod Koul <vkoul@kernel.org>
> Sent: Thursday, December 23, 2021 2:59 PM
> To: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: alsa-devel@alsa-project.org; linux-kernel@vger.kernel.org;
> tiwai@suse.de; broonie@kernel.org; gregkh@linuxfoundation.org;
> srinivas.kandagatla@linaro.org; pierre-louis.bossart@linux.intel.com; Kale,
> Sanyog R <sanyog.r.kale@intel.com>; Liao, Bard <bard.liao@intel.com>
> Subject: Re: [PATCH 7/7] soundwire: intel: remove PDM support
> 
> On 13-12-21, 13:46, Bard Liao wrote:
> > From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> >
> > While the hardware supports PDM streams, this capability has never
> > been tested or enabled on any product, so this is dead-code. Let's
> > remove all this.
> 
> So no plans to test and enable this? Do the DMICs not use PDM?

The point is that this code is unused/untested. We can re-add it after
it was tested.

> 
> Again this should not be in this series...

Agree, but since this patche depends on the previous patches, I sent them
together to avoid conflict.

> 
> >
> > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> > Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
> > Reviewed-by: Rander Wang <rander.wang@intel.com>
> > Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> > ---
> >  drivers/soundwire/cadence_master.c |  36 +--------
> >  drivers/soundwire/cadence_master.h |  12 +--
> >  drivers/soundwire/intel.c          | 123 +++++++----------------------
> >  3 files changed, 31 insertions(+), 140 deletions(-)
> >
> > diff --git a/drivers/soundwire/cadence_master.c
> b/drivers/soundwire/cadence_master.c
> > index 4fcc3ba93004..558390af44b6 100644
> > --- a/drivers/soundwire/cadence_master.c
> > +++ b/drivers/soundwire/cadence_master.c
> > @@ -1178,9 +1178,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
> >  	cdns->pcm.num_bd = config.pcm_bd;
> >  	cdns->pcm.num_in = config.pcm_in;
> >  	cdns->pcm.num_out = config.pcm_out;
> > -	cdns->pdm.num_bd = config.pdm_bd;
> > -	cdns->pdm.num_in = config.pdm_in;
> > -	cdns->pdm.num_out = config.pdm_out;
> >
> >  	/* Allocate PDIs for PCMs */
> >  	stream = &cdns->pcm;
> > @@ -1211,32 +1208,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
> >  	stream->num_pdi = stream->num_bd + stream->num_in + stream-
> >num_out;
> >  	cdns->num_ports = stream->num_pdi;
> >
> > -	/* Allocate PDIs for PDMs */
> > -	stream = &cdns->pdm;
> > -	ret = cdns_allocate_pdi(cdns, &stream->bd,
> > -				stream->num_bd, offset);
> > -	if (ret)
> > -		return ret;
> > -
> > -	offset += stream->num_bd;
> > -
> > -	ret = cdns_allocate_pdi(cdns, &stream->in,
> > -				stream->num_in, offset);
> > -	if (ret)
> > -		return ret;
> > -
> > -	offset += stream->num_in;
> > -
> > -	ret = cdns_allocate_pdi(cdns, &stream->out,
> > -				stream->num_out, offset);
> > -
> > -	if (ret)
> > -		return ret;
> > -
> > -	/* Update total number of PDM PDIs */
> > -	stream->num_pdi = stream->num_bd + stream->num_in + stream-
> >num_out;
> > -	cdns->num_ports += stream->num_pdi;
> > -
> >  	return 0;
> >  }
> >  EXPORT_SYMBOL(sdw_cdns_pdi_init);
> > @@ -1681,7 +1652,7 @@ int sdw_cdns_probe(struct sdw_cdns *cdns)
> >  EXPORT_SYMBOL(sdw_cdns_probe);
> >
> >  int cdns_set_sdw_stream(struct snd_soc_dai *dai,
> > -			void *stream, bool pcm, int direction)
> > +			void *stream, int direction)
> >  {
> >  	struct sdw_cdns *cdns = snd_soc_dai_get_drvdata(dai);
> >  	struct sdw_cdns_dma_data *dma;
> > @@ -1705,10 +1676,7 @@ int cdns_set_sdw_stream(struct snd_soc_dai
> *dai,
> >  		if (!dma)
> >  			return -ENOMEM;
> >
> > -		if (pcm)
> > -			dma->stream_type = SDW_STREAM_PCM;
> > -		else
> > -			dma->stream_type = SDW_STREAM_PDM;
> > +		dma->stream_type = SDW_STREAM_PCM;
> >
> >  		dma->bus = &cdns->bus;
> >  		dma->link_id = cdns->instance;
> > diff --git a/drivers/soundwire/cadence_master.h
> b/drivers/soundwire/cadence_master.h
> > index aa4b9b0eb2a8..595d72c15d97 100644
> > --- a/drivers/soundwire/cadence_master.h
> > +++ b/drivers/soundwire/cadence_master.h
> > @@ -17,7 +17,7 @@
> >   * @h_ch_num: high channel for PDI
> >   * @ch_count: total channel count for PDI
> >   * @dir: data direction
> > - * @type: stream type, PDM or PCM
> > + * @type: stream type, (only PCM supported)
> >   */
> >  struct sdw_cdns_pdi {
> >  	int num;
> > @@ -62,17 +62,11 @@ struct sdw_cdns_streams {
> >   * @pcm_bd: number of bidirectional PCM streams supported
> >   * @pcm_in: number of input PCM streams supported
> >   * @pcm_out: number of output PCM streams supported
> > - * @pdm_bd: number of bidirectional PDM streams supported
> > - * @pdm_in: number of input PDM streams supported
> > - * @pdm_out: number of output PDM streams supported
> >   */
> >  struct sdw_cdns_stream_config {
> >  	unsigned int pcm_bd;
> >  	unsigned int pcm_in;
> >  	unsigned int pcm_out;
> > -	unsigned int pdm_bd;
> > -	unsigned int pdm_in;
> > -	unsigned int pdm_out;
> >  };
> >
> >  /**
> > @@ -111,7 +105,6 @@ struct sdw_cdns_dma_data {
> >   * @ports: Data ports
> >   * @num_ports: Total number of data ports
> >   * @pcm: PCM streams
> > - * @pdm: PDM streams
> >   * @registers: Cadence registers
> >   * @link_up: Link status
> >   * @msg_count: Messages sent on bus
> > @@ -129,7 +122,6 @@ struct sdw_cdns {
> >  	int num_ports;
> >
> >  	struct sdw_cdns_streams pcm;
> > -	struct sdw_cdns_streams pdm;
> >
> >  	int pdi_loopback_source;
> >  	int pdi_loopback_target;
> > @@ -188,7 +180,7 @@ cdns_xfer_msg_defer(struct sdw_bus *bus,
> >  int cdns_bus_conf(struct sdw_bus *bus, struct sdw_bus_params
> *params);
> >
> >  int cdns_set_sdw_stream(struct snd_soc_dai *dai,
> > -			void *stream, bool pcm, int direction);
> > +			void *stream, int direction);
> >
> >  void sdw_cdns_check_self_clearing_bits(struct sdw_cdns *cdns, const
> char *string,
> >  				       bool initial_delay, int reset_iterations);
> > diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
> > index 45ea55a7d0c8..79ba0e3f6dac 100644
> > --- a/drivers/soundwire/intel.c
> > +++ b/drivers/soundwire/intel.c
> > @@ -564,7 +564,7 @@ static void intel_pdi_init(struct sdw_intel *sdw,
> >  {
> >  	void __iomem *shim = sdw->link_res->shim;
> >  	unsigned int link_id = sdw->instance;
> > -	int pcm_cap, pdm_cap;
> > +	int pcm_cap;
> >
> >  	/* PCM Stream Capability */
> >  	pcm_cap = intel_readw(shim, SDW_SHIM_PCMSCAP(link_id));
> > @@ -575,41 +575,25 @@ static void intel_pdi_init(struct sdw_intel *sdw,
> >
> >  	dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n",
> >  		config->pcm_bd, config->pcm_in, config->pcm_out);
> > -
> > -	/* PDM Stream Capability */
> > -	pdm_cap = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));
> > -
> > -	config->pdm_bd = FIELD_GET(SDW_SHIM_PDMSCAP_BSS,
> pdm_cap);
> > -	config->pdm_in = FIELD_GET(SDW_SHIM_PDMSCAP_ISS, pdm_cap);
> > -	config->pdm_out = FIELD_GET(SDW_SHIM_PDMSCAP_OSS,
> pdm_cap);
> > -
> > -	dev_dbg(sdw->cdns.dev, "PDM cap bd:%d in:%d out:%d\n",
> > -		config->pdm_bd, config->pdm_in, config->pdm_out);
> >  }
> >
> >  static int
> > -intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num, bool
> pcm)
> > +intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num)
> >  {
> >  	void __iomem *shim = sdw->link_res->shim;
> >  	unsigned int link_id = sdw->instance;
> >  	int count;
> >
> > -	if (pcm) {
> > -		count = intel_readw(shim, SDW_SHIM_PCMSYCHC(link_id,
> pdi_num));
> > +	count = intel_readw(shim, SDW_SHIM_PCMSYCHC(link_id,
> pdi_num));
> >
> > -		/*
> > -		 * WORKAROUND: on all existing Intel controllers, pdi
> > -		 * number 2 reports channel count as 1 even though it
> > -		 * supports 8 channels. Performing hardcoding for pdi
> > -		 * number 2.
> > -		 */
> > -		if (pdi_num == 2)
> > -			count = 7;
> > -
> > -	} else {
> > -		count = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));
> > -		count = FIELD_GET(SDW_SHIM_PDMSCAP_CPSS, count);
> > -	}
> > +	/*
> > +	 * WORKAROUND: on all existing Intel controllers, pdi
> > +	 * number 2 reports channel count as 1 even though it
> > +	 * supports 8 channels. Performing hardcoding for pdi
> > +	 * number 2.
> > +	 */
> > +	if (pdi_num == 2)
> > +		count = 7;
> >
> >  	/* zero based values for channel count in register */
> >  	count++;
> > @@ -620,12 +604,12 @@ intel_pdi_get_ch_cap(struct sdw_intel *sdw,
> unsigned int pdi_num, bool pcm)
> >  static int intel_pdi_get_ch_update(struct sdw_intel *sdw,
> >  				   struct sdw_cdns_pdi *pdi,
> >  				   unsigned int num_pdi,
> > -				   unsigned int *num_ch, bool pcm)
> > +				   unsigned int *num_ch)
> >  {
> >  	int i, ch_count = 0;
> >
> >  	for (i = 0; i < num_pdi; i++) {
> > -		pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num, pcm);
> > +		pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num);
> >  		ch_count += pdi->ch_count;
> >  		pdi++;
> >  	}
> > @@ -635,25 +619,23 @@ static int intel_pdi_get_ch_update(struct
> sdw_intel *sdw,
> >  }
> >
> >  static int intel_pdi_stream_ch_update(struct sdw_intel *sdw,
> > -				      struct sdw_cdns_streams *stream, bool
> pcm)
> > +				      struct sdw_cdns_streams *stream)
> >  {
> >  	intel_pdi_get_ch_update(sdw, stream->bd, stream->num_bd,
> > -				&stream->num_ch_bd, pcm);
> > +				&stream->num_ch_bd);
> >
> >  	intel_pdi_get_ch_update(sdw, stream->in, stream->num_in,
> > -				&stream->num_ch_in, pcm);
> > +				&stream->num_ch_in);
> >
> >  	intel_pdi_get_ch_update(sdw, stream->out, stream->num_out,
> > -				&stream->num_ch_out, pcm);
> > +				&stream->num_ch_out);
> >
> >  	return 0;
> >  }
> >
> >  static int intel_pdi_ch_update(struct sdw_intel *sdw)
> >  {
> > -	/* First update PCM streams followed by PDM streams */
> > -	intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm, true);
> > -	intel_pdi_stream_ch_update(sdw, &sdw->cdns.pdm, false);
> > +	intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm);
> >
> >  	return 0;
> >  }
> > @@ -840,7 +822,6 @@ static int intel_hw_params(struct
> snd_pcm_substream *substream,
> >  	struct sdw_port_config *pconfig;
> >  	int ch, dir;
> >  	int ret;
> > -	bool pcm = true;
> >
> >  	dma = snd_soc_dai_get_dma_data(dai, substream);
> >  	if (!dma)
> > @@ -852,13 +833,7 @@ static int intel_hw_params(struct
> snd_pcm_substream *substream,
> >  	else
> >  		dir = SDW_DATA_DIR_TX;
> >
> > -	if (dma->stream_type == SDW_STREAM_PDM)
> > -		pcm = false;
> > -
> > -	if (pcm)
> > -		pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pcm, ch, dir, dai->id);
> > -	else
> > -		pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pdm, ch, dir, dai->id);
> > +	pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pcm, ch, dir, dai->id);
> >
> >  	if (!pdi) {
> >  		ret = -EINVAL;
> > @@ -888,12 +863,7 @@ static int intel_hw_params(struct
> snd_pcm_substream *substream,
> >  	sconfig.frame_rate = params_rate(params);
> >  	sconfig.type = dma->stream_type;
> >
> > -	if (dma->stream_type == SDW_STREAM_PDM) {
> > -		sconfig.frame_rate *= 50;
> > -		sconfig.bps = 1;
> > -	} else {
> > -		sconfig.bps =
> snd_pcm_format_width(params_format(params));
> > -	}
> > +	sconfig.bps = snd_pcm_format_width(params_format(params));
> >
> >  	/* Port configuration */
> >  	pconfig = kzalloc(sizeof(*pconfig), GFP_KERNEL);
> > @@ -1012,13 +982,7 @@ static void intel_shutdown(struct
> snd_pcm_substream *substream,
> >  static int intel_pcm_set_sdw_stream(struct snd_soc_dai *dai,
> >  				    void *stream, int direction)
> >  {
> > -	return cdns_set_sdw_stream(dai, stream, true, direction);
> > -}
> > -
> > -static int intel_pdm_set_sdw_stream(struct snd_soc_dai *dai,
> > -				    void *stream, int direction)
> > -{
> > -	return cdns_set_sdw_stream(dai, stream, false, direction);
> > +	return cdns_set_sdw_stream(dai, stream, direction);
> >  }
> >
> >  static void *intel_get_sdw_stream(struct snd_soc_dai *dai,
> > @@ -1133,16 +1097,6 @@ static const struct snd_soc_dai_ops
> intel_pcm_dai_ops = {
> >  	.get_stream = intel_get_sdw_stream,
> >  };
> >
> > -static const struct snd_soc_dai_ops intel_pdm_dai_ops = {
> > -	.startup = intel_startup,
> > -	.hw_params = intel_hw_params,
> > -	.prepare = intel_prepare,
> > -	.hw_free = intel_hw_free,
> > -	.shutdown = intel_shutdown,
> > -	.set_sdw_stream = intel_pdm_set_sdw_stream,
> > -	.get_sdw_stream = intel_get_sdw_stream,
> > -};
> > -
> >  static const struct snd_soc_component_driver dai_component = {
> >  	.name           = "soundwire",
> >  	.suspend	= intel_component_dais_suspend
> > @@ -1151,7 +1105,7 @@ static const struct snd_soc_component_driver
> dai_component = {
> >  static int intel_create_dai(struct sdw_cdns *cdns,
> >  			    struct snd_soc_dai_driver *dais,
> >  			    enum intel_pdi_type type,
> > -			    u32 num, u32 off, u32 max_ch, bool pcm)
> > +			    u32 num, u32 off, u32 max_ch)
> >  {
> >  	int i;
> >
> > @@ -1180,10 +1134,7 @@ static int intel_create_dai(struct sdw_cdns *cdns,
> >  			dais[i].capture.formats =
> SNDRV_PCM_FMTBIT_S16_LE;
> >  		}
> >
> > -		if (pcm)
> > -			dais[i].ops = &intel_pcm_dai_ops;
> > -		else
> > -			dais[i].ops = &intel_pdm_dai_ops;
> > +		dais[i].ops = &intel_pcm_dai_ops;
> >  	}
> >
> >  	return 0;
> > @@ -1197,7 +1148,7 @@ static int intel_register_dai(struct sdw_intel *sdw)
> >  	int num_dai, ret, off = 0;
> >
> >  	/* DAIs are created based on total number of PDIs supported */
> > -	num_dai = cdns->pcm.num_pdi + cdns->pdm.num_pdi;
> > +	num_dai = cdns->pcm.num_pdi;
> >
> >  	dais = devm_kcalloc(cdns->dev, num_dai, sizeof(*dais),
> GFP_KERNEL);
> >  	if (!dais)
> > @@ -1207,39 +1158,19 @@ static int intel_register_dai(struct sdw_intel
> *sdw)
> >  	stream = &cdns->pcm;
> >
> >  	ret = intel_create_dai(cdns, dais, INTEL_PDI_IN, cdns->pcm.num_in,
> > -			       off, stream->num_ch_in, true);
> > +			       off, stream->num_ch_in);
> >  	if (ret)
> >  		return ret;
> >
> >  	off += cdns->pcm.num_in;
> >  	ret = intel_create_dai(cdns, dais, INTEL_PDI_OUT, cdns-
> >pcm.num_out,
> > -			       off, stream->num_ch_out, true);
> > +			       off, stream->num_ch_out);
> >  	if (ret)
> >  		return ret;
> >
> >  	off += cdns->pcm.num_out;
> >  	ret = intel_create_dai(cdns, dais, INTEL_PDI_BD, cdns->pcm.num_bd,
> > -			       off, stream->num_ch_bd, true);
> > -	if (ret)
> > -		return ret;
> > -
> > -	/* Create PDM DAIs */
> > -	stream = &cdns->pdm;
> > -	off += cdns->pcm.num_bd;
> > -	ret = intel_create_dai(cdns, dais, INTEL_PDI_IN, cdns->pdm.num_in,
> > -			       off, stream->num_ch_in, false);
> > -	if (ret)
> > -		return ret;
> > -
> > -	off += cdns->pdm.num_in;
> > -	ret = intel_create_dai(cdns, dais, INTEL_PDI_OUT, cdns-
> >pdm.num_out,
> > -			       off, stream->num_ch_out, false);
> > -	if (ret)
> > -		return ret;
> > -
> > -	off += cdns->pdm.num_out;
> > -	ret = intel_create_dai(cdns, dais, INTEL_PDI_BD, cdns-
> >pdm.num_bd,
> > -			       off, stream->num_ch_bd, false);
> > +			       off, stream->num_ch_bd);
> >  	if (ret)
> >  		return ret;
> >
> > --
> > 2.17.1
> 
> --
> ~Vinod

WARNING: multiple messages have this Message-ID (diff)
From: "Liao, Bard" <bard.liao@intel.com>
To: Vinod Koul <vkoul@kernel.org>,
	Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"tiwai@suse.de" <tiwai@suse.de>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"pierre-louis.bossart@linux.intel.com"
	<pierre-louis.bossart@linux.intel.com>,
	"broonie@kernel.org" <broonie@kernel.org>,
	"srinivas.kandagatla@linaro.org" <srinivas.kandagatla@linaro.org>,
	"Kale, Sanyog R" <sanyog.r.kale@intel.com>
Subject: RE: [PATCH 7/7] soundwire: intel: remove PDM support
Date: Thu, 23 Dec 2021 07:46:36 +0000	[thread overview]
Message-ID: <DM6PR11MB4074FEE19010B83F0CDDE8A9FF7E9@DM6PR11MB4074.namprd11.prod.outlook.com> (raw)
In-Reply-To: <YcQeRJ060/u4n6fR@matsya>

> -----Original Message-----
> From: Vinod Koul <vkoul@kernel.org>
> Sent: Thursday, December 23, 2021 2:59 PM
> To: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: alsa-devel@alsa-project.org; linux-kernel@vger.kernel.org;
> tiwai@suse.de; broonie@kernel.org; gregkh@linuxfoundation.org;
> srinivas.kandagatla@linaro.org; pierre-louis.bossart@linux.intel.com; Kale,
> Sanyog R <sanyog.r.kale@intel.com>; Liao, Bard <bard.liao@intel.com>
> Subject: Re: [PATCH 7/7] soundwire: intel: remove PDM support
> 
> On 13-12-21, 13:46, Bard Liao wrote:
> > From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> >
> > While the hardware supports PDM streams, this capability has never
> > been tested or enabled on any product, so this is dead-code. Let's
> > remove all this.
> 
> So no plans to test and enable this? Do the DMICs not use PDM?

The point is that this code is unused/untested. We can re-add it after
it was tested.

> 
> Again this should not be in this series...

Agree, but since this patche depends on the previous patches, I sent them
together to avoid conflict.

> 
> >
> > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> > Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
> > Reviewed-by: Rander Wang <rander.wang@intel.com>
> > Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> > ---
> >  drivers/soundwire/cadence_master.c |  36 +--------
> >  drivers/soundwire/cadence_master.h |  12 +--
> >  drivers/soundwire/intel.c          | 123 +++++++----------------------
> >  3 files changed, 31 insertions(+), 140 deletions(-)
> >
> > diff --git a/drivers/soundwire/cadence_master.c
> b/drivers/soundwire/cadence_master.c
> > index 4fcc3ba93004..558390af44b6 100644
> > --- a/drivers/soundwire/cadence_master.c
> > +++ b/drivers/soundwire/cadence_master.c
> > @@ -1178,9 +1178,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
> >  	cdns->pcm.num_bd = config.pcm_bd;
> >  	cdns->pcm.num_in = config.pcm_in;
> >  	cdns->pcm.num_out = config.pcm_out;
> > -	cdns->pdm.num_bd = config.pdm_bd;
> > -	cdns->pdm.num_in = config.pdm_in;
> > -	cdns->pdm.num_out = config.pdm_out;
> >
> >  	/* Allocate PDIs for PCMs */
> >  	stream = &cdns->pcm;
> > @@ -1211,32 +1208,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
> >  	stream->num_pdi = stream->num_bd + stream->num_in + stream-
> >num_out;
> >  	cdns->num_ports = stream->num_pdi;
> >
> > -	/* Allocate PDIs for PDMs */
> > -	stream = &cdns->pdm;
> > -	ret = cdns_allocate_pdi(cdns, &stream->bd,
> > -				stream->num_bd, offset);
> > -	if (ret)
> > -		return ret;
> > -
> > -	offset += stream->num_bd;
> > -
> > -	ret = cdns_allocate_pdi(cdns, &stream->in,
> > -				stream->num_in, offset);
> > -	if (ret)
> > -		return ret;
> > -
> > -	offset += stream->num_in;
> > -
> > -	ret = cdns_allocate_pdi(cdns, &stream->out,
> > -				stream->num_out, offset);
> > -
> > -	if (ret)
> > -		return ret;
> > -
> > -	/* Update total number of PDM PDIs */
> > -	stream->num_pdi = stream->num_bd + stream->num_in + stream-
> >num_out;
> > -	cdns->num_ports += stream->num_pdi;
> > -
> >  	return 0;
> >  }
> >  EXPORT_SYMBOL(sdw_cdns_pdi_init);
> > @@ -1681,7 +1652,7 @@ int sdw_cdns_probe(struct sdw_cdns *cdns)
> >  EXPORT_SYMBOL(sdw_cdns_probe);
> >
> >  int cdns_set_sdw_stream(struct snd_soc_dai *dai,
> > -			void *stream, bool pcm, int direction)
> > +			void *stream, int direction)
> >  {
> >  	struct sdw_cdns *cdns = snd_soc_dai_get_drvdata(dai);
> >  	struct sdw_cdns_dma_data *dma;
> > @@ -1705,10 +1676,7 @@ int cdns_set_sdw_stream(struct snd_soc_dai
> *dai,
> >  		if (!dma)
> >  			return -ENOMEM;
> >
> > -		if (pcm)
> > -			dma->stream_type = SDW_STREAM_PCM;
> > -		else
> > -			dma->stream_type = SDW_STREAM_PDM;
> > +		dma->stream_type = SDW_STREAM_PCM;
> >
> >  		dma->bus = &cdns->bus;
> >  		dma->link_id = cdns->instance;
> > diff --git a/drivers/soundwire/cadence_master.h
> b/drivers/soundwire/cadence_master.h
> > index aa4b9b0eb2a8..595d72c15d97 100644
> > --- a/drivers/soundwire/cadence_master.h
> > +++ b/drivers/soundwire/cadence_master.h
> > @@ -17,7 +17,7 @@
> >   * @h_ch_num: high channel for PDI
> >   * @ch_count: total channel count for PDI
> >   * @dir: data direction
> > - * @type: stream type, PDM or PCM
> > + * @type: stream type, (only PCM supported)
> >   */
> >  struct sdw_cdns_pdi {
> >  	int num;
> > @@ -62,17 +62,11 @@ struct sdw_cdns_streams {
> >   * @pcm_bd: number of bidirectional PCM streams supported
> >   * @pcm_in: number of input PCM streams supported
> >   * @pcm_out: number of output PCM streams supported
> > - * @pdm_bd: number of bidirectional PDM streams supported
> > - * @pdm_in: number of input PDM streams supported
> > - * @pdm_out: number of output PDM streams supported
> >   */
> >  struct sdw_cdns_stream_config {
> >  	unsigned int pcm_bd;
> >  	unsigned int pcm_in;
> >  	unsigned int pcm_out;
> > -	unsigned int pdm_bd;
> > -	unsigned int pdm_in;
> > -	unsigned int pdm_out;
> >  };
> >
> >  /**
> > @@ -111,7 +105,6 @@ struct sdw_cdns_dma_data {
> >   * @ports: Data ports
> >   * @num_ports: Total number of data ports
> >   * @pcm: PCM streams
> > - * @pdm: PDM streams
> >   * @registers: Cadence registers
> >   * @link_up: Link status
> >   * @msg_count: Messages sent on bus
> > @@ -129,7 +122,6 @@ struct sdw_cdns {
> >  	int num_ports;
> >
> >  	struct sdw_cdns_streams pcm;
> > -	struct sdw_cdns_streams pdm;
> >
> >  	int pdi_loopback_source;
> >  	int pdi_loopback_target;
> > @@ -188,7 +180,7 @@ cdns_xfer_msg_defer(struct sdw_bus *bus,
> >  int cdns_bus_conf(struct sdw_bus *bus, struct sdw_bus_params
> *params);
> >
> >  int cdns_set_sdw_stream(struct snd_soc_dai *dai,
> > -			void *stream, bool pcm, int direction);
> > +			void *stream, int direction);
> >
> >  void sdw_cdns_check_self_clearing_bits(struct sdw_cdns *cdns, const
> char *string,
> >  				       bool initial_delay, int reset_iterations);
> > diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
> > index 45ea55a7d0c8..79ba0e3f6dac 100644
> > --- a/drivers/soundwire/intel.c
> > +++ b/drivers/soundwire/intel.c
> > @@ -564,7 +564,7 @@ static void intel_pdi_init(struct sdw_intel *sdw,
> >  {
> >  	void __iomem *shim = sdw->link_res->shim;
> >  	unsigned int link_id = sdw->instance;
> > -	int pcm_cap, pdm_cap;
> > +	int pcm_cap;
> >
> >  	/* PCM Stream Capability */
> >  	pcm_cap = intel_readw(shim, SDW_SHIM_PCMSCAP(link_id));
> > @@ -575,41 +575,25 @@ static void intel_pdi_init(struct sdw_intel *sdw,
> >
> >  	dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n",
> >  		config->pcm_bd, config->pcm_in, config->pcm_out);
> > -
> > -	/* PDM Stream Capability */
> > -	pdm_cap = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));
> > -
> > -	config->pdm_bd = FIELD_GET(SDW_SHIM_PDMSCAP_BSS,
> pdm_cap);
> > -	config->pdm_in = FIELD_GET(SDW_SHIM_PDMSCAP_ISS, pdm_cap);
> > -	config->pdm_out = FIELD_GET(SDW_SHIM_PDMSCAP_OSS,
> pdm_cap);
> > -
> > -	dev_dbg(sdw->cdns.dev, "PDM cap bd:%d in:%d out:%d\n",
> > -		config->pdm_bd, config->pdm_in, config->pdm_out);
> >  }
> >
> >  static int
> > -intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num, bool
> pcm)
> > +intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num)
> >  {
> >  	void __iomem *shim = sdw->link_res->shim;
> >  	unsigned int link_id = sdw->instance;
> >  	int count;
> >
> > -	if (pcm) {
> > -		count = intel_readw(shim, SDW_SHIM_PCMSYCHC(link_id,
> pdi_num));
> > +	count = intel_readw(shim, SDW_SHIM_PCMSYCHC(link_id,
> pdi_num));
> >
> > -		/*
> > -		 * WORKAROUND: on all existing Intel controllers, pdi
> > -		 * number 2 reports channel count as 1 even though it
> > -		 * supports 8 channels. Performing hardcoding for pdi
> > -		 * number 2.
> > -		 */
> > -		if (pdi_num == 2)
> > -			count = 7;
> > -
> > -	} else {
> > -		count = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));
> > -		count = FIELD_GET(SDW_SHIM_PDMSCAP_CPSS, count);
> > -	}
> > +	/*
> > +	 * WORKAROUND: on all existing Intel controllers, pdi
> > +	 * number 2 reports channel count as 1 even though it
> > +	 * supports 8 channels. Performing hardcoding for pdi
> > +	 * number 2.
> > +	 */
> > +	if (pdi_num == 2)
> > +		count = 7;
> >
> >  	/* zero based values for channel count in register */
> >  	count++;
> > @@ -620,12 +604,12 @@ intel_pdi_get_ch_cap(struct sdw_intel *sdw,
> unsigned int pdi_num, bool pcm)
> >  static int intel_pdi_get_ch_update(struct sdw_intel *sdw,
> >  				   struct sdw_cdns_pdi *pdi,
> >  				   unsigned int num_pdi,
> > -				   unsigned int *num_ch, bool pcm)
> > +				   unsigned int *num_ch)
> >  {
> >  	int i, ch_count = 0;
> >
> >  	for (i = 0; i < num_pdi; i++) {
> > -		pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num, pcm);
> > +		pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num);
> >  		ch_count += pdi->ch_count;
> >  		pdi++;
> >  	}
> > @@ -635,25 +619,23 @@ static int intel_pdi_get_ch_update(struct
> sdw_intel *sdw,
> >  }
> >
> >  static int intel_pdi_stream_ch_update(struct sdw_intel *sdw,
> > -				      struct sdw_cdns_streams *stream, bool
> pcm)
> > +				      struct sdw_cdns_streams *stream)
> >  {
> >  	intel_pdi_get_ch_update(sdw, stream->bd, stream->num_bd,
> > -				&stream->num_ch_bd, pcm);
> > +				&stream->num_ch_bd);
> >
> >  	intel_pdi_get_ch_update(sdw, stream->in, stream->num_in,
> > -				&stream->num_ch_in, pcm);
> > +				&stream->num_ch_in);
> >
> >  	intel_pdi_get_ch_update(sdw, stream->out, stream->num_out,
> > -				&stream->num_ch_out, pcm);
> > +				&stream->num_ch_out);
> >
> >  	return 0;
> >  }
> >
> >  static int intel_pdi_ch_update(struct sdw_intel *sdw)
> >  {
> > -	/* First update PCM streams followed by PDM streams */
> > -	intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm, true);
> > -	intel_pdi_stream_ch_update(sdw, &sdw->cdns.pdm, false);
> > +	intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm);
> >
> >  	return 0;
> >  }
> > @@ -840,7 +822,6 @@ static int intel_hw_params(struct
> snd_pcm_substream *substream,
> >  	struct sdw_port_config *pconfig;
> >  	int ch, dir;
> >  	int ret;
> > -	bool pcm = true;
> >
> >  	dma = snd_soc_dai_get_dma_data(dai, substream);
> >  	if (!dma)
> > @@ -852,13 +833,7 @@ static int intel_hw_params(struct
> snd_pcm_substream *substream,
> >  	else
> >  		dir = SDW_DATA_DIR_TX;
> >
> > -	if (dma->stream_type == SDW_STREAM_PDM)
> > -		pcm = false;
> > -
> > -	if (pcm)
> > -		pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pcm, ch, dir, dai->id);
> > -	else
> > -		pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pdm, ch, dir, dai->id);
> > +	pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pcm, ch, dir, dai->id);
> >
> >  	if (!pdi) {
> >  		ret = -EINVAL;
> > @@ -888,12 +863,7 @@ static int intel_hw_params(struct
> snd_pcm_substream *substream,
> >  	sconfig.frame_rate = params_rate(params);
> >  	sconfig.type = dma->stream_type;
> >
> > -	if (dma->stream_type == SDW_STREAM_PDM) {
> > -		sconfig.frame_rate *= 50;
> > -		sconfig.bps = 1;
> > -	} else {
> > -		sconfig.bps =
> snd_pcm_format_width(params_format(params));
> > -	}
> > +	sconfig.bps = snd_pcm_format_width(params_format(params));
> >
> >  	/* Port configuration */
> >  	pconfig = kzalloc(sizeof(*pconfig), GFP_KERNEL);
> > @@ -1012,13 +982,7 @@ static void intel_shutdown(struct
> snd_pcm_substream *substream,
> >  static int intel_pcm_set_sdw_stream(struct snd_soc_dai *dai,
> >  				    void *stream, int direction)
> >  {
> > -	return cdns_set_sdw_stream(dai, stream, true, direction);
> > -}
> > -
> > -static int intel_pdm_set_sdw_stream(struct snd_soc_dai *dai,
> > -				    void *stream, int direction)
> > -{
> > -	return cdns_set_sdw_stream(dai, stream, false, direction);
> > +	return cdns_set_sdw_stream(dai, stream, direction);
> >  }
> >
> >  static void *intel_get_sdw_stream(struct snd_soc_dai *dai,
> > @@ -1133,16 +1097,6 @@ static const struct snd_soc_dai_ops
> intel_pcm_dai_ops = {
> >  	.get_stream = intel_get_sdw_stream,
> >  };
> >
> > -static const struct snd_soc_dai_ops intel_pdm_dai_ops = {
> > -	.startup = intel_startup,
> > -	.hw_params = intel_hw_params,
> > -	.prepare = intel_prepare,
> > -	.hw_free = intel_hw_free,
> > -	.shutdown = intel_shutdown,
> > -	.set_sdw_stream = intel_pdm_set_sdw_stream,
> > -	.get_sdw_stream = intel_get_sdw_stream,
> > -};
> > -
> >  static const struct snd_soc_component_driver dai_component = {
> >  	.name           = "soundwire",
> >  	.suspend	= intel_component_dais_suspend
> > @@ -1151,7 +1105,7 @@ static const struct snd_soc_component_driver
> dai_component = {
> >  static int intel_create_dai(struct sdw_cdns *cdns,
> >  			    struct snd_soc_dai_driver *dais,
> >  			    enum intel_pdi_type type,
> > -			    u32 num, u32 off, u32 max_ch, bool pcm)
> > +			    u32 num, u32 off, u32 max_ch)
> >  {
> >  	int i;
> >
> > @@ -1180,10 +1134,7 @@ static int intel_create_dai(struct sdw_cdns *cdns,
> >  			dais[i].capture.formats =
> SNDRV_PCM_FMTBIT_S16_LE;
> >  		}
> >
> > -		if (pcm)
> > -			dais[i].ops = &intel_pcm_dai_ops;
> > -		else
> > -			dais[i].ops = &intel_pdm_dai_ops;
> > +		dais[i].ops = &intel_pcm_dai_ops;
> >  	}
> >
> >  	return 0;
> > @@ -1197,7 +1148,7 @@ static int intel_register_dai(struct sdw_intel *sdw)
> >  	int num_dai, ret, off = 0;
> >
> >  	/* DAIs are created based on total number of PDIs supported */
> > -	num_dai = cdns->pcm.num_pdi + cdns->pdm.num_pdi;
> > +	num_dai = cdns->pcm.num_pdi;
> >
> >  	dais = devm_kcalloc(cdns->dev, num_dai, sizeof(*dais),
> GFP_KERNEL);
> >  	if (!dais)
> > @@ -1207,39 +1158,19 @@ static int intel_register_dai(struct sdw_intel
> *sdw)
> >  	stream = &cdns->pcm;
> >
> >  	ret = intel_create_dai(cdns, dais, INTEL_PDI_IN, cdns->pcm.num_in,
> > -			       off, stream->num_ch_in, true);
> > +			       off, stream->num_ch_in);
> >  	if (ret)
> >  		return ret;
> >
> >  	off += cdns->pcm.num_in;
> >  	ret = intel_create_dai(cdns, dais, INTEL_PDI_OUT, cdns-
> >pcm.num_out,
> > -			       off, stream->num_ch_out, true);
> > +			       off, stream->num_ch_out);
> >  	if (ret)
> >  		return ret;
> >
> >  	off += cdns->pcm.num_out;
> >  	ret = intel_create_dai(cdns, dais, INTEL_PDI_BD, cdns->pcm.num_bd,
> > -			       off, stream->num_ch_bd, true);
> > -	if (ret)
> > -		return ret;
> > -
> > -	/* Create PDM DAIs */
> > -	stream = &cdns->pdm;
> > -	off += cdns->pcm.num_bd;
> > -	ret = intel_create_dai(cdns, dais, INTEL_PDI_IN, cdns->pdm.num_in,
> > -			       off, stream->num_ch_in, false);
> > -	if (ret)
> > -		return ret;
> > -
> > -	off += cdns->pdm.num_in;
> > -	ret = intel_create_dai(cdns, dais, INTEL_PDI_OUT, cdns-
> >pdm.num_out,
> > -			       off, stream->num_ch_out, false);
> > -	if (ret)
> > -		return ret;
> > -
> > -	off += cdns->pdm.num_out;
> > -	ret = intel_create_dai(cdns, dais, INTEL_PDI_BD, cdns-
> >pdm.num_bd,
> > -			       off, stream->num_ch_bd, false);
> > +			       off, stream->num_ch_bd);
> >  	if (ret)
> >  		return ret;
> >
> > --
> > 2.17.1
> 
> --
> ~Vinod

  reply	other threads:[~2021-12-23  7:46 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-13  5:46 [PATCH 0/7] ASoC/SoundWire: improve suspend flows and use set_stream() instead of set_tdm_slots() for HDAudio Bard Liao
2021-12-13  5:46 ` Bard Liao
2021-12-13  5:46 ` [PATCH 1/7] ASOC: SOF: Intel: use snd_soc_dai_get_widget() Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-13  5:46 ` [PATCH 2/7] ASoC/soundwire: intel: simplify callbacks for params/hw_free Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-23 16:30   ` Vinod Koul
2021-12-23 16:30     ` Vinod Koul
2021-12-13  5:46 ` [PATCH 3/7] soundwire: intel: improve suspend flows Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-23  6:56   ` Vinod Koul
2021-12-23  6:56     ` Vinod Koul
2021-12-13  5:46 ` [PATCH 4/7] ASoC/SoundWire: dai: expand 'stream' concept beyond SoundWire Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-23 16:35   ` Vinod Koul
2021-12-23 16:35     ` Vinod Koul
2021-12-13  5:46 ` [PATCH 5/7] ASoC: Intel/SOF: use set_stream() instead of set_tdm_slots() for HDAudio Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-13  5:46 ` [PATCH 6/7] soundwire: intel: remove unnecessary init Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-23  6:58   ` Vinod Koul
2021-12-23  6:58     ` Vinod Koul
2021-12-13  5:46 ` [PATCH 7/7] soundwire: intel: remove PDM support Bard Liao
2021-12-13  5:46   ` Bard Liao
2021-12-23  6:59   ` Vinod Koul
2021-12-23  6:59     ` Vinod Koul
2021-12-23  7:46     ` Liao, Bard [this message]
2021-12-23  7:46       ` Liao, Bard
2021-12-23 11:05       ` Vinod Koul
2021-12-23 11:05         ` Vinod Koul
2021-12-23 12:29         ` Liao, Bard
2021-12-23 12:29           ` Liao, Bard
2022-01-10 16:32           ` Pierre-Louis Bossart
2021-12-23 16:35   ` Vinod Koul
2021-12-23 16:35     ` Vinod Koul
2021-12-23 18:26   ` Mark Brown
2021-12-23 18:26     ` Mark Brown
2021-12-24  1:38     ` Liao, Bard
2021-12-24  1:38       ` Liao, Bard
2021-12-21 18:09 ` [PATCH 0/7] ASoC/SoundWire: improve suspend flows and use set_stream() instead of set_tdm_slots() for HDAudio Mark Brown
2021-12-21 18:09   ` Mark Brown
2021-12-22 13:47   ` Liao, Bard
2021-12-22 13:47     ` Liao, Bard
2021-12-23  5:19     ` Vinod Koul
2021-12-23  5:19       ` Vinod Koul
2021-12-24 16:17 ` Mark Brown
2021-12-24 16:17   ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DM6PR11MB4074FEE19010B83F0CDDE8A9FF7E9@DM6PR11MB4074.namprd11.prod.outlook.com \
    --to=bard.liao@intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=sanyog.r.kale@intel.com \
    --cc=srinivas.kandagatla@linaro.org \
    --cc=tiwai@suse.de \
    --cc=vkoul@kernel.org \
    --cc=yung-chuan.liao@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.