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: rsnd: use clkin/out_size

Current adg.c is assuming number of clkin/clkout are fixed, but it is
not correct on Gen4. This patch uses clkin/out_size to handling it.

This is prepare for R-Car Gen4 support.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87v8km5em7.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Kuninori Morimoto and committed by
Mark Brown
efaab615 da2f9e85

+23 -7
+23 -7
sound/soc/sh/rcar/adg.c
··· 32 32 struct clk_onecell_data onecell; 33 33 struct rsnd_mod mod; 34 34 int clkin_rate[CLKINMAX]; 35 + int clkin_size; 36 + int clkout_size; 35 37 u32 ckr; 36 38 u32 rbga; 37 39 u32 rbgb; ··· 44 42 45 43 #define for_each_rsnd_clkin(pos, adg, i) \ 46 44 for (i = 0; \ 47 - (i < CLKINMAX) && \ 45 + (i < adg->clkin_size) && \ 48 46 ((pos) = adg->clkin[i]); \ 49 47 i++) 50 48 #define for_each_rsnd_clkout(pos, adg, i) \ 51 49 for (i = 0; \ 52 - (i < CLKOUTMAX) && \ 50 + (i < adg->clkout_size) && \ 53 51 ((pos) = adg->clkout[i]); \ 54 52 i++) 55 53 #define rsnd_priv_to_adg(priv) ((struct rsnd_adg *)(priv)->adg) 56 54 57 - static const char * const clkin_name[] = { 55 + static const char * const clkin_name_gen2[] = { 58 56 [CLKA] = "clk_a", 59 57 [CLKB] = "clk_b", 60 58 [CLKC] = "clk_c", 61 59 [CLKI] = "clk_i", 62 60 }; 63 61 64 - static const char * const clkout_name[] = { 62 + static const char * const clkout_name_gen2[] = { 65 63 [CLKOUT] = "audio_clkout", 66 64 [CLKOUT1] = "audio_clkout1", 67 65 [CLKOUT2] = "audio_clkout2", ··· 426 424 struct rsnd_adg *adg = priv->adg; 427 425 struct device *dev = rsnd_priv_to_dev(priv); 428 426 struct clk *clk; 427 + const char * const *clkin_name; 428 + int clkin_size; 429 429 int i; 430 430 431 - for (i = 0; i < CLKINMAX; i++) { 431 + clkin_name = clkin_name_gen2; 432 + clkin_size = ARRAY_SIZE(clkin_name_gen2); 433 + 434 + for (i = 0; i < clkin_size; i++) { 432 435 clk = devm_clk_get(dev, clkin_name[i]); 433 436 434 437 if (IS_ERR_OR_NULL(clk)) ··· 443 436 444 437 adg->clkin[i] = clk; 445 438 } 439 + 440 + adg->clkin_size = clkin_size; 446 441 447 442 return 0; 448 443 ··· 479 470 u32 req_rate[REQ_SIZE] = {}; 480 471 uint32_t count = 0; 481 472 unsigned long req_48kHz_rate, req_441kHz_rate; 473 + int clkout_size; 482 474 int i, req_size; 483 475 const char *parent_clk_name = NULL; 476 + const char * const *clkout_name; 484 477 int brg_table[] = { 485 478 [CLKA] = 0x0, 486 479 [CLKB] = 0x1, ··· 566 555 } 567 556 } 568 557 558 + clkout_name = clkout_name_gen2; 559 + clkout_size = ARRAY_SIZE(clkout_name_gen2); 560 + 569 561 /* 570 562 * ADG supports BRRA/BRRB output only. 571 563 * this means all clkout0/1/2/3 will be * same rate ··· 585 571 goto err; 586 572 587 573 adg->clkout[CLKOUT] = clk; 574 + adg->clkout_size = 1; 588 575 of_clk_add_provider(np, of_clk_src_simple_get, clk); 589 576 } 590 577 /* 591 578 * for clkout0/1/2/3 592 579 */ 593 580 else { 594 - for (i = 0; i < CLKOUTMAX; i++) { 581 + for (i = 0; i < clkout_size; i++) { 595 582 clk = clk_register_fixed_rate(dev, clkout_name[i], 596 583 parent_clk_name, 0, 597 584 req_rate[0]); ··· 602 587 adg->clkout[i] = clk; 603 588 } 604 589 adg->onecell.clks = adg->clkout; 605 - adg->onecell.clk_num = CLKOUTMAX; 590 + adg->onecell.clk_num = clkout_size; 591 + adg->clkout_size = clkout_size; 606 592 of_clk_add_provider(np, of_clk_src_onecell_get, 607 593 &adg->onecell); 608 594 }