]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge remote-tracking branches 'asoc/topic/da7218' and 'asoc/topic/da7219' into asoc-next
authorMark Brown <broonie@kernel.org>
Mon, 11 Jan 2016 13:54:35 +0000 (13:54 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 11 Jan 2016 13:54:35 +0000 (13:54 +0000)
sound/soc/codecs/da7218.c
sound/soc/codecs/da7219.c

index 72686517ff54f2a98f4e039f42f29a2bfba930d9..93575f25186687f7fe21f5c6d514165c6cd27140 100644 (file)
@@ -1954,17 +1954,44 @@ static int da7218_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
                return -EINVAL;
        }
 
-       switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-       case SND_SOC_DAIFMT_NB_NF:
-               break;
-       case SND_SOC_DAIFMT_NB_IF:
-               dai_clk_mode |= DA7218_DAI_WCLK_POL_INV;
-               break;
-       case SND_SOC_DAIFMT_IB_NF:
-               dai_clk_mode |= DA7218_DAI_CLK_POL_INV;
+       switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+       case SND_SOC_DAIFMT_I2S:
+       case SND_SOC_DAIFMT_LEFT_J:
+       case SND_SOC_DAIFMT_RIGHT_J:
+               switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+               case SND_SOC_DAIFMT_NB_NF:
+                       break;
+               case SND_SOC_DAIFMT_NB_IF:
+                       dai_clk_mode |= DA7218_DAI_WCLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_IB_NF:
+                       dai_clk_mode |= DA7218_DAI_CLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_IB_IF:
+                       dai_clk_mode |= DA7218_DAI_WCLK_POL_INV |
+                                       DA7218_DAI_CLK_POL_INV;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
-       case SND_SOC_DAIFMT_IB_IF:
-               dai_clk_mode |= DA7218_DAI_WCLK_POL_INV | DA7218_DAI_CLK_POL_INV;
+       case SND_SOC_DAIFMT_DSP_B:
+               switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+               case SND_SOC_DAIFMT_NB_NF:
+                       dai_clk_mode |= DA7218_DAI_CLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_NB_IF:
+                       dai_clk_mode |= DA7218_DAI_WCLK_POL_INV |
+                                       DA7218_DAI_CLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_IB_NF:
+                       break;
+               case SND_SOC_DAIFMT_IB_IF:
+                       dai_clk_mode |= DA7218_DAI_WCLK_POL_INV;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
        default:
                return -EINVAL;
index c6d3b32bb4aeaba725b124140646ae0de8d3edf0..81c0708b85c1569ad6e109dfac647c732d504b55 100644 (file)
@@ -1156,18 +1156,44 @@ static int da7219_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
                return -EINVAL;
        }
 
-       switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
-       case SND_SOC_DAIFMT_NB_NF:
-               break;
-       case SND_SOC_DAIFMT_NB_IF:
-               dai_clk_mode |= DA7219_DAI_WCLK_POL_INV;
-               break;
-       case SND_SOC_DAIFMT_IB_NF:
-               dai_clk_mode |= DA7219_DAI_CLK_POL_INV;
+       switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+       case SND_SOC_DAIFMT_I2S:
+       case SND_SOC_DAIFMT_LEFT_J:
+       case SND_SOC_DAIFMT_RIGHT_J:
+               switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+               case SND_SOC_DAIFMT_NB_NF:
+                       break;
+               case SND_SOC_DAIFMT_NB_IF:
+                       dai_clk_mode |= DA7219_DAI_WCLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_IB_NF:
+                       dai_clk_mode |= DA7219_DAI_CLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_IB_IF:
+                       dai_clk_mode |= DA7219_DAI_WCLK_POL_INV |
+                                       DA7219_DAI_CLK_POL_INV;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
-       case SND_SOC_DAIFMT_IB_IF:
-               dai_clk_mode |= DA7219_DAI_WCLK_POL_INV |
-                               DA7219_DAI_CLK_POL_INV;
+       case SND_SOC_DAIFMT_DSP_B:
+               switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+               case SND_SOC_DAIFMT_NB_NF:
+                       dai_clk_mode |= DA7219_DAI_CLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_NB_IF:
+                       dai_clk_mode |= DA7219_DAI_WCLK_POL_INV |
+                                       DA7219_DAI_CLK_POL_INV;
+                       break;
+               case SND_SOC_DAIFMT_IB_NF:
+                       break;
+               case SND_SOC_DAIFMT_IB_IF:
+                       dai_clk_mode |= DA7219_DAI_WCLK_POL_INV;
+                       break;
+               default:
+                       return -EINVAL;
+               }
                break;
        default:
                return -EINVAL;
@@ -1592,9 +1618,14 @@ static void da7219_handle_pdata(struct snd_soc_codec *codec)
        }
 }
 
+static struct reg_sequence da7219_rev_aa_patch[] = {
+       { DA7219_REFERENCES, 0x08 },
+};
+
 static int da7219_probe(struct snd_soc_codec *codec)
 {
        struct da7219_priv *da7219 = snd_soc_codec_get_drvdata(codec);
+       unsigned int rev;
        int ret;
 
        mutex_init(&da7219->lock);
@@ -1604,6 +1635,26 @@ static int da7219_probe(struct snd_soc_codec *codec)
        if (ret)
                return ret;
 
+       ret = regmap_read(da7219->regmap, DA7219_CHIP_REVISION, &rev);
+       if (ret) {
+               dev_err(codec->dev, "Failed to read chip revision: %d\n", ret);
+               goto err_disable_reg;
+       }
+
+       switch (rev & DA7219_CHIP_MINOR_MASK) {
+       case 0:
+               ret = regmap_register_patch(da7219->regmap, da7219_rev_aa_patch,
+                                           ARRAY_SIZE(da7219_rev_aa_patch));
+               if (ret) {
+                       dev_err(codec->dev, "Failed to register AA patch: %d\n",
+                               ret);
+                       goto err_disable_reg;
+               }
+               break;
+       default:
+               break;
+       }
+
        /* Handle DT/Platform data */
        if (codec->dev->of_node)
                da7219->pdata = da7219_of_to_pdata(codec);
@@ -1774,7 +1825,6 @@ static struct reg_default da7219_reg_defaults[] = {
        { DA7219_MIXOUT_R_CTRL, 0x10 },
        { DA7219_CHIP_ID1, 0x23 },
        { DA7219_CHIP_ID2, 0x93 },
-       { DA7219_CHIP_REVISION, 0x00 },
        { DA7219_IO_CTRL, 0x00 },
        { DA7219_GAIN_RAMP_CTRL, 0x00 },
        { DA7219_PC_COUNT, 0x02 },