diff options
Diffstat (limited to 'drivers/usb/musb/musb_core.c')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 195 |
1 files changed, 72 insertions, 123 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 365a4fab5c64..07cf394e491b 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -99,19 +99,8 @@ | |||
99 | #include <linux/platform_device.h> | 99 | #include <linux/platform_device.h> |
100 | #include <linux/io.h> | 100 | #include <linux/io.h> |
101 | 101 | ||
102 | #ifdef CONFIG_ARM | ||
103 | #include <mach/hardware.h> | ||
104 | #include <mach/memory.h> | ||
105 | #include <asm/mach-types.h> | ||
106 | #endif | ||
107 | |||
108 | #include "musb_core.h" | 102 | #include "musb_core.h" |
109 | 103 | ||
110 | |||
111 | #ifdef CONFIG_ARCH_DAVINCI | ||
112 | #include "davinci.h" | ||
113 | #endif | ||
114 | |||
115 | #define TA_WAIT_BCON(m) max_t(int, (m)->a_wait_bcon, OTG_TIME_A_WAIT_BCON) | 104 | #define TA_WAIT_BCON(m) max_t(int, (m)->a_wait_bcon, OTG_TIME_A_WAIT_BCON) |
116 | 105 | ||
117 | 106 | ||
@@ -126,7 +115,7 @@ MODULE_PARM_DESC(debug, "Debug message level. Default = 0"); | |||
126 | 115 | ||
127 | #define DRIVER_INFO DRIVER_DESC ", v" MUSB_VERSION | 116 | #define DRIVER_INFO DRIVER_DESC ", v" MUSB_VERSION |
128 | 117 | ||
129 | #define MUSB_DRIVER_NAME "musb_hdrc" | 118 | #define MUSB_DRIVER_NAME "musb-hdrc" |
130 | const char musb_driver_name[] = MUSB_DRIVER_NAME; | 119 | const char musb_driver_name[] = MUSB_DRIVER_NAME; |
131 | 120 | ||
132 | MODULE_DESCRIPTION(DRIVER_INFO); | 121 | MODULE_DESCRIPTION(DRIVER_INFO); |
@@ -230,7 +219,7 @@ static struct otg_io_access_ops musb_ulpi_access = { | |||
230 | 219 | ||
231 | /*-------------------------------------------------------------------------*/ | 220 | /*-------------------------------------------------------------------------*/ |
232 | 221 | ||
233 | #if !defined(CONFIG_USB_TUSB6010) && !defined(CONFIG_BLACKFIN) | 222 | #if !defined(CONFIG_USB_MUSB_TUSB6010) && !defined(CONFIG_USB_MUSB_BLACKFIN) |
234 | 223 | ||
235 | /* | 224 | /* |
236 | * Load an endpoint's FIFO | 225 | * Load an endpoint's FIFO |
@@ -390,7 +379,7 @@ void musb_otg_timer_func(unsigned long data) | |||
390 | case OTG_STATE_A_SUSPEND: | 379 | case OTG_STATE_A_SUSPEND: |
391 | case OTG_STATE_A_WAIT_BCON: | 380 | case OTG_STATE_A_WAIT_BCON: |
392 | DBG(1, "HNP: %s timeout\n", otg_state_string(musb)); | 381 | DBG(1, "HNP: %s timeout\n", otg_state_string(musb)); |
393 | musb_set_vbus(musb, 0); | 382 | musb_platform_set_vbus(musb, 0); |
394 | musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; | 383 | musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; |
395 | break; | 384 | break; |
396 | default: | 385 | default: |
@@ -571,7 +560,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
571 | musb->ep0_stage = MUSB_EP0_START; | 560 | musb->ep0_stage = MUSB_EP0_START; |
572 | musb->xceiv->state = OTG_STATE_A_IDLE; | 561 | musb->xceiv->state = OTG_STATE_A_IDLE; |
573 | MUSB_HST_MODE(musb); | 562 | MUSB_HST_MODE(musb); |
574 | musb_set_vbus(musb, 1); | 563 | musb_platform_set_vbus(musb, 1); |
575 | 564 | ||
576 | handled = IRQ_HANDLED; | 565 | handled = IRQ_HANDLED; |
577 | } | 566 | } |
@@ -642,7 +631,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, | |||
642 | 631 | ||
643 | /* go through A_WAIT_VFALL then start a new session */ | 632 | /* go through A_WAIT_VFALL then start a new session */ |
644 | if (!ignore) | 633 | if (!ignore) |
645 | musb_set_vbus(musb, 0); | 634 | musb_platform_set_vbus(musb, 0); |
646 | handled = IRQ_HANDLED; | 635 | handled = IRQ_HANDLED; |
647 | } | 636 | } |
648 | 637 | ||
@@ -1049,8 +1038,6 @@ static void musb_shutdown(struct platform_device *pdev) | |||
1049 | spin_lock_irqsave(&musb->lock, flags); | 1038 | spin_lock_irqsave(&musb->lock, flags); |
1050 | musb_platform_disable(musb); | 1039 | musb_platform_disable(musb); |
1051 | musb_generic_disable(musb); | 1040 | musb_generic_disable(musb); |
1052 | if (musb->clock) | ||
1053 | clk_put(musb->clock); | ||
1054 | spin_unlock_irqrestore(&musb->lock, flags); | 1041 | spin_unlock_irqrestore(&musb->lock, flags); |
1055 | 1042 | ||
1056 | if (!is_otg_enabled(musb) && is_host_enabled(musb)) | 1043 | if (!is_otg_enabled(musb) && is_host_enabled(musb)) |
@@ -1074,10 +1061,11 @@ static void musb_shutdown(struct platform_device *pdev) | |||
1074 | * We don't currently use dynamic fifo setup capability to do anything | 1061 | * We don't currently use dynamic fifo setup capability to do anything |
1075 | * more than selecting one of a bunch of predefined configurations. | 1062 | * more than selecting one of a bunch of predefined configurations. |
1076 | */ | 1063 | */ |
1077 | #if defined(CONFIG_USB_TUSB6010) || \ | 1064 | #if defined(CONFIG_USB_MUSB_TUSB6010) || defined(CONFIG_USB_MUSB_OMAP2PLUS) \ |
1078 | defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3) \ | 1065 | || defined(CONFIG_USB_MUSB_AM35X) |
1079 | || defined(CONFIG_ARCH_OMAP4) | ||
1080 | static ushort __initdata fifo_mode = 4; | 1066 | static ushort __initdata fifo_mode = 4; |
1067 | #elif defined(CONFIG_USB_MUSB_UX500) | ||
1068 | static ushort __initdata fifo_mode = 5; | ||
1081 | #else | 1069 | #else |
1082 | static ushort __initdata fifo_mode = 2; | 1070 | static ushort __initdata fifo_mode = 2; |
1083 | #endif | 1071 | #endif |
@@ -1501,7 +1489,7 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
1501 | struct musb_hw_ep *hw_ep = musb->endpoints + i; | 1489 | struct musb_hw_ep *hw_ep = musb->endpoints + i; |
1502 | 1490 | ||
1503 | hw_ep->fifo = MUSB_FIFO_OFFSET(i) + mbase; | 1491 | hw_ep->fifo = MUSB_FIFO_OFFSET(i) + mbase; |
1504 | #ifdef CONFIG_USB_TUSB6010 | 1492 | #ifdef CONFIG_USB_MUSB_TUSB6010 |
1505 | hw_ep->fifo_async = musb->async + 0x400 + MUSB_FIFO_OFFSET(i); | 1493 | hw_ep->fifo_async = musb->async + 0x400 + MUSB_FIFO_OFFSET(i); |
1506 | hw_ep->fifo_sync = musb->sync + 0x400 + MUSB_FIFO_OFFSET(i); | 1494 | hw_ep->fifo_sync = musb->sync + 0x400 + MUSB_FIFO_OFFSET(i); |
1507 | hw_ep->fifo_sync_va = | 1495 | hw_ep->fifo_sync_va = |
@@ -1548,7 +1536,8 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) | |||
1548 | /*-------------------------------------------------------------------------*/ | 1536 | /*-------------------------------------------------------------------------*/ |
1549 | 1537 | ||
1550 | #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) || \ | 1538 | #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) || \ |
1551 | defined(CONFIG_ARCH_OMAP4) | 1539 | defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_U8500) || \ |
1540 | defined(CONFIG_ARCH_U5500) | ||
1552 | 1541 | ||
1553 | static irqreturn_t generic_interrupt(int irq, void *__hci) | 1542 | static irqreturn_t generic_interrupt(int irq, void *__hci) |
1554 | { | 1543 | { |
@@ -1904,6 +1893,7 @@ allocate_instance(struct device *dev, | |||
1904 | } | 1893 | } |
1905 | 1894 | ||
1906 | musb->controller = dev; | 1895 | musb->controller = dev; |
1896 | |||
1907 | return musb; | 1897 | return musb; |
1908 | } | 1898 | } |
1909 | 1899 | ||
@@ -2000,30 +1990,14 @@ bad_config: | |||
2000 | spin_lock_init(&musb->lock); | 1990 | spin_lock_init(&musb->lock); |
2001 | musb->board_mode = plat->mode; | 1991 | musb->board_mode = plat->mode; |
2002 | musb->board_set_power = plat->set_power; | 1992 | musb->board_set_power = plat->set_power; |
2003 | musb->set_clock = plat->set_clock; | ||
2004 | musb->min_power = plat->min_power; | 1993 | musb->min_power = plat->min_power; |
2005 | 1994 | musb->ops = plat->platform_ops; | |
2006 | /* Clock usage is chip-specific ... functional clock (DaVinci, | ||
2007 | * OMAP2430), or PHY ref (some TUSB6010 boards). All this core | ||
2008 | * code does is make sure a clock handle is available; platform | ||
2009 | * code manages it during start/stop and suspend/resume. | ||
2010 | */ | ||
2011 | if (plat->clock) { | ||
2012 | musb->clock = clk_get(dev, plat->clock); | ||
2013 | if (IS_ERR(musb->clock)) { | ||
2014 | status = PTR_ERR(musb->clock); | ||
2015 | musb->clock = NULL; | ||
2016 | goto fail1; | ||
2017 | } | ||
2018 | } | ||
2019 | 1995 | ||
2020 | /* The musb_platform_init() call: | 1996 | /* The musb_platform_init() call: |
2021 | * - adjusts musb->mregs and musb->isr if needed, | 1997 | * - adjusts musb->mregs and musb->isr if needed, |
2022 | * - may initialize an integrated tranceiver | 1998 | * - may initialize an integrated tranceiver |
2023 | * - initializes musb->xceiv, usually by otg_get_transceiver() | 1999 | * - initializes musb->xceiv, usually by otg_get_transceiver() |
2024 | * - activates clocks. | ||
2025 | * - stops powering VBUS | 2000 | * - stops powering VBUS |
2026 | * - assigns musb->board_set_vbus if host mode is enabled | ||
2027 | * | 2001 | * |
2028 | * There are various transciever configurations. Blackfin, | 2002 | * There are various transciever configurations. Blackfin, |
2029 | * DaVinci, TUSB60x0, and others integrate them. OMAP3 uses | 2003 | * DaVinci, TUSB60x0, and others integrate them. OMAP3 uses |
@@ -2031,9 +2005,9 @@ bad_config: | |||
2031 | * isp1504, non-OTG, etc) mostly hooking up through ULPI. | 2005 | * isp1504, non-OTG, etc) mostly hooking up through ULPI. |
2032 | */ | 2006 | */ |
2033 | musb->isr = generic_interrupt; | 2007 | musb->isr = generic_interrupt; |
2034 | status = musb_platform_init(musb, plat->board_data); | 2008 | status = musb_platform_init(musb); |
2035 | if (status < 0) | 2009 | if (status < 0) |
2036 | goto fail2; | 2010 | goto fail1; |
2037 | 2011 | ||
2038 | if (!musb->isr) { | 2012 | if (!musb->isr) { |
2039 | status = -ENODEV; | 2013 | status = -ENODEV; |
@@ -2186,10 +2160,6 @@ fail3: | |||
2186 | device_init_wakeup(dev, 0); | 2160 | device_init_wakeup(dev, 0); |
2187 | musb_platform_exit(musb); | 2161 | musb_platform_exit(musb); |
2188 | 2162 | ||
2189 | fail2: | ||
2190 | if (musb->clock) | ||
2191 | clk_put(musb->clock); | ||
2192 | |||
2193 | fail1: | 2163 | fail1: |
2194 | dev_err(musb->controller, | 2164 | dev_err(musb->controller, |
2195 | "musb_init_controller failed with status %d\n", status); | 2165 | "musb_init_controller failed with status %d\n", status); |
@@ -2215,7 +2185,7 @@ static u64 *orig_dma_mask; | |||
2215 | static int __init musb_probe(struct platform_device *pdev) | 2185 | static int __init musb_probe(struct platform_device *pdev) |
2216 | { | 2186 | { |
2217 | struct device *dev = &pdev->dev; | 2187 | struct device *dev = &pdev->dev; |
2218 | int irq = platform_get_irq(pdev, 0); | 2188 | int irq = platform_get_irq_byname(pdev, "mc"); |
2219 | int status; | 2189 | int status; |
2220 | struct resource *iomem; | 2190 | struct resource *iomem; |
2221 | void __iomem *base; | 2191 | void __iomem *base; |
@@ -2265,144 +2235,138 @@ static int __exit musb_remove(struct platform_device *pdev) | |||
2265 | 2235 | ||
2266 | #ifdef CONFIG_PM | 2236 | #ifdef CONFIG_PM |
2267 | 2237 | ||
2268 | static struct musb_context_registers musb_context; | 2238 | static void musb_save_context(struct musb *musb) |
2269 | |||
2270 | void musb_save_context(struct musb *musb) | ||
2271 | { | 2239 | { |
2272 | int i; | 2240 | int i; |
2273 | void __iomem *musb_base = musb->mregs; | 2241 | void __iomem *musb_base = musb->mregs; |
2274 | void __iomem *epio; | 2242 | void __iomem *epio; |
2275 | 2243 | ||
2276 | if (is_host_enabled(musb)) { | 2244 | if (is_host_enabled(musb)) { |
2277 | musb_context.frame = musb_readw(musb_base, MUSB_FRAME); | 2245 | musb->context.frame = musb_readw(musb_base, MUSB_FRAME); |
2278 | musb_context.testmode = musb_readb(musb_base, MUSB_TESTMODE); | 2246 | musb->context.testmode = musb_readb(musb_base, MUSB_TESTMODE); |
2279 | musb_context.busctl = musb_read_ulpi_buscontrol(musb->mregs); | 2247 | musb->context.busctl = musb_read_ulpi_buscontrol(musb->mregs); |
2280 | } | 2248 | } |
2281 | musb_context.power = musb_readb(musb_base, MUSB_POWER); | 2249 | musb->context.power = musb_readb(musb_base, MUSB_POWER); |
2282 | musb_context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE); | 2250 | musb->context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE); |
2283 | musb_context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE); | 2251 | musb->context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE); |
2284 | musb_context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE); | 2252 | musb->context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE); |
2285 | musb_context.index = musb_readb(musb_base, MUSB_INDEX); | 2253 | musb->context.index = musb_readb(musb_base, MUSB_INDEX); |
2286 | musb_context.devctl = musb_readb(musb_base, MUSB_DEVCTL); | 2254 | musb->context.devctl = musb_readb(musb_base, MUSB_DEVCTL); |
2287 | 2255 | ||
2288 | for (i = 0; i < musb->config->num_eps; ++i) { | 2256 | for (i = 0; i < musb->config->num_eps; ++i) { |
2289 | epio = musb->endpoints[i].regs; | 2257 | epio = musb->endpoints[i].regs; |
2290 | musb_context.index_regs[i].txmaxp = | 2258 | musb->context.index_regs[i].txmaxp = |
2291 | musb_readw(epio, MUSB_TXMAXP); | 2259 | musb_readw(epio, MUSB_TXMAXP); |
2292 | musb_context.index_regs[i].txcsr = | 2260 | musb->context.index_regs[i].txcsr = |
2293 | musb_readw(epio, MUSB_TXCSR); | 2261 | musb_readw(epio, MUSB_TXCSR); |
2294 | musb_context.index_regs[i].rxmaxp = | 2262 | musb->context.index_regs[i].rxmaxp = |
2295 | musb_readw(epio, MUSB_RXMAXP); | 2263 | musb_readw(epio, MUSB_RXMAXP); |
2296 | musb_context.index_regs[i].rxcsr = | 2264 | musb->context.index_regs[i].rxcsr = |
2297 | musb_readw(epio, MUSB_RXCSR); | 2265 | musb_readw(epio, MUSB_RXCSR); |
2298 | 2266 | ||
2299 | if (musb->dyn_fifo) { | 2267 | if (musb->dyn_fifo) { |
2300 | musb_context.index_regs[i].txfifoadd = | 2268 | musb->context.index_regs[i].txfifoadd = |
2301 | musb_read_txfifoadd(musb_base); | 2269 | musb_read_txfifoadd(musb_base); |
2302 | musb_context.index_regs[i].rxfifoadd = | 2270 | musb->context.index_regs[i].rxfifoadd = |
2303 | musb_read_rxfifoadd(musb_base); | 2271 | musb_read_rxfifoadd(musb_base); |
2304 | musb_context.index_regs[i].txfifosz = | 2272 | musb->context.index_regs[i].txfifosz = |
2305 | musb_read_txfifosz(musb_base); | 2273 | musb_read_txfifosz(musb_base); |
2306 | musb_context.index_regs[i].rxfifosz = | 2274 | musb->context.index_regs[i].rxfifosz = |
2307 | musb_read_rxfifosz(musb_base); | 2275 | musb_read_rxfifosz(musb_base); |
2308 | } | 2276 | } |
2309 | if (is_host_enabled(musb)) { | 2277 | if (is_host_enabled(musb)) { |
2310 | musb_context.index_regs[i].txtype = | 2278 | musb->context.index_regs[i].txtype = |
2311 | musb_readb(epio, MUSB_TXTYPE); | 2279 | musb_readb(epio, MUSB_TXTYPE); |
2312 | musb_context.index_regs[i].txinterval = | 2280 | musb->context.index_regs[i].txinterval = |
2313 | musb_readb(epio, MUSB_TXINTERVAL); | 2281 | musb_readb(epio, MUSB_TXINTERVAL); |
2314 | musb_context.index_regs[i].rxtype = | 2282 | musb->context.index_regs[i].rxtype = |
2315 | musb_readb(epio, MUSB_RXTYPE); | 2283 | musb_readb(epio, MUSB_RXTYPE); |
2316 | musb_context.index_regs[i].rxinterval = | 2284 | musb->context.index_regs[i].rxinterval = |
2317 | musb_readb(epio, MUSB_RXINTERVAL); | 2285 | musb_readb(epio, MUSB_RXINTERVAL); |
2318 | 2286 | ||
2319 | musb_context.index_regs[i].txfunaddr = | 2287 | musb->context.index_regs[i].txfunaddr = |
2320 | musb_read_txfunaddr(musb_base, i); | 2288 | musb_read_txfunaddr(musb_base, i); |
2321 | musb_context.index_regs[i].txhubaddr = | 2289 | musb->context.index_regs[i].txhubaddr = |
2322 | musb_read_txhubaddr(musb_base, i); | 2290 | musb_read_txhubaddr(musb_base, i); |
2323 | musb_context.index_regs[i].txhubport = | 2291 | musb->context.index_regs[i].txhubport = |
2324 | musb_read_txhubport(musb_base, i); | 2292 | musb_read_txhubport(musb_base, i); |
2325 | 2293 | ||
2326 | musb_context.index_regs[i].rxfunaddr = | 2294 | musb->context.index_regs[i].rxfunaddr = |
2327 | musb_read_rxfunaddr(musb_base, i); | 2295 | musb_read_rxfunaddr(musb_base, i); |
2328 | musb_context.index_regs[i].rxhubaddr = | 2296 | musb->context.index_regs[i].rxhubaddr = |
2329 | musb_read_rxhubaddr(musb_base, i); | 2297 | musb_read_rxhubaddr(musb_base, i); |
2330 | musb_context.index_regs[i].rxhubport = | 2298 | musb->context.index_regs[i].rxhubport = |
2331 | musb_read_rxhubport(musb_base, i); | 2299 | musb_read_rxhubport(musb_base, i); |
2332 | } | 2300 | } |
2333 | } | 2301 | } |
2334 | |||
2335 | musb_platform_save_context(musb, &musb_context); | ||
2336 | } | 2302 | } |
2337 | 2303 | ||
2338 | void musb_restore_context(struct musb *musb) | 2304 | static void musb_restore_context(struct musb *musb) |
2339 | { | 2305 | { |
2340 | int i; | 2306 | int i; |
2341 | void __iomem *musb_base = musb->mregs; | 2307 | void __iomem *musb_base = musb->mregs; |
2342 | void __iomem *ep_target_regs; | 2308 | void __iomem *ep_target_regs; |
2343 | void __iomem *epio; | 2309 | void __iomem *epio; |
2344 | 2310 | ||
2345 | musb_platform_restore_context(musb, &musb_context); | ||
2346 | |||
2347 | if (is_host_enabled(musb)) { | 2311 | if (is_host_enabled(musb)) { |
2348 | musb_writew(musb_base, MUSB_FRAME, musb_context.frame); | 2312 | musb_writew(musb_base, MUSB_FRAME, musb->context.frame); |
2349 | musb_writeb(musb_base, MUSB_TESTMODE, musb_context.testmode); | 2313 | musb_writeb(musb_base, MUSB_TESTMODE, musb->context.testmode); |
2350 | musb_write_ulpi_buscontrol(musb->mregs, musb_context.busctl); | 2314 | musb_write_ulpi_buscontrol(musb->mregs, musb->context.busctl); |
2351 | } | 2315 | } |
2352 | musb_writeb(musb_base, MUSB_POWER, musb_context.power); | 2316 | musb_writeb(musb_base, MUSB_POWER, musb->context.power); |
2353 | musb_writew(musb_base, MUSB_INTRTXE, musb_context.intrtxe); | 2317 | musb_writew(musb_base, MUSB_INTRTXE, musb->context.intrtxe); |
2354 | musb_writew(musb_base, MUSB_INTRRXE, musb_context.intrrxe); | 2318 | musb_writew(musb_base, MUSB_INTRRXE, musb->context.intrrxe); |
2355 | musb_writeb(musb_base, MUSB_INTRUSBE, musb_context.intrusbe); | 2319 | musb_writeb(musb_base, MUSB_INTRUSBE, musb->context.intrusbe); |
2356 | musb_writeb(musb_base, MUSB_DEVCTL, musb_context.devctl); | 2320 | musb_writeb(musb_base, MUSB_DEVCTL, musb->context.devctl); |
2357 | 2321 | ||
2358 | for (i = 0; i < musb->config->num_eps; ++i) { | 2322 | for (i = 0; i < musb->config->num_eps; ++i) { |
2359 | epio = musb->endpoints[i].regs; | 2323 | epio = musb->endpoints[i].regs; |
2360 | musb_writew(epio, MUSB_TXMAXP, | 2324 | musb_writew(epio, MUSB_TXMAXP, |
2361 | musb_context.index_regs[i].txmaxp); | 2325 | musb->context.index_regs[i].txmaxp); |
2362 | musb_writew(epio, MUSB_TXCSR, | 2326 | musb_writew(epio, MUSB_TXCSR, |
2363 | musb_context.index_regs[i].txcsr); | 2327 | musb->context.index_regs[i].txcsr); |
2364 | musb_writew(epio, MUSB_RXMAXP, | 2328 | musb_writew(epio, MUSB_RXMAXP, |
2365 | musb_context.index_regs[i].rxmaxp); | 2329 | musb->context.index_regs[i].rxmaxp); |
2366 | musb_writew(epio, MUSB_RXCSR, | 2330 | musb_writew(epio, MUSB_RXCSR, |
2367 | musb_context.index_regs[i].rxcsr); | 2331 | musb->context.index_regs[i].rxcsr); |
2368 | 2332 | ||
2369 | if (musb->dyn_fifo) { | 2333 | if (musb->dyn_fifo) { |
2370 | musb_write_txfifosz(musb_base, | 2334 | musb_write_txfifosz(musb_base, |
2371 | musb_context.index_regs[i].txfifosz); | 2335 | musb->context.index_regs[i].txfifosz); |
2372 | musb_write_rxfifosz(musb_base, | 2336 | musb_write_rxfifosz(musb_base, |
2373 | musb_context.index_regs[i].rxfifosz); | 2337 | musb->context.index_regs[i].rxfifosz); |
2374 | musb_write_txfifoadd(musb_base, | 2338 | musb_write_txfifoadd(musb_base, |
2375 | musb_context.index_regs[i].txfifoadd); | 2339 | musb->context.index_regs[i].txfifoadd); |
2376 | musb_write_rxfifoadd(musb_base, | 2340 | musb_write_rxfifoadd(musb_base, |
2377 | musb_context.index_regs[i].rxfifoadd); | 2341 | musb->context.index_regs[i].rxfifoadd); |
2378 | } | 2342 | } |
2379 | 2343 | ||
2380 | if (is_host_enabled(musb)) { | 2344 | if (is_host_enabled(musb)) { |
2381 | musb_writeb(epio, MUSB_TXTYPE, | 2345 | musb_writeb(epio, MUSB_TXTYPE, |
2382 | musb_context.index_regs[i].txtype); | 2346 | musb->context.index_regs[i].txtype); |
2383 | musb_writeb(epio, MUSB_TXINTERVAL, | 2347 | musb_writeb(epio, MUSB_TXINTERVAL, |
2384 | musb_context.index_regs[i].txinterval); | 2348 | musb->context.index_regs[i].txinterval); |
2385 | musb_writeb(epio, MUSB_RXTYPE, | 2349 | musb_writeb(epio, MUSB_RXTYPE, |
2386 | musb_context.index_regs[i].rxtype); | 2350 | musb->context.index_regs[i].rxtype); |
2387 | musb_writeb(epio, MUSB_RXINTERVAL, | 2351 | musb_writeb(epio, MUSB_RXINTERVAL, |
2388 | 2352 | ||
2389 | musb_context.index_regs[i].rxinterval); | 2353 | musb->context.index_regs[i].rxinterval); |
2390 | musb_write_txfunaddr(musb_base, i, | 2354 | musb_write_txfunaddr(musb_base, i, |
2391 | musb_context.index_regs[i].txfunaddr); | 2355 | musb->context.index_regs[i].txfunaddr); |
2392 | musb_write_txhubaddr(musb_base, i, | 2356 | musb_write_txhubaddr(musb_base, i, |
2393 | musb_context.index_regs[i].txhubaddr); | 2357 | musb->context.index_regs[i].txhubaddr); |
2394 | musb_write_txhubport(musb_base, i, | 2358 | musb_write_txhubport(musb_base, i, |
2395 | musb_context.index_regs[i].txhubport); | 2359 | musb->context.index_regs[i].txhubport); |
2396 | 2360 | ||
2397 | ep_target_regs = | 2361 | ep_target_regs = |
2398 | musb_read_target_reg_base(i, musb_base); | 2362 | musb_read_target_reg_base(i, musb_base); |
2399 | 2363 | ||
2400 | musb_write_rxfunaddr(ep_target_regs, | 2364 | musb_write_rxfunaddr(ep_target_regs, |
2401 | musb_context.index_regs[i].rxfunaddr); | 2365 | musb->context.index_regs[i].rxfunaddr); |
2402 | musb_write_rxhubaddr(ep_target_regs, | 2366 | musb_write_rxhubaddr(ep_target_regs, |
2403 | musb_context.index_regs[i].rxhubaddr); | 2367 | musb->context.index_regs[i].rxhubaddr); |
2404 | musb_write_rxhubport(ep_target_regs, | 2368 | musb_write_rxhubport(ep_target_regs, |
2405 | musb_context.index_regs[i].rxhubport); | 2369 | musb->context.index_regs[i].rxhubport); |
2406 | } | 2370 | } |
2407 | } | 2371 | } |
2408 | } | 2372 | } |
@@ -2413,9 +2377,6 @@ static int musb_suspend(struct device *dev) | |||
2413 | unsigned long flags; | 2377 | unsigned long flags; |
2414 | struct musb *musb = dev_to_musb(&pdev->dev); | 2378 | struct musb *musb = dev_to_musb(&pdev->dev); |
2415 | 2379 | ||
2416 | if (!musb->clock) | ||
2417 | return 0; | ||
2418 | |||
2419 | spin_lock_irqsave(&musb->lock, flags); | 2380 | spin_lock_irqsave(&musb->lock, flags); |
2420 | 2381 | ||
2421 | if (is_peripheral_active(musb)) { | 2382 | if (is_peripheral_active(musb)) { |
@@ -2430,10 +2391,6 @@ static int musb_suspend(struct device *dev) | |||
2430 | 2391 | ||
2431 | musb_save_context(musb); | 2392 | musb_save_context(musb); |
2432 | 2393 | ||
2433 | if (musb->set_clock) | ||
2434 | musb->set_clock(musb->clock, 0); | ||
2435 | else | ||
2436 | clk_disable(musb->clock); | ||
2437 | spin_unlock_irqrestore(&musb->lock, flags); | 2394 | spin_unlock_irqrestore(&musb->lock, flags); |
2438 | return 0; | 2395 | return 0; |
2439 | } | 2396 | } |
@@ -2443,14 +2400,6 @@ static int musb_resume_noirq(struct device *dev) | |||
2443 | struct platform_device *pdev = to_platform_device(dev); | 2400 | struct platform_device *pdev = to_platform_device(dev); |
2444 | struct musb *musb = dev_to_musb(&pdev->dev); | 2401 | struct musb *musb = dev_to_musb(&pdev->dev); |
2445 | 2402 | ||
2446 | if (!musb->clock) | ||
2447 | return 0; | ||
2448 | |||
2449 | if (musb->set_clock) | ||
2450 | musb->set_clock(musb->clock, 1); | ||
2451 | else | ||
2452 | clk_enable(musb->clock); | ||
2453 | |||
2454 | musb_restore_context(musb); | 2403 | musb_restore_context(musb); |
2455 | 2404 | ||
2456 | /* for static cmos like DaVinci, register values were preserved | 2405 | /* for static cmos like DaVinci, register values were preserved |