of: Use device_type helpers to access the node type
Rob Herring
maintainerPATCH 1/1 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 <[email protected]>
Signed-off-by Rob Herring <[email protected]>
--- drivers/of/address.c | 4 ++-- drivers/of/base.c | 18 ++++++++++++------ drivers/of/device.c | 9 +++++---- 3 files changed, 19 insertions(+), 12 deletions(-)
drivers/of/address.c +2 -2
@@ -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 * "ht" is hypertransport */ -return !strcmp (np->type,"pci" ) || !strcmp (np->type,"pciex" ) || - !strcmp (np->type,"vci" ) || !strcmp (np->type,"ht" ); +return of_node_is_type (np,"pci" ) ||of_node_is_type (np,"pciex" ) || +of_node_is_type (np,"vci" ) ||of_node_is_type (np,"ht" ); } static void of_bus_pci_count_cells(struct device_node *np,
drivers/of/base.c +12 -6
@@ -79,6 +79,13 @@ bool of_node_name_prefix(const struct device_node *np, const char *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) {u32 cells;
@@ -482,7 +489,7 @@ static int __of_device_is_compatible(const struct device_node *device,/* Matching type is better than matching name */ if (type && type[0 ]) { -if (!device->type ||of_node_cmp (type, device->type)) +if (!__of_node_is_type (device, type))return 0 ; score +=2 ; }
@@ -775,7 +782,7 @@ struct device_node *of_get_next_cpu_node(struct device_node *prev) }for (; next; next = next->sibling) {if (!(of_node_name_eq (next,"cpu" ) || - (next->type && !of_node_cmp (next->type,"cpu" )))) +__of_node_is_type (next,"cpu" )))continue ;if (of_node_get (next))break ;
@@ -983,8 +990,7 @@ struct device_node *of_find_node_by_type(struct device_node *from,raw_spin_lock_irqsave (&devtree_lock, flags);for_each_of_allnodes_from (from, np) -if (np->type && (of_node_cmp (np->type, type) ==0 ) - &&of_node_get (np)) +if (__of_node_is_type (np, type) &&of_node_get (np))break ;of_node_put (from);raw_spin_unlock_irqrestore (&devtree_lock, flags);
@@ -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" * 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) -if (!strcmp (child->type,"cache" )) +if (of_node_is_type (child,"cache" ))return child;return NULL ;
drivers/of/device.c +5 -4
@@ -211,7 +211,7 @@ static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len/* Name & Type */ /* %p eats all alphanum characters, so %c must be used here */ 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; len -= csize;if (str)
@@ -281,7 +281,7 @@ EXPORT_SYMBOL_GPL(of_device_modalias);*/ void of_device_uevent (struct device *dev,struct kobj_uevent_env *env) { -const char *compat; +const char *compat, *type;struct alias_prop *app;struct property *p;int seen =0 ;
@@ -291,8 +291,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_FULLNAME=%pOF" , dev->of_node); -if (dev->of_node->type &&strcmp ("<NULL>" , dev->of_node->type) !=0 ) -add_uevent_var (env,"OF_TYPE=%s" , dev->of_node->type); + type =of_node_get_device_type (dev->of_node); +if (type) +add_uevent_var (env,"OF_TYPE=%s" , type);/* Since the compatible field can contain pretty much anything * it's not really legal to split it out with commas. We split it
Signature · 1 line
2.19.1