summaryrefslogtreecommitdiff
path: root/packages/linux/linux-rp-2.6.24/tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-rp-2.6.24/tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch')
-rw-r--r--packages/linux/linux-rp-2.6.24/tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch225
1 files changed, 0 insertions, 225 deletions
diff --git a/packages/linux/linux-rp-2.6.24/tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch b/packages/linux/linux-rp-2.6.24/tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch
deleted file mode 100644
index 7bf4ad02d6..0000000000
--- a/packages/linux/linux-rp-2.6.24/tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch
+++ /dev/null
@@ -1,225 +0,0 @@
-From b9a0fdbf333b461682d5da8b9aaa42f4de91ffcf Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Sun, 10 Feb 2008 03:29:17 +0300
-Subject: [PATCH 18/64] Fix the pxa2xx_udc to balance calls to clk_enable/clk_disable
-
-Signed-off-by: Dmitry Baryshkov dbaryshkov@gmail.com
----
- drivers/usb/gadget/pxa2xx_udc.c | 84 +++++++++++++++++++++++----------------
- drivers/usb/gadget/pxa2xx_udc.h | 6 ++-
- 2 files changed, 54 insertions(+), 36 deletions(-)
-
-diff --git a/drivers/usb/gadget/pxa2xx_udc.c b/drivers/usb/gadget/pxa2xx_udc.c
-index 2900556..8e32d07 100644
---- a/drivers/usb/gadget/pxa2xx_udc.c
-+++ b/drivers/usb/gadget/pxa2xx_udc.c
-@@ -680,7 +680,7 @@ pxa2xx_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
-
- /* kickstart this i/o queue? */
- if (list_empty(&ep->queue) && !ep->stopped) {
-- if (ep->desc == 0 /* ep0 */) {
-+ if (ep->desc == NULL /* ep0 */) {
- unsigned length = _req->length;
-
- switch (dev->ep0state) {
-@@ -734,7 +734,7 @@ pxa2xx_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
- }
-
- /* pio or dma irq handler advances the queue. */
-- if (likely (req != 0))
-+ if (likely (req != NULL))
- list_add_tail(&req->queue, &ep->queue);
- local_irq_restore(flags);
-
-@@ -934,20 +934,35 @@ static void udc_disable(struct pxa2xx_udc *);
- /* We disable the UDC -- and its 48 MHz clock -- whenever it's not
- * in active use.
- */
--static int pullup(struct pxa2xx_udc *udc, int is_active)
-+static int pullup(struct pxa2xx_udc *udc)
- {
-- is_active = is_active && udc->vbus && udc->pullup;
-+ int is_active = udc->vbus && udc->pullup && ! udc->suspended;
- DMSG("%s\n", is_active ? "active" : "inactive");
-- if (is_active)
-- udc_enable(udc);
-- else {
-- if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
-- DMSG("disconnect %s\n", udc->driver
-- ? udc->driver->driver.name
-- : "(no driver)");
-- stop_activity(udc, udc->driver);
-+ if (is_active) {
-+ if (!udc->active) {
-+ udc->active = 1;
-+#ifdef CONFIG_ARCH_PXA
-+ /* Enable clock for USB device */
-+ clk_enable(udc->clk);
-+#endif
-+ udc_enable(udc);
- }
-- udc_disable(udc);
-+ } else {
-+ if (udc->active) {
-+ if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
-+ DMSG("disconnect %s\n", udc->driver
-+ ? udc->driver->driver.name
-+ : "(no driver)");
-+ stop_activity(udc, udc->driver);
-+ }
-+ udc_disable(udc);
-+#ifdef CONFIG_ARCH_PXA
-+ /* Disable clock for USB device */
-+ clk_disable(udc->clk);
-+#endif
-+ udc->active = 0;
-+ }
-+
- }
- return 0;
- }
-@@ -958,9 +973,9 @@ static int pxa2xx_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
- struct pxa2xx_udc *udc;
-
- udc = container_of(_gadget, struct pxa2xx_udc, gadget);
-- udc->vbus = is_active = (is_active != 0);
-+ udc->vbus = (is_active != 0);
- DMSG("vbus %s\n", is_active ? "supplied" : "inactive");
-- pullup(udc, is_active);
-+ pullup(udc);
- return 0;
- }
-
-@@ -975,9 +990,8 @@ static int pxa2xx_udc_pullup(struct usb_gadget *_gadget, int is_active)
- if (!udc->mach->gpio_pullup && !udc->mach->udc_command)
- return -EOPNOTSUPP;
-
-- is_active = (is_active != 0);
-- udc->pullup = is_active;
-- pullup(udc, is_active);
-+ udc->pullup = (is_active != 0);
-+ pullup(udc);
- return 0;
- }
-
-@@ -998,7 +1012,7 @@ static const struct usb_gadget_ops pxa2xx_udc_ops = {
-
- static struct pxa2xx_udc memory;
- static int
--udc_seq_show(struct seq_file *m, void *d)
-+udc_seq_show(struct seq_file *m, void *_d)
- {
- struct pxa2xx_udc *dev = m->private;
- unsigned long flags;
-@@ -1145,11 +1159,6 @@ static void udc_disable(struct pxa2xx_udc *dev)
-
- udc_clear_mask_UDCCR(UDCCR_UDE);
-
--#ifdef CONFIG_ARCH_PXA
-- /* Disable clock for USB device */
-- clk_disable(dev->clk);
--#endif
--
- ep0_idle (dev);
- dev->gadget.speed = USB_SPEED_UNKNOWN;
- }
-@@ -1190,11 +1199,6 @@ static void udc_enable (struct pxa2xx_udc *dev)
- {
- udc_clear_mask_UDCCR(UDCCR_UDE);
-
--#ifdef CONFIG_ARCH_PXA
-- /* Enable clock for USB device */
-- clk_enable(dev->clk);
--#endif
--
- /* try to clear these bits before we enable the udc */
- udc_ack_int_UDCCR(UDCCR_SUSIR|/*UDCCR_RSTIR|*/UDCCR_RESIR);
-
-@@ -1285,7 +1289,7 @@ fail:
- * for set_configuration as well as eventual disconnect.
- */
- DMSG("registered gadget driver '%s'\n", driver->driver.name);
-- pullup(dev, 1);
-+ pullup(dev);
- dump_state(dev);
- return 0;
- }
-@@ -1328,7 +1332,8 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
- return -EINVAL;
-
- local_irq_disable();
-- pullup(dev, 0);
-+ dev->pullup = 0;
-+ pullup(dev);
- stop_activity(dev, driver);
- local_irq_enable();
-
-@@ -2267,7 +2272,9 @@ static int __exit pxa2xx_udc_remove(struct platform_device *pdev)
- if (dev->driver)
- return -EBUSY;
-
-- udc_disable(dev);
-+ dev->pullup = 0;
-+ pullup(dev);
-+
- remove_debug_files(dev);
-
- if (dev->got_irq) {
-@@ -2315,10 +2322,15 @@ static int __exit pxa2xx_udc_remove(struct platform_device *pdev)
- static int pxa2xx_udc_suspend(struct platform_device *dev, pm_message_t state)
- {
- struct pxa2xx_udc *udc = platform_get_drvdata(dev);
-+ unsigned long flags;
-
- if (!udc->mach->gpio_pullup && !udc->mach->udc_command)
- WARN("USB host won't detect disconnect!\n");
-- pullup(udc, 0);
-+ udc->suspended = 1;
-+
-+ local_irq_save(flags);
-+ pullup(udc);
-+ local_irq_restore(flags);
-
- return 0;
- }
-@@ -2326,8 +2338,12 @@ static int pxa2xx_udc_suspend(struct platform_device *dev, pm_message_t state)
- static int pxa2xx_udc_resume(struct platform_device *dev)
- {
- struct pxa2xx_udc *udc = platform_get_drvdata(dev);
-+ unsigned long flags;
-
-- pullup(udc, 1);
-+ udc->suspended = 0;
-+ local_irq_save(flags);
-+ pullup(udc);
-+ local_irq_restore(flags);
-
- return 0;
- }
-diff --git a/drivers/usb/gadget/pxa2xx_udc.h b/drivers/usb/gadget/pxa2xx_udc.h
-index c08b1a2..93586b2 100644
---- a/drivers/usb/gadget/pxa2xx_udc.h
-+++ b/drivers/usb/gadget/pxa2xx_udc.h
-@@ -119,7 +119,9 @@ struct pxa2xx_udc {
- has_cfr : 1,
- req_pending : 1,
- req_std : 1,
-- req_config : 1;
-+ req_config : 1,
-+ suspended : 1,
-+ active : 1;
-
- #define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200))
- struct timer_list timer;
-@@ -239,7 +241,7 @@ dump_state(struct pxa2xx_udc *dev)
- dev->stats.read.bytes, dev->stats.read.ops);
-
- for (i = 1; i < PXA_UDC_NUM_ENDPOINTS; i++) {
-- if (dev->ep [i].desc == 0)
-+ if (dev->ep [i].desc == NULL)
- continue;
- DMSG ("udccs%d = %02x\n", i, *dev->ep->reg_udccs);
- }
---
-1.5.3.8
-