# Kconfig.isl29035 - ISL29035 light sensor configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig ISL29035
	bool
	prompt "ISL29035 light sensor"
	default n
	depends on SENSOR && I2C && NANO_TIMERS && NANO_TIMEOUTS
	help
	  Enable driver for the ISL29035 light sensor.

config ISL29035_NAME
	string
	prompt "Driver name"
	default "ISL29035"
	depends on ISL29035
	help
	  Device name with which the ISL29035 sensor is identified.

config ISL29035_INIT_PRIORITY
	int
	prompt "Init priority"
	default 70
	depends on ISL29035
	help
	  Device driver initialization priority for ISL29035.
	  The device should be initialized after I2C.

config ISL29035_I2C_MASTER_DEV_NAME
	string
	prompt "I2C Master"
	depends on ISL29035
	default "I2C0"
	help
	  The device name of the I2C master device to which the ISL29035
	  chip is connected.

config ISL29035_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on ISL29035
	default 10
	help
	  Priority of fiber used to handle the timer and threshold triggers.

choice
	prompt "Full scale lux range"
	default ISL29035_LUX_RANGE_1K
	depends on ISL29035
	help
	  Maximum allowable lux value. Lower range values offer better
	  resolution.

config ISL29035_LUX_RANGE_1K
	bool
	prompt "1000"

config ISL29035_LUX_RANGE_4K
	bool
	prompt "4000"

config ISL29035_LUX_RANGE_16K
	bool
	prompt "16000"

config ISL29035_LUX_RANGE_64K
	bool
	prompt "64000"

endchoice

choice
	prompt "Integration time"
	default ISL29035_INTEGRATION_TIME_105K
	depends on ISL29035
	help
	  The sampling period of the internal ADC of the light sensor.
	  Lower integration time values mean lower ADC resolution.

config ISL29035_INTEGRATION_TIME_26
	bool
	prompt "0.0256 ms"

config ISL29035_INTEGRATION_TIME_410
	bool
	prompt "0.41 ms"

config ISL29035_INTEGRATION_TIME_6500
	bool
	prompt "6.5 ms"

config ISL29035_INTEGRATION_TIME_105K
	bool
	prompt "105 ms"

endchoice

choice
	prompt "Active sensing mode"
	depends on ISL29035
	default ISL29035_MODE_ALS
	help
	  Sensing mode in which the ISL29035 will function. The chip can be
	  configured either for either ambinet light or infrared sensing.

config ISL29035_MODE_ALS
	bool
	prompt "ambient light"
	help
	  Sensing mode for ambient light spectrum.

config ISL29035_MODE_IR
	bool
	prompt "infrared"
	help
	  Sensing mode for infrared spectrum.

endchoice

choice
	prompt "Trigger mode"
	depends on ISL29035 && ISL29035_MODE_ALS && GPIO
	default ISL29035_TRIGGER_NONE
	help
	  Specify the type of triggering to be used by the driver.
	  Only available for ambient light sensing mode.

config ISL29035_TRIGGER_NONE
	bool
	prompt "No trigger"

config ISL29035_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO
	select ISL29035_TRIGGER
	select SENSOR_DELAYED_WORK

config ISL29035_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select ISL29035_TRIGGER

endchoice

config ISL29035_TRIGGER
	bool
	depends on ISL29035

config ISL29035_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on ISL29035 && ISL29035_TRIGGER
	help
	  The device name of the GPIO device to which the ISL29035 interrupt
	  pin is connected.

config ISL29035_GPIO_PIN_NUM
	int
	prompt "GPIO pin number"
	default 0
	depends on ISL29035 && ISL29035_TRIGGER
	help
	  The number of the GPIO pin to which the ISL29035 interrupt pin is
	  connected.

config ISL29035_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on ISL29035 && ISL29035_TRIGGER_OWN_FIBER
	default 10
	help
	  Priority of fiber used by the driver to handle interrupts.

config ISL29035_FIBER_STACK_SIZE
	int
	prompt "Fiber stack size"
	depends on ISL29035 && ISL29035_TRIGGER_OWN_FIBER
	default 1024
	help
	  Stack size of fiber used by the driver to handle interrupts.

choice
	prompt "Interrupt persist cycles"
	depends on ISL29035 && ISL29035_TRIGGER
	default ISL29035_INT_PERSIST_1
	help
	  Number of consecutive intergration cycles for which the data samples
	  need to remain outside the threshold window in order for the interrupt
	  to be triggered.

config ISL29035_INT_PERSIST_1
	bool
	prompt "1"

config ISL29035_INT_PERSIST_4
	bool
	prompt "4"

config ISL29035_INT_PERSIST_8
	bool
	prompt "8"

config ISL29035_INT_PERSIST_16
	bool
	prompt "16"

endchoice
