# SPDX-License-Identifier: GPL-2.0

if LEDS_CLASS_FLASH

config LEDS_AAT1290
	tristate "LED support for the AAT1290"
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	depends on GPIOLIB || COMPILE_TEST
	depends on OF
	depends on PINCTRL
	help
	  This option enables support for the LEDs on the AAT1290.

config LEDS_AS3645A
	tristate "AS3645A and LM3555 LED flash controllers support"
	depends on I2C
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	help
	  Enable LED flash class support for AS3645A LED flash
	  controller. V4L2 flash API is provided as well if
	  CONFIG_V4L2_FLASH_API is enabled.

config LEDS_KTD2692
	tristate "LED support for Kinetic KTD2692 flash LED controller"
	depends on OF
	depends on GPIOLIB || COMPILE_TEST
	help
	  This option enables support for Kinetic KTD2692 LED flash connected
	  through ExpressWire interface.

	  Say Y to enable this driver.

config LEDS_LM3601X
	tristate "LED support for LM3601x Chips"
	depends on LEDS_CLASS && I2C
	select REGMAP_I2C
	help
	  This option enables support for the TI LM3601x family
	  of flash, torch and indicator classes.

config LEDS_MAX77693
	tristate "LED support for MAX77693 Flash"
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	depends on MFD_MAX77693
	depends on OF
	help
	  This option enables support for the flash part of the MAX77693
	  multifunction device. It has build in control for two leds in flash
	  and torch mode.

config LEDS_MT6360
	tristate "LED Support for Mediatek MT6360 PMIC"
	depends on LEDS_CLASS && OF
	depends on LEDS_CLASS_FLASH || !LEDS_CLASS_FLASH
	depends on LEDS_CLASS_MULTICOLOR || !LEDS_CLASS_MULTICOLOR
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	depends on MFD_MT6360
	help
	  This option enables support for dual Flash LED drivers found on
	  Mediatek MT6360 PMIC.
	  Independent current sources supply for each flash LED support torch
	  and strobe mode.

config LEDS_MT6370_FLASH
	tristate "Flash LED Support for MediaTek MT6370 PMIC"
	depends on LEDS_CLASS
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	depends on MFD_MT6370
	help
	  Support 2 channels and torch/strobe mode.
	  Say Y here to enable support for
	  MT6370_FLASH_LED device.

	  This driver can also be built as a module. If so, the module
	  will be called "leds-mt6370-flash".

config LEDS_QCOM_FLASH
	tristate "LED support for flash module inside Qualcomm Technologies, Inc. PMIC"
	depends on MFD_SPMI_PMIC || COMPILE_TEST
	depends on LEDS_CLASS && OF
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	select REGMAP
	help
	  This option enables support for the flash module found in Qualcomm
	  Technologies, Inc. PMICs. The flash module can have 3 or 4 flash LED
	  channels and each channel is programmable to support up to 1.5 A full
	  scale current. It also supports connecting two channels' output together
	  to supply one LED component to achieve current up to 2 A. In such case,
	  the total LED current will be split symmetrically on each channel and
	  they will be enabled/disabled at the same time.

config LEDS_RT4505
	tristate "LED support for RT4505 flashlight controller"
	depends on I2C && OF
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	select REGMAP_I2C
	help
	  This option enables support for the RT4505 flash LED controller.
	  RT4505 includes torch and flash functions with programmable current.
	  And it's commonly used to compensate the illuminance for the camera
	  inside the mobile product like as phones or tablets.

config LEDS_RT8515
	tristate "LED support for Richtek RT8515 flash/torch LED"
	depends on GPIOLIB
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	help
	  This option enables support for the Richtek RT8515 flash
	  and torch LEDs found on some mobile phones.

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

config LEDS_SGM3140
	tristate "LED support for the SGM3140"
	depends on V4L2_FLASH_LED_CLASS || !V4L2_FLASH_LED_CLASS
	help
	  This option enables support for the SGM3140 500mA Buck/Boost Charge
	  Pump LED Driver.

endif # LEDS_CLASS_FLASH
