diff options
author | Huang Rui <ray.huang@amd.com> | 2014-10-28 07:54:33 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2014-11-03 11:03:38 -0500 |
commit | 14f4ac53dfb2321b07a0e690df797fba61102fa6 (patch) | |
tree | 8796f332712649c7fc6cbeb603d74748d8005fd9 | |
parent | fb67afca177a215684d6124137f61e639c5483d4 (diff) |
usb: dwc3: add rx_detect to polling lfps quirk
This patch adds RX_DETECT to Polling.LFPS control quirk, 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>
-rw-r--r-- | Documentation/devicetree/bindings/usb/dwc3.txt | 2 | ||||
-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 |
4 files changed, 12 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt index 4edd29a24e74..1ecc33315e1f 100644 --- a/Documentation/devicetree/bindings/usb/dwc3.txt +++ b/Documentation/devicetree/bindings/usb/dwc3.txt | |||
@@ -27,6 +27,8 @@ Optional properties: | |||
27 | - snps,del_phy_power_chg_quirk: when set core will delay PHY power change | 27 | - snps,del_phy_power_chg_quirk: when set core will delay PHY power change |
28 | from P0 to P1/P2/P3. | 28 | from P0 to P1/P2/P3. |
29 | - snps,lfps_filter_quirk: when set core will filter LFPS reception. | 29 | - snps,lfps_filter_quirk: when set core will filter LFPS reception. |
30 | - snps,rx_detect_poll_quirk: when set core will disable a 400us delay to start | ||
31 | Polling LFPS after RX.Detect. | ||
30 | 32 | ||
31 | This is usually a subnode to DWC3 glue to which it is connected. | 33 | This is usually a subnode to DWC3 glue to which it is connected. |
32 | 34 | ||
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 29a7da0c3178..b440b2b29872 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
@@ -389,6 +389,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc) | |||
389 | if (dwc->lfps_filter_quirk) | 389 | if (dwc->lfps_filter_quirk) |
390 | reg |= DWC3_GUSB3PIPECTL_LFPSFILT; | 390 | reg |= DWC3_GUSB3PIPECTL_LFPSFILT; |
391 | 391 | ||
392 | if (dwc->rx_detect_poll_quirk) | ||
393 | reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL; | ||
394 | |||
392 | dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg); | 395 | dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg); |
393 | 396 | ||
394 | mdelay(100); | 397 | mdelay(100); |
@@ -776,6 +779,8 @@ static int dwc3_probe(struct platform_device *pdev) | |||
776 | "snps,del_phy_power_chg_quirk"); | 779 | "snps,del_phy_power_chg_quirk"); |
777 | dwc->lfps_filter_quirk = of_property_read_bool(node, | 780 | dwc->lfps_filter_quirk = of_property_read_bool(node, |
778 | "snps,lfps_filter_quirk"); | 781 | "snps,lfps_filter_quirk"); |
782 | dwc->rx_detect_poll_quirk = of_property_read_bool(node, | ||
783 | "snps,rx_detect_poll_quirk"); | ||
779 | } else if (pdata) { | 784 | } else if (pdata) { |
780 | dwc->maximum_speed = pdata->maximum_speed; | 785 | dwc->maximum_speed = pdata->maximum_speed; |
781 | dwc->has_lpm_erratum = pdata->has_lpm_erratum; | 786 | dwc->has_lpm_erratum = pdata->has_lpm_erratum; |
@@ -792,6 +797,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
792 | dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk; | 797 | dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk; |
793 | dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk; | 798 | dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk; |
794 | dwc->lfps_filter_quirk = pdata->lfps_filter_quirk; | 799 | dwc->lfps_filter_quirk = pdata->lfps_filter_quirk; |
800 | dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk; | ||
795 | } | 801 | } |
796 | 802 | ||
797 | /* default to superspeed if no maximum_speed passed */ | 803 | /* default to superspeed if no maximum_speed passed */ |
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index 368d32948e27..8953d739b73d 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h | |||
@@ -184,6 +184,7 @@ | |||
184 | #define DWC3_GUSB3PIPECTL_DEPOCHANGE (1 << 18) | 184 | #define DWC3_GUSB3PIPECTL_DEPOCHANGE (1 << 18) |
185 | #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) | 185 | #define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) |
186 | #define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9) | 186 | #define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9) |
187 | #define DWC3_GUSB3PIPECTL_RX_DETOPOLL (1 << 8) | ||
187 | 188 | ||
188 | /* Global TX Fifo Size Register */ | 189 | /* Global TX Fifo Size Register */ |
189 | #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) | 190 | #define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) |
@@ -693,6 +694,7 @@ struct dwc3_scratchpad_array { | |||
693 | * @del_p1p2p3_quirk: set if we enable delay p1p2p3 quirk | 694 | * @del_p1p2p3_quirk: set if we enable delay p1p2p3 quirk |
694 | * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk | 695 | * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk |
695 | * @lfps_filter_quirk: set if we enable LFPS filter quirk | 696 | * @lfps_filter_quirk: set if we enable LFPS filter quirk |
697 | * @rx_detect_poll_quirk: set if we enable rx_detect to polling lfps quirk | ||
696 | */ | 698 | */ |
697 | struct dwc3 { | 699 | struct dwc3 { |
698 | struct usb_ctrlrequest *ctrl_req; | 700 | struct usb_ctrlrequest *ctrl_req; |
@@ -807,6 +809,7 @@ struct dwc3 { | |||
807 | unsigned del_p1p2p3_quirk:1; | 809 | unsigned del_p1p2p3_quirk:1; |
808 | unsigned del_phy_power_chg_quirk:1; | 810 | unsigned del_phy_power_chg_quirk:1; |
809 | unsigned lfps_filter_quirk:1; | 811 | unsigned lfps_filter_quirk:1; |
812 | unsigned rx_detect_poll_quirk:1; | ||
810 | }; | 813 | }; |
811 | 814 | ||
812 | /* -------------------------------------------------------------------------- */ | 815 | /* -------------------------------------------------------------------------- */ |
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h index dad0211e8743..4a0f06b2a6c7 100644 --- a/drivers/usb/dwc3/platform_data.h +++ b/drivers/usb/dwc3/platform_data.h | |||
@@ -35,4 +35,5 @@ struct dwc3_platform_data { | |||
35 | unsigned del_p1p2p3_quirk:1; | 35 | unsigned del_p1p2p3_quirk:1; |
36 | unsigned del_phy_power_chg_quirk:1; | 36 | unsigned del_phy_power_chg_quirk:1; |
37 | unsigned lfps_filter_quirk:1; | 37 | unsigned lfps_filter_quirk:1; |
38 | unsigned rx_detect_poll_quirk:1; | ||
38 | }; | 39 | }; |