Lines Matching refs:hsphy
99 static int qcom_snps_hsphy_clk_init(struct qcom_snps_hsphy *hsphy)
101 struct device *dev = hsphy->dev;
103 hsphy->num_clks = 2;
104 hsphy->clks = devm_kcalloc(dev, hsphy->num_clks, sizeof(*hsphy->clks), GFP_KERNEL);
105 if (!hsphy->clks)
112 hsphy->clks[0].id = "cfg_ahb";
113 hsphy->clks[0].clk = devm_clk_get_optional(dev, "cfg_ahb");
114 if (IS_ERR(hsphy->clks[0].clk))
115 return dev_err_probe(dev, PTR_ERR(hsphy->clks[0].clk),
118 hsphy->clks[1].id = "ref";
119 hsphy->clks[1].clk = devm_clk_get(dev, "ref");
120 if (IS_ERR(hsphy->clks[1].clk))
121 return dev_err_probe(dev, PTR_ERR(hsphy->clks[1].clk),
141 static int qcom_snps_hsphy_suspend(struct qcom_snps_hsphy *hsphy)
143 dev_dbg(&hsphy->phy->dev, "Suspend QCOM SNPS PHY\n");
145 if (hsphy->mode == PHY_MODE_USB_HOST) {
147 qcom_snps_hsphy_write_mask(hsphy->base,
152 qcom_snps_hsphy_write_mask(hsphy->base,
160 static int qcom_snps_hsphy_resume(struct qcom_snps_hsphy *hsphy)
162 dev_dbg(&hsphy->phy->dev, "Resume QCOM SNPS PHY, mode\n");
169 struct qcom_snps_hsphy *hsphy = dev_get_drvdata(dev);
171 if (!hsphy->phy_initialized)
174 return qcom_snps_hsphy_suspend(hsphy);
179 struct qcom_snps_hsphy *hsphy = dev_get_drvdata(dev);
181 if (!hsphy->phy_initialized)
184 return qcom_snps_hsphy_resume(hsphy);
190 struct qcom_snps_hsphy *hsphy = phy_get_drvdata(phy);
192 hsphy->mode = mode;
198 struct qcom_snps_hsphy *hsphy = phy_get_drvdata(phy);
203 ret = regulator_bulk_enable(ARRAY_SIZE(hsphy->vregs), hsphy->vregs);
207 ret = clk_bulk_prepare_enable(hsphy->num_clks, hsphy->clks);
213 ret = reset_control_assert(hsphy->phy_reset);
221 ret = reset_control_deassert(hsphy->phy_reset);
227 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_CFG0,
230 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_UTMI_CTRL5,
232 qcom_snps_hsphy_write_mask(hsphy->base,
235 qcom_snps_hsphy_write_mask(hsphy->base,
238 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_REFCLK_CTRL,
240 qcom_snps_hsphy_write_mask(hsphy->base,
243 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL1,
246 qcom_snps_hsphy_write_mask(hsphy->base,
250 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL2,
254 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_UTMI_CTRL0,
257 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_UTMI_CTRL5,
260 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL2,
263 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_CFG0,
266 hsphy->phy_initialized = true;
271 clk_bulk_disable_unprepare(hsphy->num_clks, hsphy->clks);
273 regulator_bulk_disable(ARRAY_SIZE(hsphy->vregs), hsphy->vregs);
280 struct qcom_snps_hsphy *hsphy = phy_get_drvdata(phy);
282 reset_control_assert(hsphy->phy_reset);
283 clk_bulk_disable_unprepare(hsphy->num_clks, hsphy->clks);
284 regulator_bulk_disable(ARRAY_SIZE(hsphy->vregs), hsphy->vregs);
285 hsphy->phy_initialized = false;
313 struct qcom_snps_hsphy *hsphy;
319 hsphy = devm_kzalloc(dev, sizeof(*hsphy), GFP_KERNEL);
320 if (!hsphy)
323 hsphy->dev = dev;
325 hsphy->base = devm_platform_ioremap_resource(pdev, 0);
326 if (IS_ERR(hsphy->base))
327 return PTR_ERR(hsphy->base);
329 ret = qcom_snps_hsphy_clk_init(hsphy);
333 hsphy->phy_reset = devm_reset_control_get_exclusive(&pdev->dev, NULL);
334 if (IS_ERR(hsphy->phy_reset)) {
336 return PTR_ERR(hsphy->phy_reset);
339 num = ARRAY_SIZE(hsphy->vregs);
341 hsphy->vregs[i].supply = qcom_snps_hsphy_vreg_names[i];
343 ret = devm_regulator_bulk_get(dev, num, hsphy->vregs);
362 hsphy->phy = generic_phy;
364 dev_set_drvdata(dev, hsphy);
365 phy_set_drvdata(generic_phy, hsphy);