Skip to content

Commit 5f94adf

Browse files
author
Felipe Balbi
committed
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 <[email protected]>
1 parent 0418325 commit 5f94adf

File tree

1 file changed

+67
-66
lines changed

1 file changed

+67
-66
lines changed

drivers/usb/dwc3/core.c

Lines changed: 67 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,69 @@ static int dwc3_core_get_phy(struct dwc3 *dwc)
553553
return 0;
554554
}
555555

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+
556619
#define DWC3_ALIGN_MASK (16 - 1)
557620

558621
static int dwc3_probe(struct platform_device *pdev)
@@ -682,41 +745,9 @@ static int dwc3_probe(struct platform_device *pdev)
682745
goto err_usb3phy_power;
683746
}
684747

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)
718750
goto err2;
719-
}
720751

721752
ret = dwc3_debugfs_init(dwc);
722753
if (ret) {
@@ -729,21 +760,7 @@ static int dwc3_probe(struct platform_device *pdev)
729760
return 0;
730761

731762
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);
747764

748765
err2:
749766
dwc3_event_buffers_cleanup(dwc);
@@ -778,23 +795,7 @@ static int dwc3_remove(struct platform_device *pdev)
778795
pm_runtime_disable(&pdev->dev);
779796

780797
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);
798799
dwc3_event_buffers_cleanup(dwc);
799800
dwc3_free_event_buffers(dwc);
800801
dwc3_core_exit(dwc);

0 commit comments

Comments
 (0)