# SPDX-License-Identifier: GPL-2.0-only
menuconfig 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.

if LEDS_TRIGGERS

config LEDS_TRIGGER_TIMER
	tristate "LED Timer Trigger"
	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/leds-class.rst.

	  If unsure, say Y.

config LEDS_TRIGGER_ONESHOT
	tristate "LED One-shot Trigger"
	help
	  This allows LEDs to blink in one-shot pulses with parameters
	  controlled via sysfs.  It's useful to notify the user on
	  sporadic events, when there are no clear begin and end trap points,
	  or on dense events, where this blinks the LED at constant rate if
	  rearmed continuously.

	  It also shows how to use the led_blink_set_oneshot() function.

	  If unsure, say Y.

config LEDS_TRIGGER_DISK
	bool "LED Disk Trigger"
	depends on ATA
	help
	  This allows LEDs to be controlled by disk activity.
	  If unsure, say Y.

config LEDS_TRIGGER_MTD
	bool "LED MTD (NAND/NOR) Trigger"
	depends on MTD
	help
	  This allows LEDs to be controlled by MTD activity.
	  If unsure, say N.

config LEDS_TRIGGER_HEARTBEAT
	tristate "LED Heartbeat Trigger"
	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"
	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_CPU
	bool "LED CPU Trigger"
	depends on !PREEMPT_RT
	help
	  This allows LEDs to be controlled by active CPUs. This shows
	  the active CPUs across an array of LEDs so you can see which
	  CPUs are active on the system at any given moment.

	  If unsure, say N.

config LEDS_TRIGGER_ACTIVITY
	tristate "LED activity Trigger"
	help
	  This allows LEDs to be controlled by an immediate CPU usage.
	  The flash frequency and duty cycle varies from faint flashes to
	  intense brightness depending on the instant CPU load.
	  If unsure, say N.

config LEDS_TRIGGER_GPIO
	tristate "LED GPIO Trigger"
	depends on GPIOLIB || COMPILE_TEST
	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. Triggers are defined as device properties.

	  If unsure, say N.

config LEDS_TRIGGER_DEFAULT_ON
	tristate "LED Default ON Trigger"
	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

config LEDS_TRIGGER_TRANSIENT
	tristate "LED Transient Trigger"
	help
	  This allows one time activation of a transient state on
	  GPIO/PWM based hardware.
	  If unsure, say Y.

config LEDS_TRIGGER_CAMERA
	tristate "LED Camera Flash/Torch Trigger"
	help
	  This allows LEDs to be controlled as a camera flash/torch device.
	  This enables direct flash/torch on/off by the driver, kernel space.
	  If unsure, say Y.

config LEDS_TRIGGER_PANIC
	bool "LED Panic Trigger"
	help
	  This allows LEDs to be configured to blink on a kernel panic.
	  Enabling this option will allow to mark certain LEDs as panic indicators,
	  allowing to blink them on a kernel panic, even if they are set to
	  a different trigger.
	  If unsure, say Y.

config LEDS_TRIGGER_NETDEV
	tristate "LED Netdev Trigger"
	depends on NET
	help
	  This allows LEDs to be controlled by network device activity.
	  If unsure, say Y.

config LEDS_TRIGGER_PATTERN
	tristate "LED Pattern Trigger"
	help
	  This allows LEDs to be controlled by a software or hardware pattern
	  which is a series of tuples, of brightness and duration (ms).
	  If unsure, say N

config LEDS_TRIGGER_AUDIO
	tristate "Audio Mute LED Trigger"
	help
	  This allows LEDs to be controlled by audio drivers for following
	  the audio mute and mic-mute changes.
	  If unsure, say N

config LEDS_TRIGGER_TTY
	tristate "LED Trigger for TTY devices"
	depends on TTY
	help
	  This allows LEDs to be controlled by activity on ttys which includes
	  serial devices like /dev/ttyS0.

	  When build as a module this driver will be called ledtrig-tty.

endif # LEDS_TRIGGERS
