Message ID | 2025020424-overstock-scheming-6a30@gregkh (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Driver core: Add faux bus devices | expand |
On 25-02-04 12:09:15, Greg Kroah-Hartman wrote: > The usb_phy_generic code was creating a "fake" platform device to pass > around in different places. Instead of doing that, use the faux bus > instead as that is what is really wanted here. Hi Greg, As far as I know, there are some platforms use the device-tree to get the system resource (eg, clock, reset, regular) for this driver. We may not use fake bus for this driver. $grep -rn "usb-nop-xceiv" arch/arm64/boot/dts/* arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi:649: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/freescale/imx8mm.dtsi:275: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/freescale/imx8mm.dtsi:285: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/freescale/imx93.dtsi:238: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/freescale/imx93.dtsi:245: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/freescale/imx8mn.dtsi:1321: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/intel/socfpga_agilex.dtsi:149: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi:133: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9132-db.dtsi:30: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9132-db.dtsi:44: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9131-db.dtsi:33: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/armada-3720-db.dts:43: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:49: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:53: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9130-db.dtsi:52: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/cn9130-db.dtsi:66: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/armada-8040-db.dts:53: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/armada-8040-db.dts:67: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/ac5-98dx35xx-rd.dts:36: compatible = "usb-nop-xceiv"; arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts:39: compatible = "usb-nop-xceiv"; Peter > > Site note, this fixes a bug in the mpfs driver where the incorrect > pointer was being passed to usb_phy_generic_unregister(), odd that no > one ever hit this in the past. > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > --- > v2: no change > > drivers/usb/chipidea/ci_hdrc_pci.c | 2 +- > drivers/usb/dwc2/pci.c | 4 ++-- > drivers/usb/musb/mediatek.c | 4 ++-- > drivers/usb/musb/mpfs.c | 4 ++-- > drivers/usb/musb/tusb6010.c | 2 +- > drivers/usb/phy/phy-generic.c | 9 ++++----- > include/linux/usb/usb_phy_generic.h | 9 +++++---- > 7 files changed, 17 insertions(+), 17 deletions(-) > > diff --git a/drivers/usb/chipidea/ci_hdrc_pci.c b/drivers/usb/chipidea/ci_hdrc_pci.c > index d63479e1ad10..63511ea30d6e 100644 > --- a/drivers/usb/chipidea/ci_hdrc_pci.c > +++ b/drivers/usb/chipidea/ci_hdrc_pci.c > @@ -20,7 +20,7 @@ > > struct ci_hdrc_pci { > struct platform_device *ci; > - struct platform_device *phy; > + struct faux_device *phy; > }; > > /****************************************************************************** > diff --git a/drivers/usb/dwc2/pci.c b/drivers/usb/dwc2/pci.c > index f3a1e4232a31..8cb50620aa55 100644 > --- a/drivers/usb/dwc2/pci.c > +++ b/drivers/usb/dwc2/pci.c > @@ -30,7 +30,7 @@ static const char dwc2_driver_name[] = "dwc2-pci"; > > struct dwc2_pci_glue { > struct platform_device *dwc2; > - struct platform_device *phy; > + struct faux_device *phy; > }; > > /** > @@ -53,7 +53,7 @@ static int dwc2_pci_probe(struct pci_dev *pci, > { > struct resource res[2]; > struct platform_device *dwc2; > - struct platform_device *phy; > + struct faux_device *phy; > int ret; > struct device *dev = &pci->dev; > struct dwc2_pci_glue *glue; > diff --git a/drivers/usb/musb/mediatek.c b/drivers/usb/musb/mediatek.c > index aa988d74b58d..995bab88506a 100644 > --- a/drivers/usb/musb/mediatek.c > +++ b/drivers/usb/musb/mediatek.c > @@ -43,7 +43,7 @@ struct mtk_glue { > struct device *dev; > struct musb *musb; > struct platform_device *musb_pdev; > - struct platform_device *usb_phy; > + struct faux_device *usb_phy; > struct phy *phy; > struct usb_phy *xceiv; > enum phy_mode phy_mode; > @@ -507,7 +507,7 @@ static int mtk_musb_probe(struct platform_device *pdev) > static void mtk_musb_remove(struct platform_device *pdev) > { > struct mtk_glue *glue = platform_get_drvdata(pdev); > - struct platform_device *usb_phy = glue->usb_phy; > + struct faux_device *usb_phy = glue->usb_phy; > > platform_device_unregister(glue->musb_pdev); > usb_phy_generic_unregister(usb_phy); > diff --git a/drivers/usb/musb/mpfs.c b/drivers/usb/musb/mpfs.c > index 7edc8429b274..ef20794aee12 100644 > --- a/drivers/usb/musb/mpfs.c > +++ b/drivers/usb/musb/mpfs.c > @@ -25,7 +25,7 @@ > struct mpfs_glue { > struct device *dev; > struct platform_device *musb; > - struct platform_device *phy; > + struct faux_device *phy; > struct clk *clk; > }; > > @@ -356,7 +356,7 @@ static void mpfs_remove(struct platform_device *pdev) > > clk_disable_unprepare(glue->clk); > platform_device_unregister(glue->musb); > - usb_phy_generic_unregister(pdev); > + usb_phy_generic_unregister(glue->phy); > } > > #ifdef CONFIG_OF > diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c > index 90b760a95e4e..92609f9d20ff 100644 > --- a/drivers/usb/musb/tusb6010.c > +++ b/drivers/usb/musb/tusb6010.c > @@ -32,7 +32,7 @@ > struct tusb6010_glue { > struct device *dev; > struct platform_device *musb; > - struct platform_device *phy; > + struct faux_device *phy; > struct gpio_desc *enable; > struct gpio_desc *intpin; > }; > diff --git a/drivers/usb/phy/phy-generic.c b/drivers/usb/phy/phy-generic.c > index 6c3ececf9137..a6cece75d0f8 100644 > --- a/drivers/usb/phy/phy-generic.c > +++ b/drivers/usb/phy/phy-generic.c > @@ -30,16 +30,15 @@ > (IRQF_SHARED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | \ > IRQF_ONESHOT) > > -struct platform_device *usb_phy_generic_register(void) > +struct faux_device *usb_phy_generic_register(void) > { > - return platform_device_register_simple("usb_phy_generic", > - PLATFORM_DEVID_AUTO, NULL, 0); > + return faux_device_create("usb_phy_generic", NULL); > } > EXPORT_SYMBOL_GPL(usb_phy_generic_register); > > -void usb_phy_generic_unregister(struct platform_device *pdev) > +void usb_phy_generic_unregister(struct faux_device *fdev) > { > - platform_device_unregister(pdev); > + faux_device_destroy(fdev); > } > EXPORT_SYMBOL_GPL(usb_phy_generic_unregister); > > diff --git a/include/linux/usb/usb_phy_generic.h b/include/linux/usb/usb_phy_generic.h > index cd9e70a552a0..856db2bacc07 100644 > --- a/include/linux/usb/usb_phy_generic.h > +++ b/include/linux/usb/usb_phy_generic.h > @@ -3,18 +3,19 @@ > #define __LINUX_USB_NOP_XCEIV_H > > #include <linux/usb/otg.h> > +#include <linux/device/faux.h> > > #if IS_ENABLED(CONFIG_NOP_USB_XCEIV) > /* sometimes transceivers are accessed only through e.g. ULPI */ > -extern struct platform_device *usb_phy_generic_register(void); > -extern void usb_phy_generic_unregister(struct platform_device *); > +struct faux_device *usb_phy_generic_register(void); > +void usb_phy_generic_unregister(struct faux_device *); > #else > -static inline struct platform_device *usb_phy_generic_register(void) > +static inline struct faux_device *usb_phy_generic_register(void) > { > return NULL; > } > > -static inline void usb_phy_generic_unregister(struct platform_device *pdev) > +static inline void usb_phy_generic_unregister(struct faux_device *fdev) > { > } > #endif > -- > 2.48.1 > >
On Wed, Feb 05, 2025 at 06:19:16PM +0800, Peter Chen wrote: > On 25-02-04 12:09:15, Greg Kroah-Hartman wrote: > > The usb_phy_generic code was creating a "fake" platform device to pass > > around in different places. Instead of doing that, use the faux bus > > instead as that is what is really wanted here. > > Hi Greg, > > As far as I know, there are some platforms use the device-tree to get > the system resource (eg, clock, reset, regular) for this driver. > We may not use fake bus for this driver. But there is no system resources assigned to this device/driver at all, so how is it getting anything here? > $grep -rn "usb-nop-xceiv" arch/arm64/boot/dts/* > > arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi:649: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/freescale/imx8mm.dtsi:275: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/freescale/imx8mm.dtsi:285: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/freescale/imx93.dtsi:238: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/freescale/imx93.dtsi:245: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/freescale/imx8mn.dtsi:1321: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/intel/socfpga_agilex.dtsi:149: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi:133: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:30: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:44: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9131-db.dtsi:33: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/armada-3720-db.dts:43: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:49: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:53: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:52: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:66: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/armada-8040-db.dts:53: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/armada-8040-db.dts:67: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/ac5-98dx35xx-rd.dts:36: compatible = "usb-nop-xceiv"; > arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts:39: compatible = "usb-nop-xceiv"; Does this actually work at all? There is no real resouces here that I can see, so what am I missing? thanks, greg k-h
On Wed, Feb 05, 2025 at 01:27:30PM +0100, Greg Kroah-Hartman wrote: > On Wed, Feb 05, 2025 at 06:19:16PM +0800, Peter Chen wrote: > > On 25-02-04 12:09:15, Greg Kroah-Hartman wrote: > > > The usb_phy_generic code was creating a "fake" platform device to pass > > > around in different places. Instead of doing that, use the faux bus > > > instead as that is what is really wanted here. > > > > Hi Greg, > > > > As far as I know, there are some platforms use the device-tree to get > > the system resource (eg, clock, reset, regular) for this driver. > > We may not use fake bus for this driver. > > But there is no system resources assigned to this device/driver at all, > so how is it getting anything here? > > > $grep -rn "usb-nop-xceiv" arch/arm64/boot/dts/* > > > > arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi:649: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/freescale/imx8mm.dtsi:275: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/freescale/imx8mm.dtsi:285: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/freescale/imx93.dtsi:238: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/freescale/imx93.dtsi:245: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/freescale/imx8mn.dtsi:1321: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/intel/socfpga_agilex.dtsi:149: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi:133: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:30: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:44: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9131-db.dtsi:33: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/armada-3720-db.dts:43: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:49: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:53: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:52: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:66: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/armada-8040-db.dts:53: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/armada-8040-db.dts:67: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/ac5-98dx35xx-rd.dts:36: compatible = "usb-nop-xceiv"; > > arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts:39: compatible = "usb-nop-xceiv"; > > Does this actually work at all? There is no real resouces here that I > can see, so what am I missing? Hm, maybe I got this one wrong, I'm getting build errors now from kbuild, let me go look into this some more... greg k-h
On 25-02-05 14:41:31, Greg Kroah-Hartman wrote: > On Wed, Feb 05, 2025 at 01:27:30PM +0100, Greg Kroah-Hartman wrote: > > On Wed, Feb 05, 2025 at 06:19:16PM +0800, Peter Chen wrote: > > > On 25-02-04 12:09:15, Greg Kroah-Hartman wrote: > > > > The usb_phy_generic code was creating a "fake" platform device to pass > > > > around in different places. Instead of doing that, use the faux bus > > > > instead as that is what is really wanted here. > > > > > > Hi Greg, > > > > > > As far as I know, there are some platforms use the device-tree to get > > > the system resource (eg, clock, reset, regular) for this driver. > > > We may not use fake bus for this driver. > > > > But there is no system resources assigned to this device/driver at all, > > so how is it getting anything here? > > > > > $grep -rn "usb-nop-xceiv" arch/arm64/boot/dts/* > > > > > > arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi:649: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/freescale/imx8mm.dtsi:275: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/freescale/imx8mm.dtsi:285: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/freescale/imx93.dtsi:238: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/freescale/imx93.dtsi:245: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/freescale/imx8mn.dtsi:1321: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/intel/socfpga_agilex.dtsi:149: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi:133: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:30: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:44: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9131-db.dtsi:33: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/armada-3720-db.dts:43: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:49: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:53: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:52: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:66: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/armada-8040-db.dts:53: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/armada-8040-db.dts:67: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/ac5-98dx35xx-rd.dts:36: compatible = "usb-nop-xceiv"; > > > arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts:39: compatible = "usb-nop-xceiv"; > > > > Does this actually work at all? Yes, at least for some NXP i.MX series SoCs, these SoCs use chipidea IP. At above device tree files, the USB generic PHY device node has enabled, so the device will be probed and get hardware resources. During the chipidea core driver->probe, it calls this generic USB phy driver's phy.init and do some actual hardware operations. Peter >> There is no real resouces here that I > > can see, so what am I missing? > > Hm, maybe I got this one wrong, I'm getting build errors now from > kbuild, let me go look into this some more... > > greg k-h
On Thu, Feb 06, 2025 at 09:54:52AM +0800, Peter Chen wrote: > On 25-02-05 14:41:31, Greg Kroah-Hartman wrote: > > On Wed, Feb 05, 2025 at 01:27:30PM +0100, Greg Kroah-Hartman wrote: > > > On Wed, Feb 05, 2025 at 06:19:16PM +0800, Peter Chen wrote: > > > > On 25-02-04 12:09:15, Greg Kroah-Hartman wrote: > > > > > The usb_phy_generic code was creating a "fake" platform device to pass > > > > > around in different places. Instead of doing that, use the faux bus > > > > > instead as that is what is really wanted here. > > > > > > > > Hi Greg, > > > > > > > > As far as I know, there are some platforms use the device-tree to get > > > > the system resource (eg, clock, reset, regular) for this driver. > > > > We may not use fake bus for this driver. > > > > > > But there is no system resources assigned to this device/driver at all, > > > so how is it getting anything here? > > > > > > > $grep -rn "usb-nop-xceiv" arch/arm64/boot/dts/* > > > > > > > > arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi:649: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/freescale/imx8mm.dtsi:275: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/freescale/imx8mm.dtsi:285: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/freescale/imx93.dtsi:238: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/freescale/imx93.dtsi:245: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/freescale/imx8mn.dtsi:1321: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/intel/socfpga_agilex.dtsi:149: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/intel/socfpga_agilex5.dtsi:133: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:30: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9132-db.dtsi:44: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9131-db.dtsi:33: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/armada-3720-db.dts:43: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:49: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9130-crb.dtsi:53: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:52: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/cn9130-db.dtsi:66: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/armada-8040-db.dts:53: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/armada-8040-db.dts:67: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/ac5-98dx35xx-rd.dts:36: compatible = "usb-nop-xceiv"; > > > > arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts:39: compatible = "usb-nop-xceiv"; > > > > > > Does this actually work at all? > > Yes, at least for some NXP i.MX series SoCs, these SoCs use chipidea IP. > At above device tree files, the USB generic PHY device node has enabled, > so the device will be probed and get hardware resources. > > During the chipidea core driver->probe, it calls this generic USB phy > driver's phy.init and do some actual hardware operations. Ugh, that's not obvious at all. The usb-nop-xceiv match with usb-phy-generic is tenious, but yeah, my change here broke this code. I'll drop it from the series, thanks for the review. greg k-h
diff --git a/drivers/usb/chipidea/ci_hdrc_pci.c b/drivers/usb/chipidea/ci_hdrc_pci.c index d63479e1ad10..63511ea30d6e 100644 --- a/drivers/usb/chipidea/ci_hdrc_pci.c +++ b/drivers/usb/chipidea/ci_hdrc_pci.c @@ -20,7 +20,7 @@ struct ci_hdrc_pci { struct platform_device *ci; - struct platform_device *phy; + struct faux_device *phy; }; /****************************************************************************** diff --git a/drivers/usb/dwc2/pci.c b/drivers/usb/dwc2/pci.c index f3a1e4232a31..8cb50620aa55 100644 --- a/drivers/usb/dwc2/pci.c +++ b/drivers/usb/dwc2/pci.c @@ -30,7 +30,7 @@ static const char dwc2_driver_name[] = "dwc2-pci"; struct dwc2_pci_glue { struct platform_device *dwc2; - struct platform_device *phy; + struct faux_device *phy; }; /** @@ -53,7 +53,7 @@ static int dwc2_pci_probe(struct pci_dev *pci, { struct resource res[2]; struct platform_device *dwc2; - struct platform_device *phy; + struct faux_device *phy; int ret; struct device *dev = &pci->dev; struct dwc2_pci_glue *glue; diff --git a/drivers/usb/musb/mediatek.c b/drivers/usb/musb/mediatek.c index aa988d74b58d..995bab88506a 100644 --- a/drivers/usb/musb/mediatek.c +++ b/drivers/usb/musb/mediatek.c @@ -43,7 +43,7 @@ struct mtk_glue { struct device *dev; struct musb *musb; struct platform_device *musb_pdev; - struct platform_device *usb_phy; + struct faux_device *usb_phy; struct phy *phy; struct usb_phy *xceiv; enum phy_mode phy_mode; @@ -507,7 +507,7 @@ static int mtk_musb_probe(struct platform_device *pdev) static void mtk_musb_remove(struct platform_device *pdev) { struct mtk_glue *glue = platform_get_drvdata(pdev); - struct platform_device *usb_phy = glue->usb_phy; + struct faux_device *usb_phy = glue->usb_phy; platform_device_unregister(glue->musb_pdev); usb_phy_generic_unregister(usb_phy); diff --git a/drivers/usb/musb/mpfs.c b/drivers/usb/musb/mpfs.c index 7edc8429b274..ef20794aee12 100644 --- a/drivers/usb/musb/mpfs.c +++ b/drivers/usb/musb/mpfs.c @@ -25,7 +25,7 @@ struct mpfs_glue { struct device *dev; struct platform_device *musb; - struct platform_device *phy; + struct faux_device *phy; struct clk *clk; }; @@ -356,7 +356,7 @@ static void mpfs_remove(struct platform_device *pdev) clk_disable_unprepare(glue->clk); platform_device_unregister(glue->musb); - usb_phy_generic_unregister(pdev); + usb_phy_generic_unregister(glue->phy); } #ifdef CONFIG_OF diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 90b760a95e4e..92609f9d20ff 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c @@ -32,7 +32,7 @@ struct tusb6010_glue { struct device *dev; struct platform_device *musb; - struct platform_device *phy; + struct faux_device *phy; struct gpio_desc *enable; struct gpio_desc *intpin; }; diff --git a/drivers/usb/phy/phy-generic.c b/drivers/usb/phy/phy-generic.c index 6c3ececf9137..a6cece75d0f8 100644 --- a/drivers/usb/phy/phy-generic.c +++ b/drivers/usb/phy/phy-generic.c @@ -30,16 +30,15 @@ (IRQF_SHARED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | \ IRQF_ONESHOT) -struct platform_device *usb_phy_generic_register(void) +struct faux_device *usb_phy_generic_register(void) { - return platform_device_register_simple("usb_phy_generic", - PLATFORM_DEVID_AUTO, NULL, 0); + return faux_device_create("usb_phy_generic", NULL); } EXPORT_SYMBOL_GPL(usb_phy_generic_register); -void usb_phy_generic_unregister(struct platform_device *pdev) +void usb_phy_generic_unregister(struct faux_device *fdev) { - platform_device_unregister(pdev); + faux_device_destroy(fdev); } EXPORT_SYMBOL_GPL(usb_phy_generic_unregister); diff --git a/include/linux/usb/usb_phy_generic.h b/include/linux/usb/usb_phy_generic.h index cd9e70a552a0..856db2bacc07 100644 --- a/include/linux/usb/usb_phy_generic.h +++ b/include/linux/usb/usb_phy_generic.h @@ -3,18 +3,19 @@ #define __LINUX_USB_NOP_XCEIV_H #include <linux/usb/otg.h> +#include <linux/device/faux.h> #if IS_ENABLED(CONFIG_NOP_USB_XCEIV) /* sometimes transceivers are accessed only through e.g. ULPI */ -extern struct platform_device *usb_phy_generic_register(void); -extern void usb_phy_generic_unregister(struct platform_device *); +struct faux_device *usb_phy_generic_register(void); +void usb_phy_generic_unregister(struct faux_device *); #else -static inline struct platform_device *usb_phy_generic_register(void) +static inline struct faux_device *usb_phy_generic_register(void) { return NULL; } -static inline void usb_phy_generic_unregister(struct platform_device *pdev) +static inline void usb_phy_generic_unregister(struct faux_device *fdev) { } #endif
The usb_phy_generic code was creating a "fake" platform device to pass around in different places. Instead of doing that, use the faux bus instead as that is what is really wanted here. Site note, this fixes a bug in the mpfs driver where the incorrect pointer was being passed to usb_phy_generic_unregister(), odd that no one ever hit this in the past. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- v2: no change drivers/usb/chipidea/ci_hdrc_pci.c | 2 +- drivers/usb/dwc2/pci.c | 4 ++-- drivers/usb/musb/mediatek.c | 4 ++-- drivers/usb/musb/mpfs.c | 4 ++-- drivers/usb/musb/tusb6010.c | 2 +- drivers/usb/phy/phy-generic.c | 9 ++++----- include/linux/usb/usb_phy_generic.h | 9 +++++---- 7 files changed, 17 insertions(+), 17 deletions(-)