# 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"
	default m
	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 && !PREEMPT
	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"
	default m
	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 && !PREEMPT
	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_PM8941_WLED
	tristate "Qualcomm PM8941 WLED Driver"
	select REGMAP
	help
	  If you have the Qualcomm PM8941, say Y to enable a driver for the
	  WLED block.

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
