ASoC: codecs: tas5720: add TAS5722 TDM slot width setting support
authorAndreas Dannenberg <dannenberg@ti.com>
Fri, 31 Aug 2018 14:47:14 +0000 (09:47 -0500)
committerMark Brown <broonie@kernel.org>
Fri, 31 Aug 2018 14:56:50 +0000 (15:56 +0100)
Unlike the TAS5720, the TAS5722 can be configured to utilize 16-bit wide
slots in TDM mode. This can help easing audio clocking/frequency
requirements.

Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
Signed-off-by: Andrew F. Davis <afd@ti.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/tas5720.c

index 3c46911..6bd0e5d 100644 (file)
@@ -152,6 +152,7 @@ static int tas5720_set_dai_tdm_slot(struct snd_soc_dai *dai,
                                    int slots, int slot_width)
 {
        struct snd_soc_component *component = dai->component;
+       struct tas5720_data *tas5720 = snd_soc_component_get_drvdata(component);
        unsigned int first_slot;
        int ret;
 
@@ -185,6 +186,20 @@ static int tas5720_set_dai_tdm_slot(struct snd_soc_dai *dai,
        if (ret < 0)
                goto error_snd_soc_component_update_bits;
 
+       /* Configure TDM slot width. This is only applicable to TAS5722. */
+       switch (tas5720->devtype) {
+       case TAS5722:
+               ret = snd_soc_component_update_bits(component, TAS5722_DIGITAL_CTRL2_REG,
+                                                   TAS5722_TDM_SLOT_16B,
+                                                   slot_width == 16 ?
+                                                   TAS5722_TDM_SLOT_16B : 0);
+               if (ret < 0)
+                       goto error_snd_soc_component_update_bits;
+               break;
+       default:
+               break;
+       }
+
        return 0;
 
 error_snd_soc_component_update_bits: