#
# 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 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 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 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 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 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 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 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 combined ambient light and proximity sensor.

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

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.

endmenu
