Zephyr API Documentation  3.0.0
A Scalable Open Source RTOS
3.0.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
i2c.h
Go to the documentation of this file.
1
7/*
8 * Copyright (c) 2015 Intel Corporation
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12#ifndef ZEPHYR_INCLUDE_DRIVERS_I2C_H_
13#define ZEPHYR_INCLUDE_DRIVERS_I2C_H_
14
22#include <zephyr/types.h>
23#include <device.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29/*
30 * The following #defines are used to configure the I2C controller.
31 */
32
34#define I2C_SPEED_STANDARD (0x1U)
35
37#define I2C_SPEED_FAST (0x2U)
38
40#define I2C_SPEED_FAST_PLUS (0x3U)
41
43#define I2C_SPEED_HIGH (0x4U)
44
46#define I2C_SPEED_ULTRA (0x5U)
47
48#define I2C_SPEED_SHIFT (1U)
49#define I2C_SPEED_SET(speed) (((speed) << I2C_SPEED_SHIFT) \
50 & I2C_SPEED_MASK)
51#define I2C_SPEED_MASK (0x7U << I2C_SPEED_SHIFT) /* 3 bits */
52#define I2C_SPEED_GET(cfg) (((cfg) & I2C_SPEED_MASK) \
53 >> I2C_SPEED_SHIFT)
54
56#define I2C_ADDR_10_BITS BIT(0)
57
59#define I2C_MODE_MASTER BIT(4)
60
68 const struct device *bus;
70};
71
82#define I2C_DT_SPEC_GET(node_id) \
83 { \
84 .bus = DEVICE_DT_GET(DT_BUS(node_id)), \
85 .addr = DT_REG_ADDR(node_id) \
86 }
87
96#define I2C_DT_SPEC_INST_GET(inst) \
97 I2C_DT_SPEC_GET(DT_DRV_INST(inst))
98
99
100/*
101 * I2C_MSG_* are I2C Message flags.
102 */
103
105#define I2C_MSG_WRITE (0U << 0U)
106
108#define I2C_MSG_READ BIT(0)
109
111#define I2C_MSG_RW_MASK BIT(0)
115#define I2C_MSG_STOP BIT(1)
116
124#define I2C_MSG_RESTART BIT(2)
125
129#define I2C_MSG_ADDR_10_BITS BIT(3)
130
145struct i2c_msg {
148
151
154};
155
162struct i2c_slave_config;
163
164typedef int (*i2c_api_configure_t)(const struct device *dev,
165 uint32_t dev_config);
166typedef int (*i2c_api_get_config_t)(const struct device *dev,
167 uint32_t *dev_config);
168typedef int (*i2c_api_full_io_t)(const struct device *dev,
169 struct i2c_msg *msgs,
170 uint8_t num_msgs,
171 uint16_t addr);
172typedef int (*i2c_api_slave_register_t)(const struct device *dev,
173 struct i2c_slave_config *cfg);
174typedef int (*i2c_api_slave_unregister_t)(const struct device *dev,
175 struct i2c_slave_config *cfg);
176typedef int (*i2c_api_recover_bus_t)(const struct device *dev);
177
178__subsystem struct i2c_driver_api {
179 i2c_api_configure_t configure;
180 i2c_api_get_config_t get_config;
181 i2c_api_full_io_t transfer;
182 i2c_api_slave_register_t slave_register;
183 i2c_api_slave_unregister_t slave_unregister;
184 i2c_api_recover_bus_t recover_bus;
185};
186
187typedef int (*i2c_slave_api_register_t)(const struct device *dev);
188typedef int (*i2c_slave_api_unregister_t)(const struct device *dev);
189
190struct i2c_slave_driver_api {
191 i2c_slave_api_register_t driver_register;
192 i2c_slave_api_unregister_t driver_unregister;
193};
194
200#define I2C_SLAVE_FLAGS_ADDR_10_BITS BIT(0)
201
218 struct i2c_slave_config *config);
219
239 struct i2c_slave_config *config, uint8_t val);
240
261 struct i2c_slave_config *config, uint8_t *val);
262
283 struct i2c_slave_config *config, uint8_t *val);
284
299typedef int (*i2c_slave_stop_cb_t)(struct i2c_slave_config *config);
300
313};
314
329
332
335
338};
339
340#if defined(CONFIG_I2C_STATS) || defined(__DOXYGEN__)
341
342#include <stats/stats.h>
343
347STATS_SECT_ENTRY32(bytes_read)
348STATS_SECT_ENTRY32(bytes_written)
349STATS_SECT_ENTRY32(message_count)
350STATS_SECT_ENTRY32(transfer_call_count)
352
354STATS_NAME(i2c, bytes_read)
355STATS_NAME(i2c, bytes_written)
356STATS_NAME(i2c, message_count)
357STATS_NAME(i2c, transfer_call_count)
358STATS_NAME_END(i2c);
359
368 struct stats_i2c stats;
369};
370
378static inline void i2c_xfer_stats(const struct device *dev, struct i2c_msg *msgs,
379 uint8_t num_msgs)
380{
381 struct i2c_device_state *state =
383 uint32_t bytes_read = 0U;
384 uint32_t bytes_written = 0U;
385
386 STATS_INC(state->stats, transfer_call_count);
387 STATS_INCN(state->stats, message_count, num_msgs);
388 for (uint8_t i = 0U; i < num_msgs; i++) {
389 if (msgs[i].flags & I2C_MSG_READ) {
390 bytes_read += msgs[i].len;
391 }
392 if (msgs[i].flags & I2C_MSG_WRITE) {
393 bytes_written += msgs[i].len;
394 }
395 }
396 STATS_INCN(state->stats, bytes_read, bytes_read);
397 STATS_INCN(state->stats, bytes_written, bytes_written);
398}
399
405#define Z_I2C_DEVICE_STATE_DEFINE(node_id, dev_name) \
406 static struct i2c_device_state Z_DEVICE_STATE_NAME(dev_name) \
407 __attribute__((__section__(".z_devstate")));
408
415#define Z_I2C_INIT_FN(dev_name, init_fn) \
416 static inline int UTIL_CAT(dev_name, _init)(const struct device *dev) \
417 { \
418 struct i2c_device_state *state = \
419 CONTAINER_OF(dev->state, struct i2c_device_state, devstate); \
420 stats_init(&state->stats.s_hdr, STATS_SIZE_32, 4, \
421 STATS_NAME_INIT_PARMS(i2c)); \
422 stats_register(dev->name, &(state->stats.s_hdr)); \
423 return init_fn(dev); \
424 }
425
455#define I2C_DEVICE_DT_DEFINE(node_id, init_fn, pm_device, \
456 data_ptr, cfg_ptr, level, prio, \
457 api_ptr, ...) \
458 Z_I2C_DEVICE_STATE_DEFINE(node_id, Z_DEVICE_DT_DEV_NAME(node_id)); \
459 Z_I2C_INIT_FN(Z_DEVICE_DT_DEV_NAME(node_id), init_fn) \
460 Z_DEVICE_DEFINE(node_id, Z_DEVICE_DT_DEV_NAME(node_id), \
461 DEVICE_DT_NAME(node_id), \
462 &UTIL_CAT(Z_DEVICE_DT_DEV_NAME(node_id), _init), \
463 pm_device, \
464 data_ptr, cfg_ptr, level, prio, \
465 api_ptr, \
466 &(Z_DEVICE_STATE_NAME(Z_DEVICE_DT_DEV_NAME(node_id)).devstate), \
467 __VA_ARGS__)
468
469#else /* CONFIG_I2C_STATS */
470
471static inline void i2c_xfer_stats(const struct device *dev, struct i2c_msg *msgs,
472 uint8_t num_msgs)
473{
474}
475
476#define I2C_DEVICE_DT_DEFINE(node_id, init_fn, pm_device, \
477 data_ptr, cfg_ptr, level, prio, \
478 api_ptr, ...) \
479 DEVICE_DT_DEFINE(node_id, &init_fn, pm_device, \
480 data_ptr, cfg_ptr, level, prio, \
481 api_ptr, __VA_ARGS__)
482
483#endif /* CONFIG_I2C_STATS */
484
493#define I2C_DEVICE_DT_INST_DEFINE(inst, ...) \
494 I2C_DEVICE_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
495
496
507__syscall int i2c_configure(const struct device *dev, uint32_t dev_config);
508
509static inline int z_impl_i2c_configure(const struct device *dev,
510 uint32_t dev_config)
511{
512 const struct i2c_driver_api *api =
513 (const struct i2c_driver_api *)dev->api;
514
515 return api->configure(dev, dev_config);
516}
517
538__syscall int i2c_get_config(const struct device *dev, uint32_t *dev_config);
539
540static inline int z_impl_i2c_get_config(const struct device *dev, uint32_t *dev_config)
541{
542 const struct i2c_driver_api *api = (const struct i2c_driver_api *)dev->api;
543
544 if (api->get_config == NULL) {
545 return -ENOSYS;
546 }
547
548 return api->get_config(dev, dev_config);
549}
550
578__syscall int i2c_transfer(const struct device *dev,
579 struct i2c_msg *msgs, uint8_t num_msgs,
580 uint16_t addr);
581
582static inline int z_impl_i2c_transfer(const struct device *dev,
583 struct i2c_msg *msgs, uint8_t num_msgs,
584 uint16_t addr)
585{
586 const struct i2c_driver_api *api =
587 (const struct i2c_driver_api *)dev->api;
588
589 int res = api->transfer(dev, msgs, num_msgs, addr);
590
591 i2c_xfer_stats(dev, msgs, num_msgs);
592
593 return res;
594}
595
609static inline int i2c_transfer_dt(const struct i2c_dt_spec *spec,
610 struct i2c_msg *msgs, uint8_t num_msgs)
611{
612 return i2c_transfer(spec->bus, msgs, num_msgs, spec->addr);
613}
614
627__syscall int i2c_recover_bus(const struct device *dev);
628
629static inline int z_impl_i2c_recover_bus(const struct device *dev)
630{
631 const struct i2c_driver_api *api =
632 (const struct i2c_driver_api *)dev->api;
633
634 if (api->recover_bus == NULL) {
635 return -ENOSYS;
636 }
637
638 return api->recover_bus(dev);
639}
640
665static inline int i2c_slave_register(const struct device *dev,
666 struct i2c_slave_config *cfg)
667{
668 const struct i2c_driver_api *api =
669 (const struct i2c_driver_api *)dev->api;
670
671 if (api->slave_register == NULL) {
672 return -ENOSYS;
673 }
674
675 return api->slave_register(dev, cfg);
676}
677
694static inline int i2c_slave_unregister(const struct device *dev,
695 struct i2c_slave_config *cfg)
696{
697 const struct i2c_driver_api *api =
698 (const struct i2c_driver_api *)dev->api;
699
700 if (api->slave_unregister == NULL) {
701 return -ENOSYS;
702 }
703
704 return api->slave_unregister(dev, cfg);
705}
706
720__syscall int i2c_slave_driver_register(const struct device *dev);
721
722static inline int z_impl_i2c_slave_driver_register(const struct device *dev)
723{
724 const struct i2c_slave_driver_api *api =
725 (const struct i2c_slave_driver_api *)dev->api;
726
727 return api->driver_register(dev);
728}
729
743__syscall int i2c_slave_driver_unregister(const struct device *dev);
744
745static inline int z_impl_i2c_slave_driver_unregister(const struct device *dev)
746{
747 const struct i2c_slave_driver_api *api =
748 (const struct i2c_slave_driver_api *)dev->api;
749
750 return api->driver_unregister(dev);
751}
752
753/*
754 * Derived i2c APIs -- all implemented in terms of i2c_transfer()
755 */
756
771static inline int i2c_write(const struct device *dev, const uint8_t *buf,
772 uint32_t num_bytes, uint16_t addr)
773{
774 struct i2c_msg msg;
775
776 msg.buf = (uint8_t *)buf;
777 msg.len = num_bytes;
779
780 return i2c_transfer(dev, &msg, 1, addr);
781}
782
796static inline int i2c_write_dt(const struct i2c_dt_spec *spec,
797 const uint8_t *buf, uint32_t num_bytes)
798{
799 return i2c_write(spec->bus, buf, num_bytes, spec->addr);
800}
801
816static inline int i2c_read(const struct device *dev, uint8_t *buf,
817 uint32_t num_bytes, uint16_t addr)
818{
819 struct i2c_msg msg;
820
821 msg.buf = buf;
822 msg.len = num_bytes;
823 msg.flags = I2C_MSG_READ | I2C_MSG_STOP;
824
825 return i2c_transfer(dev, &msg, 1, addr);
826}
827
841static inline int i2c_read_dt(const struct i2c_dt_spec *spec,
842 uint8_t *buf, uint32_t num_bytes)
843{
844 return i2c_read(spec->bus, buf, num_bytes, spec->addr);
845}
846
865static inline int i2c_write_read(const struct device *dev, uint16_t addr,
866 const void *write_buf, size_t num_write,
867 void *read_buf, size_t num_read)
868{
869 struct i2c_msg msg[2];
870
871 msg[0].buf = (uint8_t *)write_buf;
872 msg[0].len = num_write;
873 msg[0].flags = I2C_MSG_WRITE;
874
875 msg[1].buf = (uint8_t *)read_buf;
876 msg[1].len = num_read;
878
879 return i2c_transfer(dev, msg, 2, addr);
880}
881
899static inline int i2c_write_read_dt(const struct i2c_dt_spec *spec,
900 const void *write_buf, size_t num_write,
901 void *read_buf, size_t num_read)
902{
903 return i2c_write_read(spec->bus, spec->addr,
904 write_buf, num_write,
905 read_buf, num_read);
906}
907
926static inline int i2c_burst_read(const struct device *dev,
927 uint16_t dev_addr,
928 uint8_t start_addr,
929 uint8_t *buf,
930 uint32_t num_bytes)
931{
932 return i2c_write_read(dev, dev_addr,
933 &start_addr, sizeof(start_addr),
934 buf, num_bytes);
935}
936
951static inline int i2c_burst_read_dt(const struct i2c_dt_spec *spec,
952 uint8_t start_addr,
953 uint8_t *buf,
954 uint32_t num_bytes)
955{
956 return i2c_burst_read(spec->bus, spec->addr,
957 start_addr, buf, num_bytes);
958}
959
981static inline int i2c_burst_write(const struct device *dev,
982 uint16_t dev_addr,
983 uint8_t start_addr,
984 const uint8_t *buf,
985 uint32_t num_bytes)
986{
987 struct i2c_msg msg[2];
988
989 msg[0].buf = &start_addr;
990 msg[0].len = 1U;
991 msg[0].flags = I2C_MSG_WRITE;
992
993 msg[1].buf = (uint8_t *)buf;
994 msg[1].len = num_bytes;
995 msg[1].flags = I2C_MSG_WRITE | I2C_MSG_STOP;
996
997 return i2c_transfer(dev, msg, 2, dev_addr);
998}
999
1014static inline int i2c_burst_write_dt(const struct i2c_dt_spec *spec,
1015 uint8_t start_addr,
1016 const uint8_t *buf,
1017 uint32_t num_bytes)
1018{
1019 return i2c_burst_write(spec->bus, spec->addr,
1020 start_addr, buf, num_bytes);
1021}
1022
1038static inline int i2c_reg_read_byte(const struct device *dev,
1039 uint16_t dev_addr,
1040 uint8_t reg_addr, uint8_t *value)
1041{
1042 return i2c_write_read(dev, dev_addr,
1043 &reg_addr, sizeof(reg_addr),
1044 value, sizeof(*value));
1045}
1046
1060static inline int i2c_reg_read_byte_dt(const struct i2c_dt_spec *spec,
1061 uint8_t reg_addr, uint8_t *value)
1062{
1063 return i2c_reg_read_byte(spec->bus, spec->addr, reg_addr, value);
1064}
1065
1084static inline int i2c_reg_write_byte(const struct device *dev,
1085 uint16_t dev_addr,
1086 uint8_t reg_addr, uint8_t value)
1087{
1088 uint8_t tx_buf[2] = {reg_addr, value};
1089
1090 return i2c_write(dev, tx_buf, 2, dev_addr);
1091}
1092
1106static inline int i2c_reg_write_byte_dt(const struct i2c_dt_spec *spec,
1107 uint8_t reg_addr, uint8_t value)
1108{
1109 return i2c_reg_write_byte(spec->bus, spec->addr, reg_addr, value);
1110}
1111
1131static inline int i2c_reg_update_byte(const struct device *dev,
1132 uint8_t dev_addr,
1133 uint8_t reg_addr, uint8_t mask,
1134 uint8_t value)
1135{
1136 uint8_t old_value, new_value;
1137 int rc;
1138
1139 rc = i2c_reg_read_byte(dev, dev_addr, reg_addr, &old_value);
1140 if (rc != 0) {
1141 return rc;
1142 }
1143
1144 new_value = (old_value & ~mask) | (value & mask);
1145 if (new_value == old_value) {
1146 return 0;
1147 }
1148
1149 return i2c_reg_write_byte(dev, dev_addr, reg_addr, new_value);
1150}
1151
1166static inline int i2c_reg_update_byte_dt(const struct i2c_dt_spec *spec,
1167 uint8_t reg_addr, uint8_t mask,
1168 uint8_t value)
1169{
1170 return i2c_reg_update_byte(spec->bus, spec->addr,
1171 reg_addr, mask, value);
1172}
1173
1196void i2c_dump_msgs(const char *name, const struct i2c_msg *msgs,
1197 uint8_t num_msgs, uint16_t addr);
1198
1202};
1203
1204#define I2C_DECLARE_CLIENT_CONFIG struct i2c_client_config i2c_client
1205
1206#define I2C_CLIENT(_master, _addr) \
1207 .i2c_client = { \
1208 .i2c_master = (_master), \
1209 .i2c_addr = (_addr), \
1210 }
1211
1212#define I2C_GET_MASTER(_conf) ((_conf)->i2c_client.i2c_master)
1213#define I2C_GET_ADDR(_conf) ((_conf)->i2c_client.i2c_addr)
1214
1215#ifdef __cplusplus
1216}
1217#endif
1218
1223#include <syscalls/i2c.h>
1224
1225#endif /* ZEPHYR_INCLUDE_DRIVERS_I2C_H_ */
static int i2c_burst_write_dt(const struct i2c_dt_spec *spec, uint8_t start_addr, const uint8_t *buf, uint32_t num_bytes)
Write multiple bytes to an internal address of an I2C device.
Definition: i2c.h:1014
static int i2c_write_read(const struct device *dev, uint16_t addr, const void *write_buf, size_t num_write, void *read_buf, size_t num_read)
Write then read data from an I2C device.
Definition: i2c.h:865
int i2c_transfer(const struct device *dev, struct i2c_msg *msgs, uint8_t num_msgs, uint16_t addr)
Perform data transfer to another I2C device in master mode.
static int i2c_slave_register(const struct device *dev, struct i2c_slave_config *cfg)
Registers the provided config as Slave device of a controller.
Definition: i2c.h:665
static int i2c_write(const struct device *dev, const uint8_t *buf, uint32_t num_bytes, uint16_t addr)
Write a set amount of data to an I2C device.
Definition: i2c.h:771
static int i2c_write_dt(const struct i2c_dt_spec *spec, const uint8_t *buf, uint32_t num_bytes)
Write a set amount of data to an I2C device.
Definition: i2c.h:796
int(* i2c_slave_read_requested_cb_t)(struct i2c_slave_config *config, uint8_t *val)
Function called when a read from the device is initiated.
Definition: i2c.h:260
static int i2c_write_read_dt(const struct i2c_dt_spec *spec, const void *write_buf, size_t num_write, void *read_buf, size_t num_read)
Write then read data from an I2C device.
Definition: i2c.h:899
static int i2c_burst_read(const struct device *dev, uint16_t dev_addr, uint8_t start_addr, uint8_t *buf, uint32_t num_bytes)
Read multiple bytes from an internal address of an I2C device.
Definition: i2c.h:926
static int i2c_reg_update_byte_dt(const struct i2c_dt_spec *spec, uint8_t reg_addr, uint8_t mask, uint8_t value)
Update internal register of an I2C device.
Definition: i2c.h:1166
static int i2c_read_dt(const struct i2c_dt_spec *spec, uint8_t *buf, uint32_t num_bytes)
Read a set amount of data from an I2C device.
Definition: i2c.h:841
int i2c_slave_driver_unregister(const struct device *dev)
Instructs the I2C Slave device to unregister itself from the I2C Controller.
int(* i2c_slave_write_requested_cb_t)(struct i2c_slave_config *config)
Function called when a write to the device is initiated.
Definition: i2c.h:217
static int i2c_reg_write_byte_dt(const struct i2c_dt_spec *spec, uint8_t reg_addr, uint8_t value)
Write internal register of an I2C device.
Definition: i2c.h:1106
void i2c_dump_msgs(const char *name, const struct i2c_msg *msgs, uint8_t num_msgs, uint16_t addr)
Dump out an I2C message.
int i2c_get_config(const struct device *dev, uint32_t *dev_config)
Get configuration of a host controller.
static int i2c_reg_write_byte(const struct device *dev, uint16_t dev_addr, uint8_t reg_addr, uint8_t value)
Write internal register of an I2C device.
Definition: i2c.h:1084
int(* i2c_slave_read_processed_cb_t)(struct i2c_slave_config *config, uint8_t *val)
Function called when a read from the device is continued.
Definition: i2c.h:282
#define I2C_MSG_READ
Definition: i2c.h:108
static int i2c_reg_read_byte_dt(const struct i2c_dt_spec *spec, uint8_t reg_addr, uint8_t *value)
Read internal register of an I2C device.
Definition: i2c.h:1060
int i2c_configure(const struct device *dev, uint32_t dev_config)
Configure operation of a host controller.
int(* i2c_slave_stop_cb_t)(struct i2c_slave_config *config)
Function called when a stop condition is observed after a start condition addressed to a particular d...
Definition: i2c.h:299
#define I2C_MSG_RESTART
Definition: i2c.h:124
static int i2c_transfer_dt(const struct i2c_dt_spec *spec, struct i2c_msg *msgs, uint8_t num_msgs)
Perform data transfer to another I2C device in master mode.
Definition: i2c.h:609
int i2c_recover_bus(const struct device *dev)
Recover the I2C bus.
static int i2c_read(const struct device *dev, uint8_t *buf, uint32_t num_bytes, uint16_t addr)
Read a set amount of data from an I2C device.
Definition: i2c.h:816
static int i2c_burst_read_dt(const struct i2c_dt_spec *spec, uint8_t start_addr, uint8_t *buf, uint32_t num_bytes)
Read multiple bytes from an internal address of an I2C device.
Definition: i2c.h:951
#define I2C_MSG_STOP
Definition: i2c.h:115
static void i2c_xfer_stats(const struct device *dev, struct i2c_msg *msgs, uint8_t num_msgs)
Updates the i2c stats for i2c transfers.
Definition: i2c.h:378
int i2c_slave_driver_register(const struct device *dev)
Instructs the I2C Slave device to register itself to the I2C Controller.
int(* i2c_slave_write_received_cb_t)(struct i2c_slave_config *config, uint8_t val)
Function called when a write to the device is continued.
Definition: i2c.h:238
static int i2c_reg_update_byte(const struct device *dev, uint8_t dev_addr, uint8_t reg_addr, uint8_t mask, uint8_t value)
Update internal register of an I2C device.
Definition: i2c.h:1131
static int i2c_slave_unregister(const struct device *dev, struct i2c_slave_config *cfg)
Unregisters the provided config as Slave device.
Definition: i2c.h:694
#define I2C_MSG_WRITE
Definition: i2c.h:105
static int i2c_reg_read_byte(const struct device *dev, uint16_t dev_addr, uint8_t reg_addr, uint8_t *value)
Read internal register of an I2C device.
Definition: i2c.h:1038
static int i2c_burst_write(const struct device *dev, uint16_t dev_addr, uint8_t start_addr, const uint8_t *buf, uint32_t num_bytes)
Write multiple bytes to an internal address of an I2C device.
Definition: i2c.h:981
#define CONTAINER_OF(ptr, type, field)
Get a pointer to a structure containing the element.
Definition: util.h:147
#define ENOSYS
Definition: errno.h:83
flags
Definition: http_parser.h:131
state
Definition: http_parser_state.h:30
struct _snode sys_snode_t
Definition: slist.h:33
Statistics.
#define STATS_NAME_END(name__)
Definition: stats.h:391
#define STATS_NAME(name__, entry__)
Definition: stats.h:390
#define STATS_SECT_END
Ends a stats group struct definition.
Definition: stats.h:89
#define STATS_SECT_ENTRY32(var__)
Definition: stats.h:359
#define STATS_INC(group__, var__)
Definition: stats.h:364
#define STATS_NAME_START(name__)
Definition: stats.h:389
#define STATS_INCN(group__, var__, n__)
Definition: stats.h:363
#define STATS_SECT_START(group__)
Definition: stats.h:354
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
__UINT16_TYPE__ uint16_t
Definition: stdint.h:59
Runtime device dynamic structure (in RAM) per driver instance.
Definition: device.h:429
Runtime device structure (in ROM) per driver instance.
Definition: device.h:450
const void * api
Definition: device.h:456
struct device_state *const state
Definition: device.h:458
Definition: i2c.h:1199
uint16_t i2c_addr
Definition: i2c.h:1201
char * i2c_master
Definition: i2c.h:1200
I2C specific device state which allows for i2c device class specific additions.
Definition: i2c.h:366
struct stats_i2c stats
Definition: i2c.h:368
struct device_state devstate
Definition: i2c.h:367
Complete I2C DT information.
Definition: i2c.h:67
const struct device * bus
Definition: i2c.h:68
uint16_t addr
Definition: i2c.h:69
One I2C Message.
Definition: i2c.h:145
uint8_t * buf
Definition: i2c.h:147
uint32_t len
Definition: i2c.h:150
uint8_t flags
Definition: i2c.h:153
Structure providing callbacks to be implemented for devices that supports the I2C slave API.
Definition: i2c.h:307
i2c_slave_write_requested_cb_t write_requested
Definition: i2c.h:308
i2c_slave_write_received_cb_t write_received
Definition: i2c.h:310
i2c_slave_read_processed_cb_t read_processed
Definition: i2c.h:311
i2c_slave_read_requested_cb_t read_requested
Definition: i2c.h:309
i2c_slave_stop_cb_t stop
Definition: i2c.h:312
Structure describing a device that supports the I2C slave API.
Definition: i2c.h:326
uint8_t flags
Definition: i2c.h:331
const struct i2c_slave_callbacks * callbacks
Definition: i2c.h:337
sys_snode_t node
Definition: i2c.h:328
uint16_t address
Definition: i2c.h:334
static void msg(uint64_t c64)
Definition: main.c:17