clk: Support bypassing dividers
authorPaul Cercueil <paul@crapouillou.net>
Sun, 30 May 2021 16:49:19 +0000 (17:49 +0100)
committerStephen Boyd <sboyd@kernel.org>
Mon, 28 Jun 2021 02:49:17 +0000 (19:49 -0700)
commit249592bf6d5d52cacdc2f5a07f23368fc1b11324
tree037c1a9a90e52d1d249d83c6996dd65214f92794
parent2e1ae04f7fe049bb012c273e5281a3c145924ea1
clk: Support bypassing dividers

When a clock is declared as both CGU_CLK_DIV and CGU_CLK_MUX, the CGU
code expects the mux to be applied first, the divider second.

On the JZ4760, and maybe on some other SoCs, some clocks also have a mux
setting and a divider, but the divider is not applied to all parents
selectable from the mux.

This could be solved by creating two clocks, one with CGU_CLK_DIV and
one with CGU_CLK_MUX, but that would increase the number of clocks.

Instead, add a 8-bit mask to CGU_CLK_DIV clocks. If the bit
corresponding to the parent clock's index is set, the divider is
bypassed.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20210530164923.18134-3-paul@crapouillou.net
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/ingenic/cgu.c
drivers/clk/ingenic/cgu.h
drivers/clk/ingenic/jz4725b-cgu.c
drivers/clk/ingenic/jz4740-cgu.c
drivers/clk/ingenic/jz4770-cgu.c