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: generate combined spk components

Merge series from Bard Liao <yung-chuan.liao@linux.intel.com>:

The series adds support for combined speaker components with one "spk:"
tag in the card->components string. This is a UCM request.

+34 -32
+1
include/sound/soc_sdw_utils.h
··· 46 46 struct asoc_sdw_dai_info { 47 47 const bool direction[2]; /* playback & capture support */ 48 48 const char *dai_name; 49 + const char *component_name; 49 50 const int dai_type; 50 51 const int dailink[2]; /* dailink id for each direction */ 51 52 const struct snd_kcontrol_new *controls;
-10
sound/soc/sdw_utils/soc_sdw_cs_amp.c
··· 14 14 #include <sound/soc-dai.h> 15 15 #include <sound/soc_sdw_utils.h> 16 16 17 - #define CODEC_NAME_SIZE 8 18 17 #define CS_AMP_CHANNELS_PER_AMP 4 19 18 #define CS35L56_SPK_VOLUME_0DB 400 /* 0dB Max */ 20 19 ··· 37 38 38 39 int asoc_sdw_cs_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai) 39 40 { 40 - const char *dai_name = rtd->dai_link->codecs->dai_name; 41 41 struct snd_soc_card *card = rtd->card; 42 - char codec_name[CODEC_NAME_SIZE]; 43 42 char widget_name[16]; 44 43 struct snd_soc_dapm_route route = { "Speaker", NULL, widget_name }; 45 44 struct snd_soc_dai *codec_dai; 46 45 int i, ret; 47 - 48 - snprintf(codec_name, CODEC_NAME_SIZE, "%s", dai_name); 49 - card->components = devm_kasprintf(card->dev, GFP_KERNEL, 50 - "%s spk:%s", 51 - card->components, codec_name); 52 - if (!card->components) 53 - return -ENOMEM; 54 46 55 47 for_each_rtd_codec_dais(rtd, i, codec_dai) { 56 48 if (!strstr(codec_dai->name, "cs35l56"))
-9
sound/soc/sdw_utils/soc_sdw_maxim.c
··· 28 28 struct snd_soc_card *card = rtd->card; 29 29 int ret; 30 30 31 - card->components = devm_kasprintf(card->dev, GFP_KERNEL, 32 - "%s spk:mx%04x", 33 - card->components, maxim_part_id); 34 - if (!card->components) 35 - return -ENOMEM; 36 - 37 - dev_dbg(card->dev, "soundwire maxim card components assigned : %s\n", 38 - card->components); 39 - 40 31 ret = snd_soc_dapm_add_routes(&card->dapm, max_98373_dapm_routes, 2); 41 32 if (ret) 42 33 dev_err(rtd->dev, "failed to add first SPK map: %d\n", ret);
-6
sound/soc/sdw_utils/soc_sdw_rt_amp.c
··· 195 195 196 196 rt_amp_map = get_codec_name_and_route(dai, codec_name); 197 197 198 - card->components = devm_kasprintf(card->dev, GFP_KERNEL, 199 - "%s spk:%s", 200 - card->components, codec_name); 201 - if (!card->components) 202 - return -ENOMEM; 203 - 204 198 for_each_rtd_codec_dais(rtd, i, codec_dai) { 205 199 if (strstr(codec_dai->component->name_prefix, "-1")) 206 200 ret = snd_soc_dapm_add_routes(&card->dapm, rt_amp_map, 2);
-7
sound/soc/sdw_utils/soc_sdw_rt_mf_sdca.c
··· 73 73 return -EINVAL; 74 74 } 75 75 76 - /* Update card components */ 77 - card->components = devm_kasprintf(card->dev, GFP_KERNEL, 78 - "%s spk:%s", 79 - card->components, codec_name); 80 - if (!card->components) 81 - return -ENOMEM; 82 - 83 76 /* Add routes */ 84 77 ret = snd_soc_dapm_add_routes(&card->dapm, route_map->route_map, route_map->route_size); 85 78 if (ret)
+33
sound/soc/sdw_utils/soc_sdw_utils.c
··· 135 135 { 136 136 .direction = {true, false}, 137 137 .dai_name = "rt712-sdca-aif2", 138 + .component_name = "rt712", 138 139 .dai_type = SOC_SDW_DAI_TYPE_AMP, 139 140 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, 140 141 .init = asoc_sdw_rt_amp_init, ··· 276 275 { 277 276 .direction = {true, false}, 278 277 .dai_name = "rt1320-aif1", 278 + .component_name = "rt1320", 279 279 .dai_type = SOC_SDW_DAI_TYPE_AMP, 280 280 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, 281 281 .init = asoc_sdw_rt_amp_init, ··· 411 409 { 412 410 .direction = {true, false}, 413 411 .dai_name = "rt722-sdca-aif2", 412 + .component_name = "rt722", 414 413 .dai_type = SOC_SDW_DAI_TYPE_AMP, 415 414 /* No feedback capability is provided by rt722-sdca codec driver*/ 416 415 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, ··· 441 438 { 442 439 .direction = {true, true}, 443 440 .dai_name = "max98373-aif1", 441 + .component_name = "mx8373", 444 442 .dai_type = SOC_SDW_DAI_TYPE_AMP, 445 443 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_AMP_IN_DAI_ID}, 446 444 .init = asoc_sdw_maxim_init, ··· 460 456 { 461 457 .direction = {true, false}, 462 458 .dai_name = "max98363-aif1", 459 + .component_name = "mx8363", 463 460 .dai_type = SOC_SDW_DAI_TYPE_AMP, 464 461 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, 465 462 .init = asoc_sdw_maxim_init, ··· 496 491 { 497 492 .direction = {true, false}, 498 493 .dai_name = "cs35l56-sdw1", 494 + .component_name = "cs35l56", 499 495 .dai_type = SOC_SDW_DAI_TYPE_AMP, 500 496 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, 501 497 .init = asoc_sdw_cs_amp_init, ··· 522 516 { 523 517 .direction = {true, false}, 524 518 .dai_name = "cs35l56-sdw1", 519 + .component_name = "cs35l56", 525 520 .dai_type = SOC_SDW_DAI_TYPE_AMP, 526 521 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, 527 522 .init = asoc_sdw_cs_amp_init, ··· 740 733 struct snd_soc_card *card = rtd->card; 741 734 struct asoc_sdw_codec_info *codec_info; 742 735 struct snd_soc_dai *dai; 736 + const char *spk_components=""; 743 737 int dai_index; 744 738 int ret; 745 739 int i; ··· 793 785 if (ret) 794 786 return ret; 795 787 } 788 + 789 + /* Generate the spk component string for card->components string */ 790 + if (codec_info->dais[dai_index].dai_type == SOC_SDW_DAI_TYPE_AMP && 791 + codec_info->dais[dai_index].component_name) { 792 + if (strlen (spk_components) == 0) 793 + spk_components = 794 + devm_kasprintf(card->dev, GFP_KERNEL, "%s", 795 + codec_info->dais[dai_index].component_name); 796 + else 797 + /* Append component name to spk_components */ 798 + spk_components = 799 + devm_kasprintf(card->dev, GFP_KERNEL, 800 + "%s+%s", spk_components, 801 + codec_info->dais[dai_index].component_name); 802 + } 803 + 796 804 codec_info->dais[dai_index].rtd_init_done = true; 805 + 806 + } 807 + 808 + if (strlen (spk_components) > 0) { 809 + /* Update card components for speaker components */ 810 + card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s spk:%s", 811 + card->components, spk_components); 812 + if (!card->components) 813 + return -ENOMEM; 797 814 } 798 815 799 816 return 0;