OK, here you go, with another build fix for good measure:
- in <linux/pm.h>, adds device_pm_is_lowpower()
- uses it to resolve OHCI/EHCI compile problem #ifdefflessly
(when !CONFIG_PM && CONFIG_USB_DEBUG)
- removes new i386 build warnings for MSEC_TO_JIFFIES
- hub driver won't resubmit when it's suspended
(and re-deletes broken comment)
That last one isn't actually a build fix
- Dave
--- 1.13/include/linux/pm.h Thu Aug 21 11:47:27 2003
+++ edited/include/linux/pm.h Fri May 14 15:05:32 2004
@@ -238,6 +238,16 @@
#endif
};
+static inline int
+device_pm_is_lowpower(struct dev_pm_info *info)
+{
+#ifdef CONFIG_PM
+ return info->power_state != 0;
+#else
+ return 0;
+#endif
+}
+
extern void device_pm_set_parent(struct device * dev, struct device * parent);
extern int device_suspend(u32 state);
--- 1.97/drivers/usb/core/hub.c Sun May 9 10:26:14 2004
+++ edited/drivers/usb/core/hub.c Fri May 14 15:16:23 2004
@@ -266,6 +266,10 @@
}
resubmit:
+ if (device_pm_is_lowpower (&hub->intf->dev.power)) {
+ urb->status = -EHOSTUNREACH;
+ goto done;
+ }
if ((status = usb_submit_urb (hub->urb, GFP_ATOMIC)) != 0
/* ENODEV means we raced disconnect() */
&& status != -ENODEV)
@@ -1567,9 +1571,6 @@
.id_table = hub_id_table,
};
-/*
- * This should be a separate module.
- */
int usb_hub_init(void)
{
pid_t pid;
--- 1.33/drivers/usb/host/ehci-dbg.c Fri May 7 12:48:33 2004
+++ edited/drivers/usb/host/ehci-dbg.c Fri May 14 15:17:24 2004
@@ -639,7 +639,7 @@
spin_lock_irqsave (&ehci->lock, flags);
- if (bus->controller->power.power_state) {
+ if (device_pm_is_lowpower (&bus->controller->power)) {
size = scnprintf (next, size,
"bus %s, device %s (driver " DRIVER_VERSION ")\n"
"SUSPENDED (no register access)\n",
--- 1.34/drivers/usb/host/ehci.h Fri May 7 12:49:08 2004
+++ edited/drivers/usb/host/ehci.h Fri May 14 15:59:07 2004
@@ -596,9 +596,12 @@
/*-------------------------------------------------------------------------*/
+// FIXME temporary, while we phase in msec_to_jiffies
+#ifndef MSEC_TO_JIFFIES
#define MSEC_TO_JIFFIES(msec) ((HZ * (msec) + 999) / 1000)
+#endif
-static inline void msec_delay(int msec)
+static inline void msec_delay(unsigned msec)
{
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(MSEC_TO_JIFFIES(msec));
--- 1.26/drivers/usb/host/ohci-dbg.c Tue May 11 13:17:33 2004
+++ edited/drivers/usb/host/ohci-dbg.c Fri May 14 15:17:28 2004
@@ -623,7 +623,7 @@
hcd->self.controller->bus_id,
hcd_name);
- if (bus->controller->power.power_state) {
+ if (device_pm_is_lowpower (&bus->controller->power)) {
size -= scnprintf (next, size,
"SUSPENDED (no register access)\n");
goto done;
--- 1.21/drivers/usb/host/ohci.h Sun May 9 10:29:43 2004
+++ edited/drivers/usb/host/ohci.h Fri May 14 15:59:17 2004
@@ -397,9 +397,12 @@
ohci->hcd.state = USB_STATE_HALT;
}
+// FIXME temporary, while we phase in msec_to_jiffies
+#ifndef MSEC_TO_JIFFIES
#define MSEC_TO_JIFFIES(msec) ((HZ * (msec) + 999) / 1000)
+#endif
-static inline void msec_delay(int msec)
+static inline void msec_delay(unsigned msec)
{
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(MSEC_TO_JIFFIES(msec));