Lines Matching +full:120 +full:- +full:db
1 // SPDX-License-Identifier: GPL-2.0+
135 struct tca_blk *tca = imx_phy->tca; in tca_blk_typec_switch_set()
138 if (tca->orientation == orientation) in tca_blk_typec_switch_set()
141 ret = clk_prepare_enable(imx_phy->clk); in tca_blk_typec_switch_set()
146 clk_disable_unprepare(imx_phy->clk); in tca_blk_typec_switch_set()
154 struct device *dev = &pdev->dev; in tca_blk_get_typec_switch()
159 sw_desc.fwnode = dev->fwnode; in tca_blk_get_typec_switch()
195 mutex_lock(&tca->mutex); in tca_blk_orientation_set()
203 writel(val, tca->base + TCA_GCFG); in tca_blk_orientation_set()
206 writel(val, tca->base + TCA_TCPC); in tca_blk_orientation_set()
213 writel(val, tca->base + TCA_GCFG); in tca_blk_orientation_set()
216 val = readl(tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
218 writel(val, tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
225 writel(val, tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
229 writel(val, tca->base + TCA_SYSMODE_CFG); in tca_blk_orientation_set()
232 tca->orientation = orientation; in tca_blk_orientation_set()
233 mutex_unlock(&tca->mutex); in tca_blk_orientation_set()
241 val = readl(tca->base + TCA_CLK_RST); in tca_blk_init()
243 writel(val, tca->base + TCA_CLK_RST); in tca_blk_init()
249 writel(val, tca->base + TCA_CLK_RST); in tca_blk_init()
251 tca_blk_orientation_set(tca, tca->orientation); in tca_blk_init()
257 struct device *dev = &pdev->dev; in imx95_usb_phy_get_tca()
267 return ERR_PTR(-ENOMEM); in imx95_usb_phy_get_tca()
269 tca->base = devm_ioremap_resource(&pdev->dev, res); in imx95_usb_phy_get_tca()
270 if (IS_ERR(tca->base)) in imx95_usb_phy_get_tca()
271 return ERR_CAST(tca->base); in imx95_usb_phy_get_tca()
273 mutex_init(&tca->mutex); in imx95_usb_phy_get_tca()
275 tca->orientation = TYPEC_ORIENTATION_NORMAL; in imx95_usb_phy_get_tca()
276 tca->sw = tca_blk_get_typec_switch(pdev, imx_phy); in imx95_usb_phy_get_tca()
283 struct tca_blk *tca = imx_phy->tca; in imx95_usb_phy_put_tca()
288 tca_blk_put_typec_switch(tca->sw); in imx95_usb_phy_put_tca()
295 return DIV_ROUND_CLOSEST(percent - 94U, 2); in phy_tx_vref_tune_from_property()
307 percent -= 91; in imx95_phy_tx_vref_tune_from_property()
310 percent -= 92; in imx95_phy_tx_vref_tune_from_property()
313 percent -= 93; in imx95_phy_tx_vref_tune_from_property()
336 percent = clamp(percent, 90U, 120U); in imx95_phy_tx_rise_tune_from_property()
343 case 116 ... 120: in imx95_phy_tx_rise_tune_from_property()
405 percent -= 95; in imx95_phy_comp_dis_tune_from_property()
408 percent -= 96; in imx95_phy_comp_dis_tune_from_property()
411 percent -= 97; in imx95_phy_comp_dis_tune_from_property()
427 struct device *dev = imx_phy->phy->dev.parent; in imx8m_get_phy_tuning_data()
430 if (device_is_compatible(dev, "fsl,imx95-usb-phy")) in imx8m_get_phy_tuning_data()
433 if (device_property_read_u32(dev, "fsl,phy-tx-vref-tune-percent", in imx8m_get_phy_tuning_data()
434 &imx_phy->tx_vref_tune)) in imx8m_get_phy_tuning_data()
435 imx_phy->tx_vref_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
437 imx_phy->tx_vref_tune = in imx8m_get_phy_tuning_data()
438 imx95_phy_tx_vref_tune_from_property(imx_phy->tx_vref_tune); in imx8m_get_phy_tuning_data()
440 imx_phy->tx_vref_tune = in imx8m_get_phy_tuning_data()
441 phy_tx_vref_tune_from_property(imx_phy->tx_vref_tune); in imx8m_get_phy_tuning_data()
443 if (device_property_read_u32(dev, "fsl,phy-tx-rise-tune-percent", in imx8m_get_phy_tuning_data()
444 &imx_phy->tx_rise_tune)) in imx8m_get_phy_tuning_data()
445 imx_phy->tx_rise_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
447 imx_phy->tx_rise_tune = in imx8m_get_phy_tuning_data()
448 imx95_phy_tx_rise_tune_from_property(imx_phy->tx_rise_tune); in imx8m_get_phy_tuning_data()
450 imx_phy->tx_rise_tune = in imx8m_get_phy_tuning_data()
451 phy_tx_rise_tune_from_property(imx_phy->tx_rise_tune); in imx8m_get_phy_tuning_data()
453 if (device_property_read_u32(dev, "fsl,phy-tx-preemp-amp-tune-microamp", in imx8m_get_phy_tuning_data()
454 &imx_phy->tx_preemp_amp_tune)) in imx8m_get_phy_tuning_data()
455 imx_phy->tx_preemp_amp_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
457 imx_phy->tx_preemp_amp_tune = in imx8m_get_phy_tuning_data()
458 phy_tx_preemp_amp_tune_from_property(imx_phy->tx_preemp_amp_tune); in imx8m_get_phy_tuning_data()
460 if (device_property_read_u32(dev, "fsl,phy-tx-vboost-level-microvolt", in imx8m_get_phy_tuning_data()
461 &imx_phy->tx_vboost_level)) in imx8m_get_phy_tuning_data()
462 imx_phy->tx_vboost_level = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
464 imx_phy->tx_vboost_level = in imx8m_get_phy_tuning_data()
465 phy_tx_vboost_level_from_property(imx_phy->tx_vboost_level); in imx8m_get_phy_tuning_data()
467 if (device_property_read_u32(dev, "fsl,phy-comp-dis-tune-percent", in imx8m_get_phy_tuning_data()
468 &imx_phy->comp_dis_tune)) in imx8m_get_phy_tuning_data()
469 imx_phy->comp_dis_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
471 imx_phy->comp_dis_tune = in imx8m_get_phy_tuning_data()
472 imx95_phy_comp_dis_tune_from_property(imx_phy->comp_dis_tune); in imx8m_get_phy_tuning_data()
474 imx_phy->comp_dis_tune = in imx8m_get_phy_tuning_data()
475 phy_comp_dis_tune_from_property(imx_phy->comp_dis_tune); in imx8m_get_phy_tuning_data()
477 if (device_property_read_u32(dev, "fsl,phy-pcs-tx-deemph-3p5db-attenuation-db", in imx8m_get_phy_tuning_data()
478 &imx_phy->pcs_tx_deemph_3p5db)) in imx8m_get_phy_tuning_data()
479 imx_phy->pcs_tx_deemph_3p5db = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
481 imx_phy->pcs_tx_deemph_3p5db = in imx8m_get_phy_tuning_data()
482 phy_pcs_tx_deemph_3p5db_from_property(imx_phy->pcs_tx_deemph_3p5db); in imx8m_get_phy_tuning_data()
484 if (device_property_read_u32(dev, "fsl,phy-pcs-tx-swing-full-percent", in imx8m_get_phy_tuning_data()
485 &imx_phy->pcs_tx_swing_full)) in imx8m_get_phy_tuning_data()
486 imx_phy->pcs_tx_swing_full = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
488 imx_phy->pcs_tx_swing_full = in imx8m_get_phy_tuning_data()
489 phy_pcs_tx_swing_full_from_property(imx_phy->pcs_tx_swing_full); in imx8m_get_phy_tuning_data()
497 if (imx_phy->pcs_tx_deemph_3p5db != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
498 value = readl(imx_phy->base + PHY_CTRL4); in imx8m_phy_tune()
501 imx_phy->pcs_tx_deemph_3p5db); in imx8m_phy_tune()
502 writel(value, imx_phy->base + PHY_CTRL4); in imx8m_phy_tune()
505 if (imx_phy->pcs_tx_swing_full != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
506 value = readl(imx_phy->base + PHY_CTRL5); in imx8m_phy_tune()
508 imx_phy->pcs_tx_swing_full); in imx8m_phy_tune()
509 writel(value, imx_phy->base + PHY_CTRL5); in imx8m_phy_tune()
512 if ((imx_phy->tx_vref_tune & imx_phy->tx_rise_tune & in imx8m_phy_tune()
513 imx_phy->tx_preemp_amp_tune & imx_phy->comp_dis_tune & in imx8m_phy_tune()
514 imx_phy->tx_vboost_level) == PHY_TUNE_DEFAULT) in imx8m_phy_tune()
518 value = readl(imx_phy->base + PHY_CTRL3); in imx8m_phy_tune()
520 if (imx_phy->tx_vref_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
523 imx_phy->tx_vref_tune); in imx8m_phy_tune()
526 if (imx_phy->tx_rise_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
529 imx_phy->tx_rise_tune); in imx8m_phy_tune()
532 if (imx_phy->tx_preemp_amp_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
535 imx_phy->tx_preemp_amp_tune); in imx8m_phy_tune()
538 if (imx_phy->comp_dis_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
541 imx_phy->comp_dis_tune); in imx8m_phy_tune()
544 if (imx_phy->tx_vboost_level != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
547 imx_phy->tx_vboost_level); in imx8m_phy_tune()
550 writel(value, imx_phy->base + PHY_CTRL3); in imx8m_phy_tune()
558 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
562 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
564 value = readl(imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
566 writel(value, imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
568 value = readl(imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
570 writel(value, imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
572 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
574 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
585 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
587 value |= FIELD_PREP(PHY_CTRL0_FSEL_MASK, imx_phy->alt_clk ? in imx8mp_usb_phy_init()
589 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
592 value = readl(imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
594 writel(value, imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
596 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
599 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
601 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
603 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
605 value = readl(imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
607 writel(value, imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
611 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
613 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
617 if (imx_phy->tca) in imx8mp_usb_phy_init()
618 tca_blk_init(imx_phy->tca); in imx8mp_usb_phy_init()
628 ret = regulator_enable(imx_phy->vbus); in imx8mq_phy_power_on()
632 ret = clk_prepare_enable(imx_phy->clk); in imx8mq_phy_power_on()
636 ret = clk_prepare_enable(imx_phy->alt_clk); in imx8mq_phy_power_on()
638 clk_disable_unprepare(imx_phy->clk); in imx8mq_phy_power_on()
649 clk_disable_unprepare(imx_phy->alt_clk); in imx8mq_phy_power_off()
650 clk_disable_unprepare(imx_phy->clk); in imx8mq_phy_power_off()
651 regulator_disable(imx_phy->vbus); in imx8mq_phy_power_off()
671 {.compatible = "fsl,imx8mq-usb-phy",
673 {.compatible = "fsl,imx8mp-usb-phy",
675 {.compatible = "fsl,imx95-usb-phy",
684 struct device *dev = &pdev->dev; in imx8mq_usb_phy_probe()
690 return -ENOMEM; in imx8mq_usb_phy_probe()
692 imx_phy->clk = devm_clk_get(dev, "phy"); in imx8mq_usb_phy_probe()
693 if (IS_ERR(imx_phy->clk)) { in imx8mq_usb_phy_probe()
695 return PTR_ERR(imx_phy->clk); in imx8mq_usb_phy_probe()
698 imx_phy->alt_clk = devm_clk_get_optional(dev, "alt"); in imx8mq_usb_phy_probe()
699 if (IS_ERR(imx_phy->alt_clk)) in imx8mq_usb_phy_probe()
700 return dev_err_probe(dev, PTR_ERR(imx_phy->alt_clk), in imx8mq_usb_phy_probe()
703 imx_phy->base = devm_platform_ioremap_resource(pdev, 0); in imx8mq_usb_phy_probe()
704 if (IS_ERR(imx_phy->base)) in imx8mq_usb_phy_probe()
705 return PTR_ERR(imx_phy->base); in imx8mq_usb_phy_probe()
709 return -EINVAL; in imx8mq_usb_phy_probe()
711 imx_phy->phy = devm_phy_create(dev, NULL, phy_ops); in imx8mq_usb_phy_probe()
712 if (IS_ERR(imx_phy->phy)) in imx8mq_usb_phy_probe()
713 return PTR_ERR(imx_phy->phy); in imx8mq_usb_phy_probe()
715 imx_phy->vbus = devm_regulator_get(dev, "vbus"); in imx8mq_usb_phy_probe()
716 if (IS_ERR(imx_phy->vbus)) in imx8mq_usb_phy_probe()
717 return dev_err_probe(dev, PTR_ERR(imx_phy->vbus), "failed to get vbus\n"); in imx8mq_usb_phy_probe()
719 phy_set_drvdata(imx_phy->phy, imx_phy); in imx8mq_usb_phy_probe()
721 imx_phy->tca = imx95_usb_phy_get_tca(pdev, imx_phy); in imx8mq_usb_phy_probe()
722 if (IS_ERR(imx_phy->tca)) in imx8mq_usb_phy_probe()
723 return dev_err_probe(dev, PTR_ERR(imx_phy->tca), in imx8mq_usb_phy_probe()
744 .name = "imx8mq-usb-phy",