Lines Matching +full:valid +full:- +full:channels
4 * SPDX-License-Identifier: Apache-2.0
43 uint32_t channels; member
83 const struct adc_cc32xx_cfg *config = data->dev->config; in adc_context_start_sampling()
85 data->channels = ctx->sequence.channels; in adc_context_start_sampling()
86 data->repeat_buffer = data->buffer; in adc_context_start_sampling()
89 if (ctx->sequence.channels & BIT(i)) { in adc_context_start_sampling()
90 start_sampling(config->base, s_channel[i]); in adc_context_start_sampling()
102 data->buffer = data->repeat_buffer; in adc_context_update_buffer_pointer()
104 data->buffer += data->active_channels; in adc_context_update_buffer_pointer()
110 struct adc_cc32xx_data *data = dev->data; in adc_cc32xx_init()
111 const struct adc_cc32xx_cfg *config = dev->config; in adc_cc32xx_init()
113 data->dev = dev; in adc_cc32xx_init()
120 MAP_ADCIntDisable(config->base, ch, ISR_MASK); in adc_cc32xx_init()
121 MAP_ADCChannelDisable(config->base, ch); in adc_cc32xx_init()
122 MAP_ADCDMADisable(config->base, ch); in adc_cc32xx_init()
123 MAP_ADCIntClear(config->base, ch, ISR_MASK); in adc_cc32xx_init()
125 MAP_ADCEnable(config->base); in adc_cc32xx_init()
126 config->irq_cfg_func(); in adc_cc32xx_init()
128 adc_context_unlock_unconditionally(&data->ctx); in adc_cc32xx_init()
135 const struct adc_cc32xx_cfg *config = dev->config; in adc_cc32xx_channel_setup()
136 const uint8_t ch = channel_cfg->channel_id; in adc_cc32xx_channel_setup()
140 return -EINVAL; in adc_cc32xx_channel_setup()
143 if (channel_cfg->acquisition_time != ADC_ACQ_TIME_DEFAULT) { in adc_cc32xx_channel_setup()
144 LOG_ERR("Acquisition time is not valid"); in adc_cc32xx_channel_setup()
145 return -EINVAL; in adc_cc32xx_channel_setup()
148 if (channel_cfg->differential) { in adc_cc32xx_channel_setup()
149 LOG_ERR("Differential channels are not supported"); in adc_cc32xx_channel_setup()
150 return -EINVAL; in adc_cc32xx_channel_setup()
153 if (channel_cfg->gain != ADC_GAIN_1) { in adc_cc32xx_channel_setup()
154 LOG_ERR("Gain is not valid"); in adc_cc32xx_channel_setup()
155 return -EINVAL; in adc_cc32xx_channel_setup()
158 if (channel_cfg->reference != ADC_REF_INTERNAL) { in adc_cc32xx_channel_setup()
159 LOG_ERR("Reference is not valid"); in adc_cc32xx_channel_setup()
160 return -EINVAL; in adc_cc32xx_channel_setup()
165 MAP_ADCChannelDisable(config->base, s_channel[ch]); in adc_cc32xx_channel_setup()
166 MAP_ADCIntDisable(config->base, s_channel[ch], ISR_MASK); in adc_cc32xx_channel_setup()
178 struct adc_cc32xx_data *data = dev->data; in cc32xx_read()
182 if (sequence->resolution != 12) { in cc32xx_read()
184 sequence->resolution); in cc32xx_read()
185 return -EINVAL; in cc32xx_read()
188 data->active_channels = 0; in cc32xx_read()
190 if (!(sequence->channels & BIT(i))) { in cc32xx_read()
193 data->offset[i] = data->active_channels++; in cc32xx_read()
195 exp_size = data->active_channels * sizeof(uint16_t); in cc32xx_read()
196 if (sequence->options) { in cc32xx_read()
197 exp_size *= (1 + sequence->options->extra_samplings); in cc32xx_read()
200 if (sequence->buffer_size < exp_size) { in cc32xx_read()
202 exp_size, sequence->buffer_size); in cc32xx_read()
203 return -ENOMEM; in cc32xx_read()
206 data->buffer = sequence->buffer; in cc32xx_read()
208 adc_context_lock(&data->ctx, asynchronous, sig); in cc32xx_read()
209 adc_context_start_read(&data->ctx, sequence); in cc32xx_read()
210 rv = adc_context_wait_for_completion(&data->ctx); in cc32xx_read()
211 adc_context_release(&data->ctx, rv); in cc32xx_read()
232 const struct adc_cc32xx_cfg *config = dev->config; in adc_cc32xx_isr()
233 struct adc_cc32xx_data *data = dev->data; in adc_cc32xx_isr()
235 unsigned long mask = MAP_ADCIntStatus(config->base, chan); in adc_cc32xx_isr()
239 MAP_ADCIntClear(config->base, chan, mask); in adc_cc32xx_isr()
245 while (MAP_ADCFIFOLvlGet(config->base, chan)) { in adc_cc32xx_isr()
246 rv += (MAP_ADCFIFORead(config->base, chan) >> 2) & 0x0FFF; in adc_cc32xx_isr()
250 *(data->buffer + data->offset[no]) = rv / cnt; in adc_cc32xx_isr()
251 data->channels &= ~BIT(no); in adc_cc32xx_isr()
253 MAP_ADCIntDisable(config->base, chan, ISR_MASK); in adc_cc32xx_isr()
254 MAP_ADCChannelDisable(config->base, chan); in adc_cc32xx_isr()
257 if (!data->channels) { in adc_cc32xx_isr()
258 adc_context_on_sampling_done(&data->ctx, dev); in adc_cc32xx_isr()