# 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 DRM_PIXPAPER
        tristate "DRM support for PIXPAPER display panels"
        depends on DRM && SPI
        depends on MMU
        select DRM_CLIENT_SELECTION
        select DRM_GEM_SHMEM_HELPER
        select DRM_KMS_HELPER
        help
	  DRM driver for the Mayqueen Pixpaper e-ink display panel.

	  This driver supports small e-paper displays connected over SPI,
	  with a resolution of 122x250 and XRGB8888 framebuffer format.
	  It is intended for low-power embedded applications.

	  If M is selected, the module will be built as pixpaper.ko.

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.
