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

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: sdw_utils: add vendor_id to asoc_sdw_codec_info

struct asoc_sdw_codec_info has part_id which is not
sufficient to uniquely identify devices. This change
adds the vendor_id field and updates the codec_info
list with the corresponding vendor id as per the
Manufacturer's id in https://mid.mipi.org/

Signed-off-by: Niranjan H Y <niranjan.hy@ti.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20260324041300.784-1-niranjan.hy@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Niranjan H Y and committed by
Mark Brown
d12dc8c5 51b0909d

+49 -7
+1
include/sound/soc_sdw_utils.h
··· 71 71 }; 72 72 73 73 struct asoc_sdw_codec_info { 74 + const int vendor_id; 74 75 const int part_id; 75 76 const int version_id; 76 77 const char *name_prefix;
+43 -5
sound/soc/sdw_utils/soc_sdw_utils.c
··· 73 73 74 74 struct asoc_sdw_codec_info codec_info_list[] = { 75 75 { 76 + .vendor_id = 0x0102, 76 77 .part_id = 0x0000, /* TAS2783A */ 77 78 .name_prefix = "tas2783", 78 79 .dais = { ··· 93 92 .dai_num = 1, 94 93 }, 95 94 { 95 + .vendor_id = 0x025d, 96 96 .part_id = 0x700, 97 97 .name_prefix = "rt700", 98 98 .dais = { ··· 112 110 .dai_num = 1, 113 111 }, 114 112 { 113 + .vendor_id = 0x025d, 115 114 .part_id = 0x711, 116 115 .name_prefix = "rt711", 117 116 .version_id = 3, ··· 134 131 .dai_num = 1, 135 132 }, 136 133 { 134 + .vendor_id = 0x025d, 137 135 .part_id = 0x711, 138 136 .name_prefix = "rt711", 139 137 .version_id = 2, ··· 156 152 .dai_num = 1, 157 153 }, 158 154 { 155 + .vendor_id = 0x025d, 159 156 .part_id = 0x712, 160 157 .name_prefix = "rt712", 161 158 .version_id = 3, ··· 199 194 .dai_num = 3, 200 195 }, 201 196 { 197 + .vendor_id = 0x025d, 202 198 .part_id = 0x1712, 203 199 .name_prefix = "rt712-dmic", 204 200 .version_id = 3, ··· 215 209 .dai_num = 1, 216 210 }, 217 211 { 212 + .vendor_id = 0x025d, 218 213 .part_id = 0x713, 219 214 .name_prefix = "rt713", 220 215 .version_id = 3, ··· 244 237 .dai_num = 2, 245 238 }, 246 239 { 240 + .vendor_id = 0x025d, 247 241 .part_id = 0x1713, 248 242 .name_prefix = "rt713-dmic", 249 243 .version_id = 3, ··· 260 252 .dai_num = 1, 261 253 }, 262 254 { 255 + .vendor_id = 0x025d, 263 256 .part_id = 0x1308, 264 257 .name_prefix = "rt1308", 265 258 .acpi_id = "10EC1308", ··· 284 275 .ops = &soc_sdw_rt1308_i2s_ops, 285 276 }, 286 277 { 278 + .vendor_id = 0x025d, 287 279 .part_id = 0x1316, 288 280 .name_prefix = "rt1316", 289 281 .dais = { ··· 306 296 .dai_num = 1, 307 297 }, 308 298 { 299 + .vendor_id = 0x025d, 309 300 .part_id = 0x1318, 310 301 .name_prefix = "rt1318", 311 302 .dais = { ··· 328 317 .dai_num = 1, 329 318 }, 330 319 { 320 + .vendor_id = 0x025d, 331 321 .part_id = 0x1320, 332 322 .name_prefix = "rt1320", 333 323 .dais = { ··· 350 338 .dai_num = 1, 351 339 }, 352 340 { 341 + .vendor_id = 0x025d, 353 342 .part_id = 0x1321, 354 343 .name_prefix = "rt1320", 355 344 .dais = { ··· 372 359 .dai_num = 1, 373 360 }, 374 361 { 362 + .vendor_id = 0x025d, 375 363 .part_id = 0x714, 376 364 .name_prefix = "rt714", 377 365 .version_id = 3, ··· 389 375 .dai_num = 1, 390 376 }, 391 377 { 378 + .vendor_id = 0x025d, 392 379 .part_id = 0x715, 393 380 .name_prefix = "rt715", 394 381 .version_id = 3, ··· 406 391 .dai_num = 1, 407 392 }, 408 393 { 394 + .vendor_id = 0x025d, 409 395 .part_id = 0x714, 410 396 .name_prefix = "rt714", 411 397 .version_id = 2, ··· 423 407 .dai_num = 1, 424 408 }, 425 409 { 410 + .vendor_id = 0x025d, 426 411 .part_id = 0x715, 427 412 .name_prefix = "rt715", 428 413 .version_id = 2, ··· 440 423 .dai_num = 1, 441 424 }, 442 425 { 426 + .vendor_id = 0x025d, 443 427 .part_id = 0x721, 444 428 .name_prefix = "rt721", 445 429 .version_id = 3, ··· 484 466 .dai_num = 3, 485 467 }, 486 468 { 469 + .vendor_id = 0x025d, 487 470 .part_id = 0x722, 488 471 .name_prefix = "rt722", 489 472 .version_id = 3, ··· 532 513 .dai_num = 3, 533 514 }, 534 515 { 516 + .vendor_id = 0x019f, 535 517 .part_id = 0x8373, 536 518 .name_prefix = "Left", 537 519 .dais = { ··· 553 533 .dai_num = 1, 554 534 }, 555 535 { 536 + .vendor_id = 0x019f, 556 537 .part_id = 0x8363, 557 538 .name_prefix = "Left", 558 539 .dais = { ··· 574 553 .dai_num = 1, 575 554 }, 576 555 { 556 + .vendor_id = 0x025d, 577 557 .part_id = 0x5682, 578 558 .name_prefix = "rt5682", 579 559 .dais = { ··· 593 571 .dai_num = 1, 594 572 }, 595 573 { 574 + .vendor_id = 0x01fa, 596 575 .part_id = 0x3556, 597 576 .name_prefix = "AMP", 598 577 .dais = { ··· 621 598 .dai_num = 2, 622 599 }, 623 600 { 601 + .vendor_id = 0x01fa, 624 602 .part_id = 0x3557, 625 603 .name_prefix = "AMP", 626 604 .dais = { ··· 649 625 .dai_num = 2, 650 626 }, 651 627 { 628 + .vendor_id = 0x01fa, 652 629 .part_id = 0x3563, 653 630 .name_prefix = "AMP", 654 631 .dais = { ··· 677 652 .dai_num = 2, 678 653 }, 679 654 { 655 + .vendor_id = 0x01fa, 680 656 .part_id = 0x4242, 681 657 .name_prefix = "cs42l42", 682 658 .dais = { ··· 696 670 .dai_num = 1, 697 671 }, 698 672 { 673 + .vendor_id = 0x01fa, 699 674 .part_id = 0x4243, 700 675 .name_prefix = "cs42l43", 701 676 .count_sidecar = asoc_sdw_bridge_cs35l56_count_sidecar, ··· 751 724 .dai_num = 4, 752 725 }, 753 726 { 727 + .vendor_id = 0x01fa, 754 728 .part_id = 0x2A3B, 755 729 .name_prefix = "cs42l43", 756 730 .count_sidecar = asoc_sdw_bridge_cs35l56_count_sidecar, ··· 806 778 .dai_num = 4, 807 779 }, 808 780 { 781 + .vendor_id = 0x01fa, 809 782 .part_id = 0x4245, 810 783 .name_prefix = "cs42l45", 811 784 .dais = { ··· 843 814 .aux_num = 1, 844 815 }, 845 816 { 817 + .vendor_id = 0x01fa, 846 818 .part_id = 0x4249, 847 819 .name_prefix = "cs42l45", /* Use same user-space as cs42l45 */ 848 820 .dais = { ··· 880 850 .aux_num = 1, 881 851 }, 882 852 { 853 + .vendor_id = 0x01fa, 883 854 .part_id = 0x4747, 884 855 .name_prefix = "cs47l47", 885 856 .dais = { ··· 917 886 .aux_num = 1, 918 887 }, 919 888 { 889 + .vendor_id = 0x0105, 920 890 .part_id = 0xaaaa, /* generic codec mockup */ 921 891 .name_prefix = "sdw_mockup_mmulti-function", 922 892 .version_id = 0, ··· 944 912 .dai_num = 3, 945 913 }, 946 914 { 915 + .vendor_id = 0x0105, 947 916 .part_id = 0xaa55, /* headset codec mockup */ 948 917 .name_prefix = "sdw_mockup_headset0", 949 918 .version_id = 0, ··· 959 926 .dai_num = 1, 960 927 }, 961 928 { 929 + .vendor_id = 0x0105, 962 930 .part_id = 0x55aa, /* amplifier mockup */ 963 931 .name_prefix = "sdw_mockup_amp1", 964 932 .version_id = 0, ··· 974 940 .dai_num = 1, 975 941 }, 976 942 { 943 + .vendor_id = 0x0105, 977 944 .part_id = 0x5555, 978 945 .name_prefix = "sdw_mockup_mic0", 979 946 .version_id = 0, ··· 999 964 1000 965 struct asoc_sdw_codec_info *asoc_sdw_find_codec_info_part(const u64 adr) 1001 966 { 1002 - unsigned int part_id, sdw_version; 967 + unsigned int vendor_id, part_id, sdw_version; 1003 968 int i; 1004 969 970 + vendor_id = SDW_MFG_ID(adr); 1005 971 part_id = SDW_PART_ID(adr); 1006 972 sdw_version = SDW_VERSION(adr); 1007 973 for (i = 0; i < ARRAY_SIZE(codec_info_list); i++) ··· 1011 975 * version_id is not specified in the codec info. 1012 976 */ 1013 977 if (part_id == codec_info_list[i].part_id && 978 + vendor_id == codec_info_list[i].vendor_id && 1014 979 (!codec_info_list[i].version_id || 1015 980 sdw_version == codec_info_list[i].version_id)) 1016 981 return &codec_info_list[i]; ··· 1026 989 1027 990 for (i = 0; i < ARRAY_SIZE(codec_info_list); i++) 1028 991 if (id->part_id == codec_info_list[i].part_id && 992 + id->mfg_id == codec_info_list[i].vendor_id && 1029 993 (!codec_info_list[i].version_id || 1030 994 id->sdw_version == codec_info_list[i].version_id)) 1031 995 return &codec_info_list[i]; ··· 1131 1093 ret = snd_soc_add_card_controls(card, codec_info->dais[dai_index].controls, 1132 1094 codec_info->dais[dai_index].num_controls); 1133 1095 if (ret) { 1134 - dev_err(card->dev, "%#x controls addition failed: %d\n", 1135 - codec_info->part_id, ret); 1096 + dev_err(card->dev, "%#x-%#x controls addition failed: %d\n", 1097 + codec_info->vendor_id, codec_info->part_id, ret); 1136 1098 return ret; 1137 1099 } 1138 1100 } ··· 1141 1103 codec_info->dais[dai_index].widgets, 1142 1104 codec_info->dais[dai_index].num_widgets); 1143 1105 if (ret) { 1144 - dev_err(card->dev, "%#x widgets addition failed: %d\n", 1145 - codec_info->part_id, ret); 1106 + dev_err(card->dev, "%#x-%#x widgets addition failed: %d\n", 1107 + codec_info->vendor_id, codec_info->part_id, ret); 1146 1108 return ret; 1147 1109 } 1148 1110 }
+5 -2
sound/soc/sof/intel/hda.c
··· 1179 1179 struct snd_soc_acpi_endpoint *endpoints; 1180 1180 int amp_group_id = 1; 1181 1181 1182 + if (sdw_device->id.mfg_id != codec_info_list[i].vendor_id) 1183 + continue; 1184 + 1182 1185 if (sdw_device->id.part_id != codec_info_list[i].part_id) 1183 1186 continue; 1184 1187 ··· 1196 1193 * dereference 1197 1194 */ 1198 1195 if (!name_prefix) { 1199 - dev_err(dev, "codec_info_list name_prefix of part id %#x is missing\n", 1200 - codec_info_list[i].part_id); 1196 + dev_err(dev, "codec_info_list name_prefix of part id %#x-%#x is missing\n", 1197 + codec_info_list[i].vendor_id, codec_info_list[i].part_id); 1201 1198 return NULL; 1202 1199 } 1203 1200 for (j = 0; j < codec_info_list[i].dai_num; j++) {