Эх сурвалжийг харах

Merge branch 'robherring/for-next' from git://sources.calxeda.com/kernel/linux.git

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Grant Likely 13 жил өмнө
parent
commit
d2f4ec1026

+ 3 - 0
Documentation/devicetree/bindings/vendor-prefixes.txt

@@ -14,6 +14,7 @@ bosch	Bosch Sensortec GmbH
 brcm	Broadcom Corporation
 brcm	Broadcom Corporation
 cavium	Cavium, Inc.
 cavium	Cavium, Inc.
 chrp	Common Hardware Reference Platform
 chrp	Common Hardware Reference Platform
+cirrus	Cirrus Logic, Inc.
 cortina	Cortina Systems, Inc.
 cortina	Cortina Systems, Inc.
 dallas	Maxim Integrated Products (formerly Dallas Semiconductor)
 dallas	Maxim Integrated Products (formerly Dallas Semiconductor)
 denx	Denx Software Engineering
 denx	Denx Software Engineering
@@ -42,6 +43,7 @@ powervr	PowerVR (deprecated, use img)
 qcom	Qualcomm, Inc.
 qcom	Qualcomm, Inc.
 ramtron	Ramtron International
 ramtron	Ramtron International
 realtek Realtek Semiconductor Corp.
 realtek Realtek Semiconductor Corp.
+renesas	Renesas Electronics Corporation
 samsung	Samsung Semiconductor
 samsung	Samsung Semiconductor
 sbs	Smart Battery System
 sbs	Smart Battery System
 schindler	Schindler
 schindler	Schindler
@@ -52,6 +54,7 @@ snps 	Synopsys, Inc.
 st	STMicroelectronics
 st	STMicroelectronics
 stericsson	ST-Ericsson
 stericsson	ST-Ericsson
 ti	Texas Instruments
 ti	Texas Instruments
+toshiba	Toshiba Corporation
 via	VIA Technologies, Inc.
 via	VIA Technologies, Inc.
 wlf	Wolfson Microelectronics
 wlf	Wolfson Microelectronics
 wm	Wondermedia Technologies, Inc.
 wm	Wondermedia Technologies, Inc.

+ 73 - 22
drivers/of/base.c

@@ -147,16 +147,14 @@ void of_node_put(struct device_node *node)
 EXPORT_SYMBOL(of_node_put);
 EXPORT_SYMBOL(of_node_put);
 #endif /* CONFIG_OF_DYNAMIC */
 #endif /* CONFIG_OF_DYNAMIC */
 
 
-struct property *of_find_property(const struct device_node *np,
-				  const char *name,
-				  int *lenp)
+static struct property *__of_find_property(const struct device_node *np,
+					   const char *name, int *lenp)
 {
 {
 	struct property *pp;
 	struct property *pp;
 
 
 	if (!np)
 	if (!np)
 		return NULL;
 		return NULL;
 
 
-	read_lock(&devtree_lock);
 	for (pp = np->properties; pp; pp = pp->next) {
 	for (pp = np->properties; pp; pp = pp->next) {
 		if (of_prop_cmp(pp->name, name) == 0) {
 		if (of_prop_cmp(pp->name, name) == 0) {
 			if (lenp)
 			if (lenp)
@@ -164,6 +162,18 @@ struct property *of_find_property(const struct device_node *np,
 			break;
 			break;
 		}
 		}
 	}
 	}
+
+	return pp;
+}
+
+struct property *of_find_property(const struct device_node *np,
+				  const char *name,
+				  int *lenp)
+{
+	struct property *pp;
+
+	read_lock(&devtree_lock);
+	pp = __of_find_property(np, name, lenp);
 	read_unlock(&devtree_lock);
 	read_unlock(&devtree_lock);
 
 
 	return pp;
 	return pp;
@@ -193,12 +203,24 @@ struct device_node *of_find_all_nodes(struct device_node *prev)
 }
 }
 EXPORT_SYMBOL(of_find_all_nodes);
 EXPORT_SYMBOL(of_find_all_nodes);
 
 
+/*
+ * Find a property with a given name for a given node
+ * and return the value.
+ */
+static const void *__of_get_property(const struct device_node *np,
+				     const char *name, int *lenp)
+{
+	struct property *pp = __of_find_property(np, name, lenp);
+
+	return pp ? pp->value : NULL;
+}
+
 /*
 /*
  * Find a property with a given name for a given node
  * Find a property with a given name for a given node
  * and return the value.
  * and return the value.
  */
  */
 const void *of_get_property(const struct device_node *np, const char *name,
 const void *of_get_property(const struct device_node *np, const char *name,
-			 int *lenp)
+			    int *lenp)
 {
 {
 	struct property *pp = of_find_property(np, name, lenp);
 	struct property *pp = of_find_property(np, name, lenp);
 
 
@@ -209,13 +231,13 @@ EXPORT_SYMBOL(of_get_property);
 /** Checks if the given "compat" string matches one of the strings in
 /** Checks if the given "compat" string matches one of the strings in
  * the device's "compatible" property
  * the device's "compatible" property
  */
  */
-int of_device_is_compatible(const struct device_node *device,
-		const char *compat)
+static int __of_device_is_compatible(const struct device_node *device,
+				     const char *compat)
 {
 {
 	const char* cp;
 	const char* cp;
 	int cplen, l;
 	int cplen, l;
 
 
-	cp = of_get_property(device, "compatible", &cplen);
+	cp = __of_get_property(device, "compatible", &cplen);
 	if (cp == NULL)
 	if (cp == NULL)
 		return 0;
 		return 0;
 	while (cplen > 0) {
 	while (cplen > 0) {
@@ -228,6 +250,20 @@ int of_device_is_compatible(const struct device_node *device,
 
 
 	return 0;
 	return 0;
 }
 }
+
+/** Checks if the given "compat" string matches one of the strings in
+ * the device's "compatible" property
+ */
+int of_device_is_compatible(const struct device_node *device,
+		const char *compat)
+{
+	int res;
+
+	read_lock(&devtree_lock);
+	res = __of_device_is_compatible(device, compat);
+	read_unlock(&devtree_lock);
+	return res;
+}
 EXPORT_SYMBOL(of_device_is_compatible);
 EXPORT_SYMBOL(of_device_is_compatible);
 
 
 /**
 /**
@@ -501,7 +537,8 @@ struct device_node *of_find_compatible_node(struct device_node *from,
 		if (type
 		if (type
 		    && !(np->type && (of_node_cmp(np->type, type) == 0)))
 		    && !(np->type && (of_node_cmp(np->type, type) == 0)))
 			continue;
 			continue;
-		if (of_device_is_compatible(np, compatible) && of_node_get(np))
+		if (__of_device_is_compatible(np, compatible) &&
+		    of_node_get(np))
 			break;
 			break;
 	}
 	}
 	of_node_put(from);
 	of_node_put(from);
@@ -545,15 +582,9 @@ out:
 }
 }
 EXPORT_SYMBOL(of_find_node_with_property);
 EXPORT_SYMBOL(of_find_node_with_property);
 
 
-/**
- * of_match_node - Tell if an device_node has a matching of_match structure
- *	@matches:	array of of device match structures to search in
- *	@node:		the of device structure to match against
- *
- *	Low level utility function used by device matching.
- */
-const struct of_device_id *of_match_node(const struct of_device_id *matches,
-					 const struct device_node *node)
+static
+const struct of_device_id *__of_match_node(const struct of_device_id *matches,
+					   const struct device_node *node)
 {
 {
 	if (!matches)
 	if (!matches)
 		return NULL;
 		return NULL;
@@ -567,14 +598,32 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
 			match &= node->type
 			match &= node->type
 				&& !strcmp(matches->type, node->type);
 				&& !strcmp(matches->type, node->type);
 		if (matches->compatible[0])
 		if (matches->compatible[0])
-			match &= of_device_is_compatible(node,
-						matches->compatible);
+			match &= __of_device_is_compatible(node,
+							   matches->compatible);
 		if (match)
 		if (match)
 			return matches;
 			return matches;
 		matches++;
 		matches++;
 	}
 	}
 	return NULL;
 	return NULL;
 }
 }
+
+/**
+ * of_match_node - Tell if an device_node has a matching of_match structure
+ *	@matches:	array of of device match structures to search in
+ *	@node:		the of device structure to match against
+ *
+ *	Low level utility function used by device matching.
+ */
+const struct of_device_id *of_match_node(const struct of_device_id *matches,
+					 const struct device_node *node)
+{
+	const struct of_device_id *match;
+
+	read_lock(&devtree_lock);
+	match = __of_match_node(matches, node);
+	read_unlock(&devtree_lock);
+	return match;
+}
 EXPORT_SYMBOL(of_match_node);
 EXPORT_SYMBOL(of_match_node);
 
 
 /**
 /**
@@ -595,6 +644,7 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
 					const struct of_device_id **match)
 					const struct of_device_id **match)
 {
 {
 	struct device_node *np;
 	struct device_node *np;
+	const struct of_device_id *m;
 
 
 	if (match)
 	if (match)
 		*match = NULL;
 		*match = NULL;
@@ -602,9 +652,10 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
 	read_lock(&devtree_lock);
 	read_lock(&devtree_lock);
 	np = from ? from->allnext : of_allnodes;
 	np = from ? from->allnext : of_allnodes;
 	for (; np; np = np->allnext) {
 	for (; np; np = np->allnext) {
-		if (of_match_node(matches, np) && of_node_get(np)) {
+		m = __of_match_node(matches, np);
+		if (m && of_node_get(np)) {
 			if (match)
 			if (match)
-				*match = matches;
+				*match = m;
 			break;
 			break;
 		}
 		}
 	}
 	}