mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2025-09-26 21:55:00 +00:00
Apart from improved power consumption, this fixes the runtime errors
from the pmdomain driver (failed to set idle on domain '%s')
Backport four clk fixes while at it.
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/19925
(cherry picked from commit 13db7a0708
)
[rebased upon 24.10 branch]
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/19989
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
91 lines
3.0 KiB
Diff
91 lines
3.0 KiB
Diff
From fe0fb6675fa48cade97d8bcd46226479c4a704df Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Wed, 11 Dec 2024 17:58:52 +0100
|
|
Subject: [PATCH] clk: rockchip: expose rockchip_clk_set_lookup
|
|
|
|
Move rockchip_clk_add_lookup to clk.h, so that it can be used
|
|
by sub-devices with their own driver. These might also have to
|
|
do a lookup, so rename the function to rockchip_clk_set_lookup
|
|
and add a matching rockchip_clk_get_lookup.
|
|
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Link: https://lore.kernel.org/r/20241211165957.94922-4-sebastian.reichel@collabora.com
|
|
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
|
---
|
|
drivers/clk/rockchip/clk.c | 14 ++++----------
|
|
drivers/clk/rockchip/clk.h | 12 ++++++++++++
|
|
2 files changed, 16 insertions(+), 10 deletions(-)
|
|
|
|
--- a/drivers/clk/rockchip/clk.c
|
|
+++ b/drivers/clk/rockchip/clk.c
|
|
@@ -197,12 +197,6 @@ static void rockchip_fractional_approxim
|
|
clk_fractional_divider_general_approximation(hw, rate, parent_rate, m, n);
|
|
}
|
|
|
|
-static void rockchip_clk_add_lookup(struct rockchip_clk_provider *ctx,
|
|
- struct clk *clk, unsigned int id)
|
|
-{
|
|
- ctx->clk_data.clks[id] = clk;
|
|
-}
|
|
-
|
|
static struct clk *rockchip_clk_register_frac_branch(
|
|
struct rockchip_clk_provider *ctx, const char *name,
|
|
const char *const *parent_names, u8 num_parents,
|
|
@@ -292,7 +286,7 @@ static struct clk *rockchip_clk_register
|
|
return mux_clk;
|
|
}
|
|
|
|
- rockchip_clk_add_lookup(ctx, mux_clk, child->id);
|
|
+ rockchip_clk_set_lookup(ctx, mux_clk, child->id);
|
|
|
|
/* notifier on the fraction divider to catch rate changes */
|
|
if (frac->mux_frac_idx >= 0) {
|
|
@@ -452,7 +446,7 @@ void rockchip_clk_register_plls(struct r
|
|
continue;
|
|
}
|
|
|
|
- rockchip_clk_add_lookup(ctx, clk, list->id);
|
|
+ rockchip_clk_set_lookup(ctx, clk, list->id);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(rockchip_clk_register_plls);
|
|
@@ -614,7 +608,7 @@ void rockchip_clk_register_branches(stru
|
|
continue;
|
|
}
|
|
|
|
- rockchip_clk_add_lookup(ctx, clk, list->id);
|
|
+ rockchip_clk_set_lookup(ctx, clk, list->id);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(rockchip_clk_register_branches);
|
|
@@ -638,7 +632,7 @@ void rockchip_clk_register_armclk(struct
|
|
return;
|
|
}
|
|
|
|
- rockchip_clk_add_lookup(ctx, clk, lookup_id);
|
|
+ rockchip_clk_set_lookup(ctx, clk, lookup_id);
|
|
}
|
|
EXPORT_SYMBOL_GPL(rockchip_clk_register_armclk);
|
|
|
|
--- a/drivers/clk/rockchip/clk.h
|
|
+++ b/drivers/clk/rockchip/clk.h
|
|
@@ -970,6 +970,18 @@ struct rockchip_clk_branch {
|
|
#define SGRF_GATE(_id, cname, pname) \
|
|
FACTOR(_id, cname, pname, 0, 1, 1)
|
|
|
|
+static inline struct clk *rockchip_clk_get_lookup(struct rockchip_clk_provider *ctx,
|
|
+ unsigned int id)
|
|
+{
|
|
+ return ctx->clk_data.clks[id];
|
|
+}
|
|
+
|
|
+static inline void rockchip_clk_set_lookup(struct rockchip_clk_provider *ctx,
|
|
+ struct clk *clk, unsigned int id)
|
|
+{
|
|
+ ctx->clk_data.clks[id] = clk;
|
|
+}
|
|
+
|
|
struct rockchip_clk_provider *rockchip_clk_init(struct device_node *np,
|
|
void __iomem *base, unsigned long nr_clks);
|
|
struct rockchip_clk_provider *rockchip_clk_init_early(struct device_node *np,
|