Lines Matching +full:valid +full:- +full:channels

5  * SPDX-License-Identifier: Apache-2.0
43 uint32_t channels; member
54 struct ifx_cat1_adc_data *data = dev->data; in _cyhal_adc_event_callback()
55 uint32_t channels = data->channels; in _cyhal_adc_event_callback() local
59 while (channels != 0) { in _cyhal_adc_event_callback()
60 channel_id = find_lsb_set(channels) - 1; in _cyhal_adc_event_callback()
61 channels &= ~BIT(channel_id); in _cyhal_adc_event_callback()
63 result = Cy_SAR_GetResult32(data->adc_chan_obj[channel_id].adc->base, in _cyhal_adc_event_callback()
64 data->adc_chan_obj[channel_id].channel_idx); in _cyhal_adc_event_callback()
66 * convert the lowest signed 12-bit number to 0x0. in _cyhal_adc_event_callback()
68 *data->buffer = (uint16_t)(result + 0x800); in _cyhal_adc_event_callback()
69 data->buffer++; in _cyhal_adc_event_callback()
72 adc_context_on_sampling_done(&data->ctx, dev); in _cyhal_adc_event_callback()
74 LOG_DBG("%s ISR triggered.", dev->name); in _cyhal_adc_event_callback()
81 data->repeat_buffer = data->buffer; in adc_context_start_sampling()
83 Cy_SAR_StartConvert(data->adc_obj.base, CY_SAR_START_CONVERT_SINGLE_SHOT); in adc_context_start_sampling()
92 data->buffer = data->repeat_buffer; in adc_context_update_buffer_pointer()
99 struct ifx_cat1_adc_data *data = dev->data; in ifx_cat1_adc_channel_setup()
102 cyhal_gpio_t vplus = CYHAL_GET_GPIO(_ADCSAR_PORT, channel_cfg->input_positive); in ifx_cat1_adc_channel_setup()
103 cyhal_gpio_t vminus = channel_cfg->differential ? in ifx_cat1_adc_channel_setup()
104 CYHAL_GET_GPIO(_ADCSAR_PORT, channel_cfg->input_negative) : in ifx_cat1_adc_channel_setup()
108 if (channel_cfg->reference != ADC_REF_INTERNAL) { in ifx_cat1_adc_channel_setup()
109 LOG_ERR("Selected ADC reference is not valid"); in ifx_cat1_adc_channel_setup()
110 return -EINVAL; in ifx_cat1_adc_channel_setup()
113 if (channel_cfg->gain != ADC_GAIN_1) { in ifx_cat1_adc_channel_setup()
114 LOG_ERR("Selected ADC gain is not valid"); in ifx_cat1_adc_channel_setup()
115 return -EINVAL; in ifx_cat1_adc_channel_setup()
118 if (channel_cfg->acquisition_time != ADC_ACQ_TIME_DEFAULT) { in ifx_cat1_adc_channel_setup()
119 switch (ADC_ACQ_TIME_UNIT(channel_cfg->acquisition_time)) { in ifx_cat1_adc_channel_setup()
121 acquisition_ns = ADC_ACQ_TIME_VALUE(channel_cfg->acquisition_time) * 1000; in ifx_cat1_adc_channel_setup()
124 acquisition_ns = ADC_ACQ_TIME_VALUE(channel_cfg->acquisition_time); in ifx_cat1_adc_channel_setup()
127 LOG_ERR("Selected ADC acquisition time units is not valid"); in ifx_cat1_adc_channel_setup()
128 return -EINVAL; in ifx_cat1_adc_channel_setup()
143 cyhal_adc_channel_free(&data->adc_chan_obj[channel_cfg->channel_id]); in ifx_cat1_adc_channel_setup()
144 result = cyhal_adc_channel_init_diff(&data->adc_chan_obj[channel_cfg->channel_id], in ifx_cat1_adc_channel_setup()
145 &data->adc_obj, vplus, vminus, &channel_config); in ifx_cat1_adc_channel_setup()
148 return -EIO; in ifx_cat1_adc_channel_setup()
151 data->channels_mask |= BIT(channel_cfg->channel_id); in ifx_cat1_adc_channel_setup()
162 if (sequence->channels & BIT(i)) { in validate_buffer_size()
169 if (sequence->options) { in validate_buffer_size()
170 total_buffer_size *= (1 + sequence->options->extra_samplings); in validate_buffer_size()
173 if (sequence->buffer_size < total_buffer_size) { in validate_buffer_size()
174 return -ENOMEM; in validate_buffer_size()
183 struct ifx_cat1_adc_data *data = dev->data; in start_read()
184 uint32_t channels = sequence->channels; in start_read() local
185 uint32_t unconfigured_channels = channels & ~data->channels_mask; in start_read()
187 if (sequence->resolution != ADC_CAT1_RESOLUTION) { in start_read()
188 LOG_ERR("Invalid ADC resolution (%d)", sequence->resolution); in start_read()
189 return -EINVAL; in start_read()
194 return -EINVAL; in start_read()
197 if (sequence->oversampling) { in start_read()
199 return -ENOTSUP; in start_read()
209 data->channels = channels; in start_read()
210 data->buffer = sequence->buffer; in start_read()
211 adc_context_start_read(&data->ctx, sequence); in start_read()
213 return adc_context_wait_for_completion(&data->ctx); in start_read()
220 struct ifx_cat1_adc_data *data = dev->data; in ifx_cat1_adc_read()
222 adc_context_lock(&data->ctx, false, NULL); in ifx_cat1_adc_read()
224 adc_context_release(&data->ctx, ret); in ifx_cat1_adc_read()
234 struct ifx_cat1_adc_data *data = dev->data; in ifx_cat1_adc_read_async()
236 adc_context_lock(&data->ctx, true, async); in ifx_cat1_adc_read_async()
238 adc_context_release(&data->ctx, ret); in ifx_cat1_adc_read_async()
246 struct ifx_cat1_adc_data *data = dev->data; in ifx_cat1_adc_init()
247 const struct ifx_cat1_adc_config *config = dev->config; in ifx_cat1_adc_init()
250 data->dev = dev; in ifx_cat1_adc_init()
253 result = cyhal_adc_init(&data->adc_obj, CYHAL_GET_GPIO(_ADCSAR_PORT, 0), NULL); in ifx_cat1_adc_init()
256 return -EIO; in ifx_cat1_adc_init()
260 cyhal_adc_enable_event(&data->adc_obj, (cyhal_adc_event_t)ADC_CAT1_EVENTS_MASK, in ifx_cat1_adc_init()
261 config->irq_priority, true); in ifx_cat1_adc_init()
262 cyhal_adc_register_callback(&data->adc_obj, _cyhal_adc_event_callback, (void *) dev); in ifx_cat1_adc_init()
264 adc_context_unlock_unconditionally(&data->ctx); in ifx_cat1_adc_init()