[PATCH 1/5] ASoC: samsung: remove DMA filter function and data
From: Arnd Bergmann arnd@arndb.de
This data is no longer passed by the platform code, so there is no point passing it down at all.
Signed-off-by: Arnd Bergmann arnd@arndb.de --- include/linux/platform_data/asoc-s3c.h | 6 ------ sound/soc/samsung/dma.h | 2 +- sound/soc/samsung/dmaengine.c | 3 +-- sound/soc/samsung/i2s.c | 21 +++------------------ sound/soc/samsung/pcm.c | 11 +---------- sound/soc/samsung/spdif.c | 9 +-------- 6 files changed, 7 insertions(+), 45 deletions(-)
diff --git a/include/linux/platform_data/asoc-s3c.h b/include/linux/platform_data/asoc-s3c.h index f9c00f839e9f..84874433cf21 100644 --- a/include/linux/platform_data/asoc-s3c.h +++ b/include/linux/platform_data/asoc-s3c.h @@ -30,7 +30,6 @@ struct samsung_i2s_type { #define QUIRK_SUPPORTS_IDMA (1 << 5) /* Quirks of the I2S controller */ u32 quirks; - dma_addr_t idma_addr; };
/** @@ -39,10 +38,5 @@ struct samsung_i2s_type { */ struct s3c_audio_pdata { int (*cfg_gpio)(struct platform_device *); - dma_filter_fn dma_filter; - void *dma_playback; - void *dma_capture; - void *dma_play_sec; - void *dma_capture_mic; struct samsung_i2s_type type; }; diff --git a/sound/soc/samsung/dma.h b/sound/soc/samsung/dma.h index 7b5d4556e0fd..bd0faf84972e 100644 --- a/sound/soc/samsung/dma.h +++ b/sound/soc/samsung/dma.h @@ -12,7 +12,7 @@ * @tx, @rx arguments can be NULL if the DMA channel names are "tx", "rx", * otherwise actual DMA channel names must be passed to this function. */ -int samsung_asoc_dma_platform_register(struct device *dev, dma_filter_fn filter, +int samsung_asoc_dma_platform_register(struct device *dev, const char *tx, const char *rx, struct device *dma_dev); #endif /* _SAMSUNG_DMA_H */ diff --git a/sound/soc/samsung/dmaengine.c b/sound/soc/samsung/dmaengine.c index 2802789a323e..900953ee3786 100644 --- a/sound/soc/samsung/dmaengine.c +++ b/sound/soc/samsung/dmaengine.c @@ -14,7 +14,7 @@
#include "dma.h"
-int samsung_asoc_dma_platform_register(struct device *dev, dma_filter_fn filter, +int samsung_asoc_dma_platform_register(struct device *dev, const char *tx, const char *rx, struct device *dma_dev) { @@ -25,7 +25,6 @@ int samsung_asoc_dma_platform_register(struct device *dev, dma_filter_fn filter, return -ENOMEM;
pcm_conf->prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config; - pcm_conf->compat_filter_fn = filter; pcm_conf->dma_dev = dma_dev;
pcm_conf->chan_names[SNDRV_PCM_STREAM_PLAYBACK] = tx; diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index 9505200f3d11..052c263c126a 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -79,7 +79,6 @@ struct i2s_dai { struct snd_dmaengine_dai_dma_data dma_playback; struct snd_dmaengine_dai_dma_data dma_capture; struct snd_dmaengine_dai_dma_data idma_playback; - dma_filter_fn filter;
struct samsung_i2s_priv *priv; }; @@ -1431,13 +1430,7 @@ static int samsung_i2s_probe(struct platform_device *pdev) spin_lock_init(&priv->lock); spin_lock_init(&priv->pcm_lock);
- if (!np) { - pri_dai->dma_playback.filter_data = i2s_pdata->dma_playback; - pri_dai->dma_capture.filter_data = i2s_pdata->dma_capture; - pri_dai->filter = i2s_pdata->dma_filter; - - idma_addr = i2s_pdata->type.idma_addr; - } else { + if (np) { if (of_property_read_u32(np, "samsung,idma-addr", &idma_addr)) { if (priv->quirks & QUIRK_SUPPORTS_IDMA) { @@ -1475,8 +1468,7 @@ static int samsung_i2s_probe(struct platform_device *pdev) if (priv->quirks & QUIRK_PRI_6CHAN) pri_dai->drv->playback.channels_max = 6;
- ret = samsung_asoc_dma_platform_register(&pdev->dev, pri_dai->filter, - "tx", "rx", NULL); + ret = samsung_asoc_dma_platform_register(&pdev->dev, "tx", "rx", NULL); if (ret < 0) goto err_disable_clk;
@@ -1485,12 +1477,6 @@ static int samsung_i2s_probe(struct platform_device *pdev)
sec_dai->dma_playback.addr = regs_base + I2STXDS; sec_dai->dma_playback.chan_name = "tx-sec"; - - if (!np) { - sec_dai->dma_playback.filter_data = i2s_pdata->dma_play_sec; - sec_dai->filter = i2s_pdata->dma_filter; - } - sec_dai->dma_playback.addr_width = 4; sec_dai->idma_playback.addr = idma_addr; sec_dai->pri_dai = pri_dai; @@ -1502,8 +1488,7 @@ static int samsung_i2s_probe(struct platform_device *pdev) goto err_disable_clk;
ret = samsung_asoc_dma_platform_register(&priv->pdev_sec->dev, - sec_dai->filter, "tx-sec", NULL, - &pdev->dev); + "tx-sec", NULL, &pdev->dev); if (ret < 0) goto err_del_sec;
diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c index e859252ae5e6..2f3a99de6434 100644 --- a/sound/soc/samsung/pcm.c +++ b/sound/soc/samsung/pcm.c @@ -489,7 +489,6 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev) struct s3c_pcm_info *pcm; struct resource *mem_res; struct s3c_audio_pdata *pcm_pdata; - dma_filter_fn filter; int ret;
/* Check for valid device index */ @@ -542,18 +541,10 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev) s3c_pcm_stereo_in[pdev->id].addr = mem_res->start + S3C_PCM_RXFIFO; s3c_pcm_stereo_out[pdev->id].addr = mem_res->start + S3C_PCM_TXFIFO;
- filter = NULL; - if (pcm_pdata) { - s3c_pcm_stereo_in[pdev->id].filter_data = pcm_pdata->dma_capture; - s3c_pcm_stereo_out[pdev->id].filter_data = pcm_pdata->dma_playback; - filter = pcm_pdata->dma_filter; - } - pcm->dma_capture = &s3c_pcm_stereo_in[pdev->id]; pcm->dma_playback = &s3c_pcm_stereo_out[pdev->id];
- ret = samsung_asoc_dma_platform_register(&pdev->dev, filter, - NULL, NULL, NULL); + ret = samsung_asoc_dma_platform_register(&pdev->dev, NULL, NULL, NULL); if (ret) { dev_err(&pdev->dev, "failed to get register DMA: %d\n", ret); goto err_dis_pclk; diff --git a/sound/soc/samsung/spdif.c b/sound/soc/samsung/spdif.c index 7d815e237e5c..beabcadd7d1d 100644 --- a/sound/soc/samsung/spdif.c +++ b/sound/soc/samsung/spdif.c @@ -363,7 +363,6 @@ static int spdif_probe(struct platform_device *pdev) struct s3c_audio_pdata *spdif_pdata; struct resource *mem_res; struct samsung_spdif_info *spdif; - dma_filter_fn filter; int ret;
spdif_pdata = pdev->dev.platform_data; @@ -424,15 +423,9 @@ static int spdif_probe(struct platform_device *pdev)
spdif_stereo_out.addr_width = 2; spdif_stereo_out.addr = mem_res->start + DATA_OUTBUF; - filter = NULL; - if (spdif_pdata) { - spdif_stereo_out.filter_data = spdif_pdata->dma_playback; - filter = spdif_pdata->dma_filter; - } spdif->dma_playback = &spdif_stereo_out;
- ret = samsung_asoc_dma_platform_register(&pdev->dev, filter, - NULL, NULL, NULL); + ret = samsung_asoc_dma_platform_register(&pdev->dev, NULL, NULL, NULL); if (ret) { dev_err(&pdev->dev, "failed to register DMA: %d\n", ret); goto err4;
From: Arnd Bergmann arnd@arndb.de
The last caller was removed, so there is no longer a need for this function.
Signed-off-by: Arnd Bergmann arnd@arndb.de --- include/sound/dmaengine_pcm.h | 2 -- sound/core/pcm_dmaengine.c | 21 --------------------- 2 files changed, 23 deletions(-)
diff --git a/include/sound/dmaengine_pcm.h b/include/sound/dmaengine_pcm.h index 2df54cf02cb3..a497d1f81cab 100644 --- a/include/sound/dmaengine_pcm.h +++ b/include/sound/dmaengine_pcm.h @@ -37,8 +37,6 @@ int snd_dmaengine_pcm_open(struct snd_pcm_substream *substream, struct dma_chan *chan); int snd_dmaengine_pcm_close(struct snd_pcm_substream *substream);
-int snd_dmaengine_pcm_open_request_chan(struct snd_pcm_substream *substream, - dma_filter_fn filter_fn, void *filter_data); int snd_dmaengine_pcm_close_release_chan(struct snd_pcm_substream *substream);
struct dma_chan *snd_dmaengine_pcm_request_channel(dma_filter_fn filter_fn, diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c index 494ec0c207fa..9f4120f020d8 100644 --- a/sound/core/pcm_dmaengine.c +++ b/sound/core/pcm_dmaengine.c @@ -328,27 +328,6 @@ int snd_dmaengine_pcm_open(struct snd_pcm_substream *substream, } EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_open);
-/** - * snd_dmaengine_pcm_open_request_chan - Open a dmaengine based PCM substream and request channel - * @substream: PCM substream - * @filter_fn: Filter function used to request the DMA channel - * @filter_data: Data passed to the DMA filter function - * - * This function will request a DMA channel using the passed filter function and - * data. The function should usually be called from the pcm open callback. Note - * that this function will use private_data field of the substream's runtime. So - * it is not available to your pcm driver implementation. - * - * Return: 0 on success, a negative error code otherwise - */ -int snd_dmaengine_pcm_open_request_chan(struct snd_pcm_substream *substream, - dma_filter_fn filter_fn, void *filter_data) -{ - return snd_dmaengine_pcm_open(substream, - snd_dmaengine_pcm_request_channel(filter_fn, filter_data)); -} -EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_open_request_chan); - /** * snd_dmaengine_pcm_close - Close a dmaengine based PCM substream * @substream: PCM substream
On Wed, Jan 18, 2023 at 05:10:46PM +0100, Arnd Bergmann wrote:
From: Arnd Bergmann arnd@arndb.de
The last caller was removed, so there is no longer a need for this function.
Please remember to copy me on ASoC patches...
From: Arnd Bergmann arnd@arndb.de
The platform data definition for ux500 sound devices was removed six years ago after the DT conversion was completed, see commit 4b483ed0be8b ("ARM: ux500: cut some platform data").
Remove some leftover bits in the ASoC driver and just assume that it always gets probed using DT.
Signed-off-by: Arnd Bergmann arnd@arndb.de --- include/linux/platform_data/asoc-ux500-msp.h | 20 ---------- sound/soc/ux500/mop500.c | 8 ++-- sound/soc/ux500/ux500_msp_dai.c | 33 +-------------- sound/soc/ux500/ux500_msp_i2s.c | 33 +++------------ sound/soc/ux500/ux500_msp_i2s.h | 5 +-- sound/soc/ux500/ux500_pcm.c | 42 ++------------------ 6 files changed, 15 insertions(+), 126 deletions(-) delete mode 100644 include/linux/platform_data/asoc-ux500-msp.h
diff --git a/include/linux/platform_data/asoc-ux500-msp.h b/include/linux/platform_data/asoc-ux500-msp.h deleted file mode 100644 index b8d0f730dda8..000000000000 --- a/include/linux/platform_data/asoc-ux500-msp.h +++ /dev/null @@ -1,20 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (C) ST-Ericsson SA 2010 - * - * Author: Rabin Vincent rabin.vincent@stericsson.com for ST-Ericsson - */ - -#ifndef __MSP_H -#define __MSP_H - -#include <linux/platform_data/dma-ste-dma40.h> - -/* Platform data structure for a MSP I2S-device */ -struct msp_i2s_platform_data { - int id; - struct stedma40_chan_cfg *msp_i2s_dma_rx; - struct stedma40_chan_cfg *msp_i2s_dma_tx; -}; - -#endif diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c index fdd55d772b8e..325e75e96136 100644 --- a/sound/soc/ux500/mop500.c +++ b/sound/soc/ux500/mop500.c @@ -109,11 +109,9 @@ static int mop500_probe(struct platform_device *pdev)
mop500_card.dev = &pdev->dev;
- if (np) { - ret = mop500_of_probe(pdev, np); - if (ret) - return ret; - } + ret = mop500_of_probe(pdev, np); + if (ret) + return ret;
dev_dbg(&pdev->dev, "%s: Card %s: Set platform drvdata.\n", __func__, mop500_card.name); diff --git a/sound/soc/ux500/ux500_msp_dai.c b/sound/soc/ux500/ux500_msp_dai.c index 9d99ea6d7f30..6e86efd06ec1 100644 --- a/sound/soc/ux500/ux500_msp_dai.c +++ b/sound/soc/ux500/ux500_msp_dai.c @@ -15,7 +15,6 @@ #include <linux/of.h> #include <linux/regulator/consumer.h> #include <linux/mfd/dbx500-prcmu.h> -#include <linux/platform_data/asoc-ux500-msp.h>
#include <sound/soc.h> #include <sound/soc-dai.h> @@ -682,26 +681,6 @@ static int ux500_msp_dai_of_probe(struct snd_soc_dai *dai) return 0; }
-static int ux500_msp_dai_probe(struct snd_soc_dai *dai) -{ - struct ux500_msp_i2s_drvdata *drvdata = dev_get_drvdata(dai->dev); - struct msp_i2s_platform_data *pdata = dai->dev->platform_data; - int ret; - - if (!pdata) { - ret = ux500_msp_dai_of_probe(dai); - return ret; - } - - drvdata->msp->playback_dma_data.data_size = drvdata->slot_width; - drvdata->msp->capture_dma_data.data_size = drvdata->slot_width; - - snd_soc_dai_init_dma_data(dai, - &drvdata->msp->playback_dma_data, - &drvdata->msp->capture_dma_data); - return 0; -} - static const struct snd_soc_dai_ops ux500_msp_dai_ops[] = { { .set_sysclk = ux500_msp_dai_set_dai_sysclk, @@ -716,7 +695,7 @@ static const struct snd_soc_dai_ops ux500_msp_dai_ops[] = { };
static struct snd_soc_dai_driver ux500_msp_dai_drv = { - .probe = ux500_msp_dai_probe, + .probe = ux500_msp_dai_of_probe, .playback.channels_min = UX500_MSP_MIN_CHANNELS, .playback.channels_max = UX500_MSP_MAX_CHANNELS, .playback.rates = UX500_I2S_RATES, @@ -737,15 +716,8 @@ static const struct snd_soc_component_driver ux500_msp_component = { static int ux500_msp_drv_probe(struct platform_device *pdev) { struct ux500_msp_i2s_drvdata *drvdata; - struct msp_i2s_platform_data *pdata = pdev->dev.platform_data; - struct device_node *np = pdev->dev.of_node; int ret = 0;
- if (!pdata && !np) { - dev_err(&pdev->dev, "No platform data or Device Tree found\n"); - return -ENODEV; - } - drvdata = devm_kzalloc(&pdev->dev, sizeof(struct ux500_msp_i2s_drvdata), GFP_KERNEL); @@ -787,8 +759,7 @@ static int ux500_msp_drv_probe(struct platform_device *pdev) return ret; }
- ret = ux500_msp_i2s_init_msp(pdev, &drvdata->msp, - pdev->dev.platform_data); + ret = ux500_msp_i2s_init_msp(pdev, &drvdata->msp); if (!drvdata->msp) { dev_err(&pdev->dev, "%s: ERROR: Failed to init MSP-struct (%d)!", diff --git a/sound/soc/ux500/ux500_msp_i2s.c b/sound/soc/ux500/ux500_msp_i2s.c index d113411a19f8..bfca5553381f 100644 --- a/sound/soc/ux500/ux500_msp_i2s.c +++ b/sound/soc/ux500/ux500_msp_i2s.c @@ -14,7 +14,6 @@ #include <linux/slab.h> #include <linux/io.h> #include <linux/of.h> -#include <linux/platform_data/asoc-ux500-msp.h>
#include <sound/soc.h>
@@ -640,18 +639,8 @@ int ux500_msp_i2s_close(struct ux500_msp *msp, unsigned int dir) }
static int ux500_msp_i2s_of_init_msp(struct platform_device *pdev, - struct ux500_msp *msp, - struct msp_i2s_platform_data **platform_data) + struct ux500_msp *msp); { - struct msp_i2s_platform_data *pdata; - - *platform_data = devm_kzalloc(&pdev->dev, - sizeof(struct msp_i2s_platform_data), - GFP_KERNEL); - pdata = *platform_data; - if (!pdata) - return -ENOMEM; - msp->playback_dma_data.dma_cfg = devm_kzalloc(&pdev->dev, sizeof(struct stedma40_chan_cfg), GFP_KERNEL); @@ -668,11 +657,9 @@ static int ux500_msp_i2s_of_init_msp(struct platform_device *pdev, }
int ux500_msp_i2s_init_msp(struct platform_device *pdev, - struct ux500_msp **msp_p, - struct msp_i2s_platform_data *platform_data) + struct ux500_msp **msp_p) { struct resource *res = NULL; - struct device_node *np = pdev->dev.of_node; struct ux500_msp *msp; int ret;
@@ -681,19 +668,9 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev, if (!msp) return -ENOMEM;
- if (!platform_data) { - if (np) { - ret = ux500_msp_i2s_of_init_msp(pdev, msp, - &platform_data); - if (ret) - return ret; - } else - return -EINVAL; - } else { - msp->playback_dma_data.dma_cfg = platform_data->msp_i2s_dma_tx; - msp->capture_dma_data.dma_cfg = platform_data->msp_i2s_dma_rx; - msp->id = platform_data->id; - } + ret = ux500_msp_i2s_of_init_msp(pdev, msp); + if (ret) + return ret;
msp->dev = &pdev->dev;
diff --git a/sound/soc/ux500/ux500_msp_i2s.h b/sound/soc/ux500/ux500_msp_i2s.h index d45b5e2831cc..6b353423b75a 100644 --- a/sound/soc/ux500/ux500_msp_i2s.h +++ b/sound/soc/ux500/ux500_msp_i2s.h @@ -11,7 +11,6 @@ #define UX500_MSP_I2S_H
#include <linux/platform_device.h> -#include <linux/platform_data/asoc-ux500-msp.h>
#define MSP_INPUT_FREQ_APB 48000000
@@ -482,10 +481,8 @@ struct ux500_msp { unsigned int f_bitclk; };
-struct msp_i2s_platform_data; int ux500_msp_i2s_init_msp(struct platform_device *pdev, - struct ux500_msp **msp_p, - struct msp_i2s_platform_data *platform_data); + struct ux500_msp **msp_p); void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev, struct ux500_msp *msp); int ux500_msp_i2s_open(struct ux500_msp *msp, struct ux500_msp_config *config); diff --git a/sound/soc/ux500/ux500_pcm.c b/sound/soc/ux500/ux500_pcm.c index d3802e5ef196..ca87517d80c9 100644 --- a/sound/soc/ux500/ux500_pcm.c +++ b/sound/soc/ux500/ux500_pcm.c @@ -29,18 +29,6 @@ #define UX500_PLATFORM_PERIODS_MAX 48 #define UX500_PLATFORM_BUFFER_BYTES_MAX (2048 * PAGE_SIZE)
-static const struct snd_pcm_hardware ux500_pcm_hw = { - .info = SNDRV_PCM_INFO_INTERLEAVED | - SNDRV_PCM_INFO_MMAP | - SNDRV_PCM_INFO_RESUME | - SNDRV_PCM_INFO_PAUSE, - .buffer_bytes_max = UX500_PLATFORM_BUFFER_BYTES_MAX, - .period_bytes_min = UX500_PLATFORM_PERIODS_BYTES_MIN, - .period_bytes_max = UX500_PLATFORM_PERIODS_BYTES_MAX, - .periods_min = UX500_PLATFORM_PERIODS_MIN, - .periods_max = UX500_PLATFORM_PERIODS_MAX, -}; - static struct dma_chan *ux500_pcm_request_chan(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_substream *substream) { @@ -84,21 +72,12 @@ static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream, struct dma_slave_config *slave_config) { struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); - struct msp_i2s_platform_data *pdata = asoc_rtd_to_cpu(rtd, 0)->dev->platform_data; struct snd_dmaengine_dai_dma_data *snd_dma_params; - struct ux500_msp_dma_params *ste_dma_params; dma_addr_t dma_addr; int ret;
- if (pdata) { - ste_dma_params = - snd_soc_dai_get_dma_data(asoc_rtd_to_cpu(rtd, 0), substream); - dma_addr = ste_dma_params->tx_rx_addr; - } else { - snd_dma_params = - snd_soc_dai_get_dma_data(asoc_rtd_to_cpu(rtd, 0), substream); - dma_addr = snd_dma_params->addr; - } + snd_dma_params = snd_soc_dai_get_dma_data(asoc_rtd_to_cpu(rtd, 0), substream); + dma_addr = snd_dma_params->addr;
ret = snd_hwparams_to_dma_slave_config(substream, params, slave_config); if (ret) @@ -118,13 +97,6 @@ static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream, return 0; }
-static const struct snd_dmaengine_pcm_config ux500_dmaengine_pcm_config = { - .pcm_hardware = &ux500_pcm_hw, - .compat_request_channel = ux500_pcm_request_chan, - .prealloc_buffer_size = 128 * 1024, - .prepare_slave_config = ux500_pcm_prepare_slave_config, -}; - static const struct snd_dmaengine_pcm_config ux500_dmaengine_of_pcm_config = { .compat_request_channel = ux500_pcm_request_chan, .prepare_slave_config = ux500_pcm_prepare_slave_config, @@ -132,16 +104,10 @@ static const struct snd_dmaengine_pcm_config ux500_dmaengine_of_pcm_config = {
int ux500_pcm_register_platform(struct platform_device *pdev) { - const struct snd_dmaengine_pcm_config *pcm_config; - struct device_node *np = pdev->dev.of_node; int ret;
- if (np) - pcm_config = &ux500_dmaengine_of_pcm_config; - else - pcm_config = &ux500_dmaengine_pcm_config; - - ret = snd_dmaengine_pcm_register(&pdev->dev, pcm_config, + ret = snd_dmaengine_pcm_register(&pdev->dev, + &ux500_dmaengine_of_pcm_config, SND_DMAENGINE_PCM_FLAG_COMPAT); if (ret < 0) { dev_err(&pdev->dev,
On Wed, Jan 18, 2023 at 5:17 PM Arnd Bergmann arnd@kernel.org wrote:
From: Arnd Bergmann arnd@arndb.de
The platform data definition for ux500 sound devices was removed six years ago after the DT conversion was completed, see commit 4b483ed0be8b ("ARM: ux500: cut some platform data").
Remove some leftover bits in the ASoC driver and just assume that it always gets probed using DT.
Signed-off-by: Arnd Bergmann arnd@arndb.de
Reviewed-by: Linus Walleij linus.walleij@linaro.org
Yours, Linus Walleij
From: Arnd Bergmann arnd@arndb.de
ux500_pcm_request_chan() is never called because the dma channels are already set up from DT. Remove this, along with the ux500_msp_dma_params structure.
Signed-off-by: Arnd Bergmann arnd@arndb.de --- sound/soc/ux500/ux500_msp_dai.c | 4 +-- sound/soc/ux500/ux500_msp_i2s.c | 41 +------------------------------ sound/soc/ux500/ux500_msp_i2s.h | 9 +------ sound/soc/ux500/ux500_pcm.c | 43 +-------------------------------- 4 files changed, 5 insertions(+), 92 deletions(-)
diff --git a/sound/soc/ux500/ux500_msp_dai.c b/sound/soc/ux500/ux500_msp_dai.c index 6e86efd06ec1..6fb1a5c207bc 100644 --- a/sound/soc/ux500/ux500_msp_dai.c +++ b/sound/soc/ux500/ux500_msp_dai.c @@ -670,8 +670,8 @@ static int ux500_msp_dai_of_probe(struct snd_soc_dai *dai) if (!capture_dma_data) return -ENOMEM;
- playback_dma_data->addr = drvdata->msp->playback_dma_data.tx_rx_addr; - capture_dma_data->addr = drvdata->msp->capture_dma_data.tx_rx_addr; + playback_dma_data->addr = drvdata->msp->tx_rx_addr; + capture_dma_data->addr = drvdata->msp->tx_rx_addr;
playback_dma_data->maxburst = 4; capture_dma_data->maxburst = 4; diff --git a/sound/soc/ux500/ux500_msp_i2s.c b/sound/soc/ux500/ux500_msp_i2s.c index bfca5553381f..fbfeefa418ca 100644 --- a/sound/soc/ux500/ux500_msp_i2s.c +++ b/sound/soc/ux500/ux500_msp_i2s.c @@ -360,20 +360,6 @@ static int enable_msp(struct ux500_msp *msp, struct ux500_msp_config *config) __func__, status); }
- /* Make sure the correct DMA-directions are configured */ - if ((config->direction & MSP_DIR_RX) && - !msp->capture_dma_data.dma_cfg) { - dev_err(msp->dev, "%s: ERROR: MSP RX-mode is not configured!", - __func__); - return -EINVAL; - } - if ((config->direction == MSP_DIR_TX) && - !msp->playback_dma_data.dma_cfg) { - dev_err(msp->dev, "%s: ERROR: MSP TX-mode is not configured!", - __func__); - return -EINVAL; - } - reg_val_DMACR = readl(msp->registers + MSP_DMACR); if (config->direction & MSP_DIR_RX) reg_val_DMACR |= RX_DMA_ENABLE; @@ -638,40 +624,17 @@ int ux500_msp_i2s_close(struct ux500_msp *msp, unsigned int dir)
}
-static int ux500_msp_i2s_of_init_msp(struct platform_device *pdev, - struct ux500_msp *msp); -{ - msp->playback_dma_data.dma_cfg = devm_kzalloc(&pdev->dev, - sizeof(struct stedma40_chan_cfg), - GFP_KERNEL); - if (!msp->playback_dma_data.dma_cfg) - return -ENOMEM; - - msp->capture_dma_data.dma_cfg = devm_kzalloc(&pdev->dev, - sizeof(struct stedma40_chan_cfg), - GFP_KERNEL); - if (!msp->capture_dma_data.dma_cfg) - return -ENOMEM; - - return 0; -} - int ux500_msp_i2s_init_msp(struct platform_device *pdev, struct ux500_msp **msp_p) { struct resource *res = NULL; struct ux500_msp *msp; - int ret;
*msp_p = devm_kzalloc(&pdev->dev, sizeof(struct ux500_msp), GFP_KERNEL); msp = *msp_p; if (!msp) return -ENOMEM;
- ret = ux500_msp_i2s_of_init_msp(pdev, msp); - if (ret) - return ret; - msp->dev = &pdev->dev;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -681,9 +644,7 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev, return -ENOMEM; }
- msp->playback_dma_data.tx_rx_addr = res->start + MSP_DR; - msp->capture_dma_data.tx_rx_addr = res->start + MSP_DR; - + msp->tx_rx_addr = res->start + MSP_DR; msp->registers = devm_ioremap(&pdev->dev, res->start, resource_size(res)); if (msp->registers == NULL) { diff --git a/sound/soc/ux500/ux500_msp_i2s.h b/sound/soc/ux500/ux500_msp_i2s.h index 6b353423b75a..69d4ebc409fc 100644 --- a/sound/soc/ux500/ux500_msp_i2s.h +++ b/sound/soc/ux500/ux500_msp_i2s.h @@ -462,18 +462,11 @@ struct ux500_msp_config { unsigned int iodelay; };
-struct ux500_msp_dma_params { - unsigned int data_size; - dma_addr_t tx_rx_addr; - struct stedma40_chan_cfg *dma_cfg; -}; - struct ux500_msp { int id; void __iomem *registers; struct device *dev; - struct ux500_msp_dma_params playback_dma_data; - struct ux500_msp_dma_params capture_dma_data; + dma_addr_t tx_rx_addr; enum msp_state msp_state; int def_elem_len; unsigned int dir_busy; diff --git a/sound/soc/ux500/ux500_pcm.c b/sound/soc/ux500/ux500_pcm.c index ca87517d80c9..53b5649cfdda 100644 --- a/sound/soc/ux500/ux500_pcm.c +++ b/sound/soc/ux500/ux500_pcm.c @@ -13,7 +13,6 @@ #include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/slab.h> -#include <linux/platform_data/dma-ste-dma40.h>
#include <sound/pcm.h> #include <sound/pcm_params.h> @@ -29,44 +28,6 @@ #define UX500_PLATFORM_PERIODS_MAX 48 #define UX500_PLATFORM_BUFFER_BYTES_MAX (2048 * PAGE_SIZE)
-static struct dma_chan *ux500_pcm_request_chan(struct snd_soc_pcm_runtime *rtd, - struct snd_pcm_substream *substream) -{ - struct snd_soc_dai *dai = asoc_rtd_to_cpu(rtd, 0); - u16 per_data_width, mem_data_width; - struct stedma40_chan_cfg *dma_cfg; - struct ux500_msp_dma_params *dma_params; - - dma_params = snd_soc_dai_get_dma_data(dai, substream); - dma_cfg = dma_params->dma_cfg; - - mem_data_width = DMA_SLAVE_BUSWIDTH_2_BYTES; - - switch (dma_params->data_size) { - case 32: - per_data_width = DMA_SLAVE_BUSWIDTH_4_BYTES; - break; - case 16: - per_data_width = DMA_SLAVE_BUSWIDTH_2_BYTES; - break; - case 8: - per_data_width = DMA_SLAVE_BUSWIDTH_1_BYTE; - break; - default: - per_data_width = DMA_SLAVE_BUSWIDTH_4_BYTES; - } - - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { - dma_cfg->src_info.data_width = mem_data_width; - dma_cfg->dst_info.data_width = per_data_width; - } else { - dma_cfg->src_info.data_width = per_data_width; - dma_cfg->dst_info.data_width = mem_data_width; - } - - return snd_dmaengine_pcm_request_channel(stedma40_filter, dma_cfg); -} - static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config) @@ -98,7 +59,6 @@ static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream, }
static const struct snd_dmaengine_pcm_config ux500_dmaengine_of_pcm_config = { - .compat_request_channel = ux500_pcm_request_chan, .prepare_slave_config = ux500_pcm_prepare_slave_config, };
@@ -107,8 +67,7 @@ int ux500_pcm_register_platform(struct platform_device *pdev) int ret;
ret = snd_dmaengine_pcm_register(&pdev->dev, - &ux500_dmaengine_of_pcm_config, - SND_DMAENGINE_PCM_FLAG_COMPAT); + &ux500_dmaengine_of_pcm_config, 0); if (ret < 0) { dev_err(&pdev->dev, "%s: ERROR: Failed to register platform '%s' (%d)!\n",
On Wed, Jan 18, 2023 at 5:17 PM Arnd Bergmann arnd@kernel.org wrote:
From: Arnd Bergmann arnd@arndb.de
ux500_pcm_request_chan() is never called because the dma channels are already set up from DT. Remove this, along with the ux500_msp_dma_params structure.
Signed-off-by: Arnd Bergmann arnd@arndb.de
Reviewed-by: Linus Walleij linus.walleij@linaro.org
Now I will try to continue my work on refreshing the Ux500 audio support on top of these patches!
Yours, Linus Walleij
From: Arnd Bergmann arnd@arndb.de
The last reference to this struct member is gone, so the caller can be removed as well.
Signed-off-by: Arnd Bergmann arnd@arndb.de --- include/sound/dmaengine_pcm.h | 13 ++----------- sound/soc/soc-generic-dmaengine-pcm.c | 3 --- 2 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/include/sound/dmaengine_pcm.h b/include/sound/dmaengine_pcm.h index a497d1f81cab..9965d59ff8f0 100644 --- a/include/sound/dmaengine_pcm.h +++ b/include/sound/dmaengine_pcm.h @@ -93,8 +93,8 @@ int snd_dmaengine_pcm_refine_runtime_hwparams( struct dma_chan *chan);
/* - * Try to request the DMA channel using compat_request_channel or - * compat_filter_fn if it couldn't be requested through devicetree. + * Try to request the DMA channel using compat_filter_fn if it + * couldn't be requested through devicetree. */ #define SND_DMAENGINE_PCM_FLAG_COMPAT BIT(0) /* @@ -112,8 +112,6 @@ int snd_dmaengine_pcm_refine_runtime_hwparams( * struct snd_dmaengine_pcm_config - Configuration data for dmaengine based PCM * @prepare_slave_config: Callback used to fill in the DMA slave_config for a * PCM substream. Will be called from the PCM drivers hwparams callback. - * @compat_request_channel: Callback to request a DMA channel for platforms - * which do not use devicetree. * @process: Callback used to apply processing on samples transferred from/to * user space. * @compat_filter_fn: Will be used as the filter function when requesting a @@ -126,18 +124,11 @@ int snd_dmaengine_pcm_refine_runtime_hwparams( * @pcm_hardware: snd_pcm_hardware struct to be used for the PCM. * @prealloc_buffer_size: Size of the preallocated audio buffer. * - * Note: If both compat_request_channel and compat_filter_fn are set - * compat_request_channel will be used to request the channel and - * compat_filter_fn will be ignored. Otherwise the channel will be requested - * using dma_request_channel with compat_filter_fn as the filter function. */ struct snd_dmaengine_pcm_config { int (*prepare_slave_config)(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config); - struct dma_chan *(*compat_request_channel)( - struct snd_soc_pcm_runtime *rtd, - struct snd_pcm_substream *substream); int (*process)(struct snd_pcm_substream *substream, int channel, unsigned long hwoff, void *buf, unsigned long bytes); diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c index 3b99f619e37e..a3d92eb645f2 100644 --- a/sound/soc/soc-generic-dmaengine-pcm.c +++ b/sound/soc/soc-generic-dmaengine-pcm.c @@ -190,9 +190,6 @@ static struct dma_chan *dmaengine_pcm_compat_request_channel( if ((pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX) && pcm->chan[0]) return pcm->chan[0];
- if (pcm->config->compat_request_channel) - return pcm->config->compat_request_channel(rtd, substream); - return snd_dmaengine_pcm_request_channel(pcm->config->compat_filter_fn, dma_data->filter_data); }
On 18/01/2023 17:10, Arnd Bergmann wrote:
From: Arnd Bergmann arnd@arndb.de
This data is no longer passed by the platform code, so there is no point passing it down at all.
Signed-off-by: Arnd Bergmann arnd@arndb.de
include/linux/platform_data/asoc-s3c.h | 6 ------ sound/soc/samsung/dma.h | 2 +- sound/soc/samsung/dmaengine.c | 3 +-- sound/soc/samsung/i2s.c | 21 +++------------------ sound/soc/samsung/pcm.c | 11 +---------- sound/soc/samsung/spdif.c | 9 +-------- 6 files changed, 7 insertions(+), 45 deletions(-)
Acked-by: Krzysztof Kozlowski krzysztof.kozlowski@linaro.org
Best regards, Krzysztof
On Wed, Jan 18, 2023 at 05:10:45PM +0100, Arnd Bergmann wrote:
From: Arnd Bergmann arnd@arndb.de
This data is no longer passed by the platform code, so there is no point passing it down at all.
This breaks an x86 allmodconfig build:
/build/stage/linux/sound/soc/samsung/s3c24xx-i2s.c: In function ‘s3c24xx_iis_dev_probe’: /build/stage/linux/sound/soc/samsung/s3c24xx-i2s.c:436:56: error: passing argument 4 of ‘samsung_asoc_dma_platform_register’ from incompatible pointer type [-Werror=incompatible-pointer-types] 436 | "tx", "rx", NULL); | ^~~~ | | | char * In file included from /build/stage/linux/sound/soc/samsung/s3c24xx-i2s.c:21: /build/stage/linux/sound/soc/samsung/dma.h:17:55: note: expected ‘struct device *’ but argument is of type ‘char *’ 17 | struct device *dma_dev); | ~~~~~~~~~~~~~~~^~~~~~~ /build/stage/linux/sound/soc/samsung/s3c24xx-i2s.c:435:15: error: too many arguments to function ‘samsung_asoc_dma_platform_register’ 435 | ret = samsung_asoc_dma_platform_register(&pdev->dev, NULL, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/stage/linux/sound/soc/samsung/dma.h:15:5: note: declared here 15 | int samsung_asoc_dma_platform_register(struct device *dev, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On Thu, Jan 19, 2023, at 17:59, Mark Brown wrote:
On Wed, Jan 18, 2023 at 05:10:45PM +0100, Arnd Bergmann wrote:
From: Arnd Bergmann arnd@arndb.de
This data is no longer passed by the platform code, so there is no point passing it down at all.
This breaks an x86 allmodconfig build:
I see, this patch still depends on the s3c24xx removal, which is in soc/for-next and I used for testing. I see a similar problem with the MMP platform in patch 2/5. The series here is mostly older patches I did a while ago and rebased on top of the boardfile removal, but it breaks when it gets applied first.
Unless there is anything in here that you really want to apply for 6.3, lets drop all five for now, and I'll resend it after the dust has settled on the boardfile removal.
Arnd
On Fri, Jan 20, 2023 at 10:05:59AM +0100, Arnd Bergmann wrote:
I see, this patch still depends on the s3c24xx removal, which is in soc/for-next and I used for testing. I see a similar problem with the MMP platform in patch 2/5. The series here is mostly older patches I did a while ago and rebased on top of the boardfile removal, but it breaks when it gets applied first.
Unless there is anything in here that you really want to apply for 6.3, lets drop all five for now, and I'll resend it after the dust has settled on the boardfile removal.
I'd left the ux500 stuff running through my testing, no particular urgency just it saves rereviewing anything. Assuming it's fine (seems so thus far) I'll push it out.
On Fri, Jan 20, 2023, at 13:07, Mark Brown wrote:
On Fri, Jan 20, 2023 at 10:05:59AM +0100, Arnd Bergmann wrote:
I see, this patch still depends on the s3c24xx removal, which is in soc/for-next and I used for testing. I see a similar problem with the MMP platform in patch 2/5. The series here is mostly older patches I did a while ago and rebased on top of the boardfile removal, but it breaks when it gets applied first.
Unless there is anything in here that you really want to apply for 6.3, lets drop all five for now, and I'll resend it after the dust has settled on the boardfile removal.
I'd left the ux500 stuff running through my testing, no particular urgency just it saves rereviewing anything. Assuming it's fine (seems so thus far) I'll push it out.
Yes, sounds good to me, I don't see any risk of missed dependencies for that.
Arnd
On Wed, 18 Jan 2023 17:10:45 +0100, Arnd Bergmann wrote:
This data is no longer passed by the platform code, so there is no point passing it down at all.
Applied to
broonie/sound.git for-next
Thanks!
[1/5] ASoC: samsung: remove DMA filter function and data (no commit info) [2/5] ASoC: pxa: remove snd_dmaengine_pcm_open_request_chan() (no commit info) [3/5] ASoC: ux500: remove platform_data support commit: 1766ac5248063c25d1fe46e04bb936c46313ed89 [4/5] ASoC: ux500: remove stedma40 references commit: aafe9375b386010e28614f58499d199250a16874 [5/5] ASoC: remove snd_dmaengine_pcm_config->compat_request_channel (no commit info)
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
participants (5)
-
Arnd Bergmann
-
Arnd Bergmann
-
Krzysztof Kozlowski
-
Linus Walleij
-
Mark Brown