diff options
author | Tony Lindgren <tony@atomide.com> | 2015-05-01 15:29:28 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2015-05-07 14:35:51 -0400 |
commit | 7f6283ed6fe867ce168ee3eea2ced4f6cdeeb37a (patch) | |
tree | e5f5f48541a71f85abf585754a5d649b91c0273b | |
parent | f8e9f34f80a21540ebf8ba26877568124ca096b0 (diff) |
usb: musb: Set up function pointers for DMA
Set up function pointers for DMA so get closer to
being able to build in all the DMA engines.
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r-- | drivers/usb/musb/am35x.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/blackfin.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/cppi_dma.c | 9 | ||||
-rw-r--r-- | drivers/usb/musb/da8xx.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/davinci.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/jz4740.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/musb_core.c | 25 | ||||
-rw-r--r-- | drivers/usb/musb/musb_core.h | 5 | ||||
-rw-r--r-- | drivers/usb/musb/musb_cppi41.c | 8 | ||||
-rw-r--r-- | drivers/usb/musb/musb_dma.h | 32 | ||||
-rw-r--r-- | drivers/usb/musb/musb_dsps.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/musbhsdma.c | 9 | ||||
-rw-r--r-- | drivers/usb/musb/omap2430.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/tusb6010.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/tusb6010_omap.c | 9 | ||||
-rw-r--r-- | drivers/usb/musb/ux500.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/ux500_dma.c | 8 |
17 files changed, 118 insertions, 23 deletions
diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c index 72ce2e862b61..6cfd43a62d3b 100644 --- a/drivers/usb/musb/am35x.c +++ b/drivers/usb/musb/am35x.c | |||
@@ -443,6 +443,10 @@ static const struct musb_platform_ops am35x_ops = { | |||
443 | .exit = am35x_musb_exit, | 443 | .exit = am35x_musb_exit, |
444 | 444 | ||
445 | .read_fifo = am35x_read_fifo, | 445 | .read_fifo = am35x_read_fifo, |
446 | #ifdef CONFIG_USB_INVENTRA_DMA | ||
447 | .dma_init = musbhs_dma_controller_create, | ||
448 | .dma_exit = musbhs_dma_controller_destroy, | ||
449 | #endif | ||
446 | .enable = am35x_musb_enable, | 450 | .enable = am35x_musb_enable, |
447 | .disable = am35x_musb_disable, | 451 | .disable = am35x_musb_disable, |
448 | 452 | ||
diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c index 2a73a730bfa5..310238c6b5cd 100644 --- a/drivers/usb/musb/blackfin.c +++ b/drivers/usb/musb/blackfin.c | |||
@@ -478,6 +478,10 @@ static const struct musb_platform_ops bfin_ops = { | |||
478 | .fifo_mode = 2, | 478 | .fifo_mode = 2, |
479 | .read_fifo = bfin_read_fifo, | 479 | .read_fifo = bfin_read_fifo, |
480 | .write_fifo = bfin_write_fifo, | 480 | .write_fifo = bfin_write_fifo, |
481 | #ifdef CONFIG_USB_INVENTRA_DMA | ||
482 | .dma_init = musbhs_dma_controller_create, | ||
483 | .dma_exit = musbhs_dma_controller_destroy, | ||
484 | #endif | ||
481 | .enable = bfin_musb_enable, | 485 | .enable = bfin_musb_enable, |
482 | .disable = bfin_musb_disable, | 486 | .disable = bfin_musb_disable, |
483 | 487 | ||
diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c index 904fb85d85a6..cc134109b056 100644 --- a/drivers/usb/musb/cppi_dma.c +++ b/drivers/usb/musb/cppi_dma.c | |||
@@ -1297,7 +1297,8 @@ irqreturn_t cppi_interrupt(int irq, void *dev_id) | |||
1297 | EXPORT_SYMBOL_GPL(cppi_interrupt); | 1297 | EXPORT_SYMBOL_GPL(cppi_interrupt); |
1298 | 1298 | ||
1299 | /* Instantiate a software object representing a DMA controller. */ | 1299 | /* Instantiate a software object representing a DMA controller. */ |
1300 | struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mregs) | 1300 | struct dma_controller * |
1301 | cppi_dma_controller_create(struct musb *musb, void __iomem *mregs) | ||
1301 | { | 1302 | { |
1302 | struct cppi *controller; | 1303 | struct cppi *controller; |
1303 | struct device *dev = musb->controller; | 1304 | struct device *dev = musb->controller; |
@@ -1334,7 +1335,7 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mr | |||
1334 | if (irq > 0) { | 1335 | if (irq > 0) { |
1335 | if (request_irq(irq, cppi_interrupt, 0, "cppi-dma", musb)) { | 1336 | if (request_irq(irq, cppi_interrupt, 0, "cppi-dma", musb)) { |
1336 | dev_err(dev, "request_irq %d failed!\n", irq); | 1337 | dev_err(dev, "request_irq %d failed!\n", irq); |
1337 | dma_controller_destroy(&controller->controller); | 1338 | musb_dma_controller_destroy(&controller->controller); |
1338 | return NULL; | 1339 | return NULL; |
1339 | } | 1340 | } |
1340 | controller->irq = irq; | 1341 | controller->irq = irq; |
@@ -1343,11 +1344,12 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mr | |||
1343 | cppi_controller_start(controller); | 1344 | cppi_controller_start(controller); |
1344 | return &controller->controller; | 1345 | return &controller->controller; |
1345 | } | 1346 | } |
1347 | EXPORT_SYMBOL_GPL(cppi_dma_controller_create); | ||
1346 | 1348 | ||
1347 | /* | 1349 | /* |
1348 | * Destroy a previously-instantiated DMA controller. | 1350 | * Destroy a previously-instantiated DMA controller. |
1349 | */ | 1351 | */ |
1350 | void dma_controller_destroy(struct dma_controller *c) | 1352 | void cppi_dma_controller_destroy(struct dma_controller *c) |
1351 | { | 1353 | { |
1352 | struct cppi *cppi; | 1354 | struct cppi *cppi; |
1353 | 1355 | ||
@@ -1363,6 +1365,7 @@ void dma_controller_destroy(struct dma_controller *c) | |||
1363 | 1365 | ||
1364 | kfree(cppi); | 1366 | kfree(cppi); |
1365 | } | 1367 | } |
1368 | EXPORT_SYMBOL_GPL(cppi_dma_controller_destroy); | ||
1366 | 1369 | ||
1367 | /* | 1370 | /* |
1368 | * Context: controller irqlocked, endpoint selected | 1371 | * Context: controller irqlocked, endpoint selected |
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 06c442c2fb20..b03d3b867fca 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c | |||
@@ -463,6 +463,10 @@ static const struct musb_platform_ops da8xx_ops = { | |||
463 | .exit = da8xx_musb_exit, | 463 | .exit = da8xx_musb_exit, |
464 | 464 | ||
465 | .fifo_mode = 2, | 465 | .fifo_mode = 2, |
466 | #ifdef CONFIG_USB_TI_CPPI_DMA | ||
467 | .dma_init = cppi_dma_controller_create, | ||
468 | .dma_exit = cppi_dma_controller_destroy, | ||
469 | #endif | ||
466 | .enable = da8xx_musb_enable, | 470 | .enable = da8xx_musb_enable, |
467 | .disable = da8xx_musb_disable, | 471 | .disable = da8xx_musb_disable, |
468 | 472 | ||
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c index 26bfdb33bcc7..cee61a51645e 100644 --- a/drivers/usb/musb/davinci.c +++ b/drivers/usb/musb/davinci.c | |||
@@ -495,6 +495,10 @@ static const struct musb_platform_ops davinci_ops = { | |||
495 | .init = davinci_musb_init, | 495 | .init = davinci_musb_init, |
496 | .exit = davinci_musb_exit, | 496 | .exit = davinci_musb_exit, |
497 | 497 | ||
498 | #ifdef CONFIG_USB_TI_CPPI_DMA | ||
499 | .dma_init = cppi_dma_controller_create, | ||
500 | .dma_exit = cppi_dma_controller_destroy, | ||
501 | #endif | ||
498 | .enable = davinci_musb_enable, | 502 | .enable = davinci_musb_enable, |
499 | .disable = davinci_musb_disable, | 503 | .disable = davinci_musb_disable, |
500 | 504 | ||
diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c index b7b5fdc0000e..5e5a8fa005f8 100644 --- a/drivers/usb/musb/jz4740.c +++ b/drivers/usb/musb/jz4740.c | |||
@@ -105,6 +105,10 @@ static int jz4740_musb_exit(struct musb *musb) | |||
105 | return 0; | 105 | return 0; |
106 | } | 106 | } |
107 | 107 | ||
108 | /* | ||
109 | * DMA has not been confirmed to work with CONFIG_USB_INVENTRA_DMA, | ||
110 | * so let's not set up the dma function pointers yet. | ||
111 | */ | ||
108 | static const struct musb_platform_ops jz4740_musb_ops = { | 112 | static const struct musb_platform_ops jz4740_musb_ops = { |
109 | .quirks = MUSB_DMA_INVENTRA | MUSB_INDEXED_EP, | 113 | .quirks = MUSB_DMA_INVENTRA | MUSB_INDEXED_EP, |
110 | .fifo_mode = 2, | 114 | .fifo_mode = 2, |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 4ac060ab8a89..5f35ecdcefd0 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -389,6 +389,15 @@ EXPORT_SYMBOL_GPL(musb_readl); | |||
389 | void (*musb_writel)(void __iomem *addr, unsigned offset, u32 data); | 389 | void (*musb_writel)(void __iomem *addr, unsigned offset, u32 data); |
390 | EXPORT_SYMBOL_GPL(musb_writel); | 390 | EXPORT_SYMBOL_GPL(musb_writel); |
391 | 391 | ||
392 | #ifndef CONFIG_MUSB_PIO_ONLY | ||
393 | struct dma_controller * | ||
394 | (*musb_dma_controller_create)(struct musb *musb, void __iomem *base); | ||
395 | EXPORT_SYMBOL(musb_dma_controller_create); | ||
396 | |||
397 | void (*musb_dma_controller_destroy)(struct dma_controller *c); | ||
398 | EXPORT_SYMBOL(musb_dma_controller_destroy); | ||
399 | #endif | ||
400 | |||
392 | /* | 401 | /* |
393 | * New style IO functions | 402 | * New style IO functions |
394 | */ | 403 | */ |
@@ -2059,6 +2068,15 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
2059 | if (musb->ops->writel) | 2068 | if (musb->ops->writel) |
2060 | musb_writel = musb->ops->writel; | 2069 | musb_writel = musb->ops->writel; |
2061 | 2070 | ||
2071 | #ifndef CONFIG_MUSB_PIO_ONLY | ||
2072 | if (!musb->ops->dma_init || !musb->ops->dma_exit) { | ||
2073 | dev_err(dev, "DMA controller not set\n"); | ||
2074 | goto fail2; | ||
2075 | } | ||
2076 | musb_dma_controller_create = musb->ops->dma_init; | ||
2077 | musb_dma_controller_destroy = musb->ops->dma_exit; | ||
2078 | #endif | ||
2079 | |||
2062 | if (musb->ops->read_fifo) | 2080 | if (musb->ops->read_fifo) |
2063 | musb->io.read_fifo = musb->ops->read_fifo; | 2081 | musb->io.read_fifo = musb->ops->read_fifo; |
2064 | else | 2082 | else |
@@ -2078,7 +2096,8 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
2078 | pm_runtime_get_sync(musb->controller); | 2096 | pm_runtime_get_sync(musb->controller); |
2079 | 2097 | ||
2080 | if (use_dma && dev->dma_mask) { | 2098 | if (use_dma && dev->dma_mask) { |
2081 | musb->dma_controller = dma_controller_create(musb, musb->mregs); | 2099 | musb->dma_controller = |
2100 | musb_dma_controller_create(musb, musb->mregs); | ||
2082 | if (IS_ERR(musb->dma_controller)) { | 2101 | if (IS_ERR(musb->dma_controller)) { |
2083 | status = PTR_ERR(musb->dma_controller); | 2102 | status = PTR_ERR(musb->dma_controller); |
2084 | goto fail2_5; | 2103 | goto fail2_5; |
@@ -2189,7 +2208,7 @@ fail3: | |||
2189 | cancel_delayed_work_sync(&musb->finish_resume_work); | 2208 | cancel_delayed_work_sync(&musb->finish_resume_work); |
2190 | cancel_delayed_work_sync(&musb->deassert_reset_work); | 2209 | cancel_delayed_work_sync(&musb->deassert_reset_work); |
2191 | if (musb->dma_controller) | 2210 | if (musb->dma_controller) |
2192 | dma_controller_destroy(musb->dma_controller); | 2211 | musb_dma_controller_destroy(musb->dma_controller); |
2193 | fail2_5: | 2212 | fail2_5: |
2194 | pm_runtime_put_sync(musb->controller); | 2213 | pm_runtime_put_sync(musb->controller); |
2195 | 2214 | ||
@@ -2248,7 +2267,7 @@ static int musb_remove(struct platform_device *pdev) | |||
2248 | musb_shutdown(pdev); | 2267 | musb_shutdown(pdev); |
2249 | 2268 | ||
2250 | if (musb->dma_controller) | 2269 | if (musb->dma_controller) |
2251 | dma_controller_destroy(musb->dma_controller); | 2270 | musb_dma_controller_destroy(musb->dma_controller); |
2252 | 2271 | ||
2253 | cancel_work_sync(&musb->irq_work); | 2272 | cancel_work_sync(&musb->irq_work); |
2254 | cancel_delayed_work_sync(&musb->finish_resume_work); | 2273 | cancel_delayed_work_sync(&musb->finish_resume_work); |
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 3877249a8b2d..c7a0d933eff9 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h | |||
@@ -157,6 +157,8 @@ struct musb_io; | |||
157 | * @writel: write 32 bits | 157 | * @writel: write 32 bits |
158 | * @read_fifo: reads the fifo | 158 | * @read_fifo: reads the fifo |
159 | * @write_fifo: writes to fifo | 159 | * @write_fifo: writes to fifo |
160 | * @dma_init: platform specific dma init function | ||
161 | * @dma_exit: platform specific dma exit function | ||
160 | * @init: turns on clocks, sets up platform-specific registers, etc | 162 | * @init: turns on clocks, sets up platform-specific registers, etc |
161 | * @exit: undoes @init | 163 | * @exit: undoes @init |
162 | * @set_mode: forcefully changes operating mode | 164 | * @set_mode: forcefully changes operating mode |
@@ -195,6 +197,9 @@ struct musb_platform_ops { | |||
195 | void (*writel)(void __iomem *addr, unsigned offset, u32 data); | 197 | void (*writel)(void __iomem *addr, unsigned offset, u32 data); |
196 | void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); | 198 | void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); |
197 | void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); | 199 | void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); |
200 | struct dma_controller * | ||
201 | (*dma_init) (struct musb *musb, void __iomem *base); | ||
202 | void (*dma_exit)(struct dma_controller *c); | ||
198 | int (*set_mode)(struct musb *musb, u8 mode); | 203 | int (*set_mode)(struct musb *musb, u8 mode); |
199 | void (*try_idle)(struct musb *musb, unsigned long timeout); | 204 | void (*try_idle)(struct musb *musb, unsigned long timeout); |
200 | int (*recover)(struct musb *musb); | 205 | int (*recover)(struct musb *musb); |
diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c index 8bd8c5e26921..4d1b44c232ee 100644 --- a/drivers/usb/musb/musb_cppi41.c +++ b/drivers/usb/musb/musb_cppi41.c | |||
@@ -678,7 +678,7 @@ err: | |||
678 | return ret; | 678 | return ret; |
679 | } | 679 | } |
680 | 680 | ||
681 | void dma_controller_destroy(struct dma_controller *c) | 681 | void cppi41_dma_controller_destroy(struct dma_controller *c) |
682 | { | 682 | { |
683 | struct cppi41_dma_controller *controller = container_of(c, | 683 | struct cppi41_dma_controller *controller = container_of(c, |
684 | struct cppi41_dma_controller, controller); | 684 | struct cppi41_dma_controller, controller); |
@@ -687,9 +687,10 @@ void dma_controller_destroy(struct dma_controller *c) | |||
687 | cppi41_dma_controller_stop(controller); | 687 | cppi41_dma_controller_stop(controller); |
688 | kfree(controller); | 688 | kfree(controller); |
689 | } | 689 | } |
690 | EXPORT_SYMBOL_GPL(cppi41_dma_controller_destroy); | ||
690 | 691 | ||
691 | struct dma_controller *dma_controller_create(struct musb *musb, | 692 | struct dma_controller * |
692 | void __iomem *base) | 693 | cppi41_dma_controller_create(struct musb *musb, void __iomem *base) |
693 | { | 694 | { |
694 | struct cppi41_dma_controller *controller; | 695 | struct cppi41_dma_controller *controller; |
695 | int ret = 0; | 696 | int ret = 0; |
@@ -726,3 +727,4 @@ kzalloc_fail: | |||
726 | return ERR_PTR(ret); | 727 | return ERR_PTR(ret); |
727 | return NULL; | 728 | return NULL; |
728 | } | 729 | } |
730 | EXPORT_SYMBOL_GPL(cppi41_dma_controller_create); | ||
diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h index 555f2aed5a55..46357e183b4c 100644 --- a/drivers/usb/musb/musb_dma.h +++ b/drivers/usb/musb/musb_dma.h | |||
@@ -202,19 +202,41 @@ struct dma_controller { | |||
202 | extern void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit); | 202 | extern void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit); |
203 | 203 | ||
204 | #ifdef CONFIG_MUSB_PIO_ONLY | 204 | #ifdef CONFIG_MUSB_PIO_ONLY |
205 | static inline struct dma_controller *dma_controller_create(struct musb *m, | 205 | static inline struct dma_controller * |
206 | void __iomem *io) | 206 | musb_dma_controller_create(struct musb *m, void __iomem *io) |
207 | { | 207 | { |
208 | return NULL; | 208 | return NULL; |
209 | } | 209 | } |
210 | 210 | ||
211 | static inline void dma_controller_destroy(struct dma_controller *d) { } | 211 | static inline void musb_dma_controller_destroy(struct dma_controller *d) { } |
212 | 212 | ||
213 | #else | 213 | #else |
214 | 214 | ||
215 | extern struct dma_controller *dma_controller_create(struct musb *, void __iomem *); | 215 | extern struct dma_controller * |
216 | (*musb_dma_controller_create)(struct musb *, void __iomem *); | ||
216 | 217 | ||
217 | extern void dma_controller_destroy(struct dma_controller *); | 218 | extern void (*musb_dma_controller_destroy)(struct dma_controller *); |
218 | #endif | 219 | #endif |
219 | 220 | ||
221 | /* Platform specific DMA functions */ | ||
222 | extern struct dma_controller * | ||
223 | musbhs_dma_controller_create(struct musb *musb, void __iomem *base); | ||
224 | extern void musbhs_dma_controller_destroy(struct dma_controller *c); | ||
225 | |||
226 | extern struct dma_controller * | ||
227 | tusb_dma_controller_create(struct musb *musb, void __iomem *base); | ||
228 | extern void tusb_dma_controller_destroy(struct dma_controller *c); | ||
229 | |||
230 | extern struct dma_controller * | ||
231 | cppi_dma_controller_create(struct musb *musb, void __iomem *base); | ||
232 | extern void cppi_dma_controller_destroy(struct dma_controller *c); | ||
233 | |||
234 | extern struct dma_controller * | ||
235 | cppi41_dma_controller_create(struct musb *musb, void __iomem *base); | ||
236 | extern void cppi41_dma_controller_destroy(struct dma_controller *c); | ||
237 | |||
238 | extern struct dma_controller * | ||
239 | ux500_dma_controller_create(struct musb *musb, void __iomem *base); | ||
240 | extern void ux500_dma_controller_destroy(struct dma_controller *c); | ||
241 | |||
220 | #endif /* __MUSB_DMA_H__ */ | 242 | #endif /* __MUSB_DMA_H__ */ |
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c index 63a8d5bbd365..1334a3de31b8 100644 --- a/drivers/usb/musb/musb_dsps.c +++ b/drivers/usb/musb/musb_dsps.c | |||
@@ -638,6 +638,10 @@ static struct musb_platform_ops dsps_ops = { | |||
638 | .init = dsps_musb_init, | 638 | .init = dsps_musb_init, |
639 | .exit = dsps_musb_exit, | 639 | .exit = dsps_musb_exit, |
640 | 640 | ||
641 | #ifdef CONFIG_USB_TI_CPPI41_DMA | ||
642 | .dma_init = cppi41_dma_controller_create, | ||
643 | .dma_exit = cppi41_dma_controller_destroy, | ||
644 | #endif | ||
641 | .enable = dsps_musb_enable, | 645 | .enable = dsps_musb_enable, |
642 | .disable = dsps_musb_disable, | 646 | .disable = dsps_musb_disable, |
643 | 647 | ||
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c index ab7ec09a8afe..7539c3188ffc 100644 --- a/drivers/usb/musb/musbhsdma.c +++ b/drivers/usb/musb/musbhsdma.c | |||
@@ -357,7 +357,7 @@ done: | |||
357 | return retval; | 357 | return retval; |
358 | } | 358 | } |
359 | 359 | ||
360 | void dma_controller_destroy(struct dma_controller *c) | 360 | void musbhs_dma_controller_destroy(struct dma_controller *c) |
361 | { | 361 | { |
362 | struct musb_dma_controller *controller = container_of(c, | 362 | struct musb_dma_controller *controller = container_of(c, |
363 | struct musb_dma_controller, controller); | 363 | struct musb_dma_controller, controller); |
@@ -369,8 +369,10 @@ void dma_controller_destroy(struct dma_controller *c) | |||
369 | 369 | ||
370 | kfree(controller); | 370 | kfree(controller); |
371 | } | 371 | } |
372 | EXPORT_SYMBOL_GPL(musbhs_dma_controller_destroy); | ||
372 | 373 | ||
373 | struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base) | 374 | struct dma_controller *musbhs_dma_controller_create(struct musb *musb, |
375 | void __iomem *base) | ||
374 | { | 376 | { |
375 | struct musb_dma_controller *controller; | 377 | struct musb_dma_controller *controller; |
376 | struct device *dev = musb->controller; | 378 | struct device *dev = musb->controller; |
@@ -398,7 +400,7 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *ba | |||
398 | if (request_irq(irq, dma_controller_irq, 0, | 400 | if (request_irq(irq, dma_controller_irq, 0, |
399 | dev_name(musb->controller), &controller->controller)) { | 401 | dev_name(musb->controller), &controller->controller)) { |
400 | dev_err(dev, "request_irq %d failed!\n", irq); | 402 | dev_err(dev, "request_irq %d failed!\n", irq); |
401 | dma_controller_destroy(&controller->controller); | 403 | musb_dma_controller_destroy(&controller->controller); |
402 | 404 | ||
403 | return NULL; | 405 | return NULL; |
404 | } | 406 | } |
@@ -407,3 +409,4 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *ba | |||
407 | 409 | ||
408 | return &controller->controller; | 410 | return &controller->controller; |
409 | } | 411 | } |
412 | EXPORT_SYMBOL_GPL(musbhs_dma_controller_create); | ||
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 5546a22db2ed..70f2b8a2e6cf 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
@@ -494,6 +494,10 @@ static int omap2430_musb_exit(struct musb *musb) | |||
494 | 494 | ||
495 | static const struct musb_platform_ops omap2430_ops = { | 495 | static const struct musb_platform_ops omap2430_ops = { |
496 | .quirks = MUSB_DMA_INVENTRA, | 496 | .quirks = MUSB_DMA_INVENTRA, |
497 | #ifdef CONFIG_USB_INVENTRA_DMA | ||
498 | .dma_init = musbhs_dma_controller_create, | ||
499 | .dma_exit = musbhs_dma_controller_destroy, | ||
500 | #endif | ||
497 | .init = omap2430_musb_init, | 501 | .init = omap2430_musb_init, |
498 | .exit = omap2430_musb_exit, | 502 | .exit = omap2430_musb_exit, |
499 | 503 | ||
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index af923ded829e..df7c9f46be54 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c | |||
@@ -1192,6 +1192,10 @@ static const struct musb_platform_ops tusb_ops = { | |||
1192 | .writeb = tusb_writeb, | 1192 | .writeb = tusb_writeb, |
1193 | .read_fifo = tusb_read_fifo, | 1193 | .read_fifo = tusb_read_fifo, |
1194 | .write_fifo = tusb_write_fifo, | 1194 | .write_fifo = tusb_write_fifo, |
1195 | #ifdef CONFIG_USB_TUSB_OMAP_DMA | ||
1196 | .dma_init = tusb_dma_controller_create, | ||
1197 | .dma_exit = tusb_dma_controller_destroy, | ||
1198 | #endif | ||
1195 | .enable = tusb_musb_enable, | 1199 | .enable = tusb_musb_enable, |
1196 | .disable = tusb_musb_disable, | 1200 | .disable = tusb_musb_disable, |
1197 | 1201 | ||
diff --git a/drivers/usb/musb/tusb6010_omap.c b/drivers/usb/musb/tusb6010_omap.c index 3ce152c0408e..4c82077da475 100644 --- a/drivers/usb/musb/tusb6010_omap.c +++ b/drivers/usb/musb/tusb6010_omap.c | |||
@@ -625,7 +625,7 @@ static void tusb_omap_dma_release(struct dma_channel *channel) | |||
625 | channel = NULL; | 625 | channel = NULL; |
626 | } | 626 | } |
627 | 627 | ||
628 | void dma_controller_destroy(struct dma_controller *c) | 628 | void tusb_dma_controller_destroy(struct dma_controller *c) |
629 | { | 629 | { |
630 | struct tusb_omap_dma *tusb_dma; | 630 | struct tusb_omap_dma *tusb_dma; |
631 | int i; | 631 | int i; |
@@ -644,8 +644,10 @@ void dma_controller_destroy(struct dma_controller *c) | |||
644 | 644 | ||
645 | kfree(tusb_dma); | 645 | kfree(tusb_dma); |
646 | } | 646 | } |
647 | EXPORT_SYMBOL_GPL(tusb_dma_controller_destroy); | ||
647 | 648 | ||
648 | struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base) | 649 | struct dma_controller * |
650 | tusb_dma_controller_create(struct musb *musb, void __iomem *base) | ||
649 | { | 651 | { |
650 | void __iomem *tbase = musb->ctrl_base; | 652 | void __iomem *tbase = musb->ctrl_base; |
651 | struct tusb_omap_dma *tusb_dma; | 653 | struct tusb_omap_dma *tusb_dma; |
@@ -701,7 +703,8 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *ba | |||
701 | return &tusb_dma->controller; | 703 | return &tusb_dma->controller; |
702 | 704 | ||
703 | cleanup: | 705 | cleanup: |
704 | dma_controller_destroy(&tusb_dma->controller); | 706 | musb_dma_controller_destroy(&tusb_dma->controller); |
705 | out: | 707 | out: |
706 | return NULL; | 708 | return NULL; |
707 | } | 709 | } |
710 | EXPORT_SYMBOL_GPL(tusb_dma_controller_create); | ||
diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c index c6582f13ed48..2967b51383d8 100644 --- a/drivers/usb/musb/ux500.c +++ b/drivers/usb/musb/ux500.c | |||
@@ -189,6 +189,10 @@ static int ux500_musb_exit(struct musb *musb) | |||
189 | 189 | ||
190 | static const struct musb_platform_ops ux500_ops = { | 190 | static const struct musb_platform_ops ux500_ops = { |
191 | .quirks = MUSB_DMA_UX500 | MUSB_INDEXED_EP, | 191 | .quirks = MUSB_DMA_UX500 | MUSB_INDEXED_EP, |
192 | #ifdef CONFIG_USB_UX500_DMA | ||
193 | .dma_init = ux500_dma_controller_create, | ||
194 | .dma_exit = ux500_dma_controller_destroy, | ||
195 | #endif | ||
192 | .init = ux500_musb_init, | 196 | .init = ux500_musb_init, |
193 | .exit = ux500_musb_exit, | 197 | .exit = ux500_musb_exit, |
194 | .fifo_mode = 5, | 198 | .fifo_mode = 5, |
diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c index e93845c26bdb..d0b6a1cd7f62 100644 --- a/drivers/usb/musb/ux500_dma.c +++ b/drivers/usb/musb/ux500_dma.c | |||
@@ -359,7 +359,7 @@ static int ux500_dma_controller_start(struct ux500_dma_controller *controller) | |||
359 | return 0; | 359 | return 0; |
360 | } | 360 | } |
361 | 361 | ||
362 | void dma_controller_destroy(struct dma_controller *c) | 362 | void ux500_dma_controller_destroy(struct dma_controller *c) |
363 | { | 363 | { |
364 | struct ux500_dma_controller *controller = container_of(c, | 364 | struct ux500_dma_controller *controller = container_of(c, |
365 | struct ux500_dma_controller, controller); | 365 | struct ux500_dma_controller, controller); |
@@ -367,9 +367,10 @@ void dma_controller_destroy(struct dma_controller *c) | |||
367 | ux500_dma_controller_stop(controller); | 367 | ux500_dma_controller_stop(controller); |
368 | kfree(controller); | 368 | kfree(controller); |
369 | } | 369 | } |
370 | EXPORT_SYMBOL_GPL(ux500_dma_controller_destroy); | ||
370 | 371 | ||
371 | struct dma_controller *dma_controller_create(struct musb *musb, | 372 | struct dma_controller * |
372 | void __iomem *base) | 373 | ux500_dma_controller_create(struct musb *musb, void __iomem *base) |
373 | { | 374 | { |
374 | struct ux500_dma_controller *controller; | 375 | struct ux500_dma_controller *controller; |
375 | struct platform_device *pdev = to_platform_device(musb->controller); | 376 | struct platform_device *pdev = to_platform_device(musb->controller); |
@@ -407,3 +408,4 @@ plat_get_fail: | |||
407 | kzalloc_fail: | 408 | kzalloc_fail: |
408 | return NULL; | 409 | return NULL; |
409 | } | 410 | } |
411 | EXPORT_SYMBOL_GPL(ux500_dma_controller_create); | ||