From: Ivaylo Dimitrov <ivo.g.dimitrov...@gmail.com> Currently DM_USB requires OF_CONTROL to be enabled, otherwise link errors occur. On the other hand OF_CONTROL requires board code to be migrated to DT, which is not always possible or required.
Fix that by conditionally compiling OF_CONTROL specific sections in USB related drivers code in the same way like it is done in the other drivers. Also, auto select OF_LIBFDT if DM_USB is selected but OF_CONTROL is not. Introduce a new Kconfig option OF_NODE used to compile of_node.c in case OF_CONTROL is not enabled. Fix deprecation warning condition as well. Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov...@gmail.com> Tested-by: Pali Rohár <p...@kernel.org> --- Makefile | 3 +-- common/usb_hub.c | 2 ++ drivers/core/Makefile | 7 ++++++- drivers/usb/Kconfig | 6 ++++++ drivers/usb/host/usb-uclass.c | 5 ++++- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a73481d18c14..e1cf0200b72c 100644 --- a/Makefile +++ b/Makefile @@ -1114,8 +1114,7 @@ ifneq ($(CONFIG_DM),y) @echo >&2 "See doc/driver-model/migration.rst for more info." @echo >&2 "====================================================" endif - $(call deprecated,CONFIG_DM_USB CONFIG_OF_CONTROL CONFIG_BLK,\ - USB,v2019.07,$(CONFIG_USB)) + $(call deprecated,CONFIG_DM_USB CONFIG_BLK,USB,v2019.07,$(CONFIG_USB)) $(call deprecated,CONFIG_DM_PCI,PCI,v2019.07,$(CONFIG_PCI)) $(call deprecated,CONFIG_DM_VIDEO,video,v2019.07,\ $(CONFIG_LCD)$(CONFIG_VIDEO)) diff --git a/common/usb_hub.c b/common/usb_hub.c index ba11a188ca64..c6b042a68440 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -956,7 +956,9 @@ U_BOOT_DRIVER(usb_generic_hub) = { UCLASS_DRIVER(usb_hub) = { .id = UCLASS_USB_HUB, .name = "usb_hub", +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) .post_bind = dm_scan_fdt_dev, +#endif .post_probe = usb_hub_post_probe, .child_pre_probe = usb_child_pre_probe, .per_child_auto = sizeof(struct usb_device), diff --git a/drivers/core/Makefile b/drivers/core/Makefile index 5edd4e413576..2cf5873a3278 100644 --- a/drivers/core/Makefile +++ b/drivers/core/Makefile @@ -15,6 +15,11 @@ obj-$(CONFIG_$(SPL_)OF_LIVE) += of_access.o of_addr.o ifndef CONFIG_DM_DEV_READ_INLINE obj-$(CONFIG_OF_CONTROL) += read.o endif -obj-$(CONFIG_OF_CONTROL) += of_extra.o ofnode.o read_extra.o +obj-$(CONFIG_OF_CONTROL) += of_extra.o read_extra.o +ifdef CONFIG_OF_NODE +obj-y += ofnode.o +else +obj-$(CONFIG_OF_CONTROL) += ofnode.o +endif ccflags-$(CONFIG_DM_DEBUG) += -DDEBUG diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index f6975730bf8d..cb0593a724f0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -33,9 +33,15 @@ menuconfig USB if USB +config OF_NODE + bool + default n + config DM_USB bool "Enable driver model for USB" depends on USB && DM + select OF_LIBFDT if !OF_CONTROL + select OF_NODE if !OF_CONTROL help Enable driver model for USB. The USB interface is then implemented by the USB uclass. Multiple USB controllers of different types diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c index e3b616c3266a..71dc578550f5 100644 --- a/drivers/usb/host/usb-uclass.c +++ b/drivers/usb/host/usb-uclass.c @@ -770,6 +770,7 @@ int usb_detect_change(void) static int usb_child_post_bind(struct udevice *dev) { +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) struct usb_dev_plat *plat = dev_get_parent_plat(dev); int val; @@ -787,7 +788,7 @@ static int usb_child_post_bind(struct udevice *dev) plat->id.match_flags |= USB_DEVICE_ID_MATCH_INT_CLASS; plat->id.bInterfaceClass = val; } - +#endif return 0; } @@ -848,7 +849,9 @@ UCLASS_DRIVER(usb) = { .id = UCLASS_USB, .name = "usb", .flags = DM_UC_FLAG_SEQ_ALIAS, +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) .post_bind = dm_scan_fdt_dev, +#endif .priv_auto = sizeof(struct usb_uclass_priv), .per_child_auto = sizeof(struct usb_device), .per_device_auto = sizeof(struct usb_bus_priv), -- 2.20.1