devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/17] Move firmware specific code to firmware specific locations
@ 2017-03-06 15:42 Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 01/17] device property: Add operations struct for fwnode operations Sakari Ailus
                   ` (12 more replies)
  0 siblings, 13 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Hi, 

This set moves firmware specific implementations of the device / fwnode
property API to locations that are specific to firmware implementation,
still leaving property set (which isn't really firmware) implementation in
drivers/base/property.c.

The set depends on the ACPI graph support v4 patches I posted a moment
ago.

The patches may be found with dependencies here:

<URL:https://git.linuxtv.org/sailus/media_tree.git/log/?h=acpi-graph-cleaned>

since v1:

- Move the three bugfixes in front of the set into a separate patchset.
  There are no dependencies to those from the rest of the patches.

- Rebase on current ACPI graph support patches (themselves on PM tree
  4.11-rc1 merge).

-- 
Kind regards,
Sakari

In-Reply-To: 


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v2 01/17] device property: Add operations struct for fwnode operations
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 02/17] device property: Add macros for calling " Sakari Ailus
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Prepare moving firmware specific implementations of the fwnode properties
under a common ops struct. This will allow having a single implementation
of firmware independent portions of the fwnode framework.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 include/linux/fwnode.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index cb60f29..ede74fb 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -33,4 +33,53 @@ struct fwnode_endpoint {
 	const struct fwnode_handle *local_fwnode;
 };
 
+/**
+ * struct fwnode_operations - Operations for fwnode interface
+ * @get: Get a reference to an fwnode.
+ * @put: Put a reference to an fwnode.
+ * @property_present: Return true if a property is present.
+ * @property_read_integer_array: Read an array of integer properties. Return
+ *				 zero on success, a negative error code
+ *				 otherwise.
+ * @property_read_string_array: Read an array of string properties. Return zero
+ *				on success, a negative error code otherwise.
+ * @get_parent: Return the parent of an fwnode.
+ * @get_next_child_node: Return the next child node in an iteration.
+ * @get_named_child_node: Return a child node with a given name.
+ * @graph_get_next_endpoint: Return an endpoint node in an iteration.
+ * @graph_get_remote_endpoint: Return the remote endpoint node of an endpoint
+ *			       node.
+ * @graph_get_remote_port: Return the remote port node of an endpoint node.
+ * @graph_get_remote_port_parent: Return the parent of a port node of the
+ *				  remote endpoint node of an endpoint node.
+ */
+struct fwnode_operations {
+	void (*get)(struct fwnode_handle *fwnode);
+	void (*put)(struct fwnode_handle *fwnode);
+	bool (*property_present)(struct fwnode_handle *fwnode,
+				 const char *propname);
+	int (*property_read_int_array)(struct fwnode_handle *fwnode,
+				       const char *propname,
+				       unsigned int elem_size, void *val,
+				       size_t nval);
+	int (*property_read_string_array)(struct fwnode_handle *fwnode_handle,
+					  const char *propname,
+					  const char **val, size_t nval);
+	struct fwnode_handle *(*get_parent)(struct fwnode_handle *fwnode);
+	struct fwnode_handle *(*get_next_child_node)(
+		struct fwnode_handle *fwnode, struct fwnode_handle *child);
+	struct fwnode_handle *(*get_named_child_node)(
+		struct fwnode_handle *fwnode, const char *name);
+	struct fwnode_handle *(*graph_get_next_endpoint)(
+		struct fwnode_handle *fwnode, struct fwnode_handle *prev);
+	struct fwnode_handle *(*graph_get_remote_endpoint)(
+		struct fwnode_handle *fwnode);
+	struct fwnode_handle *(*graph_get_remote_port)(
+		struct fwnode_handle *fwnode);
+	struct fwnode_handle *(*graph_get_remote_port_parent)(
+		struct fwnode_handle *fwnode);
+	int (*graph_parse_endpoint)(struct fwnode_handle *fwnode,
+				    struct fwnode_endpoint *endpoint);
+};
+
 #endif
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 02/17] device property: Add macros for calling fwnode operations
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 01/17] device property: Add operations struct for fwnode operations Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 07/17] device property: Read strings using string array reading functions Sakari Ailus
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Not all implementations may implement all fwnode operations. Instead of
leaving this up to the caller to figure out, add a few macros for the
purpose.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 include/linux/fwnode.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index ede74fb..75e2a00 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -82,4 +82,19 @@ struct fwnode_operations {
 				    struct fwnode_endpoint *endpoint);
 };
 
+#define fwnode_has_op(fwnode, op)				\
+	((fwnode) && (fwnode)->ops && (fwnode)->ops->op)
+#define fwnode_call_int_op(fwnode, op, ...)				\
+	(fwnode ? (fwnode_has_op(fwnode, op) ?				\
+		   (fwnode)->ops->op(fwnode, ## __VA_ARGS__) : -ENXIO) : \
+	 -EINVAL)
+#define fwnode_call_ptr_op(fwnode, op, ...)		\
+	(fwnode_has_op(fwnode, op) ?			\
+	 (fwnode)->ops->op(fwnode, ## __VA_ARGS__) : NULL)
+#define fwnode_call_void_op(fwnode, op, ...)				\
+	do {								\
+		if (fwnode_has_op(fwnode, op))				\
+			(fwnode)->ops->op(fwnode, ## __VA_ARGS__);	\
+	} while (false)
+
 #endif
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 03/17] device property: Introduce firmware property operations, set them
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
@ 2017-03-06 15:42   ` Sakari Ailus
  2017-03-06 15:42   ` [PATCH v2 04/17] device property: Use fwnode_operations for fwnode_handle_{get,put} Sakari Ailus
                     ` (4 subsequent siblings)
  5 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: sudeep.holla-5wv7dgnIgG8, lorenzo.pieralisi-5wv7dgnIgG8,
	mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
	rafael-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A,
	ahs3-H+wXaHxf7aLQT0dZR+AlfA

Add ops field for the firmware operations to struct fwnode_handle. Set the
ops pointer based on firmware type in fwnode initialisation.

Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/acpi/property.c | 3 +++
 drivers/acpi/scan.c     | 1 +
 drivers/base/property.c | 3 +++
 drivers/of/base.c       | 2 ++
 include/linux/acpi.h    | 4 ++++
 include/linux/fwnode.h  | 5 +++++
 include/linux/of.h      | 2 ++
 7 files changed, 20 insertions(+)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 6e776de..0651a74 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -57,6 +57,7 @@ static bool acpi_nondev_subnode_extract(const union acpi_object *desc,
 
 	dn->name = link->package.elements[0].string.pointer;
 	dn->fwnode.type = FWNODE_ACPI_DATA;
+	dn->fwnode.ops = &acpi_fwnode_ops;
 	dn->parent = parent;
 	INIT_LIST_HEAD(&dn->data.subnodes);
 
@@ -1108,3 +1109,5 @@ int acpi_graph_get_remote_endpoint(struct fwnode_handle *fwnode,
 
 	return 0;
 }
+
+const struct fwnode_operations acpi_fwnode_ops;
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 1926918..901720f 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1441,6 +1441,7 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
 	device->handle = handle;
 	device->parent = acpi_bus_get_parent(handle);
 	device->fwnode.type = FWNODE_ACPI;
+	device->fwnode.ops = &acpi_fwnode_ops;
 	acpi_set_device_status(device, sta);
 	acpi_device_get_busid(device);
 	acpi_set_pnp_ids(handle, &device->pnp, type);
diff --git a/drivers/base/property.c b/drivers/base/property.c
index defeba9..e4794bf 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -183,6 +183,8 @@ static int pset_prop_read_string(struct property_set *pset,
 	return 0;
 }
 
+static const struct fwnode_operations pset_fwnode_ops;
+
 /**
  * device_property_present - check if a property of a device is present
  * @dev: Device whose property is being checked
@@ -947,6 +949,7 @@ int device_add_properties(struct device *dev,
 		return PTR_ERR(p);
 
 	p->fwnode.type = FWNODE_PDATA;
+	p->fwnode.ops = &pset_fwnode_ops;
 	set_secondary_fwnode(dev, &p->fwnode);
 	return 0;
 }
diff --git a/drivers/of/base.c b/drivers/of/base.c
index d7c4629..b07af01 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2535,3 +2535,5 @@ struct device_node *of_graph_get_remote_node(const struct device_node *node,
 	return remote;
 }
 EXPORT_SYMBOL(of_graph_get_remote_node);
+
+const struct fwnode_operations of_fwnode_ops;
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 9d920c0..8035af8 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -56,6 +56,9 @@ static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
 	acpi_fwnode_handle(adev) : NULL)
 #define ACPI_HANDLE(dev)		acpi_device_handle(ACPI_COMPANION(dev))
 
+
+extern const struct fwnode_operations acpi_fwnode_ops;
+
 static inline struct fwnode_handle *acpi_alloc_fwnode_static(void)
 {
 	struct fwnode_handle *fwnode;
@@ -65,6 +68,7 @@ static inline struct fwnode_handle *acpi_alloc_fwnode_static(void)
 		return NULL;
 
 	fwnode->type = FWNODE_ACPI_STATIC;
+	fwnode->ops = &acpi_fwnode_ops;
 
 	return fwnode;
 }
diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index 75e2a00..f1ceb43 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -12,6 +12,8 @@
 #ifndef _LINUX_FWNODE_H_
 #define _LINUX_FWNODE_H_
 
+#include <linux/types.h>
+
 enum fwnode_type {
 	FWNODE_INVALID = 0,
 	FWNODE_OF,
@@ -22,9 +24,12 @@ enum fwnode_type {
 	FWNODE_IRQCHIP
 };
 
+struct fwnode_operations;
+
 struct fwnode_handle {
 	enum fwnode_type type;
 	struct fwnode_handle *secondary;
+	const struct fwnode_operations *ops;
 };
 
 struct fwnode_endpoint {
diff --git a/include/linux/of.h b/include/linux/of.h
index c05fe25..652d2d4 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -100,10 +100,12 @@ struct of_reconfig_data {
 
 /* initialize a node */
 extern struct kobj_type of_node_ktype;
+extern const struct fwnode_operations of_fwnode_ops;
 static inline void of_node_init(struct device_node *node)
 {
 	kobject_init(&node->kobj, &of_node_ktype);
 	node->fwnode.type = FWNODE_OF;
+	node->fwnode.ops = &of_fwnode_ops;
 }
 
 /* true when node is initialized */
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 04/17] device property: Use fwnode_operations for fwnode_handle_{get,put}
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
  2017-03-06 15:42   ` [PATCH v2 03/17] device property: Introduce firmware property operations, set them Sakari Ailus
@ 2017-03-06 15:42   ` Sakari Ailus
  2017-03-06 15:42   ` [PATCH v2 05/17] device property: Use fwnode_operations for fwnode_property_present() Sakari Ailus
                     ` (3 subsequent siblings)
  5 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: sudeep.holla-5wv7dgnIgG8, lorenzo.pieralisi-5wv7dgnIgG8,
	mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
	rafael-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A,
	ahs3-H+wXaHxf7aLQT0dZR+AlfA

Change the implementation of fwnode_handle_get() and fwnode_handle_put()
to use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/base/property.c |  6 ++----
 drivers/of/base.c       | 15 ++++++++++++++-
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index e4794bf..faa4fa6 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1098,8 +1098,7 @@ EXPORT_SYMBOL_GPL(device_get_named_child_node);
  */
 void fwnode_handle_get(struct fwnode_handle *fwnode)
 {
-	if (is_of_node(fwnode))
-		of_node_get(to_of_node(fwnode));
+	fwnode_call_void_op(fwnode, get);
 }
 EXPORT_SYMBOL_GPL(fwnode_handle_get);
 
@@ -1113,8 +1112,7 @@ EXPORT_SYMBOL_GPL(fwnode_handle_get);
  */
 void fwnode_handle_put(struct fwnode_handle *fwnode)
 {
-	if (is_of_node(fwnode))
-		of_node_put(to_of_node(fwnode));
+	fwnode_call_void_op(fwnode, put);
 }
 EXPORT_SYMBOL_GPL(fwnode_handle_put);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index b07af01..c18da80 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2536,4 +2536,17 @@ struct device_node *of_graph_get_remote_node(const struct device_node *node,
 }
 EXPORT_SYMBOL(of_graph_get_remote_node);
 
-const struct fwnode_operations of_fwnode_ops;
+static void of_fwnode_get(struct fwnode_handle *fwnode)
+{
+	of_node_get(to_of_node(fwnode));
+}
+
+static void of_fwnode_put(struct fwnode_handle *fwnode)
+{
+	of_node_put(to_of_node(fwnode));
+}
+
+const struct fwnode_operations of_fwnode_ops = {
+	.get = of_fwnode_get,
+	.put = of_fwnode_put,
+};
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 05/17] device property: Use fwnode_operations for fwnode_property_present()
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
  2017-03-06 15:42   ` [PATCH v2 03/17] device property: Introduce firmware property operations, set them Sakari Ailus
  2017-03-06 15:42   ` [PATCH v2 04/17] device property: Use fwnode_operations for fwnode_handle_{get,put} Sakari Ailus
@ 2017-03-06 15:42   ` Sakari Ailus
  2017-03-06 15:42   ` [PATCH v2 06/17] device property: Use fwnode_operations for reading integer arrays Sakari Ailus
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: sudeep.holla-5wv7dgnIgG8, lorenzo.pieralisi-5wv7dgnIgG8,
	mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
	rafael-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A,
	ahs3-H+wXaHxf7aLQT0dZR+AlfA

Change the implementation of fwnode_property_present() to use struct
fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/acpi/property.c | 10 +++++++++-
 drivers/base/property.c | 27 ++++++++++++---------------
 drivers/of/base.c       |  7 +++++++
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 0651a74..14b96ec 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1110,4 +1110,12 @@ int acpi_graph_get_remote_endpoint(struct fwnode_handle *fwnode,
 	return 0;
 }
 
-const struct fwnode_operations acpi_fwnode_ops;
+static bool acpi_fwnode_property_present(struct fwnode_handle *fwnode,
+					 const char *propname)
+{
+	return !acpi_node_prop_get(fwnode, propname, NULL);
+}
+
+const struct fwnode_operations acpi_fwnode_ops = {
+	.property_present = acpi_fwnode_property_present,
+};
diff --git a/drivers/base/property.c b/drivers/base/property.c
index faa4fa6..e150df0 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -183,7 +183,15 @@ static int pset_prop_read_string(struct property_set *pset,
 	return 0;
 }
 
-static const struct fwnode_operations pset_fwnode_ops;
+static bool pset_fwnode_property_present(struct fwnode_handle *fwnode,
+					 const char *propname)
+{
+	return !!pset_prop_get(to_pset_node(fwnode), propname);
+}
+
+static const struct fwnode_operations pset_fwnode_ops = {
+	.property_present = pset_fwnode_property_present,
+};
 
 /**
  * device_property_present - check if a property of a device is present
@@ -198,18 +206,6 @@ bool device_property_present(struct device *dev, const char *propname)
 }
 EXPORT_SYMBOL_GPL(device_property_present);
 
-static bool __fwnode_property_present(struct fwnode_handle *fwnode,
-				      const char *propname)
-{
-	if (is_of_node(fwnode))
-		return of_property_read_bool(to_of_node(fwnode), propname);
-	else if (is_acpi_node(fwnode))
-		return !acpi_node_prop_get(fwnode, propname, NULL);
-	else if (is_pset_node(fwnode))
-		return !!pset_prop_get(to_pset_node(fwnode), propname);
-	return false;
-}
-
 /**
  * fwnode_property_present - check if a property of a firmware node is present
  * @fwnode: Firmware node whose property to check
@@ -219,10 +215,11 @@ bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
 {
 	bool ret;
 
-	ret = __fwnode_property_present(fwnode, propname);
+	ret = fwnode_call_int_op(fwnode, property_present, propname);
 	if (ret == false && !IS_ERR_OR_NULL(fwnode) &&
 	    !IS_ERR_OR_NULL(fwnode->secondary))
-		ret = __fwnode_property_present(fwnode->secondary, propname);
+		ret = fwnode_call_int_op(fwnode->secondary, property_present,
+					 propname);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(fwnode_property_present);
diff --git a/drivers/of/base.c b/drivers/of/base.c
index c18da80..46e0b2a 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2546,7 +2546,14 @@ static void of_fwnode_put(struct fwnode_handle *fwnode)
 	of_node_put(to_of_node(fwnode));
 }
 
+static bool of_fwnode_property_present(struct fwnode_handle *fwnode,
+				       const char *propname)
+{
+	return of_property_read_bool(to_of_node(fwnode), propname);
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
+	.property_present = of_fwnode_property_present,
 };
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 06/17] device property: Use fwnode_operations for reading integer arrays
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
                     ` (2 preceding siblings ...)
  2017-03-06 15:42   ` [PATCH v2 05/17] device property: Use fwnode_operations for fwnode_property_present() Sakari Ailus
@ 2017-03-06 15:42   ` Sakari Ailus
  2017-03-06 15:42   ` [PATCH v2 09/17] device property: Use fwnode_operations for obtaining parent node Sakari Ailus
  2017-03-13 22:27   ` [PATCH v2 00/17] Move firmware specific code to firmware specific locations Rafael J. Wysocki
  5 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: sudeep.holla-5wv7dgnIgG8, lorenzo.pieralisi-5wv7dgnIgG8,
	mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
	rafael-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A,
	ahs3-H+wXaHxf7aLQT0dZR+AlfA

Change the implementation of fwnode_property_read_*_array() class of
functions to use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/acpi/property.c | 27 +++++++++++++++
 drivers/base/property.c | 92 ++++++++++++++++++++++++++-----------------------
 drivers/of/base.c       | 25 ++++++++++++++
 3 files changed, 100 insertions(+), 44 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 14b96ec..b84d0e5 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1116,6 +1116,33 @@ static bool acpi_fwnode_property_present(struct fwnode_handle *fwnode,
 	return !acpi_node_prop_get(fwnode, propname, NULL);
 }
 
+static int acpi_fwnode_property_read_int_array(
+	struct fwnode_handle *fwnode, const char *propname,
+	unsigned int elem_size, void *val, size_t nval)
+{
+	enum dev_prop_type type;
+
+	switch (elem_size) {
+	case sizeof(u8):
+		type = DEV_PROP_U8;
+		break;
+	case sizeof(u16):
+		type = DEV_PROP_U16;
+		break;
+	case sizeof(u32):
+		type = DEV_PROP_U32;
+		break;
+	case sizeof(u64):
+		type = DEV_PROP_U64;
+		break;
+	default:
+		return -ENXIO;
+	}
+
+	return acpi_node_prop_read(fwnode, propname, type, val, nval);
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
+	.property_read_int_array = acpi_fwnode_property_read_int_array,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index e150df0..77a1657 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -189,8 +189,32 @@ static bool pset_fwnode_property_present(struct fwnode_handle *fwnode,
 	return !!pset_prop_get(to_pset_node(fwnode), propname);
 }
 
+static int pset_fwnode_read_int_array(
+	struct fwnode_handle *fwnode, const char *propname,
+	unsigned int elem_size, void *val, size_t nval)
+{
+	struct property_set *node = to_pset_node(fwnode);
+
+	if (!val)
+		return pset_prop_count_elems_of_size(node, propname, elem_size);
+
+	switch (elem_size) {
+	case sizeof(u8):
+		return pset_prop_read_u8_array(node, propname, val, nval);
+	case sizeof(u16):
+		return pset_prop_read_u16_array(node, propname, val, nval);
+	case sizeof(u32):
+		return pset_prop_read_u32_array(node, propname, val, nval);
+	case sizeof(u64):
+		return pset_prop_read_u64_array(node, propname, val, nval);
+	}
+
+	return -ENXIO;
+}
+
 static const struct fwnode_operations pset_fwnode_ops = {
 	.property_present = pset_fwnode_property_present,
+	.property_read_int_array = pset_fwnode_read_int_array,
 };
 
 /**
@@ -393,42 +417,22 @@ int device_property_match_string(struct device *dev, const char *propname,
 }
 EXPORT_SYMBOL_GPL(device_property_match_string);
 
-#define OF_DEV_PROP_READ_ARRAY(node, propname, type, val, nval)				\
-	(val) ? of_property_read_##type##_array((node), (propname), (val), (nval))	\
-	      : of_property_count_elems_of_size((node), (propname), sizeof(type))
-
-#define PSET_PROP_READ_ARRAY(node, propname, type, val, nval)				\
-	(val) ? pset_prop_read_##type##_array((node), (propname), (val), (nval))	\
-	      : pset_prop_count_elems_of_size((node), (propname), sizeof(type))
-
-#define FWNODE_PROP_READ(_fwnode_, _propname_, _type_, _proptype_, _val_, _nval_)	\
-({											\
-	int _ret_;									\
-	if (is_of_node(_fwnode_))							\
-		_ret_ = OF_DEV_PROP_READ_ARRAY(to_of_node(_fwnode_), _propname_,	\
-					       _type_, _val_, _nval_);			\
-	else if (is_acpi_node(_fwnode_))						\
-		_ret_ = acpi_node_prop_read(_fwnode_, _propname_, _proptype_,		\
-					    _val_, _nval_);				\
-	else if (is_pset_node(_fwnode_)) 						\
-		_ret_ = PSET_PROP_READ_ARRAY(to_pset_node(_fwnode_), _propname_,	\
-					     _type_, _val_, _nval_);			\
-	else										\
-		_ret_ = -ENXIO;								\
-	_ret_;										\
-})
-
-#define FWNODE_PROP_READ_ARRAY(_fwnode_, _propname_, _type_, _proptype_, _val_, _nval_)	\
-({											\
-	int _ret_;									\
-	_ret_ = FWNODE_PROP_READ(_fwnode_, _propname_, _type_, _proptype_,		\
-				 _val_, _nval_);					\
-	if (_ret_ == -EINVAL && !IS_ERR_OR_NULL(_fwnode_) &&				\
-	    !IS_ERR_OR_NULL(_fwnode_->secondary))					\
-		_ret_ = FWNODE_PROP_READ(_fwnode_->secondary, _propname_, _type_,	\
-				_proptype_, _val_, _nval_);				\
-	_ret_;										\
-})
+static int fwnode_property_read_int_array(
+	struct fwnode_handle *fwnode, const char *propname,
+	unsigned int elem_size, void *val, size_t nval)
+{
+	int ret;
+
+	ret = fwnode_call_int_op(fwnode, property_read_int_array, propname,
+				 elem_size, val, nval);
+	if (ret == -EINVAL && !IS_ERR_OR_NULL(fwnode) &&
+	    !IS_ERR_OR_NULL(fwnode->secondary))
+		ret = fwnode_call_int_op(
+			fwnode->secondary, property_read_int_array, propname,
+			elem_size, val, nval);
+
+	return ret;
+}
 
 /**
  * fwnode_property_read_u8_array - return a u8 array property of firmware node
@@ -451,8 +455,8 @@ EXPORT_SYMBOL_GPL(device_property_match_string);
 int fwnode_property_read_u8_array(struct fwnode_handle *fwnode,
 				  const char *propname, u8 *val, size_t nval)
 {
-	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u8, DEV_PROP_U8,
-				      val, nval);
+	return fwnode_property_read_int_array(fwnode, propname, sizeof(u8),
+					      val, nval);
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_u8_array);
 
@@ -477,8 +481,8 @@ EXPORT_SYMBOL_GPL(fwnode_property_read_u8_array);
 int fwnode_property_read_u16_array(struct fwnode_handle *fwnode,
 				   const char *propname, u16 *val, size_t nval)
 {
-	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u16, DEV_PROP_U16,
-				      val, nval);
+	return fwnode_property_read_int_array(fwnode, propname, sizeof(u16),
+					      val, nval);
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_u16_array);
 
@@ -503,8 +507,8 @@ EXPORT_SYMBOL_GPL(fwnode_property_read_u16_array);
 int fwnode_property_read_u32_array(struct fwnode_handle *fwnode,
 				   const char *propname, u32 *val, size_t nval)
 {
-	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u32, DEV_PROP_U32,
-				      val, nval);
+	return fwnode_property_read_int_array(fwnode, propname, sizeof(u32),
+					      val, nval);
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_u32_array);
 
@@ -529,8 +533,8 @@ EXPORT_SYMBOL_GPL(fwnode_property_read_u32_array);
 int fwnode_property_read_u64_array(struct fwnode_handle *fwnode,
 				   const char *propname, u64 *val, size_t nval)
 {
-	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u64, DEV_PROP_U64,
-				      val, nval);
+	return fwnode_property_read_int_array(fwnode, propname, sizeof(u64),
+					      val, nval);
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_u64_array);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 46e0b2a..31caa48 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2552,8 +2552,33 @@ static bool of_fwnode_property_present(struct fwnode_handle *fwnode,
 	return of_property_read_bool(to_of_node(fwnode), propname);
 }
 
+static int of_fwnode_property_read_int_array(
+	struct fwnode_handle *fwnode, const char *propname,
+	unsigned int elem_size, void *val, size_t nval)
+{
+	struct device_node *node = to_of_node(fwnode);
+
+	if (!val)
+		return of_property_count_elems_of_size(node, propname,
+						       elem_size);
+
+	switch (elem_size) {
+	case sizeof(u8):
+		return of_property_read_u8_array(node, propname, val, nval);
+	case sizeof(u16):
+		return of_property_read_u16_array(node, propname, val, nval);
+	case sizeof(u32):
+		return of_property_read_u32_array(node, propname, val, nval);
+	case sizeof(u64):
+		return of_property_read_u64_array(node, propname, val, nval);
+	}
+
+	return -ENXIO;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
 	.property_present = of_fwnode_property_present,
+	.property_read_int_array = of_fwnode_property_read_int_array,
 };
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 07/17] device property: Read strings using string array reading functions
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 01/17] device property: Add operations struct for fwnode operations Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 02/17] device property: Add macros for calling " Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 08/17] device property: Use fwnode_operations for reading string arrays Sakari Ailus
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Always read strings using of_property_read_string_array() instead of
of_property_read_string(). This allows using a single operation struct
callback for accessing strings.

Same for pset_prop_read_string_array() and pset_prop_read_string().

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/base/property.c | 47 +----------------------------------------------
 1 file changed, 1 insertion(+), 46 deletions(-)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index 77a1657..2ee09a1 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -158,31 +158,6 @@ static int pset_prop_read_string_array(struct property_set *pset,
 	return 0;
 }
 
-static int pset_prop_read_string(struct property_set *pset,
-				 const char *propname, const char **strings)
-{
-	const struct property_entry *prop;
-	const char * const *pointer;
-
-	prop = pset_prop_get(pset, propname);
-	if (!prop)
-		return -EINVAL;
-	if (!prop->is_string)
-		return -EILSEQ;
-	if (prop->is_array) {
-		pointer = prop->pointer.str;
-		if (!pointer)
-			return -ENODATA;
-	} else {
-		pointer = &prop->value.str;
-		if (*pointer && strnlen(*pointer, prop->length) >= prop->length)
-			return -EILSEQ;
-	}
-
-	*strings = *pointer;
-	return 0;
-}
-
 static bool pset_fwnode_property_present(struct fwnode_handle *fwnode,
 					 const char *propname)
 {
@@ -586,19 +561,6 @@ static int __fwnode_property_read_string_array(struct fwnode_handle *fwnode,
 	return -ENXIO;
 }
 
-static int __fwnode_property_read_string(struct fwnode_handle *fwnode,
-					 const char *propname, const char **val)
-{
-	if (is_of_node(fwnode))
-		return of_property_read_string(to_of_node(fwnode), propname, val);
-	else if (is_acpi_node(fwnode))
-		return acpi_node_prop_read(fwnode, propname, DEV_PROP_STRING,
-					   val, 1);
-	else if (is_pset_node(fwnode))
-		return pset_prop_read_string(to_pset_node(fwnode), propname, val);
-	return -ENXIO;
-}
-
 /**
  * fwnode_property_read_string_array - return string array property of a node
  * @fwnode: Firmware node to get the property of
@@ -650,14 +612,7 @@ EXPORT_SYMBOL_GPL(fwnode_property_read_string_array);
 int fwnode_property_read_string(struct fwnode_handle *fwnode,
 				const char *propname, const char **val)
 {
-	int ret;
-
-	ret = __fwnode_property_read_string(fwnode, propname, val);
-	if (ret == -EINVAL && !IS_ERR_OR_NULL(fwnode) &&
-	    !IS_ERR_OR_NULL(fwnode->secondary))
-		ret = __fwnode_property_read_string(fwnode->secondary,
-						    propname, val);
-	return ret;
+	return fwnode_property_read_string_array(fwnode, propname, val, 1);
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_string);
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 08/17] device property: Use fwnode_operations for reading string arrays
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (2 preceding siblings ...)
  2017-03-06 15:42 ` [PATCH v2 07/17] device property: Read strings using string array reading functions Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 10/17] device property: Use fwnode_operations for obtaining next child node Sakari Ailus
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_property_read_string_array() function
to use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c |  9 ++++++
 drivers/base/property.c | 81 ++++++++++++++++++-------------------------------
 drivers/of/base.c       | 22 ++++++++++++++
 3 files changed, 61 insertions(+), 51 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index b84d0e5..4e76b31 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1142,7 +1142,16 @@ static int acpi_fwnode_property_read_int_array(
 	return acpi_node_prop_read(fwnode, propname, type, val, nval);
 }
 
+static int acpi_fwnode_property_read_string_array(
+	struct fwnode_handle *fwnode, const char *propname, const char **val,
+	size_t nval)
+{
+	return acpi_node_prop_read(fwnode, propname, DEV_PROP_STRING,
+				   val, nval);
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
+	.property_read_string_array = acpi_fwnode_property_read_string_array,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 2ee09a1..62bd59d 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -187,9 +187,34 @@ static int pset_fwnode_read_int_array(
 	return -ENXIO;
 }
 
+static int pset_fwnode_property_read_string_array(
+	struct fwnode_handle *fwnode, const char *propname, const char **val,
+	size_t nval)
+{
+	struct property_set *node = to_pset_node(fwnode);
+	const struct property_entry *prop;
+
+	/* Read properties if val is non-NULL */
+	if (val)
+		return pset_prop_read_string_array(node, propname, val, nval);
+
+	prop = pset_prop_get(node, propname);
+	if (!prop)
+		return -EINVAL;
+
+	/* The array length for a non-array string property is 1. */
+	if (!prop->is_array)
+		return 1;
+
+	/* Return the length of an array. */
+	return pset_prop_count_elems_of_size(node, propname,
+					     sizeof(const char *));
+}
+
 static const struct fwnode_operations pset_fwnode_ops = {
 	.property_present = pset_fwnode_property_present,
 	.property_read_int_array = pset_fwnode_read_int_array,
+	.property_read_string_array = pset_fwnode_property_read_string_array,
 };
 
 /**
@@ -513,54 +538,6 @@ int fwnode_property_read_u64_array(struct fwnode_handle *fwnode,
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_u64_array);
 
-static int __fwnode_property_read_string_array(struct fwnode_handle *fwnode,
-					       const char *propname,
-					       const char **val, size_t nval)
-{
-	if (is_of_node(fwnode)) {
-		int rval;
-
-		if (!val)
-			return of_property_count_strings(to_of_node(fwnode),
-							 propname);
-
-		rval = of_property_read_string_array(to_of_node(fwnode),
-						     propname, val, nval);
-
-		if (rval < 0)
-			return rval;
-
-		if (rval == nval)
-			return 0;
-
-		return -EOVERFLOW;
-	} else if (is_acpi_node(fwnode))
-		return acpi_node_prop_read(fwnode, propname, DEV_PROP_STRING,
-					   val, nval);
-	else if (is_pset_node(fwnode)) {
-		struct property_set *node = to_pset_node(fwnode);
-		struct property_entry *prop;
-
-		/* Read properties if val is non-NULL */
-		if (val)
-			return pset_prop_read_string_array(node, propname,
-							   val, nval);
-
-		prop = pset_prop_get(node, propname);
-		if (!prop)
-			return -EINVAL;
-
-		/* The array length for a non-array string property is 1. */
-		if (!prop->is_array)
-			return 1;
-
-		/* Return the length of an array. */
-		return pset_prop_count_elems_of_size(node, propname,
-						     sizeof(const char *));
-	}
-	return -ENXIO;
-}
-
 /**
  * fwnode_property_read_string_array - return string array property of a node
  * @fwnode: Firmware node to get the property of
@@ -585,11 +562,13 @@ int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
 {
 	int ret;
 
-	ret = __fwnode_property_read_string_array(fwnode, propname, val, nval);
+	ret = fwnode_call_int_op(fwnode, property_read_string_array, propname,
+				 val, nval);
 	if (ret == -EINVAL && !IS_ERR_OR_NULL(fwnode) &&
 	    !IS_ERR_OR_NULL(fwnode->secondary))
-		ret = __fwnode_property_read_string_array(fwnode->secondary,
-							  propname, val, nval);
+		ret = fwnode_call_int_op(fwnode->secondary,
+					 property_read_string_array, propname,
+					 val, nval);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(fwnode_property_read_string_array);
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 31caa48..18e51b5 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2576,9 +2576,31 @@ static int of_fwnode_property_read_int_array(
 	return -ENXIO;
 }
 
+static int of_fwnode_property_read_string_array(
+	struct fwnode_handle *fwnode, const char *propname,
+	const char **val, size_t nval)
+{
+	struct device_node *node = to_of_node(fwnode);
+	int rval;
+
+	if (!val)
+		return of_property_count_strings(node, propname);
+
+	rval = of_property_read_string_array(node, propname, val, nval);
+
+	if (rval < 0)
+		return rval;
+
+	if (rval == nval)
+		return 0;
+
+	return -EOVERFLOW;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
 	.property_present = of_fwnode_property_present,
 	.property_read_int_array = of_fwnode_property_read_int_array,
+	.property_read_string_array = of_fwnode_property_read_string_array,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 09/17] device property: Use fwnode_operations for obtaining parent node
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
                     ` (3 preceding siblings ...)
  2017-03-06 15:42   ` [PATCH v2 06/17] device property: Use fwnode_operations for reading integer arrays Sakari Ailus
@ 2017-03-06 15:42   ` Sakari Ailus
  2017-03-13 22:27   ` [PATCH v2 00/17] Move firmware specific code to firmware specific locations Rafael J. Wysocki
  5 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: sudeep.holla-5wv7dgnIgG8, lorenzo.pieralisi-5wv7dgnIgG8,
	mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
	rafael-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A,
	ahs3-H+wXaHxf7aLQT0dZR+AlfA

Change the implementation of fwnode_property_get_parent() function to use
struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/acpi/property.c |  7 +++++++
 drivers/base/property.c | 14 +-------------
 drivers/of/base.c       | 12 ++++++++++++
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 4e76b31..a20b81f 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1150,8 +1150,15 @@ static int acpi_fwnode_property_read_string_array(
 				   val, nval);
 }
 
+static struct fwnode_handle *acpi_fwnode_get_parent(
+	struct fwnode_handle *fwnode)
+{
+	return acpi_node_get_parent(fwnode);
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
 	.property_read_string_array = acpi_fwnode_property_read_string_array,
+	.get_parent = acpi_fwnode_get_parent,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 62bd59d..f8ac9f2 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -928,19 +928,7 @@ EXPORT_SYMBOL_GPL(fwnode_get_next_parent);
  */
 struct fwnode_handle *fwnode_get_parent(struct fwnode_handle *fwnode)
 {
-	struct fwnode_handle *parent = NULL;
-
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_get_parent(to_of_node(fwnode));
-		if (node)
-			parent = &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		parent = acpi_node_get_parent(fwnode);
-	}
-
-	return parent;
+	return fwnode_call_ptr_op(fwnode, get_parent);
 }
 EXPORT_SYMBOL_GPL(fwnode_get_parent);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 18e51b5..190107b 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2597,10 +2597,22 @@ static int of_fwnode_property_read_string_array(
 	return -EOVERFLOW;
 }
 
+static struct fwnode_handle *of_fwnode_get_parent(struct fwnode_handle *fwnode)
+{
+	struct device_node *node;
+
+	node = of_get_parent(to_of_node(fwnode));
+	if (node)
+		return of_fwnode_handle(node);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
 	.property_present = of_fwnode_property_present,
 	.property_read_int_array = of_fwnode_property_read_int_array,
 	.property_read_string_array = of_fwnode_property_read_string_array,
+	.get_parent = of_fwnode_get_parent,
 };
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 10/17] device property: Use fwnode_operations for obtaining next child node
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (3 preceding siblings ...)
  2017-03-06 15:42 ` [PATCH v2 08/17] device property: Use fwnode_operations for reading string arrays Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 11/17] device property: Use fwnode_operations for obtaining a named " Sakari Ailus
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_property_get_parent() function to use
struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c |  1 +
 drivers/base/property.c | 13 +------------
 drivers/of/base.c       | 14 ++++++++++++++
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index a20b81f..fc1d5da 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1161,4 +1161,5 @@ const struct fwnode_operations acpi_fwnode_ops = {
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
 	.property_read_string_array = acpi_fwnode_property_read_string_array,
 	.get_parent = acpi_fwnode_get_parent,
+	.get_next_child_node = acpi_get_next_subnode,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index f8ac9f2..382463b 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -940,18 +940,7 @@ EXPORT_SYMBOL_GPL(fwnode_get_parent);
 struct fwnode_handle *fwnode_get_next_child_node(struct fwnode_handle *fwnode,
 						 struct fwnode_handle *child)
 {
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_get_next_available_child(to_of_node(fwnode),
-						   to_of_node(child));
-		if (node)
-			return &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		return acpi_get_next_subnode(fwnode, child);
-	}
-
-	return NULL;
+	return fwnode_call_ptr_op(fwnode, get_next_child_node, child);
 }
 EXPORT_SYMBOL_GPL(fwnode_get_next_child_node);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 190107b..aabb063 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2608,6 +2608,19 @@ static struct fwnode_handle *of_fwnode_get_parent(struct fwnode_handle *fwnode)
 	return NULL;
 }
 
+static struct fwnode_handle *of_fwnode_get_next_child_node(
+	struct fwnode_handle *fwnode, struct fwnode_handle *child)
+{
+	struct device_node *node;
+
+	node = of_get_next_available_child(to_of_node(fwnode),
+					   to_of_node(child));
+	if (node)
+		return of_fwnode_handle(node);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2615,4 +2628,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.property_read_int_array = of_fwnode_property_read_int_array,
 	.property_read_string_array = of_fwnode_property_read_string_array,
 	.get_parent = of_fwnode_get_parent,
+	.get_next_child_node = of_fwnode_get_next_child_node,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 11/17] device property: Use fwnode_operations for obtaining a named child node
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (4 preceding siblings ...)
  2017-03-06 15:42 ` [PATCH v2 10/17] device property: Use fwnode_operations for obtaining next child node Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 12/17] device property: Use fwnode_operations for obtaining next graph endpoint Sakari Ailus
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_property_get_parent() function to use
struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c | 17 +++++++++++++++++
 drivers/base/property.c | 18 +-----------------
 drivers/of/base.c       | 14 ++++++++++++++
 3 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index fc1d5da..b704a33 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1156,10 +1156,27 @@ static struct fwnode_handle *acpi_fwnode_get_parent(
 	return acpi_node_get_parent(fwnode);
 }
 
+static struct fwnode_handle *acpi_fwnode_get_named_child_node(
+	struct fwnode_handle *fwnode, const char *childname)
+{
+	struct fwnode_handle *child;
+
+	/*
+	 * Find first matching named child node of this fwnode.
+	 * For ACPI this will be a data only sub-node.
+	 */
+	fwnode_for_each_child_node(fwnode, child)
+		if (acpi_data_node_match(child, childname))
+			return child;
+
+	return NULL;
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
 	.property_read_string_array = acpi_fwnode_property_read_string_array,
 	.get_parent = acpi_fwnode_get_parent,
 	.get_next_child_node = acpi_get_next_subnode,
+	.get_named_child_node = acpi_fwnode_get_named_child_node,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 382463b..33dc5b1 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -972,23 +972,7 @@ EXPORT_SYMBOL_GPL(device_get_next_child_node);
 struct fwnode_handle *fwnode_get_named_child_node(struct fwnode_handle *fwnode,
 						  const char *childname)
 {
-	struct fwnode_handle *child;
-
-	/*
-	 * Find first matching named child node of this fwnode.
-	 * For ACPI this will be a data only sub-node.
-	 */
-	fwnode_for_each_child_node(fwnode, child) {
-		if (is_of_node(child)) {
-			if (!of_node_cmp(to_of_node(child)->name, childname))
-				return child;
-		} else if (is_acpi_data_node(child)) {
-			if (acpi_data_node_match(child, childname))
-				return child;
-		}
-	}
-
-	return NULL;
+	return fwnode_call_ptr_op(fwnode, get_named_child_node, childname);
 }
 EXPORT_SYMBOL_GPL(fwnode_get_named_child_node);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index aabb063..6cde727 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2621,6 +2621,19 @@ static struct fwnode_handle *of_fwnode_get_next_child_node(
 	return NULL;
 }
 
+static struct fwnode_handle *of_fwnode_get_named_child_node(
+	struct fwnode_handle *fwnode, const char *childname)
+{
+	struct device_node *node = to_of_node(fwnode);
+	struct device_node *child;
+
+	for_each_available_child_of_node(node, child)
+		if (!of_node_cmp(child->name, childname))
+			return of_fwnode_handle(child);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2629,4 +2642,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.property_read_string_array = of_fwnode_property_read_string_array,
 	.get_parent = of_fwnode_get_parent,
 	.get_next_child_node = of_fwnode_get_next_child_node,
+	.get_named_child_node = of_fwnode_get_named_child_node,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 12/17] device property: Use fwnode_operations for obtaining next graph endpoint
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (5 preceding siblings ...)
  2017-03-06 15:42 ` [PATCH v2 11/17] device property: Use fwnode_operations for obtaining a named " Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:42 ` [PATCH v2 13/17] device property: Use fwnode_operations for obtaining the remote endpoint Sakari Ailus
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_graph_get_next_endpoint() function to
use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c | 13 +++++++++++++
 drivers/base/property.c | 19 +------------------
 drivers/of/base.c       | 14 ++++++++++++++
 3 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index b704a33..bf7b7f0 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1172,6 +1172,18 @@ static struct fwnode_handle *acpi_fwnode_get_named_child_node(
 	return NULL;
 }
 
+static struct fwnode_handle *acpi_fwnode_graph_get_next_endpoint(
+	struct fwnode_handle *fwnode, struct fwnode_handle *prev)
+{
+	struct fwnode_handle *endpoint;
+
+	endpoint = acpi_graph_get_next_endpoint(fwnode, prev);
+	if (IS_ERR(endpoint))
+		return NULL;
+
+	return endpoint;
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
@@ -1179,4 +1191,5 @@ const struct fwnode_operations acpi_fwnode_ops = {
 	.get_parent = acpi_fwnode_get_parent,
 	.get_next_child_node = acpi_get_next_subnode,
 	.get_named_child_node = acpi_fwnode_get_named_child_node,
+	.graph_get_next_endpoint = acpi_fwnode_graph_get_next_endpoint,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 33dc5b1..d305f70 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1147,24 +1147,7 @@ struct fwnode_handle *
 fwnode_graph_get_next_endpoint(struct fwnode_handle *fwnode,
 			       struct fwnode_handle *prev)
 {
-	struct fwnode_handle *endpoint = NULL;
-
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_graph_get_next_endpoint(to_of_node(fwnode),
-						  to_of_node(prev));
-
-		if (node)
-			endpoint = &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		endpoint = acpi_graph_get_next_endpoint(fwnode, prev);
-		if (IS_ERR(endpoint))
-			endpoint = NULL;
-	}
-
-	return endpoint;
-
+	return fwnode_call_ptr_op(fwnode, graph_get_next_endpoint, prev);
 }
 EXPORT_SYMBOL_GPL(fwnode_graph_get_next_endpoint);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 6cde727..3e4be6e 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2634,6 +2634,19 @@ static struct fwnode_handle *of_fwnode_get_named_child_node(
 	return NULL;
 }
 
+static struct fwnode_handle *of_fwnode_graph_get_next_endpoint(
+	struct fwnode_handle *fwnode, struct fwnode_handle *prev)
+{
+	struct device_node *node;
+
+	node = of_graph_get_next_endpoint(to_of_node(fwnode),
+					  to_of_node(prev));
+	if (node)
+		return of_fwnode_handle(node);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2643,4 +2656,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.get_parent = of_fwnode_get_parent,
 	.get_next_child_node = of_fwnode_get_next_child_node,
 	.get_named_child_node = of_fwnode_get_named_child_node,
+	.graph_get_next_endpoint = of_fwnode_graph_get_next_endpoint,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 13/17] device property: Use fwnode_operations for obtaining the remote endpoint
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (6 preceding siblings ...)
  2017-03-06 15:42 ` [PATCH v2 12/17] device property: Use fwnode_operations for obtaining next graph endpoint Sakari Ailus
@ 2017-03-06 15:42 ` Sakari Ailus
  2017-03-06 15:43 ` [PATCH v2 14/17] device property: Use fwnode_operations for obtaining the remote port Sakari Ailus
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:42 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_graph_get_remote_endpoint() function to
use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c | 11 +++++++++++
 drivers/base/property.c | 20 +-------------------
 drivers/of/base.c       | 13 +++++++++++++
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index bf7b7f0..39bffd3 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1184,6 +1184,16 @@ static struct fwnode_handle *acpi_fwnode_graph_get_next_endpoint(
 	return endpoint;
 }
 
+static struct fwnode_handle *acpi_fwnode_graph_get_remote_endpoint(
+	struct fwnode_handle *fwnode)
+{
+	struct fwnode_handle *endpoint = NULL;
+
+	acpi_graph_get_remote_endpoint(fwnode, NULL, NULL, &endpoint);
+
+	return endpoint;
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
@@ -1192,4 +1202,5 @@ const struct fwnode_operations acpi_fwnode_ops = {
 	.get_next_child_node = acpi_get_next_subnode,
 	.get_named_child_node = acpi_fwnode_get_named_child_node,
 	.graph_get_next_endpoint = acpi_fwnode_graph_get_next_endpoint,
+	.graph_get_remote_endpoint = acpi_fwnode_graph_get_remote_endpoint,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index d305f70..32b68a1 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1218,25 +1218,7 @@ EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_port);
 struct fwnode_handle *
 fwnode_graph_get_remote_endpoint(struct fwnode_handle *fwnode)
 {
-	struct fwnode_handle *endpoint = NULL;
-
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_parse_phandle(to_of_node(fwnode), "remote-endpoint",
-					0);
-		if (node)
-			endpoint = &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		int ret;
-
-		ret = acpi_graph_get_remote_endpoint(fwnode, NULL, NULL,
-						     &endpoint);
-		if (ret)
-			return NULL;
-	}
-
-	return endpoint;
+	return fwnode_call_ptr_op(fwnode, graph_get_remote_endpoint);
 }
 EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_endpoint);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 3e4be6e..68c9c7f 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2647,6 +2647,18 @@ static struct fwnode_handle *of_fwnode_graph_get_next_endpoint(
 	return NULL;
 }
 
+static struct fwnode_handle *of_fwnode_graph_get_remote_endpoint(
+	struct fwnode_handle *fwnode)
+{
+	struct device_node *node;
+
+	node = of_parse_phandle(to_of_node(fwnode), "remote-endpoint", 0);
+	if (node)
+		return of_fwnode_handle(node);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2657,4 +2669,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.get_next_child_node = of_fwnode_get_next_child_node,
 	.get_named_child_node = of_fwnode_get_named_child_node,
 	.graph_get_next_endpoint = of_fwnode_graph_get_next_endpoint,
+	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 14/17] device property: Use fwnode_operations for obtaining the remote port
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (7 preceding siblings ...)
  2017-03-06 15:42 ` [PATCH v2 13/17] device property: Use fwnode_operations for obtaining the remote endpoint Sakari Ailus
@ 2017-03-06 15:43 ` Sakari Ailus
  2017-03-06 15:43 ` [PATCH v2 15/17] device property: Use fwnode_operations for obtaining the remote port parent Sakari Ailus
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:43 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_graph_get_remote_port() function to
use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c | 11 +++++++++++
 drivers/base/property.c | 18 +-----------------
 drivers/of/base.c       | 13 +++++++++++++
 3 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 39bffd3..623260d 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1194,6 +1194,16 @@ static struct fwnode_handle *acpi_fwnode_graph_get_remote_endpoint(
 	return endpoint;
 }
 
+static struct fwnode_handle *acpi_fwnode_graph_get_remote_port(
+	struct fwnode_handle *fwnode)
+{
+	struct fwnode_handle *port = NULL;
+
+	acpi_graph_get_remote_endpoint(fwnode, NULL, &port, NULL);
+
+	return port;
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
@@ -1203,4 +1213,5 @@ const struct fwnode_operations acpi_fwnode_ops = {
 	.get_named_child_node = acpi_fwnode_get_named_child_node,
 	.graph_get_next_endpoint = acpi_fwnode_graph_get_next_endpoint,
 	.graph_get_remote_endpoint = acpi_fwnode_graph_get_remote_endpoint,
+	.graph_get_remote_port = acpi_fwnode_graph_get_remote_port,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 32b68a1..b9643d7 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1189,23 +1189,7 @@ EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_port_parent);
  */
 struct fwnode_handle *fwnode_graph_get_remote_port(struct fwnode_handle *fwnode)
 {
-	struct fwnode_handle *port = NULL;
-
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_graph_get_remote_port(to_of_node(fwnode));
-		if (node)
-			port = &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		int ret;
-
-		ret = acpi_graph_get_remote_endpoint(fwnode, NULL, &port, NULL);
-		if (ret)
-			return NULL;
-	}
-
-	return port;
+	return fwnode_call_ptr_op(fwnode, graph_get_remote_endpoint);
 }
 EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_port);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 68c9c7f..7a4d6e9 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2659,6 +2659,18 @@ static struct fwnode_handle *of_fwnode_graph_get_remote_endpoint(
 	return NULL;
 }
 
+static struct fwnode_handle *of_fwnode_graph_get_remote_port(
+	struct fwnode_handle *fwnode)
+{
+	struct device_node *node;
+
+	node = of_graph_get_remote_port(to_of_node(fwnode));
+	if (node)
+		return of_fwnode_handle(node);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2670,4 +2682,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.get_named_child_node = of_fwnode_get_named_child_node,
 	.graph_get_next_endpoint = of_fwnode_graph_get_next_endpoint,
 	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
+	.graph_get_remote_port = of_fwnode_graph_get_remote_port,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 15/17] device property: Use fwnode_operations for obtaining the remote port parent
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (8 preceding siblings ...)
  2017-03-06 15:43 ` [PATCH v2 14/17] device property: Use fwnode_operations for obtaining the remote port Sakari Ailus
@ 2017-03-06 15:43 ` Sakari Ailus
  2017-03-06 15:43 ` [PATCH v2 16/17] device property: Use fwnode_operations for parsing graph endpoint Sakari Ailus
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:43 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_graph_get_remote_port_parent()
function to use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c | 11 +++++++++++
 drivers/base/property.c | 19 +------------------
 drivers/of/base.c       | 13 +++++++++++++
 3 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 623260d..1790256 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1204,6 +1204,16 @@ static struct fwnode_handle *acpi_fwnode_graph_get_remote_port(
 	return port;
 }
 
+static struct fwnode_handle *acpi_fwnode_graph_get_remote_port_parent(
+	struct fwnode_handle *fwnode)
+{
+	struct fwnode_handle *parent = NULL;
+
+	acpi_graph_get_remote_endpoint(fwnode, &parent, NULL, NULL);
+
+	return parent;
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
@@ -1214,4 +1224,5 @@ const struct fwnode_operations acpi_fwnode_ops = {
 	.graph_get_next_endpoint = acpi_fwnode_graph_get_next_endpoint,
 	.graph_get_remote_endpoint = acpi_fwnode_graph_get_remote_endpoint,
 	.graph_get_remote_port = acpi_fwnode_graph_get_remote_port,
+	.graph_get_remote_port_parent = acpi_fwnode_graph_get_remote_port_parent,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index b9643d7..9767a09 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1160,24 +1160,7 @@ EXPORT_SYMBOL_GPL(fwnode_graph_get_next_endpoint);
 struct fwnode_handle *
 fwnode_graph_get_remote_port_parent(struct fwnode_handle *fwnode)
 {
-	struct fwnode_handle *parent = NULL;
-
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_graph_get_remote_port_parent(to_of_node(fwnode));
-		if (node)
-			parent = &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		int ret;
-
-		ret = acpi_graph_get_remote_endpoint(fwnode, &parent, NULL,
-						     NULL);
-		if (ret)
-			return NULL;
-	}
-
-	return parent;
+	return fwnode_call_ptr_op(fwnode, graph_get_remote_port_parent);
 }
 EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_port_parent);
 
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 7a4d6e9..8bf3b77 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2671,6 +2671,18 @@ static struct fwnode_handle *of_fwnode_graph_get_remote_port(
 	return NULL;
 }
 
+static struct fwnode_handle *of_fwnode_graph_get_remote_port_parent(
+	struct fwnode_handle *fwnode)
+{
+	struct device_node *node;
+
+	node = of_graph_get_remote_port_parent(to_of_node(fwnode));
+	if (node)
+		return of_fwnode_handle(node);
+
+	return NULL;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2683,4 +2695,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.graph_get_next_endpoint = of_fwnode_graph_get_next_endpoint,
 	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
 	.graph_get_remote_port = of_fwnode_graph_get_remote_port,
+	.graph_get_remote_port_parent = of_fwnode_graph_get_remote_port_parent,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 16/17] device property: Use fwnode_operations for parsing graph endpoint
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (9 preceding siblings ...)
  2017-03-06 15:43 ` [PATCH v2 15/17] device property: Use fwnode_operations for obtaining the remote port parent Sakari Ailus
@ 2017-03-06 15:43 ` Sakari Ailus
  2017-03-06 15:43 ` [PATCH v2 17/17] device property: Implement fwnode_get_next_parent() using fwnode interface Sakari Ailus
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:43 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

Change the implementation of fwnode_graph_parse_endpoint() function to
use struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/acpi/property.c | 19 +++++++++++++++++++
 drivers/base/property.c | 22 +---------------------
 drivers/of/base.c       | 17 +++++++++++++++++
 3 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index 1790256..23bc12d 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -1214,6 +1214,24 @@ static struct fwnode_handle *acpi_fwnode_graph_get_remote_port_parent(
 	return parent;
 }
 
+static int acpi_fwnode_graph_parse_endpoint(struct fwnode_handle *fwnode,
+					    struct fwnode_endpoint *endpoint)
+{
+	struct fwnode_handle *port_fwnode = fwnode_get_parent(fwnode);
+	struct fwnode_handle *iter;
+
+	endpoint->local_fwnode = fwnode;
+
+	fwnode_property_read_u32(port_fwnode, "port", &endpoint->port);
+
+	for (iter = fwnode_get_next_child_node(port_fwnode, NULL);
+	     iter != fwnode;
+	     iter = fwnode_get_next_child_node(port_fwnode, iter))
+		endpoint->id++;
+
+	return 0;
+}
+
 const struct fwnode_operations acpi_fwnode_ops = {
 	.property_present = acpi_fwnode_property_present,
 	.property_read_int_array = acpi_fwnode_property_read_int_array,
@@ -1225,4 +1243,5 @@ const struct fwnode_operations acpi_fwnode_ops = {
 	.graph_get_remote_endpoint = acpi_fwnode_graph_get_remote_endpoint,
 	.graph_get_remote_port = acpi_fwnode_graph_get_remote_port,
 	.graph_get_remote_port_parent = acpi_fwnode_graph_get_remote_port_parent,
+	.graph_parse_endpoint = acpi_fwnode_graph_parse_endpoint,
 };
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 9767a09..c6399cf 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1199,28 +1199,8 @@ EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_endpoint);
 int fwnode_graph_parse_endpoint(struct fwnode_handle *fwnode,
 				struct fwnode_endpoint *endpoint)
 {
-	struct fwnode_handle *port_fwnode = fwnode_get_parent(fwnode);
-
 	memset(endpoint, 0, sizeof(*endpoint));
 
-	endpoint->local_fwnode = fwnode;
-
-	if (is_acpi_node(port_fwnode)) {
-		struct fwnode_handle *iter;
-
-		fwnode_property_read_u32(port_fwnode, "port", &endpoint->port);
-
-		for (iter = fwnode_get_next_child_node(port_fwnode, NULL);
-		     iter != fwnode;
-		     iter = fwnode_get_next_child_node(port_fwnode, iter))
-			endpoint->id++;
-	} else {
-		fwnode_property_read_u32(port_fwnode, "reg", &endpoint->port);
-		fwnode_property_read_u32(fwnode, "reg", &endpoint->id);
-	}
-
-	fwnode_handle_put(port_fwnode);
-
-	return 0;
+	return fwnode_call_int_op(fwnode, graph_parse_endpoint, endpoint);
 }
 EXPORT_SYMBOL(fwnode_graph_parse_endpoint);
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 8bf3b77..7757aa6 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2683,6 +2683,22 @@ static struct fwnode_handle *of_fwnode_graph_get_remote_port_parent(
 	return NULL;
 }
 
+static int of_fwnode_graph_parse_endpoint(struct fwnode_handle *fwnode,
+					  struct fwnode_endpoint *endpoint)
+{
+	struct device_node *node = to_of_node(fwnode);
+	struct device_node *port_node = of_get_parent(node);
+
+	endpoint->local_fwnode = fwnode;
+
+	of_property_read_u32(port_node, "reg", &endpoint->port);
+	of_property_read_u32(node, "reg", &endpoint->id);
+
+	of_node_put(port_node);
+
+	return 0;
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -2696,4 +2712,5 @@ const struct fwnode_operations of_fwnode_ops = {
 	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
 	.graph_get_remote_port = of_fwnode_graph_get_remote_port,
 	.graph_get_remote_port_parent = of_fwnode_graph_get_remote_port_parent,
+	.graph_parse_endpoint = of_fwnode_graph_parse_endpoint,
 };
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v2 17/17] device property: Implement fwnode_get_next_parent() using fwnode interface
  2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
                   ` (10 preceding siblings ...)
  2017-03-06 15:43 ` [PATCH v2 16/17] device property: Use fwnode_operations for parsing graph endpoint Sakari Ailus
@ 2017-03-06 15:43 ` Sakari Ailus
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
  12 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-06 15:43 UTC (permalink / raw)
  To: linux-acpi, devicetree
  Cc: sudeep.holla, lorenzo.pieralisi, mika.westerberg, rafael,
	mark.rutland, broonie, robh, ahs3

fwnode_get_next_parent() can be implemented using fwnode interface. Do
that to avoid implementing an additional callback for the function in
struct fwnode_operations.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/base/property.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index c6399cf..7beafdf 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -903,17 +903,9 @@ EXPORT_SYMBOL_GPL(device_add_properties);
  */
 struct fwnode_handle *fwnode_get_next_parent(struct fwnode_handle *fwnode)
 {
-	struct fwnode_handle *parent = NULL;
+	struct fwnode_handle *parent = fwnode_call_ptr_op(fwnode, get_parent);
 
-	if (is_of_node(fwnode)) {
-		struct device_node *node;
-
-		node = of_get_next_parent(to_of_node(fwnode));
-		if (node)
-			parent = &node->fwnode;
-	} else if (is_acpi_node(fwnode)) {
-		parent = acpi_node_get_parent(fwnode);
-	}
+	fwnode_handle_put(fwnode);
 
 	return parent;
 }
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 00/17] Move firmware specific code to firmware specific locations
       [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
                     ` (4 preceding siblings ...)
  2017-03-06 15:42   ` [PATCH v2 09/17] device property: Use fwnode_operations for obtaining parent node Sakari Ailus
@ 2017-03-13 22:27   ` Rafael J. Wysocki
  2017-03-15 14:19     ` Sakari Ailus
  5 siblings, 1 reply; 22+ messages in thread
From: Rafael J. Wysocki @ 2017-03-13 22:27 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: linux-acpi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, sudeep.holla-5wv7dgnIgG8,
	lorenzo.pieralisi-5wv7dgnIgG8,
	mika.westerberg-VuQAYsv1563Yd54FQh9/CA,
	rafael-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, robh-DgEjT+Ai2ygdnm+yROfE0A,
	ahs3-H+wXaHxf7aLQT0dZR+AlfA

On Monday, March 06, 2017 05:42:46 PM Sakari Ailus wrote:
> Hi, 
> 
> This set moves firmware specific implementations of the device / fwnode
> property API to locations that are specific to firmware implementation,
> still leaving property set (which isn't really firmware) implementation in
> drivers/base/property.c.
> 
> The set depends on the ACPI graph support v4 patches I posted a moment
> ago.
> 
> The patches may be found with dependencies here:
> 
> <URL:https://git.linuxtv.org/sailus/media_tree.git/log/?h=acpi-graph-cleaned>
> 
> since v1:
> 
> - Move the three bugfixes in front of the set into a separate patchset.
>   There are no dependencies to those from the rest of the patches.
> 
> - Rebase on current ACPI graph support patches (themselves on PM tree
>   4.11-rc1 merge).

To me, all material from patches [1-11/17] can easily go into one patch which
would also help to review it quite a bit.

Analogously, all material in patches [12-16/17] can go into one patch too.

The split as is appears quite artificial, honestly.

Thanks,
Rafael

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 00/17] Move firmware specific code to firmware specific locations
  2017-03-13 22:27   ` [PATCH v2 00/17] Move firmware specific code to firmware specific locations Rafael J. Wysocki
@ 2017-03-15 14:19     ` Sakari Ailus
  2017-03-15 14:23       ` Rafael J. Wysocki
  0 siblings, 1 reply; 22+ messages in thread
From: Sakari Ailus @ 2017-03-15 14:19 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Sakari Ailus, linux-acpi, devicetree, sudeep.holla,
	lorenzo.pieralisi, mika.westerberg, rafael, mark.rutland, broonie,
	robh, ahs3

On Mon, Mar 13, 2017 at 11:27:40PM +0100, Rafael J. Wysocki wrote:
> On Monday, March 06, 2017 05:42:46 PM Sakari Ailus wrote:
> > Hi, 
> > 
> > This set moves firmware specific implementations of the device / fwnode
> > property API to locations that are specific to firmware implementation,
> > still leaving property set (which isn't really firmware) implementation in
> > drivers/base/property.c.
> > 
> > The set depends on the ACPI graph support v4 patches I posted a moment
> > ago.
> > 
> > The patches may be found with dependencies here:
> > 
> > <URL:https://git.linuxtv.org/sailus/media_tree.git/log/?h=acpi-graph-cleaned>
> > 
> > since v1:
> > 
> > - Move the three bugfixes in front of the set into a separate patchset.
> >   There are no dependencies to those from the rest of the patches.
> > 
> > - Rebase on current ACPI graph support patches (themselves on PM tree
> >   4.11-rc1 merge).
> 
> To me, all material from patches [1-11/17] can easily go into one patch which
> would also help to review it quite a bit.
> 
> Analogously, all material in patches [12-16/17] can go into one patch too.
> 
> The split as is appears quite artificial, honestly.

I believe it's easier to review the way it is. Each patch is simple and it's
easy to see where a particular piece of code is moved. I'm happy to fold
them, too, but I'd prefer keep "[PATCH v2 07/17] device property: Read
strings using string array reading functions" separate, as it changes the
implementation of reading single strings.

How about that?

-- 
Regards,

Sakari Ailus
e-mail: sakari.ailus@iki.fi	XMPP: sailus@retiisi.org.uk

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 00/17] Move firmware specific code to firmware specific locations
  2017-03-15 14:19     ` Sakari Ailus
@ 2017-03-15 14:23       ` Rafael J. Wysocki
       [not found]         ` <CAJZ5v0i5o+2FksW+NmYQugD6qL-1QmREd2isATifu9n0g69Q+w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 22+ messages in thread
From: Rafael J. Wysocki @ 2017-03-15 14:23 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: Rafael J. Wysocki, Sakari Ailus, ACPI Devel Maling List,
	devicetree@vger.kernel.org, Sudeep Holla, Lorenzo Pieralisi,
	Mika Westerberg, Rafael J. Wysocki, Mark Rutland, Mark Brown,
	Rob Herring, Al Stone

On Wed, Mar 15, 2017 at 3:19 PM, Sakari Ailus <sakari.ailus@iki.fi> wrote:
> On Mon, Mar 13, 2017 at 11:27:40PM +0100, Rafael J. Wysocki wrote:
>> On Monday, March 06, 2017 05:42:46 PM Sakari Ailus wrote:
>> > Hi,
>> >
>> > This set moves firmware specific implementations of the device / fwnode
>> > property API to locations that are specific to firmware implementation,
>> > still leaving property set (which isn't really firmware) implementation in
>> > drivers/base/property.c.
>> >
>> > The set depends on the ACPI graph support v4 patches I posted a moment
>> > ago.
>> >
>> > The patches may be found with dependencies here:
>> >
>> > <URL:https://git.linuxtv.org/sailus/media_tree.git/log/?h=acpi-graph-cleaned>
>> >
>> > since v1:
>> >
>> > - Move the three bugfixes in front of the set into a separate patchset.
>> >   There are no dependencies to those from the rest of the patches.
>> >
>> > - Rebase on current ACPI graph support patches (themselves on PM tree
>> >   4.11-rc1 merge).
>>
>> To me, all material from patches [1-11/17] can easily go into one patch which
>> would also help to review it quite a bit.
>>
>> Analogously, all material in patches [12-16/17] can go into one patch too.
>>
>> The split as is appears quite artificial, honestly.
>
> I believe it's easier to review the way it is. Each patch is simple and it's
> easy to see where a particular piece of code is moved. I'm happy to fold
> them, too, but I'd prefer keep "[PATCH v2 07/17] device property: Read
> strings using string array reading functions" separate, as it changes the
> implementation of reading single strings.
>
> How about that?

That's fine too.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v2 00/17] Move firmware specific code to firmware specific locations
       [not found]         ` <CAJZ5v0i5o+2FksW+NmYQugD6qL-1QmREd2isATifu9n0g69Q+w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2017-03-16 22:50           ` Sakari Ailus
  0 siblings, 0 replies; 22+ messages in thread
From: Sakari Ailus @ 2017-03-16 22:50 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Rafael J. Wysocki, Sakari Ailus, ACPI Devel Maling List,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sudeep Holla,
	Lorenzo Pieralisi, Mika Westerberg, Mark Rutland, Mark Brown,
	Rob Herring, Al Stone

On Wed, Mar 15, 2017 at 03:23:41PM +0100, Rafael J. Wysocki wrote:
> On Wed, Mar 15, 2017 at 3:19 PM, Sakari Ailus <sakari.ailus-X3B1VOXEql0@public.gmane.org> wrote:
> > On Mon, Mar 13, 2017 at 11:27:40PM +0100, Rafael J. Wysocki wrote:
> >> On Monday, March 06, 2017 05:42:46 PM Sakari Ailus wrote:
> >> > Hi,
> >> >
> >> > This set moves firmware specific implementations of the device / fwnode
> >> > property API to locations that are specific to firmware implementation,
> >> > still leaving property set (which isn't really firmware) implementation in
> >> > drivers/base/property.c.
> >> >
> >> > The set depends on the ACPI graph support v4 patches I posted a moment
> >> > ago.
> >> >
> >> > The patches may be found with dependencies here:
> >> >
> >> > <URL:https://git.linuxtv.org/sailus/media_tree.git/log/?h=acpi-graph-cleaned>
> >> >
> >> > since v1:
> >> >
> >> > - Move the three bugfixes in front of the set into a separate patchset.
> >> >   There are no dependencies to those from the rest of the patches.
> >> >
> >> > - Rebase on current ACPI graph support patches (themselves on PM tree
> >> >   4.11-rc1 merge).
> >>
> >> To me, all material from patches [1-11/17] can easily go into one patch which
> >> would also help to review it quite a bit.
> >>
> >> Analogously, all material in patches [12-16/17] can go into one patch too.
> >>
> >> The split as is appears quite artificial, honestly.
> >
> > I believe it's easier to review the way it is. Each patch is simple and it's
> > easy to see where a particular piece of code is moved. I'm happy to fold
> > them, too, but I'd prefer keep "[PATCH v2 07/17] device property: Read
> > strings using string array reading functions" separate, as it changes the
> > implementation of reading single strings.
> >
> > How about that?
> 
> That's fine too.

I kept the last patch (device property: Implement fwnode_get_next_parent()
using fwnode interface) separate, too, as I noticed it is really separate
from moving the FW type specific parts behind an ops struct.

The details are on the cover page of v3 of the set.

-- 
Sakari Ailus
e-mail: sakari.ailus-X3B1VOXEql0@public.gmane.org	XMPP: sailus-PCDdDYkjdNMDXYZnReoRVg@public.gmane.org
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2017-03-16 22:50 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-06 15:42 [PATCH v2 00/17] Move firmware specific code to firmware specific locations Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 01/17] device property: Add operations struct for fwnode operations Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 02/17] device property: Add macros for calling " Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 07/17] device property: Read strings using string array reading functions Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 08/17] device property: Use fwnode_operations for reading string arrays Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 10/17] device property: Use fwnode_operations for obtaining next child node Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 11/17] device property: Use fwnode_operations for obtaining a named " Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 12/17] device property: Use fwnode_operations for obtaining next graph endpoint Sakari Ailus
2017-03-06 15:42 ` [PATCH v2 13/17] device property: Use fwnode_operations for obtaining the remote endpoint Sakari Ailus
2017-03-06 15:43 ` [PATCH v2 14/17] device property: Use fwnode_operations for obtaining the remote port Sakari Ailus
2017-03-06 15:43 ` [PATCH v2 15/17] device property: Use fwnode_operations for obtaining the remote port parent Sakari Ailus
2017-03-06 15:43 ` [PATCH v2 16/17] device property: Use fwnode_operations for parsing graph endpoint Sakari Ailus
2017-03-06 15:43 ` [PATCH v2 17/17] device property: Implement fwnode_get_next_parent() using fwnode interface Sakari Ailus
     [not found] ` <1488814983-25695-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-03-06 15:42   ` [PATCH v2 03/17] device property: Introduce firmware property operations, set them Sakari Ailus
2017-03-06 15:42   ` [PATCH v2 04/17] device property: Use fwnode_operations for fwnode_handle_{get,put} Sakari Ailus
2017-03-06 15:42   ` [PATCH v2 05/17] device property: Use fwnode_operations for fwnode_property_present() Sakari Ailus
2017-03-06 15:42   ` [PATCH v2 06/17] device property: Use fwnode_operations for reading integer arrays Sakari Ailus
2017-03-06 15:42   ` [PATCH v2 09/17] device property: Use fwnode_operations for obtaining parent node Sakari Ailus
2017-03-13 22:27   ` [PATCH v2 00/17] Move firmware specific code to firmware specific locations Rafael J. Wysocki
2017-03-15 14:19     ` Sakari Ailus
2017-03-15 14:23       ` Rafael J. Wysocki
     [not found]         ` <CAJZ5v0i5o+2FksW+NmYQugD6qL-1QmREd2isATifu9n0g69Q+w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-16 22:50           ` Sakari Ailus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).