From: H Hartley Sweeten Date: Mon, 25 Aug 2014 23:04:13 +0000 (-0700) Subject: staging: comedi: pcmda12: use comedi_subdevice 'readback' X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=bf90bbd6a3bd41af7565118625c87f9c67d7abdb;p=deliverable%2Flinux.git staging: comedi: pcmda12: use comedi_subdevice 'readback' Use the new comedi_subdevice 'readback' member and the core provided (*insn_read) for the readback of the analog output subdevice channels. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/comedi/drivers/pcmda12.c b/drivers/staging/comedi/drivers/pcmda12.c index 1c7a135c91d6..59108c06cedc 100644 --- a/drivers/staging/comedi/drivers/pcmda12.c +++ b/drivers/staging/comedi/drivers/pcmda12.c @@ -61,7 +61,6 @@ static const struct comedi_lrange pcmda12_ranges = { }; struct pcmda12_private { - unsigned int ao_readback[8]; int simultaneous_xfer_mode; }; @@ -72,7 +71,7 @@ static int pcmda12_ao_insn_write(struct comedi_device *dev, { struct pcmda12_private *devpriv = dev->private; unsigned int chan = CR_CHAN(insn->chanspec); - unsigned int val = devpriv->ao_readback[chan]; + unsigned int val = s->readback[chan]; unsigned long ioreg = dev->iobase + (chan * 2); int i; @@ -88,7 +87,7 @@ static int pcmda12_ao_insn_write(struct comedi_device *dev, if (!devpriv->simultaneous_xfer_mode) inb(ioreg); } - devpriv->ao_readback[chan] = val; + s->readback[chan] = val; return insn->n; } @@ -99,8 +98,6 @@ static int pcmda12_ao_insn_read(struct comedi_device *dev, unsigned int *data) { struct pcmda12_private *devpriv = dev->private; - unsigned int chan = CR_CHAN(insn->chanspec); - int i; /* * Initiate simultaneaous xfer mode by reading one of the @@ -109,10 +106,7 @@ static int pcmda12_ao_insn_read(struct comedi_device *dev, if (devpriv->simultaneous_xfer_mode) inb(dev->iobase); - for (i = 0; i < insn->n; i++) - data[i] = devpriv->ao_readback[chan]; - - return insn->n; + return comedi_readback_insn_read(dev, s, insn, data); } static void pcmda12_ao_reset(struct comedi_device *dev, @@ -158,6 +152,10 @@ static int pcmda12_attach(struct comedi_device *dev, s->insn_write = pcmda12_ao_insn_write; s->insn_read = pcmda12_ao_insn_read; + ret = comedi_alloc_subdev_readback(s); + if (ret) + return ret; + pcmda12_ao_reset(dev, s); return 0;