#
# Backlight & LCD drivers configuration
#

menuconfig BACKLIGHT_LCD_SUPPORT
	bool "Backlight & LCD device support"
	help
	  Enable this to be able to choose the drivers for controlling the
	  backlight and the LCD panel on some platforms, for example on PDAs.

if BACKLIGHT_LCD_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 && GPIOLIB
	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 && GPIOLIB
	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_S6E63M0
	tristate "S6E63M0 AMOLED LCD Driver"
	depends on SPI && BACKLIGHT_CLASS_DEVICE
	default n
	help
	  If you have an S6E63M0 LCD Panel, say Y to enable its
	  LCD control driver.

config LCD_LD9040
	tristate "LD9040 AMOLED LCD Driver"
	depends on SPI && BACKLIGHT_CLASS_DEVICE
	default n
	help
	  If you have an LD9040 Panel, say Y to enable its
	  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.

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
	default y if MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK
	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_ATMEL_PWM
	tristate "Atmel PWM backlight control"
	depends on ATMEL_PWM
	help
	  Say Y here if you want to use the PWM peripheral in Atmel AT91 and
	  AVR32 devices. This driver will need additional platform data to know
	  which PWM instance to use and how to configure it.

	  To compile this driver as a module, choose M here: the module will be
	  called atmel-pwm-bl.

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_LM3533
	tristate "Backlight Driver for LM3533"
	depends on BACKLIGHT_CLASS_DEVICE
	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_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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && I2C && PWM
	select REGMAP_I2C
	help
	  This supports TI LM3630A Backlight Driver

config BACKLIGHT_LM3639
	tristate "Backlight Driver for LM3639"
	depends on BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && MFD_LP8788 && PWM
	help
	  This supports TI LP8788 backlight driver.

config BACKLIGHT_OT200
	tristate "Backlight driver for ot200 visualisation device"
	depends on BACKLIGHT_CLASS_DEVICE && 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_TPS65217
	tristate "TPS65217 Backlight"
	depends on BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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
	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.

endif # BACKLIGHT_CLASS_DEVICE

endif # BACKLIGHT_LCD_SUPPORT
