video: exynos: fix modular build
Subsystems (2)
PATCH 1/1 video: exynos: fix modular build
The s6e8ax0 driver has a dependency on BACKLIGHT_CLASS_DEVICE, which can be configured as a loadable module, so we have to make the driver a tristate symbol as well, to avoid this error:
drivers/built-in.o: In function `s6e8ax0_probe':
:(.text+0x23a48): undefined reference to `devm_backlight_device_register'
This also means we get another error from a missing export, which this fixes as well:
ERROR: "exynos_mipi_dsi_register_lcd_driver" [drivers/video/fbdev/exynos/s6e8ax0.ko] undefined!
Finally, the EXYNOS_VIDEO option is turned into tristate as well for good measure, as all framebuffer drivers should be configurable as modules.
drivers/video/fbdev/exynos/Kconfig +3 -3
@@ -3,7 +3,7 @@ # menuconfig EXYNOS_VIDEO - bool "Exynos Video driver support" + tristate "Exynos Video driver support" depends on ARCH_S5PV210 || ARCH_EXYNOS help This enables support for EXYNOS Video device.
@@ -15,13 +15,13 @@ if EXYNOS_VIDEO # config EXYNOS_MIPI_DSI - bool "EXYNOS MIPI DSI driver support." + tristate "EXYNOS MIPI DSI driver support." select GENERIC_PHY help This enables support for MIPI-DSI device. config EXYNOS_LCD_S6E8AX0 - bool "S6E8AX0 MIPI AMOLED LCD Driver" + tristate "S6E8AX0 MIPI AMOLED LCD Driver" depends on EXYNOS_MIPI_DSI && BACKLIGHT_CLASS_DEVICE depends on (LCD_CLASS_DEVICE = y) default n
drivers/video/fbdev/exynos/Makefile +4 -2
@@ -2,6 +2,8 @@ # Makefile for the exynos video drivers. # -obj-$(CONFIG_EXYNOS_MIPI_DSI) += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \ - exynos_mipi_dsi_lowlevel.o +obj-$(CONFIG_EXYNOS_MIPI_DSI) += exynos-mipi-dsi-mod.o + +exynos-mipi-dsi-mod-objs += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \ + exynos_mipi_dsi_lowlevel.o obj-$(CONFIG_EXYNOS_LCD_S6E8AX0) += s6e8ax0.o
drivers/video/fbdev/exynos/exynos_mipi_dsi.c +1 -0
@@ -263,6 +263,7 @@ int exynos_mipi_dsi_register_lcd_driver(struct mipi_dsim_lcd_driver *lcd_drv)return 0 ; } +EXPORT_SYMBOL_GPL (exynos_mipi_dsi_register_lcd_driver); static struct mipi_dsim_ddi *exynos_mipi_dsi_bind_lcd_ddi( struct mipi_dsim_device *dsim,
Quoted 10 lines · Arnd Bergmann
The s6e8ax0 driver has a dependency on
BACKLIGHT_CLASS_DEVICE, which can be configured as a loadable module, so we have to make the driver a tristate symbol as well, to avoid this error:
drivers/built-in.o: In function `s6e8ax0_probe':
:(.text+0x23a48): undefined reference to `devm_backlight_device_register'This also means we get another error from a missing export, which this fixes as well:
Quoted 7 lines
ERROR: "
exynos_mipi_dsi_register_lcd_driver" [drivers/video/fbdev/exynos/s6e8ax0.ko] undefined!Finally, the
EXYNOS_VIDEOoption is turned into tristate as well for good measure, as all framebuffer drivers should be configurable as modules.Signed-off-by Arnd Bergmann <[email protected]>
Looks good:
Best regards,
Krzysztof
Quoted 3 lines · Arnd Bergmann
Finally, the
EXYNOS_VIDEOoption is turned into tristate as well for good measure, as all framebuffer drivers should be configurable as modules.
EXYNOS_MIPI_DSI and EXYNOS_LCD_S6E8AX0 are made tristate too. And that is, I think, what counts. See below.
For anyone wondering how these two drivers can be made modular with only a few tweaks to the build system: that is because exynos_mipi_dsi.c and s6e8ax0.c already contain module specific boilerplate. They probably already contained that boilerplate when they were added three years ago. (Perhaps the changelog should mention this.)
drivers/video/fbdev/exynos/Kconfig line 9
Quoted 9 lines
drivers/video/fbdev/exynos/Kconfig +1
-1menuconfig EXYNOS_VIDEO - bool "Exynos Video driver support" + tristate "Exynos Video driver support" depends on ARCH_S5PV210 || ARCH_EXYNOS help This enables support for EXYNOS Video device.
I have tested this only lightly but I do think this hunk is not needed. Because basically all that this entry does is making EXYNOS_MIPI_DSI and EXYNOS_LCD_S6E8AX0 available. And that works just as well if it's a bool. Correct?
Quoted 16 lines
config
EXYNOS_MIPI_DSIdrivers/video/fbdev/exynos/Kconfig +2
-2- bool "EXYNOS MIPI DSI driver support." + tristate "EXYNOS MIPI DSI driver support." select GENERIC_PHY help This enables support for MIPI-DSI device. config EXYNOS_LCD_S6E8AX0 - bool "S6E8AX0 MIPI AMOLED LCD Driver" + tristate "S6E8AX0 MIPI AMOLED LCD Driver" depends on EXYNOS_MIPI_DSI && BACKLIGHT_CLASS_DEVICE depends on (LCD_CLASS_DEVICE = y) default n
drivers/video/fbdev/exynos/Makefile line 8
Quoted 7 lines
drivers/video/fbdev/exynos/Makefile +4
-2-obj-$(CONFIG_EXYNOS_MIPI_DSI) += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \ - exynos_mipi_dsi_lowlevel.o +obj-$(CONFIG_EXYNOS_MIPI_DSI) += exynos-mipi-dsi-mod.o + +exynos-mipi-dsi-mod-objs += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \ + exynos_mipi_dsi_lowlevel.o
I don't speak Makefilese fluently, so I have to ask. Is the -mod extension needed because a module built from multiple files can't have a name that matches the name of one of its .c files (minus the .c extension, of course)?
Quoted 1 line
obj-$(CONFIG_EXYNOS_LCD_S6E8AX0) += s6e8ax0.o
Thanks,
Paul Bolle