Lines Matching +full:id +full:- +full:gpios

1 // SPDX-License-Identifier: GPL-2.0
5 * Author: Ziyuan Xu <xzy.xu@rock-chips.com>
17 * id: the index of analog switch inputs
19 * gpio_mask: set the value of switch-gpios with mask, that
20 * makes the 'id' connect to 'saradc_chan_id'.
23 u32 id; member
29 .id = _index, \
46 * gpios: pointer of digital enable input gpios
54 struct gpio_descs *gpios; member
68 chan_data = &muxadc->data->chans[index]; in gpio_muxadc_chan_read_by_index()
69 for (i = 0; i < muxadc->gpios->ndescs; i++) { in gpio_muxadc_chan_read_by_index()
70 struct gpio_desc *gpiod = muxadc->gpios->desc[i]; in gpio_muxadc_chan_read_by_index()
71 int gpio_val = chan_data->gpio_mask & BIT(i) ? 1 : 0; in gpio_muxadc_chan_read_by_index()
76 saradc_chan_id = chan_data->saradc_chan_id; in gpio_muxadc_chan_read_by_index()
77 saradc_chan = &muxadc->adc_chans[saradc_chan_id]; in gpio_muxadc_chan_read_by_index()
91 chan->channel, val); in gpio_muxadc_read_raw()
94 return -EINVAL; in gpio_muxadc_read_raw()
156 struct device *dev = &pdev->dev; in gpio_muxadc_probe()
157 struct device_node *np = pdev->dev.of_node; in gpio_muxadc_probe()
162 return -ENOMEM; in gpio_muxadc_probe()
169 return -ENODEV; in gpio_muxadc_probe()
171 muxadc->data = match->data; in gpio_muxadc_probe()
173 muxadc->gpios = devm_gpiod_get_array(dev, "switch", GPIOD_OUT_LOW); in gpio_muxadc_probe()
174 if (IS_ERR(muxadc->gpios)) { in gpio_muxadc_probe()
175 dev_err(dev, "property of switch-gpios not specified\n"); in gpio_muxadc_probe()
176 return PTR_ERR(muxadc->gpios); in gpio_muxadc_probe()
179 muxadc->adc_chans = iio_channel_get_all(dev); in gpio_muxadc_probe()
180 if (IS_ERR(muxadc->adc_chans)) in gpio_muxadc_probe()
181 return PTR_ERR(muxadc->adc_chans); in gpio_muxadc_probe()
184 * comparison with chan_data->saradc_nr_chans. Otherwise it in gpio_muxadc_probe()
187 while (muxadc->adc_chans[nr_adc_chans].indio_dev) in gpio_muxadc_probe()
189 if (muxadc->data->saradc_nr_chans != nr_adc_chans) { in gpio_muxadc_probe()
190 dev_err(dev, "the number of io-channels is mismatch\n"); in gpio_muxadc_probe()
191 return -EINVAL; in gpio_muxadc_probe()
194 muxadc->nr_chans = of_property_count_strings(np, "labels"); in gpio_muxadc_probe()
195 if (muxadc->nr_chans != muxadc->data->nr_chans) { in gpio_muxadc_probe()
197 muxadc->nr_chans); in gpio_muxadc_probe()
198 return -EINVAL; in gpio_muxadc_probe()
201 muxadc->muxchans = devm_kcalloc(dev, muxadc->nr_chans, in gpio_muxadc_probe()
204 if (!muxadc->muxchans) in gpio_muxadc_probe()
205 return -ENOMEM; in gpio_muxadc_probe()
207 for (i = 0; i < muxadc->nr_chans; i++) { in gpio_muxadc_probe()
212 muxadc->muxchans[i].type = IIO_VOLTAGE; in gpio_muxadc_probe()
213 muxadc->muxchans[i].channel = i; in gpio_muxadc_probe()
214 muxadc->muxchans[i].info_mask_separate = BIT(IIO_CHAN_INFO_RAW); in gpio_muxadc_probe()
216 &muxadc->muxchans[i].extend_name); in gpio_muxadc_probe()
219 indio_dev->name = dev_name(dev); in gpio_muxadc_probe()
220 indio_dev->dev.parent = dev; in gpio_muxadc_probe()
221 indio_dev->dev.of_node = dev->of_node; in gpio_muxadc_probe()
222 indio_dev->info = &gpio_muxadc_iio_info; in gpio_muxadc_probe()
223 indio_dev->modes = INDIO_DIRECT_MODE; in gpio_muxadc_probe()
224 indio_dev->channels = muxadc->muxchans; in gpio_muxadc_probe()
225 indio_dev->num_channels = muxadc->nr_chans; in gpio_muxadc_probe()
242 .name = "gpio-muxadc",
249 MODULE_AUTHOR("Ziyuan Xu <xzy.xu@rock-chips.com>");