Lines Matching +full:100 +full:base +full:- +full:tx
1 // SPDX-License-Identifier: GPL-2.0+
103 void __iomem *base; member
111 void __iomem *base; member
133 struct tca_blk *tca = imx_phy->tca; in tca_blk_typec_switch_set()
136 if (tca->orientation == orientation) in tca_blk_typec_switch_set()
139 ret = clk_prepare_enable(imx_phy->clk); in tca_blk_typec_switch_set()
144 clk_disable_unprepare(imx_phy->clk); in tca_blk_typec_switch_set()
152 struct device *dev = &pdev->dev; in tca_blk_get_typec_switch()
157 sw_desc.fwnode = dev->fwnode; in tca_blk_get_typec_switch()
193 mutex_lock(&tca->mutex); in tca_blk_orientation_set()
201 writel(val, tca->base + TCA_GCFG); in tca_blk_orientation_set()
204 writel(val, tca->base + TCA_TCPC); in tca_blk_orientation_set()
211 writel(val, tca->base + TCA_GCFG); in tca_blk_orientation_set()
214 val = readl(tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
216 writel(val, tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
223 writel(val, tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
227 writel(val, tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
230 tca->orientation = orientation; in tca_blk_orientation_set()
231 mutex_unlock(&tca->mutex); in tca_blk_orientation_set()
239 val = readl(tca->base + TCA_CLK_RST); in tca_blk_init()
241 writel(val, tca->base + TCA_CLK_RST); in tca_blk_init()
243 udelay(100); in tca_blk_init()
247 writel(val, tca->base + TCA_CLK_RST); in tca_blk_init()
249 tca_blk_orientation_set(tca, tca->orientation); in tca_blk_init()
255 struct device *dev = &pdev->dev; in imx95_usb_phy_get_tca()
265 return ERR_PTR(-ENOMEM); in imx95_usb_phy_get_tca()
267 tca->base = devm_ioremap_resource(&pdev->dev, res); in imx95_usb_phy_get_tca()
268 if (IS_ERR(tca->base)) in imx95_usb_phy_get_tca()
269 return ERR_CAST(tca->base); in imx95_usb_phy_get_tca()
271 mutex_init(&tca->mutex); in imx95_usb_phy_get_tca()
273 tca->orientation = TYPEC_ORIENTATION_NORMAL; in imx95_usb_phy_get_tca()
274 tca->sw = tca_blk_get_typec_switch(pdev, imx_phy); in imx95_usb_phy_get_tca()
281 struct tca_blk *tca = imx_phy->tca; in imx95_usb_phy_put_tca()
286 tca_blk_put_typec_switch(tca->sw); in imx95_usb_phy_put_tca()
293 return DIV_ROUND_CLOSEST(percent - 94U, 2); in phy_tx_vref_tune_from_property()
305 percent -= 91; in imx95_phy_tx_vref_tune_from_property()
308 percent -= 92; in imx95_phy_tx_vref_tune_from_property()
311 percent -= 93; in imx95_phy_tx_vref_tune_from_property()
325 case 100 ... 101: in phy_tx_rise_tune_from_property()
403 percent -= 95; in imx95_phy_comp_dis_tune_from_property()
406 percent -= 96; in imx95_phy_comp_dis_tune_from_property()
409 percent -= 97; in imx95_phy_comp_dis_tune_from_property()
418 percent = min(percent, 100U); in phy_pcs_tx_swing_full_from_property()
420 return (percent * 127) / 100; in phy_pcs_tx_swing_full_from_property()
425 struct device *dev = imx_phy->phy->dev.parent; in imx8m_get_phy_tuning_data()
428 if (device_is_compatible(dev, "fsl,imx95-usb-phy")) in imx8m_get_phy_tuning_data()
431 if (device_property_read_u32(dev, "fsl,phy-tx-vref-tune-percent", in imx8m_get_phy_tuning_data()
432 &imx_phy->tx_vref_tune)) in imx8m_get_phy_tuning_data()
433 imx_phy->tx_vref_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
435 imx_phy->tx_vref_tune = in imx8m_get_phy_tuning_data()
436 imx95_phy_tx_vref_tune_from_property(imx_phy->tx_vref_tune); in imx8m_get_phy_tuning_data()
438 imx_phy->tx_vref_tune = in imx8m_get_phy_tuning_data()
439 phy_tx_vref_tune_from_property(imx_phy->tx_vref_tune); in imx8m_get_phy_tuning_data()
441 if (device_property_read_u32(dev, "fsl,phy-tx-rise-tune-percent", in imx8m_get_phy_tuning_data()
442 &imx_phy->tx_rise_tune)) in imx8m_get_phy_tuning_data()
443 imx_phy->tx_rise_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
445 imx_phy->tx_rise_tune = in imx8m_get_phy_tuning_data()
446 imx95_phy_tx_rise_tune_from_property(imx_phy->tx_rise_tune); in imx8m_get_phy_tuning_data()
448 imx_phy->tx_rise_tune = in imx8m_get_phy_tuning_data()
449 phy_tx_rise_tune_from_property(imx_phy->tx_rise_tune); in imx8m_get_phy_tuning_data()
451 if (device_property_read_u32(dev, "fsl,phy-tx-preemp-amp-tune-microamp", in imx8m_get_phy_tuning_data()
452 &imx_phy->tx_preemp_amp_tune)) in imx8m_get_phy_tuning_data()
453 imx_phy->tx_preemp_amp_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
455 imx_phy->tx_preemp_amp_tune = in imx8m_get_phy_tuning_data()
456 phy_tx_preemp_amp_tune_from_property(imx_phy->tx_preemp_amp_tune); in imx8m_get_phy_tuning_data()
458 if (device_property_read_u32(dev, "fsl,phy-tx-vboost-level-microvolt", in imx8m_get_phy_tuning_data()
459 &imx_phy->tx_vboost_level)) in imx8m_get_phy_tuning_data()
460 imx_phy->tx_vboost_level = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
462 imx_phy->tx_vboost_level = in imx8m_get_phy_tuning_data()
463 phy_tx_vboost_level_from_property(imx_phy->tx_vboost_level); in imx8m_get_phy_tuning_data()
465 if (device_property_read_u32(dev, "fsl,phy-comp-dis-tune-percent", in imx8m_get_phy_tuning_data()
466 &imx_phy->comp_dis_tune)) in imx8m_get_phy_tuning_data()
467 imx_phy->comp_dis_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
469 imx_phy->comp_dis_tune = in imx8m_get_phy_tuning_data()
470 imx95_phy_comp_dis_tune_from_property(imx_phy->comp_dis_tune); in imx8m_get_phy_tuning_data()
472 imx_phy->comp_dis_tune = in imx8m_get_phy_tuning_data()
473 phy_comp_dis_tune_from_property(imx_phy->comp_dis_tune); in imx8m_get_phy_tuning_data()
475 if (device_property_read_u32(dev, "fsl,phy-pcs-tx-deemph-3p5db-attenuation-db", in imx8m_get_phy_tuning_data()
476 &imx_phy->pcs_tx_deemph_3p5db)) in imx8m_get_phy_tuning_data()
477 imx_phy->pcs_tx_deemph_3p5db = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
479 imx_phy->pcs_tx_deemph_3p5db = in imx8m_get_phy_tuning_data()
480 phy_pcs_tx_deemph_3p5db_from_property(imx_phy->pcs_tx_deemph_3p5db); in imx8m_get_phy_tuning_data()
482 if (device_property_read_u32(dev, "fsl,phy-pcs-tx-swing-full-percent", in imx8m_get_phy_tuning_data()
483 &imx_phy->pcs_tx_swing_full)) in imx8m_get_phy_tuning_data()
484 imx_phy->pcs_tx_swing_full = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
486 imx_phy->pcs_tx_swing_full = in imx8m_get_phy_tuning_data()
487 phy_pcs_tx_swing_full_from_property(imx_phy->pcs_tx_swing_full); in imx8m_get_phy_tuning_data()
495 if (imx_phy->pcs_tx_deemph_3p5db != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
496 value = readl(imx_phy->base + PHY_CTRL4); in imx8m_phy_tune()
499 imx_phy->pcs_tx_deemph_3p5db); in imx8m_phy_tune()
500 writel(value, imx_phy->base + PHY_CTRL4); in imx8m_phy_tune()
503 if (imx_phy->pcs_tx_swing_full != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
504 value = readl(imx_phy->base + PHY_CTRL5); in imx8m_phy_tune()
506 imx_phy->pcs_tx_swing_full); in imx8m_phy_tune()
507 writel(value, imx_phy->base + PHY_CTRL5); in imx8m_phy_tune()
510 if ((imx_phy->tx_vref_tune & imx_phy->tx_rise_tune & in imx8m_phy_tune()
511 imx_phy->tx_preemp_amp_tune & imx_phy->comp_dis_tune & in imx8m_phy_tune()
512 imx_phy->tx_vboost_level) == PHY_TUNE_DEFAULT) in imx8m_phy_tune()
516 value = readl(imx_phy->base + PHY_CTRL3); in imx8m_phy_tune()
518 if (imx_phy->tx_vref_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
521 imx_phy->tx_vref_tune); in imx8m_phy_tune()
524 if (imx_phy->tx_rise_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
527 imx_phy->tx_rise_tune); in imx8m_phy_tune()
530 if (imx_phy->tx_preemp_amp_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
533 imx_phy->tx_preemp_amp_tune); in imx8m_phy_tune()
536 if (imx_phy->comp_dis_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
539 imx_phy->comp_dis_tune); in imx8m_phy_tune()
542 if (imx_phy->tx_vboost_level != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
545 imx_phy->tx_vboost_level); in imx8m_phy_tune()
548 writel(value, imx_phy->base + PHY_CTRL3); in imx8m_phy_tune()
556 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
560 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
562 value = readl(imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
564 writel(value, imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
566 value = readl(imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
568 writel(value, imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
570 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
572 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
583 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
586 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
589 value = readl(imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
591 writel(value, imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
593 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
596 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
598 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
600 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
602 value = readl(imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
604 writel(value, imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
608 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
610 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
614 if (imx_phy->tca) in imx8mp_usb_phy_init()
615 tca_blk_init(imx_phy->tca); in imx8mp_usb_phy_init()
625 ret = regulator_enable(imx_phy->vbus); in imx8mq_phy_power_on()
629 return clk_prepare_enable(imx_phy->clk); in imx8mq_phy_power_on()
636 clk_disable_unprepare(imx_phy->clk); in imx8mq_phy_power_off()
637 regulator_disable(imx_phy->vbus); in imx8mq_phy_power_off()
657 {.compatible = "fsl,imx8mq-usb-phy",
659 {.compatible = "fsl,imx8mp-usb-phy",
661 {.compatible = "fsl,imx95-usb-phy",
670 struct device *dev = &pdev->dev; in imx8mq_usb_phy_probe()
676 return -ENOMEM; in imx8mq_usb_phy_probe()
678 imx_phy->clk = devm_clk_get(dev, "phy"); in imx8mq_usb_phy_probe()
679 if (IS_ERR(imx_phy->clk)) { in imx8mq_usb_phy_probe()
681 return PTR_ERR(imx_phy->clk); in imx8mq_usb_phy_probe()
684 imx_phy->base = devm_platform_ioremap_resource(pdev, 0); in imx8mq_usb_phy_probe()
685 if (IS_ERR(imx_phy->base)) in imx8mq_usb_phy_probe()
686 return PTR_ERR(imx_phy->base); in imx8mq_usb_phy_probe()
690 return -EINVAL; in imx8mq_usb_phy_probe()
692 imx_phy->phy = devm_phy_create(dev, NULL, phy_ops); in imx8mq_usb_phy_probe()
693 if (IS_ERR(imx_phy->phy)) in imx8mq_usb_phy_probe()
694 return PTR_ERR(imx_phy->phy); in imx8mq_usb_phy_probe()
696 imx_phy->vbus = devm_regulator_get(dev, "vbus"); in imx8mq_usb_phy_probe()
697 if (IS_ERR(imx_phy->vbus)) in imx8mq_usb_phy_probe()
698 return dev_err_probe(dev, PTR_ERR(imx_phy->vbus), "failed to get vbus\n"); in imx8mq_usb_phy_probe()
700 phy_set_drvdata(imx_phy->phy, imx_phy); in imx8mq_usb_phy_probe()
702 imx_phy->tca = imx95_usb_phy_get_tca(pdev, imx_phy); in imx8mq_usb_phy_probe()
703 if (IS_ERR(imx_phy->tca)) in imx8mq_usb_phy_probe()
704 return dev_err_probe(dev, PTR_ERR(imx_phy->tca), in imx8mq_usb_phy_probe()
725 .name = "imx8mq-usb-phy",