Lines Matching +full:cycle +full:- +full:timing
4 * SPDX-License-Identifier: Apache-2.0
44 const struct max11102_17_config *config = dev->config; in max11102_17_switch_channel()
45 struct max11102_17_data *data = dev->data; in max11102_17_switch_channel()
58 memcpy(&bus, &config->bus, sizeof(bus)); in max11102_17_switch_channel()
67 gpio_pin_set_dt(&config->gpio_chsel, data->current_channel_id); in max11102_17_switch_channel()
69 result = spi_read_dt(&config->bus, &rx); in max11102_17_switch_channel()
81 const struct max11102_17_config *config = dev->config; in max11102_17_channel_setup()
83 LOG_DBG("read from ADC channel %i", channel_cfg->channel_id); in max11102_17_channel_setup()
85 if (channel_cfg->reference != ADC_REF_EXTERNAL0) { in max11102_17_channel_setup()
86 LOG_ERR("invalid reference %i", channel_cfg->reference); in max11102_17_channel_setup()
87 return -EINVAL; in max11102_17_channel_setup()
90 if (channel_cfg->gain != ADC_GAIN_1) { in max11102_17_channel_setup()
91 LOG_ERR("invalid gain %i", channel_cfg->gain); in max11102_17_channel_setup()
92 return -EINVAL; in max11102_17_channel_setup()
95 if (channel_cfg->acquisition_time != ADC_ACQ_TIME_DEFAULT) { in max11102_17_channel_setup()
96 LOG_ERR("invalid acquisition time %i", channel_cfg->acquisition_time); in max11102_17_channel_setup()
97 return -EINVAL; in max11102_17_channel_setup()
100 if (channel_cfg->differential != 0) { in max11102_17_channel_setup()
102 return -EINVAL; in max11102_17_channel_setup()
105 if (channel_cfg->channel_id > config->channel_count) { in max11102_17_channel_setup()
106 LOG_ERR("invalid channel selection %i", channel_cfg->channel_id); in max11102_17_channel_setup()
107 return -EINVAL; in max11102_17_channel_setup()
117 if (sequence->options) { in max11102_17_validate_buffer_size()
118 necessary *= (1 + sequence->options->extra_samplings); in max11102_17_validate_buffer_size()
121 if (sequence->buffer_size < necessary) { in max11102_17_validate_buffer_size()
122 return -ENOMEM; in max11102_17_validate_buffer_size()
131 const struct max11102_17_config *config = dev->config; in max11102_17_validate_sequence()
132 struct max11102_17_data *data = dev->data; in max11102_17_validate_sequence()
134 const size_t channel_maximum = 8*sizeof(sequence->channels); in max11102_17_validate_sequence()
136 if (sequence->resolution != config->resolution) { in max11102_17_validate_sequence()
138 return -EINVAL; in max11102_17_validate_sequence()
142 if ((BIT(i) & sequence->channels) == 0) { in max11102_17_validate_sequence()
146 if (i > config->channel_count) { in max11102_17_validate_sequence()
148 return -EINVAL; in max11102_17_validate_sequence()
152 data->sequence_channel_id = i; in max11102_17_validate_sequence()
157 return -EINVAL; in max11102_17_validate_sequence()
162 return -EINVAL; in max11102_17_validate_sequence()
165 if (sequence->oversampling) { in max11102_17_validate_sequence()
167 return -EINVAL; in max11102_17_validate_sequence()
178 data->buffer = data->buffer_ptr; in adc_context_update_buffer_pointer()
186 data->buffer_ptr = data->buffer; in adc_context_start_sampling()
187 k_sem_give(&data->acquire_signal); in adc_context_start_sampling()
194 struct max11102_17_data *data = dev->data; in max11102_17_adc_start_read()
203 data->buffer = sequence->buffer; in max11102_17_adc_start_read()
205 adc_context_start_read(&data->ctx, sequence); in max11102_17_adc_start_read()
208 result = adc_context_wait_for_completion(&data->ctx); in max11102_17_adc_start_read()
216 const struct max11102_17_config *config = dev->config; in max11102_17_read_sample()
218 size_t trailing_bits = 15 - config->resolution; in max11102_17_read_sample()
229 result = spi_read_dt(&config->bus, &rx); in max11102_17_read_sample()
240 *sample = *sample & GENMASK(config->resolution, 0); in max11102_17_read_sample()
249 struct max11102_17_data *data = dev->data; in max11102_17_adc_perform_read()
251 k_sem_take(&data->acquire_signal, K_FOREVER); in max11102_17_adc_perform_read()
253 if (data->sequence_channel_id != data->current_channel_id) { in max11102_17_adc_perform_read()
255 data->current_channel_id = data->sequence_channel_id; in max11102_17_adc_perform_read()
259 result = max11102_17_read_sample(dev, data->buffer); in max11102_17_adc_perform_read()
262 adc_context_complete(&data->ctx, result); in max11102_17_adc_perform_read()
266 data->buffer++; in max11102_17_adc_perform_read()
268 adc_context_on_sampling_done(&data->ctx, dev); in max11102_17_adc_perform_read()
278 struct max11102_17_data *data = dev->data; in max11102_17_adc_read_async()
280 adc_context_lock(&data->ctx, true, async); in max11102_17_adc_read_async()
282 adc_context_release(&data->ctx, result); in max11102_17_adc_read_async()
290 struct max11102_17_data *data = dev->data; in max11102_17_read()
292 adc_context_lock(&data->ctx, false, NULL); in max11102_17_read()
294 adc_context_release(&data->ctx, result); in max11102_17_read()
303 struct max11102_17_data *data = dev->data; in max11102_17_read()
305 adc_context_lock(&data->ctx, false, NULL); in max11102_17_read()
308 while (result == 0 && k_sem_take(&data->ctx.sync, K_NO_WAIT) != 0) { in max11102_17_read()
312 adc_context_release(&data->ctx, result); in max11102_17_read()
333 const struct max11102_17_config *config = dev->config; in max11102_17_init()
334 struct max11102_17_data *data = dev->data; in max11102_17_init()
337 adc_context_init(&data->ctx); in max11102_17_init()
339 k_sem_init(&data->acquire_signal, 0, 1); in max11102_17_init()
341 if (!spi_is_ready_dt(&config->bus)) { in max11102_17_init()
343 return -ENODEV; in max11102_17_init()
346 switch (config->channel_count) { in max11102_17_init()
348 if (config->gpio_chsel.port != NULL) { in max11102_17_init()
350 return -EINVAL; in max11102_17_init()
354 if (config->gpio_chsel.port == NULL) { in max11102_17_init()
356 return -EINVAL; in max11102_17_init()
359 result = gpio_pin_configure_dt(&config->gpio_chsel, GPIO_OUTPUT_INACTIVE); in max11102_17_init()
366 LOG_ERR("invalid number of channels (%i)", config->channel_count); in max11102_17_init()
367 return -EINVAL; in max11102_17_init()
370 data->current_channel_id = 0; in max11102_17_init()
374 &data->thread, data->stack, CONFIG_ADC_MAX11102_17_ACQUISITION_THREAD_STACK_SIZE, in max11102_17_init()
380 /* power up time is one conversion cycle */ in max11102_17_init()
383 LOG_ERR("unable to read dummy sample for power up timing"); in max11102_17_init()
387 adc_context_unlock_unconditionally(&data->ctx); in max11102_17_init()