diff options
| -rw-r--r-- | drivers/clk/clk-divider.c | 16 | ||||
| -rw-r--r-- | drivers/clk/clk-gate.c | 16 | ||||
| -rw-r--r-- | drivers/clk/clk-mux.c | 16 | ||||
| -rw-r--r-- | include/linux/clk-provider.h | 4 |
4 files changed, 52 insertions, 0 deletions
diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index c0a842b335c5..c2bb9f679ec6 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c | |||
| @@ -463,3 +463,19 @@ struct clk *clk_register_divider_table(struct device *dev, const char *name, | |||
| 463 | width, clk_divider_flags, table, lock); | 463 | width, clk_divider_flags, table, lock); |
| 464 | } | 464 | } |
| 465 | EXPORT_SYMBOL_GPL(clk_register_divider_table); | 465 | EXPORT_SYMBOL_GPL(clk_register_divider_table); |
| 466 | |||
| 467 | void clk_unregister_divider(struct clk *clk) | ||
| 468 | { | ||
| 469 | struct clk_divider *div; | ||
| 470 | struct clk_hw *hw; | ||
| 471 | |||
| 472 | hw = __clk_get_hw(clk); | ||
| 473 | if (!hw) | ||
| 474 | return; | ||
| 475 | |||
| 476 | div = to_clk_divider(hw); | ||
| 477 | |||
| 478 | clk_unregister(clk); | ||
| 479 | kfree(div); | ||
| 480 | } | ||
| 481 | EXPORT_SYMBOL_GPL(clk_unregister_divider); | ||
diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c index 51fd87fb7ba6..186b96efeebf 100644 --- a/drivers/clk/clk-gate.c +++ b/drivers/clk/clk-gate.c | |||
| @@ -162,3 +162,19 @@ struct clk *clk_register_gate(struct device *dev, const char *name, | |||
| 162 | return clk; | 162 | return clk; |
| 163 | } | 163 | } |
| 164 | EXPORT_SYMBOL_GPL(clk_register_gate); | 164 | EXPORT_SYMBOL_GPL(clk_register_gate); |
| 165 | |||
| 166 | void clk_unregister_gate(struct clk *clk) | ||
| 167 | { | ||
| 168 | struct clk_gate *gate; | ||
| 169 | struct clk_hw *hw; | ||
| 170 | |||
| 171 | hw = __clk_get_hw(clk); | ||
| 172 | if (!hw) | ||
| 173 | return; | ||
| 174 | |||
| 175 | gate = to_clk_gate(hw); | ||
| 176 | |||
| 177 | clk_unregister(clk); | ||
| 178 | kfree(gate); | ||
| 179 | } | ||
| 180 | EXPORT_SYMBOL_GPL(clk_unregister_gate); | ||
diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c index 6e1ecf94bf58..69a094c3783d 100644 --- a/drivers/clk/clk-mux.c +++ b/drivers/clk/clk-mux.c | |||
| @@ -177,3 +177,19 @@ struct clk *clk_register_mux(struct device *dev, const char *name, | |||
| 177 | NULL, lock); | 177 | NULL, lock); |
| 178 | } | 178 | } |
| 179 | EXPORT_SYMBOL_GPL(clk_register_mux); | 179 | EXPORT_SYMBOL_GPL(clk_register_mux); |
| 180 | |||
| 181 | void clk_unregister_mux(struct clk *clk) | ||
| 182 | { | ||
| 183 | struct clk_mux *mux; | ||
| 184 | struct clk_hw *hw; | ||
| 185 | |||
| 186 | hw = __clk_get_hw(clk); | ||
| 187 | if (!hw) | ||
| 188 | return; | ||
| 189 | |||
| 190 | mux = to_clk_mux(hw); | ||
| 191 | |||
| 192 | clk_unregister(clk); | ||
| 193 | kfree(mux); | ||
| 194 | } | ||
| 195 | EXPORT_SYMBOL_GPL(clk_unregister_mux); | ||
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index d936409520f8..ebb7055a6d84 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -294,6 +294,7 @@ struct clk *clk_register_gate(struct device *dev, const char *name, | |||
| 294 | const char *parent_name, unsigned long flags, | 294 | const char *parent_name, unsigned long flags, |
| 295 | void __iomem *reg, u8 bit_idx, | 295 | void __iomem *reg, u8 bit_idx, |
| 296 | u8 clk_gate_flags, spinlock_t *lock); | 296 | u8 clk_gate_flags, spinlock_t *lock); |
| 297 | void clk_unregister_gate(struct clk *clk); | ||
| 297 | 298 | ||
| 298 | struct clk_div_table { | 299 | struct clk_div_table { |
| 299 | unsigned int val; | 300 | unsigned int val; |
| @@ -361,6 +362,7 @@ struct clk *clk_register_divider_table(struct device *dev, const char *name, | |||
| 361 | void __iomem *reg, u8 shift, u8 width, | 362 | void __iomem *reg, u8 shift, u8 width, |
| 362 | u8 clk_divider_flags, const struct clk_div_table *table, | 363 | u8 clk_divider_flags, const struct clk_div_table *table, |
| 363 | spinlock_t *lock); | 364 | spinlock_t *lock); |
| 365 | void clk_unregister_divider(struct clk *clk); | ||
| 364 | 366 | ||
| 365 | /** | 367 | /** |
| 366 | * struct clk_mux - multiplexer clock | 368 | * struct clk_mux - multiplexer clock |
| @@ -411,6 +413,8 @@ struct clk *clk_register_mux_table(struct device *dev, const char *name, | |||
| 411 | void __iomem *reg, u8 shift, u32 mask, | 413 | void __iomem *reg, u8 shift, u32 mask, |
| 412 | u8 clk_mux_flags, u32 *table, spinlock_t *lock); | 414 | u8 clk_mux_flags, u32 *table, spinlock_t *lock); |
| 413 | 415 | ||
| 416 | void clk_unregister_mux(struct clk *clk); | ||
| 417 | |||
| 414 | void of_fixed_factor_clk_setup(struct device_node *node); | 418 | void of_fixed_factor_clk_setup(struct device_node *node); |
| 415 | 419 | ||
| 416 | /** | 420 | /** |
