ASoC: fsl_sai: handle slave mode per TX/RX direction
authorViorel Suman <viorel.suman@nxp.com>
Wed, 3 May 2017 07:16:02 +0000 (10:16 +0300)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:22:07 +0000 (15:22 -0500)
The SAI interface can be a clock supplier or consummer
as function of stream direction, ie when interacting
with I2S XTOR. Removed FSL_SAI_RFR define as it is now
referred as FSL_SAI_RFR0.

Signed-off-by: Viorel Suman <viorel.suman@nxp.com>
sound/soc/fsl/fsl_sai.c
sound/soc/fsl/fsl_sai.h

index 12c15ab..808e79a 100644 (file)
@@ -306,7 +306,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,
                return -EINVAL;
        }
 
-       sai->is_slave_mode = false;
+       sai->slave_mode[tx] = false;
 
        /* DAI clock master masks */
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
@@ -315,14 +315,14 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,
                val_cr4 |= FSL_SAI_CR4_FSD_MSTR;
                break;
        case SND_SOC_DAIFMT_CBM_CFM:
-               sai->is_slave_mode = true;
+               sai->slave_mode[tx] = true;
                break;
        case SND_SOC_DAIFMT_CBS_CFM:
                val_cr2 |= FSL_SAI_CR2_BCD_MSTR;
                break;
        case SND_SOC_DAIFMT_CBM_CFS:
                val_cr4 |= FSL_SAI_CR4_FSD_MSTR;
-               sai->is_slave_mode = true;
+               sai->slave_mode[tx] = true;
                break;
        default:
                return -EINVAL;
@@ -363,7 +363,7 @@ static int fsl_sai_set_bclk(struct snd_soc_dai *dai, bool tx, u32 freq)
        int ret = 0;
 
        /* Don't apply to slave mode */
-       if (sai->is_slave_mode)
+       if (sai->slave_mode[tx])
                return 0;
 
        for (id = 0; id < FSL_SAI_MCLK_MAX; id++) {
@@ -458,7 +458,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
        if (sai->slot_width)
                slot_width = sai->slot_width;
 
-       if (!sai->is_slave_mode) {
+       if (!sai->slave_mode[tx]) {
                ret = fsl_sai_set_bclk(cpu_dai, tx,
                                slots * slot_width * params_rate(params));
                if (ret)
@@ -494,7 +494,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
         * error.
         */
 
-       if (!sai->is_slave_mode) {
+       if (!sai->slave_mode[tx]) {
                if (!sai->synchronous[TX] && sai->synchronous[RX] && !tx) {
                        regmap_update_bits(sai->regmap, FSL_SAI_TCR4,
                                FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK,
@@ -523,7 +523,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
         * error.
         */
 
-       if (!sai->is_slave_mode) {
+       if (!sai->slave_mode[tx]) {
                if (!sai->synchronous[TX] && sai->synchronous[RX] && !tx) {
                        regmap_update_bits(sai->regmap, FSL_SAI_TCR4,
                                FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK,
@@ -581,7 +581,7 @@ static int fsl_sai_hw_free(struct snd_pcm_substream *substream,
        struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai);
        bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
 
-       if (!sai->is_slave_mode &&
+       if (!sai->slave_mode[tx] &&
                        sai->mclk_streams & BIT(substream->stream)) {
                clk_disable_unprepare(sai->mclk_clk[sai->mclk_id[tx]]);
                sai->mclk_streams &= ~BIT(substream->stream);
@@ -676,7 +676,7 @@ static int fsl_sai_trigger(struct snd_pcm_substream *substream, int cmd,
                         * This is a hardware bug, and will be fix in the
                         * next sai version.
                         */
-                       if (!sai->is_slave_mode) {
+                       if (!sai->slave_mode[tx]) {
                                /* Software Reset for both Tx and Rx */
                                regmap_write(sai->regmap,
                                             FSL_SAI_TCSR, FSL_SAI_CSR_SR);
index e7d615d..7b78504 100644 (file)
@@ -39,7 +39,6 @@
 #define FSL_SAI_RDR1    0xa4 /* SAI Receive Data */
 #define FSL_SAI_RFR0    0xc0 /* SAI Receive FIFO */
 #define FSL_SAI_RFR1    0xc4 /* SAI Receive FIFO */
-#define FSL_SAI_RFR    0xc0 /* SAI Receive FIFO */
 #define FSL_SAI_RMR    0xe0 /* SAI Receive Mask */
 
 #define FSL_SAI_xCSR(tx)       (tx ? FSL_SAI_TCSR : FSL_SAI_RCSR)
@@ -160,7 +159,7 @@ struct fsl_sai {
        struct clk *bus_clk;
        struct clk *mclk_clk[FSL_SAI_MCLK_MAX];
 
-       bool is_slave_mode;
+       bool slave_mode[2];
        bool is_lsb_first;
        bool is_dsp_mode;
        bool sai_on_imx;