aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3
diff options
context:
space:
mode:
authorFelipe Balbi <balbi@ti.com>2014-04-16 16:13:45 -0400
committerFelipe Balbi <balbi@ti.com>2014-04-21 11:53:01 -0400
commit5f94adfeed97a62f31a25d14effc6ac13c847333 (patch)
treed83ff7acccf5dddf1ce55a34c77bcf51556c3e2f /drivers/usb/dwc3
parent041832565e405d2e2ea218632b7bcafa87deaece (diff)
usb: dwc3: core: refactor mode initialization to its own function
Move mode (Host, Peripheral, OTG) initialization to its own function in order to decrease the size of our probe() routine. Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r--drivers/usb/dwc3/core.c133
1 files changed, 67 insertions, 66 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 38976f3123d3..af8c8f6e67b3 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -553,6 +553,69 @@ static int dwc3_core_get_phy(struct dwc3 *dwc)
553 return 0; 553 return 0;
554} 554}
555 555
556static int dwc3_core_init_mode(struct dwc3 *dwc)
557{
558 struct device *dev = dwc->dev;
559 int ret;
560
561 switch (dwc->dr_mode) {
562 case USB_DR_MODE_PERIPHERAL:
563 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
564 ret = dwc3_gadget_init(dwc);
565 if (ret) {
566 dev_err(dev, "failed to initialize gadget\n");
567 return ret;
568 }
569 break;
570 case USB_DR_MODE_HOST:
571 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
572 ret = dwc3_host_init(dwc);
573 if (ret) {
574 dev_err(dev, "failed to initialize host\n");
575 return ret;
576 }
577 break;
578 case USB_DR_MODE_OTG:
579 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
580 ret = dwc3_host_init(dwc);
581 if (ret) {
582 dev_err(dev, "failed to initialize host\n");
583 return ret;
584 }
585
586 ret = dwc3_gadget_init(dwc);
587 if (ret) {
588 dev_err(dev, "failed to initialize gadget\n");
589 return ret;
590 }
591 break;
592 default:
593 dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode);
594 return -EINVAL;
595 }
596
597 return 0;
598}
599
600static void dwc3_core_exit_mode(struct dwc3 *dwc)
601{
602 switch (dwc->dr_mode) {
603 case USB_DR_MODE_PERIPHERAL:
604 dwc3_gadget_exit(dwc);
605 break;
606 case USB_DR_MODE_HOST:
607 dwc3_host_exit(dwc);
608 break;
609 case USB_DR_MODE_OTG:
610 dwc3_host_exit(dwc);
611 dwc3_gadget_exit(dwc);
612 break;
613 default:
614 /* do nothing */
615 break;
616 }
617}
618
556#define DWC3_ALIGN_MASK (16 - 1) 619#define DWC3_ALIGN_MASK (16 - 1)
557 620
558static int dwc3_probe(struct platform_device *pdev) 621static int dwc3_probe(struct platform_device *pdev)
@@ -682,41 +745,9 @@ static int dwc3_probe(struct platform_device *pdev)
682 goto err_usb3phy_power; 745 goto err_usb3phy_power;
683 } 746 }
684 747
685 switch (dwc->dr_mode) { 748 ret = dwc3_core_init_mode(dwc);
686 case USB_DR_MODE_PERIPHERAL: 749 if (ret)
687 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
688 ret = dwc3_gadget_init(dwc);
689 if (ret) {
690 dev_err(dev, "failed to initialize gadget\n");
691 goto err2;
692 }
693 break;
694 case USB_DR_MODE_HOST:
695 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
696 ret = dwc3_host_init(dwc);
697 if (ret) {
698 dev_err(dev, "failed to initialize host\n");
699 goto err2;
700 }
701 break;
702 case USB_DR_MODE_OTG:
703 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
704 ret = dwc3_host_init(dwc);
705 if (ret) {
706 dev_err(dev, "failed to initialize host\n");
707 goto err2;
708 }
709
710 ret = dwc3_gadget_init(dwc);
711 if (ret) {
712 dev_err(dev, "failed to initialize gadget\n");
713 goto err2;
714 }
715 break;
716 default:
717 dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode);
718 goto err2; 750 goto err2;
719 }
720 751
721 ret = dwc3_debugfs_init(dwc); 752 ret = dwc3_debugfs_init(dwc);
722 if (ret) { 753 if (ret) {
@@ -729,21 +760,7 @@ static int dwc3_probe(struct platform_device *pdev)
729 return 0; 760 return 0;
730 761
731err3: 762err3:
732 switch (dwc->dr_mode) { 763 dwc3_core_exit_mode(dwc);
733 case USB_DR_MODE_PERIPHERAL:
734 dwc3_gadget_exit(dwc);
735 break;
736 case USB_DR_MODE_HOST:
737 dwc3_host_exit(dwc);
738 break;
739 case USB_DR_MODE_OTG:
740 dwc3_host_exit(dwc);
741 dwc3_gadget_exit(dwc);
742 break;
743 default:
744 /* do nothing */
745 break;
746 }
747 764
748err2: 765err2:
749 dwc3_event_buffers_cleanup(dwc); 766 dwc3_event_buffers_cleanup(dwc);
@@ -778,23 +795,7 @@ static int dwc3_remove(struct platform_device *pdev)
778 pm_runtime_disable(&pdev->dev); 795 pm_runtime_disable(&pdev->dev);
779 796
780 dwc3_debugfs_exit(dwc); 797 dwc3_debugfs_exit(dwc);
781 798 dwc3_core_exit_mode(dwc);
782 switch (dwc->dr_mode) {
783 case USB_DR_MODE_PERIPHERAL:
784 dwc3_gadget_exit(dwc);
785 break;
786 case USB_DR_MODE_HOST:
787 dwc3_host_exit(dwc);
788 break;
789 case USB_DR_MODE_OTG:
790 dwc3_host_exit(dwc);
791 dwc3_gadget_exit(dwc);
792 break;
793 default:
794 /* do nothing */
795 break;
796 }
797
798 dwc3_event_buffers_cleanup(dwc); 799 dwc3_event_buffers_cleanup(dwc);
799 dwc3_free_event_buffers(dwc); 800 dwc3_free_event_buffers(dwc);
800 dwc3_core_exit(dwc); 801 dwc3_core_exit(dwc);