Skip to content

Commit 7e1723f

Browse files
superna9999jbrun3t
authored andcommitted
clk: meson: migrate meson-aoclk out of hw_onecell_data to drop NR_CLKS
The way hw_onecell_data is declared: struct clk_hw_onecell_data { unsigned int num; struct clk_hw *hws[]; }; makes it impossible to have the clk_hw table declared outside while using ARRAY_SIZE() to determine ".num" due to ".hws" being a flexible array member. Completely move out of hw_onecell_data and add a custom devm_of_clk_add_hw_provider() "get" callback to retrieve the clk_hw from the meson_aoclk_data struct to finally get rid on the NR_CLKS define. [jbrunet: Fixed whitespace checkpatch warning] Signed-off-by: Neil Armstrong <[email protected]> Link: https://lore.kernel.org/r/20230607-topic-amlogic-upstream-clkid-public-migration-v2-3-38172d17c27a@linaro.org Signed-off-by: Jerome Brunet <[email protected]>
1 parent 141fbc2 commit 7e1723f

File tree

9 files changed

+68
-73
lines changed

9 files changed

+68
-73
lines changed

drivers/clk/meson/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ config COMMON_CLK_MESON_CLKC_UTILS
3636
config COMMON_CLK_MESON_AO_CLKC
3737
tristate
3838
select COMMON_CLK_MESON_REGMAP
39+
select COMMON_CLK_MESON_CLKC_UTILS
3940
select RESET_CONTROLLER
4041

4142
config COMMON_CLK_MESON_EE_CLKC

drivers/clk/meson/axg-aoclk.c

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -288,27 +288,24 @@ static struct clk_regmap *axg_aoclk_regmap[] = {
288288
&axg_aoclk_saradc_gate,
289289
};
290290

291-
static const struct clk_hw_onecell_data axg_aoclk_onecell_data = {
292-
.hws = {
293-
[CLKID_AO_REMOTE] = &axg_aoclk_remote.hw,
294-
[CLKID_AO_I2C_MASTER] = &axg_aoclk_i2c_master.hw,
295-
[CLKID_AO_I2C_SLAVE] = &axg_aoclk_i2c_slave.hw,
296-
[CLKID_AO_UART1] = &axg_aoclk_uart1.hw,
297-
[CLKID_AO_UART2] = &axg_aoclk_uart2.hw,
298-
[CLKID_AO_IR_BLASTER] = &axg_aoclk_ir_blaster.hw,
299-
[CLKID_AO_SAR_ADC] = &axg_aoclk_saradc.hw,
300-
[CLKID_AO_CLK81] = &axg_aoclk_clk81.hw,
301-
[CLKID_AO_SAR_ADC_SEL] = &axg_aoclk_saradc_mux.hw,
302-
[CLKID_AO_SAR_ADC_DIV] = &axg_aoclk_saradc_div.hw,
303-
[CLKID_AO_SAR_ADC_CLK] = &axg_aoclk_saradc_gate.hw,
304-
[CLKID_AO_CTS_OSCIN] = &axg_aoclk_cts_oscin.hw,
305-
[CLKID_AO_32K_PRE] = &axg_aoclk_32k_pre.hw,
306-
[CLKID_AO_32K_DIV] = &axg_aoclk_32k_div.hw,
307-
[CLKID_AO_32K_SEL] = &axg_aoclk_32k_sel.hw,
308-
[CLKID_AO_32K] = &axg_aoclk_32k.hw,
309-
[CLKID_AO_CTS_RTC_OSCIN] = &axg_aoclk_cts_rtc_oscin.hw,
310-
},
311-
.num = NR_CLKS,
291+
static struct clk_hw *axg_aoclk_hw_clks[] = {
292+
[CLKID_AO_REMOTE] = &axg_aoclk_remote.hw,
293+
[CLKID_AO_I2C_MASTER] = &axg_aoclk_i2c_master.hw,
294+
[CLKID_AO_I2C_SLAVE] = &axg_aoclk_i2c_slave.hw,
295+
[CLKID_AO_UART1] = &axg_aoclk_uart1.hw,
296+
[CLKID_AO_UART2] = &axg_aoclk_uart2.hw,
297+
[CLKID_AO_IR_BLASTER] = &axg_aoclk_ir_blaster.hw,
298+
[CLKID_AO_SAR_ADC] = &axg_aoclk_saradc.hw,
299+
[CLKID_AO_CLK81] = &axg_aoclk_clk81.hw,
300+
[CLKID_AO_SAR_ADC_SEL] = &axg_aoclk_saradc_mux.hw,
301+
[CLKID_AO_SAR_ADC_DIV] = &axg_aoclk_saradc_div.hw,
302+
[CLKID_AO_SAR_ADC_CLK] = &axg_aoclk_saradc_gate.hw,
303+
[CLKID_AO_CTS_OSCIN] = &axg_aoclk_cts_oscin.hw,
304+
[CLKID_AO_32K_PRE] = &axg_aoclk_32k_pre.hw,
305+
[CLKID_AO_32K_DIV] = &axg_aoclk_32k_div.hw,
306+
[CLKID_AO_32K_SEL] = &axg_aoclk_32k_sel.hw,
307+
[CLKID_AO_32K] = &axg_aoclk_32k.hw,
308+
[CLKID_AO_CTS_RTC_OSCIN] = &axg_aoclk_cts_rtc_oscin.hw,
312309
};
313310

314311
static const struct meson_aoclk_data axg_aoclkc_data = {
@@ -317,7 +314,10 @@ static const struct meson_aoclk_data axg_aoclkc_data = {
317314
.reset = axg_aoclk_reset,
318315
.num_clks = ARRAY_SIZE(axg_aoclk_regmap),
319316
.clks = axg_aoclk_regmap,
320-
.hw_data = &axg_aoclk_onecell_data,
317+
.hw_clks = {
318+
.hws = axg_aoclk_hw_clks,
319+
.num = ARRAY_SIZE(axg_aoclk_hw_clks),
320+
},
321321
};
322322

323323
static const struct of_device_id axg_aoclkc_match_table[] = {

drivers/clk/meson/axg-aoclk.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
#ifndef __AXG_AOCLKC_H
1111
#define __AXG_AOCLKC_H
1212

13-
#define NR_CLKS 17
14-
1513
#include <dt-bindings/clock/axg-aoclkc.h>
1614
#include <dt-bindings/reset/axg-aoclkc.h>
1715

drivers/clk/meson/g12a-aoclk.c

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -411,39 +411,36 @@ static struct clk_regmap *g12a_aoclk_regmap[] = {
411411
&g12a_aoclk_saradc_gate,
412412
};
413413

414-
static const struct clk_hw_onecell_data g12a_aoclk_onecell_data = {
415-
.hws = {
416-
[CLKID_AO_AHB] = &g12a_aoclk_ahb.hw,
417-
[CLKID_AO_IR_IN] = &g12a_aoclk_ir_in.hw,
418-
[CLKID_AO_I2C_M0] = &g12a_aoclk_i2c_m0.hw,
419-
[CLKID_AO_I2C_S0] = &g12a_aoclk_i2c_s0.hw,
420-
[CLKID_AO_UART] = &g12a_aoclk_uart.hw,
421-
[CLKID_AO_PROD_I2C] = &g12a_aoclk_prod_i2c.hw,
422-
[CLKID_AO_UART2] = &g12a_aoclk_uart2.hw,
423-
[CLKID_AO_IR_OUT] = &g12a_aoclk_ir_out.hw,
424-
[CLKID_AO_SAR_ADC] = &g12a_aoclk_saradc.hw,
425-
[CLKID_AO_MAILBOX] = &g12a_aoclk_mailbox.hw,
426-
[CLKID_AO_M3] = &g12a_aoclk_m3.hw,
427-
[CLKID_AO_AHB_SRAM] = &g12a_aoclk_ahb_sram.hw,
428-
[CLKID_AO_RTI] = &g12a_aoclk_rti.hw,
429-
[CLKID_AO_M4_FCLK] = &g12a_aoclk_m4_fclk.hw,
430-
[CLKID_AO_M4_HCLK] = &g12a_aoclk_m4_hclk.hw,
431-
[CLKID_AO_CLK81] = &g12a_aoclk_clk81.hw,
432-
[CLKID_AO_SAR_ADC_SEL] = &g12a_aoclk_saradc_mux.hw,
433-
[CLKID_AO_SAR_ADC_DIV] = &g12a_aoclk_saradc_div.hw,
434-
[CLKID_AO_SAR_ADC_CLK] = &g12a_aoclk_saradc_gate.hw,
435-
[CLKID_AO_CTS_OSCIN] = &g12a_aoclk_cts_oscin.hw,
436-
[CLKID_AO_32K_PRE] = &g12a_aoclk_32k_by_oscin_pre.hw,
437-
[CLKID_AO_32K_DIV] = &g12a_aoclk_32k_by_oscin_div.hw,
438-
[CLKID_AO_32K_SEL] = &g12a_aoclk_32k_by_oscin_sel.hw,
439-
[CLKID_AO_32K] = &g12a_aoclk_32k_by_oscin.hw,
440-
[CLKID_AO_CEC_PRE] = &g12a_aoclk_cec_pre.hw,
441-
[CLKID_AO_CEC_DIV] = &g12a_aoclk_cec_div.hw,
442-
[CLKID_AO_CEC_SEL] = &g12a_aoclk_cec_sel.hw,
443-
[CLKID_AO_CEC] = &g12a_aoclk_cec.hw,
444-
[CLKID_AO_CTS_RTC_OSCIN] = &g12a_aoclk_cts_rtc_oscin.hw,
445-
},
446-
.num = NR_CLKS,
414+
static struct clk_hw *g12a_aoclk_hw_clks[] = {
415+
[CLKID_AO_AHB] = &g12a_aoclk_ahb.hw,
416+
[CLKID_AO_IR_IN] = &g12a_aoclk_ir_in.hw,
417+
[CLKID_AO_I2C_M0] = &g12a_aoclk_i2c_m0.hw,
418+
[CLKID_AO_I2C_S0] = &g12a_aoclk_i2c_s0.hw,
419+
[CLKID_AO_UART] = &g12a_aoclk_uart.hw,
420+
[CLKID_AO_PROD_I2C] = &g12a_aoclk_prod_i2c.hw,
421+
[CLKID_AO_UART2] = &g12a_aoclk_uart2.hw,
422+
[CLKID_AO_IR_OUT] = &g12a_aoclk_ir_out.hw,
423+
[CLKID_AO_SAR_ADC] = &g12a_aoclk_saradc.hw,
424+
[CLKID_AO_MAILBOX] = &g12a_aoclk_mailbox.hw,
425+
[CLKID_AO_M3] = &g12a_aoclk_m3.hw,
426+
[CLKID_AO_AHB_SRAM] = &g12a_aoclk_ahb_sram.hw,
427+
[CLKID_AO_RTI] = &g12a_aoclk_rti.hw,
428+
[CLKID_AO_M4_FCLK] = &g12a_aoclk_m4_fclk.hw,
429+
[CLKID_AO_M4_HCLK] = &g12a_aoclk_m4_hclk.hw,
430+
[CLKID_AO_CLK81] = &g12a_aoclk_clk81.hw,
431+
[CLKID_AO_SAR_ADC_SEL] = &g12a_aoclk_saradc_mux.hw,
432+
[CLKID_AO_SAR_ADC_DIV] = &g12a_aoclk_saradc_div.hw,
433+
[CLKID_AO_SAR_ADC_CLK] = &g12a_aoclk_saradc_gate.hw,
434+
[CLKID_AO_CTS_OSCIN] = &g12a_aoclk_cts_oscin.hw,
435+
[CLKID_AO_32K_PRE] = &g12a_aoclk_32k_by_oscin_pre.hw,
436+
[CLKID_AO_32K_DIV] = &g12a_aoclk_32k_by_oscin_div.hw,
437+
[CLKID_AO_32K_SEL] = &g12a_aoclk_32k_by_oscin_sel.hw,
438+
[CLKID_AO_32K] = &g12a_aoclk_32k_by_oscin.hw,
439+
[CLKID_AO_CEC_PRE] = &g12a_aoclk_cec_pre.hw,
440+
[CLKID_AO_CEC_DIV] = &g12a_aoclk_cec_div.hw,
441+
[CLKID_AO_CEC_SEL] = &g12a_aoclk_cec_sel.hw,
442+
[CLKID_AO_CEC] = &g12a_aoclk_cec.hw,
443+
[CLKID_AO_CTS_RTC_OSCIN] = &g12a_aoclk_cts_rtc_oscin.hw,
447444
};
448445

449446
static const struct meson_aoclk_data g12a_aoclkc_data = {
@@ -452,7 +449,10 @@ static const struct meson_aoclk_data g12a_aoclkc_data = {
452449
.reset = g12a_aoclk_reset,
453450
.num_clks = ARRAY_SIZE(g12a_aoclk_regmap),
454451
.clks = g12a_aoclk_regmap,
455-
.hw_data = &g12a_aoclk_onecell_data,
452+
.hw_clks = {
453+
.hws = g12a_aoclk_hw_clks,
454+
.num = ARRAY_SIZE(g12a_aoclk_hw_clks),
455+
},
456456
};
457457

458458
static const struct of_device_id g12a_aoclkc_match_table[] = {

drivers/clk/meson/g12a-aoclk.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
#define CLKID_AO_CEC_DIV 25
2525
#define CLKID_AO_CEC_SEL 26
2626

27-
#define NR_CLKS 29
28-
2927
#include <dt-bindings/clock/g12a-aoclkc.h>
3028
#include <dt-bindings/reset/g12a-aoclkc.h>
3129

drivers/clk/meson/gxbb-aoclk.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ static struct clk_regmap *gxbb_aoclk[] = {
252252
&ao_cts_cec,
253253
};
254254

255-
static const struct clk_hw_onecell_data gxbb_aoclk_onecell_data = {
256-
.hws = {
255+
static struct clk_hw *gxbb_aoclk_hw_clks[] = {
257256
[CLKID_AO_REMOTE] = &remote_ao.hw,
258257
[CLKID_AO_I2C_MASTER] = &i2c_master_ao.hw,
259258
[CLKID_AO_I2C_SLAVE] = &i2c_slave_ao.hw,
@@ -268,8 +267,6 @@ static const struct clk_hw_onecell_data gxbb_aoclk_onecell_data = {
268267
[CLKID_AO_32K] = &ao_32k.hw,
269268
[CLKID_AO_CTS_RTC_OSCIN] = &ao_cts_rtc_oscin.hw,
270269
[CLKID_AO_CLK81] = &ao_clk81.hw,
271-
},
272-
.num = NR_CLKS,
273270
};
274271

275272
static const struct meson_aoclk_data gxbb_aoclkc_data = {
@@ -278,7 +275,10 @@ static const struct meson_aoclk_data gxbb_aoclkc_data = {
278275
.reset = gxbb_aoclk_reset,
279276
.num_clks = ARRAY_SIZE(gxbb_aoclk),
280277
.clks = gxbb_aoclk,
281-
.hw_data = &gxbb_aoclk_onecell_data,
278+
.hw_clks = {
279+
.hws = gxbb_aoclk_hw_clks,
280+
.num = ARRAY_SIZE(gxbb_aoclk_hw_clks),
281+
},
282282
};
283283

284284
static const struct of_device_id gxbb_aoclkc_match_table[] = {

drivers/clk/meson/gxbb-aoclk.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
#ifndef __GXBB_AOCLKC_H
88
#define __GXBB_AOCLKC_H
99

10-
#define NR_CLKS 14
11-
1210
#include <dt-bindings/clock/gxbb-aoclkc.h>
1311
#include <dt-bindings/reset/gxbb-aoclkc.h>
1412

drivers/clk/meson/meson-aoclk.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,18 @@ int meson_aoclkc_probe(struct platform_device *pdev)
7575
data->clks[clkid]->map = regmap;
7676

7777
/* Register all clks */
78-
for (clkid = 0; clkid < data->hw_data->num; clkid++) {
79-
if (!data->hw_data->hws[clkid])
78+
for (clkid = 0; clkid < data->hw_clks.num; clkid++) {
79+
if (!data->hw_clks.hws[clkid])
8080
continue;
8181

82-
ret = devm_clk_hw_register(dev, data->hw_data->hws[clkid]);
82+
ret = devm_clk_hw_register(dev, data->hw_clks.hws[clkid]);
8383
if (ret) {
8484
dev_err(dev, "Clock registration failed\n");
8585
return ret;
8686
}
8787
}
8888

89-
return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get,
90-
(void *) data->hw_data);
89+
return devm_of_clk_add_hw_provider(dev, meson_clk_hw_get, (void *)&data->hw_clks);
9190
}
9291
EXPORT_SYMBOL_GPL(meson_aoclkc_probe);
9392
MODULE_LICENSE("GPL v2");

drivers/clk/meson/meson-aoclk.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
#include <linux/reset-controller.h>
1818

1919
#include "clk-regmap.h"
20+
#include "meson-clkc-utils.h"
2021

2122
struct meson_aoclk_data {
2223
const unsigned int reset_reg;
2324
const int num_reset;
2425
const unsigned int *reset;
2526
const int num_clks;
2627
struct clk_regmap **clks;
27-
const struct clk_hw_onecell_data *hw_data;
28+
struct meson_clk_hw_data hw_clks;
2829
};
2930

3031
struct meson_aoclk_reset_controller {

0 commit comments

Comments
 (0)