summaryrefslogtreecommitdiff
path: root/drivers/clk/clk.c
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@kernel.org>2020-01-04 23:08:38 -0800
committerStephen Boyd <sboyd@kernel.org>2020-01-04 23:08:38 -0800
commit6537b5e6cb247298e1907c684d1858fdfef3c2a9 (patch)
tree8fbcc95367865c4403a06de16dedac54543079d2 /drivers/clk/clk.c
parent67d81d7a2ef388c66b472140e0d3f2d04e4da713 (diff)
parent9011f92622e5ef2d075f45e5fa818776d4feb8c0 (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.c27
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);