Commit 7d35b929 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

[PATCH] usbcore: Remove hub_set_power_budget

This patch removes the hub_set_power_budget routine, which was used by a
couple of HCDs to indicate that the root hub was running on battery power.
In its place is a new field added to struct usb_hcd, which HCDs can set
before the root hub is registered.  Special-case code in the hub driver
knows to look at this field when configuring a root hub.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Acked-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f58f97fa
...@@ -87,6 +87,7 @@ struct usb_hcd { /* usb_bus.hcpriv points to this */ ...@@ -87,6 +87,7 @@ struct usb_hcd { /* usb_bus.hcpriv points to this */
void __iomem *regs; /* device memory/io */ void __iomem *regs; /* device memory/io */
u64 rsrc_start; /* memory/io resource start */ u64 rsrc_start; /* memory/io resource start */
u64 rsrc_len; /* memory/io resource length */ u64 rsrc_len; /* memory/io resource length */
unsigned power_budget; /* in mA, 0 = no limit */
#define HCD_BUFFER_POOLS 4 #define HCD_BUFFER_POOLS 4
struct dma_pool *pool [HCD_BUFFER_POOLS]; struct dma_pool *pool [HCD_BUFFER_POOLS];
......
...@@ -643,15 +643,21 @@ static int hub_configure(struct usb_hub *hub, ...@@ -643,15 +643,21 @@ static int hub_configure(struct usb_hub *hub,
message = "can't get hub status"; message = "can't get hub status";
goto fail; goto fail;
} }
cpu_to_le16s(&hubstatus); le16_to_cpus(&hubstatus);
if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) { if (hdev == hdev->bus->root_hub) {
struct usb_hcd *hcd =
container_of(hdev->bus, struct usb_hcd, self);
hub->power_budget = min(500u, hcd->power_budget) / 2;
} else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
dev_dbg(hub_dev, "hub controller current requirement: %dmA\n", dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
hub->descriptor->bHubContrCurrent); hub->descriptor->bHubContrCurrent);
hub->power_budget = (501 - hub->descriptor->bHubContrCurrent) hub->power_budget = (501 - hub->descriptor->bHubContrCurrent)
/ 2; / 2;
}
if (hub->power_budget)
dev_dbg(hub_dev, "%dmA bus power budget for children\n", dev_dbg(hub_dev, "%dmA bus power budget for children\n",
hub->power_budget * 2); hub->power_budget * 2);
}
ret = hub_hub_status(hub, &hubstatus, &hubchange); ret = hub_hub_status(hub, &hubstatus, &hubchange);
......
...@@ -224,15 +224,4 @@ struct usb_hub { ...@@ -224,15 +224,4 @@ struct usb_hub {
struct work_struct leds; struct work_struct leds;
}; };
/* use this for low-powered root hubs */
static inline void
hub_set_power_budget (struct usb_device *hubdev, unsigned mA)
{
struct usb_hub *hub;
hub = (struct usb_hub *)
usb_get_intfdata (hubdev->actconfig->interface[0]);
hub->power_budget = min(mA,(unsigned)500)/2;
}
#endif /* __LINUX_HUB_H */ #endif /* __LINUX_HUB_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment