clk: mux: provide devm_clk_hw_register_mux()
Add devm_clk_hw_register_mux() - devres-managed version of clk_hw_register_mux(). Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> Acked-by: Stephen Boyd <sboyd@kernel.org> Link: https://lore.kernel.org/r/20210331105735.3690009-2-dmitry.baryshkov@linaro.org Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
Родитель
cb3fd74a03
Коммит
b3084079c1
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/clk-provider.h>
|
#include <linux/clk-provider.h>
|
||||||
|
#include <linux/device.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
@ -206,6 +207,40 @@ struct clk_hw *__clk_hw_register_mux(struct device *dev, struct device_node *np,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__clk_hw_register_mux);
|
EXPORT_SYMBOL_GPL(__clk_hw_register_mux);
|
||||||
|
|
||||||
|
static void devm_clk_hw_release_mux(struct device *dev, void *res)
|
||||||
|
{
|
||||||
|
clk_hw_unregister_mux(*(struct clk_hw **)res);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct clk_hw *__devm_clk_hw_register_mux(struct device *dev, struct device_node *np,
|
||||||
|
const char *name, u8 num_parents,
|
||||||
|
const char * const *parent_names,
|
||||||
|
const struct clk_hw **parent_hws,
|
||||||
|
const struct clk_parent_data *parent_data,
|
||||||
|
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
||||||
|
u8 clk_mux_flags, u32 *table, spinlock_t *lock)
|
||||||
|
{
|
||||||
|
struct clk_hw **ptr, *hw;
|
||||||
|
|
||||||
|
ptr = devres_alloc(devm_clk_hw_release_mux, sizeof(*ptr), GFP_KERNEL);
|
||||||
|
if (!ptr)
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
hw = __clk_hw_register_mux(dev, np, name, num_parents, parent_names, parent_hws,
|
||||||
|
parent_data, flags, reg, shift, mask,
|
||||||
|
clk_mux_flags, table, lock);
|
||||||
|
|
||||||
|
if (!IS_ERR(hw)) {
|
||||||
|
*ptr = hw;
|
||||||
|
devres_add(dev, ptr);
|
||||||
|
} else {
|
||||||
|
devres_free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hw;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__devm_clk_hw_register_mux);
|
||||||
|
|
||||||
struct clk *clk_register_mux_table(struct device *dev, const char *name,
|
struct clk *clk_register_mux_table(struct device *dev, const char *name,
|
||||||
const char * const *parent_names, u8 num_parents,
|
const char * const *parent_names, u8 num_parents,
|
||||||
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
||||||
|
|
|
@ -868,6 +868,13 @@ struct clk_hw *__clk_hw_register_mux(struct device *dev, struct device_node *np,
|
||||||
const struct clk_parent_data *parent_data,
|
const struct clk_parent_data *parent_data,
|
||||||
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
||||||
u8 clk_mux_flags, u32 *table, spinlock_t *lock);
|
u8 clk_mux_flags, u32 *table, spinlock_t *lock);
|
||||||
|
struct clk_hw *__devm_clk_hw_register_mux(struct device *dev, struct device_node *np,
|
||||||
|
const char *name, u8 num_parents,
|
||||||
|
const char * const *parent_names,
|
||||||
|
const struct clk_hw **parent_hws,
|
||||||
|
const struct clk_parent_data *parent_data,
|
||||||
|
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
||||||
|
u8 clk_mux_flags, u32 *table, spinlock_t *lock);
|
||||||
struct clk *clk_register_mux_table(struct device *dev, const char *name,
|
struct clk *clk_register_mux_table(struct device *dev, const char *name,
|
||||||
const char * const *parent_names, u8 num_parents,
|
const char * const *parent_names, u8 num_parents,
|
||||||
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
unsigned long flags, void __iomem *reg, u8 shift, u32 mask,
|
||||||
|
@ -902,6 +909,12 @@ struct clk *clk_register_mux_table(struct device *dev, const char *name,
|
||||||
__clk_hw_register_mux((dev), NULL, (name), (num_parents), NULL, NULL, \
|
__clk_hw_register_mux((dev), NULL, (name), (num_parents), NULL, NULL, \
|
||||||
(parent_data), (flags), (reg), (shift), \
|
(parent_data), (flags), (reg), (shift), \
|
||||||
BIT((width)) - 1, (clk_mux_flags), NULL, (lock))
|
BIT((width)) - 1, (clk_mux_flags), NULL, (lock))
|
||||||
|
#define devm_clk_hw_register_mux(dev, name, parent_names, num_parents, flags, reg, \
|
||||||
|
shift, width, clk_mux_flags, lock) \
|
||||||
|
__devm_clk_hw_register_mux((dev), NULL, (name), (num_parents), \
|
||||||
|
(parent_names), NULL, NULL, (flags), (reg), \
|
||||||
|
(shift), BIT((width)) - 1, (clk_mux_flags), \
|
||||||
|
NULL, (lock))
|
||||||
|
|
||||||
int clk_mux_val_to_index(struct clk_hw *hw, u32 *table, unsigned int flags,
|
int clk_mux_val_to_index(struct clk_hw *hw, u32 *table, unsigned int flags,
|
||||||
unsigned int val);
|
unsigned int val);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче