diff options
| author | 2012-06-26 18:12:15 -0700 | |
|---|---|---|
| committer | 2012-07-06 15:23:56 -0700 | |
| commit | b436356dcc67a665da07441ab113e9a5652073e5 (patch) | |
| tree | bd023d8c60e1a2db680208f5aee32be9c3e09266 | |
| parent | staging: comedi: cb_pcidas: cleanup cb_pcidas_ai_rinsn() (diff) | |
staging: comedi: cb_pcidas: cleanup dac08_write()
Reverse the logic of the test against the cached value so that
the function only has one exit point.
Make the logic of the dac write a bit clearer by create a local
variable for the address used in the outw() calls and masking the
value to write and setting the enable bits before doing the outw()
calls. Add a comment just to make sure it's clear.
Also, add a comment about the 'return 1;'. This should be
insn->n which is the number of data parameters used to do the
dac08_write_insn() but the insn is not a parameter to this
function.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| -rw-r--r-- | drivers/staging/comedi/drivers/cb_pcidas.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c index 1479325ab7ea..3ba75afe4e05 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas.c +++ b/drivers/staging/comedi/drivers/cb_pcidas.c @@ -662,23 +662,25 @@ static int caldac_read_insn(struct comedi_device *dev, static int dac08_write(struct comedi_device *dev, unsigned int value) { struct cb_pcidas_private *devpriv = dev->private; + unsigned long cal_reg; - if (devpriv->dac08_value == value) - return 1; + if (devpriv->dac08_value != value) { + devpriv->dac08_value = value; - devpriv->dac08_value = value; + cal_reg = devpriv->control_status + CALIBRATION_REG; - outw(cal_enable_bits(dev) | (value & 0xff), - devpriv->control_status + CALIBRATION_REG); - udelay(1); - outw(cal_enable_bits(dev) | SELECT_DAC08_BIT | (value & 0xff), - devpriv->control_status + CALIBRATION_REG); - udelay(1); - outw(cal_enable_bits(dev) | (value & 0xff), - devpriv->control_status + CALIBRATION_REG); - udelay(1); + value &= 0xff; + value |= cal_enable_bits(dev); - return 1; + /* latch the new value into the caldac */ + outw(value, cal_reg); + udelay(1); + outw(value | SELECT_DAC08_BIT, cal_reg); + udelay(1); + outw(value, cal_reg); + udelay(1); + } + return 1; /* insn->n */ } static int dac08_write_insn(struct comedi_device *dev, |
