浏览代码

ASoC: fsl: imx-ssi: fix probe on imx31

On imx31 with mc13783 codec the FIQ is not necessary and not enabled
as DMA transfer is available.
Change the probe() function to fail only if both FIQ and DMA are not
available.

Signed-off-by: Philippe Rétornaz <philippe.retornaz@epfl.ch>
Signed-off-by: Mark Brown <broonie@linaro.org>
Philippe Rétornaz 12 年之前
父节点
当前提交
5a6e19bedb
共有 2 个文件被更改,包括 14 次插入11 次删除
  1. 12 11
      sound/soc/fsl/imx-ssi.c
  2. 2 0
      sound/soc/fsl/imx-ssi.h

+ 12 - 11
sound/soc/fsl/imx-ssi.c

@@ -600,19 +600,17 @@ static int imx_ssi_probe(struct platform_device *pdev)
 	ssi->fiq_params.dma_params_rx = &ssi->dma_params_rx;
 	ssi->fiq_params.dma_params_rx = &ssi->dma_params_rx;
 	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
 	ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
 
 
-	ret = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
-	if (ret)
-		goto failed_pcm_fiq;
+	ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
+	ssi->dma_init = imx_pcm_dma_init(pdev);
 
 
-	ret = imx_pcm_dma_init(pdev);
-	if (ret)
-		goto failed_pcm_dma;
+	if (ssi->fiq_init && ssi->dma_init) {
+		ret = ssi->fiq_init;
+		goto failed_pcm;
+	}
 
 
 	return 0;
 	return 0;
 
 
-failed_pcm_dma:
-	imx_pcm_fiq_exit(pdev);
-failed_pcm_fiq:
+failed_pcm:
 	snd_soc_unregister_component(&pdev->dev);
 	snd_soc_unregister_component(&pdev->dev);
 failed_register:
 failed_register:
 	release_mem_region(res->start, resource_size(res));
 	release_mem_region(res->start, resource_size(res));
@@ -628,8 +626,11 @@ static int imx_ssi_remove(struct platform_device *pdev)
 	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	struct imx_ssi *ssi = platform_get_drvdata(pdev);
 	struct imx_ssi *ssi = platform_get_drvdata(pdev);
 
 
-	imx_pcm_dma_exit(pdev);
-	imx_pcm_fiq_exit(pdev);
+	if (!ssi->dma_init)
+		imx_pcm_dma_exit(pdev);
+
+	if (!ssi->fiq_init)
+		imx_pcm_fiq_exit(pdev);
 
 
 	snd_soc_unregister_component(&pdev->dev);
 	snd_soc_unregister_component(&pdev->dev);
 
 

+ 2 - 0
sound/soc/fsl/imx-ssi.h

@@ -211,6 +211,8 @@ struct imx_ssi {
 	struct imx_dma_data filter_data_rx;
 	struct imx_dma_data filter_data_rx;
 	struct imx_pcm_fiq_params fiq_params;
 	struct imx_pcm_fiq_params fiq_params;
 
 
+	int fiq_init;
+	int dma_init;
 	int enabled;
 	int enabled;
 };
 };