]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: Intel: KMB: Rework disable channel function
authorMichael Sit Wei Hong <michael.wei.hong.sit@intel.com>
Thu, 30 Jul 2020 05:53:17 +0000 (13:53 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 30 Jul 2020 19:13:41 +0000 (20:13 +0100)
All channels are enabled at boot up, this patch ensures that all
channels are disabled at boot and whenever the function is called.

Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>
Reviewed-by: Sia Jee Heng <jee.heng.sia@intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200730055319.1522-3-michael.wei.hong.sit@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/keembay/kmb_platform.c
sound/soc/intel/keembay/kmb_platform.h

index dcc5ac5615455fc6addf03ee96b4dff1a141b258..16f9fc4c663d1e24e75bc513e06fb423329d6cb7 100644 (file)
@@ -109,14 +109,14 @@ static unsigned int kmb_pcm_rx_fn(struct kmb_i2s_info *kmb_i2s,
 static inline void kmb_i2s_disable_channels(struct kmb_i2s_info *kmb_i2s,
                                            u32 stream)
 {
-       struct i2s_clk_config_data *config = &kmb_i2s->config;
        u32 i;
 
+       /* Disable all channels regardless of configuration*/
        if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               for (i = 0; i < config->chan_nr / 2; i++)
+               for (i = 0; i < MAX_ISR; i++)
                        writel(0, kmb_i2s->i2s_base + TER(i));
        } else {
-               for (i = 0; i < config->chan_nr / 2; i++)
+               for (i = 0; i < MAX_ISR; i++)
                        writel(0, kmb_i2s->i2s_base + RER(i));
        }
 }
@@ -637,6 +637,10 @@ static int kmb_plat_dai_probe(struct platform_device *pdev)
                return ret;
        }
 
+       /* To ensure none of the channels are enabled at boot up */
+       kmb_i2s_disable_channels(kmb_i2s, SNDRV_PCM_STREAM_PLAYBACK);
+       kmb_i2s_disable_channels(kmb_i2s, SNDRV_PCM_STREAM_CAPTURE);
+
        dev_set_drvdata(dev, kmb_i2s);
 
        return ret;
index 6bf221aa8fffc4586f455c8a0c64e5646d6ea256..9756b132c12ff12fa648bf84ad336c3ddd4d3f1b 100644 (file)
@@ -90,6 +90,7 @@
 
 #define MAX_CHANNEL_NUM                8
 #define MIN_CHANNEL_NUM                2
+#define MAX_ISR                        4
 
 #define TWO_CHANNEL_SUPPORT    2       /* up to 2.0 */
 #define FOUR_CHANNEL_SUPPORT   4       /* up to 3.1 */