Re: [U-Boot] [PATCH V3 1/4] dm: core: add internal functions for getting the device without probe

2015-04-08 Thread Simon Glass
On 8 April 2015 at 11:06, Przemyslaw Marczak  wrote:
> This commit extends the uclass-internal functions by:
> - uclass_find_first_device()
> - uclass_find_next_device()
> For both functions, the returned device is not probed.
>
> After some cleanup, the above functions are called by:
> - uclass_first_device()
> - uclass_next_device()
> for which, the returned device is probed.
>
> Signed-off-by: Przemyslaw Marczak 
> Cc: Simon Glass 
> ---
> Changes V2:
> - new commit
>
> Changes V3:
> - none
> ---
>  drivers/core/uclass.c| 59 
> +---
>  include/dm/uclass-internal.h | 22 +
>  2 files changed, 56 insertions(+), 25 deletions(-)

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


[U-Boot] [PATCH V3 1/4] dm: core: add internal functions for getting the device without probe

2015-04-08 Thread Przemyslaw Marczak
This commit extends the uclass-internal functions by:
- uclass_find_first_device()
- uclass_find_next_device()
For both functions, the returned device is not probed.

After some cleanup, the above functions are called by:
- uclass_first_device()
- uclass_next_device()
for which, the returned device is probed.

Signed-off-by: Przemyslaw Marczak 
Cc: Simon Glass 
---
Changes V2:
- new commit

Changes V3:
- none
---
 drivers/core/uclass.c| 59 +---
 include/dm/uclass-internal.h | 22 +
 2 files changed, 56 insertions(+), 25 deletions(-)

diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
index 98c15e5..21ab0d5 100644
--- a/drivers/core/uclass.c
+++ b/drivers/core/uclass.c
@@ -156,6 +156,36 @@ int uclass_find_device(enum uclass_id id, int index, 
struct udevice **devp)
return -ENODEV;
 }
 
+int uclass_find_first_device(enum uclass_id id, struct udevice **devp)
+{
+   struct uclass *uc;
+   int ret;
+
+   *devp = NULL;
+   ret = uclass_get(id, &uc);
+   if (ret)
+   return ret;
+   if (list_empty(&uc->dev_head))
+   return 0;
+
+   *devp = list_first_entry(&uc->dev_head, struct udevice, uclass_node);
+
+   return 0;
+}
+
+int uclass_find_next_device(struct udevice **devp)
+{
+   struct udevice *dev = *devp;
+
+   *devp = NULL;
+   if (list_is_last(&dev->uclass_node, &dev->uclass->dev_head))
+   return 0;
+
+   *devp = list_entry(dev->uclass_node.next, struct udevice, uclass_node);
+
+   return 0;
+}
+
 int uclass_find_device_by_seq(enum uclass_id id, int seq_or_req_seq,
  bool find_req_seq, struct udevice **devp)
 {
@@ -274,24 +304,12 @@ int uclass_get_device_by_of_offset(enum uclass_id id, int 
node,
 
 int uclass_first_device(enum uclass_id id, struct udevice **devp)
 {
-   struct uclass *uc;
struct udevice *dev;
int ret;
 
*devp = NULL;
-   ret = uclass_get(id, &uc);
-   if (ret)
-   return ret;
-   if (list_empty(&uc->dev_head))
-   return 0;
-
-   dev = list_first_entry(&uc->dev_head, struct udevice, uclass_node);
-   ret = device_probe(dev);
-   if (ret)
-   return ret;
-   *devp = dev;
-
-   return 0;
+   ret = uclass_find_first_device(id, &dev);
+   return uclass_get_device_tail(dev, ret, devp);
 }
 
 int uclass_next_device(struct udevice **devp)
@@ -300,17 +318,8 @@ int uclass_next_device(struct udevice **devp)
int ret;
 
*devp = NULL;
-   if (list_is_last(&dev->uclass_node, &dev->uclass->dev_head))
-   return 0;
-
-   dev = list_entry(dev->uclass_node.next, struct udevice,
-uclass_node);
-   ret = device_probe(dev);
-   if (ret)
-   return ret;
-   *devp = dev;
-
-   return 0;
+   ret = uclass_find_next_device(&dev);
+   return uclass_get_device_tail(dev, ret, devp);
 }
 
 int uclass_bind_device(struct udevice *dev)
diff --git a/include/dm/uclass-internal.h b/include/dm/uclass-internal.h
index ae2a93d..befbae5 100644
--- a/include/dm/uclass-internal.h
+++ b/include/dm/uclass-internal.h
@@ -24,6 +24,28 @@
 int uclass_find_device(enum uclass_id id, int index, struct udevice **devp);
 
 /**
+ * uclass_find_first_device() - Return the first device in a uclass
+ * @id:Id number of the uclass
+ * #devp:  Returns pointer to device, or NULL on error
+ *
+ * The device is not prepared for use - this is an internal function
+ *
+ * @return 0 if OK (found or not found), -1 on error
+ */
+int uclass_find_first_device(enum uclass_id id, struct udevice **devp);
+
+/**
+ * uclass_find_next_device() - Return the next device in a uclass
+ * @devp: On entry, pointer to device to lookup. On exit, returns pointer
+ * to the next device in the same uclass, or NULL if none
+ *
+ * The device is not prepared for use - this is an internal function
+ *
+ * @return 0 if OK (found or not found), -1 on error
+ */
+int uclass_find_next_device(struct udevice **devp);
+
+/**
  * uclass_bind_device() - Associate device with a uclass
  *
  * Connect the device into uclass's list of devices.
-- 
1.9.1

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