提交 e8b1dee2 编写于 作者: R Rob Herring

of: Use device_type helpers to access the node type

Remove directly accessing device_node.type pointer and use the accessors
instead. This will eventually allow removing the type pointer.

Cc: Frank Rowand <frowand.list@gmail.com>
Cc: devicetree@vger.kernel.org
Signed-off-by: NRob Herring <robh@kernel.org>
上级 e31d0fc6
...@@ -110,8 +110,8 @@ static int of_bus_pci_match(struct device_node *np) ...@@ -110,8 +110,8 @@ static int of_bus_pci_match(struct device_node *np)
* "vci" is for the /chaos bridge on 1st-gen PCI powermacs * "vci" is for the /chaos bridge on 1st-gen PCI powermacs
* "ht" is hypertransport * "ht" is hypertransport
*/ */
return !strcmp(np->type, "pci") || !strcmp(np->type, "pciex") || return of_node_is_type(np, "pci") || of_node_is_type(np, "pciex") ||
!strcmp(np->type, "vci") || !strcmp(np->type, "ht"); of_node_is_type(np, "vci") || of_node_is_type(np, "ht");
} }
static void of_bus_pci_count_cells(struct device_node *np, static void of_bus_pci_count_cells(struct device_node *np,
......
...@@ -79,6 +79,13 @@ bool of_node_name_prefix(const struct device_node *np, const char *prefix) ...@@ -79,6 +79,13 @@ bool of_node_name_prefix(const struct device_node *np, const char *prefix)
} }
EXPORT_SYMBOL(of_node_name_prefix); EXPORT_SYMBOL(of_node_name_prefix);
static bool __of_node_is_type(const struct device_node *np, const char *type)
{
const char *match = __of_get_property(np, "device_type", NULL);
return np && match && type && !strcmp(match, type);
}
int of_n_addr_cells(struct device_node *np) int of_n_addr_cells(struct device_node *np)
{ {
u32 cells; u32 cells;
...@@ -482,7 +489,7 @@ static int __of_device_is_compatible(const struct device_node *device, ...@@ -482,7 +489,7 @@ static int __of_device_is_compatible(const struct device_node *device,
/* Matching type is better than matching name */ /* Matching type is better than matching name */
if (type && type[0]) { if (type && type[0]) {
if (!device->type || of_node_cmp(type, device->type)) if (!__of_node_is_type(device, type))
return 0; return 0;
score += 2; score += 2;
} }
...@@ -775,7 +782,7 @@ struct device_node *of_get_next_cpu_node(struct device_node *prev) ...@@ -775,7 +782,7 @@ struct device_node *of_get_next_cpu_node(struct device_node *prev)
} }
for (; next; next = next->sibling) { for (; next; next = next->sibling) {
if (!(of_node_name_eq(next, "cpu") || if (!(of_node_name_eq(next, "cpu") ||
(next->type && !of_node_cmp(next->type, "cpu")))) __of_node_is_type(next, "cpu")))
continue; continue;
if (of_node_get(next)) if (of_node_get(next))
break; break;
...@@ -983,8 +990,7 @@ struct device_node *of_find_node_by_type(struct device_node *from, ...@@ -983,8 +990,7 @@ struct device_node *of_find_node_by_type(struct device_node *from,
raw_spin_lock_irqsave(&devtree_lock, flags); raw_spin_lock_irqsave(&devtree_lock, flags);
for_each_of_allnodes_from(from, np) for_each_of_allnodes_from(from, np)
if (np->type && (of_node_cmp(np->type, type) == 0) if (__of_node_is_type(np, type) && of_node_get(np))
&& of_node_get(np))
break; break;
of_node_put(from); of_node_put(from);
raw_spin_unlock_irqrestore(&devtree_lock, flags); raw_spin_unlock_irqrestore(&devtree_lock, flags);
...@@ -2108,9 +2114,9 @@ struct device_node *of_find_next_cache_node(const struct device_node *np) ...@@ -2108,9 +2114,9 @@ struct device_node *of_find_next_cache_node(const struct device_node *np)
/* OF on pmac has nodes instead of properties named "l2-cache" /* OF on pmac has nodes instead of properties named "l2-cache"
* beneath CPU nodes. * beneath CPU nodes.
*/ */
if (IS_ENABLED(CONFIG_PPC_PMAC) && !strcmp(np->type, "cpu")) if (IS_ENABLED(CONFIG_PPC_PMAC) && of_node_is_type(np, "cpu"))
for_each_child_of_node(np, child) for_each_child_of_node(np, child)
if (!strcmp(child->type, "cache")) if (of_node_is_type(child, "cache"))
return child; return child;
return NULL; return NULL;
......
...@@ -209,7 +209,7 @@ static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len ...@@ -209,7 +209,7 @@ static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len
/* Name & Type */ /* Name & Type */
/* %p eats all alphanum characters, so %c must be used here */ /* %p eats all alphanum characters, so %c must be used here */
csize = snprintf(str, len, "of:N%pOFn%c%s", dev->of_node, 'T', csize = snprintf(str, len, "of:N%pOFn%c%s", dev->of_node, 'T',
dev->of_node->type); of_node_get_device_type(dev->of_node));
tsize = csize; tsize = csize;
len -= csize; len -= csize;
if (str) if (str)
...@@ -279,7 +279,7 @@ EXPORT_SYMBOL_GPL(of_device_modalias); ...@@ -279,7 +279,7 @@ EXPORT_SYMBOL_GPL(of_device_modalias);
*/ */
void of_device_uevent(struct device *dev, struct kobj_uevent_env *env) void of_device_uevent(struct device *dev, struct kobj_uevent_env *env)
{ {
const char *compat; const char *compat, *type;
struct alias_prop *app; struct alias_prop *app;
struct property *p; struct property *p;
int seen = 0; int seen = 0;
...@@ -289,8 +289,9 @@ void of_device_uevent(struct device *dev, struct kobj_uevent_env *env) ...@@ -289,8 +289,9 @@ void of_device_uevent(struct device *dev, struct kobj_uevent_env *env)
add_uevent_var(env, "OF_NAME=%pOFn", dev->of_node); add_uevent_var(env, "OF_NAME=%pOFn", dev->of_node);
add_uevent_var(env, "OF_FULLNAME=%pOF", dev->of_node); add_uevent_var(env, "OF_FULLNAME=%pOF", dev->of_node);
if (dev->of_node->type && strcmp("<NULL>", dev->of_node->type) != 0) type = of_node_get_device_type(dev->of_node);
add_uevent_var(env, "OF_TYPE=%s", dev->of_node->type); if (type)
add_uevent_var(env, "OF_TYPE=%s", type);
/* Since the compatible field can contain pretty much anything /* Since the compatible field can contain pretty much anything
* it's not really legal to split it out with commas. We split it * it's not really legal to split it out with commas. We split it
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册