Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: fixed-factor: Introduce *clk_hw_register_fixed_factor_parent_hw()

Add the devres and non-devres variant of
clk_hw_register_fixed_factor_parent_hw() for registering a fixed factor
clock with clk_hw parent pointer instead of parent name.

Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org>
Link: https://lore.kernel.org/r/20220629225331.357308-4-marijn.suijten@somainline.org
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Marijn Suijten and committed by
Stephen Boyd
6ebd5247 df63af17

+48 -5
+40 -5
drivers/clk/clk-fixed-factor.c
··· 78 78 79 79 static struct clk_hw * 80 80 __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np, 81 - const char *name, const char *parent_name, int index, 81 + const char *name, const char *parent_name, 82 + const struct clk_hw *parent_hw, int index, 82 83 unsigned long flags, unsigned int mult, unsigned int div, 83 84 bool devm) 84 85 { ··· 111 110 init.flags = flags; 112 111 if (parent_name) 113 112 init.parent_names = &parent_name; 113 + else if (parent_hw) 114 + init.parent_hws = &parent_hw; 114 115 else 115 116 init.parent_data = &pdata; 116 117 init.num_parents = 1; ··· 151 148 const char *name, unsigned int index, unsigned long flags, 152 149 unsigned int mult, unsigned int div) 153 150 { 154 - return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, index, 151 + return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, NULL, index, 155 152 flags, mult, div, true); 156 153 } 157 154 EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_index); 155 + 156 + /** 157 + * devm_clk_hw_register_fixed_factor_parent_hw - Register a fixed factor clock with 158 + * pointer to parent clock 159 + * @dev: device that is registering this clock 160 + * @name: name of this clock 161 + * @parent_hw: pointer to parent clk 162 + * @flags: fixed factor flags 163 + * @mult: multiplier 164 + * @div: divider 165 + * 166 + * Return: Pointer to fixed factor clk_hw structure that was registered or 167 + * an error pointer. 168 + */ 169 + struct clk_hw *devm_clk_hw_register_fixed_factor_parent_hw(struct device *dev, 170 + const char *name, const struct clk_hw *parent_hw, 171 + unsigned long flags, unsigned int mult, unsigned int div) 172 + { 173 + return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, parent_hw, 174 + -1, flags, mult, div, true); 175 + } 176 + EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_parent_hw); 177 + 178 + struct clk_hw *clk_hw_register_fixed_factor_parent_hw(struct device *dev, 179 + const char *name, const struct clk_hw *parent_hw, 180 + unsigned long flags, unsigned int mult, unsigned int div) 181 + { 182 + return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, 183 + parent_hw, -1, flags, mult, div, 184 + false); 185 + } 186 + EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor_parent_hw); 158 187 159 188 struct clk_hw *clk_hw_register_fixed_factor(struct device *dev, 160 189 const char *name, const char *parent_name, unsigned long flags, 161 190 unsigned int mult, unsigned int div) 162 191 { 163 - return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, -1, 192 + return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL, -1, 164 193 flags, mult, div, false); 165 194 } 166 195 EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor); ··· 239 204 const char *name, const char *parent_name, unsigned long flags, 240 205 unsigned int mult, unsigned int div) 241 206 { 242 - return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, -1, 207 + return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL, -1, 243 208 flags, mult, div, true); 244 209 } 245 210 EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor); ··· 266 231 267 232 of_property_read_string(node, "clock-output-names", &clk_name); 268 233 269 - hw = __clk_hw_register_fixed_factor(NULL, node, clk_name, NULL, 0, 234 + hw = __clk_hw_register_fixed_factor(NULL, node, clk_name, NULL, NULL, 0, 270 235 0, mult, div, false); 271 236 if (IS_ERR(hw)) { 272 237 /*
+8
include/linux/clk-provider.h
··· 1032 1032 struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev, 1033 1033 const char *name, unsigned int index, unsigned long flags, 1034 1034 unsigned int mult, unsigned int div); 1035 + 1036 + struct clk_hw *devm_clk_hw_register_fixed_factor_parent_hw(struct device *dev, 1037 + const char *name, const struct clk_hw *parent_hw, 1038 + unsigned long flags, unsigned int mult, unsigned int div); 1039 + 1040 + struct clk_hw *clk_hw_register_fixed_factor_parent_hw(struct device *dev, 1041 + const char *name, const struct clk_hw *parent_hw, 1042 + unsigned long flags, unsigned int mult, unsigned int div); 1035 1043 /** 1036 1044 * struct clk_fractional_divider - adjustable fractional divider clock 1037 1045 *