From 45c311c4384c4e50881b18928edf5d0d2ea0b640 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Thu, 20 Nov 2014 15:07:35 -0700 Subject: [PATCH] staging: comedi: ni_labpc_common: use subdevice readback for eeprom Use the comedi_subdevice 'readback' member and the core provided (*insn_read) to handle the readback of the eeprom subdevice. Remove the then unused 'eeprom_data' member from the private data. Signed-off-by: H Hartley Sweeten Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/ni_labpc.h | 2 -- .../staging/comedi/drivers/ni_labpc_common.c | 30 +++++++------------ 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/drivers/staging/comedi/drivers/ni_labpc.h b/drivers/staging/comedi/drivers/ni_labpc.h index e6a95f94774c..ac2c01f9dfdc 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.h +++ b/drivers/staging/comedi/drivers/ni_labpc.h @@ -68,8 +68,6 @@ struct labpc_private { unsigned int dma_transfer_size; /* we are using dma/fifo-half-full/etc. */ enum transfer_type current_transfer; - /* stores contents of board's eeprom */ - unsigned int eeprom_data[EEPROM_SIZE]; /* * function pointers so we can use inb/outb or readb/writeb as * appropriate diff --git a/drivers/staging/comedi/drivers/ni_labpc_common.c b/drivers/staging/comedi/drivers/ni_labpc_common.c index a6c63b511a66..9d26aced0021 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_common.c +++ b/drivers/staging/comedi/drivers/ni_labpc_common.c @@ -1099,8 +1099,6 @@ static int labpc_eeprom_write(struct comedi_device *dev, dev_err(dev->class_dev, "eeprom write timed out\n"); return -ETIME; } - /* update software copy of eeprom */ - devpriv->eeprom_data[address] = value; /* enable read/write to eeprom */ devpriv->cmd5 &= ~CMD5_EEPROMCS; @@ -1202,25 +1200,14 @@ static int labpc_eeprom_insn_write(struct comedi_device *dev, * data would be overwritten anyway. */ if (insn->n > 0) { - ret = labpc_eeprom_write(dev, chan, data[insn->n - 1]); + unsigned int val = data[insn->n - 1]; + + ret = labpc_eeprom_write(dev, chan, val); if (ret) return ret; - } - - return insn->n; -} -static int labpc_eeprom_insn_read(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - struct labpc_private *devpriv = dev->private; - unsigned int chan = CR_CHAN(insn->chanspec); - int i; - - for (i = 0; i < insn->n; i++) - data[i] = devpriv->eeprom_data[chan]; + s->readback[chan] = val; + } return insn->n; } @@ -1339,11 +1326,14 @@ int labpc_common_attach(struct comedi_device *dev, s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_INTERNAL; s->n_chan = EEPROM_SIZE; s->maxdata = 0xff; - s->insn_read = labpc_eeprom_insn_read; s->insn_write = labpc_eeprom_insn_write; + ret = comedi_alloc_subdev_readback(s); + if (ret) + return ret; + for (i = 0; i < s->n_chan; i++) - devpriv->eeprom_data[i] = labpc_eeprom_read(dev, i); + s->readback[i] = labpc_eeprom_read(dev, i); } else { s->type = COMEDI_SUBD_UNUSED; } -- 2.34.1