Skip to contentSkip to conversation

video: exynos: fix modular build

PATCH In review Arnd Bergmann 3 participants 3 messages May 19, 2015 – May 20, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index 1f16b4678c71..d916bef94f25 100644
@@ -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
index b5b1bd228abb..02d8dc522fea 100644
@@ -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
index b527fe464628..18edc724bf57 100644
@@ -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,
Reviewed-by on v1 1/1
#1 lore raw
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_VIDEO option is turned into tristate as well for good measure, as all framebuffer drivers should be configurable as modules.

Looks good:

Best regards,
Krzysztof

#2 lore raw
In reply to Arnd Bergmann
Quoted 3 lines · Arnd Bergmann

Finally, the EXYNOS_VIDEO option 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 -1
 
 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.

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_DSI

drivers/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