diff options
| author | Huang Rui <ray.huang@amd.com> | 2014-10-28 07:54:31 -0400 |
|---|---|---|
| committer | Felipe Balbi <balbi@ti.com> | 2014-11-03 11:03:37 -0500 |
| commit | 41c06ffdf9cc63edd875cc8ff8ae002cd9b14f96 (patch) | |
| tree | 5b0b161153620e1ab3fbe35ff14631794be3dd6e /drivers/usb/dwc3 | |
| parent | a2a1d0f5838d6aa0d1306ef9bb1011f501faa695 (diff) | |
usb: dwc3: add delay phy power change quirk
This patch adds delay PHY power change from P0 to P1/P2/P3 when link state
changing from U0 to U1/U2/U3 respectively, and some special platforms can
configure that if it is needed.
[ balbi@ti.com : added DeviceTree binding documentation ]
Signed-off-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3')
| -rw-r--r-- | drivers/usb/dwc3/core.c | 6 | ||||
| -rw-r--r-- | drivers/usb/dwc3/core.h | 3 | ||||
| -rw-r--r-- | drivers/usb/dwc3/platform_data.h | 1 |
3 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c07651484c60..de6a00969bc7 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
| @@ -383,6 +383,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc) | |||
| 383 | if (dwc->del_p1p2p3_quirk) | 383 | if (dwc->del_p1p2p3_quirk) |
| 384 | reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN; | 384 | reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN; |
| 385 | 385 | ||
| 386 | if (dwc->del_phy_power_chg_quirk) | ||
| 387 | reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE; | ||
| 388 | |||
| 386 | dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg); | 389 | dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg); |
| 387 | 390 | ||
| 388 | mdelay(100); | 391 | mdelay(100); |
| @@ -766,6 +769,8 @@ static int dwc3_probe(struct platform_device *pdev) | |||
| 766 | "snps,req_p1p2p3_quirk"); | 769 | "snps,req_p1p2p3_quirk"); |
| 767 | dwc->del_p1p2p3_quirk = of_property_read_bool(node, | 770 | dwc->del_p1p2p3_quirk = of_property_read_bool(node, |
| 768 | "snps,del_p1p2p3_quirk"); | 771 | "snps,del_p1p2p3_quirk"); |
| 772 | dwc->del_phy_power_chg_quirk = of_property_read_bool(node, | ||
| 773 | "snps,del_phy_power_chg_quirk"); | ||
| 769 | } else if (pdata) { | 774 | } else if (pdata) { |
| 770 | dwc->maximum_speed = pdata->maximum_speed; | 775 | dwc->maximum_speed = pdata->maximum_speed; |
| 771 | dwc->has_lpm_erratum = pdata->has_lpm_erratum; | 776 | dwc->has_lpm_erratum = pdata->has_lpm_erratum; |
| @@ -780,6 +785,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
| 780 | dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk; | 785 | dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk; |
| 781 | dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk; | 786 | dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk; |
| 782 | dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk; | 787 | dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk; |
| 788 | dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk; | ||
| 783 | } | 789 | } |
| 784 | 790 | ||
| 785 | /* default to superspeed if no maximum_speed passed */ | 791 | /* default to superspeed if no maximum_speed passed */ |
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index b8fbc4a1ee4a..5e8a75c3f3c8 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h | |||
| @@ -181,6 +181,7 @@ | |||
| 181 | #define DWC3_GUSB3PIPECTL_DEP1P2P3(n) ((n) << 19) | 181 | #define DWC3_GUSB3PIPECTL_DEP1P2P3(n) ((n) << 19) |
| 182 | #define DWC3_GUSB3PIPECTL_DEP1P2P3_MASK DWC3_GUSB3PIPECTL_DEP1P2P3(7) | 182 | #define DWC3_GUSB3PIPECTL_DEP1P2P3_MASK DWC3_GUSB3PIPECTL_DEP1P2P3(7) |
| 183 | #define DWC3_GUSB3PIPECTL_DEP1P2P3_EN DWC3_GUSB3PIPECTL_DEP1P2P3(1) | 183 | #define DWC3_GUSB3PIPECTL_DEP1P2P3_EN DWC3_GUSB3PIPECTL_DEP1P2P3(1) |
| 184 | #define DWC3_GUSB3PIPECTL_DEPOCHANGE (1 << 18) | ||
| 184 | #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) | 185 | #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) |
| 185 | 186 | ||
| 186 | /* Global TX Fifo Size Register */ | 187 | /* Global TX Fifo Size Register */ |
| @@ -689,6 +690,7 @@ struct dwc3_scratchpad_array { | |||
| 689 | * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk | 690 | * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk |
| 690 | * @req_p1p2p3_quirk: set if we enable request p1p2p3 quirk | 691 | * @req_p1p2p3_quirk: set if we enable request p1p2p3 quirk |
| 691 | * @del_p1p2p3_quirk: set if we enable delay p1p2p3 quirk | 692 | * @del_p1p2p3_quirk: set if we enable delay p1p2p3 quirk |
| 693 | * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk | ||
| 692 | */ | 694 | */ |
| 693 | struct dwc3 { | 695 | struct dwc3 { |
| 694 | struct usb_ctrlrequest *ctrl_req; | 696 | struct usb_ctrlrequest *ctrl_req; |
| @@ -801,6 +803,7 @@ struct dwc3 { | |||
| 801 | unsigned u2ss_inp3_quirk:1; | 803 | unsigned u2ss_inp3_quirk:1; |
| 802 | unsigned req_p1p2p3_quirk:1; | 804 | unsigned req_p1p2p3_quirk:1; |
| 803 | unsigned del_p1p2p3_quirk:1; | 805 | unsigned del_p1p2p3_quirk:1; |
| 806 | unsigned del_phy_power_chg_quirk:1; | ||
| 804 | }; | 807 | }; |
| 805 | 808 | ||
| 806 | /* -------------------------------------------------------------------------- */ | 809 | /* -------------------------------------------------------------------------- */ |
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h index a421cecd6c16..ae67151dc870 100644 --- a/drivers/usb/dwc3/platform_data.h +++ b/drivers/usb/dwc3/platform_data.h | |||
| @@ -33,4 +33,5 @@ struct dwc3_platform_data { | |||
| 33 | unsigned u2ss_inp3_quirk:1; | 33 | unsigned u2ss_inp3_quirk:1; |
| 34 | unsigned req_p1p2p3_quirk:1; | 34 | unsigned req_p1p2p3_quirk:1; |
| 35 | unsigned del_p1p2p3_quirk:1; | 35 | unsigned del_p1p2p3_quirk:1; |
| 36 | unsigned del_phy_power_chg_quirk:1; | ||
| 36 | }; | 37 | }; |
