1 // SPDX-License-Identifier: GPL-2.0-only 2 // 3 // soc-acpi-intel-sdw-mockup-match.c - tables and support for SoundWire 4 // mockup device ACPI enumeration. 5 // 6 // Copyright (c) 2021, Intel Corporation. 7 // 8 9 #include <sound/soc-acpi.h> 10 #include <sound/soc-acpi-intel-match.h> 11 #include "soc-acpi-intel-sdw-mockup-match.h" 12 13 static const struct snd_soc_acpi_endpoint sdw_mockup_single_endpoint = { 14 .num = 0, 15 .aggregated = 0, 16 .group_position = 0, 17 .group_id = 0, 18 }; 19 20 static const struct snd_soc_acpi_endpoint sdw_mockup_l_endpoint = { 21 .num = 0, 22 .aggregated = 1, 23 .group_position = 0, 24 .group_id = 1, 25 }; 26 27 static const struct snd_soc_acpi_endpoint sdw_mockup_r_endpoint = { 28 .num = 0, 29 .aggregated = 1, 30 .group_position = 1, 31 .group_id = 1, 32 }; 33 34 static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = { 35 /* Jack Endpoint */ 36 { 37 .num = 0, 38 .aggregated = 0, 39 .group_position = 0, 40 .group_id = 0, 41 }, 42 /* Amp Endpoint, work as spk_l_endpoint */ 43 { 44 .num = 1, 45 .aggregated = 1, 46 .group_position = 0, 47 .group_id = 1, 48 }, 49 /* DMIC Endpoint */ 50 { 51 .num = 2, 52 .aggregated = 0, 53 .group_position = 0, 54 .group_id = 0, 55 }, 56 }; 57 58 static const struct snd_soc_acpi_adr_device sdw_mockup_headset_0_adr[] = { 59 { 60 .adr = 0x0000000105AA5500ull, 61 .num_endpoints = 1, 62 .endpoints = &sdw_mockup_single_endpoint, 63 .name_prefix = "sdw_mockup_headset0" 64 } 65 }; 66 67 static const struct snd_soc_acpi_adr_device sdw_mockup_headset_1_adr[] = { 68 { 69 .adr = 0x0001000105AA5500ull, 70 .num_endpoints = 1, 71 .endpoints = &sdw_mockup_single_endpoint, 72 .name_prefix = "sdw_mockup_headset1" 73 } 74 }; 75 76 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_1_adr[] = { 77 { 78 .adr = 0x000100010555AA00ull, 79 .num_endpoints = 1, 80 .endpoints = &sdw_mockup_single_endpoint, 81 .name_prefix = "sdw_mockup_amp1" 82 } 83 }; 84 85 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_2_adr[] = { 86 { 87 .adr = 0x000200010555AA00ull, 88 .num_endpoints = 1, 89 .endpoints = &sdw_mockup_single_endpoint, 90 .name_prefix = "sdw_mockup_amp2" 91 } 92 }; 93 94 static const struct snd_soc_acpi_adr_device sdw_mockup_mic_0_adr[] = { 95 { 96 .adr = 0x0000000105555500ull, 97 .num_endpoints = 1, 98 .endpoints = &sdw_mockup_single_endpoint, 99 .name_prefix = "sdw_mockup_mic0" 100 } 101 }; 102 103 static const struct snd_soc_acpi_adr_device sdw_mockup_mic_3_adr[] = { 104 { 105 .adr = 0x0003000105555500ull, 106 .num_endpoints = 1, 107 .endpoints = &sdw_mockup_single_endpoint, 108 .name_prefix = "sdw_mockup_mic3" 109 } 110 }; 111 112 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_1_group1_adr[] = { 113 { 114 .adr = 0x000100010555AA00ull, 115 .num_endpoints = 1, 116 .endpoints = &sdw_mockup_l_endpoint, 117 .name_prefix = "sdw_mockup_amp1_l" 118 } 119 }; 120 121 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_2_group1_adr[] = { 122 { 123 .adr = 0x000200010555AA00ull, 124 .num_endpoints = 1, 125 .endpoints = &sdw_mockup_r_endpoint, 126 .name_prefix = "sdw_mockup_amp2_r" 127 } 128 }; 129 130 static const struct snd_soc_acpi_adr_device sdw_mockup_multi_function_adr[] = { 131 { 132 .adr = 0x0000000105AAAA01ull, 133 .num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints), 134 .endpoints = jack_amp_g1_dmic_endpoints, 135 .name_prefix = "sdw_mockup_mmulti-function" 136 } 137 }; 138 139 const struct snd_soc_acpi_link_adr sdw_mockup_headset_1amp_mic[] = { 140 { 141 .mask = BIT(0), 142 .num_adr = ARRAY_SIZE(sdw_mockup_headset_0_adr), 143 .adr_d = sdw_mockup_headset_0_adr, 144 }, 145 { 146 .mask = BIT(1), 147 .num_adr = ARRAY_SIZE(sdw_mockup_amp_1_adr), 148 .adr_d = sdw_mockup_amp_1_adr, 149 }, 150 { 151 .mask = BIT(3), 152 .num_adr = ARRAY_SIZE(sdw_mockup_mic_3_adr), 153 .adr_d = sdw_mockup_mic_3_adr, 154 }, 155 {} 156 }; 157 158 const struct snd_soc_acpi_link_adr sdw_mockup_headset_2amps_mic[] = { 159 { 160 .mask = BIT(0), 161 .num_adr = ARRAY_SIZE(sdw_mockup_headset_0_adr), 162 .adr_d = sdw_mockup_headset_0_adr, 163 }, 164 { 165 .mask = BIT(1), 166 .num_adr = ARRAY_SIZE(sdw_mockup_amp_1_group1_adr), 167 .adr_d = sdw_mockup_amp_1_group1_adr, 168 }, 169 { 170 .mask = BIT(2), 171 .num_adr = ARRAY_SIZE(sdw_mockup_amp_2_group1_adr), 172 .adr_d = sdw_mockup_amp_2_group1_adr, 173 }, 174 { 175 .mask = BIT(3), 176 .num_adr = ARRAY_SIZE(sdw_mockup_mic_3_adr), 177 .adr_d = sdw_mockup_mic_3_adr, 178 }, 179 {} 180 }; 181 182 const struct snd_soc_acpi_link_adr sdw_mockup_mic_headset_1amp[] = { 183 { 184 .mask = BIT(1), 185 .num_adr = ARRAY_SIZE(sdw_mockup_headset_1_adr), 186 .adr_d = sdw_mockup_headset_1_adr, 187 }, 188 { 189 .mask = BIT(2), 190 .num_adr = ARRAY_SIZE(sdw_mockup_amp_2_adr), 191 .adr_d = sdw_mockup_amp_2_adr, 192 }, 193 { 194 .mask = BIT(0), 195 .num_adr = ARRAY_SIZE(sdw_mockup_mic_0_adr), 196 .adr_d = sdw_mockup_mic_0_adr, 197 }, 198 {} 199 }; 200 201 const struct snd_soc_acpi_link_adr sdw_mockup_multi_func[] = { 202 { 203 .mask = BIT(0), 204 .num_adr = ARRAY_SIZE(sdw_mockup_multi_function_adr), 205 .adr_d = sdw_mockup_multi_function_adr, 206 }, 207 {} 208 }; 209