|
21 | 21 | /* |
22 | 22 | * Common structures and functions |
23 | 23 | */ |
| 24 | +static const struct snd_kcontrol_new realtek_2spk_kcontrols[] = { |
| 25 | + SOC_DAPM_PIN_SWITCH("Left Spk"), |
| 26 | + SOC_DAPM_PIN_SWITCH("Right Spk"), |
| 27 | + |
| 28 | +}; |
| 29 | + |
| 30 | +static const struct snd_soc_dapm_widget realtek_2spk_widgets[] = { |
| 31 | + SND_SOC_DAPM_SPK("Left Spk", NULL), |
| 32 | + SND_SOC_DAPM_SPK("Right Spk", NULL), |
| 33 | +}; |
| 34 | + |
24 | 35 | static const struct snd_kcontrol_new realtek_4spk_kcontrols[] = { |
25 | 36 | SOC_DAPM_PIN_SWITCH("WL Ext Spk"), |
26 | 37 | SOC_DAPM_PIN_SWITCH("WR Ext Spk"), |
@@ -181,6 +192,22 @@ static int rt1011_init(struct snd_soc_pcm_runtime *rtd) |
181 | 192 | switch (num_codecs) { |
182 | 193 | case 2: |
183 | 194 | if (!soc_intel_is_cml()) { |
| 195 | + ret = snd_soc_dapm_new_controls(&card->dapm, realtek_2spk_widgets, |
| 196 | + ARRAY_SIZE(realtek_2spk_widgets)); |
| 197 | + if (ret) { |
| 198 | + dev_err(rtd->dev, "fail to add rt1011 widgets, ret %d\n", |
| 199 | + ret); |
| 200 | + return ret; |
| 201 | + } |
| 202 | + |
| 203 | + ret = snd_soc_add_card_controls(card, realtek_2spk_kcontrols, |
| 204 | + ARRAY_SIZE(realtek_2spk_kcontrols)); |
| 205 | + if (ret) { |
| 206 | + dev_err(rtd->dev, "fail to add rt1011 kcontrols, ret %d\n", |
| 207 | + ret); |
| 208 | + return ret; |
| 209 | + } |
| 210 | + |
184 | 211 | ret = snd_soc_dapm_add_routes(&card->dapm, speaker_map_lr, |
185 | 212 | ARRAY_SIZE(speaker_map_lr)); |
186 | 213 | if (ret) { |
@@ -357,6 +384,20 @@ static int rt1015p_init(struct snd_soc_pcm_runtime *rtd) |
357 | 384 | struct snd_soc_card *card = rtd->card; |
358 | 385 | int ret; |
359 | 386 |
|
| 387 | + ret = snd_soc_dapm_new_controls(&card->dapm, realtek_2spk_widgets, |
| 388 | + ARRAY_SIZE(realtek_2spk_widgets)); |
| 389 | + if (ret) { |
| 390 | + dev_err(rtd->dev, "fail to add rt1015p widgets, ret %d\n", ret); |
| 391 | + return ret; |
| 392 | + } |
| 393 | + |
| 394 | + ret = snd_soc_add_card_controls(card, realtek_2spk_kcontrols, |
| 395 | + ARRAY_SIZE(realtek_2spk_kcontrols)); |
| 396 | + if (ret) { |
| 397 | + dev_err(rtd->dev, "fail to add rt1015p kcontrols, ret %d\n", ret); |
| 398 | + return ret; |
| 399 | + } |
| 400 | + |
360 | 401 | if (rt1015p_get_num_codecs() == 1) |
361 | 402 | ret = snd_soc_dapm_add_routes(&card->dapm, rt1015p_1dev_dapm_routes, |
362 | 403 | ARRAY_SIZE(rt1015p_1dev_dapm_routes)); |
@@ -486,8 +527,42 @@ static struct snd_soc_dai_link_component rt1015_components[] = { |
486 | 527 |
|
487 | 528 | static int speaker_codec_init_lr(struct snd_soc_pcm_runtime *rtd) |
488 | 529 | { |
489 | | - return snd_soc_dapm_add_routes(&rtd->card->dapm, speaker_map_lr, |
490 | | - ARRAY_SIZE(speaker_map_lr)); |
| 530 | + struct snd_soc_card *card = rtd->card; |
| 531 | + unsigned int num_codecs = get_num_codecs(RT1015_ACPI_HID); |
| 532 | + int ret; |
| 533 | + |
| 534 | + switch (num_codecs) { |
| 535 | + case 2: |
| 536 | + ret = snd_soc_dapm_new_controls(&card->dapm, realtek_2spk_widgets, |
| 537 | + ARRAY_SIZE(realtek_2spk_widgets)); |
| 538 | + if (ret) { |
| 539 | + dev_err(rtd->dev, "fail to add rt1015 widgets, ret %d\n", |
| 540 | + ret); |
| 541 | + return ret; |
| 542 | + } |
| 543 | + |
| 544 | + ret = snd_soc_add_card_controls(card, realtek_2spk_kcontrols, |
| 545 | + ARRAY_SIZE(realtek_2spk_kcontrols)); |
| 546 | + if (ret) { |
| 547 | + dev_err(rtd->dev, "fail to add rt1015 kcontrols, ret %d\n", |
| 548 | + ret); |
| 549 | + return ret; |
| 550 | + } |
| 551 | + |
| 552 | + ret = snd_soc_dapm_add_routes(&rtd->card->dapm, speaker_map_lr, |
| 553 | + ARRAY_SIZE(speaker_map_lr)); |
| 554 | + if (ret) { |
| 555 | + dev_err(rtd->dev, "fail to add rt1015 routes, ret %d\n", |
| 556 | + ret); |
| 557 | + return ret; |
| 558 | + } |
| 559 | + break; |
| 560 | + default: |
| 561 | + dev_err(rtd->dev, "rt1015: invalid num_codecs %d\n", num_codecs); |
| 562 | + return -EINVAL; |
| 563 | + } |
| 564 | + |
| 565 | + return ret; |
491 | 566 | } |
492 | 567 |
|
493 | 568 | void sof_rt1015_codec_conf(struct snd_soc_card *card) |
@@ -624,6 +699,20 @@ static int rt1019p_init(struct snd_soc_pcm_runtime *rtd) |
624 | 699 | struct snd_soc_card *card = rtd->card; |
625 | 700 | int ret; |
626 | 701 |
|
| 702 | + ret = snd_soc_dapm_new_controls(&card->dapm, realtek_2spk_widgets, |
| 703 | + ARRAY_SIZE(realtek_2spk_widgets)); |
| 704 | + if (ret) { |
| 705 | + dev_err(rtd->dev, "fail to add rt1019p widgets, ret %d\n", ret); |
| 706 | + return ret; |
| 707 | + } |
| 708 | + |
| 709 | + ret = snd_soc_add_card_controls(card, realtek_2spk_kcontrols, |
| 710 | + ARRAY_SIZE(realtek_2spk_kcontrols)); |
| 711 | + if (ret) { |
| 712 | + dev_err(rtd->dev, "fail to add rt1019p kcontrols, ret %d\n", ret); |
| 713 | + return ret; |
| 714 | + } |
| 715 | + |
627 | 716 | ret = snd_soc_dapm_add_routes(&card->dapm, rt1019p_dapm_routes, |
628 | 717 | ARRAY_SIZE(rt1019p_dapm_routes)); |
629 | 718 | if (ret) { |
|
0 commit comments