diff options
| -rw-r--r-- | sound/soc/fsl/fsl_ssi.c | 40 |
1 files changed, 3 insertions, 37 deletions
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c index 418c64629ee7..8072926d605a 100644 --- a/sound/soc/fsl/fsl_ssi.c +++ b/sound/soc/fsl/fsl_ssi.c | |||
| @@ -168,8 +168,6 @@ struct fsl_ssi_private { | |||
| 168 | struct clk *clk; | 168 | struct clk *clk; |
| 169 | struct snd_dmaengine_dai_dma_data dma_params_tx; | 169 | struct snd_dmaengine_dai_dma_data dma_params_tx; |
| 170 | struct snd_dmaengine_dai_dma_data dma_params_rx; | 170 | struct snd_dmaengine_dai_dma_data dma_params_rx; |
| 171 | struct imx_dma_data filter_data_tx; | ||
| 172 | struct imx_dma_data filter_data_rx; | ||
| 173 | struct imx_pcm_fiq_params fiq_params; | 171 | struct imx_pcm_fiq_params fiq_params; |
| 174 | /* Register values for rx/tx configuration */ | 172 | /* Register values for rx/tx configuration */ |
| 175 | struct fsl_ssi_rxtx_reg_val rxtx_reg_val; | 173 | struct fsl_ssi_rxtx_reg_val rxtx_reg_val; |
| @@ -996,8 +994,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev, | |||
| 996 | struct fsl_ssi_private *ssi_private) | 994 | struct fsl_ssi_private *ssi_private) |
| 997 | { | 995 | { |
| 998 | struct device_node *np = pdev->dev.of_node; | 996 | struct device_node *np = pdev->dev.of_node; |
| 999 | u32 dma_events[2], dmas[4]; | 997 | u32 dmas[4]; |
| 1000 | bool shared; | ||
| 1001 | int ret; | 998 | int ret; |
| 1002 | 999 | ||
| 1003 | ssi_private->clk = devm_clk_get(&pdev->dev, NULL); | 1000 | ssi_private->clk = devm_clk_get(&pdev->dev, NULL); |
| @@ -1033,26 +1030,9 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev, | |||
| 1033 | offsetof(struct ccsr_ssi, stx0); | 1030 | offsetof(struct ccsr_ssi, stx0); |
| 1034 | ssi_private->dma_params_rx.addr = ssi_private->ssi_phys + | 1031 | ssi_private->dma_params_rx.addr = ssi_private->ssi_phys + |
| 1035 | offsetof(struct ccsr_ssi, srx0); | 1032 | offsetof(struct ccsr_ssi, srx0); |
| 1036 | ssi_private->dma_params_tx.filter_data = &ssi_private->filter_data_tx; | ||
| 1037 | ssi_private->dma_params_rx.filter_data = &ssi_private->filter_data_rx; | ||
| 1038 | 1033 | ||
| 1039 | if (!of_property_read_bool(pdev->dev.of_node, "dmas") && | 1034 | ret = !of_property_read_u32_array(np, "dmas", dmas, 4); |
| 1040 | ssi_private->use_dma) { | 1035 | if (ssi_private->use_dma && !ret && dmas[2] == IMX_DMATYPE_SSI_DUAL) { |
| 1041 | /* | ||
| 1042 | * FIXME: This is a temporary solution until all | ||
| 1043 | * necessary dma drivers support the generic dma | ||
| 1044 | * bindings. | ||
| 1045 | */ | ||
| 1046 | ret = of_property_read_u32_array(pdev->dev.of_node, | ||
| 1047 | "fsl,ssi-dma-events", dma_events, 2); | ||
| 1048 | if (ret && ssi_private->use_dma) { | ||
| 1049 | dev_err(&pdev->dev, "could not get dma events but fsl-ssi is configured to use DMA\n"); | ||
| 1050 | goto error_dma_events; | ||
| 1051 | } | ||
| 1052 | } | ||
| 1053 | /* Should this be merge with the above? */ | ||
| 1054 | if (!of_property_read_u32_array(pdev->dev.of_node, "dmas", dmas, 4) | ||
| 1055 | && dmas[2] == IMX_DMATYPE_SSI_DUAL) { | ||
| 1056 | ssi_private->use_dual_fifo = true; | 1036 | ssi_private->use_dual_fifo = true; |
| 1057 | /* When using dual fifo mode, we need to keep watermark | 1037 | /* When using dual fifo mode, we need to keep watermark |
| 1058 | * as even numbers due to dma script limitation. | 1038 | * as even numbers due to dma script limitation. |
| @@ -1061,21 +1041,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev, | |||
| 1061 | ssi_private->dma_params_rx.maxburst &= ~0x1; | 1041 | ssi_private->dma_params_rx.maxburst &= ~0x1; |
| 1062 | } | 1042 | } |
| 1063 | 1043 | ||
| 1064 | shared = of_device_is_compatible(of_get_parent(np), "fsl,spba-bus"); | ||
| 1065 | |||
| 1066 | imx_pcm_dma_params_init_data(&ssi_private->filter_data_tx, | ||
| 1067 | dma_events[0], shared ? IMX_DMATYPE_SSI_SP : IMX_DMATYPE_SSI); | ||
| 1068 | imx_pcm_dma_params_init_data(&ssi_private->filter_data_rx, | ||
| 1069 | dma_events[1], shared ? IMX_DMATYPE_SSI_SP : IMX_DMATYPE_SSI); | ||
| 1070 | |||
| 1071 | return 0; | 1044 | return 0; |
| 1072 | |||
| 1073 | error_dma_events: | ||
| 1074 | if (!IS_ERR(ssi_private->baudclk)) | ||
| 1075 | clk_disable_unprepare(ssi_private->baudclk); | ||
| 1076 | clk_disable_unprepare(ssi_private->clk); | ||
| 1077 | |||
| 1078 | return ret; | ||
| 1079 | } | 1045 | } |
| 1080 | 1046 | ||
| 1081 | static void fsl_ssi_imx_clean(struct platform_device *pdev, | 1047 | static void fsl_ssi_imx_clean(struct platform_device *pdev, |
