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

#include <drivers/gpio.h>
#ifdef CONFIG_GPIO_MCP230XX
#include <drivers/i2c.h>
#endif /* CONFIG_GPIO_MCP230XX */
#ifdef CONFIG_GPIO_MCP23SXX
#include <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_ */
