unsigned long __clk_get_flags(struct clk *clk);
unsigned long clk_hw_get_flags(const struct clk_hw *hw);
bool clk_hw_is_prepared(const struct clk_hw *hw);
+++++bool clk_hw_rate_is_protected(const struct clk_hw *hw);
bool clk_hw_is_enabled(const struct clk_hw *hw);
bool __clk_is_enabled(struct clk *clk);
struct clk *__clk_lookup(const char *name);
} \
OF_DECLARE_1(clk, name, compat, name##_of_clk_init_driver)
+ ++++#define CLK_HW_INIT(_name, _parent, _ops, _flags) \
+ ++++ (&(struct clk_init_data) { \
+ ++++ .flags = _flags, \
+ ++++ .name = _name, \
+ ++++ .parent_names = (const char *[]) { _parent }, \
+ ++++ .num_parents = 1, \
+ ++++ .ops = _ops, \
+ ++++ })
+ ++++
+ ++++#define CLK_HW_INIT_PARENTS(_name, _parents, _ops, _flags) \
+ ++++ (&(struct clk_init_data) { \
+ ++++ .flags = _flags, \
+ ++++ .name = _name, \
+ ++++ .parent_names = _parents, \
+ ++++ .num_parents = ARRAY_SIZE(_parents), \
+ ++++ .ops = _ops, \
+ ++++ })
+ ++++
+ ++++#define CLK_HW_INIT_NO_PARENT(_name, _ops, _flags) \
+ ++++ (&(struct clk_init_data) { \
+ ++++ .flags = _flags, \
+ ++++ .name = _name, \
+ ++++ .parent_names = NULL, \
+ ++++ .num_parents = 0, \
+ ++++ .ops = _ops, \
+ ++++ })
+ ++++
+ ++++#define CLK_FIXED_FACTOR(_struct, _name, _parent, \
+ ++++ _div, _mult, _flags) \
+ ++++ struct clk_fixed_factor _struct = { \
+ ++++ .div = _div, \
+ ++++ .mult = _mult, \
+ ++++ .hw.init = CLK_HW_INIT(_name, \
+ ++++ _parent, \
+ ++++ &clk_fixed_factor_ops, \
+ ++++ _flags), \
+ ++++ }
+ ++++
#ifdef CONFIG_OF
int of_clk_add_provider(struct device_node *np,
struct clk *(*clk_src_get)(struct of_phandle_args *args,