ASoC: max98396: Implement DSP speaker monitor
authorDaniel Mack <daniel@zonque.org>
Fri, 24 Jun 2022 10:47:11 +0000 (12:47 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 27 Jun 2022 12:16:12 +0000 (13:16 +0100)
Allow the selection of the TDM slot that is used to send back speaker
monitor data. The DT property adi,spkfb-slot-no can be used to configure
this setting which defaults to 2.

Signed-off-by: Daniel Mack <daniel@zonque.org>
Link: https://lore.kernel.org/r/20220624104712.1934484-8-daniel@zonque.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/max98396.c
sound/soc/codecs/max98396.h

index 0a1d982..f28831f 100644 (file)
@@ -1377,6 +1377,9 @@ static int max98396_probe(struct snd_soc_component *component)
        regmap_write(max98396->regmap,
                     MAX98396_R2045_PCM_TX_CTRL_2,
                     max98396->i_slot);
+       regmap_write(max98396->regmap,
+                    MAX98396_R204A_PCM_TX_CTRL_7,
+                    max98396->spkfb_slot);
 
        if (max98396->v_slot < 8)
                if (max98396->device_id == CODEC_TYPE_MAX98396)
@@ -1552,6 +1555,11 @@ static void max98396_read_device_property(struct device *dev,
        else
                max98396->i_slot = 1;
 
+       if (!device_property_read_u32(dev, "adi,spkfb-slot-no", &value))
+               max98396->spkfb_slot = value & 0xF;
+       else
+               max98396->spkfb_slot = 2;
+
        if (!device_property_read_u32(dev, "adi,bypass-slot-no", &value))
                max98396->bypass_slot = value & 0xF;
        else
index 8fa081f..ff330ef 100644 (file)
@@ -303,6 +303,7 @@ struct max98396_priv {
        struct regulator *pvdd, *vbat;
        unsigned int v_slot;
        unsigned int i_slot;
+       unsigned int spkfb_slot;
        unsigned int bypass_slot;
        bool interleave_mode;
        unsigned int ch_size;