On Fri, Aug 02, 2024 at 05:17:00PM GMT, Xu Yang wrote: > The i.MX95 USB3 phy has a Type-C Assist block (TCA). This block consists > two functional blocks (XBar assist and VBus assist) and one system > access interface using APB. > > The primary functionality of XBar assist is: > - switching lane for flip > - moving unused lanes into lower power states. > > This info can be get from: > i.MX95 RM Chapter 163.3.8 Type-C assist (TCA) block. > > This will add support for TCA block to achieve lane switching and tca > lower power functionality. > > Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx> > Reviewed-by: Jun Li <jun.li@xxxxxxx> > --- > drivers/phy/freescale/Kconfig | 1 + > drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 238 +++++++++++++++++++++ > 2 files changed, 239 insertions(+) > [..] > @@ -398,6 +624,10 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev) > > phy_set_drvdata(imx_phy->phy, imx_phy); > > + if (device_is_compatible(dev, "fsl,imx95-usb-phy") && > + imx95_usb_phy_get_tca(pdev, imx_phy) < 0) > + return dev_err_probe(dev, -ENODEV, "failed to get tca\n"); Pleas propagate error returned by imx95_usb_phy_get_tca() instead of always returning -ENODEV. > + > imx8m_get_phy_tuning_data(imx_phy); > > phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); > @@ -405,8 +635,16 @@ static int imx8mq_usb_phy_probe(struct platform_device *pdev) > return PTR_ERR_OR_ZERO(phy_provider); > } > > +static void imx8mq_usb_phy_remove(struct platform_device *pdev) > +{ > + struct imx8mq_usb_phy *imx_phy = platform_get_drvdata(pdev); > + > + imx95_usb_phy_put_tca(imx_phy); > +} > + > static struct platform_driver imx8mq_usb_phy_driver = { > .probe = imx8mq_usb_phy_probe, > + .remove = imx8mq_usb_phy_remove, > .driver = { > .name = "imx8mq-usb-phy", > .of_match_table = imx8mq_usb_phy_of_match, > -- > 2.34.1 > -- With best wishes Dmitry