/*
 * Copyright (c) 2021 metraTec GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file Header file for the MCP23Xxx driver.
 */

#ifndef ZEPHYR_DRIVERS_GPIO_GPIO_MCP23XXX_H_
#define ZEPHYR_DRIVERS_GPIO_GPIO_MCP23XXX_H_

#include <zephyr/kernel.h>

#include <zephyr/drivers/gpio.h>
#ifdef CONFIG_GPIO_MCP230XX
#include <zephyr/drivers/i2c.h>
#endif /* CONFIG_GPIO_MCP230XX */
#ifdef CONFIG_GPIO_MCP23SXX
#include <zephyr/drivers/spi.h>
#endif /* CONFIG_GPIO_MCP23SXX */

/* Register definitions */
#define REG_IODIR 0x00
#define REG_IPOL 0x01
#define REG_GPINTEN 0x02
#define REG_DEFVAL 0x03
#define REG_INTCON 0x04
#define REG_IOCON 0x05
#define REG_GPPU 0x06
#define REG_INTF 0x07
#define REG_INTCAP 0x08
#define REG_GPIO 0x09
#define REG_IKAT 0x0A

#define MCP23SXX_ADDR 0x40
#define MCP23SXX_READBIT 0x01

typedef int (*mcp23xxx_read_port_regs)(const struct device *dev, uint8_t reg, uint16_t *buf);
typedef int (*mcp23xxx_write_port_regs)(const struct device *dev, uint8_t reg, uint16_t value);
typedef int (*mcp23xxx_bus_is_ready)(const struct device *dev);
/** Configuration data */
struct mcp23xxx_config {
	/* gpio_driver_config needs to be first */
	struct gpio_driver_config config;

	/** I2C device */
	union {
#ifdef CONFIG_GPIO_MCP230XX
		struct i2c_dt_spec i2c;
#endif /* CONFIG_GPIO_MCP230XX */
#ifdef CONFIG_GPIO_MCP23SXX
		struct spi_dt_spec spi;
#endif /* CONFIG_GPIO_MCP23SXX */
	} bus;

	uint8_t ngpios;
	mcp23xxx_read_port_regs read_fn;
	mcp23xxx_write_port_regs write_fn;
	mcp23xxx_bus_is_ready bus_fn;
};

/** Runtime driver data */
struct mcp23xxx_drv_data {
	/* gpio_driver_data needs to be first */
	struct gpio_driver_data data;

	struct k_sem lock;

	struct {
		uint16_t iodir;
		uint16_t ipol;
		uint16_t gpinten;
		uint16_t defval;
		uint16_t intcon;
		uint16_t iocon;
		uint16_t gppu;
		uint16_t intf;
		uint16_t intcap;
		uint16_t gpio;
		uint16_t olat;
	} reg_cache;
};

extern const struct gpio_driver_api gpio_mcp23xxx_api_table;

int gpio_mcp23xxx_init(const struct device *dev);

#endif /* ZEPHYR_DRIVERS_GPIO_GPIO_MCP23XXX_H_ */
