aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Rui <ray.huang@amd.com>2014-10-28 07:54:33 -0400
committerFelipe Balbi <balbi@ti.com>2014-11-03 11:03:38 -0500
commit14f4ac53dfb2321b07a0e690df797fba61102fa6 (patch)
tree8796f332712649c7fc6cbeb603d74748d8005fd9
parentfb67afca177a215684d6124137f61e639c5483d4 (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.txt2
-rw-r--r--drivers/usb/dwc3/core.c6
-rw-r--r--drivers/usb/dwc3/core.h3
-rw-r--r--drivers/usb/dwc3/platform_data.h1
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
31This is usually a subnode to DWC3 glue to which it is connected. 33This 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 */
697struct dwc3 { 699struct 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};