]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: rockchip: add helper to register auxiliary GRFs
authorDaniele Briguglio <hello@superkali.me>
Sun, 19 Apr 2026 11:43:08 +0000 (13:43 +0200)
committerHeiko Stuebner <heiko@sntech.de>
Mon, 27 Apr 2026 11:32:10 +0000 (13:32 +0200)
Add rockchip_clk_add_grf() as a helper to register an auxiliary GRF
into the clock provider's aux_grf_table. This encapsulates the
struct rockchip_aux_grf allocation and hashtable insertion, so SoC
clock drivers do not need to open-code it.

Suggested-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Daniele Briguglio <hello@superkali.me>
Link: https://patch.msgid.link/20260419-rk3588-mclk-gate-grf-v4-3-513a42dd1dcc@superkali.me
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/clk/rockchip/clk.c
drivers/clk/rockchip/clk.h

index 911e6b610618f71827aa95860c1500b2897d5196..ee8c79b938d3c15bf9a4a96fca1d17abbcce2d1c 100644 (file)
@@ -429,6 +429,24 @@ void rockchip_clk_of_add_provider(struct device_node *np,
 }
 EXPORT_SYMBOL_GPL(rockchip_clk_of_add_provider);
 
+int rockchip_clk_add_grf(struct rockchip_clk_provider *ctx,
+                        struct regmap *grf,
+                        enum rockchip_grf_type type)
+{
+       struct rockchip_aux_grf *aux_grf;
+
+       aux_grf = kzalloc_obj(*aux_grf);
+       if (!aux_grf)
+               return -ENOMEM;
+
+       aux_grf->grf = grf;
+       aux_grf->type = type;
+       hash_add(ctx->aux_grf_table, &aux_grf->node, type);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(rockchip_clk_add_grf);
+
 void rockchip_clk_register_plls(struct rockchip_clk_provider *ctx,
                                struct rockchip_pll_clock *list,
                                unsigned int nr_pll, int grf_lock_offset)
index cf0f5f11c34b5a31695661bd8698afb353767889..9e3503e2ffc23b2f24306017c5861f1fb39cef07 100644 (file)
@@ -1329,6 +1329,9 @@ struct rockchip_clk_provider *rockchip_clk_init_early(struct device_node *np,
 void rockchip_clk_finalize(struct rockchip_clk_provider *ctx);
 void rockchip_clk_of_add_provider(struct device_node *np,
                                struct rockchip_clk_provider *ctx);
+int rockchip_clk_add_grf(struct rockchip_clk_provider *ctx,
+                        struct regmap *grf,
+                        enum rockchip_grf_type type);
 unsigned long rockchip_clk_find_max_clk_id(struct rockchip_clk_branch *list,
                                           unsigned int nr_clk);
 void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,