1 /* 2 * Copyright (c) 2022 Vestas Wind Systems A/S 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DRIVERS_CAN_TRANSCEIVER_H_ 8 #define ZEPHYR_INCLUDE_DRIVERS_CAN_TRANSCEIVER_H_ 9 10 #include <zephyr/drivers/can.h> 11 #include <zephyr/device.h> 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 /** 18 * @brief CAN Transceiver Driver APIs 19 * @defgroup can_transceiver CAN Transceiver 20 * @since 3.1 21 * @version 0.1.0 22 * @ingroup io_interfaces 23 * @{ 24 */ 25 26 /** 27 * @cond INTERNAL_HIDDEN 28 * 29 * For internal driver use only, skip these in public documentation. 30 */ 31 32 /** 33 * @brief Callback API upon enabling CAN transceiver 34 * See @a can_transceiver_enable() for argument description 35 */ 36 typedef int (*can_transceiver_enable_t)(const struct device *dev, can_mode_t mode); 37 38 /** 39 * @brief Callback API upon disabling CAN transceiver 40 * See @a can_transceiver_disable() for argument description 41 */ 42 typedef int (*can_transceiver_disable_t)(const struct device *dev); 43 44 __subsystem struct can_transceiver_driver_api { 45 can_transceiver_enable_t enable; 46 can_transceiver_disable_t disable; 47 }; 48 49 /** @endcond */ 50 51 /** 52 * @brief Enable CAN transceiver 53 * 54 * Enable the CAN transceiver. 55 * 56 * @note The CAN transceiver is controlled by the CAN controller driver and 57 * should not normally be controlled by the application. 58 * 59 * @see can_start() 60 * 61 * @param dev Pointer to the device structure for the driver instance. 62 * @param mode Operation mode. 63 * @retval 0 If successful. 64 * @retval -EIO General input/output error, failed to enable device. 65 */ can_transceiver_enable(const struct device * dev,can_mode_t mode)66static inline int can_transceiver_enable(const struct device *dev, can_mode_t mode) 67 { 68 return DEVICE_API_GET(can_transceiver, dev)->enable(dev, mode); 69 } 70 71 /** 72 * @brief Disable CAN transceiver 73 * 74 * Disable the CAN transceiver. 75 76 * @note The CAN transceiver is controlled by the CAN controller driver and 77 * should not normally be controlled by the application. 78 * 79 * @see can_stop() 80 * 81 * @param dev Pointer to the device structure for the driver instance. 82 * @retval 0 If successful. 83 * @retval -EIO General input/output error, failed to disable device. 84 */ can_transceiver_disable(const struct device * dev)85static inline int can_transceiver_disable(const struct device *dev) 86 { 87 return DEVICE_API_GET(can_transceiver, dev)->disable(dev); 88 } 89 90 /** 91 * @} 92 */ 93 94 #ifdef __cplusplus 95 } 96 #endif 97 98 #endif /* ZEPHYR_INCLUDE_DRIVERS_CAN_TRANSCEIVER_H_ */ 99