Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: Intel: avs: Update machine board card names

Merge series from Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>:

As discussed in user bug report [1] & [2], it was identified that HDA
card provides wrong FE device numbers to be used with UCM, at the same
time it was requested that we change card names to better names.

This patchset does that, by adding option for going back to old
behaviour in first patch. Using existing way of enumerating FEs from
topology in second patch. Then setting new names in all cards while
providing fallback to old name. Only exception is probe card, which is
used for debug purposes only, where we just directly rename card.

Do note that patch 2, will require updated topologies if topology
exposes more than 1 FE on card. Old topologies didn't assign id field
and it defaulted to 0, however when we use this field by setting
snd_soc_component_driver::use_dai_pcm_id field, we need topologies with
distinct values in FEs. Necessary changes are provided in avsdk and
avs-topology-xml repositories ([4] & [5]). linux-firmware update will
follow as soon as this changeset is merged.

[1]
Link: https://bugzilla.kernel.org/show_bug.cgi?id=219654
[2]
Link: https://github.com/alsa-project/alsa-ucm-conf/pull/499
[3]
Link: https://lore.kernel.org/linux-sound/20250127144445.2739017-1-amadeuszx.slawinski@linux.intel.com/
[4]
https://github.com/thesofproject/avsdk/commit/a879c8ae4ba7be53b8ed528da1361a8c62475b6e
[5]
https://github.com/thesofproject/avs-topology-xml/commit/9b94d52cbc5c1e07c8d9503c86329cd62ea4c9e7
https://github.com/thesofproject/avs-topology-xml/commit/bdbc8d6ba9ea6db67daed9cbbaed3c23ff112ecb

+224 -34
+1 -1
sound/soc/intel/avs/avs.h
··· 340 340 extern const struct snd_soc_dai_ops avs_dai_fe_ops; 341 341 342 342 int avs_soc_component_register(struct device *dev, const char *name, 343 - const struct snd_soc_component_driver *drv, 343 + struct snd_soc_component_driver *drv, 344 344 struct snd_soc_dai_driver *cpu_dais, int num_cpu_dais); 345 345 int avs_dmic_platform_register(struct avs_dev *adev, const char *name); 346 346 int avs_i2s_platform_register(struct avs_dev *adev, const char *name, unsigned long port_mask,
+33 -4
sound/soc/intel/avs/board_selection.c
··· 17 17 #include <sound/soc-acpi.h> 18 18 #include <sound/soc-component.h> 19 19 #include "avs.h" 20 + #include "utils.h" 20 21 21 22 static bool i2s_test; 22 23 module_param(i2s_test, bool, 0444); 23 24 MODULE_PARM_DESC(i2s_test, "Probe I2S test-board and skip all other I2S boards"); 25 + 26 + bool obsolete_card_names = IS_ENABLED(CONFIG_SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE); 27 + module_param_named(obsolete_card_names, obsolete_card_names, bool, 0444); 28 + MODULE_PARM_DESC(obsolete_card_names, "Use obsolete card names 0=no, 1=yes"); 24 29 25 30 static const struct dmi_system_id kbl_dmi_table[] = { 26 31 { ··· 146 141 .mach_params = { 147 142 .i2s_link_mask = AVS_SSP(0), 148 143 }, 149 - .pdata = (unsigned long[]){ 0x2, 0, 0, 0, 0, 0 }, /* SSP0 TDMs */ 144 + .pdata = (struct avs_mach_pdata[]){ { .tdms = (unsigned long[]){ 0x2 } } }, 150 145 .tplg_filename = "rt5514-tplg.bin", 151 146 }, 152 147 { ··· 207 202 .mach_params = { 208 203 .i2s_link_mask = AVS_SSP_RANGE(0, 5), 209 204 }, 210 - .pdata = (unsigned long[]){ 0x1, 0x1, 0x14, 0x1, 0x1, 0x1 }, /* SSP2 TDMs */ 205 + .pdata = (struct avs_mach_pdata[]){ { 206 + .tdms = (unsigned long[]){ 0x1, 0x1, 0x14, 0x1, 0x1, 0x1 } 207 + } }, 211 208 .tplg_filename = "tdf8532-tplg.bin", 212 209 }, 213 210 { ··· 452 445 { 453 446 struct platform_device *codec, *board; 454 447 struct snd_soc_acpi_mach mach = {{0}}; 448 + struct avs_mach_pdata *pdata; 455 449 int ret; 456 450 457 451 if (!acpi_nhlt_find_endpoint(ACPI_NHLT_LINKTYPE_PDM, -1, -1, -1)) { ··· 476 468 if (ret < 0) 477 469 return ret; 478 470 471 + pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL); 472 + if (!pdata) 473 + return -ENOMEM; 474 + pdata->obsolete_card_names = obsolete_card_names; 475 + mach.pdata = pdata; 479 476 mach.tplg_filename = "dmic-tplg.bin"; 480 477 mach.mach_params.platform = "dmic-platform"; 481 478 ··· 503 490 static int avs_register_i2s_board(struct avs_dev *adev, struct snd_soc_acpi_mach *mach) 504 491 { 505 492 struct platform_device *board; 493 + struct avs_mach_pdata *pdata; 506 494 int num_ssps; 507 495 char *name; 508 496 int ret; ··· 521 507 if (!name) 522 508 return -ENOMEM; 523 509 524 - ret = avs_i2s_platform_register(adev, name, mach->mach_params.i2s_link_mask, mach->pdata); 510 + pdata = mach->pdata; 511 + if (!pdata) 512 + pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL); 513 + if (!pdata) 514 + return -ENOMEM; 515 + pdata->obsolete_card_names = obsolete_card_names; 516 + mach->pdata = pdata; 517 + 518 + ret = avs_i2s_platform_register(adev, name, mach->mach_params.i2s_link_mask, pdata->tdms); 525 519 if (ret < 0) 526 520 return ret; 527 521 ··· 606 584 { 607 585 struct snd_soc_acpi_mach mach = {{0}}; 608 586 struct platform_device *board; 587 + struct avs_mach_pdata *pdata; 609 588 struct hdac_device *hdev = &codec->core; 610 589 char *pname; 611 590 int ret, id; ··· 615 592 if (!pname) 616 593 return -ENOMEM; 617 594 595 + pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL); 596 + if (!pdata) 597 + return -ENOMEM; 598 + pdata->obsolete_card_names = obsolete_card_names; 599 + pdata->codec = codec; 600 + 618 601 ret = avs_hda_platform_register(adev, pname); 619 602 if (ret < 0) 620 603 return ret; 621 604 622 - mach.pdata = codec; 605 + mach.pdata = pdata; 623 606 mach.mach_params.platform = pname; 624 607 mach.tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, "hda-%08x-tplg.bin", 625 608 hdev->vendor_id);
+8
sound/soc/intel/avs/boards/Kconfig
··· 4 4 5 5 comment "Available DSP configurations" 6 6 7 + config SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE 8 + bool "Use obsolete card names" 9 + default n 10 + help 11 + Use obsolete names for some of avs cards. This option should be 12 + used if your system depends on old card names, for example having 13 + not up to date UCM files. 14 + 7 15 config SND_SOC_INTEL_AVS_MACH_DA7219 8 16 tristate "da7219 I2S board" 9 17 depends on I2C
+8 -1
sound/soc/intel/avs/boards/da7219.c
··· 214 214 { 215 215 struct snd_soc_dai_link *dai_link; 216 216 struct snd_soc_acpi_mach *mach; 217 + struct avs_mach_pdata *pdata; 217 218 struct snd_soc_card *card; 218 219 struct snd_soc_jack *jack; 219 220 struct device *dev = &pdev->dev; ··· 223 222 224 223 mach = dev_get_platdata(dev); 225 224 pname = mach->mach_params.platform; 225 + pdata = mach->pdata; 226 226 227 227 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 228 228 if (ret) ··· 240 238 if (!jack || !card) 241 239 return -ENOMEM; 242 240 243 - card->name = "avs_da7219"; 241 + if (pdata->obsolete_card_names) { 242 + card->name = "avs_da7219"; 243 + } else { 244 + card->driver_name = "avs_da7219"; 245 + card->long_name = card->name = "AVS I2S DA7219"; 246 + } 244 247 card->dev = dev; 245 248 card->owner = THIS_MODULE; 246 249 card->dai_link = dai_link;
+9 -1
sound/soc/intel/avs/boards/dmic.c
··· 10 10 #include <linux/module.h> 11 11 #include <sound/soc.h> 12 12 #include <sound/soc-acpi.h> 13 + #include "../utils.h" 13 14 14 15 SND_SOC_DAILINK_DEF(dmic_pin, DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin"))); 15 16 SND_SOC_DAILINK_DEF(dmic_wov_pin, DAILINK_COMP_ARRAY(COMP_CPU("DMIC WoV Pin"))); ··· 50 49 static int avs_dmic_probe(struct platform_device *pdev) 51 50 { 52 51 struct snd_soc_acpi_mach *mach; 52 + struct avs_mach_pdata *pdata; 53 53 struct snd_soc_card *card; 54 54 struct device *dev = &pdev->dev; 55 55 int ret; 56 56 57 57 mach = dev_get_platdata(dev); 58 + pdata = mach->pdata; 58 59 59 60 card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); 60 61 if (!card) 61 62 return -ENOMEM; 62 63 63 - card->name = "avs_dmic"; 64 + if (pdata->obsolete_card_names) { 65 + card->name = "avs_dmic"; 66 + } else { 67 + card->driver_name = "avs_dmic"; 68 + card->long_name = card->name = "AVS DMIC"; 69 + } 64 70 card->dev = dev; 65 71 card->owner = THIS_MODULE; 66 72 card->dai_link = card_dai_links;
+8 -1
sound/soc/intel/avs/boards/es8336.c
··· 259 259 { 260 260 struct snd_soc_dai_link *dai_link; 261 261 struct snd_soc_acpi_mach *mach; 262 + struct avs_mach_pdata *pdata; 262 263 struct avs_card_drvdata *data; 263 264 struct snd_soc_card *card; 264 265 struct device *dev = &pdev->dev; ··· 268 267 269 268 mach = dev_get_platdata(dev); 270 269 pname = mach->mach_params.platform; 270 + pdata = mach->pdata; 271 271 272 272 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 273 273 if (ret) ··· 285 283 if (!data || !card) 286 284 return -ENOMEM; 287 285 288 - card->name = "avs_es8336"; 286 + if (pdata->obsolete_card_names) { 287 + card->name = "avs_es8336"; 288 + } else { 289 + card->driver_name = "avs_es8336"; 290 + card->long_name = card->name = "AVS I2S ES8336"; 291 + } 289 292 card->dev = dev; 290 293 card->owner = THIS_MODULE; 291 294 card->suspend_pre = avs_card_suspend_pre;
+19 -4
sound/soc/intel/avs/boards/hdaudio.c
··· 13 13 #include <sound/soc.h> 14 14 #include <sound/soc-acpi.h> 15 15 #include "../../../codecs/hda.h" 16 + #include "../utils.h" 16 17 17 18 static int avs_create_dai_links(struct device *dev, struct hda_codec *codec, int pcm_count, 18 19 const char *platform_name, struct snd_soc_dai_link **links) ··· 96 95 static int avs_card_late_probe(struct snd_soc_card *card) 97 96 { 98 97 struct snd_soc_acpi_mach *mach = dev_get_platdata(card->dev); 99 - struct hda_codec *codec = mach->pdata; 98 + struct avs_mach_pdata *pdata = mach->pdata; 99 + struct hda_codec *codec = pdata->codec; 100 100 struct hda_pcm *hpcm; 101 101 /* Topology pcm indexing is 1-based */ 102 102 int i = 1; ··· 126 124 static int avs_probing_link_init(struct snd_soc_pcm_runtime *rtm) 127 125 { 128 126 struct snd_soc_acpi_mach *mach; 127 + struct avs_mach_pdata *pdata; 129 128 struct snd_soc_dai_link *links = NULL; 130 129 struct snd_soc_card *card = rtm->card; 131 130 struct hda_codec *codec; ··· 134 131 int ret, pcm_count = 0; 135 132 136 133 mach = dev_get_platdata(card->dev); 137 - codec = mach->pdata; 134 + pdata = mach->pdata; 135 + codec = pdata->codec; 138 136 139 137 if (list_empty(&codec->pcm_list_head)) 140 138 return -EINVAL; ··· 171 167 { 172 168 struct snd_soc_dai_link *binder; 173 169 struct snd_soc_acpi_mach *mach; 170 + struct avs_mach_pdata *pdata; 174 171 struct snd_soc_card *card; 175 172 struct device *dev = &pdev->dev; 176 173 struct hda_codec *codec; 177 174 178 175 mach = dev_get_platdata(dev); 179 - codec = mach->pdata; 176 + pdata = mach->pdata; 177 + codec = pdata->codec; 180 178 181 179 /* codec may be unloaded before card's probe() fires */ 182 180 if (!device_is_registered(&codec->core.dev)) ··· 206 200 if (!card) 207 201 return -ENOMEM; 208 202 209 - card->name = binder->codecs->name; 203 + if (pdata->obsolete_card_names) { 204 + card->name = binder->codecs->name; 205 + } else { 206 + card->driver_name = "avs_hdaudio"; 207 + if (hda_codec_is_display(codec)) 208 + card->long_name = card->name = "AVS HDMI"; 209 + else 210 + card->long_name = card->name = "AVS HD-Audio"; 211 + } 212 + 210 213 card->dev = dev; 211 214 card->owner = THIS_MODULE; 212 215 card->dai_link = binder;
+11 -2
sound/soc/intel/avs/boards/i2s_test.c
··· 56 56 { 57 57 struct snd_soc_dai_link *dai_link; 58 58 struct snd_soc_acpi_mach *mach; 59 + struct avs_mach_pdata *pdata; 59 60 struct snd_soc_card *card; 60 61 struct device *dev = &pdev->dev; 61 62 const char *pname; ··· 64 63 65 64 mach = dev_get_platdata(dev); 66 65 pname = mach->mach_params.platform; 66 + pdata = mach->pdata; 67 67 68 68 if (!avs_mach_singular_ssp(mach)) { 69 69 dev_err(dev, "Invalid SSP configuration\n"); ··· 82 80 if (!card) 83 81 return -ENOMEM; 84 82 85 - card->name = devm_kasprintf(dev, GFP_KERNEL, 86 - AVS_STRING_FMT("ssp", "-loopback", ssp_port, tdm_slot)); 83 + if (pdata->obsolete_card_names) { 84 + card->name = devm_kasprintf(dev, GFP_KERNEL, 85 + AVS_STRING_FMT("ssp", "-loopback", ssp_port, tdm_slot)); 86 + } else { 87 + card->driver_name = "avs_i2s_test"; 88 + card->long_name = card->name = devm_kasprintf(dev, GFP_KERNEL, 89 + AVS_STRING_FMT("AVS I2S TEST-", "", 90 + ssp_port, tdm_slot)); 91 + } 87 92 if (!card->name) 88 93 return -ENOMEM; 89 94
+8 -1
sound/soc/intel/avs/boards/max98357a.c
··· 93 93 { 94 94 struct snd_soc_dai_link *dai_link; 95 95 struct snd_soc_acpi_mach *mach; 96 + struct avs_mach_pdata *pdata; 96 97 struct snd_soc_card *card; 97 98 struct device *dev = &pdev->dev; 98 99 const char *pname; ··· 101 100 102 101 mach = dev_get_platdata(dev); 103 102 pname = mach->mach_params.platform; 103 + pdata = mach->pdata; 104 104 105 105 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 106 106 if (ret) ··· 117 115 if (!card) 118 116 return -ENOMEM; 119 117 120 - card->name = "avs_max98357a"; 118 + if (pdata->obsolete_card_names) { 119 + card->name = "avs_max98357a"; 120 + } else { 121 + card->driver_name = "avs_max98357a"; 122 + card->long_name = card->name = "AVS I2S MAX98357A"; 123 + } 121 124 card->dev = dev; 122 125 card->owner = THIS_MODULE; 123 126 card->dai_link = dai_link;
+8 -1
sound/soc/intel/avs/boards/max98373.c
··· 146 146 { 147 147 struct snd_soc_dai_link *dai_link; 148 148 struct snd_soc_acpi_mach *mach; 149 + struct avs_mach_pdata *pdata; 149 150 struct snd_soc_card *card; 150 151 struct device *dev = &pdev->dev; 151 152 const char *pname; ··· 154 153 155 154 mach = dev_get_platdata(dev); 156 155 pname = mach->mach_params.platform; 156 + pdata = mach->pdata; 157 157 158 158 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 159 159 if (ret) ··· 170 168 if (!card) 171 169 return -ENOMEM; 172 170 173 - card->name = "avs_max98373"; 171 + if (pdata->obsolete_card_names) { 172 + card->name = "avs_max98373"; 173 + } else { 174 + card->driver_name = "avs_max98373"; 175 + card->long_name = card->name = "AVS I2S MAX98373"; 176 + } 174 177 card->dev = dev; 175 178 card->owner = THIS_MODULE; 176 179 card->dai_link = dai_link;
+8 -1
sound/soc/intel/avs/boards/max98927.c
··· 143 143 { 144 144 struct snd_soc_dai_link *dai_link; 145 145 struct snd_soc_acpi_mach *mach; 146 + struct avs_mach_pdata *pdata; 146 147 struct snd_soc_card *card; 147 148 struct device *dev = &pdev->dev; 148 149 const char *pname; ··· 151 150 152 151 mach = dev_get_platdata(dev); 153 152 pname = mach->mach_params.platform; 153 + pdata = mach->pdata; 154 154 155 155 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 156 156 if (ret) ··· 167 165 if (!card) 168 166 return -ENOMEM; 169 167 170 - card->name = "avs_max98927"; 168 + if (pdata->obsolete_card_names) { 169 + card->name = "avs_max98927"; 170 + } else { 171 + card->driver_name = "avs_max98927"; 172 + card->long_name = card->name = "AVS I2S MAX98927"; 173 + } 171 174 card->dev = dev; 172 175 card->owner = THIS_MODULE; 173 176 card->dai_link = dai_link;
+8 -1
sound/soc/intel/avs/boards/nau8825.c
··· 246 246 { 247 247 struct snd_soc_dai_link *dai_link; 248 248 struct snd_soc_acpi_mach *mach; 249 + struct avs_mach_pdata *pdata; 249 250 struct snd_soc_card *card; 250 251 struct snd_soc_jack *jack; 251 252 struct device *dev = &pdev->dev; ··· 255 254 256 255 mach = dev_get_platdata(dev); 257 256 pname = mach->mach_params.platform; 257 + pdata = mach->pdata; 258 258 259 259 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 260 260 if (ret) ··· 272 270 if (!jack || !card) 273 271 return -ENOMEM; 274 272 275 - card->name = "avs_nau8825"; 273 + if (pdata->obsolete_card_names) { 274 + card->name = "avs_nau8825"; 275 + } else { 276 + card->driver_name = "avs_nau8825"; 277 + card->long_name = card->name = "AVS I2S NAU8825"; 278 + } 276 279 card->dev = dev; 277 280 card->owner = THIS_MODULE; 278 281 card->suspend_pre = avs_card_suspend_pre;
+13 -1
sound/soc/intel/avs/boards/pcm3168a.c
··· 11 11 #include <sound/pcm.h> 12 12 #include <sound/pcm_params.h> 13 13 #include <sound/soc.h> 14 + #include <sound/soc-acpi.h> 15 + #include "../utils.h" 14 16 15 17 static const struct snd_soc_dapm_widget card_widgets[] = { 16 18 SND_SOC_DAPM_HP("CPB Stereo HP 1", NULL), ··· 97 95 98 96 static int avs_pcm3168a_probe(struct platform_device *pdev) 99 97 { 98 + struct snd_soc_acpi_mach *mach; 99 + struct avs_mach_pdata *pdata; 100 100 struct device *dev = &pdev->dev; 101 101 struct snd_soc_card *card; 102 102 int ret; 103 + 104 + mach = dev_get_platdata(dev); 105 + pdata = mach->pdata; 103 106 104 107 card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); 105 108 if (!card) ··· 114 107 if (ret) 115 108 return ret; 116 109 117 - card->name = "avs_pcm3168a"; 110 + if (pdata->obsolete_card_names) { 111 + card->name = "avs_pcm3168a"; 112 + } else { 113 + card->driver_name = "avs_pcm3168a"; 114 + card->long_name = card->name = "AVS I2S PCM3168A"; 115 + } 118 116 card->dev = dev; 119 117 card->owner = THIS_MODULE; 120 118 card->dapm_widgets = card_widgets;
+2 -1
sound/soc/intel/avs/boards/probe.c
··· 36 36 if (!card) 37 37 return -ENOMEM; 38 38 39 - card->name = "avs_probe_mb"; 39 + card->driver_name = "avs_probe_mb"; 40 + card->long_name = card->name = "AVS PROBE"; 40 41 card->dev = dev; 41 42 card->owner = THIS_MODULE; 42 43 card->dai_link = probe_mb_dai_links;
+8 -1
sound/soc/intel/avs/boards/rt274.c
··· 210 210 { 211 211 struct snd_soc_dai_link *dai_link; 212 212 struct snd_soc_acpi_mach *mach; 213 + struct avs_mach_pdata *pdata; 213 214 struct snd_soc_card *card; 214 215 struct snd_soc_jack *jack; 215 216 struct device *dev = &pdev->dev; ··· 219 218 220 219 mach = dev_get_platdata(dev); 221 220 pname = mach->mach_params.platform; 221 + pdata = mach->pdata; 222 222 223 223 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 224 224 if (ret) ··· 236 234 if (!jack || !card) 237 235 return -ENOMEM; 238 236 239 - card->name = "avs_rt274"; 237 + if (pdata->obsolete_card_names) { 238 + card->name = "avs_rt274"; 239 + } else { 240 + card->driver_name = "avs_rt274"; 241 + card->long_name = card->name = "AVS I2S ALC274"; 242 + } 240 243 card->dev = dev; 241 244 card->owner = THIS_MODULE; 242 245 card->suspend_pre = avs_card_suspend_pre;
+8 -1
sound/soc/intel/avs/boards/rt286.c
··· 179 179 { 180 180 struct snd_soc_dai_link *dai_link; 181 181 struct snd_soc_acpi_mach *mach; 182 + struct avs_mach_pdata *pdata; 182 183 struct snd_soc_card *card; 183 184 struct snd_soc_jack *jack; 184 185 struct device *dev = &pdev->dev; ··· 188 187 189 188 mach = dev_get_platdata(dev); 190 189 pname = mach->mach_params.platform; 190 + pdata = mach->pdata; 191 191 192 192 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 193 193 if (ret) ··· 206 204 if (!jack || !card) 207 205 return -ENOMEM; 208 206 209 - card->name = "avs_rt286"; 207 + if (pdata->obsolete_card_names) { 208 + card->name = "avs_rt286"; 209 + } else { 210 + card->driver_name = "avs_rt286"; 211 + card->long_name = card->name = "AVS I2S ALC286"; 212 + } 210 213 card->dev = dev; 211 214 card->owner = THIS_MODULE; 212 215 card->suspend_pre = avs_card_suspend_pre;
+8 -1
sound/soc/intel/avs/boards/rt298.c
··· 199 199 { 200 200 struct snd_soc_dai_link *dai_link; 201 201 struct snd_soc_acpi_mach *mach; 202 + struct avs_mach_pdata *pdata; 202 203 struct snd_soc_card *card; 203 204 struct snd_soc_jack *jack; 204 205 struct device *dev = &pdev->dev; ··· 208 207 209 208 mach = dev_get_platdata(dev); 210 209 pname = mach->mach_params.platform; 210 + pdata = mach->pdata; 211 211 212 212 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 213 213 if (ret) ··· 225 223 if (!jack || !card) 226 224 return -ENOMEM; 227 225 228 - card->name = "avs_rt298"; 226 + if (pdata->obsolete_card_names) { 227 + card->name = "avs_rt298"; 228 + } else { 229 + card->driver_name = "avs_rt298"; 230 + card->long_name = card->name = "AVS I2S ALC298"; 231 + } 229 232 card->dev = dev; 230 233 card->owner = THIS_MODULE; 231 234 card->suspend_pre = avs_card_suspend_pre;
+8 -1
sound/soc/intel/avs/boards/rt5514.c
··· 133 133 { 134 134 struct snd_soc_dai_link *dai_link; 135 135 struct snd_soc_acpi_mach *mach; 136 + struct avs_mach_pdata *pdata; 136 137 struct snd_soc_card *card; 137 138 struct device *dev = &pdev->dev; 138 139 const char *pname; ··· 141 140 142 141 mach = dev_get_platdata(dev); 143 142 pname = mach->mach_params.platform; 143 + pdata = mach->pdata; 144 144 145 145 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 146 146 if (ret) ··· 157 155 if (!card) 158 156 return -ENOMEM; 159 157 160 - card->name = "avs_rt5514"; 158 + if (pdata->obsolete_card_names) { 159 + card->name = "avs_rt5514"; 160 + } else { 161 + card->driver_name = "avs_rt5514"; 162 + card->long_name = card->name = "AVS I2S ALC5514"; 163 + } 161 164 card->dev = dev; 162 165 card->owner = THIS_MODULE; 163 166 card->dai_link = dai_link;
+8 -1
sound/soc/intel/avs/boards/rt5663.c
··· 198 198 { 199 199 struct snd_soc_dai_link *dai_link; 200 200 struct snd_soc_acpi_mach *mach; 201 + struct avs_mach_pdata *pdata; 201 202 struct snd_soc_card *card; 202 203 struct rt5663_private *priv; 203 204 struct device *dev = &pdev->dev; ··· 207 206 208 207 mach = dev_get_platdata(dev); 209 208 pname = mach->mach_params.platform; 209 + pdata = mach->pdata; 210 210 211 211 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 212 212 if (ret) ··· 224 222 if (!priv || !card) 225 223 return -ENOMEM; 226 224 227 - card->name = "avs_rt5663"; 225 + if (pdata->obsolete_card_names) { 226 + card->name = "avs_rt5663"; 227 + } else { 228 + card->driver_name = "avs_rt5663"; 229 + card->long_name = card->name = "AVS I2S ALC5640"; 230 + } 228 231 card->dev = dev; 229 232 card->owner = THIS_MODULE; 230 233 card->suspend_pre = avs_card_suspend_pre;
+8 -1
sound/soc/intel/avs/boards/rt5682.c
··· 268 268 { 269 269 struct snd_soc_dai_link *dai_link; 270 270 struct snd_soc_acpi_mach *mach; 271 + struct avs_mach_pdata *pdata; 271 272 struct snd_soc_card *card; 272 273 struct snd_soc_jack *jack; 273 274 struct device *dev = &pdev->dev; ··· 283 282 284 283 mach = dev_get_platdata(dev); 285 284 pname = mach->mach_params.platform; 285 + pdata = mach->pdata; 286 286 287 287 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 288 288 if (ret) ··· 300 298 if (!jack || !card) 301 299 return -ENOMEM; 302 300 303 - card->name = "avs_rt5682"; 301 + if (pdata->obsolete_card_names) { 302 + card->name = "avs_rt5682"; 303 + } else { 304 + card->driver_name = "avs_rt5682"; 305 + card->long_name = card->name = "AVS I2S ALC5682"; 306 + } 304 307 card->dev = dev; 305 308 card->owner = THIS_MODULE; 306 309 card->suspend_pre = avs_card_suspend_pre;
+8 -1
sound/soc/intel/avs/boards/ssm4567.c
··· 132 132 { 133 133 struct snd_soc_dai_link *dai_link; 134 134 struct snd_soc_acpi_mach *mach; 135 + struct avs_mach_pdata *pdata; 135 136 struct snd_soc_card *card; 136 137 struct device *dev = &pdev->dev; 137 138 const char *pname; ··· 140 139 141 140 mach = dev_get_platdata(dev); 142 141 pname = mach->mach_params.platform; 142 + pdata = mach->pdata; 143 143 144 144 ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot); 145 145 if (ret) ··· 156 154 if (!card) 157 155 return -ENOMEM; 158 156 159 - card->name = "avs_ssm4567"; 157 + if (pdata->obsolete_card_names) { 158 + card->name = "avs_ssm4567"; 159 + } else { 160 + card->driver_name = "avs_ssm4567"; 161 + card->long_name = card->name = "AVS I2S SSM4567"; 162 + } 160 163 card->dev = dev; 161 164 card->owner = THIS_MODULE; 162 165 card->dai_link = dai_link;
+9 -4
sound/soc/intel/avs/pcm.c
··· 18 18 #include "path.h" 19 19 #include "pcm.h" 20 20 #include "topology.h" 21 + #include "utils.h" 21 22 #include "../../codecs/hda.h" 22 23 23 24 struct avs_dma_data { ··· 1267 1266 return 0; 1268 1267 } 1269 1268 1270 - static const struct snd_soc_component_driver avs_component_driver = { 1269 + static struct snd_soc_component_driver avs_component_driver = { 1271 1270 .name = "avs-pcm", 1272 1271 .probe = avs_component_probe, 1273 1272 .remove = avs_component_remove, ··· 1282 1281 }; 1283 1282 1284 1283 int avs_soc_component_register(struct device *dev, const char *name, 1285 - const struct snd_soc_component_driver *drv, 1284 + struct snd_soc_component_driver *drv, 1286 1285 struct snd_soc_dai_driver *cpu_dais, int num_cpu_dais) 1287 1286 { 1288 1287 struct avs_soc_component *acomp; ··· 1299 1298 /* force name change after ASoC is done with its init */ 1300 1299 acomp->base.name = name; 1301 1300 INIT_LIST_HEAD(&acomp->node); 1301 + 1302 + drv->use_dai_pcm_id = !obsolete_card_names; 1302 1303 1303 1304 return snd_soc_add_component(&acomp->base, cpu_dais, num_cpu_dais); 1304 1305 } ··· 1483 1480 struct snd_soc_dapm_context *dapm; 1484 1481 struct snd_soc_dai_driver *dais; 1485 1482 struct snd_soc_acpi_mach *mach; 1483 + struct avs_mach_pdata *pdata; 1486 1484 struct hda_codec *codec; 1487 1485 struct hda_pcm *pcm; 1488 1486 const char *cname; ··· 1493 1489 if (!mach) 1494 1490 return -EINVAL; 1495 1491 1496 - codec = mach->pdata; 1492 + pdata = mach->pdata; 1493 + codec = pdata->codec; 1497 1494 if (list_empty(&codec->pcm_list_head)) 1498 1495 return -EINVAL; 1499 1496 list_for_each_entry(pcm, &codec->pcm_list_head, list) ··· 1628 1623 return 0; 1629 1624 } 1630 1625 1631 - static const struct snd_soc_component_driver avs_hda_component_driver = { 1626 + static struct snd_soc_component_driver avs_hda_component_driver = { 1632 1627 .name = "avs-hda-pcm", 1633 1628 .probe = avs_component_hda_probe, 1634 1629 .remove = avs_component_hda_remove,
+1 -1
sound/soc/intel/avs/probes.c
··· 284 284 }, 285 285 }; 286 286 287 - static const struct snd_soc_component_driver avs_probe_component_driver = { 287 + static struct snd_soc_component_driver avs_probe_component_driver = { 288 288 .name = "avs-probe-compr", 289 289 .compress_ops = &avs_probe_compress_ops, 290 290 .module_get_upon_open = 1, /* increment refcount when a stream is opened */
+14 -2
sound/soc/intel/avs/utils.h
··· 11 11 12 12 #include <sound/soc-acpi.h> 13 13 14 + extern bool obsolete_card_names; 15 + 16 + struct avs_mach_pdata { 17 + struct hda_codec *codec; 18 + unsigned long *tdms; 19 + char *codec_name; /* DMIC only */ 20 + 21 + bool obsolete_card_names; 22 + }; 23 + 14 24 static inline bool avs_mach_singular_ssp(struct snd_soc_acpi_mach *mach) 15 25 { 16 26 return hweight_long(mach->mach_params.i2s_link_mask) == 1; ··· 33 23 34 24 static inline bool avs_mach_singular_tdm(struct snd_soc_acpi_mach *mach, u32 port) 35 25 { 36 - unsigned long *tdms = mach->pdata; 26 + struct avs_mach_pdata *pdata = mach->pdata; 27 + unsigned long *tdms = pdata->tdms; 37 28 38 29 return !tdms || (hweight_long(tdms[port]) == 1); 39 30 } 40 31 41 32 static inline u32 avs_mach_ssp_tdm(struct snd_soc_acpi_mach *mach, u32 port) 42 33 { 43 - unsigned long *tdms = mach->pdata; 34 + struct avs_mach_pdata *pdata = mach->pdata; 35 + unsigned long *tdms = pdata->tdms; 44 36 45 37 return tdms ? __ffs(tdms[port]) : 0; 46 38 }