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

ASoC: simple-card-utils: use snd_soc_ret()

We can use snd_soc_ret() to indicate error message when return.
Let's use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/87a5b12qlg.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Kuninori Morimoto and committed by
Mark Brown
2d7395b2 a0ef5b4b

+115 -87
+4 -4
include/sound/simple_card_utils.h
··· 142 142 struct device_node *codec, 143 143 char *prefix, 144 144 unsigned int *retfmt); 145 - int simple_util_parse_tdm_width_map(struct device *dev, struct device_node *np, 145 + int simple_util_parse_tdm_width_map(struct simple_util_priv *priv, struct device_node *np, 146 146 struct simple_util_dai *dai); 147 147 148 148 __printf(3, 4) 149 - int simple_util_set_dailink_name(struct device *dev, 149 + int simple_util_set_dailink_name(struct simple_util_priv *priv, 150 150 struct snd_soc_dai_link *dai_link, 151 151 const char *fmt, ...); 152 - int simple_util_parse_card_name(struct snd_soc_card *card, 152 + int simple_util_parse_card_name(struct simple_util_priv *priv, 153 153 char *prefix); 154 154 155 155 int simple_util_parse_clk(struct device *dev, ··· 201 201 202 202 int graph_util_card_probe(struct snd_soc_card *card); 203 203 int graph_util_is_ports0(struct device_node *port); 204 - int graph_util_parse_dai(struct device *dev, struct device_node *ep, 204 + int graph_util_parse_dai(struct simple_util_priv *priv, struct device_node *ep, 205 205 struct snd_soc_dai_link_component *dlc, int *is_single_link); 206 206 207 207 void graph_util_parse_link_direction(struct device_node *np,
+3 -3
sound/soc/generic/audio-graph-card.c
··· 111 111 dai = simple_props_to_dai_codec(dai_props, 0); 112 112 } 113 113 114 - ret = graph_util_parse_dai(dev, ep, dlc, cpu); 114 + ret = graph_util_parse_dai(priv, ep, dlc, cpu); 115 115 if (ret < 0) 116 116 return ret; 117 117 ··· 183 183 if (priv->ops) 184 184 dai_link->ops = priv->ops; 185 185 186 - return simple_util_set_dailink_name(dev, dai_link, name); 186 + return simple_util_set_dailink_name(priv, dai_link, name); 187 187 } 188 188 189 189 static int graph_dai_link_of_dpcm(struct simple_util_priv *priv, ··· 586 586 if (ret < 0) 587 587 goto err; 588 588 589 - ret = simple_util_parse_card_name(card, NULL); 589 + ret = simple_util_parse_card_name(priv, NULL); 590 590 if (ret < 0) 591 591 goto err; 592 592
+7 -7
sound/soc/generic/audio-graph-card2.c
··· 409 409 dai = simple_props_to_dai_codec(dai_props, idx); 410 410 } 411 411 412 - ret = graph_util_parse_dai(dev, ep, dlc, &is_single_links); 412 + ret = graph_util_parse_dai(priv, ep, dlc, &is_single_links); 413 413 if (ret < 0) 414 414 return ret; 415 415 ··· 417 417 if (ret < 0) 418 418 return ret; 419 419 420 - ret = simple_util_parse_tdm_width_map(dev, ep, dai); 420 + ret = simple_util_parse_tdm_width_map(priv, ep, dai); 421 421 if (ret < 0) 422 422 return ret; 423 423 ··· 443 443 case GRAPH_NORMAL: 444 444 /* run is_cpu only. see audio_graph2_link_normal() */ 445 445 if (is_cpu) 446 - simple_util_set_dailink_name(dev, dai_link, "%s%s-%s%s", 446 + simple_util_set_dailink_name(priv, dai_link, "%s%s-%s%s", 447 447 cpus->dai_name, cpu_multi, 448 448 codecs->dai_name, codec_multi); 449 449 break; 450 450 case GRAPH_DPCM: 451 451 if (is_cpu) 452 - simple_util_set_dailink_name(dev, dai_link, "fe.%pOFP.%s%s", 452 + simple_util_set_dailink_name(priv, dai_link, "fe.%pOFP.%s%s", 453 453 cpus->of_node, cpus->dai_name, cpu_multi); 454 454 else 455 - simple_util_set_dailink_name(dev, dai_link, "be.%pOFP.%s%s", 455 + simple_util_set_dailink_name(priv, dai_link, "be.%pOFP.%s%s", 456 456 codecs->of_node, codecs->dai_name, codec_multi); 457 457 break; 458 458 case GRAPH_C2C: 459 459 /* run is_cpu only. see audio_graph2_link_c2c() */ 460 460 if (is_cpu) 461 - simple_util_set_dailink_name(dev, dai_link, "c2c.%s%s-%s%s", 461 + simple_util_set_dailink_name(priv, dai_link, "c2c.%s%s-%s%s", 462 462 cpus->dai_name, cpu_multi, 463 463 codecs->dai_name, codec_multi); 464 464 break; ··· 1332 1332 if (ret < 0) 1333 1333 goto err; 1334 1334 1335 - ret = simple_util_parse_card_name(card, NULL); 1335 + ret = simple_util_parse_card_name(priv, NULL); 1336 1336 if (ret < 0) 1337 1337 goto err; 1338 1338
+99 -71
sound/soc/generic/simple-card-utils.c
··· 15 15 #include <sound/pcm_params.h> 16 16 #include <sound/simple_card_utils.h> 17 17 18 + #define simple_ret(priv, ret) _simple_ret(priv, __func__, ret) 19 + static inline int _simple_ret(struct simple_util_priv *priv, 20 + const char *func, int ret) 21 + { 22 + return snd_soc_ret(simple_priv_to_dev(priv), ret, "at %s()\n", func); 23 + } 24 + 18 25 int simple_util_get_sample_fmt(struct simple_util_data *data) 19 26 { 20 27 int i; ··· 140 133 } 141 134 EXPORT_SYMBOL_GPL(simple_util_parse_daifmt); 142 135 143 - int simple_util_parse_tdm_width_map(struct device *dev, struct device_node *np, 136 + int simple_util_parse_tdm_width_map(struct simple_util_priv *priv, struct device_node *np, 144 137 struct simple_util_dai *dai) 145 138 { 139 + struct device *dev = simple_priv_to_dev(priv); 146 140 int n, i, ret; 147 141 u32 *p; 142 + 143 + /* 144 + * NOTE 145 + * 146 + * Clang doesn't allow to use "goto end" before calling __free(), 147 + * because it bypasses the initialization. Use simple_ret() directly. 148 + */ 148 149 149 150 n = of_property_count_elems_of_size(np, "dai-tdm-slot-width-map", sizeof(u32)); 150 151 if (n <= 0) 151 152 return 0; 153 + 152 154 if (n % 3) { 153 155 dev_err(dev, "Invalid number of cells for dai-tdm-slot-width-map\n"); 154 - return -EINVAL; 156 + return simple_ret(priv, -EINVAL); /* see NOTE */ 155 157 } 156 158 159 + ret = -ENOMEM; 157 160 dai->tdm_width_map = devm_kcalloc(dev, n, sizeof(*dai->tdm_width_map), GFP_KERNEL); 158 161 if (!dai->tdm_width_map) 159 - return -ENOMEM; 162 + return simple_ret(priv, ret); /* see NOTE */ 160 163 161 - u32 *array_values __free(kfree) = kcalloc(n, sizeof(*array_values), 162 - GFP_KERNEL); 164 + u32 *array_values __free(kfree) = kcalloc(n, sizeof(*array_values), GFP_KERNEL); 163 165 if (!array_values) 164 - return -ENOMEM; 166 + goto end; 165 167 166 168 ret = of_property_read_u32_array(np, "dai-tdm-slot-width-map", array_values, n); 167 169 if (ret < 0) { 168 170 dev_err(dev, "Could not read dai-tdm-slot-width-map: %d\n", ret); 169 - return ret; 171 + goto end; 170 172 } 171 173 172 174 p = array_values; ··· 186 170 } 187 171 188 172 dai->n_tdm_widths = i; 189 - 190 - return 0; 173 + ret = 0; 174 + end: 175 + return simple_ret(priv, ret); 191 176 } 192 177 EXPORT_SYMBOL_GPL(simple_util_parse_tdm_width_map); 193 178 194 - int simple_util_set_dailink_name(struct device *dev, 179 + int simple_util_set_dailink_name(struct simple_util_priv *priv, 195 180 struct snd_soc_dai_link *dai_link, 196 181 const char *fmt, ...) 197 182 { 183 + struct device *dev = simple_priv_to_dev(priv); 198 184 va_list ap; 199 185 char *name = NULL; 200 186 int ret = -ENOMEM; ··· 212 194 dai_link->stream_name = name; 213 195 } 214 196 215 - return ret; 197 + return simple_ret(priv, ret); 216 198 } 217 199 EXPORT_SYMBOL_GPL(simple_util_set_dailink_name); 218 200 219 - int simple_util_parse_card_name(struct snd_soc_card *card, 201 + int simple_util_parse_card_name(struct simple_util_priv *priv, 220 202 char *prefix) 221 203 { 204 + struct snd_soc_card *card = simple_priv_to_card(priv); 222 205 int ret; 223 206 224 207 if (!prefix) ··· 233 214 snprintf(prop, sizeof(prop), "%sname", prefix); 234 215 ret = snd_soc_of_parse_card_name(card, prop); 235 216 if (ret < 0) 236 - return ret; 217 + goto end; 237 218 } 238 219 239 220 if (!card->name && card->dai_link) 240 221 card->name = card->dai_link->name; 241 - 242 - return 0; 222 + end: 223 + return simple_ret(priv, ret); 243 224 } 244 225 EXPORT_SYMBOL_GPL(simple_util_parse_card_name); 245 226 ··· 367 348 break; 368 349 simple_clk_disable(dai); 369 350 } 370 - return ret; 351 + 352 + return simple_ret(priv, ret); 371 353 } 372 354 EXPORT_SYMBOL_GPL(simple_util_startup); 373 355 ··· 399 379 } 400 380 EXPORT_SYMBOL_GPL(simple_util_shutdown); 401 381 402 - static int simple_set_clk_rate(struct device *dev, 403 - struct simple_util_dai *simple_dai, 404 - unsigned long rate) 382 + static int simple_set_clk_rate(struct simple_util_priv *priv, 383 + struct simple_util_dai *simple_dai, 384 + unsigned long rate) 405 385 { 386 + struct device *dev = simple_priv_to_dev(priv); 387 + int ret = -EINVAL; 388 + 406 389 if (!simple_dai) 407 390 return 0; 408 391 409 392 if (simple_dai->clk_fixed && rate != simple_dai->sysclk) { 410 393 dev_err(dev, "dai %s invalid clock rate %lu\n", simple_dai->name, rate); 411 - return -EINVAL; 394 + goto end; 412 395 } 413 396 414 397 if (!simple_dai->clk) ··· 420 397 if (clk_get_rate(simple_dai->clk) == rate) 421 398 return 0; 422 399 423 - return clk_set_rate(simple_dai->clk, rate); 400 + ret = clk_set_rate(simple_dai->clk, rate); 401 + end: 402 + return simple_ret(priv, ret); 424 403 } 425 404 426 - static int simple_set_tdm(struct snd_soc_dai *dai, 427 - struct simple_util_dai *simple_dai, 428 - struct snd_pcm_hw_params *params) 405 + static int simple_set_tdm(struct simple_util_priv *priv, 406 + struct snd_soc_dai *dai, 407 + struct simple_util_dai *simple_dai, 408 + struct snd_pcm_hw_params *params) 429 409 { 430 410 int sample_bits = params_width(params); 431 411 int slot_width, slot_count; ··· 456 430 simple_dai->rx_slot_mask, 457 431 slot_count, 458 432 slot_width); 459 - if (ret && ret != -ENOTSUPP) { 460 - dev_err(dai->dev, "simple-card: set_tdm_slot error: %d\n", ret); 461 - return ret; 462 - } 463 433 464 - return 0; 434 + return simple_ret(priv, ret); 465 435 } 466 436 467 437 int simple_util_hw_params(struct snd_pcm_substream *substream, ··· 479 457 mclk = params_rate(params) * mclk_fs; 480 458 481 459 for_each_prop_dai_codec(props, i, pdai) { 482 - ret = simple_set_clk_rate(rtd->dev, pdai, mclk); 460 + ret = simple_set_clk_rate(priv, pdai, mclk); 483 461 if (ret < 0) 484 - return ret; 462 + goto end; 485 463 } 486 464 487 465 for_each_prop_dai_cpu(props, i, pdai) { 488 - ret = simple_set_clk_rate(rtd->dev, pdai, mclk); 466 + ret = simple_set_clk_rate(priv, pdai, mclk); 489 467 if (ret < 0) 490 - return ret; 468 + goto end; 491 469 } 492 470 493 471 /* Ensure sysclk is set on all components in case any ··· 498 476 ret = snd_soc_component_set_sysclk(component, 0, 0, 499 477 mclk, SND_SOC_CLOCK_IN); 500 478 if (ret && ret != -ENOTSUPP) 501 - return ret; 479 + goto end; 502 480 } 503 481 504 482 for_each_rtd_codec_dais(rtd, i, sdai) { 505 483 pdai = simple_props_to_dai_codec(props, i); 506 484 ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); 507 485 if (ret && ret != -ENOTSUPP) 508 - return ret; 486 + goto end; 509 487 } 510 488 511 489 for_each_rtd_cpu_dais(rtd, i, sdai) { 512 490 pdai = simple_props_to_dai_cpu(props, i); 513 491 ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); 514 492 if (ret && ret != -ENOTSUPP) 515 - return ret; 493 + goto end; 516 494 } 517 495 } 518 496 519 497 for_each_prop_dai_codec(props, i, pdai) { 520 498 sdai = snd_soc_rtd_to_codec(rtd, i); 521 - ret = simple_set_tdm(sdai, pdai, params); 499 + ret = simple_set_tdm(priv, sdai, pdai, params); 522 500 if (ret < 0) 523 - return ret; 501 + goto end; 524 502 } 525 503 526 504 for_each_prop_dai_cpu(props, i, pdai) { 527 505 sdai = snd_soc_rtd_to_cpu(rtd, i); 528 - ret = simple_set_tdm(sdai, pdai, params); 506 + ret = simple_set_tdm(priv, sdai, pdai, params); 529 507 if (ret < 0) 530 - return ret; 508 + goto end; 531 509 } 532 - 533 - return 0; 510 + ret = 0; 511 + end: 512 + return simple_ret(priv, ret); 534 513 } 535 514 EXPORT_SYMBOL_GPL(simple_util_hw_params); 536 515 ··· 559 536 } 560 537 EXPORT_SYMBOL_GPL(simple_util_be_hw_params_fixup); 561 538 562 - static int simple_init_dai(struct snd_soc_dai *dai, struct simple_util_dai *simple_dai) 539 + static int simple_init_dai(struct simple_util_priv *priv, 540 + struct snd_soc_dai *dai, struct simple_util_dai *simple_dai) 563 541 { 564 542 int ret; 565 543 ··· 572 548 simple_dai->clk_direction); 573 549 if (ret && ret != -ENOTSUPP) { 574 550 dev_err(dai->dev, "simple-card: set_sysclk error\n"); 575 - return ret; 551 + goto end; 576 552 } 577 553 } 578 554 ··· 584 560 simple_dai->slot_width); 585 561 if (ret && ret != -ENOTSUPP) { 586 562 dev_err(dai->dev, "simple-card: set_tdm_slot error\n"); 587 - return ret; 563 + goto end; 588 564 } 589 565 } 590 - 591 - return 0; 566 + ret = 0; 567 + end: 568 + return simple_ret(priv, ret); 592 569 } 593 570 594 571 static inline int simple_component_is_codec(struct snd_soc_component *component) ··· 597 572 return component->driver->endianness; 598 573 } 599 574 600 - static int simple_init_for_codec2codec(struct snd_soc_pcm_runtime *rtd, 575 + static int simple_init_for_codec2codec(struct simple_util_priv *priv, 576 + struct snd_soc_pcm_runtime *rtd, 601 577 struct simple_dai_props *dai_props) 602 578 { 603 579 struct snd_soc_dai_link *dai_link = rtd->dai_link; ··· 630 604 631 605 if (ret < 0) { 632 606 dev_err(rtd->dev, "simple-card: no valid dai_link params\n"); 633 - return ret; 607 + goto end; 634 608 } 635 609 610 + ret = -ENOMEM; 636 611 c2c_params = devm_kzalloc(rtd->dev, sizeof(*c2c_params), GFP_KERNEL); 637 612 if (!c2c_params) 638 - return -ENOMEM; 613 + goto end; 639 614 640 615 c2c_params->formats = hw.formats; 641 616 c2c_params->rates = hw.rates; ··· 648 621 dai_link->c2c_params = c2c_params; 649 622 dai_link->num_c2c_params = 1; 650 623 651 - return 0; 624 + ret = 0; 625 + end: 626 + return simple_ret(priv, ret); 652 627 } 653 628 654 629 int simple_util_dai_init(struct snd_soc_pcm_runtime *rtd) ··· 661 632 int i, ret; 662 633 663 634 for_each_prop_dai_codec(props, i, dai) { 664 - ret = simple_init_dai(snd_soc_rtd_to_codec(rtd, i), dai); 635 + ret = simple_init_dai(priv, snd_soc_rtd_to_codec(rtd, i), dai); 665 636 if (ret < 0) 666 - return ret; 637 + goto end; 667 638 } 668 639 for_each_prop_dai_cpu(props, i, dai) { 669 - ret = simple_init_dai(snd_soc_rtd_to_cpu(rtd, i), dai); 640 + ret = simple_init_dai(priv, snd_soc_rtd_to_cpu(rtd, i), dai); 670 641 if (ret < 0) 671 - return ret; 642 + goto end; 672 643 } 673 644 674 - ret = simple_init_for_codec2codec(rtd, props); 675 - if (ret < 0) 676 - return ret; 677 - 678 - return 0; 645 + ret = simple_init_for_codec2codec(priv, rtd, props); 646 + end: 647 + return simple_ret(priv, ret); 679 648 } 680 649 EXPORT_SYMBOL_GPL(simple_util_dai_init); 681 650 ··· 858 831 priv->aux_jacks = devm_kcalloc(card->dev, num, 859 832 sizeof(struct snd_soc_jack), GFP_KERNEL); 860 833 if (!priv->aux_jacks) 861 - return -ENOMEM; 834 + return simple_ret(priv, -ENOMEM); 862 835 863 836 for_each_card_auxs(card, component) { 864 837 char id[128]; ··· 1019 992 1020 993 ret = simple_util_init_hp(card, &priv->hp_jack, NULL); 1021 994 if (ret < 0) 1022 - return ret; 995 + goto end; 1023 996 1024 997 ret = simple_util_init_mic(card, &priv->mic_jack, NULL); 1025 - if (ret < 0) 1026 - return ret; 1027 - 1028 - return 0; 998 + end: 999 + return simple_ret(priv, ret); 1029 1000 } 1030 1001 EXPORT_SYMBOL_GPL(graph_util_card_probe); 1031 1002 ··· 1099 1074 return id; 1100 1075 } 1101 1076 1102 - int graph_util_parse_dai(struct device *dev, struct device_node *ep, 1077 + int graph_util_parse_dai(struct simple_util_priv *priv, struct device_node *ep, 1103 1078 struct snd_soc_dai_link_component *dlc, int *is_single_link) 1104 1079 { 1080 + struct device *dev = simple_priv_to_dev(priv); 1105 1081 struct of_phandle_args args = {}; 1106 1082 struct snd_soc_dai *dai; 1107 1083 int ret; ··· 1118 1092 args.np = ep; 1119 1093 dai = snd_soc_get_dai_via_args(&args); 1120 1094 if (dai) { 1095 + ret = -ENOMEM; 1121 1096 dlc->of_node = node; 1122 1097 dlc->dai_name = snd_soc_dai_name_get(dai); 1123 1098 dlc->dai_args = snd_soc_copy_dai_args(dev, &args); 1124 1099 if (!dlc->dai_args) 1125 - return -ENOMEM; 1100 + goto end; 1126 1101 1127 1102 goto parse_dai_end; 1128 1103 } ··· 1154 1127 */ 1155 1128 ret = snd_soc_get_dlc(&args, dlc); 1156 1129 if (ret < 0) 1157 - return ret; 1130 + goto end; 1158 1131 1159 1132 parse_dai_end: 1160 1133 if (is_single_link) 1161 1134 *is_single_link = of_graph_get_endpoint_count(node) == 1; 1162 - 1163 - return 0; 1135 + ret = 0; 1136 + end: 1137 + return simple_ret(priv, ret); 1164 1138 } 1165 1139 EXPORT_SYMBOL_GPL(graph_util_parse_dai); 1166 1140
+2 -2
sound/soc/generic/simple-card.c
··· 223 223 dai_link->init = simple_util_dai_init; 224 224 dai_link->ops = &simple_ops; 225 225 226 - ret = simple_util_set_dailink_name(dev, dai_link, name); 226 + ret = simple_util_set_dailink_name(priv, dai_link, name); 227 227 end: 228 228 return simple_ret(priv, ret); 229 229 } ··· 544 544 if (ret < 0) 545 545 goto end; 546 546 547 - ret = simple_util_parse_card_name(card, PREFIX); 547 + ret = simple_util_parse_card_name(priv, PREFIX); 548 548 if (ret < 0) 549 549 goto end; 550 550