/*
 * Copyright (c) 2021 Leonard Pollak
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_DRIVERS_SENSOR_INA219_INA219_H_
#define ZEPHYR_DRIVERS_SENSOR_INA219_INA219_H_

/* Device register addresses */
#define INA219_REG_CONF		0x00
#define INA219_REG_V_SHUNT	0x01
#define INA219_REG_V_BUS	0x02
#define INA219_REG_POWER	0x03
#define INA219_REG_CURRENT	0x04
#define INA219_REG_CALIB	0x05

/* Config register shifts and masks */
#define INA219_RST		BIT(15)
#define INA219_BRNG_MASK	0x1
#define INA219_BRNG_SHIFT	13
#define INA219_PG_MASK		0x3
#define INA219_PG_SHIFT		11
#define INA219_ADC_MASK		0xF
#define INA219_BADC_SHIFT	7
#define INA219_SADC_SHIFT	3
#define INA219_MODE_MASK	0x7

/* Bus voltage register */
#define INA219_VBUS_GET(x)	((x) >> 3) & 0x3FFF
#define INA219_CNVR_RDY(x)	((x) >> 1) & 0x1
#define INA219_OVF_STATUS(x)	x & 0x1

/* Mode fields */
#define INA219_MODE_NORMAL	0x3 /* shunt and bus, triggered */
#define INA219_MODE_SLEEP	0x4 /* ADC off */
#define INA219_MODE_OFF		0x0 /* Power off */

/* Others */
#define INA219_SIGN_BIT(x)	((x) >> 15) & 0x1
#define INA219_V_BUS_MUL	0.004f
#define INA219_SI_MUL		0.00001f
#define INA219_POWER_MUL	20
#define INA219_WAIT_STARTUP	40
#define INA219_WAIT_MSR_RETRY	100
#define INA219_SCALING_FACTOR	4096000

struct ina219_config {
	struct i2c_dt_spec bus;
	uint16_t current_lsb;
	uint16_t r_shunt;
	uint8_t brng;
	uint8_t pg;
	uint8_t badc;
	uint8_t sadc;
	uint8_t mode;
};

struct ina219_data {
	uint16_t config;
	uint16_t v_bus;
	uint16_t power;
	uint16_t current;
	uint16_t calib;
	uint32_t msr_delay;
};

static int ina219_init(const struct device *dev);

static inline int ina219_conv_delay(uint8_t delay_idx)
{
	switch (delay_idx) {
	case 0:
		return 84;
	case 1:
		return 148;
	case 2:
		return 276;
	case 3:
		return 532;
	case 9:
		return 1060;
	case 10:
		return 2013;
	case 11:
		return 4260;
	case 12:
		return 8510;
	case 13:
		return 17020;
	case 14:
		return 34050;
	case 15:
		return 68100;
	default:
		return -EINVAL;
	}
}

#endif /* ZEPHYR_DRIVERS_SENSOR_INA219_INA219_H_ */
