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

#ifndef ZEPHYR_DRIVERS_SENSOR_HMC5883L_HMC5883L_H_
#define ZEPHYR_DRIVERS_SENSOR_HMC5883L_HMC5883L_H_

#include <zephyr/device.h>
#include <zephyr/sys/util.h>
#include <zephyr/types.h>
#include <zephyr/drivers/i2c.h>
#include <zephyr/drivers/gpio.h>

#define HMC5883L_REG_CONFIG_A           0x00
#define HMC5883L_ODR_SHIFT              2

#define HMC5883L_REG_CONFIG_B           0x01
#define HMC5883L_GAIN_SHIFT             5

#define HMC5883L_REG_MODE               0x02
#define HMC5883L_MODE_CONTINUOUS        0

#define HMC5883L_REG_DATA_START         0x03

#define HMC5883L_REG_CHIP_ID            0x0A
#define HMC5883L_CHIP_ID_A              'H'
#define HMC5883L_CHIP_ID_B              '4'
#define HMC5883L_CHIP_ID_C              '3'

static const char *const hmc5883l_odr_strings[] = {
	"0.75", "1.5", "3", "7.5", "15", "30", "75"
};

static const char *const hmc5883l_fs_strings[] = {
	"0.88", "1.3", "1.9", "2.5", "4", "4.7", "5.6", "8.1"
};

static const uint16_t hmc5883l_gain[] = {
	1370, 1090, 820, 660, 440, 390, 330, 230
};

struct hmc5883l_data {
	int16_t x_sample;
	int16_t y_sample;
	int16_t z_sample;
	uint8_t gain_idx;

#ifdef CONFIG_HMC5883L_TRIGGER
	const struct device *dev;
	struct gpio_callback gpio_cb;

	struct sensor_trigger data_ready_trigger;
	sensor_trigger_handler_t data_ready_handler;

#if defined(CONFIG_HMC5883L_TRIGGER_OWN_THREAD)
	K_KERNEL_STACK_MEMBER(thread_stack, CONFIG_HMC5883L_THREAD_STACK_SIZE);
	struct k_thread thread;
	struct k_sem gpio_sem;
#elif defined(CONFIG_HMC5883L_TRIGGER_GLOBAL_THREAD)
	struct k_work work;
#endif

#endif /* CONFIG_HMC5883L_TRIGGER */
};

struct hmc5883l_config {
	struct i2c_dt_spec i2c;
#ifdef CONFIG_HMC5883L_TRIGGER
	struct gpio_dt_spec int_gpio;
#endif
};

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

int hmc5883l_init_interrupt(const struct device *dev);
#endif

#endif /* __SENSOR_HMC5883L__ */
