From stern@rowland.harvard.edu Mon Apr 25 08:21:47 2005 Date: Mon, 25 Apr 2005 11:18:32 -0400 (EDT) From: Alan Stern To: Greg KH Subject: [PATCH as510 (2/5)] 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: Alan Stern Acked-by: David Brownell Signed-off-by: Greg Kroah-Hartman --- --- gregkh-2.6.orig/drivers/usb/core/hcd.h 2005-04-28 10:46:21.000000000 -0700 +++ gregkh-2.6/drivers/usb/core/hcd.h 2005-04-28 11:13:24.000000000 -0700 @@ -87,6 +87,7 @@ void __iomem *regs; /* device memory/io */ u64 rsrc_start; /* memory/io resource start */ u64 rsrc_len; /* memory/io resource length */ + unsigned power_budget; /* in mA, 0 = no limit */ #define HCD_BUFFER_POOLS 4 struct dma_pool *pool [HCD_BUFFER_POOLS]; --- gregkh-2.6.orig/drivers/usb/core/hub.c 2005-04-28 10:46:21.000000000 -0700 +++ gregkh-2.6/drivers/usb/core/hub.c 2005-04-28 11:13:24.000000000 -0700 @@ -643,15 +643,21 @@ message = "can't get hub status"; goto fail; } - cpu_to_le16s(&hubstatus); - if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) { + le16_to_cpus(&hubstatus); + 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", hub->descriptor->bHubContrCurrent); hub->power_budget = (501 - hub->descriptor->bHubContrCurrent) / 2; + } + if (hub->power_budget) dev_dbg(hub_dev, "%dmA bus power budget for children\n", hub->power_budget * 2); - } ret = hub_hub_status(hub, &hubstatus, &hubchange); --- gregkh-2.6.orig/drivers/usb/core/hub.h 2005-04-06 11:47:47.000000000 -0700 +++ gregkh-2.6/drivers/usb/core/hub.h 2005-04-28 11:13:24.000000000 -0700 @@ -224,15 +224,4 @@ 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 */