# 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_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 and compatible, you should also select CONFIG_X86_SYSFB 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.
