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