staging: comedi: icp_multi: use the comedi_device 'mmio' member

Use the new 'mmio' member in the comedi_device for the ioremap'ed
base address.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
H Hartley Sweeten 2014-07-29 15:01:26 -07:00 committed by Greg Kroah-Hartman
parent 565700447a
commit a3e6328810

View file

@ -108,7 +108,6 @@ static const char range_codes_analog[] = { 0x00, 0x20, 0x10, 0x30 };
struct icp_multi_private { struct icp_multi_private {
char valid; /* card is usable */ char valid; /* card is usable */
void __iomem *io_addr; /* Pointer to mapped io address */
unsigned int AdcCmdStatus; /* ADC Command/Status register */ unsigned int AdcCmdStatus; /* ADC Command/Status register */
unsigned int DacCmdStatus; /* DAC Command/Status register */ unsigned int DacCmdStatus; /* DAC Command/Status register */
unsigned int IntEnable; /* Interrupt Enable register */ unsigned int IntEnable; /* Interrupt Enable register */
@ -164,8 +163,7 @@ static void setup_channel_list(struct comedi_device *dev,
devpriv->AdcCmdStatus |= range; devpriv->AdcCmdStatus |= range;
/* Output channel, range, mode to ICP Multi */ /* Output channel, range, mode to ICP Multi */
writew(devpriv->AdcCmdStatus, writew(devpriv->AdcCmdStatus, dev->mmio + ICP_MULTI_ADC_CSR);
devpriv->io_addr + ICP_MULTI_ADC_CSR);
} }
} }
@ -174,10 +172,9 @@ static int icp_multi_ai_eoc(struct comedi_device *dev,
struct comedi_insn *insn, struct comedi_insn *insn,
unsigned long context) unsigned long context)
{ {
struct icp_multi_private *devpriv = dev->private;
unsigned int status; unsigned int status;
status = readw(devpriv->io_addr + ICP_MULTI_ADC_CSR); status = readw(dev->mmio + ICP_MULTI_ADC_CSR);
if ((status & ADC_BSY) == 0) if ((status & ADC_BSY) == 0)
return 0; return 0;
return -EBUSY; return -EBUSY;
@ -185,7 +182,8 @@ static int icp_multi_ai_eoc(struct comedi_device *dev,
static int icp_multi_insn_read_ai(struct comedi_device *dev, static int icp_multi_insn_read_ai(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data) struct comedi_insn *insn,
unsigned int *data)
{ {
struct icp_multi_private *devpriv = dev->private; struct icp_multi_private *devpriv = dev->private;
int ret = 0; int ret = 0;
@ -193,11 +191,11 @@ static int icp_multi_insn_read_ai(struct comedi_device *dev,
/* Disable A/D conversion ready interrupt */ /* Disable A/D conversion ready interrupt */
devpriv->IntEnable &= ~ADC_READY; devpriv->IntEnable &= ~ADC_READY;
writew(devpriv->IntEnable, devpriv->io_addr + ICP_MULTI_INT_EN); writew(devpriv->IntEnable, dev->mmio + ICP_MULTI_INT_EN);
/* Clear interrupt status */ /* Clear interrupt status */
devpriv->IntStatus |= ADC_READY; devpriv->IntStatus |= ADC_READY;
writew(devpriv->IntStatus, devpriv->io_addr + ICP_MULTI_INT_STAT); writew(devpriv->IntStatus, dev->mmio + ICP_MULTI_INT_STAT);
/* Set up appropriate channel, mode and range data, for specified ch */ /* Set up appropriate channel, mode and range data, for specified ch */
setup_channel_list(dev, s, &insn->chanspec, 1); setup_channel_list(dev, s, &insn->chanspec, 1);
@ -205,8 +203,7 @@ static int icp_multi_insn_read_ai(struct comedi_device *dev,
for (n = 0; n < insn->n; n++) { for (n = 0; n < insn->n; n++) {
/* Set start ADC bit */ /* Set start ADC bit */
devpriv->AdcCmdStatus |= ADC_ST; devpriv->AdcCmdStatus |= ADC_ST;
writew(devpriv->AdcCmdStatus, writew(devpriv->AdcCmdStatus, dev->mmio + ICP_MULTI_ADC_CSR);
devpriv->io_addr + ICP_MULTI_ADC_CSR);
devpriv->AdcCmdStatus &= ~ADC_ST; devpriv->AdcCmdStatus &= ~ADC_ST;
udelay(1); udelay(1);
@ -216,17 +213,16 @@ static int icp_multi_insn_read_ai(struct comedi_device *dev,
if (ret) if (ret)
break; break;
data[n] = data[n] = (readw(dev->mmio + ICP_MULTI_AI) >> 4) & 0x0fff;
(readw(devpriv->io_addr + ICP_MULTI_AI) >> 4) & 0x0fff;
} }
/* Disable interrupt */ /* Disable interrupt */
devpriv->IntEnable &= ~ADC_READY; devpriv->IntEnable &= ~ADC_READY;
writew(devpriv->IntEnable, devpriv->io_addr + ICP_MULTI_INT_EN); writew(devpriv->IntEnable, dev->mmio + ICP_MULTI_INT_EN);
/* Clear interrupt status */ /* Clear interrupt status */
devpriv->IntStatus |= ADC_READY; devpriv->IntStatus |= ADC_READY;
writew(devpriv->IntStatus, devpriv->io_addr + ICP_MULTI_INT_STAT); writew(devpriv->IntStatus, dev->mmio + ICP_MULTI_INT_STAT);
return ret ? ret : n; return ret ? ret : n;
} }
@ -236,10 +232,9 @@ static int icp_multi_ao_eoc(struct comedi_device *dev,
struct comedi_insn *insn, struct comedi_insn *insn,
unsigned long context) unsigned long context)
{ {
struct icp_multi_private *devpriv = dev->private;
unsigned int status; unsigned int status;
status = readw(devpriv->io_addr + ICP_MULTI_DAC_CSR); status = readw(dev->mmio + ICP_MULTI_DAC_CSR);
if ((status & DAC_BSY) == 0) if ((status & DAC_BSY) == 0)
return 0; return 0;
return -EBUSY; return -EBUSY;
@ -247,7 +242,8 @@ static int icp_multi_ao_eoc(struct comedi_device *dev,
static int icp_multi_insn_write_ao(struct comedi_device *dev, static int icp_multi_insn_write_ao(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data) struct comedi_insn *insn,
unsigned int *data)
{ {
struct icp_multi_private *devpriv = dev->private; struct icp_multi_private *devpriv = dev->private;
int n, chan, range; int n, chan, range;
@ -255,11 +251,11 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev,
/* Disable D/A conversion ready interrupt */ /* Disable D/A conversion ready interrupt */
devpriv->IntEnable &= ~DAC_READY; devpriv->IntEnable &= ~DAC_READY;
writew(devpriv->IntEnable, devpriv->io_addr + ICP_MULTI_INT_EN); writew(devpriv->IntEnable, dev->mmio + ICP_MULTI_INT_EN);
/* Clear interrupt status */ /* Clear interrupt status */
devpriv->IntStatus |= DAC_READY; devpriv->IntStatus |= DAC_READY;
writew(devpriv->IntStatus, devpriv->io_addr + ICP_MULTI_INT_STAT); writew(devpriv->IntStatus, dev->mmio + ICP_MULTI_INT_STAT);
/* Get channel number and range */ /* Get channel number and range */
chan = CR_CHAN(insn->chanspec); chan = CR_CHAN(insn->chanspec);
@ -274,7 +270,7 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev,
devpriv->DacCmdStatus |= range_codes_analog[range]; devpriv->DacCmdStatus |= range_codes_analog[range];
devpriv->DacCmdStatus |= (chan << 8); devpriv->DacCmdStatus |= (chan << 8);
writew(devpriv->DacCmdStatus, devpriv->io_addr + ICP_MULTI_DAC_CSR); writew(devpriv->DacCmdStatus, dev->mmio + ICP_MULTI_DAC_CSR);
for (n = 0; n < insn->n; n++) { for (n = 0; n < insn->n; n++) {
/* Wait for analogue output data register to be /* Wait for analogue output data register to be
@ -284,12 +280,12 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev,
/* Disable interrupt */ /* Disable interrupt */
devpriv->IntEnable &= ~DAC_READY; devpriv->IntEnable &= ~DAC_READY;
writew(devpriv->IntEnable, writew(devpriv->IntEnable,
devpriv->io_addr + ICP_MULTI_INT_EN); dev->mmio + ICP_MULTI_INT_EN);
/* Clear interrupt status */ /* Clear interrupt status */
devpriv->IntStatus |= DAC_READY; devpriv->IntStatus |= DAC_READY;
writew(devpriv->IntStatus, writew(devpriv->IntStatus,
devpriv->io_addr + ICP_MULTI_INT_STAT); dev->mmio + ICP_MULTI_INT_STAT);
/* Clear data received */ /* Clear data received */
devpriv->ao_data[chan] = 0; devpriv->ao_data[chan] = 0;
@ -298,12 +294,11 @@ static int icp_multi_insn_write_ao(struct comedi_device *dev,
} }
/* Write data to analogue output data register */ /* Write data to analogue output data register */
writew(data[n], devpriv->io_addr + ICP_MULTI_AO); writew(data[n], dev->mmio + ICP_MULTI_AO);
/* Set DAC_ST bit to write the data to selected channel */ /* Set DAC_ST bit to write the data to selected channel */
devpriv->DacCmdStatus |= DAC_ST; devpriv->DacCmdStatus |= DAC_ST;
writew(devpriv->DacCmdStatus, writew(devpriv->DacCmdStatus, dev->mmio + ICP_MULTI_DAC_CSR);
devpriv->io_addr + ICP_MULTI_DAC_CSR);
devpriv->DacCmdStatus &= ~DAC_ST; devpriv->DacCmdStatus &= ~DAC_ST;
/* Save analogue output data */ /* Save analogue output data */
@ -332,11 +327,10 @@ static int icp_multi_insn_read_ao(struct comedi_device *dev,
static int icp_multi_insn_bits_di(struct comedi_device *dev, static int icp_multi_insn_bits_di(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data) struct comedi_insn *insn,
unsigned int *data)
{ {
struct icp_multi_private *devpriv = dev->private; data[1] = readw(dev->mmio + ICP_MULTI_DI);
data[1] = readw(devpriv->io_addr + ICP_MULTI_DI);
return insn->n; return insn->n;
} }
@ -346,12 +340,10 @@ static int icp_multi_insn_bits_do(struct comedi_device *dev,
struct comedi_insn *insn, struct comedi_insn *insn,
unsigned int *data) unsigned int *data)
{ {
struct icp_multi_private *devpriv = dev->private;
if (comedi_dio_update_state(s, data)) if (comedi_dio_update_state(s, data))
writew(s->state, devpriv->io_addr + ICP_MULTI_DO); writew(s->state, dev->mmio + ICP_MULTI_DO);
data[1] = readw(devpriv->io_addr + ICP_MULTI_DI); data[1] = readw(dev->mmio + ICP_MULTI_DI);
return insn->n; return insn->n;
} }
@ -374,11 +366,10 @@ static int icp_multi_insn_write_ctr(struct comedi_device *dev,
static irqreturn_t interrupt_service_icp_multi(int irq, void *d) static irqreturn_t interrupt_service_icp_multi(int irq, void *d)
{ {
struct comedi_device *dev = d; struct comedi_device *dev = d;
struct icp_multi_private *devpriv = dev->private;
int int_no; int int_no;
/* Is this interrupt from our board? */ /* Is this interrupt from our board? */
int_no = readw(devpriv->io_addr + ICP_MULTI_INT_STAT) & Status_IRQ; int_no = readw(dev->mmio + ICP_MULTI_INT_STAT) & Status_IRQ;
if (!int_no) if (!int_no)
/* No, exit */ /* No, exit */
return IRQ_NONE; return IRQ_NONE;
@ -448,8 +439,8 @@ static int icp_multi_reset(struct comedi_device *dev)
unsigned int i; unsigned int i;
/* Clear INT enables and requests */ /* Clear INT enables and requests */
writew(0, devpriv->io_addr + ICP_MULTI_INT_EN); writew(0, dev->mmio + ICP_MULTI_INT_EN);
writew(0x00ff, devpriv->io_addr + ICP_MULTI_INT_STAT); writew(0x00ff, dev->mmio + ICP_MULTI_INT_STAT);
/* Set DACs to 0..5V range and 0V output */ /* Set DACs to 0..5V range and 0V output */
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
@ -459,21 +450,20 @@ static int icp_multi_reset(struct comedi_device *dev)
devpriv->DacCmdStatus |= (i << 8); devpriv->DacCmdStatus |= (i << 8);
/* Output 0V */ /* Output 0V */
writew(0, devpriv->io_addr + ICP_MULTI_AO); writew(0, dev->mmio + ICP_MULTI_AO);
/* Set start conversion bit */ /* Set start conversion bit */
devpriv->DacCmdStatus |= DAC_ST; devpriv->DacCmdStatus |= DAC_ST;
/* Output to command / status register */ /* Output to command / status register */
writew(devpriv->DacCmdStatus, writew(devpriv->DacCmdStatus, dev->mmio + ICP_MULTI_DAC_CSR);
devpriv->io_addr + ICP_MULTI_DAC_CSR);
/* Delay to allow DAC time to recover */ /* Delay to allow DAC time to recover */
udelay(1); udelay(1);
} }
/* Digital outputs to 0 */ /* Digital outputs to 0 */
writew(0, devpriv->io_addr + ICP_MULTI_DO); writew(0, dev->mmio + ICP_MULTI_DO);
return 0; return 0;
} }
@ -494,8 +484,8 @@ static int icp_multi_auto_attach(struct comedi_device *dev,
if (ret) if (ret)
return ret; return ret;
devpriv->io_addr = pci_ioremap_bar(pcidev, 2); dev->mmio = pci_ioremap_bar(pcidev, 2);
if (!devpriv->io_addr) if (!dev->mmio)
return -ENOMEM; return -ENOMEM;
ret = comedi_alloc_subdevices(dev, 5); ret = comedi_alloc_subdevices(dev, 5);
@ -573,8 +563,8 @@ static void icp_multi_detach(struct comedi_device *dev)
icp_multi_reset(dev); icp_multi_reset(dev);
if (dev->irq) if (dev->irq)
free_irq(dev->irq, dev); free_irq(dev->irq, dev);
if (devpriv && devpriv->io_addr) if (dev->mmio)
iounmap(devpriv->io_addr); iounmap(dev->mmio);
comedi_pci_disable(dev); comedi_pci_disable(dev);
} }