diff mbox

[U-Boot,04/16] usb: hub: Use 'struct usb_hub_device' as hub device's uclass_priv

Message ID 1498211673-18715-5-git-send-email-bmeng.cn@gmail.com
State Superseded
Delegated to: Marek Vasut
Headers show

Commit Message

Bin Meng June 23, 2017, 9:54 a.m. UTC
Use USB hub device's dev->uclass_priv to point to 'usb_hub_device'
so that with driver model usb_hub_reset() and usb_hub_allocate()
are no longer needed.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
---

 common/usb_hub.c              | 10 +++++++++-
 drivers/usb/host/usb-uclass.c |  2 --
 2 files changed, 9 insertions(+), 3 deletions(-)

Comments

Marek Vasut June 23, 2017, 5:54 p.m. UTC | #1
On 06/23/2017 11:54 AM, Bin Meng wrote:
> Use USB hub device's dev->uclass_priv to point to 'usb_hub_device'
> so that with driver model usb_hub_reset() and usb_hub_allocate()
> are no longer needed.
> 
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

Can you trim down the ifdeffery somehow or keep it more contained ?
I don't like having the code polluted by ifdefs all over the place,
so maybe factor out the specialties into function and put ifdef around
that or somesuch.

> ---
> 
>  common/usb_hub.c              | 10 +++++++++-
>  drivers/usb/host/usb-uclass.c |  2 --
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/common/usb_hub.c b/common/usb_hub.c
> index 090966b..18bd827 100644
> --- a/common/usb_hub.c
> +++ b/common/usb_hub.c
> @@ -58,9 +58,10 @@ struct usb_device_scan {
>  	struct list_head list;
>  };
>  
> -/* TODO(sjg@chromium.org): Remove this when CONFIG_DM_USB is defined */
> +#ifndef CONFIG_DM_USB
>  static struct usb_hub_device hub_dev[USB_MAX_HUB];
>  static int usb_hub_index;
> +#endif
>  static LIST_HEAD(usb_scan_list);
>  
>  __weak void usb_hub_reset_devices(int port)
> @@ -167,6 +168,7 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
>  	      max(100, (int)pgood_delay) + 1000);
>  }
>  
> +#ifndef CONFIG_DM_USB
>  void usb_hub_reset(void)
>  {
>  	usb_hub_index = 0;
> @@ -183,6 +185,7 @@ static struct usb_hub_device *usb_hub_allocate(void)
>  	printf("ERROR: USB_MAX_HUB (%d) reached\n", USB_MAX_HUB);
>  	return NULL;
>  }
> +#endif
>  
>  #define MAX_TRIES 5
>  
> @@ -557,10 +560,14 @@ static int usb_hub_configure(struct usb_device *dev)
>  	__maybe_unused struct usb_hub_status *hubsts;
>  	int ret;
>  
> +#ifndef CONFIG_DM_USB
>  	/* "allocate" Hub device */
>  	hub = usb_hub_allocate();
>  	if (hub == NULL)
>  		return -ENOMEM;
> +#else
> +	hub = dev_get_uclass_priv(dev->dev);
> +#endif
>  	hub->pusb_dev = dev;
>  	/* Get the the hub descriptor */
>  	ret = usb_get_hub_descriptor(dev, buffer, 4);
> @@ -795,6 +802,7 @@ UCLASS_DRIVER(usb_hub) = {
>  	.child_pre_probe	= usb_child_pre_probe,
>  	.per_child_auto_alloc_size = sizeof(struct usb_device),
>  	.per_child_platdata_auto_alloc_size = sizeof(struct usb_dev_platdata),
> +	.per_device_auto_alloc_size = sizeof(struct usb_hub_device),
>  };
>  
>  static const struct usb_device_id hub_id_table[] = {
> diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c
> index 110ddc9..9bb8477 100644
> --- a/drivers/usb/host/usb-uclass.c
> +++ b/drivers/usb/host/usb-uclass.c
> @@ -177,7 +177,6 @@ int usb_stop(void)
>  #ifdef CONFIG_USB_STORAGE
>  	usb_stor_reset();
>  #endif
> -	usb_hub_reset();
>  	uc_priv->companion_device_count = 0;
>  	usb_started = 0;
>  
> @@ -230,7 +229,6 @@ int usb_init(void)
>  	int ret;
>  
>  	asynch_allowed = 1;
> -	usb_hub_reset();
>  
>  	ret = uclass_get(UCLASS_USB, &uc);
>  	if (ret)
>
Simon Glass July 6, 2017, 4:49 a.m. UTC | #2
On 23 June 2017 at 03:54, Bin Meng <bmeng.cn@gmail.com> wrote:
> Use USB hub device's dev->uclass_priv to point to 'usb_hub_device'
> so that with driver model usb_hub_reset() and usb_hub_allocate()
> are no longer needed.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> ---
>
>  common/usb_hub.c              | 10 +++++++++-
>  drivers/usb/host/usb-uclass.c |  2 --
>  2 files changed, 9 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
diff mbox

Patch

diff --git a/common/usb_hub.c b/common/usb_hub.c
index 090966b..18bd827 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -58,9 +58,10 @@  struct usb_device_scan {
 	struct list_head list;
 };
 
-/* TODO(sjg@chromium.org): Remove this when CONFIG_DM_USB is defined */
+#ifndef CONFIG_DM_USB
 static struct usb_hub_device hub_dev[USB_MAX_HUB];
 static int usb_hub_index;
+#endif
 static LIST_HEAD(usb_scan_list);
 
 __weak void usb_hub_reset_devices(int port)
@@ -167,6 +168,7 @@  static void usb_hub_power_on(struct usb_hub_device *hub)
 	      max(100, (int)pgood_delay) + 1000);
 }
 
+#ifndef CONFIG_DM_USB
 void usb_hub_reset(void)
 {
 	usb_hub_index = 0;
@@ -183,6 +185,7 @@  static struct usb_hub_device *usb_hub_allocate(void)
 	printf("ERROR: USB_MAX_HUB (%d) reached\n", USB_MAX_HUB);
 	return NULL;
 }
+#endif
 
 #define MAX_TRIES 5
 
@@ -557,10 +560,14 @@  static int usb_hub_configure(struct usb_device *dev)
 	__maybe_unused struct usb_hub_status *hubsts;
 	int ret;
 
+#ifndef CONFIG_DM_USB
 	/* "allocate" Hub device */
 	hub = usb_hub_allocate();
 	if (hub == NULL)
 		return -ENOMEM;
+#else
+	hub = dev_get_uclass_priv(dev->dev);
+#endif
 	hub->pusb_dev = dev;
 	/* Get the the hub descriptor */
 	ret = usb_get_hub_descriptor(dev, buffer, 4);
@@ -795,6 +802,7 @@  UCLASS_DRIVER(usb_hub) = {
 	.child_pre_probe	= usb_child_pre_probe,
 	.per_child_auto_alloc_size = sizeof(struct usb_device),
 	.per_child_platdata_auto_alloc_size = sizeof(struct usb_dev_platdata),
+	.per_device_auto_alloc_size = sizeof(struct usb_hub_device),
 };
 
 static const struct usb_device_id hub_id_table[] = {
diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c
index 110ddc9..9bb8477 100644
--- a/drivers/usb/host/usb-uclass.c
+++ b/drivers/usb/host/usb-uclass.c
@@ -177,7 +177,6 @@  int usb_stop(void)
 #ifdef CONFIG_USB_STORAGE
 	usb_stor_reset();
 #endif
-	usb_hub_reset();
 	uc_priv->companion_device_count = 0;
 	usb_started = 0;
 
@@ -230,7 +229,6 @@  int usb_init(void)
 	int ret;
 
 	asynch_allowed = 1;
-	usb_hub_reset();
 
 	ret = uclass_get(UCLASS_USB, &uc);
 	if (ret)