# SPDX-License-Identifier: GPL-2.0-only
#
# Backlight & LCD drivers configuration
#

menu "Backlight & LCD device support"

#
# LCD
#
config LCD_CLASS_DEVICE
	tristate "Lowlevel LCD controls"
	help
	  This framework adds support for low-level control of LCD.
	  Some framebuffer devices connect to platform-specific LCD modules
	  in order to have a platform-specific way to control the flat panel
	  (contrast and applying power to the LCD (not to the backlight!)).

	  To have support for your specific LCD panel you will have to
	  select the proper drivers which depend on this option.

if LCD_CLASS_DEVICE

config LCD_CORGI
	tristate "LCD Panel support for SHARP corgi/spitz model"
	depends on SPI_MASTER && PXA_SHARPSL && BACKLIGHT_CLASS_DEVICE
	help
	  Say y here to support the LCD panels usually found on SHARP
	  corgi (C7x0) and spitz (Cxx00) models.

config LCD_L4F00242T03
	tristate "Epson L4F00242T03 LCD"
	depends on SPI_MASTER
	depends on GPIOLIB || COMPILE_TEST
	help
	  SPI driver for Epson L4F00242T03. This provides basic support
	  for init and powering the LCD up/down through a sysfs interface.

config LCD_LMS283GF05
	tristate "Samsung LMS283GF05 LCD"
	depends on SPI_MASTER
	depends on GPIOLIB || COMPILE_TEST
	help
	  SPI driver for Samsung LMS283GF05. This provides basic support
	  for powering the LCD up/down through a sysfs interface.

config LCD_LTV350QV
	tristate "Samsung LTV350QV LCD Panel"
	depends on SPI_MASTER
	help
	  If you have a Samsung LTV350QV LCD panel, say y to include a
	  power control driver for it.  The panel starts up in power
	  off state, so you need this driver in order to see any
	  output.

	  The LTV350QV panel is present on all ATSTK1000 boards.

config LCD_ILI922X
	tristate "ILI Technology ILI9221/ILI9222 support"
	depends on SPI
	help
	  If you have a panel based on the ILI9221/9222 controller
	  chip then say y to include a driver for it.

config LCD_ILI9320
	tristate "ILI Technology ILI9320 controller support"
	depends on SPI
	help
	  If you have a panel based on the ILI9320 controller chip
	  then say y to include a power driver for it.

config LCD_TDO24M
	tristate "Toppoly TDO24M and TDO35S LCD Panels support"
	depends on SPI_MASTER
	help
	  If you have a Toppoly TDO24M/TDO35S series LCD panel, say y here to
	  include the support for it.

config LCD_VGG2432A4
	tristate "VGG2432A4 LCM device support"
	depends on SPI_MASTER
	select LCD_ILI9320
	help
	  If you have a VGG2432A4 panel based on the ILI9320 controller chip
	  then say y to include a power driver for it.

config LCD_PLATFORM
	tristate "Platform LCD controls"
	help
	  This driver provides a platform-device registered LCD power
	  control interface.

config LCD_HP700
	tristate "HP Jornada 700 series LCD Driver"
	depends on SA1100_JORNADA720_SSP && !PREEMPTION
	default y
	help
	  If you have an HP Jornada 700 series handheld (710/720/728)
	  say Y to enable LCD control driver.

config LCD_AMS369FG06
	tristate "AMS369FG06 AMOLED LCD Driver"
	depends on SPI && BACKLIGHT_CLASS_DEVICE
	default n
	help
	  If you have an AMS369FG06 AMOLED Panel, say Y to enable its
	  LCD control driver.

config LCD_LMS501KF03
	tristate "LMS501KF03 LCD Driver"
	depends on SPI
	default n
	help
	  If you have an LMS501KF03 LCD Panel, say Y to enable its
	  LCD control driver.

config LCD_HX8357
	tristate "Himax HX-8357 LCD Driver"
	depends on SPI
	help
	  If you have a HX-8357 LCD panel, say Y to enable its LCD control
	  driver.

config LCD_OTM3225A
	tristate "ORISE Technology OTM3225A support"
	depends on SPI
	help
	  If you have a panel based on the OTM3225A controller
	  chip then say y to include a driver for it.

endif # LCD_CLASS_DEVICE

#
# Backlight
#
config BACKLIGHT_CLASS_DEVICE
	tristate "Lowlevel Backlight controls"
	help
	  This framework adds support for low-level control of the LCD
	  backlight. This includes support for brightness and power.

	  To have support for your specific LCD panel you will have to
	  select the proper drivers which depend on this option.

if BACKLIGHT_CLASS_DEVICE

config BACKLIGHT_ATMEL_LCDC
	bool "Atmel LCDC Contrast-as-Backlight control"
	depends on FB_ATMEL
	help
	  This provides a backlight control internal to the Atmel LCDC
	  driver.  If the LCD "contrast control" on your board is wired
	  so it controls the backlight brightness, select this option to
	  export this as a PWM-based backlight control.

	  If in doubt, it's safe to enable this option; it doesn't kick
	  in unless the board's description says it's wired that way.

config BACKLIGHT_EP93XX
	tristate "Cirrus EP93xx Backlight Driver"
	depends on FB_EP93XX
	help
	  If you have a LCD backlight connected to the BRIGHT output of
	  the EP93xx, say Y here to enable this driver.

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

config BACKLIGHT_IPAQ_MICRO
	tristate "iPAQ microcontroller backlight driver"
	depends on MFD_IPAQ_MICRO
	default y
	help
	  Say y to enable the backlight driver for Compaq iPAQ handheld
	  computers. Say yes if you have one of the h3100/h3600/h3700
	  machines.

config BACKLIGHT_KTD253
	tristate "Backlight Driver for Kinetic KTD253"
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say y to enabled the backlight driver for the Kinetic KTD253
	  which is a 1-wire GPIO-controlled backlight found in some mobile
	  phones.

config BACKLIGHT_KTD2801
	tristate "Backlight Driver for Kinetic KTD2801"
	select LEDS_EXPRESSWIRE
	help
	  Say Y to enable the backlight driver for the Kinetic KTD2801 1-wire
	  GPIO-controlled backlight found in Samsung Galaxy Core Prime VE LTE.

config BACKLIGHT_KTZ8866
	tristate "Backlight Driver for Kinetic KTZ8866"
	depends on I2C
	select REGMAP_I2C
	help
		Say Y to enable the backlight driver for the Kinetic KTZ8866
		found in Xiaomi Mi Pad 5 series.

config BACKLIGHT_LM3533
	tristate "Backlight Driver for LM3533"
	depends on MFD_LM3533
	help
	  Say Y to enable the backlight driver for National Semiconductor / TI
	  LM3533 Lighting Power chips.

	  The backlights can be controlled directly, through PWM input, or by
	  the ambient-light-sensor interface. The chip supports 256 brightness
	  levels.

config BACKLIGHT_LOCOMO
	tristate "Sharp LOCOMO LCD/Backlight Driver"
	depends on SHARP_LOCOMO
	default y
	help
	  If you have a Sharp Zaurus SL-5500 (Collie) or SL-5600 (Poodle) say y to
	  enable the LCD/backlight driver.

config BACKLIGHT_OMAP1
	tristate "OMAP1 PWL-based LCD Backlight"
	depends on ARCH_OMAP1 || COMPILE_TEST
	default ARCH_OMAP1
	help
	  This driver controls the LCD backlight level and power for
	  the PWL module of OMAP1 processors.  Say Y if your board
	  uses this hardware.

config BACKLIGHT_HP680
	tristate "HP Jornada 680 Backlight Driver"
	depends on SH_HP6XX
	default y
	help
	  If you have a HP Jornada 680, say y to enable the
	  backlight driver.

config BACKLIGHT_HP700
	tristate "HP Jornada 700 series Backlight Driver"
	depends on SA1100_JORNADA720_SSP && !PREEMPTION
	default y
	help
	  If you have an HP Jornada 700 series,
	  say Y to include backlight control driver.

config BACKLIGHT_PWM
	tristate "Generic PWM based Backlight Driver"
	depends on PWM
	help
	  If you have a LCD backlight adjustable by PWM, say Y to enable
	  this driver.

config BACKLIGHT_DA903X
	tristate "Backlight Driver for DA9030/DA9034 using WLED"
	depends on PMIC_DA903X
	help
	  If you have a LCD backlight connected to the WLED output of DA9030
	  or DA9034 WLED output, say Y here to enable this driver.

config BACKLIGHT_DA9052
	tristate "Dialog DA9052/DA9053 WLED"
	depends on PMIC_DA9052
	help
	  Enable the Backlight Driver for DA9052-BC and DA9053-AA/Bx PMICs.

config BACKLIGHT_MAX8925
	tristate "Backlight driver for MAX8925"
	depends on MFD_MAX8925
	help
	  If you have a LCD backlight connected to the WLED output of MAX8925
	  WLED output, say Y here to enable this driver.

config BACKLIGHT_MT6370
	tristate "MediaTek MT6370 Backlight Driver"
	depends on MFD_MT6370
	help
	  This enables support for Mediatek MT6370 Backlight driver.
	  It's commonly used to drive the display WLED. There are 4 channels
	  inside, and each channel supports up to 30mA of current capability
	  with 2048 current steps (only for MT6370/MT6371) or 16384 current
	  steps (only for MT6372) in exponential or linear mapping curves.

	  This driver can also be built as a module. If so, the module
	  will be called "mt6370-backlight".

config BACKLIGHT_APPLE
	tristate "Apple Backlight Driver"
	depends on X86 && ACPI
	depends on ACPI_VIDEO=n || ACPI_VIDEO
	help
	  If you have an Intel-based Apple say Y to enable a driver for its
	  backlight.

config BACKLIGHT_APPLE_DWI
	tristate "Apple DWI 2-Wire Interface Backlight Driver"
	depends on ARCH_APPLE || COMPILE_TEST
	help
	  Say Y to enable the backlight driver for backlight controllers
	  attached via the Apple DWI 2-wire interface which is found in some
	  Apple iPhones, iPads and iPod touches.

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

config BACKLIGHT_QCOM_WLED
	tristate "Qualcomm PMIC WLED Driver"
	select REGMAP
	help
	  If you have the Qualcomm PMIC, say Y to enable a driver for the
	  WLED block. Currently it supports PM8941 and PMI8998.

config BACKLIGHT_RT4831
	tristate "Richtek RT4831 Backlight Driver"
	depends on MFD_RT4831
	help
	  This enables support for Richtek RT4831 Backlight driver.
	  It's commonly used to drive the display WLED. There're four channels
	  inisde, and each channel can provide up to 30mA current.

config BACKLIGHT_SAHARA
	tristate "Tabletkiosk Sahara Touch-iT Backlight Driver"
	depends on X86
	help
	  If you have a Tabletkiosk Sahara Touch-iT, say y to enable the
	  backlight driver.

config BACKLIGHT_WM831X
	tristate "WM831x PMIC Backlight Driver"
	depends on MFD_WM831X
	help
	  If you have a backlight driven by the ISINK and DCDC of a
	  WM831x PMIC say y to enable the backlight driver for it.

config BACKLIGHT_ADP5520
	tristate "Backlight Driver for ADP5520/ADP5501 using WLED"
	depends on PMIC_ADP5520
	help
	  If you have a LCD backlight connected to the BST/BL_SNK output of
	  ADP5520 or ADP5501, say Y here to enable this driver.

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

config BACKLIGHT_ADP8860
	tristate "Backlight Driver for ADP8860/ADP8861/ADP8863 using WLED"
	depends on I2C
	select NEW_LEDS
	select LEDS_CLASS
	help
	  If you have a LCD backlight connected to the ADP8860, ADP8861 or
	  ADP8863 say Y here to enable this driver.

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

config BACKLIGHT_ADP8870
	tristate "Backlight Driver for ADP8870 using WLED"
	depends on I2C
	select NEW_LEDS
	select LEDS_CLASS
	help
	  If you have a LCD backlight connected to the ADP8870,
	  say Y here to enable this driver.

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

config BACKLIGHT_88PM860X
	tristate "Backlight Driver for 88PM8606 using WLED"
	depends on MFD_88PM860X
	help
	  Say Y to enable the backlight driver for Marvell 88PM8606.

config BACKLIGHT_AAT2870
	tristate "AnalogicTech AAT2870 Backlight"
	depends on MFD_AAT2870_CORE
	help
	  If you have a AnalogicTech AAT2870 say Y to enable the
	  backlight driver.

config BACKLIGHT_LM3509
	tristate "Backlight Driver for LM3509"
	depends on I2C
	select REGMAP_I2C
	help
	  This supports TI LM3509 Backlight Driver

config BACKLIGHT_LM3630A
	tristate "Backlight Driver for LM3630A"
	depends on I2C && PWM
	select REGMAP_I2C
	help
	  This supports TI LM3630A Backlight Driver

config BACKLIGHT_LM3639
	tristate "Backlight Driver for LM3639"
	depends on I2C
	select REGMAP_I2C
	select NEW_LEDS
	select LEDS_CLASS
	help
	  This supports TI LM3639 Backlight + 1.5A Flash LED Driver

config BACKLIGHT_LP855X
	tristate "Backlight driver for TI LP855X"
	depends on I2C && PWM
	help
	  This supports TI LP8550, LP8551, LP8552, LP8553, LP8555, LP8556 and
	  LP8557 backlight driver.

config BACKLIGHT_LP8788
	tristate "Backlight driver for TI LP8788 MFD"
	depends on MFD_LP8788 && PWM
	help
	  This supports TI LP8788 backlight driver.

config BACKLIGHT_MP3309C
	tristate "Backlight Driver for MPS MP3309C"
	depends on I2C && PWM
	select REGMAP_I2C
	help
	  This supports MPS MP3309C backlight WLED driver in both PWM and
	  analog/I2C dimming modes.

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

config BACKLIGHT_PANDORA
	tristate "Backlight driver for Pandora console"
	depends on TWL4030_CORE
	help
	  If you have a Pandora console, say Y to enable the
	  backlight driver.

config BACKLIGHT_SKY81452
	tristate "Backlight driver for SKY81452"
	depends on MFD_SKY81452
	help
	  If you have a Skyworks SKY81452, say Y to enable the
	  backlight driver.

	  To compile this driver as a module, choose M here: the module will
	  be called sky81452-backlight

config BACKLIGHT_TPS65217
	tristate "TPS65217 Backlight"
	depends on MFD_TPS65217
	help
	  If you have a Texas Instruments TPS65217 say Y to enable the
	  backlight driver.

config BACKLIGHT_AS3711
	tristate "AS3711 Backlight"
	depends on MFD_AS3711
	help
	  If you have an Austrian Microsystems AS3711 say Y to enable the
	  backlight driver.

config BACKLIGHT_GPIO
	tristate "Generic GPIO based Backlight Driver"
	depends on GPIOLIB || COMPILE_TEST
	help
	  If you have a LCD backlight adjustable by GPIO, say Y to enable
	  this driver.

config BACKLIGHT_LV5207LP
	tristate "Sanyo LV5207LP Backlight"
	depends on I2C
	help
	  If you have a Sanyo LV5207LP say Y to enable the backlight driver.

config BACKLIGHT_BD6107
	tristate "Rohm BD6107 Backlight"
	depends on I2C
	help
	  If you have a Rohm BD6107 say Y to enable the backlight driver.

config BACKLIGHT_ARCXCNN
	tristate "Backlight driver for the Arctic Sands ARCxCnnnn family"
	depends on I2C
	help
	  If you have an ARCxCnnnn family backlight say Y to enable
	  the backlight driver.

config BACKLIGHT_RAVE_SP
	tristate "RAVE SP Backlight driver"
	depends on RAVE_SP_CORE
	help
	  Support for backlight control on RAVE SP device.

config BACKLIGHT_LED
	tristate "Generic LED based Backlight Driver"
	depends on LEDS_CLASS && OF
	help
	  If you have a LCD backlight adjustable by LED class driver, say Y
	  to enable this driver.

endif # BACKLIGHT_CLASS_DEVICE

endmenu
