clk: imx: add gatable clock divider support
authorA.s. Dong <aisheng.dong@nxp.com>
Wed, 14 Nov 2018 13:01:35 +0000 (13:01 +0000)
committerStephen Boyd <sboyd@kernel.org>
Mon, 3 Dec 2018 19:31:23 +0000 (11:31 -0800)
commit404680794224334bcbea498d571c645e1838c879
tree8f1960e23c97553a0d10eab2c71f533859113704
parent651022382c7f8da46cb4872a545ee1da6d097d2a
clk: imx: add gatable clock divider support

For dividers with zero indicating clock is disabled, instead of giving a
warning each time like "clkx: Zero divisor and CLK_DIVIDER_ALLOW_ZERO not
set" in exist code, we'd like to introduce enable/disable function for it.
e.g.
000b - Clock disabled
001b - Divide by 1
010b - Divide by 2
...

Set rate when the clk is disabled will cache the rate request and only
when the clk is enabled will the driver actually program the hardware to
have the requested divider value. Similarly, when the clk is disabled we'll
write a 0 there, but when the clk is enabled we'll restore whatever rate
(divider) was chosen last.

It does mean that recalc rate will be sort of odd, because when the clk is
off it will return 0, and when the clk is on it will return the right rate.
So to make things work, we'll need to return the cached rate in recalc rate
when the clk is off and read the hardware when the clk is on.

NOTE for the default off divider, the recalc rate will still return 0 as
there's still no proper preset rate. Enable such divider will give user
a reminder error message.

Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Shawn Guo <shawnguo@kernel.org>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
[sboyd@kernel.org: Include clk.h for sparse warnings]
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/imx/Makefile
drivers/clk/imx/clk-divider-gate.c [new file with mode: 0644]
drivers/clk/imx/clk.h