ASoC: fsl: Update set_tdm_slot() semantics
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 12 Jan 2015 09:27:18 +0000 (10:27 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 14 Jan 2015 19:04:47 +0000 (19:04 +0000)
The fsl-ssi and imx-ssi drivers use inverted semantics for the tx_mask and
rx_mask parameter of the set_tdm_slot() callback compared to rest of ASoC.
This patch updates the driver's semantics to be consistent with the rest of
ASoC, i.e. a set bit means a active slot and a cleared bit means a inactive
slot.  This will allow us to use the set_tdm_slot() API in a more generic
way.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/eukrea-tlv320.c
sound/soc/fsl/fsl_ssi.c
sound/soc/fsl/fsl_utils.c
sound/soc/fsl/imx-mc13783.c
sound/soc/fsl/imx-ssi.c
sound/soc/fsl/wm1133-ev1.c

index 9ce70fc67b0950b432a5be5d5e23d6cd4e631f43..0d0203b34d8b707024d10a7070a7f6267514e25b 100644 (file)
@@ -69,7 +69,7 @@ static int eukrea_tlv320_hw_params(struct snd_pcm_substream *substream,
                return ret;
        }
 
-       snd_soc_dai_set_tdm_slot(cpu_dai, 0xffffffc, 0xffffffc, 2, 0);
+       snd_soc_dai_set_tdm_slot(cpu_dai, 0x3, 0x3, 2, 0);
 
        ret = snd_soc_dai_set_sysclk(cpu_dai, IMX_SSP_SYS_CLK, 0,
                                SND_SOC_CLOCK_IN);
index a65f17d57ffb44733b7858364678581308dea040..8841e59a98696be534ed51887bb2c374575af908 100644 (file)
@@ -992,8 +992,8 @@ static int fsl_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask,
        regmap_update_bits(regs, CCSR_SSI_SCR, CCSR_SSI_SCR_SSIEN,
                        CCSR_SSI_SCR_SSIEN);
 
-       regmap_write(regs, CCSR_SSI_STMSK, tx_mask);
-       regmap_write(regs, CCSR_SSI_SRMSK, rx_mask);
+       regmap_write(regs, CCSR_SSI_STMSK, ~tx_mask);
+       regmap_write(regs, CCSR_SSI_SRMSK, ~rx_mask);
 
        regmap_update_bits(regs, CCSR_SSI_SCR, CCSR_SSI_SCR_SSIEN, val);
 
index 2ac7755da8768dfe2b12a9d35a5aa5eda9e1d766..5fd4463dbf05e060c8ce2d4ded63e1f064e71be8 100644 (file)
@@ -94,7 +94,7 @@ EXPORT_SYMBOL(fsl_asoc_get_dma_channel);
  * @rx_mask: bitmask representing active RX slots.
  *
  * This function used to generate the TDM slot TX/RX mask. And the TX/RX
- * mask will use a 0 bit for an active slot as default, and the default
+ * mask will use a 1 bit for an active slot as default, and the default
  * active bits are at the LSB of the mask value.
  */
 int fsl_asoc_xlate_tdm_slot_mask(unsigned int slots,
@@ -105,9 +105,9 @@ int fsl_asoc_xlate_tdm_slot_mask(unsigned int slots,
                return -EINVAL;
 
        if (tx_mask)
-               *tx_mask = ~((1 << slots) - 1);
+               *tx_mask = ((1 << slots) - 1);
        if (rx_mask)
-               *rx_mask = ~((1 << slots) - 1);
+               *rx_mask = ((1 << slots) - 1);
 
        return 0;
 }
index 9589452e995e10575c435c98872b3ee5b1a1a4e1..9e6493d4e7ff92e6a328dfa2d062349a314d88a0 100644 (file)
@@ -45,7 +45,7 @@ static int imx_mc13783_hifi_hw_params(struct snd_pcm_substream *substream,
        if (ret)
                return ret;
 
-       ret = snd_soc_dai_set_tdm_slot(cpu_dai, 0x0, 0xfffffffc, 2, 16);
+       ret = snd_soc_dai_set_tdm_slot(cpu_dai, 0x3, 0x3, 2, 16);
        if (ret)
                return ret;
 
index fa801e17c51e6222abbbce12e40e5cc9f50a56c2..6aeaac33871adef9ae87d56116d7fcd13c50414e 100644 (file)
@@ -74,8 +74,8 @@ static int imx_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai,
        sccr |= SSI_STCCR_DC(slots - 1);
        writel(sccr, ssi->base + SSI_SRCCR);
 
-       writel(tx_mask, ssi->base + SSI_STMSK);
-       writel(rx_mask, ssi->base + SSI_SRMSK);
+       writel(~tx_mask, ssi->base + SSI_STMSK);
+       writel(~rx_mask, ssi->base + SSI_SRMSK);
 
        return 0;
 }
index 804749a6c61e3241763eace3f935f95b978a0d17..ca7b774b13ee4276ce00bac10d20956809bf0f95 100644 (file)
@@ -116,10 +116,10 @@ static int wm1133_ev1_hw_params(struct snd_pcm_substream *substream,
        /* TODO: The SSI driver should figure this out for us */
        switch (channels) {
        case 2:
-               snd_soc_dai_set_tdm_slot(cpu_dai, 0xffffffc, 0xffffffc, 2, 0);
+               snd_soc_dai_set_tdm_slot(cpu_dai, 0x3, 0x3, 2, 0);
                break;
        case 1:
-               snd_soc_dai_set_tdm_slot(cpu_dai, 0xffffffe, 0xffffffe, 1, 0);
+               snd_soc_dai_set_tdm_slot(cpu_dai, 0x1, 0x1, 1, 0);
                break;
        default:
                return -EINVAL;