aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2015-05-01 15:29:28 -0400
committerFelipe Balbi <balbi@ti.com>2015-05-07 14:35:51 -0400
commit7f6283ed6fe867ce168ee3eea2ced4f6cdeeb37a (patch)
treee5f5f48541a71f85abf585754a5d649b91c0273b
parentf8e9f34f80a21540ebf8ba26877568124ca096b0 (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.c4
-rw-r--r--drivers/usb/musb/blackfin.c4
-rw-r--r--drivers/usb/musb/cppi_dma.c9
-rw-r--r--drivers/usb/musb/da8xx.c4
-rw-r--r--drivers/usb/musb/davinci.c4
-rw-r--r--drivers/usb/musb/jz4740.c4
-rw-r--r--drivers/usb/musb/musb_core.c25
-rw-r--r--drivers/usb/musb/musb_core.h5
-rw-r--r--drivers/usb/musb/musb_cppi41.c8
-rw-r--r--drivers/usb/musb/musb_dma.h32
-rw-r--r--drivers/usb/musb/musb_dsps.c4
-rw-r--r--drivers/usb/musb/musbhsdma.c9
-rw-r--r--drivers/usb/musb/omap2430.c4
-rw-r--r--drivers/usb/musb/tusb6010.c4
-rw-r--r--drivers/usb/musb/tusb6010_omap.c9
-rw-r--r--drivers/usb/musb/ux500.c4
-rw-r--r--drivers/usb/musb/ux500_dma.c8
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)
1297EXPORT_SYMBOL_GPL(cppi_interrupt); 1297EXPORT_SYMBOL_GPL(cppi_interrupt);
1298 1298
1299/* Instantiate a software object representing a DMA controller. */ 1299/* Instantiate a software object representing a DMA controller. */
1300struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mregs) 1300struct dma_controller *
1301cppi_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}
1347EXPORT_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 */
1350void dma_controller_destroy(struct dma_controller *c) 1352void 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}
1368EXPORT_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 */
108static const struct musb_platform_ops jz4740_musb_ops = { 112static 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);
389void (*musb_writel)(void __iomem *addr, unsigned offset, u32 data); 389void (*musb_writel)(void __iomem *addr, unsigned offset, u32 data);
390EXPORT_SYMBOL_GPL(musb_writel); 390EXPORT_SYMBOL_GPL(musb_writel);
391 391
392#ifndef CONFIG_MUSB_PIO_ONLY
393struct dma_controller *
394(*musb_dma_controller_create)(struct musb *musb, void __iomem *base);
395EXPORT_SYMBOL(musb_dma_controller_create);
396
397void (*musb_dma_controller_destroy)(struct dma_controller *c);
398EXPORT_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);
2193fail2_5: 2212fail2_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
681void dma_controller_destroy(struct dma_controller *c) 681void 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}
690EXPORT_SYMBOL_GPL(cppi41_dma_controller_destroy);
690 691
691struct dma_controller *dma_controller_create(struct musb *musb, 692struct dma_controller *
692 void __iomem *base) 693cppi41_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}
730EXPORT_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 {
202extern void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit); 202extern 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
205static inline struct dma_controller *dma_controller_create(struct musb *m, 205static inline struct dma_controller *
206 void __iomem *io) 206musb_dma_controller_create(struct musb *m, void __iomem *io)
207{ 207{
208 return NULL; 208 return NULL;
209} 209}
210 210
211static inline void dma_controller_destroy(struct dma_controller *d) { } 211static inline void musb_dma_controller_destroy(struct dma_controller *d) { }
212 212
213#else 213#else
214 214
215extern struct dma_controller *dma_controller_create(struct musb *, void __iomem *); 215extern struct dma_controller *
216(*musb_dma_controller_create)(struct musb *, void __iomem *);
216 217
217extern void dma_controller_destroy(struct dma_controller *); 218extern void (*musb_dma_controller_destroy)(struct dma_controller *);
218#endif 219#endif
219 220
221/* Platform specific DMA functions */
222extern struct dma_controller *
223musbhs_dma_controller_create(struct musb *musb, void __iomem *base);
224extern void musbhs_dma_controller_destroy(struct dma_controller *c);
225
226extern struct dma_controller *
227tusb_dma_controller_create(struct musb *musb, void __iomem *base);
228extern void tusb_dma_controller_destroy(struct dma_controller *c);
229
230extern struct dma_controller *
231cppi_dma_controller_create(struct musb *musb, void __iomem *base);
232extern void cppi_dma_controller_destroy(struct dma_controller *c);
233
234extern struct dma_controller *
235cppi41_dma_controller_create(struct musb *musb, void __iomem *base);
236extern void cppi41_dma_controller_destroy(struct dma_controller *c);
237
238extern struct dma_controller *
239ux500_dma_controller_create(struct musb *musb, void __iomem *base);
240extern 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
360void dma_controller_destroy(struct dma_controller *c) 360void 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}
372EXPORT_SYMBOL_GPL(musbhs_dma_controller_destroy);
372 373
373struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base) 374struct 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}
412EXPORT_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
495static const struct musb_platform_ops omap2430_ops = { 495static 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
628void dma_controller_destroy(struct dma_controller *c) 628void 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}
647EXPORT_SYMBOL_GPL(tusb_dma_controller_destroy);
647 648
648struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *base) 649struct dma_controller *
650tusb_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
703cleanup: 705cleanup:
704 dma_controller_destroy(&tusb_dma->controller); 706 musb_dma_controller_destroy(&tusb_dma->controller);
705out: 707out:
706 return NULL; 708 return NULL;
707} 709}
710EXPORT_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
190static const struct musb_platform_ops ux500_ops = { 190static 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
362void dma_controller_destroy(struct dma_controller *c) 362void 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}
370EXPORT_SYMBOL_GPL(ux500_dma_controller_destroy);
370 371
371struct dma_controller *dma_controller_create(struct musb *musb, 372struct dma_controller *
372 void __iomem *base) 373ux500_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:
407kzalloc_fail: 408kzalloc_fail:
408 return NULL; 409 return NULL;
409} 410}
411EXPORT_SYMBOL_GPL(ux500_dma_controller_create);