b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | From 307e37122cc14b5b305639c18ea575ebe623da2f Mon Sep 17 00:00:00 2001 |
| 2 | From: Viorel Suman <viorel.suman@nxp.com> |
| 3 | Date: Sun, 30 Apr 2017 17:05:52 +0300 |
| 4 | Subject: [PATCH] ASoC: fsl_sai: set specific fmt for I2S XTOR |
| 5 | |
| 6 | Set specific fmt, for i2s xtor receiver is |
| 7 | in slave mode and i2s xtor transmitter is in master mode. |
| 8 | |
| 9 | Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com> |
| 10 | Signed-off-by: Viorel Suman <viorel.suman@nxp.com> |
| 11 | --- |
| 12 | sound/soc/fsl/fsl_sai.c | 12 ++++++++++++ |
| 13 | sound/soc/fsl/fsl_sai.h | 2 +- |
| 14 | 2 files changed, 13 insertions(+), 1 deletion(-) |
| 15 | |
| 16 | --- a/sound/soc/fsl/fsl_sai.c |
| 17 | +++ b/sound/soc/fsl/fsl_sai.c |
| 18 | @@ -336,14 +336,23 @@ static int fsl_sai_set_dai_fmt_tr(struct |
| 19 | |
| 20 | static int fsl_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) |
| 21 | { |
| 22 | + struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| 23 | int ret; |
| 24 | |
| 25 | + if (sai->i2s_xtor) |
| 26 | + fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | |
| 27 | + SND_SOC_DAIFMT_CBS_CFS; |
| 28 | + |
| 29 | ret = fsl_sai_set_dai_fmt_tr(cpu_dai, fmt, FSL_FMT_TRANSMITTER); |
| 30 | if (ret) { |
| 31 | dev_err(cpu_dai->dev, "Cannot set tx format: %d\n", ret); |
| 32 | return ret; |
| 33 | } |
| 34 | |
| 35 | + if (sai->i2s_xtor) |
| 36 | + fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | |
| 37 | + SND_SOC_DAIFMT_CBM_CFM; |
| 38 | + |
| 39 | ret = fsl_sai_set_dai_fmt_tr(cpu_dai, fmt, FSL_FMT_RECEIVER); |
| 40 | if (ret) |
| 41 | dev_err(cpu_dai->dev, "Cannot set rx format: %d\n", ret); |
| 42 | @@ -975,6 +984,9 @@ static int fsl_sai_probe(struct platform |
| 43 | return -EINVAL; |
| 44 | } |
| 45 | |
| 46 | + /* I2S XTOR mode */ |
| 47 | + sai->i2s_xtor = (of_find_property(np, "fsl,i2s-xtor", NULL) != NULL); |
| 48 | + |
| 49 | irq = platform_get_irq(pdev, 0); |
| 50 | if (irq < 0) { |
| 51 | dev_err(&pdev->dev, "no irq for node %s\n", pdev->name); |
| 52 | --- a/sound/soc/fsl/fsl_sai.h |
| 53 | +++ b/sound/soc/fsl/fsl_sai.h |
| 54 | @@ -160,7 +160,7 @@ struct fsl_sai { |
| 55 | bool slave_mode[2]; |
| 56 | bool is_lsb_first; |
| 57 | bool is_dsp_mode; |
| 58 | - bool sai_on_imx; |
| 59 | + bool i2s_xtor; |
| 60 | bool synchronous[2]; |
| 61 | bool is_stream_opened[2]; |
| 62 | unsigned int dataline[2]; |