mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-25 06:53:40 +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);
|
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 = {
|
static struct snd_soc_dai_driver imx_ssi_dai = {
|
||||||
|
.probe = imx_ssi_dai_probe,
|
||||||
.playback = {
|
.playback = {
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
@ -455,20 +470,6 @@ static struct snd_soc_dai_driver imx_ssi_dai = {
|
|||||||
.ops = &imx_ssi_pcm_dai_ops,
|
.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 = {
|
static struct snd_soc_dai_driver imx_ac97_dai = {
|
||||||
.probe = imx_ssi_dai_probe,
|
.probe = imx_ssi_dai_probe,
|
||||||
.ac97_control = 1,
|
.ac97_control = 1,
|
||||||
@ -677,7 +678,17 @@ static int imx_ssi_probe(struct platform_device *pdev)
|
|||||||
goto failed_register;
|
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)
|
if (!ssi->soc_platform_pdev)
|
||||||
goto failed_pdev_alloc;
|
goto failed_pdev_alloc;
|
||||||
platform_set_drvdata(ssi->soc_platform_pdev, ssi);
|
platform_set_drvdata(ssi->soc_platform_pdev, ssi);
|
||||||
@ -692,6 +703,9 @@ static int imx_ssi_probe(struct platform_device *pdev)
|
|||||||
failed_pdev_add:
|
failed_pdev_add:
|
||||||
platform_device_put(ssi->soc_platform_pdev);
|
platform_device_put(ssi->soc_platform_pdev);
|
||||||
failed_pdev_alloc:
|
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);
|
snd_soc_unregister_dai(&pdev->dev);
|
||||||
failed_register:
|
failed_register:
|
||||||
failed_ac97:
|
failed_ac97:
|
||||||
|
@ -212,6 +212,7 @@ struct imx_ssi {
|
|||||||
int enabled;
|
int enabled;
|
||||||
|
|
||||||
struct platform_device *soc_platform_pdev;
|
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,
|
struct snd_soc_platform *imx_ssi_fiq_init(struct platform_device *pdev,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user