ASoC: amd: Add check for acp config flags
authorSyed Saba Kareem <Syed.SabaKareem@amd.com>
Wed, 12 Apr 2023 09:16:16 +0000 (14:46 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 12 Apr 2023 11:52:01 +0000 (12:52 +0100)
We have SOF and generic ACP support enabled for Rembrandt and
pheonix platforms on some machines. Since we have same PCI id
used for probing, add check for machine configuration flag to
avoid conflict with newer pci drivers. Such machine flag has
been initialized via dmi match on few Chrome machines. If no
flag is specified probe and register older platform device.

Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com>
Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Link: https://lore.kernel.org/r/20230412091638.1158901-1-Syed.SabaKareem@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/Kconfig
sound/soc/amd/ps/acp63.h
sound/soc/amd/ps/pci-ps.c
sound/soc/amd/yc/acp6x.h
sound/soc/amd/yc/pci-acp6x.c

index c88ebd84bdd50adc6ec3efae42540983576e4d93..08e42082f5e96da12cf05bae60fc8e4945fd20b8 100644 (file)
@@ -90,6 +90,7 @@ config SND_SOC_AMD_VANGOGH_MACH
 
 config SND_SOC_AMD_ACP6x
        tristate "AMD Audio Coprocessor-v6.x Yellow Carp support"
+       select SND_AMD_ACP_CONFIG
        depends on X86 && PCI
        help
          This option enables Audio Coprocessor i.e ACP v6.x support on
@@ -130,6 +131,7 @@ config SND_SOC_AMD_RPL_ACP6x
 
 config SND_SOC_AMD_PS
         tristate "AMD Audio Coprocessor-v6.3 Pink Sardine support"
+       select SND_AMD_ACP_CONFIG
         depends on X86 && PCI && ACPI
         help
           This option enables Audio Coprocessor i.e ACP v6.3 support on
index 6bf29b520511decc8f7b9aed93e2d481b8dc3ff4..dd36790b25aefef5478a8eee806e6f68fbdc9706 100644 (file)
@@ -111,3 +111,5 @@ struct acp63_dev_data {
        u16 pdev_count;
        u16 pdm_dev_index;
 };
+
+int snd_amd_acp_find_config(struct pci_dev *pci);
index 688a1d4643d918583ba671374f3a1d778f917959..afddb9a77ba491d6131e121304c7d473fc4225f6 100644 (file)
@@ -247,11 +247,17 @@ static int snd_acp63_probe(struct pci_dev *pci,
 {
        struct acp63_dev_data *adata;
        u32 addr;
-       u32 irqflags;
+       u32 irqflags, flag;
        int val;
        int ret;
 
        irqflags = IRQF_SHARED;
+
+       /* Return if acp config flag is defined */
+       flag = snd_amd_acp_find_config(pci);
+       if (flag)
+               return -ENODEV;
+
        /* Pink Sardine device check */
        switch (pci->revision) {
        case 0x63:
index 036207568c048fb15b0bfd034151a26762895d28..2de7d1edf00b728f8d6274e00b1dda643d35c86c 100644 (file)
@@ -105,3 +105,6 @@ static inline void acp6x_writel(u32 val, void __iomem *base_addr)
 {
        writel(val, base_addr - ACP6x_PHY_BASE_ADDRESS);
 }
+
+int snd_amd_acp_find_config(struct pci_dev *pci);
+
index 77c5fa1f7af14036e5d56c5c5eae1585ac6e2408..7af6a349b1d41fb60d9450a312927e4774889a34 100644 (file)
@@ -149,10 +149,16 @@ static int snd_acp6x_probe(struct pci_dev *pci,
        int index = 0;
        int val = 0x00;
        u32 addr;
-       unsigned int irqflags;
+       unsigned int irqflags, flag;
        int ret;
 
        irqflags = IRQF_SHARED;
+
+       /* Return if acp config flag is defined */
+       flag = snd_amd_acp_find_config(pci);
+       if (flag)
+               return -ENODEV;
+
        /* Yellow Carp device check */
        switch (pci->revision) {
        case 0x60: