Skip to content

Commit 897adaf

Browse files
committed
clk: rockchip: rk3036: fix implementation of usb480m clock mux
Contrary to how it is implemented right now, this mux is controllable via a bit in CRU_MUSC_CON (same bit as on rk3128 even) and allows switching between xin24m and the 480m output of the usb2phy. So drop the hard-coded fixed-factor clock and implement the correct mux instead. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://lore.kernel.org/r/20250503202532.992033-3-heiko@sntech.de
1 parent 6e06b64 commit 897adaf

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

drivers/clk/rockchip/clk-rk3036.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ PNAME(mux_timer_p) = { "xin24m", "pclk_peri_src" };
123123
PNAME(mux_pll_src_apll_dpll_gpll_usb480m_p) = { "apll", "dpll", "gpll", "usb480m" };
124124
PNAME(mux_pll_src_dmyapll_dpll_gpll_xin24_p) = { "dummy_apll", "dpll", "gpll", "xin24m" };
125125

126+
PNAME(mux_usb480m_p) = { "usb480m_phy", "xin24m" };
126127
PNAME(mux_mmc_src_p) = { "apll", "dpll", "gpll", "xin24m" };
127128
PNAME(mux_i2s_pre_p) = { "i2s_src", "i2s_frac", "ext_i2s", "xin12m" };
128129
PNAME(mux_i2s_clkout_p) = { "i2s_pre", "xin12m" };
@@ -423,6 +424,9 @@ static struct rockchip_clk_branch rk3036_clk_branches[] __initdata = {
423424
GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_peri", 0, RK2928_CLKGATE_CON(8), 9, GFLAGS),
424425
GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_peri", 0, RK2928_CLKGATE_CON(8), 10, GFLAGS),
425426
GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_peri", 0, RK2928_CLKGATE_CON(8), 11, GFLAGS),
427+
428+
MUX(SCLK_USB480M, "usb480m", mux_usb480m_p, CLK_SET_RATE_PARENT,
429+
RK2928_MISC_CON, 15, 1, MFLAGS),
426430
};
427431

428432
static const char *const rk3036_critical_clocks[] __initconst = {
@@ -438,7 +442,6 @@ static void __init rk3036_clk_init(struct device_node *np)
438442
struct rockchip_clk_provider *ctx;
439443
unsigned long clk_nr_clks;
440444
void __iomem *reg_base;
441-
struct clk *clk;
442445

443446
reg_base = of_iomap(np, 0);
444447
if (!reg_base) {
@@ -462,11 +465,6 @@ static void __init rk3036_clk_init(struct device_node *np)
462465
return;
463466
}
464467

465-
clk = clk_register_fixed_factor(NULL, "usb480m", "xin24m", 0, 20, 1);
466-
if (IS_ERR(clk))
467-
pr_warn("%s: could not register clock usb480m: %ld\n",
468-
__func__, PTR_ERR(clk));
469-
470468
rockchip_clk_register_plls(ctx, rk3036_pll_clks,
471469
ARRAY_SIZE(rk3036_pll_clks),
472470
RK3036_GRF_SOC_STATUS0);

0 commit comments

Comments
 (0)