Commit dadd28d4 authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/client: Add client-lib module



Add drm_client_lib.ko to contain DRM's built-in client. Move the
existing client for fbdev emulation into the new module. Protect the
new module behind CONFIG_DRM_CLIENT_LIB.

The Kconfig rules separate the DRM drivers from the DRM clients. A
driver can opt into the default clients, but the user configures
each client individually. To do so, DRM drivers still select
DRM_CLIENT_SELECTION. The option is now a tristate that further
selects all dependencies of the enabled DRM clients. There's
a menu option for each client. Enabling at least one client also
selects DRM_CLIENT_SETUP, so that drivers call drm_client_setup().
New DRM clients should depend on DRM_CLIENT_SELECTION.

There are existing kernel options in drm_fb_helper.o, so leave this
file in the KMS-helper module for now.

v5:
- leave fbdev helpers in drm_kms_helper.ko for now
v3:
- fix commit changelog
v2:
- keep client code in core
- protect lib with DRM_CLIENT_LIB
- remove duplicate line from Makefile (Jocelyn)

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJonathan Cavitt <jonathan.cavitt@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241014085740.582287-13-tzimmermann@suse.de
parent 1f828b4d
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -9,8 +9,6 @@ menuconfig DRM
	tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
	depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
	select DRM_PANEL_ORIENTATION_QUIRKS
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select HDMI
	select I2C
	select DMA_SHARED_BUFFER
@@ -219,10 +217,19 @@ config DRM_CLIENT
	  option. Drivers that support the default clients should
	  select DRM_CLIENT_SELECTION instead.

config DRM_CLIENT_LIB
	tristate
	depends on DRM
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	help
	  This option enables the DRM client library and selects all
	  modules and components according to the enabled clients.

config DRM_CLIENT_SELECTION
	bool
	tristate
	depends on DRM
	select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION
	select DRM_CLIENT_LIB if DRM_FBDEV_EMULATION
	help
	  Drivers that support in-kernel DRM clients have to select this
	  option.
@@ -230,11 +237,18 @@ config DRM_CLIENT_SELECTION
config DRM_CLIENT_SETUP
	bool
	depends on DRM_CLIENT_SELECTION
	help
	  Enables the DRM client selection. DRM drivers that support the
	  default clients should select DRM_CLIENT_SELECTION instead.

menu "Supported DRM clients"
	depends on DRM_CLIENT_SELECTION

config DRM_FBDEV_EMULATION
	bool "Enable legacy fbdev support for your modesetting driver"
	depends on DRM
	depends on DRM_CLIENT_SELECTION
	select DRM_CLIENT
	select DRM_CLIENT_SETUP
	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
	default FB
	help
@@ -273,6 +287,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM
	  If in doubt, say "N" or spread the word to your closed source
	  library vendor.

endmenu

config DRM_LOAD_EDID_FIRMWARE
	bool "Allow to specify an EDID data set instead of probing for it"
	depends on DRM
+9 −5
Original line number Diff line number Diff line
@@ -144,14 +144,18 @@ drm_kms_helper-y := \
	drm_probe_helper.o \
	drm_self_refresh_helper.o \
	drm_simple_kms_helper.o
drm_kms_helper-$(CONFIG_DRM_CLIENT_SETUP) += \
	drm_client_setup.o
drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += \
	drm_fbdev_client.o \
	drm_fb_helper.o
drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o
obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o

#
# DRM clients
#

drm_client_lib-y := drm_client_setup.o
drm_client_lib-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fbdev_client.o
obj-$(CONFIG_DRM_CLIENT_LIB) += drm_client_lib.o

#
# Drivers and the rest
#
+3 −0
Original line number Diff line number Diff line
@@ -64,3 +64,6 @@ void drm_client_setup_with_color_mode(struct drm_device *dev, unsigned int color
	drm_client_setup_with_fourcc(dev, fourcc);
}
EXPORT_SYMBOL(drm_client_setup_with_color_mode);

MODULE_DESCRIPTION("In-kernel DRM clients");
MODULE_LICENSE("GPL and additional rights");