Re: [U-Boot] [PATCH v3 03/17] dm: core: lists.c: add new function lists_bind_fdt_by_prop()

2015-03-29 Thread Simon Glass
Hi Przemyslaw,

On 24 March 2015 at 14:30, Przemyslaw Marczak  wrote:
> This change adds new function: lists_bind_fdt_by_prop(), which can be used
> for bind the devices by custom property name for the compatible string.
>
> The function lists_bind_fdt() works the same as previous.
>
> Signed-off-by: Przemyslaw Marczak 
> ---
>  drivers/core/lists.c | 28 +++-
>  include/dm/lists.h   | 18 ++
>  2 files changed, 37 insertions(+), 9 deletions(-)

I think we should do this another way - see my cover letter response.

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v3 03/17] dm: core: lists.c: add new function lists_bind_fdt_by_prop()

2015-03-24 Thread Przemyslaw Marczak
This change adds new function: lists_bind_fdt_by_prop(), which can be used
for bind the devices by custom property name for the compatible string.

The function lists_bind_fdt() works the same as previous.

Signed-off-by: Przemyslaw Marczak 
---
 drivers/core/lists.c | 28 +++-
 include/dm/lists.h   | 18 ++
 2 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/drivers/core/lists.c b/drivers/core/lists.c
index ff115c4..d96040a 100644
--- a/drivers/core/lists.c
+++ b/drivers/core/lists.c
@@ -99,14 +99,17 @@ int device_bind_driver(struct udevice *parent, const char 
*drv_name,
  * @param blob:Device tree pointer
  * @param offset:  Offset of node in device tree
  * @param of_match:List of compatible strings to match
+ * @param prop:Name of compatible string property
  * @param of_idp:  Returns the match that was found
  * @return 0 if there is a match, -ENOENT if no match, -ENODEV if the node
  * does not have a compatible string, other error <0 if there is a device
  * tree error
  */
-static int driver_check_compatible(const void *blob, int offset,
-  const struct udevice_id *of_match,
-  const struct udevice_id **of_idp)
+static int driver_check_prop_compatible(const void *blob,
+   int offset,
+   const char *prop,
+   const struct udevice_id *of_match,
+   const struct udevice_id **of_idp)
 {
int ret;
 
@@ -115,8 +118,8 @@ static int driver_check_compatible(const void *blob, int 
offset,
return -ENOENT;
 
while (of_match->compatible) {
-   ret = fdt_node_check_compatible(blob, offset,
-   of_match->compatible);
+   ret = fdt_node_check_prop_compatible(blob, offset, prop,
+of_match->compatible);
if (!ret) {
*of_idp = of_match;
return 0;
@@ -131,8 +134,8 @@ static int driver_check_compatible(const void *blob, int 
offset,
return -ENOENT;
 }
 
-int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
-  struct udevice **devp)
+int lists_bind_fdt_by_prop(struct udevice *parent, const void *blob, int 
offset,
+  const char *prop, struct udevice **devp)
 {
struct driver *driver = ll_entry_start(struct driver, driver);
const int n_ents = ll_entry_count(struct driver, driver);
@@ -148,8 +151,8 @@ int lists_bind_fdt(struct udevice *parent, const void 
*blob, int offset,
if (devp)
*devp = NULL;
for (entry = driver; entry != driver + n_ents; entry++) {
-   ret = driver_check_compatible(blob, offset, entry->of_match,
- &id);
+   ret = driver_check_prop_compatible(blob, offset, prop,
+  entry->of_match, &id);
name = fdt_get_name(blob, offset, NULL);
if (ret == -ENOENT) {
continue;
@@ -183,4 +186,11 @@ int lists_bind_fdt(struct udevice *parent, const void 
*blob, int offset,
 
return result;
 }
+
+int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
+  struct udevice **devp)
+{
+   return lists_bind_fdt_by_prop(parent, blob, offset, "compatible", devp);
+
+}
 #endif
diff --git a/include/dm/lists.h b/include/dm/lists.h
index 1b50af9..c63757b 100644
--- a/include/dm/lists.h
+++ b/include/dm/lists.h
@@ -45,6 +45,24 @@ struct uclass_driver *lists_uclass_lookup(enum uclass_id id);
 int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only);
 
 /**
+ * lists_bind_fdt_by_prop() - bind a device tree node by the given compatible
+ * property name.
+ *
+ * This creates a new device bound to the given device tree node, with
+ * @parent as its parent.
+ *
+ * @parent: parent device (root)
+ * @blob: device tree blob
+ * @offset: offset of this device tree node
+ * @prop: fdt property name within looking for the driver compatible string
+ * @devp: if non-NULL, returns a pointer to the bound device
+ * @return 0 if device was bound, -EINVAL if the device tree is invalid,
+ * other -ve value on error
+ */
+int lists_bind_fdt_by_prop(struct udevice *parent, const void *blob, int 
offset,
+  const char *prop, struct udevice **devp);
+
+/**
  * lists_bind_fdt() - bind a device tree node
  *
  * This creates a new device bound to the given device tree node, with
-- 
1.9.1

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot