Loading drivers/usb/phy/phy-msm-qusb-v2.c +29 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ struct qusb_phy { void __iomem *base; void __iomem *efuse_reg; void __iomem *refgen_north_bg_reg; void __iomem *eud_enable_reg; struct clk *ref_clk_src; struct clk *ref_clk; Loading Loading @@ -518,6 +519,11 @@ static int qusb_phy_init(struct usb_phy *phy) dev_dbg(phy->dev, "%s\n", __func__); if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) { dev_err(qphy->phy.dev, "eud is enabled\n"); return 0; } qusb_phy_reset(qphy); if (qphy->qusb_phy_host_init_seq && qphy->phy.flags & PHY_HOST_MODE) { Loading Loading @@ -825,6 +831,11 @@ static int qusb_phy_dpdm_regulator_enable(struct regulator_dev *rdev) dev_dbg(qphy->phy.dev, "%s dpdm_enable:%d\n", __func__, qphy->dpdm_enable); if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) { dev_err(qphy->phy.dev, "eud is enabled\n"); return 0; } if (!qphy->dpdm_enable) { ret = qusb_phy_enable_power(qphy); if (ret < 0) { Loading Loading @@ -1000,6 +1011,16 @@ static int qusb_phy_probe(struct platform_device *pdev) qphy->refgen_north_bg_reg = devm_ioremap(dev, res->start, resource_size(res)); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "eud_enable_reg"); if (res) { qphy->eud_enable_reg = devm_ioremap_resource(dev, res); if (IS_ERR(qphy->eud_enable_reg)) { dev_err(dev, "err getting eud_enable_reg address\n"); return PTR_ERR(qphy->eud_enable_reg); } } /* ref_clk_src is needed irrespective of SE_CLK or DIFF_CLK usage */ qphy->ref_clk_src = devm_clk_get(dev, "ref_clk_src"); if (IS_ERR(qphy->ref_clk_src)) { Loading Loading @@ -1227,6 +1248,14 @@ static int qusb_phy_probe(struct platform_device *pdev) qphy->suspended = true; qusb_phy_create_debugfs(qphy); /* * EUD may be enable in boot loader and to keep EUD session alive across * kernel boot till USB phy driver is initialized based on cable status, * keep LDOs on here. */ if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) qusb_phy_enable_power(qphy); return ret; } Loading Loading
drivers/usb/phy/phy-msm-qusb-v2.c +29 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ struct qusb_phy { void __iomem *base; void __iomem *efuse_reg; void __iomem *refgen_north_bg_reg; void __iomem *eud_enable_reg; struct clk *ref_clk_src; struct clk *ref_clk; Loading Loading @@ -518,6 +519,11 @@ static int qusb_phy_init(struct usb_phy *phy) dev_dbg(phy->dev, "%s\n", __func__); if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) { dev_err(qphy->phy.dev, "eud is enabled\n"); return 0; } qusb_phy_reset(qphy); if (qphy->qusb_phy_host_init_seq && qphy->phy.flags & PHY_HOST_MODE) { Loading Loading @@ -825,6 +831,11 @@ static int qusb_phy_dpdm_regulator_enable(struct regulator_dev *rdev) dev_dbg(qphy->phy.dev, "%s dpdm_enable:%d\n", __func__, qphy->dpdm_enable); if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) { dev_err(qphy->phy.dev, "eud is enabled\n"); return 0; } if (!qphy->dpdm_enable) { ret = qusb_phy_enable_power(qphy); if (ret < 0) { Loading Loading @@ -1000,6 +1011,16 @@ static int qusb_phy_probe(struct platform_device *pdev) qphy->refgen_north_bg_reg = devm_ioremap(dev, res->start, resource_size(res)); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "eud_enable_reg"); if (res) { qphy->eud_enable_reg = devm_ioremap_resource(dev, res); if (IS_ERR(qphy->eud_enable_reg)) { dev_err(dev, "err getting eud_enable_reg address\n"); return PTR_ERR(qphy->eud_enable_reg); } } /* ref_clk_src is needed irrespective of SE_CLK or DIFF_CLK usage */ qphy->ref_clk_src = devm_clk_get(dev, "ref_clk_src"); if (IS_ERR(qphy->ref_clk_src)) { Loading Loading @@ -1227,6 +1248,14 @@ static int qusb_phy_probe(struct platform_device *pdev) qphy->suspended = true; qusb_phy_create_debugfs(qphy); /* * EUD may be enable in boot loader and to keep EUD session alive across * kernel boot till USB phy driver is initialized based on cable status, * keep LDOs on here. */ if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) qusb_phy_enable_power(qphy); return ret; } Loading