aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/core.c
diff options
context:
space:
mode:
authorRuchika Kharwar <ruchika@ti.com>2013-07-06 08:52:49 -0400
committerFelipe Balbi <balbi@ti.com>2013-07-29 06:56:51 -0400
commita45c82b84c844cd85b2ed1aa32596f1bffa32716 (patch)
tree5da3e7a15957d138633a9085125defd336bac64d /drivers/usb/dwc3/core.c
parent51e563e3c11492748d11d3846b6d325426427a95 (diff)
usb: dwc3: adapt to use dr_mode device tree helper
This patch adapts the dwc3 to use the device tree helper "of_usb_get_dr_mode" for the mode of operation of the dwc3 instance being probed. [ balbi@ti.com : make of_usb_get_dr_mode() conditional on dev->of_node and let pdata pass dr_mode too ] Reviewed-by: Roger Quadros <rogerq@ti.com> Signed-off-by: Ruchika Kharwar <ruchika@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/core.c')
-rw-r--r--drivers/usb/dwc3/core.c73
1 files changed, 37 insertions, 36 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 2f5632730ffb..df3723a1023e 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -37,6 +37,7 @@
37#include <linux/usb/ch9.h> 37#include <linux/usb/ch9.h>
38#include <linux/usb/gadget.h> 38#include <linux/usb/gadget.h>
39#include <linux/usb/of.h> 39#include <linux/usb/of.h>
40#include <linux/usb/otg.h>
40 41
41#include "platform_data.h" 42#include "platform_data.h"
42#include "core.h" 43#include "core.h"
@@ -359,8 +360,6 @@ static int dwc3_probe(struct platform_device *pdev)
359 void __iomem *regs; 360 void __iomem *regs;
360 void *mem; 361 void *mem;
361 362
362 u8 mode;
363
364 mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); 363 mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL);
365 if (!mem) { 364 if (!mem) {
366 dev_err(dev, "not enough memory\n"); 365 dev_err(dev, "not enough memory\n");
@@ -415,6 +414,7 @@ static int dwc3_probe(struct platform_device *pdev)
415 dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1); 414 dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1);
416 415
417 dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize"); 416 dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize");
417 dwc->dr_mode = of_usb_get_dr_mode(node);
418 } else { 418 } else {
419 dwc->maximum_speed = pdata->maximum_speed; 419 dwc->maximum_speed = pdata->maximum_speed;
420 420
@@ -422,6 +422,7 @@ static int dwc3_probe(struct platform_device *pdev)
422 dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3); 422 dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3);
423 423
424 dwc->needs_fifo_resize = pdata->tx_fifo_resize; 424 dwc->needs_fifo_resize = pdata->tx_fifo_resize;
425 dwc->dr_mode = pdata->dr_mode;
425 } 426 }
426 427
427 /* default to superspeed if no maximum_speed passed */ 428 /* default to superspeed if no maximum_speed passed */
@@ -498,14 +499,15 @@ static int dwc3_probe(struct platform_device *pdev)
498 } 499 }
499 500
500 if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) 501 if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
501 mode = DWC3_MODE_HOST; 502 dwc->dr_mode = USB_DR_MODE_HOST;
502 else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) 503 else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
503 mode = DWC3_MODE_DEVICE; 504 dwc->dr_mode = USB_DR_MODE_PERIPHERAL;
504 else 505
505 mode = DWC3_MODE_DRD; 506 if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
507 dwc->dr_mode = USB_DR_MODE_OTG;
506 508
507 switch (mode) { 509 switch (dwc->dr_mode) {
508 case DWC3_MODE_DEVICE: 510 case USB_DR_MODE_PERIPHERAL:
509 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); 511 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
510 ret = dwc3_gadget_init(dwc); 512 ret = dwc3_gadget_init(dwc);
511 if (ret) { 513 if (ret) {
@@ -513,7 +515,7 @@ static int dwc3_probe(struct platform_device *pdev)
513 goto err2; 515 goto err2;
514 } 516 }
515 break; 517 break;
516 case DWC3_MODE_HOST: 518 case USB_DR_MODE_HOST:
517 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); 519 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
518 ret = dwc3_host_init(dwc); 520 ret = dwc3_host_init(dwc);
519 if (ret) { 521 if (ret) {
@@ -521,7 +523,7 @@ static int dwc3_probe(struct platform_device *pdev)
521 goto err2; 523 goto err2;
522 } 524 }
523 break; 525 break;
524 case DWC3_MODE_DRD: 526 case USB_DR_MODE_OTG:
525 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG); 527 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
526 ret = dwc3_host_init(dwc); 528 ret = dwc3_host_init(dwc);
527 if (ret) { 529 if (ret) {
@@ -536,10 +538,9 @@ static int dwc3_probe(struct platform_device *pdev)
536 } 538 }
537 break; 539 break;
538 default: 540 default:
539 dev_err(dev, "Unsupported mode of operation %d\n", mode); 541 dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode);
540 goto err2; 542 goto err2;
541 } 543 }
542 dwc->mode = mode;
543 544
544 ret = dwc3_debugfs_init(dwc); 545 ret = dwc3_debugfs_init(dwc);
545 if (ret) { 546 if (ret) {
@@ -552,14 +553,14 @@ static int dwc3_probe(struct platform_device *pdev)
552 return 0; 553 return 0;
553 554
554err3: 555err3:
555 switch (mode) { 556 switch (dwc->dr_mode) {
556 case DWC3_MODE_DEVICE: 557 case USB_DR_MODE_PERIPHERAL:
557 dwc3_gadget_exit(dwc); 558 dwc3_gadget_exit(dwc);
558 break; 559 break;
559 case DWC3_MODE_HOST: 560 case USB_DR_MODE_HOST:
560 dwc3_host_exit(dwc); 561 dwc3_host_exit(dwc);
561 break; 562 break;
562 case DWC3_MODE_DRD: 563 case USB_DR_MODE_OTG:
563 dwc3_host_exit(dwc); 564 dwc3_host_exit(dwc);
564 dwc3_gadget_exit(dwc); 565 dwc3_gadget_exit(dwc);
565 break; 566 break;
@@ -592,14 +593,14 @@ static int dwc3_remove(struct platform_device *pdev)
592 593
593 dwc3_debugfs_exit(dwc); 594 dwc3_debugfs_exit(dwc);
594 595
595 switch (dwc->mode) { 596 switch (dwc->dr_mode) {
596 case DWC3_MODE_DEVICE: 597 case USB_DR_MODE_PERIPHERAL:
597 dwc3_gadget_exit(dwc); 598 dwc3_gadget_exit(dwc);
598 break; 599 break;
599 case DWC3_MODE_HOST: 600 case USB_DR_MODE_HOST:
600 dwc3_host_exit(dwc); 601 dwc3_host_exit(dwc);
601 break; 602 break;
602 case DWC3_MODE_DRD: 603 case USB_DR_MODE_OTG:
603 dwc3_host_exit(dwc); 604 dwc3_host_exit(dwc);
604 dwc3_gadget_exit(dwc); 605 dwc3_gadget_exit(dwc);
605 break; 606 break;
@@ -623,12 +624,12 @@ static int dwc3_prepare(struct device *dev)
623 624
624 spin_lock_irqsave(&dwc->lock, flags); 625 spin_lock_irqsave(&dwc->lock, flags);
625 626
626 switch (dwc->mode) { 627 switch (dwc->dr_mode) {
627 case DWC3_MODE_DEVICE: 628 case USB_DR_MODE_PERIPHERAL:
628 case DWC3_MODE_DRD: 629 case USB_DR_MODE_OTG:
629 dwc3_gadget_prepare(dwc); 630 dwc3_gadget_prepare(dwc);
630 /* FALLTHROUGH */ 631 /* FALLTHROUGH */
631 case DWC3_MODE_HOST: 632 case USB_DR_MODE_HOST:
632 default: 633 default:
633 dwc3_event_buffers_cleanup(dwc); 634 dwc3_event_buffers_cleanup(dwc);
634 break; 635 break;
@@ -646,12 +647,12 @@ static void dwc3_complete(struct device *dev)
646 647
647 spin_lock_irqsave(&dwc->lock, flags); 648 spin_lock_irqsave(&dwc->lock, flags);
648 649
649 switch (dwc->mode) { 650 switch (dwc->dr_mode) {
650 case DWC3_MODE_DEVICE: 651 case USB_DR_MODE_PERIPHERAL:
651 case DWC3_MODE_DRD: 652 case USB_DR_MODE_OTG:
652 dwc3_gadget_complete(dwc); 653 dwc3_gadget_complete(dwc);
653 /* FALLTHROUGH */ 654 /* FALLTHROUGH */
654 case DWC3_MODE_HOST: 655 case USB_DR_MODE_HOST:
655 default: 656 default:
656 dwc3_event_buffers_setup(dwc); 657 dwc3_event_buffers_setup(dwc);
657 break; 658 break;
@@ -667,12 +668,12 @@ static int dwc3_suspend(struct device *dev)
667 668
668 spin_lock_irqsave(&dwc->lock, flags); 669 spin_lock_irqsave(&dwc->lock, flags);
669 670
670 switch (dwc->mode) { 671 switch (dwc->dr_mode) {
671 case DWC3_MODE_DEVICE: 672 case USB_DR_MODE_PERIPHERAL:
672 case DWC3_MODE_DRD: 673 case USB_DR_MODE_OTG:
673 dwc3_gadget_suspend(dwc); 674 dwc3_gadget_suspend(dwc);
674 /* FALLTHROUGH */ 675 /* FALLTHROUGH */
675 case DWC3_MODE_HOST: 676 case USB_DR_MODE_HOST:
676 default: 677 default:
677 /* do nothing */ 678 /* do nothing */
678 break; 679 break;
@@ -700,12 +701,12 @@ static int dwc3_resume(struct device *dev)
700 701
701 dwc3_writel(dwc->regs, DWC3_GCTL, dwc->gctl); 702 dwc3_writel(dwc->regs, DWC3_GCTL, dwc->gctl);
702 703
703 switch (dwc->mode) { 704 switch (dwc->dr_mode) {
704 case DWC3_MODE_DEVICE: 705 case USB_DR_MODE_PERIPHERAL:
705 case DWC3_MODE_DRD: 706 case USB_DR_MODE_OTG:
706 dwc3_gadget_resume(dwc); 707 dwc3_gadget_resume(dwc);
707 /* FALLTHROUGH */ 708 /* FALLTHROUGH */
708 case DWC3_MODE_HOST: 709 case USB_DR_MODE_HOST:
709 default: 710 default:
710 /* do nothing */ 711 /* do nothing */
711 break; 712 break;