mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-24 22:41:25 +00:00
ASoC i.MX: register dma audio device
We have two different transfer methods on i.MX: FIQ and DMA. Since the merge of the ASoC multicomponent support the DMA device is lost. Add it again. Also, imx_ssi_dai_probe has to be called for !AC97 aswell. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
bf0199b7a5
commit
f562be51fe
@ -439,7 +439,22 @@ void imx_pcm_free(struct snd_pcm *pcm)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(imx_pcm_free);
|
||||
|
||||
static int imx_ssi_dai_probe(struct snd_soc_dai *dai)
|
||||
{
|
||||
struct imx_ssi *ssi = dev_get_drvdata(dai->dev);
|
||||
uint32_t val;
|
||||
|
||||
snd_soc_dai_set_drvdata(dai, ssi);
|
||||
|
||||
val = SSI_SFCSR_TFWM0(ssi->dma_params_tx.burstsize) |
|
||||
SSI_SFCSR_RFWM0(ssi->dma_params_rx.burstsize);
|
||||
writel(val, ssi->base + SSI_SFCSR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct snd_soc_dai_driver imx_ssi_dai = {
|
||||
.probe = imx_ssi_dai_probe,
|
||||
.playback = {
|
||||
.channels_min = 2,
|
||||
.channels_max = 2,
|
||||
@ -455,20 +470,6 @@ static struct snd_soc_dai_driver imx_ssi_dai = {
|
||||
.ops = &imx_ssi_pcm_dai_ops,
|
||||
};
|
||||
|
||||
static int imx_ssi_dai_probe(struct snd_soc_dai *dai)
|
||||
{
|
||||
struct imx_ssi *ssi = dev_get_drvdata(dai->dev);
|
||||
uint32_t val;
|
||||
|
||||
snd_soc_dai_set_drvdata(dai, ssi);
|
||||
|
||||
val = SSI_SFCSR_TFWM0(ssi->dma_params_tx.burstsize) |
|
||||
SSI_SFCSR_RFWM0(ssi->dma_params_rx.burstsize);
|
||||
writel(val, ssi->base + SSI_SFCSR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct snd_soc_dai_driver imx_ac97_dai = {
|
||||
.probe = imx_ssi_dai_probe,
|
||||
.ac97_control = 1,
|
||||
@ -677,7 +678,17 @@ static int imx_ssi_probe(struct platform_device *pdev)
|
||||
goto failed_register;
|
||||
}
|
||||
|
||||
ssi->soc_platform_pdev = platform_device_alloc("imx-fiq-pcm-audio", pdev->id);
|
||||
ssi->soc_platform_pdev_fiq = platform_device_alloc("imx-fiq-pcm-audio", pdev->id);
|
||||
if (!ssi->soc_platform_pdev_fiq)
|
||||
goto failed_pdev_fiq_alloc;
|
||||
platform_set_drvdata(ssi->soc_platform_pdev_fiq, ssi);
|
||||
ret = platform_device_add(ssi->soc_platform_pdev_fiq);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to add platform device\n");
|
||||
goto failed_pdev_fiq_add;
|
||||
}
|
||||
|
||||
ssi->soc_platform_pdev = platform_device_alloc("imx-pcm-audio", pdev->id);
|
||||
if (!ssi->soc_platform_pdev)
|
||||
goto failed_pdev_alloc;
|
||||
platform_set_drvdata(ssi->soc_platform_pdev, ssi);
|
||||
@ -692,6 +703,9 @@ static int imx_ssi_probe(struct platform_device *pdev)
|
||||
failed_pdev_add:
|
||||
platform_device_put(ssi->soc_platform_pdev);
|
||||
failed_pdev_alloc:
|
||||
failed_pdev_fiq_add:
|
||||
platform_device_put(ssi->soc_platform_pdev_fiq);
|
||||
failed_pdev_fiq_alloc:
|
||||
snd_soc_unregister_dai(&pdev->dev);
|
||||
failed_register:
|
||||
failed_ac97:
|
||||
|
@ -212,6 +212,7 @@ struct imx_ssi {
|
||||
int enabled;
|
||||
|
||||
struct platform_device *soc_platform_pdev;
|
||||
struct platform_device *soc_platform_pdev_fiq;
|
||||
};
|
||||
|
||||
struct snd_soc_platform *imx_ssi_fiq_init(struct platform_device *pdev,
|
||||
|
Loading…
x
Reference in New Issue
Block a user