# 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_TOSA
	tristate "Sharp SL-6000 LCD Driver"
	depends on I2C && SPI && MACH_TOSA
	help
	  If you have an Sharp SL-6000 Zaurus say Y to enable a driver
	  for its LCD.

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_GENERIC
	tristate "Generic (aka Sharp Corgi) Backlight Driver"
	default y
	help
	  Say y to enable the generic platform backlight driver previously
	  known as the Corgi backlight driver. If you have a Sharp Zaurus
	  SL-C7xx, SL-Cxx00 or SL-6000x say y.

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_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
	default y
	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_CARILLO_RANCH
	tristate "Intel Carillo Ranch Backlight Driver"
	depends on LCD_CLASS_DEVICE && PCI && X86 && FB_LE80578
	help
	  If you have a Intel LE80578 (Carillo Ranch) say Y to enable the
	  backlight 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_APPLE
       tristate "Apple Backlight Driver"
       depends on X86 && ACPI
       help
         If you have an Intel-based Apple say Y to enable a driver for its
	 backlight.

config BACKLIGHT_TOSA
	tristate "Sharp SL-6000 Backlight Driver"
	depends on I2C && MACH_TOSA && LCD_TOSA
	help
	  If you have an Sharp SL-6000 Zaurus say Y to enable a driver
	  for its backlight

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_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_PCF50633
	tristate "Backlight driver for NXP PCF50633 MFD"
	depends on MFD_PCF50633
	help
	  If you have a backlight driven by a NXP PCF50633 MFD, say Y here to
	  enable its driver.

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_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_OT200
	tristate "Backlight driver for ot200 visualisation device"
	depends on CS5535_MFGPT && GPIO_CS5535
	help
	  To compile this driver as a module, choose M here: the module will be
	  called ot200_bl.

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.

endif # BACKLIGHT_CLASS_DEVICE

endmenu
