summaryrefslogtreecommitdiff
path: root/drivers/usb/dwc3/core.c
diff options
context:
space:
mode:
authorHuang Rui <ray.huang@amd.com>2014-10-31 06:11:18 +0300
committerFelipe Balbi <balbi@ti.com>2014-11-03 19:03:41 +0300
commit460d098cb6728134e0e4ba3d58e10bb43032daa5 (patch)
treefbdd6c3e61e7b5000c8574b9927c614004829574 /drivers/usb/dwc3/core.c
parent9755449d568b3c2745fc9c7075a7d7833c4528bd (diff)
downloadlinux-460d098cb6728134e0e4ba3d58e10bb43032daa5.tar.xz
usb: dwc3: make HIRD threshold configurable
HIRD threshold should be configurable by different platforms. From DesignWare databook: When HIRD_Threshold[4] is set to 1b1 and HIRD value is greater than or equal to the value in HIRD_Threshold[3:0], dwc3 asserts output signals utmi_l1_suspend_n to put PHY into Deep Low-Power mode in L1. When HIRD_Threshold[4] is set to 1b0 or the HIRD value is less than HIRD_Threshold[3:0], dwc3 asserts output signals utmi_sleep_n on L1. Signed-off-by: Huang Rui <ray.huang@amd.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/core.c')
-rw-r--r--drivers/usb/dwc3/core.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 3ea55f214439..8ae42b8db02b 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -730,6 +730,7 @@ static int dwc3_probe(struct platform_device *pdev)
struct dwc3 *dwc;
u8 lpm_nyet_threshold;
u8 tx_de_emphasis;
+ u8 hird_threshold;
int ret;
@@ -791,12 +792,22 @@ static int dwc3_probe(struct platform_device *pdev)
/* default to -3.5dB de-emphasis */
tx_de_emphasis = 1;
+ /*
+ * default to assert utmi_sleep_n and use maximum allowed HIRD
+ * threshold value of 0b1100
+ */
+ hird_threshold = 12;
+
if (node) {
dwc->maximum_speed = of_usb_get_maximum_speed(node);
dwc->has_lpm_erratum = of_property_read_bool(node,
"snps,has-lpm-erratum");
of_property_read_u8(node, "snps,lpm-nyet-threshold",
&lpm_nyet_threshold);
+ dwc->is_utmi_l1_suspend = of_property_read_bool(node,
+ "snps,is-utmi-l1-suspend");
+ of_property_read_u8(node, "snps,hird-threshold",
+ &hird_threshold);
dwc->needs_fifo_resize = of_property_read_bool(node,
"tx-fifo-resize");
@@ -832,6 +843,9 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
if (pdata->lpm_nyet_threshold)
lpm_nyet_threshold = pdata->lpm_nyet_threshold;
+ dwc->is_utmi_l1_suspend = pdata->is_utmi_l1_suspend;
+ if (pdata->hird_threshold)
+ hird_threshold = pdata->hird_threshold;
dwc->needs_fifo_resize = pdata->tx_fifo_resize;
dwc->dr_mode = pdata->dr_mode;
@@ -859,6 +873,9 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->lpm_nyet_threshold = lpm_nyet_threshold;
dwc->tx_de_emphasis = tx_de_emphasis;
+ dwc->hird_threshold = hird_threshold
+ | (dwc->is_utmi_l1_suspend << 4);
+
ret = dwc3_core_get_phy(dwc);
if (ret)
return ret;