# 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_SYS_LOG_LEVEL
	int "ISL29035 Log level"
	depends on SYS_LOG && ISL29035
	default 0
	range 0 4
	help
	Sets log level for ISL29035 driver.
	Levels are:

	- 0 OFF: do not write

	- 1 ERROR: only write SYS_LOG_ERR

	- 2 WARNING: write SYS_LOG_WRN in addition to previous level

	- 3 INFO: write SYS_LOG_INF in addition to previous levels

	- 4 DEBUG: write SYS_LOG_DBG in addition to previous levels

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 "I2C_0"
	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 && SYSTEM_WORKQUEUE
	select ISL29035_TRIGGER

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
