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

#
# LCD
#
config LCD_CLASS_DEVICE
        tristate "Lowlevel LCD controls"
	depends on BACKLIGHT_LCD_SUPPORT
	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.

config LCD_CORGI
	tristate "LCD Panel support for SHARP corgi/spitz model"
	depends on LCD_CLASS_DEVICE && 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_LTV350QV
	tristate "Samsung LTV350QV LCD Panel"
	depends on LCD_CLASS_DEVICE && SPI_MASTER
	default n
	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
	depends on LCD_CLASS_DEVICE && BACKLIGHT_LCD_SUPPORT
	default n
	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 LCD Panels support"
	depends on LCD_CLASS_DEVICE && SPI_MASTER
	default n
	help
	  If you have a Toppoly TDO24M series LCD panel, say y here to
	  include the support for it.

config LCD_VGG2432A4
	tristate "VGG2432A4 LCM device support"
	depends on BACKLIGHT_LCD_SUPPORT && LCD_CLASS_DEVICE && SPI_MASTER
	select LCD_ILI9320
	default n
	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"
	depends on LCD_CLASS_DEVICE
	help
	  This driver provides a platform-device registered LCD power
	  control interface.

config LCD_TOSA
	tristate "Sharp SL-6000 LCD Driver"
	depends on LCD_CLASS_DEVICE && SPI
	depends on MACH_TOSA
	default n
	help
	  If you have an Sharp SL-6000 Zaurus say Y to enable a driver
	  for its LCD.

#
# Backlight
#
config BACKLIGHT_CLASS_DEVICE
        tristate "Lowlevel Backlight controls"
	depends on BACKLIGHT_LCD_SUPPORT
	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.

config BACKLIGHT_ATMEL_LCDC
	bool "Atmel LCDC Contrast-as-Backlight control"
	depends on BACKLIGHT_CLASS_DEVICE && FB_ATMEL
	default y if MACH_SAM9261EK || 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 BACKLIGHT_CLASS_DEVICE && ATMEL_PWM
	default n
	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_CORGI
	tristate "Generic (aka Sharp Corgi) Backlight Driver (DEPRECATED)"
	depends on BACKLIGHT_CLASS_DEVICE
	default n
	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. Most users can say n.

	  Note: this driver is marked as deprecated, try enable SPI and
	  use the new corgi_lcd driver with integrated backlight control

config BACKLIGHT_LOCOMO
	tristate "Sharp LOCOMO LCD/Backlight Driver"
	depends on BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && SH_HP6XX
	default y
	help
	  If you have a HP Jornada 680, say y to enable the
	  backlight driver.

config BACKLIGHT_PROGEAR
	tristate "Frontpath ProGear Backlight Driver"
	depends on BACKLIGHT_CLASS_DEVICE && PCI && X86
	default n
	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 BACKLIGHT_CLASS_DEVICE && LCD_CLASS_DEVICE && PCI && X86 && FB_LE80578
	default n
	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 BACKLIGHT_CLASS_DEVICE && 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 BACKLIGHT_CLASS_DEVICE && 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_MBP_NVIDIA
       tristate "MacBook Pro Nvidia Backlight Driver"
       depends on BACKLIGHT_CLASS_DEVICE && X86
       default n
       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 BACKLIGHT_CLASS_DEVICE && I2C
	depends on MACH_TOSA && LCD_TOSA
	default n
	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 BACKLIGHT_CLASS_DEVICE && X86
	default n
	help
	  If you have a Tabletkiosk Sahara Touch-iT, say y to enable the
	  backlight driver.
