@@ -553,6 +553,69 @@ static int dwc3_core_get_phy(struct dwc3 *dwc)
553
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
619
#define DWC3_ALIGN_MASK (16 - 1)
557
620
558
621
static int dwc3_probe (struct platform_device * pdev )
@@ -682,41 +745,9 @@ static int dwc3_probe(struct platform_device *pdev)
682
745
goto err_usb3phy_power ;
683
746
}
684
747
685
- switch (dwc -> dr_mode ) {
686
- case USB_DR_MODE_PERIPHERAL :
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 );
748
+ ret = dwc3_core_init_mode (dwc );
749
+ if (ret )
718
750
goto err2 ;
719
- }
720
751
721
752
ret = dwc3_debugfs_init (dwc );
722
753
if (ret ) {
@@ -729,21 +760,7 @@ static int dwc3_probe(struct platform_device *pdev)
729
760
return 0 ;
730
761
731
762
err3 :
732
- switch (dwc -> dr_mode ) {
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
- }
763
+ dwc3_core_exit_mode (dwc );
747
764
748
765
err2 :
749
766
dwc3_event_buffers_cleanup (dwc );
@@ -778,23 +795,7 @@ static int dwc3_remove(struct platform_device *pdev)
778
795
pm_runtime_disable (& pdev -> dev );
779
796
780
797
dwc3_debugfs_exit (dwc );
781
-
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_core_exit_mode (dwc );
798
799
dwc3_event_buffers_cleanup (dwc );
799
800
dwc3_free_event_buffers (dwc );
800
801
dwc3_core_exit (dwc );
0 commit comments