diff options
author | Stephen Boyd <sboyd@kernel.org> | 2020-01-04 23:08:38 -0800 |
---|---|---|
committer | Stephen Boyd <sboyd@kernel.org> | 2020-01-04 23:08:38 -0800 |
commit | 6537b5e6cb247298e1907c684d1858fdfef3c2a9 (patch) | |
tree | 8fbcc95367865c4403a06de16dedac54543079d2 /drivers/clk/clk.c | |
parent | 67d81d7a2ef388c66b472140e0d3f2d04e4da713 (diff) | |
parent | 9011f92622e5ef2d075f45e5fa818776d4feb8c0 (diff) |
Merge branch 'clk-register-dt-node-better' into clk-next
* clk-register-dt-node-better:
clk: Use parent node pointer during registration if necessary
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r-- | drivers/clk/clk.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 70c599e92f7c..612cf61b7622 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -3742,6 +3742,28 @@ fail_out: } /** + * 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 * @hw: link to hardware-specific clock data @@ -3756,7 +3778,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); @@ -3772,7 +3794,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); |