On Wed, Jan 08, 2020 at 02:49:28PM +0100, Arnd Bergmann wrote: > The new phy-j721e-wiz driver causes a link failure without CONFIG_OF: > > drivers/phy/ti/phy-j721e-wiz.o: In function `wiz_remove': > phy-j721e-wiz.c:(.text+0x40): undefined reference to `of_platform_device_destroy' > > Add a dummy version of of_platform_device_destroy to avoid having to add > Kconfig dependencies for the driver. As there are a few other functions > without dummy implementations, add those as well for completeness. > > Fixes: 42440de5438a ("phy: ti: j721e-wiz: Add support for WIZ module present in TI J721E SoC") > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- > include/linux/of_platform.h | 39 ++++++++++++++++++++++++++++--------- > 1 file changed, 30 insertions(+), 9 deletions(-) > > diff --git a/include/linux/of_platform.h b/include/linux/of_platform.h > index 84a966623e78..f5dea3de4856 100644 > --- a/include/linux/of_platform.h > +++ b/include/linux/of_platform.h > @@ -48,28 +48,49 @@ struct of_dev_auxdata { > > extern const struct of_device_id of_default_bus_match_table[]; > > +#ifdef CONFIG_OF > /* Platform drivers register/unregister */ > extern struct platform_device *of_device_alloc(struct device_node *np, > const char *bus_id, > struct device *parent); > -#ifdef CONFIG_OF > extern struct platform_device *of_find_device_by_node(struct device_node *np); > -#else > -static inline struct platform_device *of_find_device_by_node(struct device_node *np) > -{ > - return NULL; > -} > -#endif > - > /* Platform devices and busses creation */ > extern struct platform_device *of_platform_device_create(struct device_node *np, > const char *bus_id, > struct device *parent); > - > extern int of_platform_device_destroy(struct device *dev, void *data); > extern int of_platform_bus_probe(struct device_node *root, > const struct of_device_id *matches, > struct device *parent); > +#else > +static inline struct platform_device *of_device_alloc(struct device_node *np, > + const char *bus_id, > + struct device *parent) > +{ > + return NULL; > +} > +static inline struct platform_device *of_find_device_by_node(struct device_node *np) > +{ > + return NULL; > +} > +static inline struct platform_device *of_platform_device_create(struct device_node *np, > + const char *bus_id, > + struct device *parent) > +{ > + return NULL; > +} > +static inline int of_platform_device_destroy(struct device *dev, void *data) > +{ > + return 0; > +} > +static inline int of_platform_bus_probe(struct device_node *root, > + const struct of_device_id *matches, > + struct device *parent) > +{ > + return -ENODEV; > +} This and of_device_alloc are pretty much only powerpc functions, so I want things to break if there are new users. There's one user of of_device_alloc() and a couple for of_platform_bus_probe() which is deprecated in favor of of_platform_populate(). I think we can get rid of the remaining x86 callers. (I have the same opinion on of_platform_device_create too, but I've given up on that). Rob