Lines Matching +full:single +full:- +full:channel

1 // SPDX-License-Identifier: GPL-2.0+
10 #include <sandbox-adc.h>
13 * struct sandbox_adc_priv - sandbox ADC device's operation status and data
15 * @conversion_status - conversion status: ACTIVE (started) / INACTIVE (stopped)
16 * @conversion_mode - conversion mode: single or multi-channel
17 * @active_channel - active channel number, valid for single channel mode
18 * data[] - channels data
27 int sandbox_adc_start_channel(struct udevice *dev, int channel) in sandbox_adc_start_channel() argument
31 /* Set single-channel mode */ in sandbox_adc_start_channel()
32 priv->conversion_mode = SANDBOX_ADC_MODE_SINGLE_CHANNEL; in sandbox_adc_start_channel()
33 /* Select channel */ in sandbox_adc_start_channel()
34 priv->active_channel_mask = 1 << channel; in sandbox_adc_start_channel()
36 priv->conversion_status = SANDBOX_ADC_ACTIVE; in sandbox_adc_start_channel()
45 /* Set single-channel mode */ in sandbox_adc_start_channels()
46 priv->conversion_mode = SANDBOX_ADC_MODE_MULTI_CHANNEL; in sandbox_adc_start_channels()
47 /* Select channel */ in sandbox_adc_start_channels()
48 priv->active_channel_mask = channel_mask; in sandbox_adc_start_channels()
50 priv->conversion_status = SANDBOX_ADC_ACTIVE; in sandbox_adc_start_channels()
55 int sandbox_adc_channel_data(struct udevice *dev, int channel, in sandbox_adc_channel_data() argument
60 /* For single-channel conversion mode, check if channel was selected */ in sandbox_adc_channel_data()
61 if ((priv->conversion_mode == SANDBOX_ADC_MODE_SINGLE_CHANNEL) && in sandbox_adc_channel_data()
62 !(priv->active_channel_mask & (1 << channel))) { in sandbox_adc_channel_data()
63 pr_err("Request for an inactive channel!"); in sandbox_adc_channel_data()
64 return -EINVAL; in sandbox_adc_channel_data()
68 if (priv->conversion_status == SANDBOX_ADC_INACTIVE) in sandbox_adc_channel_data()
69 return -EIO; in sandbox_adc_channel_data()
71 *data = priv->data[channel]; in sandbox_adc_channel_data()
82 /* Return error for single-channel conversion mode */ in sandbox_adc_channels_data()
83 if (priv->conversion_mode == SANDBOX_ADC_MODE_SINGLE_CHANNEL) { in sandbox_adc_channels_data()
84 pr_err("ADC in single-channel mode!"); in sandbox_adc_channels_data()
85 return -EPERM; in sandbox_adc_channels_data()
87 /* Check channel selection */ in sandbox_adc_channels_data()
88 if (!(priv->active_channel_mask & channel_mask)) { in sandbox_adc_channels_data()
89 pr_err("Request for an inactive channel!"); in sandbox_adc_channels_data()
90 return -EINVAL; in sandbox_adc_channels_data()
93 if (priv->conversion_status == SANDBOX_ADC_INACTIVE) in sandbox_adc_channels_data()
94 return -EIO; in sandbox_adc_channels_data()
100 channels->data = priv->data[i]; in sandbox_adc_channels_data()
101 channels->id = i; in sandbox_adc_channels_data()
113 priv->conversion_status = SANDBOX_ADC_INACTIVE; in sandbox_adc_stop()
123 priv->conversion_status = SANDBOX_ADC_INACTIVE; in sandbox_adc_probe()
124 /* Set single-channel mode */ in sandbox_adc_probe()
125 priv->conversion_mode = SANDBOX_ADC_MODE_SINGLE_CHANNEL; in sandbox_adc_probe()
127 priv->active_channel_mask = 0; in sandbox_adc_probe()
130 priv->data[0] = SANDBOX_ADC_CHANNEL0_DATA; in sandbox_adc_probe()
131 priv->data[1] = SANDBOX_ADC_CHANNEL1_DATA; in sandbox_adc_probe()
132 priv->data[2] = SANDBOX_ADC_CHANNEL2_DATA; in sandbox_adc_probe()
133 priv->data[3] = SANDBOX_ADC_CHANNEL3_DATA; in sandbox_adc_probe()
142 uc_pdata->data_mask = SANDBOX_ADC_DATA_MASK; in sandbox_adc_ofdata_to_platdata()
143 uc_pdata->data_format = ADC_DATA_FORMAT_BIN; in sandbox_adc_ofdata_to_platdata()
144 uc_pdata->data_timeout_us = 0; in sandbox_adc_ofdata_to_platdata()
146 /* Mask available channel bits: [0:3] */ in sandbox_adc_ofdata_to_platdata()
147 uc_pdata->channel_mask = (1 << SANDBOX_ADC_CHANNELS) - 1; in sandbox_adc_ofdata_to_platdata()
166 .name = "sandbox-adc",