# 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 and AMS AS7331 UV 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 and the AMS AS7331 UVA, UVB and UVC
	 ultraviolet sensors.

	 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
