diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2009-05-22 06:46:42 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2009-05-22 06:46:42 +0000 |
commit | 17bfab8e1595b2b72b063ae502165f48c0e61767 (patch) | |
tree | 1fecf70223aade7526180b07ae08de2c2c65342a | |
parent | 632adabfafb512275360c5bcb6bd9de78131ade7 (diff) | |
download | master-187ad058-17bfab8e1595b2b72b063ae502165f48c0e61767.tar.gz master-187ad058-17bfab8e1595b2b72b063ae502165f48c0e61767.tar.bz2 master-187ad058-17bfab8e1595b2b72b063ae502165f48c0e61767.zip |
[adm5120] integrate 2.6.28 specific patch into the usb driver
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15975 3c298f89-4303-0410-b956-a3cf2f4a3e73
5 files changed, 10 insertions, 90 deletions
diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-drv.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-drv.c index bf250c056b..92971f2406 100644 --- a/target/linux/adm5120/files/drivers/usb/host/adm5120-drv.c +++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-drv.c @@ -174,7 +174,6 @@ static const struct hc_driver adm5120_hc_driver = { */ .hub_status_data = admhc_hub_status_data, .hub_control = admhc_hub_control, - .hub_irq_enable = admhc_hub_irq_enable, #ifdef CONFIG_PM .bus_suspend = admhc_bus_suspend, .bus_resume = admhc_bus_resume, diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c index c947a6c2dc..30310aa0c1 100644 --- a/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c +++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c @@ -46,7 +46,7 @@ #include "../core/hcd.h" #include "../core/hub.h" -#define DRIVER_VERSION "0.25.0" +#define DRIVER_VERSION "0.27.0" #define DRIVER_AUTHOR "Gabor Juhos <juhosg@openwrt.org>" #define DRIVER_DESC "ADMtek USB 1.1 Host Controller Driver" diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-hub.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-hub.c index 6ba62050b1..ce454cb204 100644 --- a/target/linux/adm5120/files/drivers/usb/host/adm5120-hub.c +++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-hub.c @@ -63,20 +63,6 @@ /*-------------------------------------------------------------------------*/ -/* hcd->hub_irq_enable() */ -static void admhc_hub_irq_enable(struct usb_hcd *hcd) -{ - struct admhcd *ahcd = hcd_to_admhcd(hcd); - - spin_lock_irq(&ahcd->lock); - if (!ahcd->autostop) - del_timer(&hcd->rh_timer); /* Prevent next poll */ - admhc_intr_enable(ahcd, ADMHC_INTR_INSM); - spin_unlock_irq(&ahcd->lock); -} - -/*-------------------------------------------------------------------------*/ - /* build "status change" packet (one or two bytes) from HC registers */ static int diff --git a/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c b/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c index 9d49664cba..0ccf829c2d 100644 --- a/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c +++ b/target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c @@ -432,13 +432,17 @@ static inline int admhc_rh_resume(struct admhcd *ahcd) static int admhc_root_hub_state_changes(struct admhcd *ahcd, int changed, int any_connected) { - int poll_rh = 1; - - /* keep on polling until RHSC is enabled */ + /* If INSM is enabled, don't poll */ if (admhc_readl(ahcd, &ahcd->regs->int_enable) & ADMHC_INTR_INSM) - poll_rh = 0; + return 0; - return poll_rh; + /* If no status changes are pending, enable status-change interrupts */ + if (!changed) { + admhc_intr_enable(ahcd, ADMHC_INTR_INSM); + return 0; + } + + return 1; } #endif /* CONFIG_PM */ diff --git a/target/linux/adm5120/patches-2.6.28/800-usb_automatically_enable_rhsc_interrupt.patch b/target/linux/adm5120/patches-2.6.28/800-usb_automatically_enable_rhsc_interrupt.patch deleted file mode 100644 index dc0f843c86..0000000000 --- a/target/linux/adm5120/patches-2.6.28/800-usb_automatically_enable_rhsc_interrupt.patch +++ /dev/null @@ -1,69 +0,0 @@ ---- a/drivers/usb/host/adm5120-drv.c -+++ b/drivers/usb/host/adm5120-drv.c -@@ -174,7 +174,6 @@ static const struct hc_driver adm5120_hc - */ - .hub_status_data = admhc_hub_status_data, - .hub_control = admhc_hub_control, -- .hub_irq_enable = admhc_hub_irq_enable, - #ifdef CONFIG_PM - .bus_suspend = admhc_bus_suspend, - .bus_resume = admhc_bus_resume, ---- a/drivers/usb/host/adm5120-hub.c -+++ b/drivers/usb/host/adm5120-hub.c -@@ -63,20 +63,6 @@ - - /*-------------------------------------------------------------------------*/ - --/* hcd->hub_irq_enable() */ --static void admhc_hub_irq_enable(struct usb_hcd *hcd) --{ -- struct admhcd *ahcd = hcd_to_admhcd(hcd); -- -- spin_lock_irq(&ahcd->lock); -- if (!ahcd->autostop) -- del_timer(&hcd->rh_timer); /* Prevent next poll */ -- admhc_intr_enable(ahcd, ADMHC_INTR_INSM); -- spin_unlock_irq(&ahcd->lock); --} -- --/*-------------------------------------------------------------------------*/ -- - /* build "status change" packet (one or two bytes) from HC registers */ - - static int ---- a/drivers/usb/host/adm5120-pm.c -+++ b/drivers/usb/host/adm5120-pm.c -@@ -432,13 +432,17 @@ static inline int admhc_rh_resume(struct - static int admhc_root_hub_state_changes(struct admhcd *ahcd, int changed, - int any_connected) - { -- int poll_rh = 1; -- -- /* keep on polling until RHSC is enabled */ -+ /* If INSM is enabled, don't poll */ - if (admhc_readl(ahcd, &ahcd->regs->int_enable) & ADMHC_INTR_INSM) -- poll_rh = 0; -+ return 0; -+ -+ /* If no status changes are pending, enable status-change interrupts */ -+ if (!changed) { -+ admhc_intr_enable(ahcd, ADMHC_INTR_INSM); -+ return 0; -+ } - -- return poll_rh; -+ return 1; - } - - #endif /* CONFIG_PM */ ---- a/drivers/usb/host/adm5120-hcd.c -+++ b/drivers/usb/host/adm5120-hcd.c -@@ -46,7 +46,7 @@ - #include "../core/hcd.h" - #include "../core/hub.h" - --#define DRIVER_VERSION "0.25.0" -+#define DRIVER_VERSION "0.27.0" - #define DRIVER_AUTHOR "Gabor Juhos <juhosg@openwrt.org>" - #define DRIVER_DESC "ADMtek USB 1.1 Host Controller Driver" - |