Lines Matching refs:hsphy
141 static int qcom_snps_hsphy_clk_init(struct qcom_snps_hsphy *hsphy)
143 struct device *dev = hsphy->dev;
145 hsphy->num_clks = 2;
146 hsphy->clks = devm_kcalloc(dev, hsphy->num_clks, sizeof(*hsphy->clks), GFP_KERNEL);
147 if (!hsphy->clks)
154 hsphy->clks[0].id = "cfg_ahb";
155 hsphy->clks[0].clk = devm_clk_get_optional(dev, "cfg_ahb");
156 if (IS_ERR(hsphy->clks[0].clk))
157 return dev_err_probe(dev, PTR_ERR(hsphy->clks[0].clk),
160 hsphy->clks[1].id = "ref";
161 hsphy->clks[1].clk = devm_clk_get(dev, "ref");
162 if (IS_ERR(hsphy->clks[1].clk))
163 return dev_err_probe(dev, PTR_ERR(hsphy->clks[1].clk),
183 static int qcom_snps_hsphy_suspend(struct qcom_snps_hsphy *hsphy)
185 dev_dbg(&hsphy->phy->dev, "Suspend QCOM SNPS PHY\n");
187 if (hsphy->mode == PHY_MODE_USB_HOST) {
189 qcom_snps_hsphy_write_mask(hsphy->base,
194 qcom_snps_hsphy_write_mask(hsphy->base,
202 static int qcom_snps_hsphy_resume(struct qcom_snps_hsphy *hsphy)
204 dev_dbg(&hsphy->phy->dev, "Resume QCOM SNPS PHY, mode\n");
211 struct qcom_snps_hsphy *hsphy = dev_get_drvdata(dev);
213 if (!hsphy->phy_initialized)
216 return qcom_snps_hsphy_suspend(hsphy);
221 struct qcom_snps_hsphy *hsphy = dev_get_drvdata(dev);
223 if (!hsphy->phy_initialized)
226 return qcom_snps_hsphy_resume(hsphy);
232 struct qcom_snps_hsphy *hsphy = phy_get_drvdata(phy);
234 hsphy->mode = mode;
388 struct qcom_snps_hsphy *hsphy = phy_get_drvdata(phy);
393 ret = regulator_bulk_enable(ARRAY_SIZE(hsphy->vregs), hsphy->vregs);
397 ret = clk_bulk_prepare_enable(hsphy->num_clks, hsphy->clks);
403 ret = reset_control_assert(hsphy->phy_reset);
411 ret = reset_control_deassert(hsphy->phy_reset);
417 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_CFG0,
420 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_UTMI_CTRL5,
422 qcom_snps_hsphy_write_mask(hsphy->base,
425 qcom_snps_hsphy_write_mask(hsphy->base,
428 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_REFCLK_CTRL,
430 qcom_snps_hsphy_write_mask(hsphy->base,
433 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL1,
436 for (i = 0; i < ARRAY_SIZE(hsphy->update_seq_cfg); i++) {
437 if (hsphy->update_seq_cfg[i].need_update)
438 qcom_snps_hsphy_write_mask(hsphy->base,
439 hsphy->update_seq_cfg[i].offset,
440 hsphy->update_seq_cfg[i].mask,
441 hsphy->update_seq_cfg[i].value);
444 qcom_snps_hsphy_write_mask(hsphy->base,
448 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL2,
452 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_UTMI_CTRL0,
455 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL_COMMON0,
458 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_UTMI_CTRL5,
461 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL2,
464 qcom_snps_hsphy_write_mask(hsphy->base, USB2_PHY_USB_PHY_CFG0,
467 hsphy->phy_initialized = true;
472 clk_bulk_disable_unprepare(hsphy->num_clks, hsphy->clks);
474 regulator_bulk_disable(ARRAY_SIZE(hsphy->vregs), hsphy->vregs);
481 struct qcom_snps_hsphy *hsphy = phy_get_drvdata(phy);
483 reset_control_assert(hsphy->phy_reset);
484 clk_bulk_disable_unprepare(hsphy->num_clks, hsphy->clks);
485 regulator_bulk_disable(ARRAY_SIZE(hsphy->vregs), hsphy->vregs);
486 hsphy->phy_initialized = false;
543 struct qcom_snps_hsphy *hsphy;
549 hsphy = dev_get_drvdata(dev);
557 &hsphy->update_seq_cfg[i]);
558 dev_dbg(&hsphy->phy->dev, "Read param: %s dt_val: %d reg_val: 0x%x\n",
559 cfg[i].prop_name, val, hsphy->update_seq_cfg[i].value);
567 struct qcom_snps_hsphy *hsphy;
573 hsphy = devm_kzalloc(dev, sizeof(*hsphy), GFP_KERNEL);
574 if (!hsphy)
577 hsphy->dev = dev;
579 hsphy->base = devm_platform_ioremap_resource(pdev, 0);
580 if (IS_ERR(hsphy->base))
581 return PTR_ERR(hsphy->base);
583 ret = qcom_snps_hsphy_clk_init(hsphy);
587 hsphy->phy_reset = devm_reset_control_get_exclusive(&pdev->dev, NULL);
588 if (IS_ERR(hsphy->phy_reset)) {
590 return PTR_ERR(hsphy->phy_reset);
593 num = ARRAY_SIZE(hsphy->vregs);
595 hsphy->vregs[i].supply = qcom_snps_hsphy_vreg_names[i];
597 ret = devm_regulator_bulk_get(dev, num, hsphy->vregs);
616 hsphy->phy = generic_phy;
618 dev_set_drvdata(dev, hsphy);
619 phy_set_drvdata(generic_phy, hsphy);