aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/dwc3/core.c')
-rw-r--r--drivers/usb/dwc3/core.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index a1b126f90261..4aff1d8dbc4f 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -828,6 +828,7 @@ static void dwc3_set_incr_burst_type(struct dwc3 *dwc)
828 ret = device_property_read_u32_array(dev, 828 ret = device_property_read_u32_array(dev,
829 "snps,incr-burst-type-adjustment", vals, ntype); 829 "snps,incr-burst-type-adjustment", vals, ntype);
830 if (ret) { 830 if (ret) {
831 kfree(vals);
831 dev_err(dev, "Error to get property\n"); 832 dev_err(dev, "Error to get property\n");
832 return; 833 return;
833 } 834 }
@@ -846,6 +847,8 @@ static void dwc3_set_incr_burst_type(struct dwc3 *dwc)
846 incrx_mode = INCRX_BURST_MODE; 847 incrx_mode = INCRX_BURST_MODE;
847 } 848 }
848 849
850 kfree(vals);
851
849 /* Enable Undefined Length INCR Burst and Enable INCRx Burst */ 852 /* Enable Undefined Length INCR Burst and Enable INCRx Burst */
850 cfg &= ~DWC3_GSBUSCFG0_INCRBRST_MASK; 853 cfg &= ~DWC3_GSBUSCFG0_INCRBRST_MASK;
851 if (incrx_mode) 854 if (incrx_mode)
@@ -893,12 +896,6 @@ static int dwc3_core_init(struct dwc3 *dwc)
893 u32 reg; 896 u32 reg;
894 int ret; 897 int ret;
895 898
896 if (!dwc3_core_is_valid(dwc)) {
897 dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
898 ret = -ENODEV;
899 goto err0;
900 }
901
902 /* 899 /*
903 * Write Linux Version Code to our GUID register so it's easy to figure 900 * Write Linux Version Code to our GUID register so it's easy to figure
904 * out which kernel version a bug was found. 901 * out which kernel version a bug was found.
@@ -1218,7 +1215,7 @@ static void dwc3_get_properties(struct dwc3 *dwc)
1218 u8 tx_max_burst_prd; 1215 u8 tx_max_burst_prd;
1219 1216
1220 /* default to highest possible threshold */ 1217 /* default to highest possible threshold */
1221 lpm_nyet_threshold = 0xff; 1218 lpm_nyet_threshold = 0xf;
1222 1219
1223 /* default to -3.5dB de-emphasis */ 1220 /* default to -3.5dB de-emphasis */
1224 tx_de_emphasis = 1; 1221 tx_de_emphasis = 1;
@@ -1426,6 +1423,11 @@ static int dwc3_probe(struct platform_device *pdev)
1426 dwc->regs = regs; 1423 dwc->regs = regs;
1427 dwc->regs_size = resource_size(&dwc_res); 1424 dwc->regs_size = resource_size(&dwc_res);
1428 1425
1426 if (!dwc3_core_is_valid(dwc)) {
1427 dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
1428 return -ENODEV;
1429 }
1430
1429 dwc3_get_properties(dwc); 1431 dwc3_get_properties(dwc);
1430 1432
1431 dwc->reset = devm_reset_control_get_optional_shared(dev, NULL); 1433 dwc->reset = devm_reset_control_get_optional_shared(dev, NULL);
@@ -1600,6 +1602,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
1600 spin_lock_irqsave(&dwc->lock, flags); 1602 spin_lock_irqsave(&dwc->lock, flags);
1601 dwc3_gadget_suspend(dwc); 1603 dwc3_gadget_suspend(dwc);
1602 spin_unlock_irqrestore(&dwc->lock, flags); 1604 spin_unlock_irqrestore(&dwc->lock, flags);
1605 synchronize_irq(dwc->irq_gadget);
1603 dwc3_core_exit(dwc); 1606 dwc3_core_exit(dwc);
1604 break; 1607 break;
1605 case DWC3_GCTL_PRTCAP_HOST: 1608 case DWC3_GCTL_PRTCAP_HOST:
@@ -1632,6 +1635,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
1632 spin_lock_irqsave(&dwc->lock, flags); 1635 spin_lock_irqsave(&dwc->lock, flags);
1633 dwc3_gadget_suspend(dwc); 1636 dwc3_gadget_suspend(dwc);
1634 spin_unlock_irqrestore(&dwc->lock, flags); 1637 spin_unlock_irqrestore(&dwc->lock, flags);
1638 synchronize_irq(dwc->irq_gadget);
1635 } 1639 }
1636 1640
1637 dwc3_otg_exit(dwc); 1641 dwc3_otg_exit(dwc);