Skip to content

Commit 6ebd524

Browse files
MarijnS95bebarino
authored andcommitted
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 <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent df63af1 commit 6ebd524

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

drivers/clk/clk-fixed-factor.c

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ static void devm_clk_hw_register_fixed_factor_release(struct device *dev, void *
7878

7979
static struct clk_hw *
8080
__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,
8283
unsigned long flags, unsigned int mult, unsigned int div,
8384
bool devm)
8485
{
@@ -110,6 +111,8 @@ __clk_hw_register_fixed_factor(struct device *dev, struct device_node *np,
110111
init.flags = flags;
111112
if (parent_name)
112113
init.parent_names = &parent_name;
114+
else if (parent_hw)
115+
init.parent_hws = &parent_hw;
113116
else
114117
init.parent_data = &pdata;
115118
init.num_parents = 1;
@@ -148,16 +151,48 @@ struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev,
148151
const char *name, unsigned int index, unsigned long flags,
149152
unsigned int mult, unsigned int div)
150153
{
151-
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, index,
154+
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, NULL, index,
152155
flags, mult, div, true);
153156
}
154157
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_index);
155158

159+
/**
160+
* devm_clk_hw_register_fixed_factor_parent_hw - Register a fixed factor clock with
161+
* pointer to parent clock
162+
* @dev: device that is registering this clock
163+
* @name: name of this clock
164+
* @parent_hw: pointer to parent clk
165+
* @flags: fixed factor flags
166+
* @mult: multiplier
167+
* @div: divider
168+
*
169+
* Return: Pointer to fixed factor clk_hw structure that was registered or
170+
* an error pointer.
171+
*/
172+
struct clk_hw *devm_clk_hw_register_fixed_factor_parent_hw(struct device *dev,
173+
const char *name, const struct clk_hw *parent_hw,
174+
unsigned long flags, unsigned int mult, unsigned int div)
175+
{
176+
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL, parent_hw,
177+
-1, flags, mult, div, true);
178+
}
179+
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor_parent_hw);
180+
181+
struct clk_hw *clk_hw_register_fixed_factor_parent_hw(struct device *dev,
182+
const char *name, const struct clk_hw *parent_hw,
183+
unsigned long flags, unsigned int mult, unsigned int div)
184+
{
185+
return __clk_hw_register_fixed_factor(dev, NULL, name, NULL,
186+
parent_hw, -1, flags, mult, div,
187+
false);
188+
}
189+
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor_parent_hw);
190+
156191
struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
157192
const char *name, const char *parent_name, unsigned long flags,
158193
unsigned int mult, unsigned int div)
159194
{
160-
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, -1,
195+
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL, -1,
161196
flags, mult, div, false);
162197
}
163198
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor);
@@ -204,7 +239,7 @@ struct clk_hw *devm_clk_hw_register_fixed_factor(struct device *dev,
204239
const char *name, const char *parent_name, unsigned long flags,
205240
unsigned int mult, unsigned int div)
206241
{
207-
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, -1,
242+
return __clk_hw_register_fixed_factor(dev, NULL, name, parent_name, NULL, -1,
208243
flags, mult, div, true);
209244
}
210245
EXPORT_SYMBOL_GPL(devm_clk_hw_register_fixed_factor);
@@ -231,7 +266,7 @@ static struct clk_hw *_of_fixed_factor_clk_setup(struct device_node *node)
231266

232267
of_property_read_string(node, "clock-output-names", &clk_name);
233268

234-
hw = __clk_hw_register_fixed_factor(NULL, node, clk_name, NULL, 0,
269+
hw = __clk_hw_register_fixed_factor(NULL, node, clk_name, NULL, NULL, 0,
235270
0, mult, div, false);
236271
if (IS_ERR(hw)) {
237272
/*

include/linux/clk-provider.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,6 +1032,14 @@ struct clk_hw *devm_clk_hw_register_fixed_factor(struct device *dev,
10321032
struct clk_hw *devm_clk_hw_register_fixed_factor_index(struct device *dev,
10331033
const char *name, unsigned int index, unsigned long flags,
10341034
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);
10351043
/**
10361044
* struct clk_fractional_divider - adjustable fractional divider clock
10371045
*

0 commit comments

Comments
 (0)