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

config DRM_ARCPGU
	tristate "ARC PGU"
	depends on DRM && OF
	select DRM_KMS_CMA_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_KMS_HELPER
	select DRM_VRAM_HELPER
	select DRM_TTM
	select DRM_TTM_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_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
	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_SIMPLEDRM
	tristate "Simple framebuffer driver"
	depends on DRM
	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_KMS_HELPER
	select DRM_KMS_CMA_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_ILI9225
	tristate "DRM support for ILI9225 display panels"
	depends on DRM && SPI
	select DRM_KMS_HELPER
	select DRM_KMS_CMA_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_KMS_HELPER
	select DRM_KMS_CMA_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_KMS_HELPER
	select DRM_KMS_CMA_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_KMS_HELPER
	select DRM_KMS_CMA_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_KMS_HELPER
	select DRM_KMS_CMA_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_ST7586
	tristate "DRM support for Sitronix ST7586 display panels"
	depends on DRM && SPI
	select DRM_KMS_HELPER
	select DRM_KMS_CMA_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_KMS_HELPER
	select DRM_KMS_CMA_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.
