#
# 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
	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 && GENERIC_GPIO
	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 && GENERIC_GPIO
	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_ILI9320
	tristate
	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 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.

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_SAM9261EK || MACH_SAM9G10EK || MACH_SAM9263EK
	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_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_PROGEAR
	tristate "Frontpath ProGear Backlight Driver"
	depends on PCI && X86
	help
	  If you have a Frontpath ProGear say Y to enable the
	  backlight 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 HAVE_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_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_MBP_NVIDIA
       tristate "MacBook Pro Nvidia Backlight Driver"
       depends on X86
       help
         If you have an Apple Macbook Pro with Nvidia graphics hardware 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_ADX
	tristate "Avionic Design Xanthos Backlight Driver"
	depends on ARCH_PXA_ADX
	default y
	help
	  Say Y to enable the backlight driver on Avionic Design Xanthos-based
	  boards.

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_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.

endif # BACKLIGHT_CLASS_DEVICE

endif # BACKLIGHT_LCD_SUPPORT
