Bridle API 4.1.99
A Zephyr based application framework
Loading...
Searching...
No Matches
sc18is604.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 TiaC Systems
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
11#ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_SC18IS604_H_
12#define ZEPHYR_INCLUDE_DRIVERS_MFD_SC18IS604_H_
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18#include <stddef.h>
19#include <stdint.h>
20
21#include <zephyr/device.h>
22#include <zephyr/kernel.h>
23#include <zephyr/drivers/gpio.h>
24
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
37
38/*
39 * The version string is in the form "SC18IS604 1.0.0". The total
40 * length is 16 bytes and includes a 00h null terminator.
41 */
42#define SC18IS604_VERSION_STRING_SIZE 16
43
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
50
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)
55
56#define SC18IS604_IO_CONFIG_INPUT 0b00
57#define SC18IS604_IO_CONFIG_PUSH_PULL 0b10
58#define SC18IS604_IO_CONFIG_OPEN_DRAIN 0b11
59
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
64
65#define SC18IS604_I2C_CLOCK_99KHZ 19
66#define SC18IS604_I2C_CLOCK_375KHZ 5
67
97int mfd_sc18is604_transfer(const struct device *dev,
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);
101
102
112int mfd_sc18is604_read_register(const struct device *dev,
113 uint8_t reg, uint8_t *val);
114
115#define READ_SC18IS604_REG(dev, reg, val) \
116 mfd_sc18is604_read_register((dev), SC18IS604_REG_##reg, (val));
117
127int mfd_sc18is604_write_register(const struct device *dev,
128 uint8_t reg, uint8_t val);
129
130#define WRITE_SC18IS604_REG(dev, reg, val) \
131 mfd_sc18is604_write_register((dev), SC18IS604_REG_##reg, (val));
132
142int mfd_sc18is604_read_buffer(const struct device *dev,
143 uint8_t *data, size_t len);
144
154int mfd_sc18is604_add_callback(const struct device *dev,
155 struct gpio_callback *callback);
156
166int mfd_sc18is604_remove_callback(const struct device *dev,
167 struct gpio_callback *callback);
168
178int mfd_sc18is604_claim(const struct device *dev, k_timeout_t timeout);
179
185void mfd_sc18is604_release(const struct device *dev);
186
187#if defined(CONFIG_MFD_SC18IS604_ASYNC)
188
209int mfd_sc18is604_transfer_signal(const struct device *dev,
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);
214
227int mfd_sc18is604_read_register_signal(const struct device *dev,
228 uint8_t reg, uint8_t *val,
229 struct k_poll_signal *signal);
230
231#define READ_SC18IS604_REG_SIGNAL(dev, reg, val, signal) \
232 mfd_sc18is604_read_register_signal((dev), SC18IS604_REG_##reg, (val), (signal));
233
246int mfd_sc18is604_read_buffer_signal(const struct device *dev,
247 uint8_t *data, size_t len,
248 struct k_poll_signal *signal);
249
250#endif /* defined(CONFIG_MFD_SC18IS604_ASYNC) */
251
254#ifdef __cplusplus
255}
256#endif
257
258#endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_SC18IS604_H_ */
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