Lines Matching full:qmp

25 #include "phy-qcom-qmp.h"
2868 * @qmp: QMP phy to which this lane belongs
2884 struct qcom_qmp *qmp; member
2899 * struct qcom_qmp - structure holding QMP phy block attributes
4010 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_serdes_init() local
4066 dev_err(qmp->dev, in qcom_qmp_phy_serdes_init()
4554 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_com_init() local
4558 void __iomem *dp_com = qmp->dp_com; in qcom_qmp_phy_com_init()
4561 mutex_lock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
4562 if (qmp->init_count++) { in qcom_qmp_phy_com_init()
4563 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
4568 ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); in qcom_qmp_phy_com_init()
4570 dev_err(qmp->dev, "failed to enable regulators, err=%d\n", ret); in qcom_qmp_phy_com_init()
4575 ret = reset_control_assert(qmp->resets[i]); in qcom_qmp_phy_com_init()
4577 dev_err(qmp->dev, "%s reset assert failed\n", in qcom_qmp_phy_com_init()
4584 ret = reset_control_deassert(qmp->resets[i]); in qcom_qmp_phy_com_init()
4586 dev_err(qmp->dev, "%s reset deassert failed\n", in qcom_qmp_phy_com_init()
4592 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); in qcom_qmp_phy_com_init()
4599 /* override hardware control for reset of qmp phy */ in qcom_qmp_phy_com_init()
4610 /* bring both QMP USB and QMP DP PHYs PCS block out of reset */ in qcom_qmp_phy_com_init()
4632 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
4638 reset_control_assert(qmp->resets[i]); in qcom_qmp_phy_com_init()
4640 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); in qcom_qmp_phy_com_init()
4642 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
4649 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_com_exit() local
4654 mutex_lock(&qmp->phy_mutex); in qcom_qmp_phy_com_exit()
4655 if (--qmp->init_count) { in qcom_qmp_phy_com_exit()
4656 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_exit()
4660 reset_control_assert(qmp->ufs_reset); in qcom_qmp_phy_com_exit()
4671 reset_control_assert(qmp->resets[i]); in qcom_qmp_phy_com_exit()
4673 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_com_exit()
4675 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); in qcom_qmp_phy_com_exit()
4677 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_exit()
4685 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_init() local
4688 dev_vdbg(qmp->dev, "Initializing QMP phy\n"); in qcom_qmp_phy_init()
4696 if (!qmp->ufs_reset) { in qcom_qmp_phy_init()
4697 qmp->ufs_reset = in qcom_qmp_phy_init()
4698 devm_reset_control_get_exclusive(qmp->dev, in qcom_qmp_phy_init()
4701 if (IS_ERR(qmp->ufs_reset)) { in qcom_qmp_phy_init()
4702 ret = PTR_ERR(qmp->ufs_reset); in qcom_qmp_phy_init()
4703 dev_err(qmp->dev, in qcom_qmp_phy_init()
4707 qmp->ufs_reset = NULL; in qcom_qmp_phy_init()
4712 ret = reset_control_assert(qmp->ufs_reset); in qcom_qmp_phy_init()
4730 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_power_on() local
4745 dev_err(qmp->dev, "lane%d reset deassert failed\n", in qcom_qmp_phy_power_on()
4753 dev_err(qmp->dev, "pipe_clk enable failed err=%d\n", ret); in qcom_qmp_phy_power_on()
4803 ret = reset_control_deassert(qmp->ufs_reset); in qcom_qmp_phy_power_on()
4843 dev_err(qmp->dev, "phy initialization timed-out\n"); in qcom_qmp_phy_power_on()
4986 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_runtime_suspend() local
4987 struct qmp_phy *qphy = qmp->phys[0]; in qcom_qmp_phy_runtime_suspend()
4990 dev_vdbg(dev, "Suspending QMP phy, mode:%d\n", qphy->mode); in qcom_qmp_phy_runtime_suspend()
4996 if (!qmp->init_count) { in qcom_qmp_phy_runtime_suspend()
5004 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_runtime_suspend()
5011 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_runtime_resume() local
5012 struct qmp_phy *qphy = qmp->phys[0]; in qcom_qmp_phy_runtime_resume()
5016 dev_vdbg(dev, "Resuming QMP phy, mode:%d\n", qphy->mode); in qcom_qmp_phy_runtime_resume()
5022 if (!qmp->init_count) { in qcom_qmp_phy_runtime_resume()
5027 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); in qcom_qmp_phy_runtime_resume()
5034 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_runtime_resume()
5045 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_vreg_init() local
5049 qmp->vregs = devm_kcalloc(dev, num, sizeof(*qmp->vregs), GFP_KERNEL); in qcom_qmp_phy_vreg_init()
5050 if (!qmp->vregs) in qcom_qmp_phy_vreg_init()
5054 qmp->vregs[i].supply = cfg->vreg_list[i]; in qcom_qmp_phy_vreg_init()
5056 return devm_regulator_bulk_get(dev, num, qmp->vregs); in qcom_qmp_phy_vreg_init()
5061 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_reset_init() local
5064 qmp->resets = devm_kcalloc(dev, cfg->num_resets, in qcom_qmp_phy_reset_init()
5065 sizeof(*qmp->resets), GFP_KERNEL); in qcom_qmp_phy_reset_init()
5066 if (!qmp->resets) in qcom_qmp_phy_reset_init()
5078 qmp->resets[i] = rst; in qcom_qmp_phy_reset_init()
5086 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_clk_init() local
5090 qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL); in qcom_qmp_phy_clk_init()
5091 if (!qmp->clks) in qcom_qmp_phy_clk_init()
5095 qmp->clks[i].id = cfg->clk_list[i]; in qcom_qmp_phy_clk_init()
5097 return devm_clk_bulk_get(dev, num, qmp->clks); in qcom_qmp_phy_clk_init()
5123 static int phy_pipe_clk_register(struct qcom_qmp *qmp, struct device_node *np) in phy_pipe_clk_register() argument
5131 dev_err(qmp->dev, "%pOFn: No clock-output-names\n", np); in phy_pipe_clk_register()
5135 fixed = devm_kzalloc(qmp->dev, sizeof(*fixed), GFP_KERNEL); in phy_pipe_clk_register()
5141 /* controllers using QMP phys use 125MHz pipe clock interface */ in phy_pipe_clk_register()
5145 ret = devm_clk_hw_register(qmp->dev, &fixed->hw); in phy_pipe_clk_register()
5157 ret = devm_add_action(qmp->dev, phy_clk_release_provider, np); in phy_pipe_clk_register()
5314 static int phy_dp_clks_register(struct qcom_qmp *qmp, struct qmp_phy *qphy, in phy_dp_clks_register() argument
5322 dp_clks = devm_kzalloc(qmp->dev, sizeof(*dp_clks), GFP_KERNEL); in phy_dp_clks_register()
5329 snprintf(name, sizeof(name), "%s::link_clk", dev_name(qmp->dev)); in phy_dp_clks_register()
5333 ret = devm_clk_hw_register(qmp->dev, &dp_clks->dp_link_hw); in phy_dp_clks_register()
5337 snprintf(name, sizeof(name), "%s::vco_div_clk", dev_name(qmp->dev)); in phy_dp_clks_register()
5341 ret = devm_clk_hw_register(qmp->dev, &dp_clks->dp_pixel_hw); in phy_dp_clks_register()
5353 ret = devm_add_action(qmp->dev, phy_clk_release_provider, np); in phy_dp_clks_register()
5389 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_create() local
5497 qphy->qmp = qmp; in qcom_qmp_phy_create()
5498 qmp->phys[id] = qphy; in qcom_qmp_phy_create()
5506 .compatible = "qcom,ipq8074-qmp-usb3-phy",
5509 .compatible = "qcom,msm8996-qmp-pcie-phy",
5512 .compatible = "qcom,msm8996-qmp-ufs-phy",
5515 .compatible = "qcom,msm8996-qmp-usb3-phy",
5518 .compatible = "qcom,msm8998-qmp-pcie-phy",
5521 .compatible = "qcom,msm8998-qmp-ufs-phy",
5524 .compatible = "qcom,ipq8074-qmp-pcie-phy",
5527 .compatible = "qcom,ipq6018-qmp-pcie-phy",
5530 .compatible = "qcom,ipq6018-qmp-usb3-phy",
5533 .compatible = "qcom,sc7180-qmp-usb3-phy",
5536 .compatible = "qcom,sc7180-qmp-usb3-dp-phy",
5539 .compatible = "qcom,sc8180x-qmp-pcie-phy",
5542 .compatible = "qcom,sc8180x-qmp-ufs-phy",
5545 .compatible = "qcom,sc8180x-qmp-usb3-phy",
5548 .compatible = "qcom,sc8180x-qmp-usb3-dp-phy",
5554 .compatible = "qcom,sdm845-qmp-pcie-phy",
5557 .compatible = "qcom,sdm845-qmp-usb3-phy",
5560 .compatible = "qcom,sdm845-qmp-usb3-uni-phy",
5563 .compatible = "qcom,sdm845-qmp-ufs-phy",
5566 .compatible = "qcom,msm8998-qmp-usb3-phy",
5569 .compatible = "qcom,sm6115-qmp-ufs-phy",
5572 .compatible = "qcom,sm8150-qmp-ufs-phy",
5575 .compatible = "qcom,sm8250-qmp-ufs-phy",
5578 .compatible = "qcom,sm8150-qmp-usb3-phy",
5581 .compatible = "qcom,sm8150-qmp-usb3-uni-phy",
5584 .compatible = "qcom,sm8250-qmp-usb3-phy",
5587 .compatible = "qcom,sm8250-qmp-usb3-dp-phy",
5590 .compatible = "qcom,sm8250-qmp-usb3-uni-phy",
5593 .compatible = "qcom,sm8250-qmp-gen3x1-pcie-phy",
5596 .compatible = "qcom,sm8250-qmp-gen3x2-pcie-phy",
5599 .compatible = "qcom,sm8350-qmp-ufs-phy",
5602 .compatible = "qcom,sm8250-qmp-modem-pcie-phy",
5605 .compatible = "qcom,sdx55-qmp-pcie-phy",
5608 .compatible = "qcom,sdx55-qmp-usb3-uni-phy",
5611 .compatible = "qcom,sm8350-qmp-usb3-phy",
5614 .compatible = "qcom,sm8350-qmp-usb3-uni-phy",
5623 .compatible = "qcom,sc7180-qmp-usb3-dp-phy",
5627 .compatible = "qcom,sm8250-qmp-usb3-dp-phy",
5631 .compatible = "qcom,sc8180x-qmp-usb3-dp-phy",
5644 struct qcom_qmp *qmp; in qcom_qmp_phy_probe() local
5658 qmp = devm_kzalloc(dev, sizeof(*qmp), GFP_KERNEL); in qcom_qmp_phy_probe()
5659 if (!qmp) in qcom_qmp_phy_probe()
5662 qmp->dev = dev; in qcom_qmp_phy_probe()
5663 dev_set_drvdata(dev, qmp); in qcom_qmp_phy_probe()
5665 /* Get the specific init parameters of QMP phy */ in qcom_qmp_phy_probe()
5689 qmp->dp_com = devm_platform_ioremap_resource(pdev, 1); in qcom_qmp_phy_probe()
5690 if (IS_ERR(qmp->dp_com)) in qcom_qmp_phy_probe()
5691 return PTR_ERR(qmp->dp_com); in qcom_qmp_phy_probe()
5706 mutex_init(&qmp->phy_mutex); in qcom_qmp_phy_probe()
5729 qmp->phys = devm_kcalloc(dev, num, sizeof(*qmp->phys), GFP_KERNEL); in qcom_qmp_phy_probe()
5730 if (!qmp->phys) in qcom_qmp_phy_probe()
5764 ret = phy_pipe_clk_register(qmp, child); in qcom_qmp_phy_probe()
5766 dev_err(qmp->dev, in qcom_qmp_phy_probe()
5771 ret = phy_dp_clks_register(qmp, qmp->phys[id], child); in qcom_qmp_phy_probe()
5773 dev_err(qmp->dev, in qcom_qmp_phy_probe()
5783 dev_info(dev, "Registered Qcom-QMP phy\n"); in qcom_qmp_phy_probe()
5798 .name = "qcom-qmp-phy",
5807 MODULE_DESCRIPTION("Qualcomm QMP PHY driver");