#
# 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
	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 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
