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

#ifndef __SENSOR_LIS3DH_H__
#define __SENSOR_LIS3DH_H__

#include <device.h>
#include <misc/util.h>
#include <zephyr/types.h>
#include <gpio.h>

#define LIS3DH_I2C_ADDRESS		CONFIG_LIS3DH_I2C_ADDR

#define LIS3DH_AUTOINCREMENT_ADDR	BIT(7)

#define LIS3DH_REG_CTRL1		0x20
#define LIS3DH_ACCEL_X_EN_BIT		BIT(0)
#define LIS3DH_ACCEL_Y_EN_BIT		BIT(1)
#define LIS3DH_ACCEL_Z_EN_BIT		BIT(2)
#define LIS3DH_ACCEL_EN_BITS (LIS3DH_ACCEL_X_EN_BIT | \
		LIS3DH_ACCEL_Y_EN_BIT | LIS3DH_ACCEL_Z_EN_BIT)

#if defined(CONFIG_LIS3DH_POWER_MODE_LOW)
	#define LIS3DH_LP_EN_BIT	BIT(3)
#elif defined(CONFIG_LIS3DH_POWER_MODE_NORMAL)
	#define LIS3DH_LP_EN_BIT	0
#endif

#if defined(CONFIG_LIS3DH_ODR_1)
	#define LIS3DH_ODR_IDX		1
#elif defined(CONFIG_LIS3DH_ODR_2)
	#define LIS3DH_ODR_IDX		2
#elif defined(CONFIG_LIS3DH_ODR_3)
	#define LIS3DH_ODR_IDX		3
#elif defined(CONFIG_LIS3DH_ODR_4)
	#define LIS3DH_ODR_IDX		4
#elif defined(CONFIG_LIS3DH_ODR_5)
	#define LIS3DH_ODR_IDX		5
#elif defined(CONFIG_LIS3DH_ODR_6)
	#define LIS3DH_ODR_IDX		6
#elif defined(CONFIG_LIS3DH_ODR_7)
	#define LIS3DH_ODR_IDX		7
#elif defined(CONFIG_LIS3DH_ODR_8)
	#define LIS3DH_ODR_IDX		8
#elif defined(CONFIG_LIS3DH_ODR_9_NORMAL) || defined(CONFIG_LIS3DH_ODR_9_LOW)
	#define LIS3DH_ODR_IDX		9
#endif

#define LIS3DH_ODR_SHIFT		4
#define LIS3DH_ODR_BITS			(LIS3DH_ODR_IDX << LIS3DH_ODR_SHIFT)

#define LIS3DH_REG_CTRL3		0x22
#define LIS3DH_EN_DRDY1_INT1		BIT(4)

#define LIS3DH_REG_CTRL4		0x23
#define LIS3DH_FS_SHIFT			4
#define LIS3DH_FS_MASK			(BIT_MASK(2) << LIS3DH_FS_SHIFT)

#if defined(CONFIG_LIS3DH_ACCEL_RANGE_2G)
	#define LIS3DH_FS_IDX		0
#elif defined(CONFIG_LIS3DH_ACCEL_RANGE_4G)
	#define LIS3DH_FS_IDX		1
#elif defined(CONFIG_LIS3DH_ACCEL_RANGE_8G)
	#define LIS3DH_FS_IDX		2
#elif defined(CONFIG_LIS3DH_ACCEL_RANGE_16G)
	#define LIS3DH_FS_IDX		3
#endif

#define LIS3DH_FS_BITS			(LIS3DH_FS_IDX << LIS3DH_FS_SHIFT)
#define LIS3DH_ACCEL_SCALE		(SENSOR_G * (4 << LIS3DH_FS_IDX))

#define LIS3DH_REG_ACCEL_X_LSB		0x28
#define LIS3DH_REG_ACCEL_Y_LSB		0x2A
#define LIS3DH_REG_ACCEL_Z_LSB		0x2C
#define LIS3DH_REG_ACCEL_X_MSB		0x29
#define LIS3DH_REG_ACCEL_Y_MSB		0x2B
#define LIS3DH_REG_ACCEL_Z_MSB		0x2D

struct lis3dh_data {
	struct device *i2c;
	s16_t x_sample;
	s16_t y_sample;
	s16_t z_sample;

#ifdef CONFIG_LIS3DH_TRIGGER
	struct device *gpio;
	struct gpio_callback gpio_cb;

	struct sensor_trigger data_ready_trigger;
	sensor_trigger_handler_t data_ready_handler;

#if defined(CONFIG_LIS3DH_TRIGGER_OWN_THREAD)
	char __stack thread_stack[CONFIG_LIS3DH_THREAD_STACK_SIZE];
	struct k_thread thread;
	struct k_sem gpio_sem;
#elif defined(CONFIG_LIS3DH_TRIGGER_GLOBAL_THREAD)
	struct k_work work;
	struct device *dev;
#endif

#endif /* CONFIG_LIS3DH_TRIGGER */
};

#ifdef CONFIG_LIS3DH_TRIGGER
int lis3dh_trigger_set(struct device *dev,
		       const struct sensor_trigger *trig,
		       sensor_trigger_handler_t handler);

int lis3dh_sample_fetch(struct device *dev, enum sensor_channel chan);

int lis3dh_init_interrupt(struct device *dev);
#endif

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