diff options
-rw-r--r-- | drivers/clk/clk-divider.c | 11 | ||||
-rw-r--r-- | drivers/clk/nxp/clk-lpc18xx-ccu.c | 2 | ||||
-rw-r--r-- | drivers/clk/rockchip/clk.c | 4 | ||||
-rw-r--r-- | include/linux/clk-provider.h | 1 |
4 files changed, 15 insertions, 3 deletions
diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index ded3ff4b91b9..aa1dacdaa39d 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c | |||
@@ -423,6 +423,12 @@ const struct clk_ops clk_divider_ops = { | |||
423 | }; | 423 | }; |
424 | EXPORT_SYMBOL_GPL(clk_divider_ops); | 424 | EXPORT_SYMBOL_GPL(clk_divider_ops); |
425 | 425 | ||
426 | const struct clk_ops clk_divider_ro_ops = { | ||
427 | .recalc_rate = clk_divider_recalc_rate, | ||
428 | .round_rate = clk_divider_round_rate, | ||
429 | }; | ||
430 | EXPORT_SYMBOL_GPL(clk_divider_ro_ops); | ||
431 | |||
426 | static struct clk *_register_divider(struct device *dev, const char *name, | 432 | static struct clk *_register_divider(struct device *dev, const char *name, |
427 | const char *parent_name, unsigned long flags, | 433 | const char *parent_name, unsigned long flags, |
428 | void __iomem *reg, u8 shift, u8 width, | 434 | void __iomem *reg, u8 shift, u8 width, |
@@ -446,7 +452,10 @@ static struct clk *_register_divider(struct device *dev, const char *name, | |||
446 | return ERR_PTR(-ENOMEM); | 452 | return ERR_PTR(-ENOMEM); |
447 | 453 | ||
448 | init.name = name; | 454 | init.name = name; |
449 | init.ops = &clk_divider_ops; | 455 | if (clk_divider_flags & CLK_DIVIDER_READ_ONLY) |
456 | init.ops = &clk_divider_ro_ops; | ||
457 | else | ||
458 | init.ops = &clk_divider_ops; | ||
450 | init.flags = flags | CLK_IS_BASIC; | 459 | init.flags = flags | CLK_IS_BASIC; |
451 | init.parent_names = (parent_name ? &parent_name: NULL); | 460 | init.parent_names = (parent_name ? &parent_name: NULL); |
452 | init.num_parents = (parent_name ? 1 : 0); | 461 | init.num_parents = (parent_name ? 1 : 0); |
diff --git a/drivers/clk/nxp/clk-lpc18xx-ccu.c b/drivers/clk/nxp/clk-lpc18xx-ccu.c index 13aabbb3acbe..558da89555af 100644 --- a/drivers/clk/nxp/clk-lpc18xx-ccu.c +++ b/drivers/clk/nxp/clk-lpc18xx-ccu.c | |||
@@ -222,7 +222,7 @@ static void lpc18xx_ccu_register_branch_gate_div(struct lpc18xx_clk_branch *bran | |||
222 | div->width = 1; | 222 | div->width = 1; |
223 | 223 | ||
224 | div_hw = &div->hw; | 224 | div_hw = &div->hw; |
225 | div_ops = &clk_divider_ops; | 225 | div_ops = &clk_divider_ro_ops; |
226 | } | 226 | } |
227 | 227 | ||
228 | branch->gate.reg = branch->offset + reg_base; | 228 | branch->gate.reg = branch->offset + reg_base; |
diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c index d9a0b5d4d47f..f7e8693ad28b 100644 --- a/drivers/clk/rockchip/clk.c +++ b/drivers/clk/rockchip/clk.c | |||
@@ -90,7 +90,9 @@ static struct clk *rockchip_clk_register_branch(const char *name, | |||
90 | div->width = div_width; | 90 | div->width = div_width; |
91 | div->lock = lock; | 91 | div->lock = lock; |
92 | div->table = div_table; | 92 | div->table = div_table; |
93 | div_ops = &clk_divider_ops; | 93 | div_ops = (div_flags & CLK_DIVIDER_READ_ONLY) |
94 | ? &clk_divider_ro_ops | ||
95 | : &clk_divider_ops; | ||
94 | } | 96 | } |
95 | 97 | ||
96 | clk = clk_register_composite(NULL, name, parent_names, num_parents, | 98 | clk = clk_register_composite(NULL, name, parent_names, num_parents, |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 1143e38555a4..408a60dca353 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
@@ -385,6 +385,7 @@ struct clk_divider { | |||
385 | #define CLK_DIVIDER_MAX_AT_ZERO BIT(6) | 385 | #define CLK_DIVIDER_MAX_AT_ZERO BIT(6) |
386 | 386 | ||
387 | extern const struct clk_ops clk_divider_ops; | 387 | extern const struct clk_ops clk_divider_ops; |
388 | extern const struct clk_ops clk_divider_ro_ops; | ||
388 | 389 | ||
389 | unsigned long divider_recalc_rate(struct clk_hw *hw, unsigned long parent_rate, | 390 | unsigned long divider_recalc_rate(struct clk_hw *hw, unsigned long parent_rate, |
390 | unsigned int val, const struct clk_div_table *table, | 391 | unsigned int val, const struct clk_div_table *table, |