config LEDS_GPIO_REGISTER
	bool
	help
	  This option provides the function gpio_led_register_device.
	  As this function is used by arch code it must not be compiled as a
	  module.

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
	bool "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_88PM860X
	tristate "LED Support for Marvell 88PM860x PMIC"
	depends on LEDS_CLASS
	depends on MFD_88PM860X
	help
	  This option enables support for on-chip LED drivers found on Marvell
	  Semiconductor 88PM8606 PMIC.

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

config LEDS_LM3530
	tristate "LCD Backlight driver for LM3530"
	depends on LEDS_CLASS
	depends on I2C
	help
	  This option enables support for the LCD backlight using
	  LM3530 ambient light sensor chip. This ALS chip can be
	  controlled manually or using PWM input or using ambient
	  light automatically.

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

config LEDS_MIKROTIK_RB532
	tristate "LED Support for Mikrotik Routerboard 532"
	depends on LEDS_CLASS
	depends on MIKROTIK_RB532
	help
	  This option enables support for the so called "User LED" of
	  Mikrotik's Routerboard 532.

config LEDS_S3C24XX
	tristate "LED Support for Samsung S3C24XX GPIO LEDs"
	depends on LEDS_CLASS
	depends on 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
	depends on 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
	depends on SCx200_GPIO
	help
	  This option enables support for the Soekris net4801 and net4826 error
	  LED.

config LEDS_NET5501
	tristate "LED Support for Soekris net5501 series Error LED"
	depends on LEDS_TRIGGERS
	depends on X86 && LEDS_GPIO_PLATFORM && GPIO_CS5535
	select LEDS_TRIGGER_DEFAULT_ON
	default n
	help
	  Add support for the Soekris net5501 board (detection, error led
	  and GPIO).

config LEDS_FSG
	tristate "LED Support for the Freecom FSG-3"
	depends on LEDS_CLASS
	depends on 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
	depends on SCx200_GPIO
	help
	  This option enables support for the PCEngines WRAP programmable LEDs.

config LEDS_ALIX2
	tristate "LED Support for ALIX.2 and ALIX.3 series"
	depends on LEDS_CLASS
	depends on X86 && !GPIO_CS5535 && !CS5535_GPIO
	help
	  This option enables support for the PCEngines ALIX.2 and ALIX.3 LEDs.
	  You have to set leds-alix2.force=1 for boards with Award BIOS.

config LEDS_COBALT_QUBE
	tristate "LED Support for the Cobalt Qube series front LED"
	depends on LEDS_CLASS
	depends on 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=y && 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
	depends on 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
	depends on 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
	depends on I2C && INPUT && EXPERIMENTAL
	help
	  This option enables support for NXP pca9532
	  LED controller. It is generally only useful
	  as a platform driver

config LEDS_PCA9532_GPIO
	bool "Enable GPIO support for PCA9532"
	depends on LEDS_PCA9532
	depends on GPIOLIB
	help
	  Allow unused pins on PCA9532 to be used as gpio.

	  To use a pin as gpio pca9532_type in pca9532_platform data needs to
	  set to PCA9532_TYPE_GPIO.

config LEDS_GPIO
	tristate "LED Support for GPIO connected LEDs"
	depends on LEDS_CLASS
	depends on 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.  The LEDs must be
	  defined as platform devices and/or OpenFirmware platform devices.
	  The code to use these bindings can be selected below.

config LEDS_GPIO_PLATFORM
	bool "Platform device bindings for GPIO LEDs"
	depends on LEDS_GPIO
	default y
	help
	  Let the leds-gpio driver drive LEDs which have been defined as
	  platform devices.  If you don't know what this means, say yes.

config LEDS_GPIO_OF
	bool "OpenFirmware platform device bindings for GPIO LEDs"
	depends on LEDS_GPIO && OF_DEVICE
	default y
	help
	  Let the leds-gpio driver drive LEDs which have been defined as
	  of_platform devices.  For instance, LEDs which are listed in a "dts"
	  file.

config LEDS_LP3944
	tristate "LED Support for N.S. LP3944 (Fun Light) I2C chip"
	depends on LEDS_CLASS
	depends on I2C
	help
	  This option enables support for LEDs connected to the National
	  Semiconductor LP3944 Lighting Management Unit (LMU) also known as
	  Fun Light Chip.

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

config LEDS_LP5521
	tristate "LED Support for N.S. LP5521 LED driver chip"
	depends on LEDS_CLASS && I2C
	help
	  If you say yes here you get support for the National Semiconductor
	  LP5521 LED driver. It is 3 channel chip with programmable engines.
	  Driver provides direct control via LED class and interface for
	  programming the engines.

config LEDS_LP5523
	tristate "LED Support for N.S. LP5523 LED driver chip"
	depends on LEDS_CLASS && I2C
	help
	  If you say yes here you get support for the National Semiconductor
	  LP5523 LED driver. It is 9 channel chip with programmable engines.
	  Driver provides direct control via LED class and interface for
	  programming the engines.

config LEDS_CLEVO_MAIL
	tristate "Mail LED on Clevo notebook"
	depends on LEDS_CLASS
	depends on X86 && SERIO_I8042 && DMI
	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 parameter.

	  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
	depends on 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_WM831X_STATUS
	tristate "LED support for status LEDs on WM831x PMICs"
	depends on LEDS_CLASS
	depends on MFD_WM831X
	help
	  This option enables support for the status LEDs of the WM831x
          series of PMICs.

config LEDS_WM8350
	tristate "LED Support for WM8350 AudioPlus PMIC"
	depends on LEDS_CLASS
	depends on MFD_WM8350
	help
	  This option enables support for LEDs driven by the Wolfson
	  Microelectronics WM8350 AudioPlus PMIC.

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

config LEDS_DAC124S085
	tristate "LED Support for DAC124S085 SPI DAC"
	depends on LEDS_CLASS
	depends on SPI
	help
	  This option enables support for DAC124S085 SPI DAC from NatSemi,
	  which can be used to control up to four LEDs.

config LEDS_PWM
	tristate "PWM driven LED Support"
	depends on LEDS_CLASS
	depends on HAVE_PWM
	help
	  This option enables support for pwm driven LEDs

config LEDS_REGULATOR
	tristate "REGULATOR driven LED support"
	depends on LEDS_CLASS
	depends on REGULATOR
	help
	  This option enables support for regulator driven LEDs.

config LEDS_BD2802
	tristate "LED driver for BD2802 RGB LED"
	depends on LEDS_CLASS
	depends on I2C
	help
	  This option enables support for BD2802GU RGB LED driver chips
	  accessed via the I2C bus.

config LEDS_INTEL_SS4200
	tristate "LED driver for Intel NAS SS4200 series"
	depends on LEDS_CLASS
	depends on PCI && DMI
	help
	  This option enables support for the Intel SS4200 series of
	  Network Attached Storage servers.  You may control the hard
	  drive or power LEDs on the front panel.  Using this driver
	  can stop the front LED from blinking after startup.

config LEDS_LT3593
	tristate "LED driver for LT3593 controllers"
	depends on LEDS_CLASS
	depends on GENERIC_GPIO
	help
	  This option enables support for LEDs driven by a Linear Technology
	  LT3593 controller. This controller uses a special one-wire pulse
	  coding protocol to set the brightness.

config LEDS_ADP5520
	tristate "LED Support for ADP5520/ADP5501 PMIC"
	depends on LEDS_CLASS
	depends on PMIC_ADP5520
	help
	  This option enables support for on-chip LED drivers found
	  on Analog Devices ADP5520/ADP5501 PMICs.

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

config LEDS_DELL_NETBOOKS
	tristate "External LED on Dell Business Netbooks"
	depends on LEDS_CLASS
	depends on X86 && ACPI_WMI
	help
	  This adds support for the Latitude 2100 and similar
	  notebooks that have an external LED.

config LEDS_MC13783
	tristate "LED Support for MC13783 PMIC"
	depends on LEDS_CLASS
	depends on MFD_MC13783
	help
	  This option enable support for on-chip LED drivers found
	  on Freescale Semiconductor MC13783 PMIC.

config LEDS_NS2
	tristate "LED support for Network Space v2 GPIO LEDs"
	depends on LEDS_CLASS
	depends on MACH_NETSPACE_V2 || MACH_INETSPACE_V2 || MACH_NETSPACE_MAX_V2 || D2NET_V2
	default y
	help
	  This option enable support for the dual-GPIO LED found on the
	  Network Space v2 board (and parents). This include Internet Space v2,
	  Network Space (Max) v2 and d2 Network v2 boards.

config LEDS_NETXBIG
	tristate "LED support for Big Network series LEDs"
	depends on MACH_NET2BIG_V2 || MACH_NET5BIG_V2
	default y
	help
	  This option enable support for LEDs found on the LaCie 2Big
	  and 5Big Network v2 boards. The LEDs are wired to a CPLD and are
	  controlled through a GPIO extension bus.

config LEDS_ASIC3
	bool "LED support for the HTC ASIC3"
	depends on LEDS_CLASS
	depends on MFD_ASIC3
	default y
	help
	  This option enables support for the LEDs on the HTC ASIC3. The HTC
	  ASIC3 LED GPIOs are inputs, not outputs, thus the leds-gpio driver
	  cannot be used. This driver supports hardware blinking with an on+off
	  period from 62ms to 125s. Say Y to enable LEDs on the HP iPAQ hx4700.

config LEDS_TRIGGERS
	bool "LED Trigger support"
	depends on LEDS_CLASS
	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.

comment "LED Triggers"

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 IDE_GD_ATA
	depends on LEDS_TRIGGERS
	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_GPIO
	tristate "LED GPIO Trigger"
	depends on LEDS_TRIGGERS
	depends on GPIOLIB
	help
	  This allows LEDs to be controlled by gpio events. It's good
	  when using gpios as switches and triggering the needed LEDs
	  from there. One use case is n810's keypad LEDs that could
	  be triggered by this trigger when user slides up to show
	  keypad.

	  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.

comment "iptables trigger is under Netfilter config (LED target)"
	depends on LEDS_TRIGGERS

endif # NEW_LEDS
