Line data Source code
1 0 : /* 2 : * Copyright (c) 2024 Nordic Semiconductor ASA 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_COMP_NRF_COMP_H_ 8 : #define ZEPHYR_INCLUDE_DRIVERS_COMP_NRF_COMP_H_ 9 : 10 : #include <zephyr/drivers/comparator.h> 11 : 12 : #ifdef __cplusplus 13 : extern "C" { 14 : #endif 15 : 16 : /** Positive input selection */ 17 1 : enum comp_nrf_comp_psel { 18 : /** AIN0 external input */ 19 : COMP_NRF_COMP_PSEL_AIN0, 20 : /** AIN1 external input */ 21 : COMP_NRF_COMP_PSEL_AIN1, 22 : /** AIN2 external input */ 23 : COMP_NRF_COMP_PSEL_AIN2, 24 : /** AIN3 external input */ 25 : COMP_NRF_COMP_PSEL_AIN3, 26 : /** AIN4 external input */ 27 : COMP_NRF_COMP_PSEL_AIN4, 28 : /** AIN5 external input */ 29 : COMP_NRF_COMP_PSEL_AIN5, 30 : /** AIN6 external input */ 31 : COMP_NRF_COMP_PSEL_AIN6, 32 : /** AIN7 external input */ 33 : COMP_NRF_COMP_PSEL_AIN7, 34 : /** VDD / 2 */ 35 : COMP_NRF_COMP_PSEL_VDD_DIV2, 36 : /** VDDH / 5 */ 37 : COMP_NRF_COMP_PSEL_VDDH_DIV5, 38 : }; 39 : 40 : /** External reference selection */ 41 1 : enum comp_nrf_comp_extrefsel { 42 : /** AIN0 external input */ 43 : COMP_NRF_COMP_EXTREFSEL_AIN0, 44 : /** AIN1 external input */ 45 : COMP_NRF_COMP_EXTREFSEL_AIN1, 46 : /** AIN2 external input */ 47 : COMP_NRF_COMP_EXTREFSEL_AIN2, 48 : /** AIN3 external input */ 49 : COMP_NRF_COMP_EXTREFSEL_AIN3, 50 : /** AIN4 external input */ 51 : COMP_NRF_COMP_EXTREFSEL_AIN4, 52 : /** AIN5 external input */ 53 : COMP_NRF_COMP_EXTREFSEL_AIN5, 54 : /** AIN6 external input */ 55 : COMP_NRF_COMP_EXTREFSEL_AIN6, 56 : /** AIN7 external input */ 57 : COMP_NRF_COMP_EXTREFSEL_AIN7, 58 : }; 59 : 60 : /** Reference selection */ 61 1 : enum comp_nrf_comp_refsel { 62 : /** Internal 1.2V reference */ 63 : COMP_NRF_COMP_REFSEL_INT_1V2, 64 : /** Internal 1.8V reference */ 65 : COMP_NRF_COMP_REFSEL_INT_1V8, 66 : /** Internal 2.4V reference */ 67 : COMP_NRF_COMP_REFSEL_INT_2V4, 68 : /** AVDD 1.8V reference */ 69 : COMP_NRF_COMP_REFSEL_AVDDAO1V8, 70 : /** VDD reference */ 71 : COMP_NRF_COMP_REFSEL_VDD, 72 : /** Use external analog reference */ 73 : COMP_NRF_COMP_REFSEL_AREF, 74 : }; 75 : 76 : /** Speed mode selection */ 77 1 : enum comp_nrf_comp_sp_mode { 78 : /** Low-power mode */ 79 : COMP_NRF_COMP_SP_MODE_LOW, 80 : /** Normal mode */ 81 : COMP_NRF_COMP_SP_MODE_NORMAL, 82 : /** High-speed mode */ 83 : COMP_NRF_COMP_SP_MODE_HIGH, 84 : }; 85 : 86 : /** Current source configuration */ 87 1 : enum comp_nrf_comp_isource { 88 : /** Current source disabled */ 89 : COMP_NRF_COMP_ISOURCE_DISABLED, 90 : /** 2.5uA current source enabled */ 91 : COMP_NRF_COMP_ISOURCE_2UA5, 92 : /** 5uA current source enabled */ 93 : COMP_NRF_COMP_ISOURCE_5UA, 94 : /** 10uA current source enabled */ 95 : COMP_NRF_COMP_ISOURCE_10UA, 96 : }; 97 : 98 : /** 99 : * @brief Single-ended mode configuration structure 100 : * 101 : * @note extrefsel is only used if refsel == COMP_NRF_COMP_REFSEL_AREF 102 : * @note Hysteresis down in volts = ((th_down + 1) / 64) * ref 103 : * @note Hysteresis up in volts = ((th_up + 1) / 64) * ref 104 : */ 105 1 : struct comp_nrf_comp_se_config { 106 : /** Positive input selection */ 107 1 : enum comp_nrf_comp_psel psel; 108 : /** Speed mode selection */ 109 1 : enum comp_nrf_comp_sp_mode sp_mode; 110 : /** Current source configuration */ 111 1 : enum comp_nrf_comp_isource isource; 112 : /** External reference selection */ 113 1 : enum comp_nrf_comp_extrefsel extrefsel; 114 : /** Reference selection */ 115 1 : enum comp_nrf_comp_refsel refsel; 116 : /** Hysteresis down threshold configuration */ 117 1 : uint8_t th_down; 118 : /** Hysteresis up threshold configuration */ 119 1 : uint8_t th_up; 120 : }; 121 : 122 : /** 123 : * @brief Configure comparator in single-ended mode 124 : * 125 : * @param dev Comparator device instance 126 : * @param config Single-ended mode configuration 127 : * 128 : * @retval 0 if successful 129 : * @retval negative errno-code otherwise 130 : */ 131 1 : int comp_nrf_comp_configure_se(const struct device *dev, 132 : const struct comp_nrf_comp_se_config *config); 133 : 134 : /** Differential mode configuration structure */ 135 1 : struct comp_nrf_comp_diff_config { 136 : /** Positive input selection */ 137 1 : enum comp_nrf_comp_psel psel; 138 : /** Speed mode selection */ 139 1 : enum comp_nrf_comp_sp_mode sp_mode; 140 : /** Current source configuration */ 141 1 : enum comp_nrf_comp_isource isource; 142 : /** Negative input selection */ 143 1 : enum comp_nrf_comp_extrefsel extrefsel; 144 : /** Hysteresis configuration */ 145 1 : bool enable_hyst; 146 : }; 147 : 148 : /** 149 : * @brief Configure comparator in differential mode 150 : * 151 : * @param dev Comparator device instance 152 : * @param config Differential mode configuration 153 : * 154 : * @retval 0 if successful 155 : * @retval negative errno-code otherwise 156 : */ 157 1 : int comp_nrf_comp_configure_diff(const struct device *dev, 158 : const struct comp_nrf_comp_diff_config *config); 159 : 160 : #ifdef __cplusplus 161 : } 162 : #endif 163 : 164 : #endif /* ZEPHYR_INCLUDE_DRIVERS_COMP_NRF_COMP_H_ */