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: Intel: avs: remove redundant dapm routes

Merge series from Brent Lu <brent.lu@intel.com>:

This patch series remove redundant dapm routes declared in multiple machine
drivers. These routes will be created by snd_soc_dapm_connect_dai_link_widgets()
during soundcard initialization. Following is the kernel log from a KBL
chromebook nocturne.

dmic:
[ 13.773455] avs_dmic avs_dmic: connected DAI link dmic-codec:Capture -> dmic-platform:DMIC Rx
[ 13.773460] avs_dmic avs_dmic: connected DAI link dmic-codec:Capture -> dmic-platform:DMIC WoV Rx

max98373:
[ 14.079536] avs_max98373 avs_max98373.1: connected DAI link avs_max98373.1-platform:ssp0 Tx -> i2c-MX98373:00:Right HiFi Playback
[ 14.079545] avs_max98373 avs_max98373.1: connected DAI link i2c-MX98373:00:Right HiFi Capture -> avs_max98373.1-platform:ssp0 Rx
[ 14.079550] avs_max98373 avs_max98373.1: connected DAI link avs_max98373.1-platform:ssp0 Tx -> i2c-MX98373:01:Left HiFi Playback
[ 14.079554] avs_max98373 avs_max98373.1: connected DAI link i2c-MX98373:01:Left HiFi Capture -> avs_max98373.1-platform:ssp0 Rx

hdaudio:
[ 14.094818] avs_hdaudio avs_hdaudio.2: connected DAI link hdaudioB0D2-platform:hdaudioB0D2-cpu0 Tx -> hdaudioB0D2:HDMI 0 Playback
[ 14.094824] avs_hdaudio avs_hdaudio.2: connected DAI link hdaudioB0D2-platform:hdaudioB0D2-cpu1 Tx -> hdaudioB0D2:HDMI 1 Playback
[ 14.094828] avs_hdaudio avs_hdaudio.2: connected DAI link hdaudioB0D2-platform:hdaudioB0D2-cpu2 Tx -> hdaudioB0D2:HDMI 2 Playback

+31 -492
+3 -42
sound/soc/intel/avs/boards/da7219.c
··· 181 181 return 0; 182 182 } 183 183 184 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 185 - struct snd_soc_dapm_route **routes, int *num_routes) 186 - { 187 - struct snd_soc_dapm_route *dr; 188 - const int num_base = ARRAY_SIZE(card_base_routes); 189 - const int num_dr = num_base + 2; 190 - int idx; 191 - 192 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 193 - if (!dr) 194 - return -ENOMEM; 195 - 196 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 197 - 198 - idx = num_base; 199 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Playback"); 200 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 201 - if (!dr[idx].sink || !dr[idx].source) 202 - return -ENOMEM; 203 - 204 - idx++; 205 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 206 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "Capture"); 207 - if (!dr[idx].sink || !dr[idx].source) 208 - return -ENOMEM; 209 - 210 - *routes = dr; 211 - *num_routes = num_dr; 212 - 213 - return 0; 214 - } 215 - 216 184 static int avs_card_suspend_pre(struct snd_soc_card *card) 217 185 { 218 186 struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, DA7219_DAI_NAME); ··· 198 230 199 231 static int avs_da7219_probe(struct platform_device *pdev) 200 232 { 201 - struct snd_soc_dapm_route *routes; 202 233 struct snd_soc_dai_link *dai_link; 203 234 struct snd_soc_acpi_mach *mach; 204 235 struct snd_soc_card *card; 205 236 struct snd_soc_jack *jack; 206 237 struct device *dev = &pdev->dev; 207 238 const char *pname; 208 - int num_routes, ssp_port, ret; 239 + int ssp_port, ret; 209 240 210 241 mach = dev_get_platdata(dev); 211 242 pname = mach->mach_params.platform; ··· 213 246 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 214 247 if (ret) { 215 248 dev_err(dev, "Failed to create dai link: %d", ret); 216 - return ret; 217 - } 218 - 219 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 220 - if (ret) { 221 - dev_err(dev, "Failed to create dapm routes: %d", ret); 222 249 return ret; 223 250 } 224 251 ··· 232 271 card->num_controls = ARRAY_SIZE(card_controls); 233 272 card->dapm_widgets = card_widgets; 234 273 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 235 - card->dapm_routes = routes; 236 - card->num_dapm_routes = num_routes; 274 + card->dapm_routes = card_base_routes; 275 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 237 276 card->fully_routed = true; 238 277 snd_soc_card_set_drvdata(card, jack); 239 278
-2
sound/soc/intel/avs/boards/dmic.c
··· 44 44 45 45 static const struct snd_soc_dapm_route card_routes[] = { 46 46 {"DMic", NULL, "SoC DMIC"}, 47 - {"DMIC Rx", NULL, "Capture"}, 48 - {"DMIC WoV Rx", NULL, "Capture"}, 49 47 }; 50 48 51 49 static int avs_dmic_probe(struct platform_device *pdev)
+1 -64
sound/soc/intel/avs/boards/hdaudio.c
··· 64 64 return 0; 65 65 } 66 66 67 - static int avs_create_dapm_routes(struct device *dev, struct hda_codec *codec, int pcm_count, 68 - struct snd_soc_dapm_route **routes, int *num_routes) 69 - { 70 - struct snd_soc_dapm_route *dr; 71 - struct hda_pcm *pcm; 72 - const char *cname = dev_name(&codec->core.dev); 73 - int i, n = 0; 74 - 75 - /* at max twice the number of pcms */ 76 - dr = devm_kcalloc(dev, pcm_count * 2, sizeof(*dr), GFP_KERNEL); 77 - if (!dr) 78 - return -ENOMEM; 79 - 80 - pcm = list_first_entry(&codec->pcm_list_head, struct hda_pcm, list); 81 - 82 - for (i = 0; i < pcm_count; i++, pcm = list_next_entry(pcm, list)) { 83 - struct hda_pcm_stream *stream; 84 - int dir; 85 - 86 - dir = SNDRV_PCM_STREAM_PLAYBACK; 87 - stream = &pcm->stream[dir]; 88 - if (!stream->substreams) 89 - goto capture_routes; 90 - 91 - dr[n].sink = devm_kasprintf(dev, GFP_KERNEL, "%s %s", pcm->name, 92 - snd_pcm_direction_name(dir)); 93 - dr[n].source = devm_kasprintf(dev, GFP_KERNEL, "%s-cpu%d Tx", cname, i); 94 - if (!dr[n].sink || !dr[n].source) 95 - return -ENOMEM; 96 - n++; 97 - 98 - capture_routes: 99 - dir = SNDRV_PCM_STREAM_CAPTURE; 100 - stream = &pcm->stream[dir]; 101 - if (!stream->substreams) 102 - continue; 103 - 104 - dr[n].sink = devm_kasprintf(dev, GFP_KERNEL, "%s-cpu%d Rx", cname, i); 105 - dr[n].source = devm_kasprintf(dev, GFP_KERNEL, "%s %s", pcm->name, 106 - snd_pcm_direction_name(dir)); 107 - if (!dr[n].sink || !dr[n].source) 108 - return -ENOMEM; 109 - n++; 110 - } 111 - 112 - *routes = dr; 113 - *num_routes = n; 114 - return 0; 115 - } 116 - 117 67 /* Should be aligned with SectionPCM's name from topology */ 118 68 #define FEDAI_NAME_PREFIX "HDMI" 119 69 ··· 122 172 123 173 static int avs_probing_link_init(struct snd_soc_pcm_runtime *rtm) 124 174 { 125 - struct snd_soc_dapm_route *routes; 126 175 struct snd_soc_acpi_mach *mach; 127 176 struct snd_soc_dai_link *links = NULL; 128 177 struct snd_soc_card *card = rtm->card; 129 178 struct hda_codec *codec; 130 179 struct hda_pcm *pcm; 131 - int ret, n, pcm_count = 0; 180 + int ret, pcm_count = 0; 132 181 133 182 mach = dev_get_platdata(card->dev); 134 183 codec = mach->pdata; ··· 146 197 ret = snd_soc_add_pcm_runtimes(card, links, pcm_count); 147 198 if (ret < 0) { 148 199 dev_err(card->dev, "add links failed: %d\n", ret); 149 - return ret; 150 - } 151 - 152 - ret = avs_create_dapm_routes(card->dev, codec, pcm_count, &routes, &n); 153 - if (ret < 0) { 154 - dev_err(card->dev, "create routes failed: %d\n", ret); 155 - return ret; 156 - } 157 - 158 - ret = snd_soc_dapm_add_routes(&card->dapm, routes, n); 159 - if (ret < 0) { 160 - dev_err(card->dev, "add routes failed: %d\n", ret); 161 200 return ret; 162 201 } 163 202
+3 -36
sound/soc/intel/avs/boards/max98357a.c
··· 86 86 return 0; 87 87 } 88 88 89 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 90 - struct snd_soc_dapm_route **routes, int *num_routes) 91 - { 92 - struct snd_soc_dapm_route *dr; 93 - const int num_base = ARRAY_SIZE(card_base_routes); 94 - const int num_dr = num_base + 1; 95 - int idx; 96 - 97 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 98 - if (!dr) 99 - return -ENOMEM; 100 - 101 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 102 - 103 - idx = num_base; 104 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "HiFi Playback"); 105 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 106 - if (!dr[idx].sink || !dr[idx].source) 107 - return -ENOMEM; 108 - 109 - *routes = dr; 110 - *num_routes = num_dr; 111 - 112 - return 0; 113 - } 114 - 115 89 static int avs_max98357a_probe(struct platform_device *pdev) 116 90 { 117 - struct snd_soc_dapm_route *routes; 118 91 struct snd_soc_dai_link *dai_link; 119 92 struct snd_soc_acpi_mach *mach; 120 93 struct snd_soc_card *card; 121 94 struct device *dev = &pdev->dev; 122 95 const char *pname; 123 - int num_routes, ssp_port, ret; 96 + int ssp_port, ret; 124 97 125 98 mach = dev_get_platdata(dev); 126 99 pname = mach->mach_params.platform; ··· 102 129 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 103 130 if (ret) { 104 131 dev_err(dev, "Failed to create dai link: %d", ret); 105 - return ret; 106 - } 107 - 108 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 109 - if (ret) { 110 - dev_err(dev, "Failed to create dapm routes: %d", ret); 111 132 return ret; 112 133 } 113 134 ··· 118 151 card->num_controls = ARRAY_SIZE(card_controls); 119 152 card->dapm_widgets = card_widgets; 120 153 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 121 - card->dapm_routes = routes; 122 - card->num_dapm_routes = num_routes; 154 + card->dapm_routes = card_base_routes; 155 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 123 156 card->fully_routed = true; 124 157 125 158 ret = snd_soc_fixup_dai_links_platform_name(card, pname);
+3 -42
sound/soc/intel/avs/boards/max98373.c
··· 141 141 return 0; 142 142 } 143 143 144 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 145 - struct snd_soc_dapm_route **routes, int *num_routes) 146 - { 147 - struct snd_soc_dapm_route *dr; 148 - const int num_base = ARRAY_SIZE(card_base_routes); 149 - const int num_dr = num_base + 2; 150 - int idx; 151 - 152 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 153 - if (!dr) 154 - return -ENOMEM; 155 - 156 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 157 - 158 - idx = num_base; 159 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Left HiFi Playback"); 160 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 161 - if (!dr[idx].sink || !dr[idx].source) 162 - return -ENOMEM; 163 - 164 - idx++; 165 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Right HiFi Playback"); 166 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 167 - if (!dr[idx].sink || !dr[idx].source) 168 - return -ENOMEM; 169 - 170 - *routes = dr; 171 - *num_routes = num_dr; 172 - 173 - return 0; 174 - } 175 - 176 144 static int avs_max98373_probe(struct platform_device *pdev) 177 145 { 178 - struct snd_soc_dapm_route *routes; 179 146 struct snd_soc_dai_link *dai_link; 180 147 struct snd_soc_acpi_mach *mach; 181 148 struct snd_soc_card *card; 182 149 struct device *dev = &pdev->dev; 183 150 const char *pname; 184 - int num_routes, ssp_port, ret; 151 + int ssp_port, ret; 185 152 186 153 mach = dev_get_platdata(dev); 187 154 pname = mach->mach_params.platform; ··· 157 190 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 158 191 if (ret) { 159 192 dev_err(dev, "Failed to create dai link: %d", ret); 160 - return ret; 161 - } 162 - 163 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 164 - if (ret) { 165 - dev_err(dev, "Failed to create dapm routes: %d", ret); 166 193 return ret; 167 194 } 168 195 ··· 175 214 card->num_controls = ARRAY_SIZE(card_controls); 176 215 card->dapm_widgets = card_widgets; 177 216 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 178 - card->dapm_routes = routes; 179 - card->num_dapm_routes = num_routes; 217 + card->dapm_routes = card_base_routes; 218 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 180 219 card->fully_routed = true; 181 220 182 221 ret = snd_soc_fixup_dai_links_platform_name(card, pname);
+3 -42
sound/soc/intel/avs/boards/max98927.c
··· 138 138 return 0; 139 139 } 140 140 141 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 142 - struct snd_soc_dapm_route **routes, int *num_routes) 143 - { 144 - struct snd_soc_dapm_route *dr; 145 - const int num_base = ARRAY_SIZE(card_base_routes); 146 - const int num_dr = num_base + 2; 147 - int idx; 148 - 149 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 150 - if (!dr) 151 - return -ENOMEM; 152 - 153 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 154 - 155 - idx = num_base; 156 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Left HiFi Playback"); 157 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 158 - if (!dr[idx].sink || !dr[idx].source) 159 - return -ENOMEM; 160 - 161 - idx++; 162 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Right HiFi Playback"); 163 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 164 - if (!dr[idx].sink || !dr[idx].source) 165 - return -ENOMEM; 166 - 167 - *routes = dr; 168 - *num_routes = num_dr; 169 - 170 - return 0; 171 - } 172 - 173 141 static int avs_max98927_probe(struct platform_device *pdev) 174 142 { 175 - struct snd_soc_dapm_route *routes; 176 143 struct snd_soc_dai_link *dai_link; 177 144 struct snd_soc_acpi_mach *mach; 178 145 struct snd_soc_card *card; 179 146 struct device *dev = &pdev->dev; 180 147 const char *pname; 181 - int num_routes, ssp_port, ret; 148 + int ssp_port, ret; 182 149 183 150 mach = dev_get_platdata(dev); 184 151 pname = mach->mach_params.platform; ··· 154 187 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 155 188 if (ret) { 156 189 dev_err(dev, "Failed to create dai link: %d", ret); 157 - return ret; 158 - } 159 - 160 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 161 - if (ret) { 162 - dev_err(dev, "Failed to create dapm routes: %d", ret); 163 190 return ret; 164 191 } 165 192 ··· 172 211 card->num_controls = ARRAY_SIZE(card_controls); 173 212 card->dapm_widgets = card_widgets; 174 213 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 175 - card->dapm_routes = routes; 176 - card->num_dapm_routes = num_routes; 214 + card->dapm_routes = card_base_routes; 215 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 177 216 card->fully_routed = true; 178 217 179 218 ret = snd_soc_fixup_dai_links_platform_name(card, pname);
+3 -42
sound/soc/intel/avs/boards/nau8825.c
··· 215 215 return 0; 216 216 } 217 217 218 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 219 - struct snd_soc_dapm_route **routes, int *num_routes) 220 - { 221 - struct snd_soc_dapm_route *dr; 222 - const int num_base = ARRAY_SIZE(card_base_routes); 223 - const int num_dr = num_base + 2; 224 - int idx; 225 - 226 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 227 - if (!dr) 228 - return -ENOMEM; 229 - 230 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 231 - 232 - idx = num_base; 233 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Playback"); 234 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 235 - if (!dr[idx].sink || !dr[idx].source) 236 - return -ENOMEM; 237 - 238 - idx++; 239 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 240 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "Capture"); 241 - if (!dr[idx].sink || !dr[idx].source) 242 - return -ENOMEM; 243 - 244 - *routes = dr; 245 - *num_routes = num_dr; 246 - 247 - return 0; 248 - } 249 - 250 218 static int avs_card_suspend_pre(struct snd_soc_card *card) 251 219 { 252 220 struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, SKL_NUVOTON_CODEC_DAI); ··· 242 274 243 275 static int avs_nau8825_probe(struct platform_device *pdev) 244 276 { 245 - struct snd_soc_dapm_route *routes; 246 277 struct snd_soc_dai_link *dai_link; 247 278 struct snd_soc_acpi_mach *mach; 248 279 struct snd_soc_card *card; 249 280 struct snd_soc_jack *jack; 250 281 struct device *dev = &pdev->dev; 251 282 const char *pname; 252 - int num_routes, ssp_port, ret; 283 + int ssp_port, ret; 253 284 254 285 mach = dev_get_platdata(dev); 255 286 pname = mach->mach_params.platform; ··· 257 290 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 258 291 if (ret) { 259 292 dev_err(dev, "Failed to create dai link: %d", ret); 260 - return ret; 261 - } 262 - 263 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 264 - if (ret) { 265 - dev_err(dev, "Failed to create dapm routes: %d", ret); 266 293 return ret; 267 294 } 268 295 ··· 276 315 card->num_controls = ARRAY_SIZE(card_controls); 277 316 card->dapm_widgets = card_widgets; 278 317 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 279 - card->dapm_routes = routes; 280 - card->num_dapm_routes = num_routes; 318 + card->dapm_routes = card_base_routes; 319 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 281 320 card->fully_routed = true; 282 321 snd_soc_card_set_drvdata(card, jack); 283 322
+3 -42
sound/soc/intel/avs/boards/rt274.c
··· 188 188 return 0; 189 189 } 190 190 191 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 192 - struct snd_soc_dapm_route **routes, int *num_routes) 193 - { 194 - struct snd_soc_dapm_route *dr; 195 - const int num_base = ARRAY_SIZE(card_base_routes); 196 - const int num_dr = num_base + 2; 197 - int idx; 198 - 199 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 200 - if (!dr) 201 - return -ENOMEM; 202 - 203 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 204 - 205 - idx = num_base; 206 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Playback"); 207 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 208 - if (!dr[idx].sink || !dr[idx].source) 209 - return -ENOMEM; 210 - 211 - idx++; 212 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 213 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Capture"); 214 - if (!dr[idx].sink || !dr[idx].source) 215 - return -ENOMEM; 216 - 217 - *routes = dr; 218 - *num_routes = num_dr; 219 - 220 - return 0; 221 - } 222 - 223 191 static int avs_card_suspend_pre(struct snd_soc_card *card) 224 192 { 225 193 struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, RT274_CODEC_DAI); ··· 205 237 206 238 static int avs_rt274_probe(struct platform_device *pdev) 207 239 { 208 - struct snd_soc_dapm_route *routes; 209 240 struct snd_soc_dai_link *dai_link; 210 241 struct snd_soc_acpi_mach *mach; 211 242 struct snd_soc_card *card; 212 243 struct snd_soc_jack *jack; 213 244 struct device *dev = &pdev->dev; 214 245 const char *pname; 215 - int num_routes, ssp_port, ret; 246 + int ssp_port, ret; 216 247 217 248 mach = dev_get_platdata(dev); 218 249 pname = mach->mach_params.platform; ··· 220 253 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 221 254 if (ret) { 222 255 dev_err(dev, "Failed to create dai link: %d", ret); 223 - return ret; 224 - } 225 - 226 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 227 - if (ret) { 228 - dev_err(dev, "Failed to create dapm routes: %d", ret); 229 256 return ret; 230 257 } 231 258 ··· 239 278 card->num_controls = ARRAY_SIZE(card_controls); 240 279 card->dapm_widgets = card_widgets; 241 280 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 242 - card->dapm_routes = routes; 243 - card->num_dapm_routes = num_routes; 281 + card->dapm_routes = card_base_routes; 282 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 244 283 card->fully_routed = true; 245 284 snd_soc_card_set_drvdata(card, jack); 246 285
+3 -42
sound/soc/intel/avs/boards/rt286.c
··· 158 158 return 0; 159 159 } 160 160 161 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 162 - struct snd_soc_dapm_route **routes, int *num_routes) 163 - { 164 - struct snd_soc_dapm_route *dr; 165 - const int num_base = ARRAY_SIZE(card_base_routes); 166 - const int num_dr = num_base + 2; 167 - int idx; 168 - 169 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 170 - if (!dr) 171 - return -ENOMEM; 172 - 173 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 174 - 175 - idx = num_base; 176 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Playback"); 177 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 178 - if (!dr[idx].sink || !dr[idx].source) 179 - return -ENOMEM; 180 - 181 - idx++; 182 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 183 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Capture"); 184 - if (!dr[idx].sink || !dr[idx].source) 185 - return -ENOMEM; 186 - 187 - *routes = dr; 188 - *num_routes = num_dr; 189 - 190 - return 0; 191 - } 192 - 193 161 static int avs_card_suspend_pre(struct snd_soc_card *card) 194 162 { 195 163 struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, RT286_CODEC_DAI); ··· 175 207 176 208 static int avs_rt286_probe(struct platform_device *pdev) 177 209 { 178 - struct snd_soc_dapm_route *routes; 179 210 struct snd_soc_dai_link *dai_link; 180 211 struct snd_soc_acpi_mach *mach; 181 212 struct snd_soc_card *card; 182 213 struct snd_soc_jack *jack; 183 214 struct device *dev = &pdev->dev; 184 215 const char *pname; 185 - int num_routes, ssp_port, ret; 216 + int ssp_port, ret; 186 217 187 218 mach = dev_get_platdata(dev); 188 219 pname = mach->mach_params.platform; ··· 190 223 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 191 224 if (ret) { 192 225 dev_err(dev, "Failed to create dai link: %d", ret); 193 - return ret; 194 - } 195 - 196 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 197 - if (ret) { 198 - dev_err(dev, "Failed to create dapm routes: %d", ret); 199 226 return ret; 200 227 } 201 228 ··· 209 248 card->num_controls = ARRAY_SIZE(card_controls); 210 249 card->dapm_widgets = card_widgets; 211 250 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 212 - card->dapm_routes = routes; 213 - card->num_dapm_routes = num_routes; 251 + card->dapm_routes = card_base_routes; 252 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 214 253 card->fully_routed = true; 215 254 snd_soc_card_set_drvdata(card, jack); 216 255
+3 -42
sound/soc/intel/avs/boards/rt298.c
··· 178 178 return 0; 179 179 } 180 180 181 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 182 - struct snd_soc_dapm_route **routes, int *num_routes) 183 - { 184 - struct snd_soc_dapm_route *dr; 185 - const int num_base = ARRAY_SIZE(card_base_routes); 186 - const int num_dr = num_base + 2; 187 - int idx; 188 - 189 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 190 - if (!dr) 191 - return -ENOMEM; 192 - 193 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 194 - 195 - idx = num_base; 196 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Playback"); 197 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 198 - if (!dr[idx].sink || !dr[idx].source) 199 - return -ENOMEM; 200 - 201 - idx++; 202 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 203 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Capture"); 204 - if (!dr[idx].sink || !dr[idx].source) 205 - return -ENOMEM; 206 - 207 - *routes = dr; 208 - *num_routes = num_dr; 209 - 210 - return 0; 211 - } 212 - 213 181 static int avs_card_suspend_pre(struct snd_soc_card *card) 214 182 { 215 183 struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, RT298_CODEC_DAI); ··· 195 227 196 228 static int avs_rt298_probe(struct platform_device *pdev) 197 229 { 198 - struct snd_soc_dapm_route *routes; 199 230 struct snd_soc_dai_link *dai_link; 200 231 struct snd_soc_acpi_mach *mach; 201 232 struct snd_soc_card *card; 202 233 struct snd_soc_jack *jack; 203 234 struct device *dev = &pdev->dev; 204 235 const char *pname; 205 - int num_routes, ssp_port, ret; 236 + int ssp_port, ret; 206 237 207 238 mach = dev_get_platdata(dev); 208 239 pname = mach->mach_params.platform; ··· 210 243 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 211 244 if (ret) { 212 245 dev_err(dev, "Failed to create dai link: %d", ret); 213 - return ret; 214 - } 215 - 216 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 217 - if (ret) { 218 - dev_err(dev, "Failed to create dapm routes: %d", ret); 219 246 return ret; 220 247 } 221 248 ··· 229 268 card->num_controls = ARRAY_SIZE(card_controls); 230 269 card->dapm_widgets = card_widgets; 231 270 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 232 - card->dapm_routes = routes; 233 - card->num_dapm_routes = num_routes; 271 + card->dapm_routes = card_base_routes; 272 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 234 273 card->fully_routed = true; 235 274 snd_soc_card_set_drvdata(card, jack); 236 275
+3 -42
sound/soc/intel/avs/boards/rt5682.c
··· 234 234 return 0; 235 235 } 236 236 237 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 238 - struct snd_soc_dapm_route **routes, int *num_routes) 239 - { 240 - struct snd_soc_dapm_route *dr; 241 - const int num_base = ARRAY_SIZE(card_base_routes); 242 - const int num_dr = num_base + 2; 243 - int idx; 244 - 245 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 246 - if (!dr) 247 - return -ENOMEM; 248 - 249 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 250 - 251 - idx = num_base; 252 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Playback"); 253 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 254 - if (!dr[idx].sink || !dr[idx].source) 255 - return -ENOMEM; 256 - 257 - idx++; 258 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 259 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "AIF1 Capture"); 260 - if (!dr[idx].sink || !dr[idx].source) 261 - return -ENOMEM; 262 - 263 - *routes = dr; 264 - *num_routes = num_dr; 265 - 266 - return 0; 267 - } 268 - 269 237 static int avs_card_suspend_pre(struct snd_soc_card *card) 270 238 { 271 239 struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, AVS_RT5682_CODEC_DAI_NAME); ··· 251 283 252 284 static int avs_rt5682_probe(struct platform_device *pdev) 253 285 { 254 - struct snd_soc_dapm_route *routes; 255 286 struct snd_soc_dai_link *dai_link; 256 287 struct snd_soc_acpi_mach *mach; 257 288 struct snd_soc_card *card; 258 289 struct snd_soc_jack *jack; 259 290 struct device *dev = &pdev->dev; 260 291 const char *pname; 261 - int num_routes, ssp_port, ret; 292 + int ssp_port, ret; 262 293 263 294 if (pdev->id_entry && pdev->id_entry->driver_data) 264 295 avs_rt5682_quirk = (unsigned long)pdev->id_entry->driver_data; ··· 272 305 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 273 306 if (ret) { 274 307 dev_err(dev, "Failed to create dai link: %d", ret); 275 - return ret; 276 - } 277 - 278 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 279 - if (ret) { 280 - dev_err(dev, "Failed to create dapm routes: %d", ret); 281 308 return ret; 282 309 } 283 310 ··· 291 330 card->num_controls = ARRAY_SIZE(card_controls); 292 331 card->dapm_widgets = card_widgets; 293 332 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 294 - card->dapm_routes = routes; 295 - card->num_dapm_routes = num_routes; 333 + card->dapm_routes = card_base_routes; 334 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 296 335 card->fully_routed = true; 297 336 snd_soc_card_set_drvdata(card, jack); 298 337
+3 -54
sound/soc/intel/avs/boards/ssm4567.c
··· 129 129 return 0; 130 130 } 131 131 132 - static int avs_create_dapm_routes(struct device *dev, int ssp_port, 133 - struct snd_soc_dapm_route **routes, int *num_routes) 134 - { 135 - struct snd_soc_dapm_route *dr; 136 - const int num_base = ARRAY_SIZE(card_base_routes); 137 - const int num_dr = num_base + 4; 138 - int idx; 139 - 140 - dr = devm_kcalloc(dev, num_dr, sizeof(*dr), GFP_KERNEL); 141 - if (!dr) 142 - return -ENOMEM; 143 - 144 - memcpy(dr, card_base_routes, num_base * sizeof(*dr)); 145 - 146 - idx = num_base; 147 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Left Playback"); 148 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 149 - if (!dr[idx].sink || !dr[idx].source) 150 - return -ENOMEM; 151 - 152 - idx++; 153 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "Right Playback"); 154 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Tx", ssp_port); 155 - if (!dr[idx].sink || !dr[idx].source) 156 - return -ENOMEM; 157 - 158 - idx++; 159 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 160 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "Left Capture Sense"); 161 - if (!dr[idx].sink || !dr[idx].source) 162 - return -ENOMEM; 163 - 164 - idx++; 165 - dr[idx].sink = devm_kasprintf(dev, GFP_KERNEL, "ssp%d Rx", ssp_port); 166 - dr[idx].source = devm_kasprintf(dev, GFP_KERNEL, "Right Capture Sense"); 167 - if (!dr[idx].sink || !dr[idx].source) 168 - return -ENOMEM; 169 - 170 - *routes = dr; 171 - *num_routes = num_dr; 172 - 173 - return 0; 174 - } 175 - 176 132 static int avs_ssm4567_probe(struct platform_device *pdev) 177 133 { 178 - struct snd_soc_dapm_route *routes; 179 134 struct snd_soc_dai_link *dai_link; 180 135 struct snd_soc_acpi_mach *mach; 181 136 struct snd_soc_card *card; 182 137 struct device *dev = &pdev->dev; 183 138 const char *pname; 184 - int num_routes, ssp_port, ret; 139 + int ssp_port, ret; 185 140 186 141 mach = dev_get_platdata(dev); 187 142 pname = mach->mach_params.platform; ··· 145 190 ret = avs_create_dai_link(dev, pname, ssp_port, &dai_link); 146 191 if (ret) { 147 192 dev_err(dev, "Failed to create dai link: %d", ret); 148 - return ret; 149 - } 150 - 151 - ret = avs_create_dapm_routes(dev, ssp_port, &routes, &num_routes); 152 - if (ret) { 153 - dev_err(dev, "Failed to create dapm routes: %d", ret); 154 193 return ret; 155 194 } 156 195 ··· 163 214 card->num_controls = ARRAY_SIZE(card_controls); 164 215 card->dapm_widgets = card_widgets; 165 216 card->num_dapm_widgets = ARRAY_SIZE(card_widgets); 166 - card->dapm_routes = routes; 167 - card->num_dapm_routes = num_routes; 217 + card->dapm_routes = card_base_routes; 218 + card->num_dapm_routes = ARRAY_SIZE(card_base_routes); 168 219 card->fully_routed = true; 169 220 card->disable_route_checks = true; 170 221