Merge branches 'clk-init-allocation', 'clk-unused' and 'clk-register-dt-node-better' into clk-next
- Let clk_ops::init() return an error code - Add a clk_ops::terminate() callback to undo clk_ops::init() * clk-init-allocation: clk: add terminate callback to clk_ops clk: let init callback return an error code clk: actually call the clock init before any other callback of the clock * clk-unused: clk: bm1800: Remove set but not used variable 'fref' * clk-register-dt-node-better: clk: Use parent node pointer during registration if necessary
This commit is contained in:
commit
28db9a8c82
|
@ -474,11 +474,10 @@ static struct bm1880_composite_clock bm1880_composite_clks[] = {
|
|||
static unsigned long bm1880_pll_rate_calc(u32 regval, unsigned long parent_rate)
|
||||
{
|
||||
u64 numerator;
|
||||
u32 fbdiv, fref, refdiv;
|
||||
u32 fbdiv, refdiv;
|
||||
u32 postdiv1, postdiv2, denominator;
|
||||
|
||||
fbdiv = (regval >> 16) & 0xfff;
|
||||
fref = parent_rate;
|
||||
refdiv = regval & 0x1f;
|
||||
postdiv1 = (regval >> 8) & 0x7;
|
||||
postdiv2 = (regval >> 12) & 0x7;
|
||||
|
|
|
@ -3728,6 +3728,28 @@ fail_out:
|
|||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/**
|
||||
* dev_or_parent_of_node() - Get device node of @dev or @dev's parent
|
||||
* @dev: Device to get device node of
|
||||
*
|
||||
* Return: device node pointer of @dev, or the device node pointer of
|
||||
* @dev->parent if dev doesn't have a device node, or NULL if neither
|
||||
* @dev or @dev->parent have a device node.
|
||||
*/
|
||||
static struct device_node *dev_or_parent_of_node(struct device *dev)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
np = dev_of_node(dev);
|
||||
if (!np)
|
||||
np = dev_of_node(dev->parent);
|
||||
|
||||
return np;
|
||||
}
|
||||
|
||||
/**
|
||||
* clk_register - allocate a new clock, register it and return an opaque cookie
|
||||
* @dev: device that is registering this clock
|
||||
|
@ -3743,7 +3765,7 @@ fail_out:
|
|||
*/
|
||||
struct clk *clk_register(struct device *dev, struct clk_hw *hw)
|
||||
{
|
||||
return __clk_register(dev, dev_of_node(dev), hw);
|
||||
return __clk_register(dev, dev_or_parent_of_node(dev), hw);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(clk_register);
|
||||
|
||||
|
@ -3759,7 +3781,8 @@ EXPORT_SYMBOL_GPL(clk_register);
|
|||
*/
|
||||
int clk_hw_register(struct device *dev, struct clk_hw *hw)
|
||||
{
|
||||
return PTR_ERR_OR_ZERO(__clk_register(dev, dev_of_node(dev), hw));
|
||||
return PTR_ERR_OR_ZERO(__clk_register(dev, dev_or_parent_of_node(dev),
|
||||
hw));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(clk_hw_register);
|
||||
|
||||
|
|
Loading…
Reference in New Issue