Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
smbus.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_SMBUS_H_
14#define ZEPHYR_INCLUDE_DRIVERS_SMBUS_H_
15
24
25#include <errno.h>
26#include <zephyr/sys/slist.h>
27#include <zephyr/types.h>
28#include <zephyr/device.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
40
56#define SMBUS_CMD_QUICK 0b000
57
79#define SMBUS_CMD_BYTE 0b001
80
105#define SMBUS_CMD_BYTE_DATA 0b010
106
133#define SMBUS_CMD_WORD_DATA 0b011
134
152#define SMBUS_CMD_PROC_CALL 0b100
153
183#define SMBUS_CMD_BLOCK 0b101
184
203#define SMBUS_CMD_BLOCK_PROC 0b111
205
207#define SMBUS_BLOCK_BYTES_MAX 32
208
215
217#define SMBUS_MODE_CONTROLLER BIT(0)
218
220#define SMBUS_MODE_PEC BIT(1)
221
223#define SMBUS_MODE_HOST_NOTIFY BIT(2)
224
226#define SMBUS_MODE_SMBALERT BIT(3)
227
229
236
243#define SMBUS_ADDRESS_ARA 0x0c
244
246
251
259
261
263#define SMBUS_MSG_RW_MASK BIT(0)
265
266struct smbus_callback;
267
275typedef void (*smbus_callback_handler_t)(const struct device *dev,
276 struct smbus_callback *cb,
277 uint8_t addr);
278
298
304 const struct device *bus;
307};
308
319#define SMBUS_DT_SPEC_GET(node_id) \
320 { \
321 .bus = DEVICE_DT_GET(DT_BUS(node_id)), \
322 .addr = DT_REG_ADDR(node_id) \
323 }
324
333#define SMBUS_DT_SPEC_INST_GET(inst) SMBUS_DT_SPEC_GET(DT_DRV_INST(inst))
334
339
344typedef int (*smbus_api_configure_t)(const struct device *dev,
345 uint32_t dev_config);
350typedef int (*smbus_api_get_config_t)(const struct device *dev,
351 uint32_t *dev_config);
356typedef int (*smbus_api_quick_t)(const struct device *dev,
357 uint16_t addr, enum smbus_direction);
362typedef int (*smbus_api_byte_write_t)(const struct device *dev,
363 uint16_t addr, uint8_t byte);
368typedef int (*smbus_api_byte_read_t)(const struct device *dev,
369 uint16_t addr, uint8_t *byte);
374typedef int (*smbus_api_byte_data_write_t)(const struct device *dev,
375 uint16_t addr, uint8_t cmd,
376 uint8_t byte);
381typedef int (*smbus_api_byte_data_read_t)(const struct device *dev,
382 uint16_t addr, uint8_t cmd,
383 uint8_t *byte);
388typedef int (*smbus_api_word_data_write_t)(const struct device *dev,
389 uint16_t addr, uint8_t cmd,
390 uint16_t word);
395typedef int (*smbus_api_word_data_read_t)(const struct device *dev,
396 uint16_t addr, uint8_t cmd,
397 uint16_t *word);
402typedef int (*smbus_api_pcall_t)(const struct device *dev,
403 uint16_t addr, uint8_t cmd,
404 uint16_t send_word, uint16_t *recv_word);
409typedef int (*smbus_api_block_write_t)(const struct device *dev,
410 uint16_t addr, uint8_t cmd,
411 uint8_t count, uint8_t *buf);
416typedef int (*smbus_api_block_read_t)(const struct device *dev,
417 uint16_t addr, uint8_t cmd,
418 uint8_t *count, uint8_t *buf);
423typedef int (*smbus_api_block_pcall_t)(const struct device *dev,
424 uint16_t addr, uint8_t cmd,
425 uint8_t send_count, uint8_t *send_buf,
426 uint8_t *recv_count, uint8_t *recv_buf);
431typedef int (*smbus_api_smbalert_cb_t)(const struct device *dev,
432 struct smbus_callback *cb);
437typedef int (*smbus_api_host_notify_cb_t)(const struct device *dev,
438 struct smbus_callback *cb);
439
479
481
482#if defined(CONFIG_SMBUS_STATS) || defined(__DOXYGEN__)
483
484#include <zephyr/stats/stats.h>
485
487
488STATS_SECT_START(smbus)
489STATS_SECT_ENTRY32(bytes_read)
490STATS_SECT_ENTRY32(bytes_written)
491STATS_SECT_ENTRY32(command_count)
493
494STATS_NAME_START(smbus)
495STATS_NAME(smbus, bytes_read)
496STATS_NAME(smbus, bytes_written)
497STATS_NAME(smbus, command_count)
498STATS_NAME_END(smbus);
499
500struct smbus_device_state {
501 struct device_state devstate;
502 struct stats_smbus stats;
503};
504
508#define Z_SMBUS_DEVICE_STATE_DEFINE(node_id, dev_name) \
509 static struct smbus_device_state Z_DEVICE_STATE_NAME(dev_name) \
510 __attribute__((__section__(".z_devstate")));
511
518#define Z_SMBUS_INIT_FN(dev_name, init_fn) \
519 static inline int \
520 UTIL_CAT(dev_name, _init)(const struct device *dev) \
521 { \
522 struct smbus_device_state *state = \
523 CONTAINER_OF(dev->state, \
524 struct smbus_device_state, \
525 devstate); \
526 stats_init(&state->stats.s_hdr, STATS_SIZE_32, 4, \
527 STATS_NAME_INIT_PARMS(smbus)); \
528 stats_register(dev->name, &(state->stats.s_hdr)); \
529 return init_fn(dev); \
530 }
531
533
542static inline void smbus_xfer_stats(const struct device *dev, uint8_t sent,
544{
545 struct smbus_device_state *state =
546 CONTAINER_OF(dev->state, struct smbus_device_state, devstate);
547
548 STATS_INC(state->stats, command_count);
549 STATS_INCN(state->stats, bytes_read, recv);
550 STATS_INCN(state->stats, bytes_written, sent);
551}
552
581#define SMBUS_DEVICE_DT_DEFINE(node_id, init_fn, pm_device, \
582 data_ptr, cfg_ptr, level, prio, \
583 api_ptr, ...) \
584 Z_SMBUS_DEVICE_STATE_DEFINE(node_id, \
585 Z_DEVICE_DT_DEV_NAME(node_id)); \
586 Z_SMBUS_INIT_FN(Z_DEVICE_DT_DEV_NAME(node_id), init_fn) \
587 Z_DEVICE_DEFINE(node_id, Z_DEVICE_DT_DEV_NAME(node_id), \
588 DEVICE_DT_NAME(node_id), \
589 &UTIL_CAT(Z_DEVICE_DT_DEV_NAME(node_id), _init),\
590 NULL, Z_DEVICE_DT_FLAGS(node_id), pm_device, \
591 data_ptr, cfg_ptr, level, prio, \
592 api_ptr, \
593 &(Z_DEVICE_STATE_NAME(Z_DEVICE_DT_DEV_NAME \
594 (node_id)).devstate), \
595 __VA_ARGS__)
596
597#else /* CONFIG_SMBUS_STATS */
598
599static inline void smbus_xfer_stats(const struct device *dev, uint8_t sent,
601{
602 ARG_UNUSED(dev);
603 ARG_UNUSED(sent);
604 ARG_UNUSED(recv);
605}
606
607#define SMBUS_DEVICE_DT_DEFINE(node_id, init_fn, pm_device, \
608 data_ptr, cfg_ptr, level, prio, \
609 api_ptr, ...) \
610 DEVICE_DT_DEFINE(node_id, &init_fn, pm_device, \
611 data_ptr, cfg_ptr, level, prio, \
612 api_ptr, __VA_ARGS__)
613
614#endif /* CONFIG_SMBUS_STATS */
615
625#define SMBUS_DEVICE_DT_INST_DEFINE(inst, ...) \
626 SMBUS_DEVICE_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
627
638__syscall int smbus_configure(const struct device *dev, uint32_t dev_config);
639
640static inline int z_impl_smbus_configure(const struct device *dev,
641 uint32_t dev_config)
642{
643 return DEVICE_API_GET(smbus, dev)->configure(dev, dev_config);
644}
645
666__syscall int smbus_get_config(const struct device *dev, uint32_t *dev_config);
667
668static inline int z_impl_smbus_get_config(const struct device *dev,
669 uint32_t *dev_config)
670{
671 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
672
673 if (api->get_config == NULL) {
674 return -ENOSYS;
675 }
676
677 return api->get_config(dev, dev_config);
678}
679
691static inline int smbus_smbalert_set_cb(const struct device *dev,
692 struct smbus_callback *cb)
693{
694 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
695
696 if (api->smbus_smbalert_set_cb == NULL) {
697 return -ENOSYS;
698 }
699
700 return api->smbus_smbalert_set_cb(dev, cb);
701}
702
714static inline int smbus_smbalert_remove_cb(const struct device *dev,
715 struct smbus_callback *cb)
716{
717 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
718
719 if (api->smbus_smbalert_remove_cb == NULL) {
720 return -ENOSYS;
721 }
722
723 return api->smbus_smbalert_remove_cb(dev, cb);
724}
725
737static inline int smbus_host_notify_set_cb(const struct device *dev,
738 struct smbus_callback *cb)
739{
740 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
741
742 if (api->smbus_host_notify_set_cb == NULL) {
743 return -ENOSYS;
744 }
745
746 return api->smbus_host_notify_set_cb(dev, cb);
747}
748
760static inline int smbus_host_notify_remove_cb(const struct device *dev,
761 struct smbus_callback *cb)
762{
763 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
764
765 if (api->smbus_host_notify_remove_cb == NULL) {
766 return -ENOSYS;
767 }
768
769 return api->smbus_host_notify_remove_cb(dev, cb);
770}
771
788__syscall int smbus_quick(const struct device *dev, uint16_t addr,
789 enum smbus_direction direction);
790
791static inline int z_impl_smbus_quick(const struct device *dev, uint16_t addr,
792 enum smbus_direction direction)
793{
794 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
795
796 if (api->smbus_quick == NULL) {
797 return -ENOSYS;
798 }
799
800 if (direction != SMBUS_MSG_READ && direction != SMBUS_MSG_WRITE) {
801 return -EINVAL;
802 }
803
804 return api->smbus_quick(dev, addr, direction);
805}
806
822__syscall int smbus_byte_write(const struct device *dev, uint16_t addr,
823 uint8_t byte);
824
825static inline int z_impl_smbus_byte_write(const struct device *dev,
826 uint16_t addr, uint8_t byte)
827{
828 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
829
830 if (api->smbus_byte_write == NULL) {
831 return -ENOSYS;
832 }
833
834 return api->smbus_byte_write(dev, addr, byte);
835}
836
852__syscall int smbus_byte_read(const struct device *dev, uint16_t addr,
853 uint8_t *byte);
854
855static inline int z_impl_smbus_byte_read(const struct device *dev,
856 uint16_t addr, uint8_t *byte)
857{
858 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
859
860 if (api->smbus_byte_read == NULL) {
861 return -ENOSYS;
862 }
863
864 return api->smbus_byte_read(dev, addr, byte);
865}
866
883__syscall int smbus_byte_data_write(const struct device *dev, uint16_t addr,
884 uint8_t cmd, uint8_t byte);
885
886static inline int z_impl_smbus_byte_data_write(const struct device *dev,
887 uint16_t addr, uint8_t cmd,
888 uint8_t byte)
889{
890 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
891
892 if (api->smbus_byte_data_write == NULL) {
893 return -ENOSYS;
894 }
895
896 return api->smbus_byte_data_write(dev, addr, cmd, byte);
897}
898
915__syscall int smbus_byte_data_read(const struct device *dev, uint16_t addr,
916 uint8_t cmd, uint8_t *byte);
917
918static inline int z_impl_smbus_byte_data_read(const struct device *dev,
919 uint16_t addr, uint8_t cmd,
920 uint8_t *byte)
921{
922 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
923
924 if (api->smbus_byte_data_read == NULL) {
925 return -ENOSYS;
926 }
927
928 return api->smbus_byte_data_read(dev, addr, cmd, byte);
929}
930
947__syscall int smbus_word_data_write(const struct device *dev, uint16_t addr,
948 uint8_t cmd, uint16_t word);
949
950static inline int z_impl_smbus_word_data_write(const struct device *dev,
951 uint16_t addr, uint8_t cmd,
952 uint16_t word)
953{
954 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
955
956 if (api->smbus_word_data_write == NULL) {
957 return -ENOSYS;
958 }
959
960 return api->smbus_word_data_write(dev, addr, cmd, word);
961}
962
979__syscall int smbus_word_data_read(const struct device *dev, uint16_t addr,
980 uint8_t cmd, uint16_t *word);
981
982static inline int z_impl_smbus_word_data_read(const struct device *dev,
983 uint16_t addr, uint8_t cmd,
984 uint16_t *word)
985{
986 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
987
988 if (api->smbus_word_data_read == NULL) {
989 return -ENOSYS;
990 }
991
992 return api->smbus_word_data_read(dev, addr, cmd, word);
993}
994
1013__syscall int smbus_pcall(const struct device *dev, uint16_t addr,
1014 uint8_t cmd, uint16_t send_word, uint16_t *recv_word);
1015
1016static inline int z_impl_smbus_pcall(const struct device *dev,
1017 uint16_t addr, uint8_t cmd,
1018 uint16_t send_word, uint16_t *recv_word)
1019{
1020 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
1021
1022 if (api->smbus_pcall == NULL) {
1023 return -ENOSYS;
1024 }
1025
1026 return api->smbus_pcall(dev, addr, cmd, send_word, recv_word);
1027}
1028
1046__syscall int smbus_block_write(const struct device *dev, uint16_t addr,
1047 uint8_t cmd, uint8_t count, uint8_t *buf);
1048
1049static inline int z_impl_smbus_block_write(const struct device *dev,
1050 uint16_t addr, uint8_t cmd,
1051 uint8_t count, uint8_t *buf)
1052{
1053 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
1054
1055 if (api->smbus_block_write == NULL) {
1056 return -ENOSYS;
1057 }
1058
1059 if (count < 1 || count > SMBUS_BLOCK_BYTES_MAX) {
1060 return -EINVAL;
1061 }
1062
1063 return api->smbus_block_write(dev, addr, cmd, count, buf);
1064}
1065
1083__syscall int smbus_block_read(const struct device *dev, uint16_t addr,
1084 uint8_t cmd, uint8_t *count, uint8_t *buf);
1085
1086static inline int z_impl_smbus_block_read(const struct device *dev,
1087 uint16_t addr, uint8_t cmd,
1088 uint8_t *count, uint8_t *buf)
1089{
1090 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
1091
1092 if (api->smbus_block_read == NULL) {
1093 return -ENOSYS;
1094 }
1095
1096 return api->smbus_block_read(dev, addr, cmd, count, buf);
1097}
1098
1119__syscall int smbus_block_pcall(const struct device *dev,
1120 uint16_t addr, uint8_t cmd,
1121 uint8_t snd_count, uint8_t *snd_buf,
1122 uint8_t *rcv_count, uint8_t *rcv_buf);
1123
1124static inline int z_impl_smbus_block_pcall(const struct device *dev,
1125 uint16_t addr, uint8_t cmd,
1126 uint8_t snd_count, uint8_t *snd_buf,
1127 uint8_t *rcv_count, uint8_t *rcv_buf)
1128{
1129 const struct smbus_driver_api *api = DEVICE_API_GET(smbus, dev);
1130
1131 if (api->smbus_block_pcall == NULL) {
1132 return -ENOSYS;
1133 }
1134
1135 return api->smbus_block_pcall(dev, addr, cmd, snd_count, snd_buf,
1136 rcv_count, rcv_buf);
1137}
1138
1139#ifdef __cplusplus
1140}
1141#endif
1142
1146
1147#include <zephyr/syscalls/smbus.h>
1148
1149#endif /* ZEPHYR_INCLUDE_DRIVERS_SMBUS_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1461
System error numbers.
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:44
static void smbus_xfer_stats(const struct device *dev, uint8_t sent, uint8_t recv)
Updates the SMBus stats.
Definition smbus.h:542
int smbus_byte_data_read(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t *byte)
Perform an SMBus Byte Data Read operation.
int(* smbus_api_byte_write_t)(const struct device *dev, uint16_t addr, uint8_t byte)
Perform an SMBus Byte Write operation.
Definition smbus.h:362
int smbus_pcall(const struct device *dev, uint16_t addr, uint8_t cmd, uint16_t send_word, uint16_t *recv_word)
Perform an SMBus Process Call operation.
int(* smbus_api_word_data_write_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint16_t word)
Perform an SMBus Word Data Write operation.
Definition smbus.h:388
int(* smbus_api_byte_data_read_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t *byte)
Perform an SMBus Byte Data Read operation.
Definition smbus.h:381
static int smbus_host_notify_set_cb(const struct device *dev, struct smbus_callback *cb)
Add Host Notify callback for an SMBus host controller.
Definition smbus.h:737
int smbus_configure(const struct device *dev, uint32_t dev_config)
Configure operation of an SMBus host controller.
int smbus_block_write(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t count, uint8_t *buf)
Perform an SMBus Block Write operation.
#define SMBUS_BLOCK_BYTES_MAX
Maximum number of bytes in SMBus Block protocol.
Definition smbus.h:207
int(* smbus_api_configure_t)(const struct device *dev, uint32_t dev_config)
@def_driverbackendgroup{SMBus,smbus_interface}
Definition smbus.h:344
int smbus_block_read(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t *count, uint8_t *buf)
Perform an SMBus Block Read operation.
int smbus_block_pcall(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t snd_count, uint8_t *snd_buf, uint8_t *rcv_count, uint8_t *rcv_buf)
Perform an SMBus Block Process Call operation.
void(* smbus_callback_handler_t)(const struct device *dev, struct smbus_callback *cb, uint8_t addr)
Define SMBus callback handler function signature.
Definition smbus.h:275
int smbus_word_data_read(const struct device *dev, uint16_t addr, uint8_t cmd, uint16_t *word)
Perform an SMBus Word Data Read operation.
int(* smbus_api_byte_data_write_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t byte)
Perform an SMBus Byte Data Write operation.
Definition smbus.h:374
int smbus_byte_write(const struct device *dev, uint16_t addr, uint8_t byte)
Perform an SMBus Byte Write operation.
int(* smbus_api_host_notify_cb_t)(const struct device *dev, struct smbus_callback *cb)
Add or remove a Host Notify callback.
Definition smbus.h:437
int(* smbus_api_block_pcall_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t send_count, uint8_t *send_buf, uint8_t *recv_count, uint8_t *recv_buf)
Perform an SMBus Block Process Call operation.
Definition smbus.h:423
static int smbus_host_notify_remove_cb(const struct device *dev, struct smbus_callback *cb)
Remove Host Notify callback from an SMBus host controller.
Definition smbus.h:760
int(* smbus_api_quick_t)(const struct device *dev, uint16_t addr, enum smbus_direction)
Perform an SMBus Quick operation.
Definition smbus.h:356
int(* smbus_api_word_data_read_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint16_t *word)
Perform an SMBus Word Data Read operation.
Definition smbus.h:395
int(* smbus_api_smbalert_cb_t)(const struct device *dev, struct smbus_callback *cb)
Add or remove an SMBALERT callback.
Definition smbus.h:431
int smbus_get_config(const struct device *dev, uint32_t *dev_config)
Get configuration of an SMBus host controller.
static int smbus_smbalert_remove_cb(const struct device *dev, struct smbus_callback *cb)
Remove SMBALERT callback from an SMBus host controller.
Definition smbus.h:714
int(* smbus_api_pcall_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint16_t send_word, uint16_t *recv_word)
Perform an SMBus Process Call operation.
Definition smbus.h:402
int smbus_quick(const struct device *dev, uint16_t addr, enum smbus_direction direction)
Perform an SMBus Quick operation.
int(* smbus_api_get_config_t)(const struct device *dev, uint32_t *dev_config)
Get configuration of an SMBus host controller.
Definition smbus.h:350
smbus_direction
SMBus read / write direction.
Definition smbus.h:253
int(* smbus_api_block_write_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t count, uint8_t *buf)
Perform an SMBus Block Write operation.
Definition smbus.h:409
int(* smbus_api_block_read_t)(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t *count, uint8_t *buf)
Perform an SMBus Block Read operation.
Definition smbus.h:416
int smbus_byte_read(const struct device *dev, uint16_t addr, uint8_t *byte)
Perform an SMBus Byte Read operation.
int smbus_byte_data_write(const struct device *dev, uint16_t addr, uint8_t cmd, uint8_t byte)
Perform an SMBus Byte Data Write operation.
int smbus_word_data_write(const struct device *dev, uint16_t addr, uint8_t cmd, uint16_t word)
Perform an SMBus Word Data Write operation.
static int smbus_smbalert_set_cb(const struct device *dev, struct smbus_callback *cb)
Add SMBALERT callback for an SMBus host controller.
Definition smbus.h:691
int(* smbus_api_byte_read_t)(const struct device *dev, uint16_t addr, uint8_t *byte)
Perform an SMBus Byte Read operation.
Definition smbus.h:368
@ SMBUS_MSG_WRITE
Write a message to SMBus peripheral.
Definition smbus.h:255
@ SMBUS_MSG_READ
Read a message from SMBus peripheral.
Definition smbus.h:257
#define STATS_SECT_END
Ends a stats group struct definition.
Definition stats.h:169
#define STATS_NAME(sectname__, entry__)
Add an entry name to a statistics entry name map.
Definition stats.h:519
#define STATS_SECT_ENTRY32(var__)
Declares a 32-bit stat entry inside a group struct.
Definition stats.h:204
#define STATS_NAME_START(sectname__)
Begin a statistics entry name map.
Definition stats.h:510
#define STATS_NAME_END(sectname__)
End a statistics entry name map.
Definition stats.h:527
#define STATS_INC(group__, var__)
Increments a statistic entry.
Definition stats.h:255
#define STATS_INCN(group__, var__, n__)
Increases a statistic entry by the specified amount.
Definition stats.h:243
#define STATS_SECT_START(group__)
Begins a stats group struct definition.
Definition stats.h:181
#define CONTAINER_OF(ptr, type, field)
Get a pointer to a structure containing the element.
Definition util.h:281
#define EINVAL
Invalid argument.
Definition errno.h:61
#define ENOSYS
Function not implemented.
Definition errno.h:83
#define NULL
Definition iar_missing_defs.h:20
state
Definition parser_state.h:29
ssize_t recv(int sock, void *buf, size_t max_len, int flags)
Header file for the single-linked list API.
Statistics.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device dynamic structure (in RAM) per driver instance.
Definition device.h:470
Runtime device structure (in ROM) per driver instance.
Definition device.h:525
struct device_state * state
Address of the common device state.
Definition device.h:533
SMBus callback structure.
Definition smbus.h:288
smbus_callback_handler_t handler
Actual callback function being called when relevant.
Definition smbus.h:293
uint8_t addr
Peripheral device address.
Definition smbus.h:296
sys_snode_t node
This should be used in driver for a callback list management.
Definition smbus.h:290
@driver_ops{SMBus}
Definition smbus.h:443
smbus_api_byte_data_write_t smbus_byte_data_write
@driver_ops_optional Perform an SMBus Byte Data Write operation.
Definition smbus.h:455
smbus_api_get_config_t get_config
@driver_ops_optional Get configuration of an SMBus host controller.
Definition smbus.h:447
smbus_api_word_data_read_t smbus_word_data_read
@driver_ops_optional Perform an SMBus Word Data Read operation.
Definition smbus.h:461
smbus_api_pcall_t smbus_pcall
@driver_ops_optional Perform an SMBus Process Call operation.
Definition smbus.h:463
smbus_api_block_read_t smbus_block_read
@driver_ops_optional Perform an SMBus Block Read operation.
Definition smbus.h:467
smbus_api_host_notify_cb_t smbus_host_notify_remove_cb
@driver_ops_optional Remove Host Notify callback from an SMBus host controller.
Definition smbus.h:477
smbus_api_host_notify_cb_t smbus_host_notify_set_cb
@driver_ops_optional Add Host Notify callback for an SMBus host controller.
Definition smbus.h:475
smbus_api_word_data_write_t smbus_word_data_write
@driver_ops_optional Perform an SMBus Word Data Write operation.
Definition smbus.h:459
smbus_api_block_write_t smbus_block_write
@driver_ops_optional Perform an SMBus Block Write operation.
Definition smbus.h:465
smbus_api_smbalert_cb_t smbus_smbalert_set_cb
@driver_ops_optional Add SMBALERT callback for an SMBus host controller.
Definition smbus.h:471
smbus_api_byte_data_read_t smbus_byte_data_read
@driver_ops_optional Perform an SMBus Byte Data Read operation.
Definition smbus.h:457
smbus_api_smbalert_cb_t smbus_smbalert_remove_cb
@driver_ops_optional Remove SMBALERT callback from an SMBus host controller.
Definition smbus.h:473
smbus_api_byte_write_t smbus_byte_write
@driver_ops_optional Perform an SMBus Byte Write operation.
Definition smbus.h:451
smbus_api_byte_read_t smbus_byte_read
@driver_ops_optional Perform an SMBus Byte Read operation.
Definition smbus.h:453
smbus_api_quick_t smbus_quick
@driver_ops_optional Perform an SMBus Quick operation.
Definition smbus.h:449
smbus_api_block_pcall_t smbus_block_pcall
@driver_ops_optional Perform an SMBus Block Process Call operation.
Definition smbus.h:469
smbus_api_configure_t configure
@driver_ops_mandatory Configure operation of an SMBus host controller.
Definition smbus.h:445
Complete SMBus DT information.
Definition smbus.h:302
uint16_t addr
Address of the SMBus peripheral device.
Definition smbus.h:306
const struct device * bus
SMBus bus.
Definition smbus.h:304