/*
 * Copyright (c) 2018 STMicroelectronics
 *
 * LIS2MDL mag header file
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef __MAG_LIS2MDL_H
#define __MAG_LIS2MDL_H

#include <gpio.h>
#include <misc/util.h>
#include <i2c.h>

#define LIS2MDL_EN_BIT                  1
#define LIS2MDL_DIS_BIT                 0
#define LIS2MDL_I2C_ADDR(__x)           (__x << 1)

#define LIS2MDL_AUTO_INCREMENT          0x80

/* Registers */
#define LIS2MDL_WHO_AM_I_REG            0x4f
#define LIS2MDL_WHOAMI_VAL              0x40

#define LIS2MDL_CFG_REG_A               0x60
/* Device supported modes */
#define LIS2MDL_MD_CONT_MODE            0x00
#define LIS2MDL_MD_SINGLE_MODE          0x01
#define LIS2MDL_MD_IDLE1_MODE           0x02
#define LIS2MDL_MD_IDLE2_MODE           0x03
#define LIS2MDL_MAG_MODE_MASK           0x03
/* Device supported ODRs */
#define LIS2MDL_ODR10_HZ                0x00
#define LIS2MDL_ODR20_HZ                0x04
#define LIS2MDL_ODR50_HZ                0x08
#define LIS2MDL_ODR100_HZ               0x0c
#define LIS2MDL_ODR_MASK                0x0c

#if defined(CONFIG_LIS2MDL_MAG_ODR_10) || \
	defined(CONFIG_LIS2MDL_MAG_ODR_RUNTIME)
	#define LIS2MDL_DEFAULT_ODR       LIS2MDL_ODR10_HZ
#elif defined(CONFIG_LIS2MDL_MAG_ODR_20)
	#define LIS2MDL_DEFAULT_ODR       LIS2MDL_ODR20_HZ
#elif defined(CONFIG_LIS2MDL_MAG_ODR_50)
	#define LIS2MDL_DEFAULT_ODR       LIS2MDL_ODR50_HZ
#elif defined(CONFIG_LIS2MDL_MAG_ODR_100)
	#define LIS2MDL_DEFAULT_ODR       LIS2MDL_ODR100_HZ
#endif

/* Sensors registers */
#define LIS2MDL_OFFSET_X_REG_L          0x45
#define LIS2MDL_OFFSET_X_REG_H          0x46
#define LIS2MDL_OFFSET_Y_REG_L          0x47
#define LIS2MDL_OFFSET_Y_REG_H          0x48
#define LIS2MDL_OFFSET_Z_REG_L          0x49
#define LIS2MDL_OFFSET_Z_REG_H          0x4A
#define LIS2MDL_CFG_REG_B               0x61
#define LIS2MDL_CFG_REG_C               0x62
#define LIS2MDL_INT_CTRL_REG            0x63
#define LIS2MDL_STATUS_REG              0x67
#define LIS2MDL_OUT_REG                 0x68
#define LIS2MDL_TEMP_OUT_L_REG          0x6E
#define LIS2MDL_TEMP_OUT_H_REG          0x6F

/* Registers bitmask */
#define LIS2MDL_STS_MDA_UP              0x08
#define LIS2MDL_REBOOT                  0x40
#define LIS2MDL_SOFT_RST                0x20
#define LIS2MDL_BDU_MASK                0x10
#define LIS2MDL_BDU_BIT                 0x10
#define LIS2MDL_INT_MAG_PIN             0x40
#define LIS2MDL_INT_MAG_PIN_MASK        0x40
#define LIS2MDL_INT_MAG                 0x01
#define LIS2MDL_INT_MAG_MASK            0x01
#define LIS2MDL_MODE_MASK               0x03
#define LIS2MDL_LP_MASK                 0x10
#define LIS2MDL_IEA                     0x04
#define LIS2MDL_IEL                     0x02
#define LIS2MDL_IEN                     0x01
#define LIS2MDL_COMP_TEMP_MASK          0x80

/* Output data size */
#define LIS2MDL_OUT_REG_SIZE            6
#define LIS2MDL_NUM_AXIS                3

/* Define ODR supported range */
#define LIS2MDL_MAX_ODR                 100
#define LIS2MDL_MIN_ODR                 10

/* Sensor sensitivity in uGa/LSB */
#define LIS2MDL_SENSITIVITY             1500

struct lis2mdl_device_config {
	char *master_dev_name;
#ifdef CONFIG_LIS2MDL_TRIGGER
	char *gpio_name;
	u32_t gpio_pin;
#endif  /* CONFIG_LIS2MDL_TRIGGER */
	u16_t i2c_addr_config;
};

/* Sensor data */
struct lis2mdl_data {
	struct device *i2c;
	u16_t i2c_addr;
	s16_t mag[3];
	s32_t temp_sample;

	/* save sensitivity */
	u16_t mag_fs_sensitivity;

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

	sensor_trigger_handler_t handler_drdy;

#if defined(CONFIG_LIS2MDL_TRIGGER_OWN_THREAD)
	K_THREAD_STACK_MEMBER(thread_stack, CONFIG_LIS2MDL_THREAD_STACK_SIZE);
	struct k_thread thread;
	struct k_sem gpio_sem;
#elif defined(CONFIG_LIS2MDL_TRIGGER_GLOBAL_THREAD)
	struct k_work work;
	struct device *dev;
#endif  /* CONFIG_LIS2MDL_TRIGGER_GLOBAL_THREAD */
#endif  /* CONFIG_LIS2MDL_TRIGGER */
};

#ifdef CONFIG_LIS2MDL_TRIGGER
int lis2mdl_init_interrupt(struct device *dev);
int lis2mdl_trigger_set(struct device *dev,
			  const struct sensor_trigger *trig,
			  sensor_trigger_handler_t handler);
#endif /* CONFIG_LIS2MDL_TRIGGER */

#endif /* __MAG_LIS2MDL_H */
