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

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 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.
