/*
 * 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.
 */

#ifndef __SENSOR_HMC5883L_H__
#define __SENSOR_HMC5883L_H__

#include <device.h>
#include <misc/util.h>
#include <stdint.h>
#include <gpio.h>
#include <misc/nano_work.h>

#define SYS_LOG_DOMAIN "HMC5883L"
#define SYS_LOG_LEVEL CONFIG_HMC5883L_SYS_LOG_LEVEL
#include <misc/sys_log.h>

#define HMC5883L_I2C_ADDR		0x1E

#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 {
	struct device *i2c;
	int16_t x_sample;
	int16_t y_sample;
	int16_t z_sample;
	uint8_t gain_idx;

#ifdef CONFIG_HMC5883L_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_HMC5883L_TRIGGER_OWN_FIBER)
	char __stack fiber_stack[CONFIG_HMC5883L_FIBER_STACK_SIZE];
	struct nano_sem gpio_sem;
#elif defined(CONFIG_HMC5883L_TRIGGER_GLOBAL_FIBER)
	struct nano_work work;
	struct device *dev;
#endif

#endif /* CONFIG_HMC5883L_TRIGGER */
};

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

int hmc5883l_init_interrupt(struct device *dev);
#endif

#endif /* __SENSOR_HMC5883L__ */
