--- /dev/null
+--- a/drivers/usb/host/adm5120-hcd.c
++++ b/drivers/usb/host/adm5120-hcd.c
+@@ -32,6 +32,7 @@
+ #include <linux/list.h>
+ #include <linux/usb.h>
+ #include <linux/usb/otg.h>
++#include <linux/usb/hcd.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/dmapool.h>
+ #include <linux/reboot.h>
+@@ -43,8 +44,6 @@
+ #include <asm/unaligned.h>
+ #include <asm/byteorder.h>
+
+-#include "../core/hcd.h"
+-#include "../core/hub.h"
+
+ #define DRIVER_VERSION "0.27.0"
+ #define DRIVER_AUTHOR "Gabor Juhos <juhosg@openwrt.org>"
+@@ -571,7 +570,7 @@ static int admhc_run(struct admhcd *ahcd
+ periodic_reinit(ahcd);
+
+ /* use rhsc irqs after khubd is fully initialized */
+- hcd->poll_rh = 1;
++ set_bit(HCD_FLAG_POLL_RH, &hcd->flags);
+ hcd->uses_new_polling = 1;
+
+ #if 0
+@@ -688,7 +687,7 @@ static irqreturn_t admhc_irq(struct usb_
+ */
+ admhc_vdbg(ahcd, "Resume Detect\n");
+ admhc_intr_ack(ahcd, ADMHC_INTR_RESI);
+- hcd->poll_rh = 1;
++ set_bit(HCD_FLAG_POLL_RH, &hcd->flags);
+ if (ahcd->autostop) {
+ spin_lock(&ahcd->lock);
+ admhc_rh_resume(ahcd);
+--- a/drivers/usb/host/adm5120-hub.c
++++ b/drivers/usb/host/adm5120-hub.c
+@@ -106,8 +106,11 @@ admhc_hub_status_data(struct usb_hcd *hc
+ }
+ }
+
+- hcd->poll_rh = admhc_root_hub_state_changes(ahcd, changed,
+- any_connected);
++ if (admhc_root_hub_state_changes(ahcd, changed,
++ any_connected))
++ set_bit(HCD_FLAG_POLL_RH, &hcd->flags);
++ else
++ clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
+
+ done:
+ spin_unlock_irqrestore(&ahcd->lock, flags);