/* sensor_isl29035.h - header file for ISL29035 light sensor driver */

/*
 * Copyright (c) 2016 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef _SENSOR_ISL29035_H_
#define _SENSOR_ISL29035_H_

#include <device.h>
#include <kernel.h>
#include <sensor.h>
#include <gpio.h>

#define ISL29035_I2C_ADDRESS		0x44

#define ISL29035_COMMAND_I_REG		0x00
#define ISL29035_OPMODE_SHIFT		5
#define ISL29035_OPMODE_MASK		(7 << ISL29035_OPMODE_SHIFT)
#define ISL29035_INT_BIT_SHIFT		2
#define ISL29035_INT_BIT_MASK		(1 << ISL29035_INT_BIT_SHIFT)
#define ISL29035_INT_PRST_SHIFT		0
#define ISL29035_INT_PRST_MASK		(3 << ISL29035_INT_BIT_SHIFT)

#define ISL29035_OPMODE_OFF		0
#define ISL29035_OPMODE_ALS_ONCE	1
#define ISL29035_OPMODE_IR_ONCE		2
#define ISL29035_OPMODE_ALS_CONT	5
#define ISL29035_OPMODE_IR_CONT		6

#define ISL29035_COMMAND_II_REG		0x01
#define ISL29035_LUX_RANGE_SHIFT	0
#define ISL29035_LUX_RANGE_MASK		(3 << ISL29035_LUX_RANGE_SHIFT)
#define ISL29035_ADC_RES_SHIFT		2
#define ISL29035_ADC_RES_MASK		(3 << ISL29035_ADC_RES_SHIFT)

#define ISL29035_DATA_LSB_REG		0x02
#define ISL29035_DATA_MSB_REG		0x03
#define ISL29035_INT_LT_LSB_REG		0x04
#define ISL29035_INT_LT_MSB_REG		0x05
#define ISL29035_INT_HT_LSB_REG		0x06
#define ISL29035_INT_HT_MSB_REG		0x07

#define ISL29035_ID_REG			0x0F
#define ISL29035_BOUT_SHIFT		7
#define ISL29035_BOUT_MASK		(1 << ISL29035_BOUT_SHIFT)
#define ISL29035_ID_SHIFT		3
#define ISL29035_ID_MASK		(3 << ISL29035_ID_SHIFT)

#if CONFIG_ISL29035_MODE_ALS
	#define ISL29035_ACTIVE_OPMODE		ISL29035_OPMODE_ALS_CONT
	#define ISL29035_ACTIVE_CHAN		SENSOR_CHAN_LIGHT
#elif CONFIG_ISL29035_MODE_IR
	#define ISL29035_ACTIVE_OPMODE		ISL29035_OPMODE_IR_CONT
	#define ISL29035_ACTIVE_CHAN		SENSOR_CHAN_IR
#endif

#define ISL29035_ACTIVE_OPMODE_BITS		\
	(ISL29035_ACTIVE_OPMODE << ISL29035_OPMODE_SHIFT)

#if CONFIG_ISL29035_LUX_RANGE_1K
	#define ISL29035_LUX_RANGE_IDX		0
	#define ISL29035_LUX_RANGE		1000
#elif CONFIG_ISL29035_LUX_RANGE_4K
	#define ISL29035_LUX_RANGE_IDX		1
	#define ISL29035_LUX_RANGE		4000
#elif CONFIG_ISL29035_LUX_RANGE_16K
	#define ISL29035_LUX_RANGE_IDX		2
	#define ISL29035_LUX_RANGE		16000
#elif CONFIG_ISL29035_LUX_RANGE_64K
	#define ISL29035_LUX_RANGE_IDX		3
	#define ISL29035_LUX_RANGE		64000
#endif

#define ISL29035_LUX_RANGE_BITS			\
	(ISL29035_LUX_RANGE_IDX << ISL29035_LUX_RANGE_SHIFT)

#if CONFIG_ISL29035_INTEGRATION_TIME_26
	#define ISL29035_ADC_RES_IDX		3
#elif CONFIG_ISL29035_INTEGRATION_TIME_410
	#define ISL29035_ADC_RES_IDX		2
#elif CONFIG_ISL29035_INTEGRATION_TIME_6500
	#define ISL29035_ADC_RES_IDX		1
#elif CONFIG_ISL29035_INTEGRATION_TIME_105K
	#define ISL29035_ADC_RES_IDX		0
#endif

#define ISL29035_ADC_RES_BITS			\
	(ISL29035_ADC_RES_IDX << ISL29035_ADC_RES_SHIFT)

#define ISL29035_ADC_DATA_BITS	(16 - 4 * ISL29035_ADC_RES_IDX)
#define ISL29035_ADC_DATA_MASK	(0xFFFF >> (16 - ISL29035_ADC_DATA_BITS))

#if CONFIG_ISL29035_INT_PERSIST_1
	#define ISL29035_INT_PRST_IDX		0
	#define ISL29035_INT_PRST_CYCLES	1
#elif CONFIG_ISL29035_INT_PERSIST_4
	#define ISL29035_INT_PRST_IDX		1
	#define ISL29035_INT_PRST_CYCLES	4
#elif CONFIG_ISL29035_INT_PERSIST_8
	#define ISL29035_INT_PRST_IDX		2
	#define ISL29035_INT_PRST_CYCLES	8
#elif CONFIG_ISL29035_INT_PERSIST_16
	#define ISL29035_INT_PRST_IDX		3
	#define ISL29035_INT_PRST_CYCLES	16
#endif

#define ISL29035_INT_PRST_BITS			\
	(ISL29035_INT_PRST_IDX << ISL29035_INT_PRST_SHIFT)

struct isl29035_driver_data {
	struct device *i2c;
	u16_t data_sample;

#if CONFIG_ISL29035_TRIGGER
	struct device *gpio;
	struct gpio_callback gpio_cb;

	struct sensor_trigger th_trigger;
	sensor_trigger_handler_t th_handler;

#if defined(CONFIG_ISL29035_TRIGGER_OWN_THREAD)
	K_THREAD_STACK_MEMBER(thread_stack, CONFIG_ISL29035_THREAD_STACK_SIZE);
	struct k_thread thread;
	struct k_sem gpio_sem;
#elif defined(CONFIG_ISL29035_TRIGGER_GLOBAL_THREAD)
	struct k_work work;
	struct device *dev;
#endif

#endif /* CONFIG_ISL29035_TRIGGER */
};

#ifdef CONFIG_ISL29035_TRIGGER
int isl29035_attr_set(struct device *dev,
		      enum sensor_channel chan,
		      enum sensor_attribute attr,
		      const struct sensor_value *val);

int isl29035_trigger_set(struct device *dev,
			 const struct sensor_trigger *trig,
			 sensor_trigger_handler_t handler);

int isl29035_init_interrupt(struct device *dev);
#endif

#define SYS_LOG_DOMAIN "ISL29035"
#define SYS_LOG_LEVEL CONFIG_SYS_LOG_SENSOR_LEVEL
#include <logging/sys_log.h>
#endif /* _SENSOR_ISL29035_H_ */
