# SPDX-License-Identifier: GPL-2.0-only

#
# Light sensors
#
# When adding new entries keep the list in alphabetical order

menu "Light sensors"

config ACPI_ALS
	tristate "ACPI Ambient Light Sensor"
	depends on ACPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select IIO_KFIFO_BUF
	help
	  Say Y here if you want to build a driver for the ACPI0008
	  Ambient Light Sensor.

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

config ADJD_S311
	tristate "ADJD-S311-CR999 digital color sensor"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	depends on I2C
	help
	  If you say yes here you get support for the Avago ADJD-S311-CR999
	  digital color light sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called adjd_s311.

config ADUX1020
	tristate "ADUX1020 photometric sensor"
	select REGMAP_I2C
	depends on I2C
	help
	 Say Y here if you want to build a driver for the Analog Devices
	 ADUX1020 photometric sensor.

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

config AL3010
	tristate "AL3010 ambient light sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Dyna Image AL3010
	  ambient light sensor.

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

config AL3320A
	tristate "AL3320A ambient light sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Dyna Image AL3320A
	  ambient light sensor.

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

config APDS9300
	tristate "APDS9300 ambient light sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Avago APDS9300
	  ambient light sensor.

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

config APDS9960
	tristate "Avago APDS9960 gesture/RGB/ALS/proximity sensor"
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_KFIFO_BUF
	depends on I2C
	help
	  Say Y here to build I2C interface support for the Avago
	  APDS9960 gesture/RGB/ALS/proximity sensor.

	  To compile this driver as a module, choose M here: the
	  module will be called apds9960

config AS73211
	tristate "AMS AS73211 XYZ color sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	 If you say yes here you get support for the AMS AS73211
	 JENCOLOR(R) Digital XYZ Sensor.

	 For triggered measurements, you will need an additional trigger driver
	 like IIO_HRTIMER_TRIGGER or IIO_SYSFS_TRIGGER.

	 This driver can also be built as a module.  If so, the module
	 will be called as73211.

config BH1750
	tristate "ROHM BH1750 ambient light sensor"
	depends on I2C
	help
	  Say Y here to build support for the ROHM BH1710, BH1715, BH1721,
	  BH1750, BH1751 ambient light sensors.

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

config BH1780
	tristate "ROHM BH1780 ambient light sensor"
	depends on I2C
	help
	  Say Y here to build support for the ROHM BH1780GLI ambient
	  light sensor.

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

config CM32181
	depends on I2C
	tristate "CM32181 driver"
	help
	  Say Y here if you use cm32181.
	  This option enables ambient light sensor using
	  Capella cm32181 device driver.

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

config CM3232
	depends on I2C
	tristate "CM3232 ambient light sensor"
	help
	  Say Y here if you use cm3232.
	  This option enables ambient light sensor using
	  Capella Microsystems cm3232 device driver.

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

config CM3323
	depends on I2C
	tristate "Capella CM3323 color light sensor"
	help
	  Say Y here if you want to build a driver for Capella CM3323
	  color sensor.

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

config CM3605
	tristate "Capella CM3605 ambient light and proximity sensor"
	help
	  Say Y here if you want to build a driver for Capella CM3605
	  ambient light and short range proximity sensor.

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

config CM36651
	depends on I2C
	tristate "CM36651 driver"
	help
	  Say Y here if you use cm36651.
	  This option enables proximity & RGB sensor using
	  Capella cm36651 device driver.

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

config IIO_CROS_EC_LIGHT_PROX
	tristate "ChromeOS EC Light and Proximity Sensors"
	depends on IIO_CROS_EC_SENSORS_CORE
	help
	  Say Y here if you use the light and proximity sensors
	  presented by the ChromeOS EC Sensor hub.

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

config GP2AP002
	tristate "Sharp GP2AP002 Proximity/ALS sensor"
	depends on I2C
	select REGMAP
	help
	  Say Y here if you have a Sharp GP2AP002 proximity/ALS combo-chip
	  hooked to an I2C bus.

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

config GP2AP020A00F
	tristate "Sharp GP2AP020A00F Proximity/ALS sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select IRQ_WORK
	help
	  Say Y here if you have a Sharp GP2AP020A00F proximity/ALS combo-chip
	  hooked to an I2C bus.

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

config IQS621_ALS
	tristate "Azoteq IQS621/622 ambient light sensors"
	depends on MFD_IQS62X || COMPILE_TEST
	help
	  Say Y here if you want to build support for the Azoteq IQS621
	  and IQS622 ambient light sensors.

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

config SENSORS_ISL29018
	tristate "Intersil 29018 light and proximity sensor"
	depends on I2C
	select REGMAP_I2C
	default n
	help
	  If you say yes here you get support for ambient light sensing and
	  proximity infrared sensing from Intersil ISL29018.
	  This driver will provide the measurements of ambient light intensity
	  in lux, proximity infrared sensing and normal infrared sensing.
	  Data from sensor is accessible via sysfs.

config SENSORS_ISL29028
	tristate "Intersil ISL29028 Concurrent Light and Proximity Sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  Provides driver for the Intersil's ISL29028 device.
	  This driver supports the sysfs interface to get the ALS, IR intensity,
	  Proximity value via iio. The ISL29028 provides the concurrent sensing
	  of ambient light and proximity.

config ISL29125
	tristate "Intersil ISL29125 digital color light sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here if you want to build a driver for the Intersil ISL29125
	  RGB light sensor for I2C.

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

config ISL76682
	tristate "Intersil ISL76682 Light Sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y here if you want to build a driver for the Intersil ISL76682
	  Ambient Light Sensor and IR Intensity sensor. This driver provides
	  the readouts via standard IIO sysfs and device interface. Both ALS
	  illuminance and IR illuminance are provided raw with separate scale
	  setting which can be configured via sysfs, the default scale is 1000
	  lux, other options are 4000/16000/64000 lux.

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

config HID_SENSOR_ALS
	depends on HID_SENSOR_HUB
	select IIO_BUFFER
	select HID_SENSOR_IIO_COMMON
	select HID_SENSOR_IIO_TRIGGER
	tristate "HID ALS"
	help
	  Say yes here to build support for the HID SENSOR
	  Ambient light sensor.

	  To compile this driver as a module, choose M here: the
	  module will be called hid-sensor-als.

config HID_SENSOR_PROX
	depends on HID_SENSOR_HUB
	select IIO_BUFFER
	select HID_SENSOR_IIO_COMMON
	select HID_SENSOR_IIO_TRIGGER
	tristate "HID PROX"
	help
	  Say yes here to build support for the HID SENSOR
	  Proximity sensor.

	  To compile this driver as a module, choose M here: the
	  module will be called hid-sensor-prox.

config JSA1212
	tristate "JSA1212 ALS and proximity sensor driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y here if you want to build a IIO driver for JSA1212
	  proximity & ALS sensor device.

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

config ROHM_BU27008
	tristate "ROHM BU27008 color (RGB+C/IR) sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_GTS_HELPER
	help
	  Enable support for the ROHM BU27008 color sensor.
	  The ROHM BU27008 is a sensor with 5 photodiodes (red, green,
	  blue, clear and IR) with four configurable channels. Red and
	  green being always available and two out of the rest three
	  (blue, clear, IR) can be selected to be simultaneously measured.
	  Typical application is adjusting LCD backlight of TVs,
	  mobile phones and tablet PCs.

config ROHM_BU27034
	tristate "ROHM BU27034 ambient light sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_GTS_HELPER
	select IIO_BUFFER
	select IIO_KFIFO_BUF
	help
	  Enable support for the ROHM BU27034 ambient light sensor. ROHM BU27034
	  is an ambient light sesnor with 3 channels and 3 photo diodes capable
	  of detecting a very wide range of illuminance.
	  Typical application is adjusting LCD and backlight power of TVs and
	  mobile phones.

config RPR0521
	tristate "ROHM RPR0521 ALS and proximity sensor driver"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here if you want to build support for ROHM's RPR0521
	  ambient light and proximity sensor device.

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

config SENSORS_LM3533
	tristate "LM3533 ambient light sensor"
	depends on MFD_LM3533
	help
	  If you say yes here you get support for the ambient light sensor
	  interface on National Semiconductor / TI LM3533 Lighting Power
	  chips.

	  The sensor interface can be used to control the LEDs and backlights
	  of the chip through defining five light zones and three sets of
	  corresponding output-current values.

	  The driver provides raw and mean adc readings along with the current
	  light zone through sysfs. A threshold event can be generated on zone
	  changes. The ALS-control output values can be set per zone for the
	  three current output channels.

config LTR390
	tristate "LTR-390UV-01 ambient light and UV sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Lite-On LTR-390UV-01
	  ambient light and UV sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called ltr390.

config LTR501
	tristate "LTR-501ALS-01 light sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for the Lite-On LTR-501ALS-01
	  ambient light and proximity sensor. This driver also supports LTR-559
	  ALS/PS or LTR-301 ALS sensors.

	  This driver can also be built as a module.  If so, the module
	  will be called ltr501.

config LTRF216A
	tristate "Liteon LTRF216A Light Sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say Y or M here, you get support for Liteon LTRF216A
	  Ambient Light Sensor.

	  If built as a dynamically linked module, it will be called
	  ltrf216a.

config LV0104CS
	tristate "LV0104CS Ambient Light Sensor"
	depends on I2C
	help
	  Say Y here if you want to build support for the On Semiconductor
	  LV0104CS ambient light sensor.

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

config MAX44000
	tristate "MAX44000 Ambient and Infrared Proximity Sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here if you want to build support for Maxim Integrated's
	  MAX44000 ambient and infrared proximity sensor device.

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

config MAX44009
	tristate "MAX44009 Ambient Light Sensor"
	depends on I2C
	select REGMAP_I2C
	help
	 Say Y here if you want to build support for Maxim Integrated's
	 MAX44009 ambient light sensor device.

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

config NOA1305
	tristate "ON Semiconductor NOA1305 ambient light sensor"
	depends on I2C
	select REGMAP_I2C
	help
	 Say Y here if you want to build support for the ON Semiconductor
	 NOA1305 ambient light sensor.

	 To compile this driver as a module, choose M here:
	 The module will be called noa1305.

config OPT3001
	tristate "Texas Instruments OPT3001 Light Sensor"
	depends on I2C
	help
	  If you say Y or M here, you get support for Texas Instruments
	  OPT3001 Ambient Light Sensor.

	  If built as a dynamically linked module, it will be called
	  opt3001.

config OPT4001
	tristate "Texas Instruments OPT4001 Light Sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say Y or M here, you get support for Texas Instruments
	  OPT4001 Ambient Light Sensor.

	  If built as a dynamically linked module, it will be called
	  opt4001.

config PA12203001
	tristate "TXC PA12203001 light and proximity sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the TXC PA12203001
	  ambient light and proximity sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called pa12203001.

config SI1133
	tristate "SI1133 UV Index Sensor and Ambient Light Sensor"
	depends on I2C
	select REGMAP_I2C
	  help
	  Say Y here if you want to build a driver for the Silicon Labs SI1133
	  UV Index Sensor and Ambient Light Sensor chip.

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

config SI1145
	tristate "SI1132 and SI1141/2/3/5/6/7 combined ALS, UV index and proximity sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here if you want to build a driver for the Silicon Labs SI1132 or
	  SI1141/2/3/5/6/7 combined ambient light, UV index and proximity sensor
	  chips.

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

config STK3310
	tristate "STK3310 ALS and proximity sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  Say yes here to get support for the Sensortek STK3310 ambient light
	  and proximity sensor. The STK3311 model is also supported by this
	  driver.

	  Choosing M will build the driver as a module. If so, the module
	  will be called stk3310.

config ST_UVIS25
	tristate "STMicroelectronics UVIS25 sensor driver"
	depends on (I2C || SPI)
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select ST_UVIS25_I2C if (I2C)
	select ST_UVIS25_SPI if (SPI_MASTER)
	help
	  Say yes here to build support for STMicroelectronics UVIS25
	  uv sensor

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

config ST_UVIS25_I2C
	tristate
	depends on ST_UVIS25
	select REGMAP_I2C

config ST_UVIS25_SPI
	tristate
	depends on ST_UVIS25
	select REGMAP_SPI

config TCS3414
	tristate "TAOS TCS3414 digital color sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for the TAOS TCS3414
	  family of digital color sensors.

	  This driver can also be built as a module.  If so, the module
	  will be called tcs3414.

config TCS3472
	tristate "TAOS TCS3472 color light-to-digital converter"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for the TAOS TCS3472
	  family of color light-to-digital converters with IR filter.

	  This driver can also be built as a module.  If so, the module
	  will be called tcs3472.

config SENSORS_TSL2563
	tristate "TAOS TSL2560, TSL2561, TSL2562 and TSL2563 ambient light sensors"
	depends on I2C
	help
	  If you say yes here you get support for the Taos TSL2560,
	  TSL2561, TSL2562 and TSL2563 ambient light sensors.

	  This driver can also be built as a module.  If so, the module
	  will be called tsl2563.

config TSL2583
	tristate "TAOS TSL2580, TSL2581 and TSL2583 light-to-digital converters"
	depends on I2C
	help
	  Provides support for the TAOS tsl2580, tsl2581 and tsl2583 devices.
	  Access ALS data via iio, sysfs.

config TSL2591
        tristate "TAOS TSL2591 ambient light sensor"
        depends on I2C
        help
          Select Y here for support of the AMS/TAOS TSL2591 ambient light sensor,
          featuring channels for combined visible + IR intensity and lux illuminance.
          Access data via iio and sysfs. Supports iio_events.

          To compile this driver as a module, select M: the
          module will be called tsl2591.

config TSL2772
	tristate "TAOS TSL/TMD2x71 and TSL/TMD2x72 Family of light and proximity sensors"
	depends on I2C
	help
	  Support for: tsl2571, tsl2671, tmd2671, tsl2771, tmd2771, tsl2572, tsl2672,
	  tmd2672, tsl2772, tmd2772 devices.
	  Provides iio_events and direct access via sysfs.

config TSL4531
	tristate "TAOS TSL4531 ambient light sensors"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the TAOS TSL4531 family
	  of ambient light sensors with direct lux output.

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

config US5182D
	tristate "UPISEMI light and proximity sensor"
	depends on I2C
	help
	  If you say yes here you get support for the UPISEMI US5182D
	  ambient light and proximity sensor.

	  This driver can also be built as a module.  If so, the module
	  will be called us5182d.

config VCNL4000
	tristate "VCNL4000/4010/4020/4200 combined ALS and proximity sensor"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VCNL4000,
	  VCNL4010, VCNL4020, VCNL4200 combined ambient light and proximity
	  sensor.

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

config VCNL4035
	tristate "VCNL4035 combined ALS and proximity sensor"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select REGMAP_I2C
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VCNL4035,
	  combined ambient light (ALS) and proximity sensor. Currently only ALS
	  function is available.

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

config VEML6030
	tristate "VEML6030 ambient light sensor"
	select REGMAP_I2C
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VEML6030
	  ambient light sensor (ALS).

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

config VEML6070
	tristate "VEML6070 UV A light sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VEML6070 UV A
	  light sensor.

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

config VEML6075
	tristate "VEML6075 UVA and UVB light sensor"
	select REGMAP_I2C
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VEML6075 UVA
	  and UVB light sensor.

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

config VL6180
	tristate "VL6180 ALS, range and proximity sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the STMicroelectronics
	  VL6180 combined ambient light, range and proximity sensor.

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

config ZOPT2201
	tristate "ZOPT2201 ALS and UV B sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the IDT
	  ZOPT2201 ambient light and UV B sensor.

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

endmenu
