diff options
author | Felipe Balbi <balbi@ti.com> | 2014-04-16 16:13:45 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2014-04-21 11:53:01 -0400 |
commit | 5f94adfeed97a62f31a25d14effc6ac13c847333 (patch) | |
tree | d83ff7acccf5dddf1ce55a34c77bcf51556c3e2f /drivers/usb/dwc3 | |
parent | 041832565e405d2e2ea218632b7bcafa87deaece (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.c | 133 |
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 | ||
556 | static 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 | |||
600 | static 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 | ||
558 | static int dwc3_probe(struct platform_device *pdev) | 621 | static 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 | ||
731 | err3: | 762 | err3: |
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 | ||
748 | err2: | 765 | err2: |
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); |