#
# 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 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 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 Capela CM3323
	 color sensor.

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

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 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 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 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 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 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 VCNL4000
	tristate "VCNL4000 combined ALS and proximity sensor"
	depends on I2C
	help
	 Say Y here if you want to build a driver for the Vishay VCNL4000
	 combined ambient light and proximity sensor.

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

endmenu
