# SPDX-License-Identifier: GPL-2.0-only
menuconfig DRM_TINYDRM
	tristate "Support for simple displays"
	depends on DRM
	select DRM_KMS_HELPER
	select DRM_KMS_CMA_HELPER
	help
	  Choose this option if you have a tinydrm supported display.
	  If M is selected the module will be called tinydrm.

config TINYDRM_MIPI_DBI
	tristate

config TINYDRM_HX8357D
	tristate "DRM support for HX8357D display panels"
	depends on DRM_TINYDRM && SPI
	select TINYDRM_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_TINYDRM && SPI
	select TINYDRM_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_TINYDRM && SPI
	select TINYDRM_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_MI0283QT
	tristate "DRM support for MI0283QT"
	depends on DRM_TINYDRM && SPI
	select TINYDRM_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_TINYDRM && SPI
	depends on THERMAL || !THERMAL
	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_TINYDRM && SPI
	select TINYDRM_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 ST7735R display panels"
	depends on DRM_TINYDRM && SPI
	select TINYDRM_MIPI_DBI
	select BACKLIGHT_CLASS_DEVICE
	help
	  DRM driver Sitronix ST7735R with one of the following LCDs:
	  * JD-T18003-T01 1.8" 128x160 TFT

	  If M is selected the module will be called st7735r.
