Lines Matching +full:diff +full:- +full:channels
35 #define STX104_IN_CHAN(chan, diff) { \ argument
43 .differential = diff \
56 * struct stx104_iio - IIO device private data structure
57 * @chan_out_states: channels' output states
66 * struct stx104_gpio - GPIO device private data structure
90 adc_config = inb(priv->base + 11); in stx104_read_raw()
96 if (chan->output) { in stx104_read_raw()
97 *val = priv->chan_out_states[chan->channel]; in stx104_read_raw()
102 outb(chan->channel | (chan->channel << 4), priv->base + 2); in stx104_read_raw()
105 outb(0, priv->base); in stx104_read_raw()
106 while (inb(priv->base + 8) & BIT(7)); in stx104_read_raw()
108 *val = inw(priv->base); in stx104_read_raw()
112 adc_config = inb(priv->base + 11); in stx104_read_raw()
115 *val = -32768 * adbu; in stx104_read_raw()
119 adc_config = inb(priv->base + 11); in stx104_read_raw()
124 *val2 = 15 - adbu + gain; in stx104_read_raw()
128 return -EINVAL; in stx104_read_raw()
141 outb(0, priv->base + 11); in stx104_write_raw()
144 outb(1, priv->base + 11); in stx104_write_raw()
147 outb(2, priv->base + 11); in stx104_write_raw()
150 outb(3, priv->base + 11); in stx104_write_raw()
153 return -EINVAL; in stx104_write_raw()
158 if (chan->output) { in stx104_write_raw()
159 /* DAC can only accept up to a 16-bit value */ in stx104_write_raw()
161 return -EINVAL; in stx104_write_raw()
163 priv->chan_out_states[chan->channel] = val; in stx104_write_raw()
164 outw(val, priv->base + 4 + 2 * chan->channel); in stx104_write_raw()
168 return -EINVAL; in stx104_write_raw()
171 return -EINVAL; in stx104_write_raw()
179 /* single-ended input channels configuration */
189 /* differential input channels configuration */
200 /* GPIO 0-3 are input only, while the rest are output only */ in stx104_gpio_get_direction()
211 return -EINVAL; in stx104_gpio_direction_input()
220 return -EINVAL; in stx104_gpio_direction_output()
222 chip->set(chip, offset, value); in stx104_gpio_direction_output()
231 return -EINVAL; in stx104_gpio_get()
233 return !!(inb(stx104gpio->base) & BIT(offset)); in stx104_gpio_get()
241 *bits = inb(stx104gpio->base); in stx104_gpio_get_multiple()
256 spin_lock_irqsave(&stx104gpio->lock, flags); in stx104_gpio_set()
259 stx104gpio->out_state |= mask; in stx104_gpio_set()
261 stx104gpio->out_state &= ~mask; in stx104_gpio_set()
263 outb(stx104gpio->out_state, stx104gpio->base); in stx104_gpio_set()
265 spin_unlock_irqrestore(&stx104gpio->lock, flags); in stx104_gpio_set()
286 spin_lock_irqsave(&stx104gpio->lock, flags); in stx104_gpio_set_multiple()
288 stx104gpio->out_state &= ~*mask; in stx104_gpio_set_multiple()
289 stx104gpio->out_state |= *mask & *bits; in stx104_gpio_set_multiple()
290 outb(stx104gpio->out_state, stx104gpio->base); in stx104_gpio_set_multiple()
292 spin_unlock_irqrestore(&stx104gpio->lock, flags); in stx104_gpio_set_multiple()
304 return -ENOMEM; in stx104_probe()
308 return -ENOMEM; in stx104_probe()
312 dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n", in stx104_probe()
314 return -EBUSY; in stx104_probe()
317 indio_dev->info = &stx104_info; in stx104_probe()
318 indio_dev->modes = INDIO_DIRECT_MODE; in stx104_probe()
322 indio_dev->num_channels = ARRAY_SIZE(stx104_channels_diff); in stx104_probe()
323 indio_dev->channels = stx104_channels_diff; in stx104_probe()
325 indio_dev->num_channels = ARRAY_SIZE(stx104_channels_sing); in stx104_probe()
326 indio_dev->channels = stx104_channels_sing; in stx104_probe()
329 indio_dev->name = dev_name(dev); in stx104_probe()
330 indio_dev->dev.parent = dev; in stx104_probe()
333 priv->base = base[id]; in stx104_probe()
345 stx104gpio->chip.label = dev_name(dev); in stx104_probe()
346 stx104gpio->chip.parent = dev; in stx104_probe()
347 stx104gpio->chip.owner = THIS_MODULE; in stx104_probe()
348 stx104gpio->chip.base = -1; in stx104_probe()
349 stx104gpio->chip.ngpio = STX104_NGPIO; in stx104_probe()
350 stx104gpio->chip.names = stx104_names; in stx104_probe()
351 stx104gpio->chip.get_direction = stx104_gpio_get_direction; in stx104_probe()
352 stx104gpio->chip.direction_input = stx104_gpio_direction_input; in stx104_probe()
353 stx104gpio->chip.direction_output = stx104_gpio_direction_output; in stx104_probe()
354 stx104gpio->chip.get = stx104_gpio_get; in stx104_probe()
355 stx104gpio->chip.get_multiple = stx104_gpio_get_multiple; in stx104_probe()
356 stx104gpio->chip.set = stx104_gpio_set; in stx104_probe()
357 stx104gpio->chip.set_multiple = stx104_gpio_set_multiple; in stx104_probe()
358 stx104gpio->base = base[id] + 3; in stx104_probe()
359 stx104gpio->out_state = 0x0; in stx104_probe()
361 spin_lock_init(&stx104gpio->lock); in stx104_probe()
363 err = devm_gpiochip_add_data(dev, &stx104gpio->chip, stx104gpio); in stx104_probe()