]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: amd: acp: modify conditional check for programming i2s mclk
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Mon, 17 Jun 2024 07:28:39 +0000 (12:58 +0530)
committerMark Brown <broonie@kernel.org>
Fri, 21 Jun 2024 12:18:07 +0000 (13:18 +0100)
ACP provides different IO configurations(ACP PDM, I2S and SoundWire).
I2S mclk should be programmed only when I2S configuration is selected and
I2S controller is programmed as clock master.
Modify the conditional check for programming i2s mclk.

Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Link: https://patch.msgid.link/20240617072844.871468-6-Vijendar.Mukunda@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/acp/acp-rembrandt.c
sound/soc/amd/acp/acp63.c
sound/soc/amd/acp/amd.h

index 953a793de9a353aa81e72ae17da5ade5694c80bc..e19981c7d65aa7e5db9236b0fd8e6d11ae091131 100644 (file)
@@ -229,12 +229,13 @@ static int rembrandt_audio_probe(struct platform_device *pdev)
        adata->rsrc = &rsrc;
        adata->platform = REMBRANDT;
        adata->flag = chip->flag;
+       adata->is_i2s_config = chip->is_i2s_config;
        adata->machines = snd_soc_acpi_amd_rmb_acp_machines;
        acp_machine_select(adata);
 
        dev_set_drvdata(dev, adata);
 
-       if (chip->flag != FLAG_AMD_LEGACY_ONLY_DMIC) {
+       if (chip->is_i2s_config && rsrc.soc_mclk) {
                ret = acp6x_master_clock_generate(dev);
                if (ret)
                        return ret;
@@ -267,7 +268,7 @@ static int __maybe_unused rmb_pcm_resume(struct device *dev)
        snd_pcm_uframes_t buf_in_frames;
        u64 buf_size;
 
-       if (adata->flag != FLAG_AMD_LEGACY_ONLY_DMIC)
+       if (adata->is_i2s_config && adata->rsrc->soc_mclk)
                acp6x_master_clock_generate(dev);
 
        spin_lock(&adata->acp_lock);
index f223311b6740768b82e292f5a42c4c250d003604..f340920b328919069f9408a47edd805742c7e6d0 100644 (file)
@@ -239,11 +239,12 @@ static int acp63_audio_probe(struct platform_device *pdev)
        adata->rsrc = &rsrc;
        adata->platform = ACP63;
        adata->flag = chip->flag;
+       adata->is_i2s_config = chip->is_i2s_config;
        adata->machines = snd_soc_acpi_amd_acp63_acp_machines;
        acp_machine_select(adata);
        dev_set_drvdata(dev, adata);
 
-       if (chip->flag != FLAG_AMD_LEGACY_ONLY_DMIC) {
+       if (chip->is_i2s_config && rsrc.soc_mclk) {
                ret = acp63_i2s_master_clock_generate(adata);
                if (ret)
                        return ret;
@@ -276,7 +277,7 @@ static int __maybe_unused acp63_pcm_resume(struct device *dev)
        snd_pcm_uframes_t buf_in_frames;
        u64 buf_size;
 
-       if (adata->flag != FLAG_AMD_LEGACY_ONLY_DMIC)
+       if (adata->is_i2s_config && adata->rsrc->soc_mclk)
                acp63_i2s_master_clock_generate(adata);
 
        spin_lock(&adata->acp_lock);
index cbf9ca26f3ee257ede3e69ce64478cd290050df4..87a4813783f911718bdb43814cda0d786f6691a4 100644 (file)
@@ -173,6 +173,7 @@ struct acp_dev_data {
        unsigned int i2s_irq;
 
        bool tdm_mode;
+       bool is_i2s_config;
        /* SOC specific dais */
        struct snd_soc_dai_driver *dai_driver;
        int num_dai;