GNU Linux-libre 5.19-rc6-gnu
[releases.git] / sound / soc / amd / acp-config.c
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
2 //
3 // This file is provided under a dual BSD/GPLv2 license. When using or
4 // redistributing this file, you may do so under either license.
5 //
6 // Copyright(c) 2021 Advanced Micro Devices, Inc.
7 //
8 // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
9 //
10
11 /* ACP machine configuration module */
12
13 #include <linux/acpi.h>
14 #include <linux/bits.h>
15 #include <linux/dmi.h>
16 #include <linux/module.h>
17 #include <linux/pci.h>
18
19 #include "../sof/amd/acp.h"
20 #include "mach-config.h"
21
22 static int acp_quirk_data;
23
24 static const struct config_entry config_table[] = {
25         {
26                 .flags = FLAG_AMD_SOF,
27                 .device = ACP_PCI_DEV_ID,
28                 .dmi_table = (const struct dmi_system_id []) {
29                         {
30                                 .matches = {
31                                         DMI_MATCH(DMI_SYS_VENDOR, "AMD"),
32                                         DMI_MATCH(DMI_PRODUCT_NAME, "Majolica-CZN"),
33                                 },
34                         },
35                         {}
36                 },
37         },
38         {
39                 .flags = FLAG_AMD_SOF,
40                 .device = ACP_PCI_DEV_ID,
41                 .dmi_table = (const struct dmi_system_id []) {
42                         {
43                                 .matches = {
44                                         DMI_MATCH(DMI_SYS_VENDOR, "Google"),
45                                 },
46                         },
47                         {}
48                 },
49         },
50 };
51
52 int snd_amd_acp_find_config(struct pci_dev *pci)
53 {
54         const struct config_entry *table = config_table;
55         u16 device = pci->device;
56         int i;
57
58         /* Do not enable FLAGS on older platforms with Rev id zero */
59         if (!pci->revision)
60                 return 0;
61
62         for (i = 0; i < ARRAY_SIZE(config_table); i++, table++) {
63                 if (table->device != device)
64                         continue;
65                 if (table->dmi_table && !dmi_check_system(table->dmi_table))
66                         continue;
67                 acp_quirk_data = table->flags;
68                 return table->flags;
69         }
70
71         return 0;
72 }
73 EXPORT_SYMBOL(snd_amd_acp_find_config);
74
75 static struct snd_soc_acpi_codecs amp_rt1019 = {
76         .num_codecs = 1,
77         .codecs = {"10EC1019"}
78 };
79
80 static struct snd_soc_acpi_codecs amp_max = {
81         .num_codecs = 1,
82         .codecs = {"MX98360A"}
83 };
84
85 struct snd_soc_acpi_mach snd_soc_acpi_amd_sof_machines[] = {
86         {
87                 .id = "10EC5682",
88                 .drv_name = "rt5682-rt1019",
89                 .pdata = (void *)&acp_quirk_data,
90                 .machine_quirk = snd_soc_acpi_codec_list,
91                 .quirk_data = &amp_rt1019,
92                 .fw_filename = "sof-rn.ri",
93                 .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",
94         },
95         {
96                 .id = "10EC5682",
97                 .drv_name = "rt5682-max",
98                 .pdata = (void *)&acp_quirk_data,
99                 .machine_quirk = snd_soc_acpi_codec_list,
100                 .quirk_data = &amp_max,
101                 .fw_filename = "sof-rn.ri",
102                 .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",
103         },
104         {
105                 .id = "RTL5682",
106                 .drv_name = "rt5682s-max",
107                 .pdata = (void *)&acp_quirk_data,
108                 .machine_quirk = snd_soc_acpi_codec_list,
109                 .quirk_data = &amp_max,
110                 .fw_filename = "sof-rn.ri",
111                 .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",
112         },
113         {
114                 .id = "RTL5682",
115                 .drv_name = "rt5682s-rt1019",
116                 .pdata = (void *)&acp_quirk_data,
117                 .machine_quirk = snd_soc_acpi_codec_list,
118                 .quirk_data = &amp_rt1019,
119                 .fw_filename = "sof-rn.ri",
120                 .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",
121         },
122         {
123                 .id = "AMDI1019",
124                 .drv_name = "renoir-dsp",
125                 .pdata = (void *)&acp_quirk_data,
126                 .fw_filename = "sof-rn.ri",
127                 .sof_tplg_filename = "sof-acp.tplg",
128         },
129         {},
130 };
131 EXPORT_SYMBOL(snd_soc_acpi_amd_sof_machines);
132
133 MODULE_LICENSE("Dual BSD/GPL");