Subsystem clock blocks only provide gates, and every one of them declares the very same struct mtk_clk_tree boilerplate. clk-mt8189.c already hides it behind a local GATE_CLK_TREE() macro.
Move that macro to clk-mtk.h as MTK_GATE_CLK_TREE() so that the other MediaTek clock drivers can use it too. The tree name and the array of external clock rates are now passed explicitly, as their names differ from one driver to another. No functional change. Signed-off-by: Julien Stephan <[email protected]> --- drivers/clk/mediatek/clk-mt8189.c | 23 +++++++---------------- drivers/clk/mediatek/clk-mtk.h | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/drivers/clk/mediatek/clk-mt8189.c b/drivers/clk/mediatek/clk-mt8189.c index 3724dffcc3a..8df09f4a129 100644 --- a/drivers/clk/mediatek/clk-mt8189.c +++ b/drivers/clk/mediatek/clk-mt8189.c @@ -1994,22 +1994,13 @@ static const struct udevice_id mt8189_vlpckgen[] = { { } }; -#define GATE_CLK_TREE(_name) \ -static const struct mtk_clk_tree _name##_tree = { \ - .ext_clk_rates = ext_clock_rates, \ - .num_ext_clks = ARRAY_SIZE(ext_clock_rates), \ - .gates = _name, \ - .num_gates = ARRAY_SIZE(_name), \ - .gates_offs = _name[0].id, \ -} - -GATE_CLK_TREE(perao_clks); -GATE_CLK_TREE(imp_clks); -GATE_CLK_TREE(mm_clks); -GATE_CLK_TREE(mminfra_config_clks); -GATE_CLK_TREE(ufs_config_ao_clks); -GATE_CLK_TREE(ufs_config_pdn_clks); -GATE_CLK_TREE(vlpcfg_ao_clks); +MTK_GATE_CLK_TREE(perao_clks_tree, perao_clks, ext_clock_rates); +MTK_GATE_CLK_TREE(imp_clks_tree, imp_clks, ext_clock_rates); +MTK_GATE_CLK_TREE(mm_clks_tree, mm_clks, ext_clock_rates); +MTK_GATE_CLK_TREE(mminfra_config_clks_tree, mminfra_config_clks, ext_clock_rates); +MTK_GATE_CLK_TREE(ufs_config_ao_clks_tree, ufs_config_ao_clks, ext_clock_rates); +MTK_GATE_CLK_TREE(ufs_config_pdn_clks_tree, ufs_config_pdn_clks, ext_clock_rates); +MTK_GATE_CLK_TREE(vlpcfg_ao_clks_tree, vlpcfg_ao_clks, ext_clock_rates); static const struct udevice_id of_match_mt8189_clk_gate[] = { { .compatible = "mediatek,mt8189-peri-ao", .data = (ulong)&perao_clks_tree }, diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h index 9244542a2a5..e3a7ff75734 100644 --- a/drivers/clk/mediatek/clk-mtk.h +++ b/drivers/clk/mediatek/clk-mtk.h @@ -8,6 +8,7 @@ #define __DRV_CLK_MTK_H #include <linux/bitops.h> +#include <linux/kernel.h> #define MHZ (1000 * 1000) @@ -274,6 +275,27 @@ struct mtk_clk_tree { enum mtk_clk_tree_type type; }; +/** + * MTK_GATE_CLK_TREE() - declare a clock tree made of gates only + * @_tree: name of the struct mtk_clk_tree to declare + * @_gates: struct mtk_gate array backing the tree + * @_ext_rates: array holding the rates of the external clocks + * + * Most subsystem clock blocks only provide gates, whose IDs are + * contiguous and start at the ID of the first entry of @_gates. + * + * @_tree is declared static, so this must be used from the file + * defining @_gates. + */ +#define MTK_GATE_CLK_TREE(_tree, _gates, _ext_rates) \ + static const struct mtk_clk_tree _tree = { \ + .ext_clk_rates = _ext_rates, \ + .num_ext_clks = ARRAY_SIZE(_ext_rates), \ + .gates = _gates, \ + .num_gates = ARRAY_SIZE(_gates), \ + .gates_offs = _gates[0].id, \ + } + struct mtk_clk_priv { void __iomem *base; const struct mtk_clk_tree *tree; -- 2.55.0
