@@ -32,8 +32,13 @@ LOG_MODULE_REGISTER(ifx_cat1_adc, CONFIG_ADC_LOG_LEVEL);
32
32
#define ADC_CAT1_EVENTS_MASK (CYHAL_ADC_EOS | CYHAL_ADC_ASYNC_READ_COMPLETE)
33
33
34
34
#define ADC_CAT1_DEFAULT_ACQUISITION_NS (1000u)
35
+ #if defined(CONFIG_SOC_FAMILY_INFINEON_CAT1A )
35
36
#define ADC_CAT1_RESOLUTION (12u)
36
37
#define ADC_CAT1_REF_INTERNAL_MV (1200u)
38
+ #elif defined(CONFIG_SOC_FAMILY_INFINEON_CAT1B )
39
+ #define ADC_CAT1_RESOLUTION (16u)
40
+ #define ADC_CAT1_REF_INTERNAL_MV (3600u)
41
+ #endif
37
42
38
43
#if defined(CONFIG_SOC_FAMILY_INFINEON_CAT1B )
39
44
#define IFX_ADC_NUM_CHANNELS \
@@ -60,10 +65,12 @@ struct ifx_cat1_adc_config {
60
65
uint8_t irq_priority ;
61
66
};
62
67
63
- static void _cyhal_adc_event_callback (void * callback_arg , cyhal_adc_event_t event )
68
+ #ifdef CONFIG_SOC_FAMILY_INFINEON_CAT1B
69
+ static void ifx_cat1_adc_worker (struct k_work * adc_worker_thread )
64
70
{
65
- const struct device * dev = (const struct device * ) callback_arg ;
66
- struct ifx_cat1_adc_data * data = dev -> data ;
71
+ struct ifx_cat1_adc_data * data =
72
+ CONTAINER_OF (adc_worker_thread , struct ifx_cat1_adc_data , adc_worker_thread );
73
+
67
74
uint32_t channels = data -> channels ;
68
75
int32_t result ;
69
76
uint32_t channel_id ;
@@ -72,26 +79,20 @@ static void _cyhal_adc_event_callback(void *callback_arg, cyhal_adc_event_t even
72
79
channel_id = find_lsb_set (channels ) - 1 ;
73
80
channels &= ~BIT (channel_id );
74
81
75
- result = Cy_SAR_GetResult32 (data -> adc_chan_obj [channel_id ].adc -> base ,
76
- data -> adc_chan_obj [channel_id ].channel_idx );
82
+ result = cyhal_adc_read (& data -> adc_chan_obj [channel_id ]);
77
83
/* Legacy API for BWC. Convert from signed to unsigned by adding 0x800 to
78
84
* convert the lowest signed 12-bit number to 0x0.
79
85
*/
80
86
* data -> buffer = (uint16_t )(result + 0x800 );
81
87
data -> buffer ++ ;
82
88
}
83
-
84
- adc_context_on_sampling_done (& data -> ctx , dev );
85
-
86
- LOG_DBG ("%s ISR triggered." , dev -> name );
89
+ adc_context_on_sampling_done (& data -> ctx , data -> dev );
87
90
}
88
-
89
- #ifdef CONFIG_SOC_FAMILY_INFINEON_CAT1B
90
- static void ifx_cat1_adc_worker (struct k_work * adc_worker_thread )
91
+ #else
92
+ static void _cyhal_adc_event_callback (void * callback_arg , cyhal_adc_event_t event )
91
93
{
92
- struct ifx_cat1_adc_data * data =
93
- CONTAINER_OF (adc_worker_thread , struct ifx_cat1_adc_data , adc_worker_thread );
94
-
94
+ const struct device * dev = (const struct device * ) callback_arg ;
95
+ struct ifx_cat1_adc_data * data = dev -> data ;
95
96
uint32_t channels = data -> channels ;
96
97
int32_t result ;
97
98
uint32_t channel_id ;
@@ -100,14 +101,18 @@ static void ifx_cat1_adc_worker(struct k_work *adc_worker_thread)
100
101
channel_id = find_lsb_set (channels ) - 1 ;
101
102
channels &= ~BIT (channel_id );
102
103
103
- result = cyhal_adc_read (& data -> adc_chan_obj [channel_id ]);
104
+ result = Cy_SAR_GetResult32 (data -> adc_chan_obj [channel_id ].adc -> base ,
105
+ data -> adc_chan_obj [channel_id ].channel_idx );
104
106
/* Legacy API for BWC. Convert from signed to unsigned by adding 0x800 to
105
107
* convert the lowest signed 12-bit number to 0x0.
106
108
*/
107
109
* data -> buffer = (uint16_t )(result + 0x800 );
108
110
data -> buffer ++ ;
109
111
}
110
- adc_context_on_sampling_done (& data -> ctx , data -> dev );
112
+
113
+ adc_context_on_sampling_done (& data -> ctx , dev );
114
+
115
+ LOG_DBG ("%s ISR triggered." , dev -> name );
111
116
}
112
117
#endif
113
118
@@ -300,7 +305,10 @@ static int ifx_cat1_adc_init(const struct device *dev)
300
305
/* Enable ADC Interrupt */
301
306
cyhal_adc_enable_event (& data -> adc_obj , (cyhal_adc_event_t )ADC_CAT1_EVENTS_MASK ,
302
307
config -> irq_priority , true);
308
+
309
+ #ifndef CONFIG_SOC_FAMILY_INFINEON_CAT1B
303
310
cyhal_adc_register_callback (& data -> adc_obj , _cyhal_adc_event_callback , (void * ) dev );
311
+ #endif
304
312
305
313
adc_context_unlock_unconditionally (& data -> ctx );
306
314
0 commit comments