Commit 35163385 authored by Tony Lindgren's avatar Tony Lindgren

clk: ti: Handle possible address in the node name

In order to use #address-cells = <1> and start making use of the
standard reg property, let's prepare things to ignore the possible
address in the clock node name.

Unless the clock-output-names property is used, the legacy clocks still
fall back to matching the clock data based on the node name.

We use cleanup.h to simplify the return path for freeing tmp.
Acked-by: default avatarStephen Boyd <sboyd@kernel.org>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 6613476e
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* Tero Kristo <t-kristo@ti.com> * Tero Kristo <t-kristo@ti.com>
*/ */
#include <linux/cleanup.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
#include <linux/clkdev.h> #include <linux/clkdev.h>
...@@ -114,20 +115,26 @@ int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops) ...@@ -114,20 +115,26 @@ int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops)
/* /*
* Eventually we could standardize to using '_' for clk-*.c files to follow the * Eventually we could standardize to using '_' for clk-*.c files to follow the
* TRM naming and leave out the tmp name here. * TRM naming.
*/ */
static struct device_node *ti_find_clock_provider(struct device_node *from, static struct device_node *ti_find_clock_provider(struct device_node *from,
const char *name) const char *name)
{ {
char *tmp __free(kfree) = NULL;
struct device_node *np; struct device_node *np;
bool found = false; bool found = false;
const char *n; const char *n;
char *tmp; char *p;
tmp = kstrdup_and_replace(name, '-', '_', GFP_KERNEL); tmp = kstrdup_and_replace(name, '-', '_', GFP_KERNEL);
if (!tmp) if (!tmp)
return NULL; return NULL;
/* Ignore a possible address for the node name */
p = strchr(tmp, '@');
if (p)
*p = '\0';
/* Node named "clock" with "clock-output-names" */ /* Node named "clock" with "clock-output-names" */
for_each_of_allnodes_from(from, np) { for_each_of_allnodes_from(from, np) {
if (of_property_read_string_index(np, "clock-output-names", if (of_property_read_string_index(np, "clock-output-names",
...@@ -140,7 +147,6 @@ static struct device_node *ti_find_clock_provider(struct device_node *from, ...@@ -140,7 +147,6 @@ static struct device_node *ti_find_clock_provider(struct device_node *from,
break; break;
} }
} }
kfree(tmp);
if (found) { if (found) {
of_node_put(from); of_node_put(from);
...@@ -148,7 +154,7 @@ static struct device_node *ti_find_clock_provider(struct device_node *from, ...@@ -148,7 +154,7 @@ static struct device_node *ti_find_clock_provider(struct device_node *from,
} }
/* Fall back to using old node name base provider name */ /* Fall back to using old node name base provider name */
return of_find_node_by_name(from, name); return of_find_node_by_name(from, tmp);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment