diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-03-11 09:44:15 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-03-11 10:02:36 +0100 |
commit | c7cc27d006ccca5951b8fecb596d546998181f7c (patch) | |
tree | 9a1e3c45d41eb66c0b799e3d619553cbaea26fb2 | |
parent | a2fbc210ade163ea3e746f49269b698bd8e5b7ed (diff) | |
download | barebox-c7cc27d006ccca5951b8fecb596d546998181f7c.tar.gz barebox-c7cc27d006ccca5951b8fecb596d546998181f7c.tar.xz |
clk: mux: Support CLK_MUX_READ_ONLY flag
Support readonly dividers using the CLK_MUX_READ_ONLY flag.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | drivers/clk/clk-mux.c | 7 | ||||
-rw-r--r-- | include/linux/clk.h | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c index ebf736bdff..e9cb614005 100644 --- a/drivers/clk/clk-mux.c +++ b/drivers/clk/clk-mux.c @@ -33,6 +33,13 @@ static int clk_mux_set_parent(struct clk *clk, u8 idx) struct clk_mux *m = container_of(clk, struct clk_mux, clk); u32 val; + if (m->flags & CLK_MUX_READ_ONLY) { + if (clk_mux_get_parent(clk) != idx) + return -EPERM; + else + return 0; + } + val = readl(m->reg); val &= ~(((1 << m->width) - 1) << m->shift); val |= idx << m->shift; diff --git a/include/linux/clk.h b/include/linux/clk.h index 2e698e2ea6..2492608a15 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -344,6 +344,7 @@ struct clk_divider { #define CLK_DIVIDER_READ_ONLY (1 << 5) #define CLK_MUX_HIWORD_MASK (1 << 2) +#define CLK_MUX_READ_ONLY (1 << 3) /* mux can't be changed */ extern struct clk_ops clk_divider_ops; |