Re: [PATCH v6 4/6] phy: realtek: usb2: introduce reset controller struct
Manivannan Sadhasivam <[email protected]>
| Newsgroups | org.infradead.lists.linux-phy,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <lbnpxp2a5g7agbtmrrxbkfeuqocurtco4n4jfcs4mqkiqsiu3w@vnf7e6weumv3> |
On Wed, May 20, 2026 at 10:57:26PM +0500, Rustam Adilov wrote: > In RTL9607C, there is so called "IP Enable Controller" which resemble > reset controller with reset lines and is used for various things like > USB, PCIE, GMAC and such. > > Introduce the reset_control struct to this driver to handle deasserting > usb2 phy reset line. > > Make use of the function devm_reset_control_array_get_optional_exclusive() > function to get the reset controller and since existing RTD SoCs don't > specify the resets we can have a cleaner code. > > Since the vendor usb driver developed by Realtek doesn't assert the reset > line (or in their case clear the register bit), we can reasonably assume > reset_control_assert is not needed here. > > Co-developed-by: Michael Zavertkin <[email protected]> > Signed-off-by: Michael Zavertkin <[email protected]> > Signed-off-by: Rustam Adilov <[email protected]> > --- > drivers/phy/realtek/phy-rtk-usb2.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/phy/realtek/phy-rtk-usb2.c b/drivers/phy/realtek/phy-rtk-usb2.c > index a9e29d2f7e6f..16c5fc3191de 100644 > --- a/drivers/phy/realtek/phy-rtk-usb2.c > +++ b/drivers/phy/realtek/phy-rtk-usb2.c > @@ -17,6 +17,7 @@ > #include <linux/sys_soc.h> > #include <linux/mfd/syscon.h> > #include <linux/phy/phy.h> > +#include <linux/reset.h> > #include <linux/usb.h> > > /* GUSB2PHYACCn register */ > @@ -130,6 +131,7 @@ struct rtk_phy { > struct phy_cfg *phy_cfg; > int num_phy; > struct phy_parameter *phy_parameter; > + struct reset_control *phy_rst; > > struct dentry *debug_dir; > }; > @@ -676,6 +678,15 @@ static int rtk_phy_init(struct phy *phy) > if (!rtk_phy) > return -EINVAL; > > + if (rtk_phy->phy_rst) { > + ret = reset_control_deassert(rtk_phy->phy_rst); > + > + if (ret) > + return ret; > + > + usleep_range(5000, 6000); > + } > + > for (i = 0; i < rtk_phy->num_phy; i++) > ret = do_rtk_phy_init(rtk_phy, i); > > @@ -1059,6 +1070,11 @@ static int rtk_usb2phy_probe(struct platform_device *pdev) > > rtk_phy->num_phy = phy_cfg->num_phy; > > + rtk_phy->phy_rst = devm_reset_control_array_get_optional_exclusive(dev); Why do you need to use devm_reset_control_array*() for a single reset line? - Mani -- மணிவண்ணன் சதாசிவம் -- linux-phy mailing list [email protected] https://lists.infradead.org/mailman/listinfo/linux-phy