Skip to content

Commit ae156a3

Browse files
tlebbebarino
authored andcommitted
clk: fixed-factor: add fwname-based constructor functions
Add four functions to register clk_hw based on the fw_name field in clk_parent_data, ie the value in the DT property `clock-names`. There are variants for devm or not and passing an accuracy or not passing one: - clk_hw_register_fixed_factor_fwname - clk_hw_register_fixed_factor_with_accuracy_fwname - devm_clk_hw_register_fixed_factor_fwname - devm_clk_hw_register_fixed_factor_with_accuracy_fwname The `struct clk_parent_data` init is extracted from __clk_hw_register_fixed_factor to each calling function. It is required to allow each function to pass whatever field they want, not only index. Signed-off-by: Théo Lebrun <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent ff773fd commit ae156a3

File tree

2 files changed

+85
-14
lines changed

2 files changed

+85
-14
lines changed

drivers/clk/clk-fixed-factor.c

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,12 @@ static void devm_clk_hw_register_fixed_factor_release(struct device *dev, void *
9191
static struct clk_hw *
9292
__clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
9393
const char *name, const char *parent_name,
94-
const struct clk_hw *parent_hw, int index,
94+
const struct clk_hw *parent_hw, const struct clk_parent_data *pdata,
9595
unsigned long flags, unsigned int mult, unsigned int div,
9696
unsigned long acc, unsigned int fixflags, bool devm)
9797
{
9898
struct clk_fixed_factor *fix;
9999
struct clk_init_data init = { };
100-
struct clk_parent_data pdata = { .index = index };
101100
struct clk_hw *hw;
102101
int ret;
103102

@@ -128,7 +127,7 @@ __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
128127
else if (parent_hw)
129128
init.parent_hws = &parent_hw;
130129
else
131-
init.parent_data = &pdata;
130+
init.parent_data = pdata;
132131
init.num_parents = 1;
133132

134133
hw = &fix->hw;
@@ -165,7 +164,9 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev,
165164
const char *name, unsigned int index, unsigned long flags,
166165
unsigned int mult, unsigned int div)
167166
{
168-
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, NULL, index,
167+
const struct clk_parent_data pdata = { .index = index };
168+
169+
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, NULL, &pdata,
169170
flags, mult, div, 0, 0, true);
170171
}
171172
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_index);
@@ -187,30 +188,59 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_parent_hw(struct device *dev,
187188
const char *name, const struct clk_hw *parent_hw,
188189
unsigned long flags, unsigned int mult, unsigned int div)
189190
{
191+
const struct clk_parent_data pdata = { .index = -1 };
192+
190193
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, parent_hw,
191-
-1, flags, mult, div, 0, 0, true);
194+
&pdata, flags, mult, div, 0, 0, true);
192195
}
193196
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_parent_hw);
194197

195198
struct clk_hw *clk_hw_register_fixed_factor_parent_hw(struct device *dev,
196199
const char *name, const struct clk_hw *parent_hw,
197200
unsigned long flags, unsigned int mult, unsigned int div)
198201
{
199-
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL,
200-
parent_hw, -1, flags, mult, div,
201-
0, 0, false);
202+
const struct clk_parent_data pdata = { .index = -1 };
203+
204+
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, parent_hw,
205+
&pdata, flags, mult, div, 0, 0, false);
202206
}
203207
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor_parent_hw);
204208

205209
struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
206210
const char *name, const char *parent_name, unsigned long flags,
207211
unsigned int mult, unsigned int div)
208212
{
209-
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL, -1,
210-
flags, mult, div, 0, 0, false);
213+
const struct clk_parent_data pdata = { .index = -1 };
214+
215+
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL,
216+
&pdata, flags, mult, div, 0, 0, false);
211217
}
212218
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor);
213219

220+
struct clk_hw *clk_hw_register_fixed_factor_fwname(struct device *dev,
221+
struct device_node *np, const char *name, const char *fw_name,
222+
unsigned long flags, unsigned int mult, unsigned int div)
223+
{
224+
const struct clk_parent_data pdata = { .index = -1, .fw_name = fw_name };
225+
226+
return __clk_hw_register_fixed_factor(dev, np, name, NULL, NULL,
227+
&pdata, flags, mult, div, 0, 0, false);
228+
}
229+
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor_fwname);
230+
231+
struct clk_hw *clk_hw_register_fixed_factor_with_accuracy_fwname(struct device *dev,
232+
struct device_node *np, const char *name, const char *fw_name,
233+
unsigned long flags, unsigned int mult, unsigned int div,
234+
unsigned long acc)
235+
{
236+
const struct clk_parent_data pdata = { .index = -1, .fw_name = fw_name };
237+
238+
return __clk_hw_register_fixed_factor(dev, np, name, NULL, NULL,
239+
&pdata, flags, mult, div, acc,
240+
CLK_FIXED_FACTOR_FIXED_ACCURACY, false);
241+
}
242+
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor_with_accuracy_fwname);
243+
214244
struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
215245
const char *parent_name, unsigned long flags,
216246
unsigned int mult, unsigned int div)
@@ -253,16 +283,43 @@ struct clk_hw *devm_clk_hw_register_fixed_factor(struct device *dev,
253283
const char *name, const char *parent_name, unsigned long flags,
254284
unsigned int mult, unsigned int div)
255285
{
256-
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL, -1,
257-
flags, mult, div, 0, 0, true);
286+
const struct clk_parent_data pdata = { .index = -1 };
287+
288+
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL,
289+
&pdata, flags, mult, div, 0, 0, true);
258290
}
259291
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor);
260292

293+
struct clk_hw *devm_clk_hw_register_fixed_factor_fwname(struct device *dev,
294+
struct device_node *np, const char *name, const char *fw_name,
295+
unsigned long flags, unsigned int mult, unsigned int div)
296+
{
297+
const struct clk_parent_data pdata = { .index = -1, .fw_name = fw_name };
298+
299+
return __clk_hw_register_fixed_factor(dev, np, name, NULL, NULL,
300+
&pdata, flags, mult, div, 0, 0, true);
301+
}
302+
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_fwname);
303+
304+
struct clk_hw *devm_clk_hw_register_fixed_factor_with_accuracy_fwname(struct device *dev,
305+
struct device_node *np, const char *name, const char *fw_name,
306+
unsigned long flags, unsigned int mult, unsigned int div,
307+
unsigned long acc)
308+
{
309+
const struct clk_parent_data pdata = { .index = -1, .fw_name = fw_name };
310+
311+
return __clk_hw_register_fixed_factor(dev, np, name, NULL, NULL,
312+
&pdata, flags, mult, div, acc,
313+
CLK_FIXED_FACTOR_FIXED_ACCURACY, true);
314+
}
315+
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_with_accuracy_fwname);
316+
261317
#ifdef CONFIG_OF
262318
static struct clk_hw *_of_fixed_factor_clk_setup(struct device_node *node)
263319
{
264320
struct clk_hw *hw;
265321
const char *clk_name = node->name;
322+
const struct clk_parent_data pdata = { .index = 0 };
266323
u32 div, mult;
267324
int ret;
268325

@@ -280,8 +337,8 @@ static struct clk_hw *_of_fixed_factor_clk_setup(struct device_node *node)
280337

281338
of_property_read_string(node, "clock-output-names", &clk_name);
282339

283-
hw = __clk_hw_register_fixed_factor(NULL, node, clk_name, NULL, NULL, 0,
284-
0, mult, div, 0, 0, false);
340+
hw = __clk_hw_register_fixed_factor(NULL, node, clk_name, NULL, NULL,
341+
&pdata, 0, mult, div, 0, 0, false);
285342
if (IS_ERR(hw)) {
286343
/*
287344
* Clear OF_POPULATED flag so that clock registration can be

include/linux/clk-provider.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,10 +1116,24 @@ void clk_unregister_fixed_factor(struct clk *clk);
11161116
struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
11171117
const char *name, const char *parent_name, unsigned long flags,
11181118
unsigned int mult, unsigned int div);
1119+
struct clk_hw *clk_hw_register_fixed_factor_fwname(struct device *dev,
1120+
struct device_node *np, const char *name, const char *fw_name,
1121+
unsigned long flags, unsigned int mult, unsigned int div);
1122+
struct clk_hw *clk_hw_register_fixed_factor_with_accuracy_fwname(struct device *dev,
1123+
struct device_node *np, const char *name, const char *fw_name,
1124+
unsigned long flags, unsigned int mult, unsigned int div,
1125+
unsigned long acc);
11191126
void clk_hw_unregister_fixed_factor(struct clk_hw *hw);
11201127
struct clk_hw *devm_clk_hw_register_fixed_factor(struct device *dev,
11211128
const char *name, const char *parent_name, unsigned long flags,
11221129
unsigned int mult, unsigned int div);
1130+
struct clk_hw *devm_clk_hw_register_fixed_factor_fwname(struct device *dev,
1131+
struct device_node *np, const char *name, const char *fw_name,
1132+
unsigned long flags, unsigned int mult, unsigned int div);
1133+
struct clk_hw *devm_clk_hw_register_fixed_factor_with_accuracy_fwname(struct device *dev,
1134+
struct device_node *np, const char *name, const char *fw_name,
1135+
unsigned long flags, unsigned int mult, unsigned int div,
1136+
unsigned long acc);
11231137
struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev,
11241138
const char *name, unsigned int index, unsigned long flags,
11251139
unsigned int mult, unsigned int div);

0 commit comments

Comments
 (0)