Commit bb85d373 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/fsi', 'asoc/topic/fsl',...

Merge remote-tracking branches 'asoc/topic/fsi', 'asoc/topic/fsl', 'asoc/topic/fsl-asrc', 'asoc/topic/fsl-card' and 'asoc/topic/fsl-sai' into asoc-next
...@@ -182,7 +182,7 @@ static int eukrea_tlv320_probe(struct platform_device *pdev) ...@@ -182,7 +182,7 @@ static int eukrea_tlv320_probe(struct platform_device *pdev)
); );
} else { } else {
if (np) { if (np) {
/* The eukrea,asoc-tlv320 driver was explicitely /* The eukrea,asoc-tlv320 driver was explicitly
* requested (through the device tree). * requested (through the device tree).
*/ */
dev_err(&pdev->dev, dev_err(&pdev->dev,
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "../codecs/sgtl5000.h" #include "../codecs/sgtl5000.h"
#include "../codecs/wm8962.h" #include "../codecs/wm8962.h"
#include "../codecs/wm8960.h"
#define RX 0 #define RX 0
#define TX 1 #define TX 1
...@@ -407,6 +408,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -407,6 +408,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
struct fsl_asoc_card_priv *priv; struct fsl_asoc_card_priv *priv;
struct i2c_client *codec_dev; struct i2c_client *codec_dev;
struct clk *codec_clk; struct clk *codec_clk;
const char *codec_dai_name;
u32 width; u32 width;
int ret; int ret;
...@@ -459,6 +461,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -459,6 +461,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
/* Diversify the card configurations */ /* Diversify the card configurations */
if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) { if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) {
codec_dai_name = "cs42888";
priv->card.set_bias_level = NULL; priv->card.set_bias_level = NULL;
priv->cpu_priv.sysclk_freq[TX] = priv->codec_priv.mclk_freq; priv->cpu_priv.sysclk_freq[TX] = priv->codec_priv.mclk_freq;
priv->cpu_priv.sysclk_freq[RX] = priv->codec_priv.mclk_freq; priv->cpu_priv.sysclk_freq[RX] = priv->codec_priv.mclk_freq;
...@@ -467,14 +470,22 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -467,14 +470,22 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
priv->cpu_priv.slot_width = 32; priv->cpu_priv.slot_width = 32;
priv->dai_fmt |= SND_SOC_DAIFMT_CBS_CFS; priv->dai_fmt |= SND_SOC_DAIFMT_CBS_CFS;
} else if (of_device_is_compatible(np, "fsl,imx-audio-sgtl5000")) { } else if (of_device_is_compatible(np, "fsl,imx-audio-sgtl5000")) {
codec_dai_name = "sgtl5000";
priv->codec_priv.mclk_id = SGTL5000_SYSCLK; priv->codec_priv.mclk_id = SGTL5000_SYSCLK;
priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
} else if (of_device_is_compatible(np, "fsl,imx-audio-wm8962")) { } else if (of_device_is_compatible(np, "fsl,imx-audio-wm8962")) {
codec_dai_name = "wm8962";
priv->card.set_bias_level = fsl_asoc_card_set_bias_level; priv->card.set_bias_level = fsl_asoc_card_set_bias_level;
priv->codec_priv.mclk_id = WM8962_SYSCLK_MCLK; priv->codec_priv.mclk_id = WM8962_SYSCLK_MCLK;
priv->codec_priv.fll_id = WM8962_SYSCLK_FLL; priv->codec_priv.fll_id = WM8962_SYSCLK_FLL;
priv->codec_priv.pll_id = WM8962_FLL; priv->codec_priv.pll_id = WM8962_FLL;
priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
} else if (of_device_is_compatible(np, "fsl,imx-audio-wm8960")) {
codec_dai_name = "wm8960-hifi";
priv->card.set_bias_level = fsl_asoc_card_set_bias_level;
priv->codec_priv.fll_id = WM8960_SYSCLK_AUTO;
priv->codec_priv.pll_id = WM8960_SYSCLK_AUTO;
priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
} else { } else {
dev_err(&pdev->dev, "unknown Device Tree compatible\n"); dev_err(&pdev->dev, "unknown Device Tree compatible\n");
return -EINVAL; return -EINVAL;
...@@ -521,7 +532,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -521,7 +532,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
/* Normal DAI Link */ /* Normal DAI Link */
priv->dai_link[0].cpu_of_node = cpu_np; priv->dai_link[0].cpu_of_node = cpu_np;
priv->dai_link[0].codec_of_node = codec_np; priv->dai_link[0].codec_of_node = codec_np;
priv->dai_link[0].codec_dai_name = codec_dev->name; priv->dai_link[0].codec_dai_name = codec_dai_name;
priv->dai_link[0].platform_of_node = cpu_np; priv->dai_link[0].platform_of_node = cpu_np;
priv->dai_link[0].dai_fmt = priv->dai_fmt; priv->dai_link[0].dai_fmt = priv->dai_fmt;
priv->card.num_links = 1; priv->card.num_links = 1;
...@@ -530,7 +541,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -530,7 +541,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
/* DPCM DAI Links only if ASRC exsits */ /* DPCM DAI Links only if ASRC exsits */
priv->dai_link[1].cpu_of_node = asrc_np; priv->dai_link[1].cpu_of_node = asrc_np;
priv->dai_link[1].platform_of_node = asrc_np; priv->dai_link[1].platform_of_node = asrc_np;
priv->dai_link[2].codec_dai_name = codec_dev->name; priv->dai_link[2].codec_dai_name = codec_dai_name;
priv->dai_link[2].codec_of_node = codec_np; priv->dai_link[2].codec_of_node = codec_np;
priv->dai_link[2].cpu_of_node = cpu_np; priv->dai_link[2].cpu_of_node = cpu_np;
priv->dai_link[2].dai_fmt = priv->dai_fmt; priv->dai_link[2].dai_fmt = priv->dai_fmt;
...@@ -578,6 +589,7 @@ static const struct of_device_id fsl_asoc_card_dt_ids[] = { ...@@ -578,6 +589,7 @@ static const struct of_device_id fsl_asoc_card_dt_ids[] = {
{ .compatible = "fsl,imx-audio-cs42888", }, { .compatible = "fsl,imx-audio-cs42888", },
{ .compatible = "fsl,imx-audio-sgtl5000", }, { .compatible = "fsl,imx-audio-sgtl5000", },
{ .compatible = "fsl,imx-audio-wm8962", }, { .compatible = "fsl,imx-audio-wm8962", },
{ .compatible = "fsl,imx-audio-wm8960", },
{} {}
}; };
......
...@@ -931,14 +931,29 @@ static int fsl_asrc_probe(struct platform_device *pdev) ...@@ -931,14 +931,29 @@ static int fsl_asrc_probe(struct platform_device *pdev)
static int fsl_asrc_runtime_resume(struct device *dev) static int fsl_asrc_runtime_resume(struct device *dev)
{ {
struct fsl_asrc *asrc_priv = dev_get_drvdata(dev); struct fsl_asrc *asrc_priv = dev_get_drvdata(dev);
int i; int i, ret;
clk_prepare_enable(asrc_priv->mem_clk); ret = clk_prepare_enable(asrc_priv->mem_clk);
clk_prepare_enable(asrc_priv->ipg_clk); if (ret)
for (i = 0; i < ASRC_CLK_MAX_NUM; i++) return ret;
clk_prepare_enable(asrc_priv->asrck_clk[i]); ret = clk_prepare_enable(asrc_priv->ipg_clk);
if (ret)
goto disable_mem_clk;
for (i = 0; i < ASRC_CLK_MAX_NUM; i++) {
ret = clk_prepare_enable(asrc_priv->asrck_clk[i]);
if (ret)
goto disable_asrck_clk;
}
return 0; return 0;
disable_asrck_clk:
for (i--; i >= 0; i--)
clk_disable_unprepare(asrc_priv->asrck_clk[i]);
clk_disable_unprepare(asrc_priv->ipg_clk);
disable_mem_clk:
clk_disable_unprepare(asrc_priv->mem_clk);
return ret;
} }
static int fsl_asrc_runtime_suspend(struct device *dev) static int fsl_asrc_runtime_suspend(struct device *dev)
......
...@@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev) ...@@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = imx_pcm_dma_init(pdev); ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
if (ret) if (ret)
dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret); dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
......
...@@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev) ...@@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
return ret; return ret;
if (sai->sai_on_imx) if (sai->sai_on_imx)
return imx_pcm_dma_init(pdev); return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
else else
return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
} }
......
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
#define FSL_SAI_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ #define FSL_SAI_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
SNDRV_PCM_FMTBIT_S20_3LE |\ SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE) SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE)
/* SAI Register Map Register */ /* SAI Register Map Register */
#define FSL_SAI_TCSR 0x00 /* SAI Transmit Control */ #define FSL_SAI_TCSR 0x00 /* SAI Transmit Control */
...@@ -45,7 +46,7 @@ ...@@ -45,7 +46,7 @@
#define FSL_SAI_xFR(tx) (tx ? FSL_SAI_TFR : FSL_SAI_RFR) #define FSL_SAI_xFR(tx) (tx ? FSL_SAI_TFR : FSL_SAI_RFR)
#define FSL_SAI_xMR(tx) (tx ? FSL_SAI_TMR : FSL_SAI_RMR) #define FSL_SAI_xMR(tx) (tx ? FSL_SAI_TMR : FSL_SAI_RMR)
/* SAI Transmit/Recieve Control Register */ /* SAI Transmit/Receive Control Register */
#define FSL_SAI_CSR_TERE BIT(31) #define FSL_SAI_CSR_TERE BIT(31)
#define FSL_SAI_CSR_FR BIT(25) #define FSL_SAI_CSR_FR BIT(25)
#define FSL_SAI_CSR_SR BIT(24) #define FSL_SAI_CSR_SR BIT(24)
...@@ -67,10 +68,10 @@ ...@@ -67,10 +68,10 @@
#define FSL_SAI_CSR_FRIE BIT(8) #define FSL_SAI_CSR_FRIE BIT(8)
#define FSL_SAI_CSR_FRDE BIT(0) #define FSL_SAI_CSR_FRDE BIT(0)
/* SAI Transmit and Recieve Configuration 1 Register */ /* SAI Transmit and Receive Configuration 1 Register */
#define FSL_SAI_CR1_RFW_MASK 0x1f #define FSL_SAI_CR1_RFW_MASK 0x1f
/* SAI Transmit and Recieve Configuration 2 Register */ /* SAI Transmit and Receive Configuration 2 Register */
#define FSL_SAI_CR2_SYNC BIT(30) #define FSL_SAI_CR2_SYNC BIT(30)
#define FSL_SAI_CR2_MSEL_MASK (0x3 << 26) #define FSL_SAI_CR2_MSEL_MASK (0x3 << 26)
#define FSL_SAI_CR2_MSEL_BUS 0 #define FSL_SAI_CR2_MSEL_BUS 0
...@@ -82,12 +83,12 @@ ...@@ -82,12 +83,12 @@
#define FSL_SAI_CR2_BCD_MSTR BIT(24) #define FSL_SAI_CR2_BCD_MSTR BIT(24)
#define FSL_SAI_CR2_DIV_MASK 0xff #define FSL_SAI_CR2_DIV_MASK 0xff
/* SAI Transmit and Recieve Configuration 3 Register */ /* SAI Transmit and Receive Configuration 3 Register */
#define FSL_SAI_CR3_TRCE BIT(16) #define FSL_SAI_CR3_TRCE BIT(16)
#define FSL_SAI_CR3_WDFL(x) (x) #define FSL_SAI_CR3_WDFL(x) (x)
#define FSL_SAI_CR3_WDFL_MASK 0x1f #define FSL_SAI_CR3_WDFL_MASK 0x1f
/* SAI Transmit and Recieve Configuration 4 Register */ /* SAI Transmit and Receive Configuration 4 Register */
#define FSL_SAI_CR4_FRSZ(x) (((x) - 1) << 16) #define FSL_SAI_CR4_FRSZ(x) (((x) - 1) << 16)
#define FSL_SAI_CR4_FRSZ_MASK (0x1f << 16) #define FSL_SAI_CR4_FRSZ_MASK (0x1f << 16)
#define FSL_SAI_CR4_SYWD(x) (((x) - 1) << 8) #define FSL_SAI_CR4_SYWD(x) (((x) - 1) << 8)
...@@ -97,7 +98,7 @@ ...@@ -97,7 +98,7 @@
#define FSL_SAI_CR4_FSP BIT(1) #define FSL_SAI_CR4_FSP BIT(1)
#define FSL_SAI_CR4_FSD_MSTR BIT(0) #define FSL_SAI_CR4_FSD_MSTR BIT(0)
/* SAI Transmit and Recieve Configuration 5 Register */ /* SAI Transmit and Receive Configuration 5 Register */
#define FSL_SAI_CR5_WNW(x) (((x) - 1) << 24) #define FSL_SAI_CR5_WNW(x) (((x) - 1) << 24)
#define FSL_SAI_CR5_WNW_MASK (0x1f << 24) #define FSL_SAI_CR5_WNW_MASK (0x1f << 24)
#define FSL_SAI_CR5_W0W(x) (((x) - 1) << 16) #define FSL_SAI_CR5_W0W(x) (((x) - 1) << 16)
......
...@@ -482,13 +482,18 @@ static int fsl_spdif_startup(struct snd_pcm_substream *substream, ...@@ -482,13 +482,18 @@ static int fsl_spdif_startup(struct snd_pcm_substream *substream,
mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK | mask = SCR_TXFIFO_AUTOSYNC_MASK | SCR_TXFIFO_CTRL_MASK |
SCR_TXSEL_MASK | SCR_USRC_SEL_MASK | SCR_TXSEL_MASK | SCR_USRC_SEL_MASK |
SCR_TXFIFO_FSEL_MASK; SCR_TXFIFO_FSEL_MASK;
for (i = 0; i < SPDIF_TXRATE_MAX; i++) for (i = 0; i < SPDIF_TXRATE_MAX; i++) {
clk_prepare_enable(spdif_priv->txclk[i]); ret = clk_prepare_enable(spdif_priv->txclk[i]);
if (ret)
goto disable_txclk;
}
} else { } else {
scr = SCR_RXFIFO_FSEL_IF8 | SCR_RXFIFO_AUTOSYNC; scr = SCR_RXFIFO_FSEL_IF8 | SCR_RXFIFO_AUTOSYNC;
mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK| mask = SCR_RXFIFO_FSEL_MASK | SCR_RXFIFO_AUTOSYNC_MASK|
SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK; SCR_RXFIFO_CTL_MASK | SCR_RXFIFO_OFF_MASK;
clk_prepare_enable(spdif_priv->rxclk); ret = clk_prepare_enable(spdif_priv->rxclk);
if (ret)
goto err;
} }
regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr); regmap_update_bits(regmap, REG_SPDIF_SCR, mask, scr);
...@@ -497,6 +502,9 @@ static int fsl_spdif_startup(struct snd_pcm_substream *substream, ...@@ -497,6 +502,9 @@ static int fsl_spdif_startup(struct snd_pcm_substream *substream,
return 0; return 0;
disable_txclk:
for (i--; i >= 0; i--)
clk_disable_unprepare(spdif_priv->txclk[i]);
err: err:
clk_disable_unprepare(spdif_priv->coreclk); clk_disable_unprepare(spdif_priv->coreclk);
...@@ -707,7 +715,7 @@ static int fsl_spdif_subcode_get(struct snd_kcontrol *kcontrol, ...@@ -707,7 +715,7 @@ static int fsl_spdif_subcode_get(struct snd_kcontrol *kcontrol,
return ret; return ret;
} }
/* Q-subcode infomation. The byte size is SPDIF_UBITS_SIZE/8 */ /* Q-subcode information. The byte size is SPDIF_UBITS_SIZE/8 */
static int fsl_spdif_qinfo(struct snd_kcontrol *kcontrol, static int fsl_spdif_qinfo(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo) struct snd_ctl_elem_info *uinfo)
{ {
...@@ -739,7 +747,7 @@ static int fsl_spdif_qget(struct snd_kcontrol *kcontrol, ...@@ -739,7 +747,7 @@ static int fsl_spdif_qget(struct snd_kcontrol *kcontrol,
return ret; return ret;
} }
/* Valid bit infomation */ /* Valid bit information */
static int fsl_spdif_vbit_info(struct snd_kcontrol *kcontrol, static int fsl_spdif_vbit_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo) struct snd_ctl_elem_info *uinfo)
{ {
...@@ -767,7 +775,7 @@ static int fsl_spdif_vbit_get(struct snd_kcontrol *kcontrol, ...@@ -767,7 +775,7 @@ static int fsl_spdif_vbit_get(struct snd_kcontrol *kcontrol,
return 0; return 0;
} }
/* DPLL lock infomation */ /* DPLL lock information */
static int fsl_spdif_rxrate_info(struct snd_kcontrol *kcontrol, static int fsl_spdif_rxrate_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo) struct snd_ctl_elem_info *uinfo)
{ {
...@@ -1255,7 +1263,7 @@ static int fsl_spdif_probe(struct platform_device *pdev) ...@@ -1255,7 +1263,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = imx_pcm_dma_init(pdev); ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
if (ret) if (ret)
dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret); dev_err(&pdev->dev, "imx_pcm_dma_init failed: %d\n", ret);
......
...@@ -156,7 +156,7 @@ struct fsl_ssi_soc_data { ...@@ -156,7 +156,7 @@ struct fsl_ssi_soc_data {
* *
* @dbg_stats: Debugging statistics * @dbg_stats: Debugging statistics
* *
* @soc: SoC specifc data * @soc: SoC specific data
*/ */
struct fsl_ssi_private { struct fsl_ssi_private {
struct regmap *regs; struct regmap *regs;
...@@ -1210,7 +1210,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev, ...@@ -1210,7 +1210,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
} }
} }
/* For those SLAVE implementations, we ingore non-baudclk cases /* For those SLAVE implementations, we ignore non-baudclk cases
* and, instead, abandon MASTER mode that needs baud clock. * and, instead, abandon MASTER mode that needs baud clock.
*/ */
ssi_private->baudclk = devm_clk_get(&pdev->dev, "baud"); ssi_private->baudclk = devm_clk_get(&pdev->dev, "baud");
...@@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev, ...@@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
if (ret) if (ret)
goto error_pcm; goto error_pcm;
} else { } else {
ret = imx_pcm_dma_init(pdev); ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
if (ret) if (ret)
goto error_pcm; goto error_pcm;
} }
......
...@@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = { ...@@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_PAUSE |
SNDRV_PCM_INFO_RESUME, SNDRV_PCM_INFO_RESUME,
.buffer_bytes_max = IMX_SSI_DMABUF_SIZE, .buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
.period_bytes_min = 128, .period_bytes_min = 128,
.period_bytes_max = 65535, /* Limited by SDMA engine */ .period_bytes_max = 65535, /* Limited by SDMA engine */
.periods_min = 2, .periods_min = 2,
...@@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = { ...@@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config imx_dmaengine_pcm_config = {
.pcm_hardware = &imx_pcm_hardware, .pcm_hardware = &imx_pcm_hardware,
.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config, .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
.compat_filter_fn = filter, .compat_filter_fn = filter,
.prealloc_buffer_size = IMX_SSI_DMABUF_SIZE, .prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
}; };
int imx_pcm_dma_init(struct platform_device *pdev) int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
{ {
struct snd_dmaengine_pcm_config *config;
struct snd_pcm_hardware *pcm_hardware;
config = devm_kzalloc(&pdev->dev,
sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
*config = imx_dmaengine_pcm_config;
if (size)
config->prealloc_buffer_size = size;
pcm_hardware = devm_kzalloc(&pdev->dev,
sizeof(struct snd_pcm_hardware), GFP_KERNEL);
*pcm_hardware = imx_pcm_hardware;
if (size)
pcm_hardware->buffer_bytes_max = size;
config->pcm_hardware = pcm_hardware;
return devm_snd_dmaengine_pcm_register(&pdev->dev, return devm_snd_dmaengine_pcm_register(&pdev->dev,
&imx_dmaengine_pcm_config, config,
SND_DMAENGINE_PCM_FLAG_COMPAT); SND_DMAENGINE_PCM_FLAG_COMPAT);
} }
EXPORT_SYMBOL_GPL(imx_pcm_dma_init); EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
......
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
*/ */
#define IMX_SSI_DMABUF_SIZE (64 * 1024) #define IMX_SSI_DMABUF_SIZE (64 * 1024)
#define IMX_DEFAULT_DMABUF_SIZE (64 * 1024)
#define IMX_SAI_DMABUF_SIZE (64 * 1024)
#define IMX_SPDIF_DMABUF_SIZE (64 * 1024)
#define IMX_ESAI_DMABUF_SIZE (256 * 1024)
static inline void static inline void
imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data, imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
int dma, enum sdma_peripheral_type peripheral_type) int dma, enum sdma_peripheral_type peripheral_type)
...@@ -39,9 +44,9 @@ struct imx_pcm_fiq_params { ...@@ -39,9 +44,9 @@ struct imx_pcm_fiq_params {
}; };
#if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA) #if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
int imx_pcm_dma_init(struct platform_device *pdev); int imx_pcm_dma_init(struct platform_device *pdev, size_t size);
#else #else
static inline int imx_pcm_dma_init(struct platform_device *pdev) static inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
{ {
return -ENODEV; return -ENODEV;
} }
......
...@@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev) ...@@ -603,7 +603,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx; ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params); ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
ssi->dma_init = imx_pcm_dma_init(pdev); ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
if (ssi->fiq_init && ssi->dma_init) { if (ssi->fiq_init && ssi->dma_init) {
ret = ssi->fiq_init; ret = ssi->fiq_init;
......
...@@ -1911,7 +1911,6 @@ MODULE_DEVICE_TABLE(of, fsi_of_match); ...@@ -1911,7 +1911,6 @@ MODULE_DEVICE_TABLE(of, fsi_of_match);
static const struct platform_device_id fsi_id_table[] = { static const struct platform_device_id fsi_id_table[] = {
{ "sh_fsi", (kernel_ulong_t)&fsi1_core }, { "sh_fsi", (kernel_ulong_t)&fsi1_core },
{ "sh_fsi2", (kernel_ulong_t)&fsi2_core },
{}, {},
}; };
MODULE_DEVICE_TABLE(platform, fsi_id_table); MODULE_DEVICE_TABLE(platform, fsi_id_table);
......
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