11#ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_SC18IS604_H_
12#define ZEPHYR_INCLUDE_DRIVERS_MFD_SC18IS604_H_
21#include <zephyr/device.h>
22#include <zephyr/kernel.h>
23#include <zephyr/drivers/gpio.h>
25#define SC18IS604_CMD_WRITE_I2C 0x00
26#define SC18IS604_CMD_READ_I2C 0x01
27#define SC18IS604_CMD_READ_AFTER_WRITE_I2C 0x02
28#define SC18IS604_CMD_WRITE_AFTER_WRITE_I2C 0x03
29#define SC18IS604_CMD_READ_BUFFER 0x06
30#define SC18IS604_CMD_SPI_CONFIG 0x18
31#define SC18IS604_CMD_WRITE_REGISTER 0x20
32#define SC18IS604_CMD_READ_REGISTER 0x21
33#define SC18IS604_CMD_POWER_DOWN 0x30
34#define SC18IS604_CMD_POWER_DOWN_KEY1 0x5A
35#define SC18IS604_CMD_POWER_DOWN_KEY2 0xA5
36#define SC18IS604_CMD_VERSION_STRING 0xFE
42#define SC18IS604_VERSION_STRING_SIZE 16
44#define SC18IS604_REG_IO_CONFIG 0x00
45#define SC18IS604_REG_IO_STATE 0x01
46#define SC18IS604_REG_I2C_CLOCK 0x02
47#define SC18IS604_REG_I2C_TIMEOUT 0x03
48#define SC18IS604_REG_I2C_STATUS 0x04
49#define SC18IS604_REG_I2C_ADDRESS 0x05
51#define SC18IS604_IO_NUM_PINS_INOUT 4
52#define SC18IS604_IO_NUM_PINS_IONLY 1
53#define SC18IS604_IO_NUM_PINS_MAX (SC18IS604_IO_NUM_PINS_INOUT \
54 + SC18IS604_IO_NUM_PINS_IONLY)
56#define SC18IS604_IO_CONFIG_INPUT 0b00
57#define SC18IS604_IO_CONFIG_PUSH_PULL 0b10
58#define SC18IS604_IO_CONFIG_OPEN_DRAIN 0b11
60#define SC18IS604_I2C_STATUS_SUCCESS 0xF0
61#define SC18IS604_I2C_STATUS_DEVICE_ADDR_NACK 0xF1
62#define SC18IS604_I2C_STATUS_BYTE_NACK 0xF2
63#define SC18IS604_I2C_STATUS_BUSY 0xF3
65#define SC18IS604_I2C_CLOCK_99KHZ 19
66#define SC18IS604_I2C_CLOCK_375KHZ 5
98 uint8_t *cmd,
size_t cmd_len,
99 uint8_t *tx_data,
size_t tx_len,
100 uint8_t *rx_data,
size_t rx_len);
113 uint8_t reg, uint8_t *val);
115#define READ_SC18IS604_REG(dev, reg, val) \
116 mfd_sc18is604_read_register((dev), SC18IS604_REG_##reg, (val));
128 uint8_t reg, uint8_t val);
130#define WRITE_SC18IS604_REG(dev, reg, val) \
131 mfd_sc18is604_write_register((dev), SC18IS604_REG_##reg, (val));
143 uint8_t *data,
size_t len);
155 struct gpio_callback *callback);
167 struct gpio_callback *callback);
187#if defined(CONFIG_MFD_SC18IS604_ASYNC)
210 uint8_t *cmd,
size_t cmd_len,
211 uint8_t *tx_data,
size_t tx_len,
212 uint8_t *rx_data,
size_t rx_len,
213 struct k_poll_signal *signal);
228 uint8_t reg, uint8_t *val,
229 struct k_poll_signal *signal);
231#define READ_SC18IS604_REG_SIGNAL(dev, reg, val, signal) \
232 mfd_sc18is604_read_register_signal((dev), SC18IS604_REG_##reg, (val), (signal));
247 uint8_t *data,
size_t len,
248 struct k_poll_signal *signal);
int mfd_sc18is604_claim(const struct device *dev, k_timeout_t timeout)
Claim a lock on an SC18IS604 device, preventing other users from accessing the device until the lock ...
Definition mfd_sc18is604.c:45
int mfd_sc18is604_read_buffer(const struct device *dev, uint8_t *data, size_t len)
Read data from the internal buffer of an SC18IS604.
Definition mfd_sc18is604_transfer.c:138
int mfd_sc18is604_read_register(const struct device *dev, uint8_t reg, uint8_t *val)
Write to an internal register.
Definition mfd_sc18is604_transfer.c:124
void mfd_sc18is604_release(const struct device *dev)
Release a previously acquired lock on an SC18IS604 device.
Definition mfd_sc18is604.c:52
int mfd_sc18is604_add_callback(const struct device *dev, struct gpio_callback *callback)
Register an interrupt callback.
Definition mfd_sc18is604.c:31
int mfd_sc18is604_transfer(const struct device *dev, uint8_t *cmd, size_t cmd_len, uint8_t *tx_data, size_t tx_len, uint8_t *rx_data, size_t rx_len)
Perform a data transfer to and from an SC18IS604 device.
Definition mfd_sc18is604_transfer.c:49
int mfd_sc18is604_write_register(const struct device *dev, uint8_t reg, uint8_t val)
Read from an internal register.
Definition mfd_sc18is604_transfer.c:131
int mfd_sc18is604_remove_callback(const struct device *dev, struct gpio_callback *callback)
Remove a previously registered interrupt callback.
Definition mfd_sc18is604.c:38
int mfd_sc18is604_transfer_signal(const struct device *dev, uint8_t *cmd, size_t cmd_len, uint8_t *tx_data, size_t tx_len, uint8_t *rx_data, size_t rx_len, struct k_poll_signal *signal)
Definition mfd_sc18is604_transfer_async.c:67
int mfd_sc18is604_read_register_signal(const struct device *dev, uint8_t reg, uint8_t *val, struct k_poll_signal *signal)
Definition mfd_sc18is604_transfer_async.c:117
int mfd_sc18is604_read_buffer_signal(const struct device *dev, uint8_t *data, size_t len, struct k_poll_signal *signal)
Definition mfd_sc18is604_transfer_async.c:125