#
# 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  and TDO35S LCD Panels support"
	depends on LCD_CLASS_DEVICE && SPI_MASTER
	default n
	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 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.

config LCD_HP700
	tristate "HP Jornada 700 series LCD Driver"
	depends on LCD_CLASS_DEVICE
	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.

#
# 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_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 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_GENERIC
	tristate "Generic (aka Sharp Corgi) Backlight Driver"
	depends on BACKLIGHT_CLASS_DEVICE
	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 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_HP700
	tristate "HP Jornada 700 series Backlight Driver"
	depends on BACKLIGHT_CLASS_DEVICE
	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 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.
