Line data Source code
1 1 : /*
2 : * Copyright (c) 2023, Meta
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Public APIs for the Device Multiplexer driver
10 : * @ingroup demux_interface
11 : */
12 :
13 : #ifndef INCLUDE_ZEPHYR_DRIVERS_MISC_DEVMUX_H_
14 : #define INCLUDE_ZEPHYR_DRIVERS_MISC_DEVMUX_H_
15 :
16 : #include <stdint.h>
17 :
18 : #include <zephyr/device.h>
19 : #include <zephyr/kernel.h>
20 :
21 : #ifdef __cplusplus
22 : extern "C" {
23 : #endif
24 :
25 : /**
26 : * @brief Interfaces for device multiplexers.
27 : * @defgroup demux_interface Devmux
28 : * @ingroup misc_interfaces
29 : *
30 : * @details
31 : * Devmux operates as a device multiplexer, forwarding the characteristics of
32 : * the selected device.
33 : *
34 : * ```
35 : * +----------+ +----------+
36 : * | devmux | | devmux |
37 : * | | | |
38 : * dev0 | | dev0 | |
39 : * +----------> \ | +----------> |
40 : * | \ | | |
41 : * dev1 | \ | dev0 dev1 | | dev2
42 : * +----------> O +----------> +----------> O +---------->
43 : * | | | / |
44 : * dev2 | | dev2 | / |
45 : * +----------> | +----------> / |
46 : * | | | |
47 : * | | | |
48 : * | | | |
49 : * +-----^----+ +-----^----+
50 : * | |
51 : * select == 0 | select == 2 |
52 : * +--------------+ +---------------+
53 : * ```
54 : * @{
55 : */
56 :
57 : /**
58 : * @brief Get the current selection of a devmux device.
59 : *
60 : * Return the index of the currently selected device.
61 : *
62 : * @param dev the devmux device
63 : * @return The index (>= 0) of the currently active multiplexed device on success
64 : * @retval -EINVAL If @p dev is invalid
65 : */
66 1 : __syscall int devmux_select_get(const struct device *dev);
67 :
68 : /**
69 : * @brief Set the selection of a devmux device.
70 : *
71 : * Select the device at @p index.
72 : *
73 : * @param[in] dev the devmux device
74 : * @param index the index representing the desired selection
75 : * @retval 0 On success
76 : * @retval -EINVAL If @p dev is invalid
77 : * @retval -ENODEV If the multiplexed device at @p index is not ready
78 : */
79 1 : __syscall int devmux_select_set(struct device *dev, size_t index);
80 :
81 : /**
82 : * @}
83 : */
84 :
85 : #ifdef __cplusplus
86 : }
87 : #endif
88 :
89 : #include <zephyr/syscalls/devmux.h>
90 :
91 : #endif /* INCLUDE_ZEPHYR_DRIVERS_MISC_DEVMUX_H_ */
|