# SPDX-License-Identifier: GPL-2.0-only

config DRM_ARCPGU
	tristate "ARC PGU"
	depends on DRM && OF
	select DRM_CLIENT_SELECTION
	select DRM_GEM_DMA_HELPER
	select DRM_KMS_HELPER
	help
	  Choose this option if you have an ARC PGU controller.

	  If M is selected the module will be called arcpgu.

config DRM_BOCHS
	tristate "DRM Support for bochs dispi vga interface (qemu stdvga)"
	depends on DRM && PCI && MMU
	select DRM_CLIENT_SELECTION
	select DRM_GEM_SHMEM_HELPER
	select DRM_KMS_HELPER
	help
	  This is a KMS driver for qemu's stdvga output. Choose this option
	  for qemu.

	  If M is selected the module will be called bochs.

config DRM_CIRRUS_QEMU
	tristate "Cirrus driver for QEMU emulated device"
	depends on DRM && PCI && MMU
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_SHMEM_HELPER
	help
	 This is a KMS driver for emulated cirrus device in qemu.
	 It is *NOT* intended for real cirrus devices. This requires
	 the modesetting userspace X.org driver.

	 Cirrus is obsolete, the hardware was designed in the 90ies
	 and can't keep up with todays needs.  More background:
	 https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/

	 Better alternatives are:
	   - stdvga (DRM_BOCHS, qemu -vga std, default in qemu 2.2+)
	   - qxl (DRM_QXL, qemu -vga qxl, works best with spice)
	   - virtio (DRM_VIRTIO_GPU), qemu -vga virtio)

config DRM_GM12U320
	tristate "GM12U320 driver for USB projectors"
	depends on DRM && USB && MMU
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_SHMEM_HELPER
	help
	 This is a KMS driver for projectors which use the GM12U320 chipset
	 for video transfer over USB2/3, such as the Acer C120 mini projector.

config DRM_OFDRM
	tristate "Open Firmware display driver"
	depends on DRM && MMU && OF && (PPC || COMPILE_TEST)
	select APERTURE_HELPERS
	select DRM_CLIENT_SELECTION
	select DRM_GEM_SHMEM_HELPER
	select DRM_KMS_HELPER
	help
	  DRM driver for Open Firmware framebuffers.

	  This driver assumes that the display hardware has been initialized
	  by the Open Firmware before the kernel boots. Scanout buffer, size,
	  and display format must be provided via device tree.

config DRM_PANEL_MIPI_DBI
	tristate "DRM support for MIPI DBI compatible panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	select VIDEOMODE_HELPERS
	help
	  Say Y here if you want to enable support for MIPI DBI compatible
	  panels. The controller command setup can be provided using a
	  firmware file. For more information see
	  https://github.com/notro/panel-mipi-dbi/wiki.
	  To compile this driver as a module, choose M here.

config DRM_SIMPLEDRM
	tristate "Simple framebuffer driver"
	depends on DRM && MMU
	select APERTURE_HELPERS
	select DRM_CLIENT_SELECTION
	select DRM_GEM_SHMEM_HELPER
	select DRM_KMS_HELPER
	help
	  DRM driver for simple platform-provided framebuffers.

	  This driver assumes that the display hardware has been initialized
	  by the firmware or bootloader before the kernel boots. Scanout
	  buffer, size, and display format must be provided via device tree,
	  UEFI, VESA, etc.

	  On x86 BIOS or UEFI systems, you should also select SYSFB_SIMPLEFB
	  to use UEFI and VESA framebuffers.

config TINYDRM_HX8357D
	tristate "DRM support for HX8357D display panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	help
	  DRM driver for the following HX8357D panels:
	  * YX350HV15-T 3.5" 340x350 TFT (Adafruit 3.5")

	  If M is selected the module will be called hx8357d.

config TINYDRM_ILI9163
	tristate "DRM support for ILI9163 display panels"
	depends on DRM && SPI
	select BACKLIGHT_CLASS_DEVICE
	select DRM_CLIENT_SELECTION
	select DRM_GEM_DMA_HELPER
	select DRM_KMS_HELPER
	select DRM_MIPI_DBI
	help
	  DRM driver for the following Ilitek ILI9163 panels:
	  * NHD-1.8-128160EF 128x160 TFT

	  If M is selected the module will be called ili9163.

config TINYDRM_ILI9225
	tristate "DRM support for ILI9225 display panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	help
	  DRM driver for the following Ilitek ILI9225 panels:
	  * No-name 2.2" color screen module

	  If M is selected the module will be called ili9225.

config TINYDRM_ILI9341
	tristate "DRM support for ILI9341 display panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	help
	  DRM driver for the following Ilitek ILI9341 panels:
	  * YX240QV29-T 2.4" 240x320 TFT (Adafruit 2.4")

	  If M is selected the module will be called ili9341.

config TINYDRM_ILI9486
	tristate "DRM support for ILI9486 display panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	help
	  DRM driver for the following Ilitek ILI9486 panels:
	  * PISCREEN 3.5" 320x480 TFT (Ozzmaker 3.5")
	  * RPILCD 3.5" 320x480 TFT (Waveshare 3.5")

	  If M is selected the module will be called ili9486.

config TINYDRM_MI0283QT
	tristate "DRM support for MI0283QT"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	help
	  DRM driver for the Multi-Inno MI0283QT display panel
	  If M is selected the module will be called mi0283qt.

config TINYDRM_REPAPER
	tristate "DRM support for Pervasive Displays RePaper panels (V231)"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	help
	  DRM driver for the following Pervasive Displays panels:
	  1.44" TFT EPD Panel (E1144CS021)
	  1.90" TFT EPD Panel (E1190CS021)
	  2.00" TFT EPD Panel (E2200CS021)
	  2.71" TFT EPD Panel (E2271CS021)

	  If M is selected the module will be called repaper.

config TINYDRM_SHARP_MEMORY
	tristate "DRM support for Sharp Memory LCD panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_GEM_DMA_HELPER
	select DRM_KMS_HELPER
	help
	  DRM Driver for the following Sharp Memory Panels:
	  * 1.00" Sharp Memory LCD (LS010B7DH04)
	  * 1.10" Sharp Memory LCD (LS011B7DH03)
	  * 1.20" Sharp Memory LCD (LS012B7DD01)
	  * 1.28" Sharp Memory LCD (LS013B7DH03)
	  * 1.26" Sharp Memory LCD (LS013B7DH05)
	  * 1.80" Sharp Memory LCD (LS018B7DH02)
	  * 2.70" Sharp Memory LCD (LS027B7DH01)
	  * 2.70" Sharp Memory LCD (LS027B7DH01A)
	  * 3.20" Sharp Memory LCD (LS032B7DD02)
	  * 4.40" Sharp Memory LCD (LS044Q7DH01)

	  If M is selected the module will be called sharp_memory.

config TINYDRM_ST7586
	tristate "DRM support for Sitronix ST7586 display panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	help
	  DRM driver for the following Sitronix ST7586 panels:
	  * LEGO MINDSTORMS EV3

	  If M is selected the module will be called st7586.

config TINYDRM_ST7735R
	tristate "DRM support for Sitronix ST7715R/ST7735R display panels"
	depends on DRM && SPI
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_DMA_HELPER
	select DRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	help
	  DRM driver for Sitronix ST7715R/ST7735R with one of the following
	  LCDs:
	  * Jianda JD-T18003-T01 1.8" 128x160 TFT
	  * Okaya RH128128T 1.44" 128x128 TFT

	  If M is selected the module will be called st7735r.
