Line data Source code
1 1 : /* 2 : * Copyright 2022 The Chromium OS Authors 3 : * SPDX-License-Identifier: Apache-2.0 4 : */ 5 : 6 : /** 7 : * @file 8 : * @brief USB-C VBUS device APIs 9 : * 10 : * This file contains the USB-C VBUS device APIs. 11 : * All USB-C VBUS measurement and control device drivers should 12 : * implement the APIs described in this file. 13 : */ 14 : 15 : #ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_VBUS_H_ 16 : #define ZEPHYR_INCLUDE_DRIVERS_USBC_VBUS_H_ 17 : 18 : /** 19 : * @brief USB-C VBUS API 20 : * @defgroup usbc_vbus_api USB-C VBUS API 21 : * @since 3.3 22 : * @version 0.1.0 23 : * @ingroup io_interfaces 24 : * @{ 25 : */ 26 : 27 : #include <zephyr/types.h> 28 : #include <zephyr/device.h> 29 : #include <zephyr/drivers/usb_c/usbc_tc.h> 30 : 31 : #ifdef __cplusplus 32 : extern "C" { 33 : #endif 34 : 35 0 : __subsystem struct usbc_vbus_driver_api { 36 0 : bool (*check_level)(const struct device *dev, enum tc_vbus_level level); 37 0 : int (*measure)(const struct device *dev, int *vbus_meas); 38 0 : int (*discharge)(const struct device *dev, bool enable); 39 0 : int (*enable)(const struct device *dev, bool enable); 40 : }; 41 : 42 : /** 43 : * @brief Checks if VBUS is at a particular level 44 : * 45 : * @param dev Runtime device structure 46 : * @param level The level voltage to check against 47 : * 48 : * @retval true if VBUS is at the level voltage 49 : * @retval false if VBUS is not at that level voltage 50 : */ 51 1 : static inline bool usbc_vbus_check_level(const struct device *dev, enum tc_vbus_level level) 52 : { 53 : const struct usbc_vbus_driver_api *api = (const struct usbc_vbus_driver_api *)dev->api; 54 : 55 : return api->check_level(dev, level); 56 : } 57 : 58 : /** 59 : * @brief Reads and returns VBUS measured in mV 60 : * 61 : * @param dev Runtime device structure 62 : * @param meas pointer where the measured VBUS voltage is stored 63 : * 64 : * @retval 0 on success 65 : * @retval -EIO on failure 66 : */ 67 1 : static inline int usbc_vbus_measure(const struct device *dev, int *meas) 68 : { 69 : const struct usbc_vbus_driver_api *api = (const struct usbc_vbus_driver_api *)dev->api; 70 : 71 : return api->measure(dev, meas); 72 : } 73 : 74 : /** 75 : * @brief Controls a pin that discharges VBUS 76 : * 77 : * @param dev Runtime device structure 78 : * @param enable Discharge VBUS when true 79 : * 80 : * @retval 0 on success 81 : * @retval -EIO on failure 82 : * @retval -ENOENT if discharge pin isn't defined 83 : */ 84 1 : static inline int usbc_vbus_discharge(const struct device *dev, bool enable) 85 : { 86 : const struct usbc_vbus_driver_api *api = (const struct usbc_vbus_driver_api *)dev->api; 87 : 88 : return api->discharge(dev, enable); 89 : } 90 : 91 : /** 92 : * @brief Controls a pin that enables VBUS measurements 93 : * 94 : * @param dev Runtime device structure 95 : * @param enable enable VBUS measurements when true 96 : * 97 : * @retval 0 on success 98 : * @retval -EIO on failure 99 : * @retval -ENOENT if enable pin isn't defined 100 : */ 101 1 : static inline int usbc_vbus_enable(const struct device *dev, bool enable) 102 : { 103 : const struct usbc_vbus_driver_api *api = (const struct usbc_vbus_driver_api *)dev->api; 104 : 105 : return api->enable(dev, enable); 106 : } 107 : 108 : /** 109 : * @} 110 : */ 111 : 112 : #ifdef __cplusplus 113 : } 114 : #endif 115 : 116 : #endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_VBUS_H_ */