Message ID | 1498211673-18715-5-git-send-email-bmeng.cn@gmail.com |
---|---|
State | Superseded |
Delegated to: | Marek Vasut |
Headers | show |
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) >
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 --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)
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(-)