[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: Alan Stern <stern@rowland.harvard.edu> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f58f97fa9d
commit
7d35b92985
@@ -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,
|
|||||||
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 {
|
|||||||
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 */
|
||||||
|
Reference in New Issue
Block a user