7
7
#define ADC_CONTEXT_USES_KERNEL_TIMER
8
8
#include "adc_context.h"
9
9
#include <nrfx_saadc.h>
10
- #include <zephyr/dt-bindings/adc/nrf-saadc-v3.h>
11
- #include <zephyr/dt-bindings/adc/nrf-saadc-nrf54l.h>
12
- #include <zephyr/dt-bindings/adc/nrf-saadc-haltium.h>
10
+ #include <zephyr/dt-bindings/adc/nrf-saadc.h>
13
11
#include <zephyr/linker/devicetree_regions.h>
14
12
#include <zephyr/logging/log.h>
15
13
#include <zephyr/irq.h>
@@ -18,85 +16,23 @@ LOG_MODULE_REGISTER(adc_nrfx_saadc, CONFIG_ADC_LOG_LEVEL);
18
16
19
17
#define DT_DRV_COMPAT nordic_nrf_saadc
20
18
21
- #if (NRF_SAADC_HAS_AIN_AS_PIN )
22
-
23
- #if defined(CONFIG_NRF_PLATFORM_HALTIUM )
24
- static const uint32_t saadc_psels [NRF_SAADC_AIN13 + 1 ] = {
25
- [NRF_SAADC_AIN0 ] = NRF_PIN_PORT_TO_PIN_NUMBER (0U , 1 ),
26
- [NRF_SAADC_AIN1 ] = NRF_PIN_PORT_TO_PIN_NUMBER (1U , 1 ),
27
- [NRF_SAADC_AIN2 ] = NRF_PIN_PORT_TO_PIN_NUMBER (2U , 1 ),
28
- [NRF_SAADC_AIN3 ] = NRF_PIN_PORT_TO_PIN_NUMBER (3U , 1 ),
29
- [NRF_SAADC_AIN4 ] = NRF_PIN_PORT_TO_PIN_NUMBER (4U , 1 ),
30
- [NRF_SAADC_AIN5 ] = NRF_PIN_PORT_TO_PIN_NUMBER (5U , 1 ),
31
- [NRF_SAADC_AIN6 ] = NRF_PIN_PORT_TO_PIN_NUMBER (6U , 1 ),
32
- [NRF_SAADC_AIN7 ] = NRF_PIN_PORT_TO_PIN_NUMBER (7U , 1 ),
33
- [NRF_SAADC_AIN8 ] = NRF_PIN_PORT_TO_PIN_NUMBER (0U , 9 ),
34
- [NRF_SAADC_AIN9 ] = NRF_PIN_PORT_TO_PIN_NUMBER (1U , 9 ),
35
- [NRF_SAADC_AIN10 ] = NRF_PIN_PORT_TO_PIN_NUMBER (2U , 9 ),
36
- [NRF_SAADC_AIN11 ] = NRF_PIN_PORT_TO_PIN_NUMBER (3U , 9 ),
37
- [NRF_SAADC_AIN12 ] = NRF_PIN_PORT_TO_PIN_NUMBER (4U , 9 ),
38
- [NRF_SAADC_AIN13 ] = NRF_PIN_PORT_TO_PIN_NUMBER (5U , 9 ),
39
- };
40
- #elif defined(CONFIG_SOC_NRF54L05 ) || defined(CONFIG_SOC_NRF54L10 ) || defined(CONFIG_SOC_NRF54L15 )
41
- static const uint32_t saadc_psels [NRF_SAADC_DVDD + 1 ] = {
42
- [NRF_SAADC_AIN0 ] = NRF_PIN_PORT_TO_PIN_NUMBER (4U , 1 ),
43
- [NRF_SAADC_AIN1 ] = NRF_PIN_PORT_TO_PIN_NUMBER (5U , 1 ),
44
- [NRF_SAADC_AIN2 ] = NRF_PIN_PORT_TO_PIN_NUMBER (6U , 1 ),
45
- [NRF_SAADC_AIN3 ] = NRF_PIN_PORT_TO_PIN_NUMBER (7U , 1 ),
46
- [NRF_SAADC_AIN4 ] = NRF_PIN_PORT_TO_PIN_NUMBER (11U , 1 ),
47
- [NRF_SAADC_AIN5 ] = NRF_PIN_PORT_TO_PIN_NUMBER (12U , 1 ),
48
- [NRF_SAADC_AIN6 ] = NRF_PIN_PORT_TO_PIN_NUMBER (13U , 1 ),
49
- [NRF_SAADC_AIN7 ] = NRF_PIN_PORT_TO_PIN_NUMBER (14U , 1 ),
50
- [NRF_SAADC_VDD ] = NRF_SAADC_INPUT_VDD ,
51
- [NRF_SAADC_AVDD ] = NRF_SAADC_INPUT_AVDD ,
52
- [NRF_SAADC_DVDD ] = NRF_SAADC_INPUT_DVDD ,
53
- };
54
- #elif defined(NRF54LM20A_ENGA_XXAA )
55
- static const uint32_t saadc_psels [NRF_SAADC_DVDD + 1 ] = {
56
- [NRF_SAADC_AIN0 ] = NRF_PIN_PORT_TO_PIN_NUMBER (0U , 1 ),
57
- [NRF_SAADC_AIN1 ] = NRF_PIN_PORT_TO_PIN_NUMBER (31U , 1 ),
58
- [NRF_SAADC_AIN2 ] = NRF_PIN_PORT_TO_PIN_NUMBER (30U , 1 ),
59
- [NRF_SAADC_AIN3 ] = NRF_PIN_PORT_TO_PIN_NUMBER (29U , 1 ),
60
- [NRF_SAADC_AIN4 ] = NRF_PIN_PORT_TO_PIN_NUMBER (6U , 1 ),
61
- [NRF_SAADC_AIN5 ] = NRF_PIN_PORT_TO_PIN_NUMBER (5U , 1 ),
62
- [NRF_SAADC_AIN6 ] = NRF_PIN_PORT_TO_PIN_NUMBER (4U , 1 ),
63
- [NRF_SAADC_AIN7 ] = NRF_PIN_PORT_TO_PIN_NUMBER (3U , 1 ),
64
- [NRF_SAADC_VDD ] = NRF_SAADC_INPUT_VDD ,
65
- [NRF_SAADC_AVDD ] = NRF_SAADC_INPUT_AVDD ,
66
- [NRF_SAADC_DVDD ] = NRF_SAADC_INPUT_DVDD ,
67
- };
68
- #elif defined(NRF54LV10A_ENGA_XXAA )
69
- static const uint32_t saadc_psels [NRF_SAADC_DVDD + 1 ] = {
70
- [NRF_SAADC_AIN0 ] = NRF_PIN_PORT_TO_PIN_NUMBER (0U , 1 ),
71
- [NRF_SAADC_AIN1 ] = NRF_PIN_PORT_TO_PIN_NUMBER (1U , 1 ),
72
- [NRF_SAADC_AIN2 ] = NRF_PIN_PORT_TO_PIN_NUMBER (2U , 1 ),
73
- [NRF_SAADC_AIN3 ] = NRF_PIN_PORT_TO_PIN_NUMBER (3U , 1 ),
74
- [NRF_SAADC_AIN4 ] = NRF_PIN_PORT_TO_PIN_NUMBER (7U , 1 ),
75
- [NRF_SAADC_AIN5 ] = NRF_PIN_PORT_TO_PIN_NUMBER (10U , 1 ),
76
- [NRF_SAADC_AIN6 ] = NRF_PIN_PORT_TO_PIN_NUMBER (11U , 1 ),
77
- [NRF_SAADC_AIN7 ] = NRF_PIN_PORT_TO_PIN_NUMBER (12U , 1 ),
78
- [NRF_SAADC_VDD ] = NRF_SAADC_INPUT_VDD ,
79
- [NRF_SAADC_DVDD ] = NRF_SAADC_INPUT_DVDD ,
80
- };
81
- #endif
82
-
83
- #else
84
- BUILD_ASSERT ((NRF_SAADC_AIN0 == NRF_SAADC_INPUT_AIN0 ) &&
85
- (NRF_SAADC_AIN1 == NRF_SAADC_INPUT_AIN1 ) &&
86
- (NRF_SAADC_AIN2 == NRF_SAADC_INPUT_AIN2 ) &&
87
- (NRF_SAADC_AIN3 == NRF_SAADC_INPUT_AIN3 ) &&
88
- (NRF_SAADC_AIN4 == NRF_SAADC_INPUT_AIN4 ) &&
89
- (NRF_SAADC_AIN5 == NRF_SAADC_INPUT_AIN5 ) &&
90
- (NRF_SAADC_AIN6 == NRF_SAADC_INPUT_AIN6 ) &&
91
- (NRF_SAADC_AIN7 == NRF_SAADC_INPUT_AIN7 ) &&
19
+ #if (NRF_SAADC_HAS_AIN_AS_PIN == 0 )
20
+ BUILD_ASSERT ((NRF_SAADC_AIN0 == NRFX_SAADC_AIN0 ) &&
21
+ (NRF_SAADC_AIN1 == NRFX_SAADC_AIN1 ) &&
22
+ (NRF_SAADC_AIN2 == NRFX_SAADC_AIN2 ) &&
23
+ (NRF_SAADC_AIN3 == NRFX_SAADC_AIN3 ) &&
24
+ (NRF_SAADC_AIN4 == NRFX_SAADC_AIN4 ) &&
25
+ (NRF_SAADC_AIN5 == NRFX_SAADC_AIN5 ) &&
26
+ (NRF_SAADC_AIN6 == NRFX_SAADC_AIN6 ) &&
27
+ (NRF_SAADC_AIN7 == NRFX_SAADC_AIN7 ) &&
92
28
#if defined(SAADC_CH_PSELP_PSELP_VDDHDIV5 )
93
- (NRF_SAADC_VDDHDIV5 == NRF_SAADC_INPUT_VDDHDIV5 ) &&
29
+ (NRF_SAADC_VDDHDIV5 == NRFX_SAADC_VDDHDIV5 ) &&
94
30
#endif
95
31
#if defined(SAADC_CH_PSELP_PSELP_VDD )
96
- (NRF_SAADC_VDD == NRF_SAADC_INPUT_VDD ) &&
32
+ (NRF_SAADC_VDD == NRFX_SAADC_VDD ) &&
97
33
#endif
98
34
1 ,
99
- "Definitions from nrf-adc .h do not match those from nrf_saadc .h" );
35
+ "Definitions from nrf-saadc .h do not match those from nrfx_analog_common .h" );
100
36
#endif
101
37
102
38
#if defined(CONFIG_NRF_PLATFORM_HALTIUM )
@@ -192,34 +128,17 @@ static int input_assign(nrf_saadc_input_t *pin_p,
192
128
nrf_saadc_input_t * pin_n ,
193
129
const struct adc_channel_cfg * channel_cfg )
194
130
{
195
- # if (NRF_SAADC_HAS_AIN_AS_PIN )
196
- if ( channel_cfg -> input_positive > ARRAY_SIZE ( saadc_psels ) ||
197
- channel_cfg -> input_positive < NRF_SAADC_AIN0 ) {
198
- LOG_ERR ("Invalid analog positive input number: %d" , channel_cfg -> input_positive );
131
+ if (nrfx_saadc_psels_are_valid ( channel_cfg -> input_positive ,
132
+ channel_cfg -> input_negative ,
133
+ channel_cfg -> differential ) != NRFX_SUCCESS ) {
134
+ LOG_ERR ("Invalid ADC input pin configuration" );
199
135
return - EINVAL ;
200
136
}
201
137
202
- * pin_p = saadc_psels [channel_cfg -> input_positive ];
203
-
204
- if (channel_cfg -> differential ) {
205
- if (channel_cfg -> input_negative > ARRAY_SIZE (saadc_psels ) ||
206
- channel_cfg -> input_negative < NRF_SAADC_AIN0 ||
207
- (IS_ENABLED (CONFIG_NRF_PLATFORM_HALTIUM ) &&
208
- (channel_cfg -> input_positive > NRF_SAADC_AIN7 ) !=
209
- (channel_cfg -> input_negative > NRF_SAADC_AIN7 ))) {
210
- LOG_ERR ("Invalid analog negative input number: %d" ,
211
- channel_cfg -> input_negative );
212
- return - EINVAL ;
213
- }
214
- * pin_n = saadc_psels [channel_cfg -> input_negative ];
215
- } else {
216
- * pin_n = NRF_SAADC_INPUT_DISABLED ;
217
- }
218
- #else
219
- * pin_p = channel_cfg -> input_positive ;
220
- * pin_n = channel_cfg -> differential ? channel_cfg -> input_negative
138
+ * pin_p = nrfx_saadc_psel_to_nrf (channel_cfg -> input_positive );
139
+ * pin_n = channel_cfg -> differential ? nrfx_saadc_psel_to_nrf (channel_cfg -> input_negative )
221
140
: NRF_SAADC_INPUT_DISABLED ;
222
- #endif
141
+
223
142
LOG_DBG ("ADC positive input: %d" , * pin_p );
224
143
LOG_DBG ("ADC negative input: %d" , * pin_n );
225
144
@@ -679,37 +598,8 @@ static DEVICE_API(adc, adc_nrfx_driver_api) = {
679
598
#ifdef CONFIG_ADC_ASYNC
680
599
.read_async = adc_nrfx_read_async ,
681
600
#endif
682
- #if defined(NRF54LV10A_ENGA_XXAA )
683
- .ref_internal = 1300 ,
684
- #elif defined(CONFIG_SOC_COMPATIBLE_NRF54LX )
685
- .ref_internal = 900 ,
686
- #elif defined(CONFIG_NRF_PLATFORM_HALTIUM )
687
- .ref_internal = 1024 ,
688
- #else
689
- .ref_internal = 600 ,
690
- #endif
601
+ .ref_internal = NRFX_SAADC_REF_INTERNAL_VALUE ,
691
602
};
692
603
693
- #if defined(CONFIG_NRF_PLATFORM_HALTIUM )
694
- /* AIN8-AIN14 inputs are on 3v3 GPIO port and they cannot be mixed with other
695
- * analog inputs (from 1v8 ports) in differential mode.
696
- */
697
- #define CH_IS_3V3 (val ) (val >= NRF_SAADC_AIN8)
698
-
699
- #define MIXED_3V3_1V8_INPUTS (node ) \
700
- (DT_NODE_HAS_PROP(node, zephyr_input_negative) && \
701
- (CH_IS_3V3(DT_PROP_OR(node, zephyr_input_negative, 0)) != \
702
- CH_IS_3V3(DT_PROP_OR(node, zephyr_input_positive, 0))))
703
- #else
704
- #define MIXED_3V3_1V8_INPUTS (node ) false
705
- #endif
706
-
707
- #define VALIDATE_CHANNEL_CONFIG (node ) \
708
- BUILD_ASSERT(MIXED_3V3_1V8_INPUTS(node) == false, \
709
- "1v8 inputs cannot be mixed with 3v3 inputs");
710
-
711
- /* Validate configuration of all channels. */
712
- DT_FOREACH_CHILD (DT_DRV_INST (0 ), VALIDATE_CHANNEL_CONFIG )
713
-
714
604
DEVICE_DT_INST_DEFINE (0 , init_saadc , NULL , NULL , NULL , POST_KERNEL ,
715
605
CONFIG_ADC_INIT_PRIORITY , & adc_nrfx_driver_api );
0 commit comments