# 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 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 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"
	depends on OF
	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 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 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 HID_SENSOR_ALS
	depends on HID_SENSOR_HUB
	select IIO_BUFFER
	select IIO_TRIGGERED_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 IIO_TRIGGERED_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 RPR0521
	tristate "ROHM RPR0521 ALS and proximity sensor driver"
	depends on I2C
	select REGMAP_I2C
	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 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 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 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 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"
	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_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 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 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
