# 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 AL3000A
	tristate "AL3000a ambient light sensor"
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Dyna Image AL3000a
	  ambient light sensor.

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

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 APDS9160
	tristate "APDS9160 combined als and proximity sensor"
	depends on I2C
	select REGMAP_I2C
	help
	   Say Y here if you want to build support for a Broadcom APDS9160
	   combined ambient light and proximity sensor.

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

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 APDS9306
	tristate "Avago APDS9306 Ambient Light Sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_GTS_HELPER
	help
	  If you say Y or M here, you get support for Avago APDS9306
	  Ambient Light Sensor.

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

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 BH1745
	tristate "ROHM BH1745 colour sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select IIO_GTS_HELPER
	help
	  Say Y here to build support for the ROHM bh1745 colour sensor.

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

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
	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_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, OPT3002 Light-to-Digital 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 OPT4060
	tristate "Texas Instruments OPT4060 RGBW Color Sensor"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say Y or M here, you get support for Texas Instruments
	  OPT4060 RGBW Color Sensor.

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

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 VEML3235
	tristate "VEML3235 ambient light sensor"
	select REGMAP_I2C
	select IIO_GTS_HELPER
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VEML3235
	  ambient light sensor.

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

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

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

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

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

config VEML6046X00
	tristate "VEML6046X00 RGBIR color sensor"
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	depends on I2C
	help
	  Say Y here if you want to build a driver for the Vishay VEML6046X00
	  high accuracy RGBIR color sensor.

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

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
