diff options
| author | Hemant Kumar <hemantk@codeaurora.org> | 2016-05-11 18:26:31 -0700 |
|---|---|---|
| committer | Jeevan Shriram <jshriram@codeaurora.org> | 2016-05-19 16:07:34 -0700 |
| commit | 3a0c8b9280414f7da4ce28751eb2b9cf423319a6 (patch) | |
| tree | 36d9d68ca5109605cb42f7416aa91d758244f9f0 /drivers/usb/phy | |
| parent | 81dd5e3f7881f394bef8318652e7853793a1d097 (diff) | |
usb: phy: qmp: Add support to select usb3 phy mode
qmp phy can run in display port mode or in usb3 mode.
It is recommended to explicitly select the usb3 phy
mode before programming the phy init sequence, since
TCSR_USB3_DP_PHYMODE register is commonly used to
select mode between display port driver as well as
ssphy driver.
Change-Id: I270596868762ccd4f2f2cc9b0daaca647a2bee88
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Diffstat (limited to 'drivers/usb/phy')
| -rw-r--r-- | drivers/usb/phy/phy-msm-ssusb-qmp.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/usb/phy/phy-msm-ssusb-qmp.c b/drivers/usb/phy/phy-msm-ssusb-qmp.c index 8b4fd8c0436a..ed1b2d2d7730 100644 --- a/drivers/usb/phy/phy-msm-ssusb-qmp.c +++ b/drivers/usb/phy/phy-msm-ssusb-qmp.c @@ -68,6 +68,7 @@ struct msm_ssphy_qmp { struct usb_phy phy; void __iomem *base; void __iomem *vls_clamp_reg; + void __iomem *tcsr_usb3_dp_phymode; struct regulator *vdd; int vdd_levels[3]; /* none, low, high */ @@ -269,6 +270,10 @@ static int msm_ssphy_qmp_init(struct usb_phy *uphy) writel_relaxed(0x01, phy->base + phy->phy_reg[USB3_PHY_POWER_DOWN_CONTROL]); + /* select usb3 phy mode */ + if (phy->tcsr_usb3_dp_phymode) + writel_relaxed(0x0, phy->tcsr_usb3_dp_phymode); + /* Make sure that above write completed to get PHY into POWER DOWN */ mb(); @@ -612,6 +617,16 @@ static int msm_ssphy_qmp_probe(struct platform_device *pdev) return PTR_ERR(phy->vls_clamp_reg); } + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, + "tcsr_usb3_dp_phymode"); + if (res) { + phy->tcsr_usb3_dp_phymode = devm_ioremap_resource(dev, res); + if (IS_ERR(phy->tcsr_usb3_dp_phymode)) { + dev_err(dev, "err getting tcsr_usb3_dp_phymode addr\n"); + return PTR_ERR(phy->tcsr_usb3_dp_phymode); + } + } + phy->emulation = of_property_read_bool(dev->of_node, "qcom,emulation"); if (!phy->emulation) { |
