Re: [RFC PATCH 3/5] of: add clock providers
From: Paul Mundt <hidden>
Date: 2011-01-26 05:47:20
Also in:
linux-arm-kernel, lkml
On Tue, Jan 25, 2011 at 09:44:17PM -0700, Grant Likely wrote:
+struct clk *of_clk_get(struct device *dev, const char *id)
+{...
+ snprintf(prop_name, 32, "%s-clock", id ? id : "bus"); + prop = of_get_property(dev->of_node, prop_name, &sz); + if (!prop || sz < 4) + return NULL;
...
+ * size of the property. */
+ if (strlen(prop) + 1 > sz)
+ return NULL;
+
+ /* Find the clock provider node; check if it is registered as a
+ * provider, and ask it for the relevant clk structure */
+ provnode = of_find_node_by_phandle(provhandle);
+ if (!provnode) {
+ pr_warn("%s: %s property in node %s references invalid phandle",
+ __func__, prop_name, dev->of_node->full_name);
+ return NULL;...
+ return clk; +}
On Tue, Jan 25, 2011 at 09:44:22PM -0700, Grant Likely wrote:
quoted hunk
@@ -79,6 +81,11 @@ EXPORT_SYMBOL(clk_get_sys); struct clk *clk_get(struct device *dev, const char *con_id) { const char *dev_id = dev ? dev_name(dev) : NULL; + struct clk *clk; + + clk = of_clk_get(dev, con_id); + if (clk && __clk_get(clk)) + return clk; return clk_get_sys(dev_id, con_id); }
The return value for clk_get() by almost all users is checked for specifically with IS_ERR() rather than an IS_ERR_OR_NULL(), so you're going to want to change your of_clk_get() error paths to return ERR_PTR()'s directly, or wrap it up like clk_get_sys() does. Given that there are multiple reasons why of_clk_get() can fail however, it's probably worth handing down the actual error rather than simply chomping it in to an -ENOENT.