USB: dwc3-msm: Add support for overriding SSPHY deemphasis setting
TX deemphasis value can be different from platform to platform.
This value has to be set to suitable value to pass USB3 complaince
test. Hence add support for overriding this deemphasis value from
device tree.
CRs-Fixed: 536912
Change-Id: Ic3c2213fc0d090407057525115eae1351ecc4668
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c
index 60d7119..bda1093 100644
--- a/drivers/usb/dwc3/dwc3-msm.c
+++ b/drivers/usb/dwc3/dwc3-msm.c
@@ -69,6 +69,10 @@
module_param(override_phy_init, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(override_phy_init, "Override HSPHY Init Seq");
+static int ss_phy_override_deemphasis;
+module_param(ss_phy_override_deemphasis, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(ss_phy_override_deemphasis, "Override SSPHY demphasis value");
+
/* Enable Proprietary charger detection */
static bool prop_chg_detect;
module_param(prop_chg_detect, bool, S_IRUGO | S_IWUSR);
@@ -198,6 +202,7 @@
atomic_t in_lpm;
int hs_phy_irq;
int hsphy_init_seq;
+ int deemphasis_val;
bool lpm_irq_seen;
struct delayed_work resume_work;
struct work_struct restart_usb_work;
@@ -1416,7 +1421,12 @@
*/
data = dwc3_msm_ssusb_read_phycreg(mdwc->base, 0x1002);
data &= ~0x3F80;
- data |= (0x16 << 7);
+ if (ss_phy_override_deemphasis)
+ mdwc->deemphasis_val = ss_phy_override_deemphasis;
+ if (mdwc->deemphasis_val)
+ data |= (mdwc->deemphasis_val << 7);
+ else
+ data |= (0x16 << 7);
data &= ~0x7F;
data |= (0x7F | (1 << 14));
dwc3_msm_ssusb_write_phycreg(mdwc->base, 0x1002, data);
@@ -2978,6 +2988,10 @@
else if (!mdwc->hsphy_init_seq)
dev_warn(&pdev->dev, "incorrect hsphyinitseq.Using PORvalue\n");
+ if (of_property_read_u32(node, "qcom,dwc-ssphy-deemphasis-value",
+ &mdwc->deemphasis_val))
+ dev_dbg(&pdev->dev, "unable to read ssphy deemphasis value\n");
+
pm_runtime_set_active(mdwc->dev);
pm_runtime_enable(mdwc->dev);