Lines Matching refs:mux

16 #include <linux/mux/consumer.h>
29 struct mux {
40 static int iio_mux_select(struct mux *mux, int idx)
42 struct mux_child *child = &mux->child[idx];
43 struct iio_chan_spec const *chan = &mux->chan[idx];
47 ret = mux_control_select_delay(mux->control, chan->channel,
48 mux->delay_us);
50 mux->cached_state = -1;
54 if (mux->cached_state == chan->channel)
67 ret = iio_write_channel_ext_info(mux->parent, attr,
72 mux_control_deselect(mux->control);
73 mux->cached_state = -1;
78 mux->cached_state = chan->channel;
83 static void iio_mux_deselect(struct mux *mux)
85 mux_control_deselect(mux->control);
92 struct mux *mux = iio_priv(indio_dev);
93 int idx = chan - mux->chan;
96 ret = iio_mux_select(mux, idx);
102 ret = iio_read_channel_raw(mux->parent, val);
106 ret = iio_read_channel_scale(mux->parent, val, val2);
113 iio_mux_deselect(mux);
123 struct mux *mux = iio_priv(indio_dev);
124 int idx = chan - mux->chan;
127 ret = iio_mux_select(mux, idx);
134 ret = iio_read_avail_channel_raw(mux->parent, vals, length);
141 iio_mux_deselect(mux);
150 struct mux *mux = iio_priv(indio_dev);
151 int idx = chan - mux->chan;
154 ret = iio_mux_select(mux, idx);
160 ret = iio_write_channel_raw(mux->parent, val);
167 iio_mux_deselect(mux);
181 struct mux *mux = iio_priv(indio_dev);
182 int idx = chan - mux->chan;
185 ret = iio_mux_select(mux, idx);
189 ret = iio_read_channel_ext_info(mux->parent,
190 mux->ext_info[private].name,
193 iio_mux_deselect(mux);
203 struct mux *mux = iio_priv(indio_dev);
204 int idx = chan - mux->chan;
211 ret = iio_mux_select(mux, idx);
217 iio_mux_deselect(mux);
223 ret = iio_write_channel_ext_info(mux->parent,
224 mux->ext_info[private].name,
227 iio_mux_deselect(mux);
232 devm_kfree(dev, mux->child[idx].ext_info_cache[private].data);
233 mux->child[idx].ext_info_cache[private].data = new;
234 mux->child[idx].ext_info_cache[private].size = len;
236 iio_mux_deselect(mux);
241 static int mux_configure_channel(struct device *dev, struct mux *mux,
244 struct mux_child *child = &mux->child[idx];
245 struct iio_chan_spec *chan = &mux->chan[idx];
246 struct iio_chan_spec const *pchan = mux->parent->channel;
255 chan->ext_info = mux->ext_info;
257 ret = iio_get_channel_type(mux->parent, &chan->type);
271 if (state >= mux_control_states(mux->control)) {
278 num_ext_info = iio_get_channel_ext_info_count(mux->parent);
299 ret = iio_read_channel_ext_info(mux->parent,
300 mux->ext_info[i].name,
333 struct mux *mux;
351 sizeof_ext_info *= sizeof(*mux->ext_info);
376 sizeof_priv = sizeof(*mux);
377 sizeof_priv += sizeof(*mux->child) * children;
378 sizeof_priv += sizeof(*mux->chan) * children;
385 mux = iio_priv(indio_dev);
386 mux->child = (struct mux_child *)(mux + 1);
387 mux->chan = (struct iio_chan_spec *)(mux->child + children);
391 mux->parent = parent;
392 mux->cached_state = -1;
394 mux->delay_us = 0;
395 device_property_read_u32(dev, "settle-time-us", &mux->delay_us);
400 indio_dev->channels = mux->chan;
403 mux->ext_info = devm_kmemdup(dev,
406 if (!mux->ext_info)
409 for (i = 0; mux->ext_info[i].name; ++i) {
411 mux->ext_info[i].read = mux_read_ext_info;
413 mux->ext_info[i].write = mux_write_ext_info;
414 mux->ext_info[i].private = i;
418 mux->control = devm_mux_control_get(dev, NULL);
419 if (IS_ERR(mux->control))
420 return dev_err_probe(dev, PTR_ERR(mux->control),
421 "failed to get control-mux\n");
428 ret = mux_configure_channel(dev, mux, state, labels[state], i++);
443 { .compatible = "io-channel-mux" },
451 .name = "iio-mux",