Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 364009
b: refs/heads/master
c: 0546f77
h: refs/heads/master
i:
  364007: e91c5f4
v: v3
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Apr 9, 2013
1 parent 99bc209 commit aabd910
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ee3526966589b77edba46659ecaec269f67d7216
refs/heads/master: 0546f777627b93022bdb2d8b7fdfb91d2f8f4c74
26 changes: 15 additions & 11 deletions trunk/drivers/staging/comedi/drivers/rti800.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,24 +156,22 @@ struct rti800_private {
bool dac_2comp[2];
const struct comedi_lrange *ao_range_type_list[2];
unsigned int ao_readback[2];
int muxgain_bits;
unsigned char muxgain_bits;
};

#define RTI800_TIMEOUT 100

/* settling delay times in usec for different gains */
static const int gaindelay[] = { 10, 20, 40, 80 };

static int rti800_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data)
struct comedi_insn *insn,
unsigned int *data)
{
struct rti800_private *devpriv = dev->private;
unsigned int chan = CR_CHAN(insn->chanspec);
unsigned int gain = CR_RANGE(insn->chanspec);
unsigned char muxgain_bits;
int i, t;
int status;
unsigned muxgain_bits;

inb(dev->iobase + RTI800_ADCHI);
outb(0, dev->iobase + RTI800_CLRFLAGS);
Expand All @@ -182,11 +180,16 @@ static int rti800_ai_insn_read(struct comedi_device *dev,
if (muxgain_bits != devpriv->muxgain_bits) {
devpriv->muxgain_bits = muxgain_bits;
outb(devpriv->muxgain_bits, dev->iobase + RTI800_MUXGAIN);
/* without a delay here, the RTI_OVERRUN bit
* gets set, and you will have an error. */
/*
* Without a delay here, the RTI_OVERRUN bit
* gets set, and you will have an error.
*/
if (insn->n > 0) {
BUG_ON(gain >= ARRAY_SIZE(gaindelay));
udelay(gaindelay[gain]);
int delay = (gain == 0) ? 10 :
(gain == 1) ? 20 :
(gain == 2) ? 40 : 80;

udelay(delay);
}
}

Expand Down Expand Up @@ -330,7 +333,8 @@ static int rti800_attach(struct comedi_device *dev, struct comedi_devconfig *it)
devpriv->adc_coding = it->options[4];
devpriv->dac_2comp[0] = (it->options[6] == 0);
devpriv->dac_2comp[1] = (it->options[8] == 0);
devpriv->muxgain_bits = -1;
/* invalid, forces the MUXGAIN register to be set when first used */
devpriv->muxgain_bits = 0xff;

ret = comedi_alloc_subdevices(dev, 4);
if (ret)
Expand Down

0 comments on commit aabd910

Please sign in to comment.