From: H Hartley Sweeten Date: Mon, 3 Mar 2014 23:47:41 +0000 (-0700) Subject: staging: comedi: ke_counter: add digital output support X-Git-Tag: firefly_0821_release~176^2~4193^2~735 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=661b9dbbc32021ddba5a291ef3ccd86686c35373;p=firefly-linux-kernel-4.4.55.git staging: comedi: ke_counter: add digital output support The hardware has three digital output channels. Add the subdevice support for these channels. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/drivers/ke_counter.c b/drivers/staging/comedi/drivers/ke_counter.c index aab72ab3434e..3b57a52e0d3a 100644 --- a/drivers/staging/comedi/drivers/ke_counter.c +++ b/drivers/staging/comedi/drivers/ke_counter.c @@ -95,6 +95,19 @@ static int ke_counter_insn_read(struct comedi_device *dev, return insn->n; } +static int ke_counter_do_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + if (comedi_dio_update_state(s, data)) + outb(s->state, dev->iobase + KE_DO_REG); + + data[1] = s->state; + + return insn->n; +} + static int ke_counter_auto_attach(struct comedi_device *dev, unsigned long context_unused) { @@ -107,7 +120,7 @@ static int ke_counter_auto_attach(struct comedi_device *dev, return ret; dev->iobase = pci_resource_start(pcidev, 0); - ret = comedi_alloc_subdevices(dev, 1); + ret = comedi_alloc_subdevices(dev, 2); if (ret) return ret; @@ -120,6 +133,14 @@ static int ke_counter_auto_attach(struct comedi_device *dev, s->insn_read = ke_counter_insn_read; s->insn_write = ke_counter_insn_write; + s = &dev->subdevices[1]; + s->type = COMEDI_SUBD_DO; + s->subdev_flags = SDF_WRITABLE; + s->n_chan = 3; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = ke_counter_do_insn_bits; + outb(KE_OSC_SEL_20MHZ, dev->iobase + KE_OSC_SEL_REG); outb(0, dev->iobase + KE_RESET_REG(0));