]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/usb/musb/musb_core.c
Merge branch 'master' into tk71
[mv-sheeva.git] / drivers / usb / musb / musb_core.c
index 540c766c4f8608eec95df744fc015030ddc54ff1..c292d5c499e7dc8981a7c6d9fd171f57cc3c7aa0 100644 (file)
 #include <linux/platform_device.h>
 #include <linux/io.h>
 
-#ifdef CONFIG_ARM
-#include <mach/hardware.h>
-#include <mach/memory.h>
-#include <asm/mach-types.h>
-#endif
-
 #include "musb_core.h"
 
-
-#ifdef CONFIG_ARCH_DAVINCI
-#include "davinci.h"
-#endif
-
 #define TA_WAIT_BCON(m) max_t(int, (m)->a_wait_bcon, OTG_TIME_A_WAIT_BCON)
 
 
@@ -126,7 +115,7 @@ MODULE_PARM_DESC(debug, "Debug message level. Default = 0");
 
 #define DRIVER_INFO DRIVER_DESC ", v" MUSB_VERSION
 
-#define MUSB_DRIVER_NAME "musb_hdrc"
+#define MUSB_DRIVER_NAME "musb-hdrc"
 const char musb_driver_name[] = MUSB_DRIVER_NAME;
 
 MODULE_DESCRIPTION(DRIVER_INFO);
@@ -139,12 +128,7 @@ MODULE_ALIAS("platform:" MUSB_DRIVER_NAME);
 
 static inline struct musb *dev_to_musb(struct device *dev)
 {
-#ifdef CONFIG_USB_MUSB_HDRC_HCD
-       /* usbcore insists dev->driver_data is a "struct hcd *" */
-       return hcd_to_musb(dev_get_drvdata(dev));
-#else
        return dev_get_drvdata(dev);
-#endif
 }
 
 /*-------------------------------------------------------------------------*/
@@ -230,7 +214,7 @@ static struct otg_io_access_ops musb_ulpi_access = {
 
 /*-------------------------------------------------------------------------*/
 
-#if !defined(CONFIG_USB_TUSB6010) && !defined(CONFIG_BLACKFIN)
+#if !defined(CONFIG_USB_MUSB_TUSB6010) && !defined(CONFIG_USB_MUSB_BLACKFIN)
 
 /*
  * Load an endpoint's FIFO
@@ -272,6 +256,7 @@ void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
        }
 }
 
+#if !defined(CONFIG_USB_MUSB_AM35X)
 /*
  * Unload an endpoint's FIFO
  */
@@ -309,6 +294,7 @@ void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
                readsb(fifo, dst, len);
        }
 }
+#endif
 
 #endif /* normal PIO */
 
@@ -388,7 +374,7 @@ void musb_otg_timer_func(unsigned long data)
        case OTG_STATE_A_SUSPEND:
        case OTG_STATE_A_WAIT_BCON:
                DBG(1, "HNP: %s timeout\n", otg_state_string(musb));
-               musb_set_vbus(musb, 0);
+               musb_platform_set_vbus(musb, 0);
                musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
                break;
        default:
@@ -550,6 +536,12 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
        if (int_usb & MUSB_INTR_SESSREQ) {
                void __iomem *mbase = musb->mregs;
 
+               if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS
+                               && (devctl & MUSB_DEVCTL_BDEVICE)) {
+                       DBG(3, "SessReq while on B state\n");
+                       return IRQ_HANDLED;
+               }
+
                DBG(1, "SESSION_REQUEST (%s)\n", otg_state_string(musb));
 
                /* IRQ arrives from ID pin sense or (later, if VBUS power
@@ -563,7 +555,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
                musb->ep0_stage = MUSB_EP0_START;
                musb->xceiv->state = OTG_STATE_A_IDLE;
                MUSB_HST_MODE(musb);
-               musb_set_vbus(musb, 1);
+               musb_platform_set_vbus(musb, 1);
 
                handled = IRQ_HANDLED;
        }
@@ -634,7 +626,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
 
                /* go through A_WAIT_VFALL then start a new session */
                if (!ignore)
-                       musb_set_vbus(musb, 0);
+                       musb_platform_set_vbus(musb, 0);
                handled = IRQ_HANDLED;
        }
 
@@ -1041,10 +1033,13 @@ static void musb_shutdown(struct platform_device *pdev)
        spin_lock_irqsave(&musb->lock, flags);
        musb_platform_disable(musb);
        musb_generic_disable(musb);
-       if (musb->clock)
-               clk_put(musb->clock);
        spin_unlock_irqrestore(&musb->lock, flags);
 
+       if (!is_otg_enabled(musb) && is_host_enabled(musb))
+               usb_remove_hcd(musb_to_hcd(musb));
+       musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
+       musb_platform_exit(musb);
+
        /* FIXME power down */
 }
 
@@ -1061,10 +1056,11 @@ static void musb_shutdown(struct platform_device *pdev)
  * We don't currently use dynamic fifo setup capability to do anything
  * more than selecting one of a bunch of predefined configurations.
  */
-#if defined(CONFIG_USB_TUSB6010) || \
-       defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3) \
-       || defined(CONFIG_ARCH_OMAP4)
+#if defined(CONFIG_USB_MUSB_TUSB6010) || defined(CONFIG_USB_MUSB_OMAP2PLUS) \
+       || defined(CONFIG_USB_MUSB_AM35X)
 static ushort __initdata fifo_mode = 4;
+#elif defined(CONFIG_USB_MUSB_UX500)
+static ushort __initdata fifo_mode = 5;
 #else
 static ushort __initdata fifo_mode = 2;
 #endif
@@ -1488,7 +1484,7 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb)
                struct musb_hw_ep       *hw_ep = musb->endpoints + i;
 
                hw_ep->fifo = MUSB_FIFO_OFFSET(i) + mbase;
-#ifdef CONFIG_USB_TUSB6010
+#ifdef CONFIG_USB_MUSB_TUSB6010
                hw_ep->fifo_async = musb->async + 0x400 + MUSB_FIFO_OFFSET(i);
                hw_ep->fifo_sync = musb->sync + 0x400 + MUSB_FIFO_OFFSET(i);
                hw_ep->fifo_sync_va =
@@ -1535,7 +1531,8 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb)
 /*-------------------------------------------------------------------------*/
 
 #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) || \
-       defined(CONFIG_ARCH_OMAP4)
+       defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_U8500) || \
+       defined(CONFIG_ARCH_U5500)
 
 static irqreturn_t generic_interrupt(int irq, void *__hci)
 {
@@ -1867,6 +1864,7 @@ allocate_instance(struct device *dev,
        INIT_LIST_HEAD(&musb->out_bulk);
 
        hcd->uses_new_polling = 1;
+       hcd->has_tt = 1;
 
        musb->vbuserr_retry = VBUSERR_RETRY_COUNT;
        musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON;
@@ -1874,10 +1872,9 @@ allocate_instance(struct device *dev,
        musb = kzalloc(sizeof *musb, GFP_KERNEL);
        if (!musb)
                return NULL;
-       dev_set_drvdata(dev, musb);
 
 #endif
-
+       dev_set_drvdata(dev, musb);
        musb->mregs = mbase;
        musb->ctrl_base = mbase;
        musb->nIrq = -ENODEV;
@@ -1891,6 +1888,7 @@ allocate_instance(struct device *dev,
        }
 
        musb->controller = dev;
+
        return musb;
 }
 
@@ -1921,10 +1919,6 @@ static void musb_free(struct musb *musb)
                dma_controller_destroy(c);
        }
 
-#ifdef CONFIG_USB_MUSB_OTG
-       put_device(musb->xceiv->dev);
-#endif
-
 #ifdef CONFIG_USB_MUSB_HDRC_HCD
        usb_put_hcd(musb_to_hcd(musb));
 #else
@@ -1991,30 +1985,14 @@ bad_config:
        spin_lock_init(&musb->lock);
        musb->board_mode = plat->mode;
        musb->board_set_power = plat->set_power;
-       musb->set_clock = plat->set_clock;
        musb->min_power = plat->min_power;
-
-       /* Clock usage is chip-specific ... functional clock (DaVinci,
-        * OMAP2430), or PHY ref (some TUSB6010 boards).  All this core
-        * code does is make sure a clock handle is available; platform
-        * code manages it during start/stop and suspend/resume.
-        */
-       if (plat->clock) {
-               musb->clock = clk_get(dev, plat->clock);
-               if (IS_ERR(musb->clock)) {
-                       status = PTR_ERR(musb->clock);
-                       musb->clock = NULL;
-                       goto fail1;
-               }
-       }
+       musb->ops = plat->platform_ops;
 
        /* The musb_platform_init() call:
         *   - adjusts musb->mregs and musb->isr if needed,
         *   - may initialize an integrated tranceiver
         *   - initializes musb->xceiv, usually by otg_get_transceiver()
-        *   - activates clocks.
         *   - stops powering VBUS
-        *   - assigns musb->board_set_vbus if host mode is enabled
         *
         * There are various transciever configurations.  Blackfin,
         * DaVinci, TUSB60x0, and others integrate them.  OMAP3 uses
@@ -2022,9 +2000,9 @@ bad_config:
         * isp1504, non-OTG, etc) mostly hooking up through ULPI.
         */
        musb->isr = generic_interrupt;
-       status = musb_platform_init(musb, plat->board_data);
+       status = musb_platform_init(musb);
        if (status < 0)
-               goto fail2;
+               goto fail1;
 
        if (!musb->isr) {
                status = -ENODEV;
@@ -2107,12 +2085,15 @@ bad_config:
         * Otherwise, wait till the gadget driver hooks up.
         */
        if (!is_otg_enabled(musb) && is_host_enabled(musb)) {
+               struct usb_hcd  *hcd = musb_to_hcd(musb);
+
                MUSB_HST_MODE(musb);
                musb->xceiv->default_a = 1;
                musb->xceiv->state = OTG_STATE_A_IDLE;
 
                status = usb_add_hcd(musb_to_hcd(musb), -1, 0);
 
+               hcd->self.uses_pio_for_control = 1;
                DBG(1, "%s mode, status %d, devctl %02x %c\n",
                        "HOST", status,
                        musb_readb(musb->mregs, MUSB_DEVCTL),
@@ -2174,10 +2155,6 @@ fail3:
                device_init_wakeup(dev, 0);
        musb_platform_exit(musb);
 
-fail2:
-       if (musb->clock)
-               clk_put(musb->clock);
-
 fail1:
        dev_err(musb->controller,
                "musb_init_controller failed with status %d\n", status);
@@ -2203,13 +2180,13 @@ static u64      *orig_dma_mask;
 static int __init musb_probe(struct platform_device *pdev)
 {
        struct device   *dev = &pdev->dev;
-       int             irq = platform_get_irq(pdev, 0);
+       int             irq = platform_get_irq_byname(pdev, "mc");
        int             status;
        struct resource *iomem;
        void __iomem    *base;
 
        iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!iomem || irq == 0)
+       if (!iomem || irq <= 0)
                return -ENODEV;
 
        base = ioremap(iomem->start, resource_size(iomem));
@@ -2241,13 +2218,6 @@ static int __exit musb_remove(struct platform_device *pdev)
         */
        musb_exit_debugfs(musb);
        musb_shutdown(pdev);
-#ifdef CONFIG_USB_MUSB_HDRC_HCD
-       if (musb->board_mode == MUSB_HOST)
-               usb_remove_hcd(musb_to_hcd(musb));
-#endif
-       musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
-       musb_platform_exit(musb);
-       musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
 
        musb_free(musb);
        iounmap(ctrl_base);
@@ -2260,148 +2230,140 @@ static int __exit musb_remove(struct platform_device *pdev)
 
 #ifdef CONFIG_PM
 
-static struct musb_context_registers musb_context;
-
-void musb_save_context(struct musb *musb)
+static void musb_save_context(struct musb *musb)
 {
        int i;
        void __iomem *musb_base = musb->mregs;
+       void __iomem *epio;
 
        if (is_host_enabled(musb)) {
-               musb_context.frame = musb_readw(musb_base, MUSB_FRAME);
-               musb_context.testmode = musb_readb(musb_base, MUSB_TESTMODE);
-               musb_context.busctl = musb_read_ulpi_buscontrol(musb->mregs);
+               musb->context.frame = musb_readw(musb_base, MUSB_FRAME);
+               musb->context.testmode = musb_readb(musb_base, MUSB_TESTMODE);
+               musb->context.busctl = musb_read_ulpi_buscontrol(musb->mregs);
        }
-       musb_context.power = musb_readb(musb_base, MUSB_POWER);
-       musb_context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE);
-       musb_context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE);
-       musb_context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE);
-       musb_context.index = musb_readb(musb_base, MUSB_INDEX);
-       musb_context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
-
-       for (i = 0; i < MUSB_C_NUM_EPS; ++i) {
-               musb_writeb(musb_base, MUSB_INDEX, i);
-               musb_context.index_regs[i].txmaxp =
-                       musb_readw(musb_base, 0x10 + MUSB_TXMAXP);
-               musb_context.index_regs[i].txcsr =
-                       musb_readw(musb_base, 0x10 + MUSB_TXCSR);
-               musb_context.index_regs[i].rxmaxp =
-                       musb_readw(musb_base, 0x10 + MUSB_RXMAXP);
-               musb_context.index_regs[i].rxcsr =
-                       musb_readw(musb_base, 0x10 + MUSB_RXCSR);
+       musb->context.power = musb_readb(musb_base, MUSB_POWER);
+       musb->context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE);
+       musb->context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE);
+       musb->context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE);
+       musb->context.index = musb_readb(musb_base, MUSB_INDEX);
+       musb->context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
+
+       for (i = 0; i < musb->config->num_eps; ++i) {
+               epio = musb->endpoints[i].regs;
+               musb->context.index_regs[i].txmaxp =
+                       musb_readw(epio, MUSB_TXMAXP);
+               musb->context.index_regs[i].txcsr =
+                       musb_readw(epio, MUSB_TXCSR);
+               musb->context.index_regs[i].rxmaxp =
+                       musb_readw(epio, MUSB_RXMAXP);
+               musb->context.index_regs[i].rxcsr =
+                       musb_readw(epio, MUSB_RXCSR);
 
                if (musb->dyn_fifo) {
-                       musb_context.index_regs[i].txfifoadd =
+                       musb->context.index_regs[i].txfifoadd =
                                        musb_read_txfifoadd(musb_base);
-                       musb_context.index_regs[i].rxfifoadd =
+                       musb->context.index_regs[i].rxfifoadd =
                                        musb_read_rxfifoadd(musb_base);
-                       musb_context.index_regs[i].txfifosz =
+                       musb->context.index_regs[i].txfifosz =
                                        musb_read_txfifosz(musb_base);
-                       musb_context.index_regs[i].rxfifosz =
+                       musb->context.index_regs[i].rxfifosz =
                                        musb_read_rxfifosz(musb_base);
                }
                if (is_host_enabled(musb)) {
-                       musb_context.index_regs[i].txtype =
-                               musb_readb(musb_base, 0x10 + MUSB_TXTYPE);
-                       musb_context.index_regs[i].txinterval =
-                               musb_readb(musb_base, 0x10 + MUSB_TXINTERVAL);
-                       musb_context.index_regs[i].rxtype =
-                               musb_readb(musb_base, 0x10 + MUSB_RXTYPE);
-                       musb_context.index_regs[i].rxinterval =
-                               musb_readb(musb_base, 0x10 + MUSB_RXINTERVAL);
-
-                       musb_context.index_regs[i].txfunaddr =
+                       musb->context.index_regs[i].txtype =
+                               musb_readb(epio, MUSB_TXTYPE);
+                       musb->context.index_regs[i].txinterval =
+                               musb_readb(epio, MUSB_TXINTERVAL);
+                       musb->context.index_regs[i].rxtype =
+                               musb_readb(epio, MUSB_RXTYPE);
+                       musb->context.index_regs[i].rxinterval =
+                               musb_readb(epio, MUSB_RXINTERVAL);
+
+                       musb->context.index_regs[i].txfunaddr =
                                musb_read_txfunaddr(musb_base, i);
-                       musb_context.index_regs[i].txhubaddr =
+                       musb->context.index_regs[i].txhubaddr =
                                musb_read_txhubaddr(musb_base, i);
-                       musb_context.index_regs[i].txhubport =
+                       musb->context.index_regs[i].txhubport =
                                musb_read_txhubport(musb_base, i);
 
-                       musb_context.index_regs[i].rxfunaddr =
+                       musb->context.index_regs[i].rxfunaddr =
                                musb_read_rxfunaddr(musb_base, i);
-                       musb_context.index_regs[i].rxhubaddr =
+                       musb->context.index_regs[i].rxhubaddr =
                                musb_read_rxhubaddr(musb_base, i);
-                       musb_context.index_regs[i].rxhubport =
+                       musb->context.index_regs[i].rxhubport =
                                musb_read_rxhubport(musb_base, i);
                }
        }
-
-       musb_writeb(musb_base, MUSB_INDEX, musb_context.index);
-
-       musb_platform_save_context(musb, &musb_context);
 }
 
-void musb_restore_context(struct musb *musb)
+static void musb_restore_context(struct musb *musb)
 {
        int i;
        void __iomem *musb_base = musb->mregs;
        void __iomem *ep_target_regs;
-
-       musb_platform_restore_context(musb, &musb_context);
+       void __iomem *epio;
 
        if (is_host_enabled(musb)) {
-               musb_writew(musb_base, MUSB_FRAME, musb_context.frame);
-               musb_writeb(musb_base, MUSB_TESTMODE, musb_context.testmode);
-               musb_write_ulpi_buscontrol(musb->mregs, musb_context.busctl);
+               musb_writew(musb_base, MUSB_FRAME, musb->context.frame);
+               musb_writeb(musb_base, MUSB_TESTMODE, musb->context.testmode);
+               musb_write_ulpi_buscontrol(musb->mregs, musb->context.busctl);
        }
-       musb_writeb(musb_base, MUSB_POWER, musb_context.power);
-       musb_writew(musb_base, MUSB_INTRTXE, musb_context.intrtxe);
-       musb_writew(musb_base, MUSB_INTRRXE, musb_context.intrrxe);
-       musb_writeb(musb_base, MUSB_INTRUSBE, musb_context.intrusbe);
-       musb_writeb(musb_base, MUSB_DEVCTL, musb_context.devctl);
-
-       for (i = 0; i < MUSB_C_NUM_EPS; ++i) {
-               musb_writeb(musb_base, MUSB_INDEX, i);
-               musb_writew(musb_base, 0x10 + MUSB_TXMAXP,
-                       musb_context.index_regs[i].txmaxp);
-               musb_writew(musb_base, 0x10 + MUSB_TXCSR,
-                       musb_context.index_regs[i].txcsr);
-               musb_writew(musb_base, 0x10 + MUSB_RXMAXP,
-                       musb_context.index_regs[i].rxmaxp);
-               musb_writew(musb_base, 0x10 + MUSB_RXCSR,
-                       musb_context.index_regs[i].rxcsr);
+       musb_writeb(musb_base, MUSB_POWER, musb->context.power);
+       musb_writew(musb_base, MUSB_INTRTXE, musb->context.intrtxe);
+       musb_writew(musb_base, MUSB_INTRRXE, musb->context.intrrxe);
+       musb_writeb(musb_base, MUSB_INTRUSBE, musb->context.intrusbe);
+       musb_writeb(musb_base, MUSB_DEVCTL, musb->context.devctl);
+
+       for (i = 0; i < musb->config->num_eps; ++i) {
+               epio = musb->endpoints[i].regs;
+               musb_writew(epio, MUSB_TXMAXP,
+                       musb->context.index_regs[i].txmaxp);
+               musb_writew(epio, MUSB_TXCSR,
+                       musb->context.index_regs[i].txcsr);
+               musb_writew(epio, MUSB_RXMAXP,
+                       musb->context.index_regs[i].rxmaxp);
+               musb_writew(epio, MUSB_RXCSR,
+                       musb->context.index_regs[i].rxcsr);
 
                if (musb->dyn_fifo) {
                        musb_write_txfifosz(musb_base,
-                               musb_context.index_regs[i].txfifosz);
+                               musb->context.index_regs[i].txfifosz);
                        musb_write_rxfifosz(musb_base,
-                               musb_context.index_regs[i].rxfifosz);
+                               musb->context.index_regs[i].rxfifosz);
                        musb_write_txfifoadd(musb_base,
-                               musb_context.index_regs[i].txfifoadd);
+                               musb->context.index_regs[i].txfifoadd);
                        musb_write_rxfifoadd(musb_base,
-                               musb_context.index_regs[i].rxfifoadd);
+                               musb->context.index_regs[i].rxfifoadd);
                }
 
                if (is_host_enabled(musb)) {
-                       musb_writeb(musb_base, 0x10 + MUSB_TXTYPE,
-                               musb_context.index_regs[i].txtype);
-                       musb_writeb(musb_base, 0x10 + MUSB_TXINTERVAL,
-                               musb_context.index_regs[i].txinterval);
-                       musb_writeb(musb_base, 0x10 + MUSB_RXTYPE,
-                               musb_context.index_regs[i].rxtype);
-                       musb_writeb(musb_base, 0x10 + MUSB_RXINTERVAL,
-
-                       musb_context.index_regs[i].rxinterval);
+                       musb_writeb(epio, MUSB_TXTYPE,
+                               musb->context.index_regs[i].txtype);
+                       musb_writeb(epio, MUSB_TXINTERVAL,
+                               musb->context.index_regs[i].txinterval);
+                       musb_writeb(epio, MUSB_RXTYPE,
+                               musb->context.index_regs[i].rxtype);
+                       musb_writeb(epio, MUSB_RXINTERVAL,
+
+                       musb->context.index_regs[i].rxinterval);
                        musb_write_txfunaddr(musb_base, i,
-                               musb_context.index_regs[i].txfunaddr);
+                               musb->context.index_regs[i].txfunaddr);
                        musb_write_txhubaddr(musb_base, i,
-                               musb_context.index_regs[i].txhubaddr);
+                               musb->context.index_regs[i].txhubaddr);
                        musb_write_txhubport(musb_base, i,
-                               musb_context.index_regs[i].txhubport);
+                               musb->context.index_regs[i].txhubport);
 
                        ep_target_regs =
                                musb_read_target_reg_base(i, musb_base);
 
                        musb_write_rxfunaddr(ep_target_regs,
-                               musb_context.index_regs[i].rxfunaddr);
+                               musb->context.index_regs[i].rxfunaddr);
                        musb_write_rxhubaddr(ep_target_regs,
-                               musb_context.index_regs[i].rxhubaddr);
+                               musb->context.index_regs[i].rxhubaddr);
                        musb_write_rxhubport(ep_target_regs,
-                               musb_context.index_regs[i].rxhubport);
+                               musb->context.index_regs[i].rxhubport);
                }
        }
-
-       musb_writeb(musb_base, MUSB_INDEX, musb_context.index);
 }
 
 static int musb_suspend(struct device *dev)
@@ -2410,9 +2372,6 @@ static int musb_suspend(struct device *dev)
        unsigned long   flags;
        struct musb     *musb = dev_to_musb(&pdev->dev);
 
-       if (!musb->clock)
-               return 0;
-
        spin_lock_irqsave(&musb->lock, flags);
 
        if (is_peripheral_active(musb)) {
@@ -2427,10 +2386,6 @@ static int musb_suspend(struct device *dev)
 
        musb_save_context(musb);
 
-       if (musb->set_clock)
-               musb->set_clock(musb->clock, 0);
-       else
-               clk_disable(musb->clock);
        spin_unlock_irqrestore(&musb->lock, flags);
        return 0;
 }
@@ -2440,14 +2395,6 @@ static int musb_resume_noirq(struct device *dev)
        struct platform_device *pdev = to_platform_device(dev);
        struct musb     *musb = dev_to_musb(&pdev->dev);
 
-       if (!musb->clock)
-               return 0;
-
-       if (musb->set_clock)
-               musb->set_clock(musb->clock, 1);
-       else
-               clk_enable(musb->clock);
-
        musb_restore_context(musb);
 
        /* for static cmos like DaVinci, register values were preserved