menuconfig NEW_LEDS
	bool "LED Support"
	help
	  Say Y to enable Linux LED support.  This allows control of supported
	  LEDs from both userspace and optionally, by kernel events (triggers).

	  This is not related to standard keyboard LEDs which are controlled
	  via the input system.

if NEW_LEDS

config LEDS_CLASS
	tristate "LED Class Support"
	help
	  This option enables the led sysfs class in /sys/class/leds.  You'll
	  need this to do anything useful with LEDs.  If unsure, say N.

comment "LED drivers"

config LEDS_ATMEL_PWM
	tristate "LED Support using Atmel PWM outputs"
	depends on LEDS_CLASS && ATMEL_PWM
	help
	  This option enables support for LEDs driven using outputs
	  of the dedicated PWM controller found on newer Atmel SOCs.

config LEDS_LOCOMO
	tristate "LED Support for Locomo device"
	depends on LEDS_CLASS && SHARP_LOCOMO
	help
	  This option enables support for the LEDs on Sharp Locomo.
	  Zaurus models SL-5500 and SL-5600.

config LEDS_S3C24XX
	tristate "LED Support for Samsung S3C24XX GPIO LEDs"
	depends on LEDS_CLASS && ARCH_S3C2410
	help
	  This option enables support for LEDs connected to GPIO lines
	  on Samsung S3C24XX series CPUs, such as the S3C2410 and S3C2440.

config LEDS_AMS_DELTA
	tristate "LED Support for the Amstrad Delta (E3)"
	depends on LEDS_CLASS && MACH_AMS_DELTA
	help
	  This option enables support for the LEDs on Amstrad Delta (E3).

config LEDS_NET48XX
	tristate "LED Support for Soekris net48xx series Error LED"
	depends on LEDS_CLASS && SCx200_GPIO
	help
	  This option enables support for the Soekris net4801 and net4826 error
	  LED.

config LEDS_FSG
	tristate "LED Support for the Freecom FSG-3"
	depends on LEDS_CLASS && MACH_FSG
	help
	  This option enables support for the LEDs on the Freecom FSG-3.

config LEDS_WRAP
	tristate "LED Support for the WRAP series LEDs"
	depends on LEDS_CLASS && SCx200_GPIO
	help
	  This option enables support for the PCEngines WRAP programmable LEDs.

config LEDS_H1940
	tristate "LED Support for iPAQ H1940 device"
	depends on LEDS_CLASS && ARCH_H1940
	help
	  This option enables support for the LEDs on the h1940.

config LEDS_COBALT_QUBE
	tristate "LED Support for the Cobalt Qube series front LED"
	depends on LEDS_CLASS && MIPS_COBALT
	help
	  This option enables support for the front LED on Cobalt Qube series

config LEDS_COBALT_RAQ
	bool "LED Support for the Cobalt Raq series"
	depends on LEDS_CLASS && MIPS_COBALT
	select LEDS_TRIGGERS
	help
	  This option enables support for the Cobalt Raq series LEDs.

config LEDS_SUNFIRE
	tristate "LED support for SunFire servers."
	depends on LEDS_CLASS && SPARC64
	select LEDS_TRIGGERS
	help
	  This option enables support for the Left, Middle, and Right
	  LEDs on the I/O and CPU boards of SunFire UltraSPARC servers.

config LEDS_HP6XX
	tristate "LED Support for the HP Jornada 6xx"
	depends on LEDS_CLASS && SH_HP6XX
	help
	  This option enables led support for the handheld
	  HP Jornada 620/660/680/690.

config LEDS_PCA9532
	tristate "LED driver for PCA9532 dimmer"
	depends on LEDS_CLASS && I2C && INPUT && EXPERIMENTAL
	help
	  This option enables support for NXP pca9532
	  led controller. It is generally only usefull
	  as a platform driver

config LEDS_GPIO
	tristate "LED Support for GPIO connected LEDs"
	depends on LEDS_CLASS && GENERIC_GPIO
	help
	  This option enables support for the LEDs connected to GPIO
	  outputs. To be useful the particular board must have LEDs
	  and they must be connected to the GPIO lines.

config LEDS_HP_DISK
	tristate "LED Support for disk protection LED on HP notebooks"
	depends on LEDS_CLASS && ACPI
	help
	  This option enable support for disk protection LED, found on
	  newer HP notebooks.

config LEDS_CLEVO_MAIL
	tristate "Mail LED on Clevo notebook (EXPERIMENTAL)"
	depends on LEDS_CLASS && X86 && SERIO_I8042 && DMI && EXPERIMENTAL
	help
	  This driver makes the mail LED accessible from userspace
	  programs through the leds subsystem. This LED have three
	  known mode: off, blink at 0.5Hz and blink at 1Hz.

	  The driver supports two kinds of interface: using ledtrig-timer
	  or through /sys/class/leds/clevo::mail/brightness. As this LED
	  cannot change it's brightness it blinks instead. The brightness
	  value 0 means off, 1..127 means blink at 0.5Hz and 128..255 means
	  blink at 1Hz.

	  This module can drive the mail LED for the following notebooks:

	  	Clevo D400P
	  	Clevo D410J
	  	Clevo D410V
	  	Clevo D400V/D470V (not tested, but might work)
	  	Clevo M540N
	  	Clevo M5x0N (not tested, but might work)
	  	Positivo Mobile (Clevo M5x0V)

	  If your model is not listed here you can try the "nodetect"
	  module paramter.

	  To compile this driver as a module, choose M here: the
	  module will be called leds-clevo-mail.

config LEDS_PCA955X
	tristate "LED Support for PCA955x I2C chips"
	depends on LEDS_CLASS && I2C
	help
	  This option enables support for LEDs connected to PCA955x
	  LED driver chips accessed via the I2C bus.  Supported
	  devices include PCA9550, PCA9551, PCA9552, and PCA9553.

config LEDS_DA903X
	tristate "LED Support for DA9030/DA9034 PMIC"
	depends on LEDS_CLASS && PMIC_DA903X
	help
	  This option enables support for on-chip LED drivers found
	  on Dialog Semiconductor DA9030/DA9034 PMICs.

comment "LED Triggers"

config LEDS_TRIGGERS
	bool "LED Trigger support"
	help
	  This option enables trigger support for the leds class.
	  These triggers allow kernel events to drive the LEDs and can
	  be configured via sysfs. If unsure, say Y.

config LEDS_TRIGGER_TIMER
	tristate "LED Timer Trigger"
	depends on LEDS_TRIGGERS
	help
	  This allows LEDs to be controlled by a programmable timer
	  via sysfs. Some LED hardware can be programmed to start
	  blinking the LED without any further software interaction.
	  For more details read Documentation/leds-class.txt.

	  If unsure, say Y.

config LEDS_TRIGGER_IDE_DISK
	bool "LED IDE Disk Trigger"
	depends on LEDS_TRIGGERS && IDE_GD_ATA
	help
	  This allows LEDs to be controlled by IDE disk activity.
	  If unsure, say Y.

config LEDS_TRIGGER_HEARTBEAT
	tristate "LED Heartbeat Trigger"
	depends on LEDS_TRIGGERS
	help
	  This allows LEDs to be controlled by a CPU load average.
	  The flash frequency is a hyperbolic function of the 1-minute
	  load average.
	  If unsure, say Y.

config LEDS_TRIGGER_BACKLIGHT
	tristate "LED backlight Trigger"
	depends on LEDS_TRIGGERS
	help
	  This allows LEDs to be controlled as a backlight device: they
	  turn off and on when the display is blanked and unblanked.

	  If unsure, say N.

config LEDS_TRIGGER_DEFAULT_ON
	tristate "LED Default ON Trigger"
	depends on LEDS_TRIGGERS
	help
	  This allows LEDs to be initialised in the ON state.
	  If unsure, say Y.

endif # NEW_LEDS
