static int pci6208_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { unsigned int chan = CR_CHAN(insn->chanspec); unsigned int val = s->readback[chan]; int ret; int i; for (i = 0; i < insn->n; i++) { val = data[i]; /* D/A transfer rate is 2.2us */ ret = comedi_timeout(dev, s, insn, pci6208_ao_eoc, 0); if (ret) return ret; /* the hardware expects two's complement values */ outw(comedi_offset_munge(s, val), dev->iobase + PCI6208_AO_CONTROL(chan)); s->readback[chan] = val; } return insn->n; }
static unsigned int dmm32at_ai_get_sample(struct comedi_device *dev, struct comedi_subdevice *s) { unsigned int val; val = inb(dev->iobase + DMM32AT_AI_LSB_REG); val |= (inb(dev->iobase + DMM32AT_AI_MSB_REG) << 8); /* munge two's complement value to offset binary */ return comedi_offset_munge(s, val); }