• Home
  • Raw
  • Download

Lines Matching +full:function +full:- +full:mask

1 // SPDX-License-Identifier: GPL-2.0+
8 * COMEDI - Linux Control and Measurement Device Interface
19 * This module is not used directly by end-users. Rather, it is used by
26 * Direction configuration is done in blocks, with channels 0-7, 8-15,
27 * 16-19, and 20-23 making up the 4 blocks. The only 8255 mode
45 outb(data, dev->iobase + regbase + port); in subdev_8255_io()
48 return inb(dev->iobase + regbase + port); in subdev_8255_io()
55 writeb(data, dev->mmio + regbase + port); in subdev_8255_mmio()
58 return readb(dev->mmio + regbase + port); in subdev_8255_mmio()
66 struct subdev_8255_private *spriv = s->private; in subdev_8255_insn()
67 unsigned long regbase = spriv->regbase; in subdev_8255_insn()
68 unsigned int mask; in subdev_8255_insn() local
71 mask = comedi_dio_update_state(s, data); in subdev_8255_insn()
72 if (mask) { in subdev_8255_insn()
73 if (mask & 0xff) in subdev_8255_insn()
74 spriv->io(dev, 1, I8255_DATA_A_REG, in subdev_8255_insn()
75 s->state & 0xff, regbase); in subdev_8255_insn()
76 if (mask & 0xff00) in subdev_8255_insn()
77 spriv->io(dev, 1, I8255_DATA_B_REG, in subdev_8255_insn()
78 (s->state >> 8) & 0xff, regbase); in subdev_8255_insn()
79 if (mask & 0xff0000) in subdev_8255_insn()
80 spriv->io(dev, 1, I8255_DATA_C_REG, in subdev_8255_insn()
81 (s->state >> 16) & 0xff, regbase); in subdev_8255_insn()
84 v = spriv->io(dev, 0, I8255_DATA_A_REG, 0, regbase); in subdev_8255_insn()
85 v |= (spriv->io(dev, 0, I8255_DATA_B_REG, 0, regbase) << 8); in subdev_8255_insn()
86 v |= (spriv->io(dev, 0, I8255_DATA_C_REG, 0, regbase) << 16); in subdev_8255_insn()
90 return insn->n; in subdev_8255_insn()
96 struct subdev_8255_private *spriv = s->private; in subdev_8255_do_config()
97 unsigned long regbase = spriv->regbase; in subdev_8255_do_config()
102 if (!(s->io_bits & 0x0000ff)) in subdev_8255_do_config()
104 if (!(s->io_bits & 0x00ff00)) in subdev_8255_do_config()
106 if (!(s->io_bits & 0x0f0000)) in subdev_8255_do_config()
108 if (!(s->io_bits & 0xf00000)) in subdev_8255_do_config()
111 spriv->io(dev, 1, I8255_CTRL_REG, config, regbase); in subdev_8255_do_config()
119 unsigned int chan = CR_CHAN(insn->chanspec); in subdev_8255_insn_config()
120 unsigned int mask; in subdev_8255_insn_config() local
124 mask = 0x0000ff; in subdev_8255_insn_config()
126 mask = 0x00ff00; in subdev_8255_insn_config()
128 mask = 0x0f0000; in subdev_8255_insn_config()
130 mask = 0xf00000; in subdev_8255_insn_config()
132 ret = comedi_dio_insn_config(dev, s, insn, data, mask); in subdev_8255_insn_config()
138 return insn->n; in subdev_8255_insn_config()
153 return -ENOMEM; in __subdev_8255_init()
156 spriv->io = io; in __subdev_8255_init()
158 spriv->io = subdev_8255_mmio; in __subdev_8255_init()
160 spriv->io = subdev_8255_io; in __subdev_8255_init()
161 spriv->regbase = regbase; in __subdev_8255_init()
163 s->type = COMEDI_SUBD_DIO; in __subdev_8255_init()
164 s->subdev_flags = SDF_READABLE | SDF_WRITABLE; in __subdev_8255_init()
165 s->n_chan = 24; in __subdev_8255_init()
166 s->range_table = &range_digital; in __subdev_8255_init()
167 s->maxdata = 1; in __subdev_8255_init()
168 s->insn_bits = subdev_8255_insn; in __subdev_8255_init()
169 s->insn_config = subdev_8255_insn_config; in __subdev_8255_init()
177 * subdev_8255_init - initialize DIO subdevice for driving I/O mapped 8255
180 * @io: (optional) register I/O call-back function
181 * @regbase: offset of 8255 registers from dev->iobase, or call-back context
185 * If the optional I/O call-back function is provided, its prototype is of
191 * where 'dev', and 'regbase' match the values passed to this function,
196 * If the optional I/O call-back function is not provided, an internal
197 * call-back function is used which uses consecutive I/O port addresses
198 * starting at dev->iobase + regbase.
200 * Return: -ENOMEM if failed to allocate memory, zero on success.
212 * subdev_8255_mm_init - initialize DIO subdevice for driving mmio-mapped 8255
215 * @io: (optional) register I/O call-back function
216 * @regbase: offset of 8255 registers from dev->mmio, or call-back context
220 * If the optional I/O call-back function is provided, its prototype is of
226 * where 'dev', and 'regbase' match the values passed to this function,
231 * If the optional I/O call-back function is not provided, an internal
232 * call-back function is used which uses consecutive MMIO virtual addresses
233 * starting at dev->mmio + regbase.
235 * Return: -ENOMEM if failed to allocate memory, zero on success.
247 * subdev_8255_regbase - get offset of 8255 registers or call-back context
256 struct subdev_8255_private *spriv = s->private; in subdev_8255_regbase()
258 return spriv->regbase; in subdev_8255_regbase()