From: Vinod Koul <vkoul@kernel.org>
To: Bard Liao <yung-chuan.liao@linux.intel.com>
Cc: alsa-devel@alsa-project.org, tiwai@suse.de,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
pierre-louis.bossart@linux.intel.com, broonie@kernel.org,
srinivas.kandagatla@linaro.org, sanyog.r.kale@intel.com,
bard.liao@intel.com
Subject: Re: [PATCH 7/7] soundwire: intel: remove PDM support
Date: Thu, 23 Dec 2021 12:29:16 +0530 [thread overview]
Message-ID: <YcQeRJ060/u4n6fR@matsya> (raw)
In-Reply-To: <20211213054634.30088-8-yung-chuan.liao@linux.intel.com>
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?
Again this should not be in this series...
>
> 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: Vinod Koul <vkoul@kernel.org>
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, sanyog.r.kale@intel.com,
bard.liao@intel.com
Subject: Re: [PATCH 7/7] soundwire: intel: remove PDM support
Date: Thu, 23 Dec 2021 12:29:16 +0530 [thread overview]
Message-ID: <YcQeRJ060/u4n6fR@matsya> (raw)
In-Reply-To: <20211213054634.30088-8-yung-chuan.liao@linux.intel.com>
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?
Again this should not be in this series...
>
> 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
next prev parent reply other threads:[~2021-12-23 7:00 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 [this message]
2021-12-23 6:59 ` Vinod Koul
2021-12-23 7:46 ` Liao, Bard
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=YcQeRJ060/u4n6fR@matsya \
--to=vkoul@kernel.org \
--cc=alsa-devel@alsa-project.org \
--cc=bard.liao@intel.com \
--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=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.