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()
303 case 100 ... 101: in phy_tx_rise_tune_from_property()
357 percent = min(percent, 100U); in phy_pcs_tx_swing_full_from_property()
359 return (percent * 127) / 100; in phy_pcs_tx_swing_full_from_property()
364 struct device *dev = imx_phy->phy->dev.parent; in imx8m_get_phy_tuning_data()
366 if (device_property_read_u32(dev, "fsl,phy-tx-vref-tune-percent", in imx8m_get_phy_tuning_data()
367 &imx_phy->tx_vref_tune)) in imx8m_get_phy_tuning_data()
368 imx_phy->tx_vref_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
370 imx_phy->tx_vref_tune = in imx8m_get_phy_tuning_data()
371 phy_tx_vref_tune_from_property(imx_phy->tx_vref_tune); in imx8m_get_phy_tuning_data()
373 if (device_property_read_u32(dev, "fsl,phy-tx-rise-tune-percent", in imx8m_get_phy_tuning_data()
374 &imx_phy->tx_rise_tune)) in imx8m_get_phy_tuning_data()
375 imx_phy->tx_rise_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
377 imx_phy->tx_rise_tune = in imx8m_get_phy_tuning_data()
378 phy_tx_rise_tune_from_property(imx_phy->tx_rise_tune); in imx8m_get_phy_tuning_data()
380 if (device_property_read_u32(dev, "fsl,phy-tx-preemp-amp-tune-microamp", in imx8m_get_phy_tuning_data()
381 &imx_phy->tx_preemp_amp_tune)) in imx8m_get_phy_tuning_data()
382 imx_phy->tx_preemp_amp_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
384 imx_phy->tx_preemp_amp_tune = in imx8m_get_phy_tuning_data()
385 phy_tx_preemp_amp_tune_from_property(imx_phy->tx_preemp_amp_tune); in imx8m_get_phy_tuning_data()
387 if (device_property_read_u32(dev, "fsl,phy-tx-vboost-level-microvolt", in imx8m_get_phy_tuning_data()
388 &imx_phy->tx_vboost_level)) in imx8m_get_phy_tuning_data()
389 imx_phy->tx_vboost_level = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
391 imx_phy->tx_vboost_level = in imx8m_get_phy_tuning_data()
392 phy_tx_vboost_level_from_property(imx_phy->tx_vboost_level); in imx8m_get_phy_tuning_data()
394 if (device_property_read_u32(dev, "fsl,phy-comp-dis-tune-percent", in imx8m_get_phy_tuning_data()
395 &imx_phy->comp_dis_tune)) in imx8m_get_phy_tuning_data()
396 imx_phy->comp_dis_tune = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
398 imx_phy->comp_dis_tune = in imx8m_get_phy_tuning_data()
399 phy_comp_dis_tune_from_property(imx_phy->comp_dis_tune); in imx8m_get_phy_tuning_data()
401 if (device_property_read_u32(dev, "fsl,phy-pcs-tx-deemph-3p5db-attenuation-db", in imx8m_get_phy_tuning_data()
402 &imx_phy->pcs_tx_deemph_3p5db)) in imx8m_get_phy_tuning_data()
403 imx_phy->pcs_tx_deemph_3p5db = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
405 imx_phy->pcs_tx_deemph_3p5db = in imx8m_get_phy_tuning_data()
406 phy_pcs_tx_deemph_3p5db_from_property(imx_phy->pcs_tx_deemph_3p5db); in imx8m_get_phy_tuning_data()
408 if (device_property_read_u32(dev, "fsl,phy-pcs-tx-swing-full-percent", in imx8m_get_phy_tuning_data()
409 &imx_phy->pcs_tx_swing_full)) in imx8m_get_phy_tuning_data()
410 imx_phy->pcs_tx_swing_full = PHY_TUNE_DEFAULT; in imx8m_get_phy_tuning_data()
412 imx_phy->pcs_tx_swing_full = in imx8m_get_phy_tuning_data()
413 phy_pcs_tx_swing_full_from_property(imx_phy->pcs_tx_swing_full); in imx8m_get_phy_tuning_data()
421 if (imx_phy->pcs_tx_deemph_3p5db != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
422 value = readl(imx_phy->base + PHY_CTRL4); in imx8m_phy_tune()
425 imx_phy->pcs_tx_deemph_3p5db); in imx8m_phy_tune()
426 writel(value, imx_phy->base + PHY_CTRL4); in imx8m_phy_tune()
429 if (imx_phy->pcs_tx_swing_full != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
430 value = readl(imx_phy->base + PHY_CTRL5); in imx8m_phy_tune()
432 imx_phy->pcs_tx_swing_full); in imx8m_phy_tune()
433 writel(value, imx_phy->base + PHY_CTRL5); in imx8m_phy_tune()
436 if ((imx_phy->tx_vref_tune & imx_phy->tx_rise_tune & in imx8m_phy_tune()
437 imx_phy->tx_preemp_amp_tune & imx_phy->comp_dis_tune & in imx8m_phy_tune()
438 imx_phy->tx_vboost_level) == PHY_TUNE_DEFAULT) in imx8m_phy_tune()
442 value = readl(imx_phy->base + PHY_CTRL3); in imx8m_phy_tune()
444 if (imx_phy->tx_vref_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
447 imx_phy->tx_vref_tune); in imx8m_phy_tune()
450 if (imx_phy->tx_rise_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
453 imx_phy->tx_rise_tune); in imx8m_phy_tune()
456 if (imx_phy->tx_preemp_amp_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
459 imx_phy->tx_preemp_amp_tune); in imx8m_phy_tune()
462 if (imx_phy->comp_dis_tune != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
465 imx_phy->comp_dis_tune); in imx8m_phy_tune()
468 if (imx_phy->tx_vboost_level != PHY_TUNE_DEFAULT) { in imx8m_phy_tune()
471 imx_phy->tx_vboost_level); in imx8m_phy_tune()
474 writel(value, imx_phy->base + PHY_CTRL3); in imx8m_phy_tune()
482 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
486 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
488 value = readl(imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
490 writel(value, imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
492 value = readl(imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
494 writel(value, imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
496 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
498 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
509 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
512 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
515 value = readl(imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
517 writel(value, imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
519 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
522 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
524 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
526 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
528 value = readl(imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
530 writel(value, imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
534 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
536 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
540 if (imx_phy->tca) in imx8mp_usb_phy_init()
541 tca_blk_init(imx_phy->tca); in imx8mp_usb_phy_init()
551 ret = regulator_enable(imx_phy->vbus); in imx8mq_phy_power_on()
555 return clk_prepare_enable(imx_phy->clk); in imx8mq_phy_power_on()
562 clk_disable_unprepare(imx_phy->clk); in imx8mq_phy_power_off()
563 regulator_disable(imx_phy->vbus); in imx8mq_phy_power_off()
583 {.compatible = "fsl,imx8mq-usb-phy",
585 {.compatible = "fsl,imx8mp-usb-phy",
587 {.compatible = "fsl,imx95-usb-phy",
596 struct device *dev = &pdev->dev; in imx8mq_usb_phy_probe()
602 return -ENOMEM; in imx8mq_usb_phy_probe()
604 imx_phy->clk = devm_clk_get(dev, "phy"); in imx8mq_usb_phy_probe()
605 if (IS_ERR(imx_phy->clk)) { in imx8mq_usb_phy_probe()
607 return PTR_ERR(imx_phy->clk); in imx8mq_usb_phy_probe()
610 imx_phy->base = devm_platform_ioremap_resource(pdev, 0); in imx8mq_usb_phy_probe()
611 if (IS_ERR(imx_phy->base)) in imx8mq_usb_phy_probe()
612 return PTR_ERR(imx_phy->base); in imx8mq_usb_phy_probe()
616 return -EINVAL; in imx8mq_usb_phy_probe()
618 imx_phy->phy = devm_phy_create(dev, NULL, phy_ops); in imx8mq_usb_phy_probe()
619 if (IS_ERR(imx_phy->phy)) in imx8mq_usb_phy_probe()
620 return PTR_ERR(imx_phy->phy); in imx8mq_usb_phy_probe()
622 imx_phy->vbus = devm_regulator_get(dev, "vbus"); in imx8mq_usb_phy_probe()
623 if (IS_ERR(imx_phy->vbus)) in imx8mq_usb_phy_probe()
624 return dev_err_probe(dev, PTR_ERR(imx_phy->vbus), "failed to get vbus\n"); in imx8mq_usb_phy_probe()
626 phy_set_drvdata(imx_phy->phy, imx_phy); in imx8mq_usb_phy_probe()
628 imx_phy->tca = imx95_usb_phy_get_tca(pdev, imx_phy); in imx8mq_usb_phy_probe()
629 if (IS_ERR(imx_phy->tca)) in imx8mq_usb_phy_probe()
630 return dev_err_probe(dev, PTR_ERR(imx_phy->tca), in imx8mq_usb_phy_probe()
651 .name = "imx8mq-usb-phy",