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

config DRM_APPLETBDRM
	tristate "DRM support for Apple Touch Bars"
	depends on DRM && USB && MMU
	depends on X86 || COMPILE_TEST
	select DRM_GEM_SHMEM_HELPER
	select DRM_KMS_HELPER
	help
	  Say Y here if you want support for the display of Touch Bars on x86
	  MacBook Pros.

	  To compile this driver as a module, choose M here: the
	  module will be called appletbdrm.

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