Commit 63a6aa96 authored by Pierre-Louis Bossart's avatar Pierre-Louis Bossart Committed by Mark Brown

soundwire: intel: remove PDM support

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.
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarRander Wang <rander.wang@intel.com>
Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Acked-By: default avatarVinod Koul <vkoul@kernel.org>
Link: https://lore.kernel.org/r/20211224021034.26635-8-yung-chuan.liao@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 9283b6f9
...@@ -1178,9 +1178,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns, ...@@ -1178,9 +1178,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
cdns->pcm.num_bd = config.pcm_bd; cdns->pcm.num_bd = config.pcm_bd;
cdns->pcm.num_in = config.pcm_in; cdns->pcm.num_in = config.pcm_in;
cdns->pcm.num_out = config.pcm_out; 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 */ /* Allocate PDIs for PCMs */
stream = &cdns->pcm; stream = &cdns->pcm;
...@@ -1211,32 +1208,6 @@ int sdw_cdns_pdi_init(struct sdw_cdns *cdns, ...@@ -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; stream->num_pdi = stream->num_bd + stream->num_in + stream->num_out;
cdns->num_ports = stream->num_pdi; 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; return 0;
} }
EXPORT_SYMBOL(sdw_cdns_pdi_init); EXPORT_SYMBOL(sdw_cdns_pdi_init);
...@@ -1681,7 +1652,7 @@ int sdw_cdns_probe(struct sdw_cdns *cdns) ...@@ -1681,7 +1652,7 @@ int sdw_cdns_probe(struct sdw_cdns *cdns)
EXPORT_SYMBOL(sdw_cdns_probe); EXPORT_SYMBOL(sdw_cdns_probe);
int cdns_set_sdw_stream(struct snd_soc_dai *dai, 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 *cdns = snd_soc_dai_get_drvdata(dai);
struct sdw_cdns_dma_data *dma; struct sdw_cdns_dma_data *dma;
...@@ -1705,10 +1676,7 @@ int cdns_set_sdw_stream(struct snd_soc_dai *dai, ...@@ -1705,10 +1676,7 @@ int cdns_set_sdw_stream(struct snd_soc_dai *dai,
if (!dma) if (!dma)
return -ENOMEM; return -ENOMEM;
if (pcm) dma->stream_type = SDW_STREAM_PCM;
dma->stream_type = SDW_STREAM_PCM;
else
dma->stream_type = SDW_STREAM_PDM;
dma->bus = &cdns->bus; dma->bus = &cdns->bus;
dma->link_id = cdns->instance; dma->link_id = cdns->instance;
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* @h_ch_num: high channel for PDI * @h_ch_num: high channel for PDI
* @ch_count: total channel count for PDI * @ch_count: total channel count for PDI
* @dir: data direction * @dir: data direction
* @type: stream type, PDM or PCM * @type: stream type, (only PCM supported)
*/ */
struct sdw_cdns_pdi { struct sdw_cdns_pdi {
int num; int num;
...@@ -62,17 +62,11 @@ struct sdw_cdns_streams { ...@@ -62,17 +62,11 @@ struct sdw_cdns_streams {
* @pcm_bd: number of bidirectional PCM streams supported * @pcm_bd: number of bidirectional PCM streams supported
* @pcm_in: number of input PCM streams supported * @pcm_in: number of input PCM streams supported
* @pcm_out: number of output 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 { struct sdw_cdns_stream_config {
unsigned int pcm_bd; unsigned int pcm_bd;
unsigned int pcm_in; unsigned int pcm_in;
unsigned int pcm_out; 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 { ...@@ -111,7 +105,6 @@ struct sdw_cdns_dma_data {
* @ports: Data ports * @ports: Data ports
* @num_ports: Total number of data ports * @num_ports: Total number of data ports
* @pcm: PCM streams * @pcm: PCM streams
* @pdm: PDM streams
* @registers: Cadence registers * @registers: Cadence registers
* @link_up: Link status * @link_up: Link status
* @msg_count: Messages sent on bus * @msg_count: Messages sent on bus
...@@ -129,7 +122,6 @@ struct sdw_cdns { ...@@ -129,7 +122,6 @@ struct sdw_cdns {
int num_ports; int num_ports;
struct sdw_cdns_streams pcm; struct sdw_cdns_streams pcm;
struct sdw_cdns_streams pdm;
int pdi_loopback_source; int pdi_loopback_source;
int pdi_loopback_target; int pdi_loopback_target;
...@@ -188,7 +180,7 @@ cdns_xfer_msg_defer(struct sdw_bus *bus, ...@@ -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_bus_conf(struct sdw_bus *bus, struct sdw_bus_params *params);
int cdns_set_sdw_stream(struct snd_soc_dai *dai, 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, void sdw_cdns_check_self_clearing_bits(struct sdw_cdns *cdns, const char *string,
bool initial_delay, int reset_iterations); bool initial_delay, int reset_iterations);
......
...@@ -564,7 +564,7 @@ static void intel_pdi_init(struct sdw_intel *sdw, ...@@ -564,7 +564,7 @@ static void intel_pdi_init(struct sdw_intel *sdw,
{ {
void __iomem *shim = sdw->link_res->shim; void __iomem *shim = sdw->link_res->shim;
unsigned int link_id = sdw->instance; unsigned int link_id = sdw->instance;
int pcm_cap, pdm_cap; int pcm_cap;
/* PCM Stream Capability */ /* PCM Stream Capability */
pcm_cap = intel_readw(shim, SDW_SHIM_PCMSCAP(link_id)); pcm_cap = intel_readw(shim, SDW_SHIM_PCMSCAP(link_id));
...@@ -575,41 +575,25 @@ static void intel_pdi_init(struct sdw_intel *sdw, ...@@ -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", dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n",
config->pcm_bd, config->pcm_in, config->pcm_out); 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 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; void __iomem *shim = sdw->link_res->shim;
unsigned int link_id = sdw->instance; unsigned int link_id = sdw->instance;
int count; 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 * WORKAROUND: on all existing Intel controllers, pdi
* number 2 reports channel count as 1 even though it * number 2 reports channel count as 1 even though it
* supports 8 channels. Performing hardcoding for pdi * supports 8 channels. Performing hardcoding for pdi
* number 2. * number 2.
*/ */
if (pdi_num == 2) if (pdi_num == 2)
count = 7; count = 7;
} else {
count = intel_readw(shim, SDW_SHIM_PDMSCAP(link_id));
count = FIELD_GET(SDW_SHIM_PDMSCAP_CPSS, count);
}
/* zero based values for channel count in register */ /* zero based values for channel count in register */
count++; count++;
...@@ -620,12 +604,12 @@ intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num, bool pcm) ...@@ -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, static int intel_pdi_get_ch_update(struct sdw_intel *sdw,
struct sdw_cdns_pdi *pdi, struct sdw_cdns_pdi *pdi,
unsigned int num_pdi, unsigned int num_pdi,
unsigned int *num_ch, bool pcm) unsigned int *num_ch)
{ {
int i, ch_count = 0; int i, ch_count = 0;
for (i = 0; i < num_pdi; i++) { 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; ch_count += pdi->ch_count;
pdi++; pdi++;
} }
...@@ -635,25 +619,23 @@ static int intel_pdi_get_ch_update(struct sdw_intel *sdw, ...@@ -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, 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, 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, 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, intel_pdi_get_ch_update(sdw, stream->out, stream->num_out,
&stream->num_ch_out, pcm); &stream->num_ch_out);
return 0; return 0;
} }
static int intel_pdi_ch_update(struct sdw_intel *sdw) 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);
intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm, true);
intel_pdi_stream_ch_update(sdw, &sdw->cdns.pdm, false);
return 0; return 0;
} }
...@@ -840,7 +822,6 @@ static int intel_hw_params(struct snd_pcm_substream *substream, ...@@ -840,7 +822,6 @@ static int intel_hw_params(struct snd_pcm_substream *substream,
struct sdw_port_config *pconfig; struct sdw_port_config *pconfig;
int ch, dir; int ch, dir;
int ret; int ret;
bool pcm = true;
dma = snd_soc_dai_get_dma_data(dai, substream); dma = snd_soc_dai_get_dma_data(dai, substream);
if (!dma) if (!dma)
...@@ -852,13 +833,7 @@ static int intel_hw_params(struct snd_pcm_substream *substream, ...@@ -852,13 +833,7 @@ static int intel_hw_params(struct snd_pcm_substream *substream,
else else
dir = SDW_DATA_DIR_TX; dir = SDW_DATA_DIR_TX;
if (dma->stream_type == SDW_STREAM_PDM) pdi = sdw_cdns_alloc_pdi(cdns, &cdns->pcm, ch, dir, dai->id);
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);
if (!pdi) { if (!pdi) {
ret = -EINVAL; ret = -EINVAL;
...@@ -888,12 +863,7 @@ static int intel_hw_params(struct snd_pcm_substream *substream, ...@@ -888,12 +863,7 @@ static int intel_hw_params(struct snd_pcm_substream *substream,
sconfig.frame_rate = params_rate(params); sconfig.frame_rate = params_rate(params);
sconfig.type = dma->stream_type; sconfig.type = dma->stream_type;
if (dma->stream_type == SDW_STREAM_PDM) { sconfig.bps = snd_pcm_format_width(params_format(params));
sconfig.frame_rate *= 50;
sconfig.bps = 1;
} else {
sconfig.bps = snd_pcm_format_width(params_format(params));
}
/* Port configuration */ /* Port configuration */
pconfig = kzalloc(sizeof(*pconfig), GFP_KERNEL); pconfig = kzalloc(sizeof(*pconfig), GFP_KERNEL);
...@@ -1012,13 +982,7 @@ static void intel_shutdown(struct snd_pcm_substream *substream, ...@@ -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, static int intel_pcm_set_sdw_stream(struct snd_soc_dai *dai,
void *stream, int direction) void *stream, int direction)
{ {
return cdns_set_sdw_stream(dai, stream, true, direction); return cdns_set_sdw_stream(dai, stream, 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);
} }
static void *intel_get_sdw_stream(struct snd_soc_dai *dai, 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 = { ...@@ -1133,16 +1097,6 @@ static const struct snd_soc_dai_ops intel_pcm_dai_ops = {
.get_stream = intel_get_sdw_stream, .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_stream = intel_pdm_set_sdw_stream,
.get_stream = intel_get_sdw_stream,
};
static const struct snd_soc_component_driver dai_component = { static const struct snd_soc_component_driver dai_component = {
.name = "soundwire", .name = "soundwire",
.suspend = intel_component_dais_suspend .suspend = intel_component_dais_suspend
...@@ -1151,7 +1105,7 @@ static const struct snd_soc_component_driver dai_component = { ...@@ -1151,7 +1105,7 @@ static const struct snd_soc_component_driver dai_component = {
static int intel_create_dai(struct sdw_cdns *cdns, static int intel_create_dai(struct sdw_cdns *cdns,
struct snd_soc_dai_driver *dais, struct snd_soc_dai_driver *dais,
enum intel_pdi_type type, enum intel_pdi_type type,
u32 num, u32 off, u32 max_ch, bool pcm) u32 num, u32 off, u32 max_ch)
{ {
int i; int i;
...@@ -1180,10 +1134,7 @@ static int intel_create_dai(struct sdw_cdns *cdns, ...@@ -1180,10 +1134,7 @@ static int intel_create_dai(struct sdw_cdns *cdns,
dais[i].capture.formats = SNDRV_PCM_FMTBIT_S16_LE; dais[i].capture.formats = SNDRV_PCM_FMTBIT_S16_LE;
} }
if (pcm) dais[i].ops = &intel_pcm_dai_ops;
dais[i].ops = &intel_pcm_dai_ops;
else
dais[i].ops = &intel_pdm_dai_ops;
} }
return 0; return 0;
...@@ -1197,7 +1148,7 @@ static int intel_register_dai(struct sdw_intel *sdw) ...@@ -1197,7 +1148,7 @@ static int intel_register_dai(struct sdw_intel *sdw)
int num_dai, ret, off = 0; int num_dai, ret, off = 0;
/* DAIs are created based on total number of PDIs supported */ /* 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); dais = devm_kcalloc(cdns->dev, num_dai, sizeof(*dais), GFP_KERNEL);
if (!dais) if (!dais)
...@@ -1207,39 +1158,19 @@ static int intel_register_dai(struct sdw_intel *sdw) ...@@ -1207,39 +1158,19 @@ static int intel_register_dai(struct sdw_intel *sdw)
stream = &cdns->pcm; stream = &cdns->pcm;
ret = intel_create_dai(cdns, dais, INTEL_PDI_IN, cdns->pcm.num_in, 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) if (ret)
return ret; return ret;
off += cdns->pcm.num_in; off += cdns->pcm.num_in;
ret = intel_create_dai(cdns, dais, INTEL_PDI_OUT, cdns->pcm.num_out, 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) if (ret)
return ret; return ret;
off += cdns->pcm.num_out; off += cdns->pcm.num_out;
ret = intel_create_dai(cdns, dais, INTEL_PDI_BD, cdns->pcm.num_bd, ret = intel_create_dai(cdns, dais, INTEL_PDI_BD, cdns->pcm.num_bd,
off, stream->num_ch_bd, true); off, stream->num_ch_bd);
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);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment