summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH Hartley Sweeten2014-09-05 18:25:40 +0200
committerGreg Kroah-Hartman2014-09-08 22:56:07 +0200
commit5358e8996f76ba5f44992226f7eb15d502c663fa (patch)
tree32de685ef6dd9bcfcf7d1fead0ec1729d62f3b10
parentstaging: comedi: adl_pci9118: move analog output (*insn_write) function (diff)
downloadkernel-qcow2-linux-5358e8996f76ba5f44992226f7eb15d502c663fa.tar.gz
kernel-qcow2-linux-5358e8996f76ba5f44992226f7eb15d502c663fa.tar.xz
kernel-qcow2-linux-5358e8996f76ba5f44992226f7eb15d502c663fa.zip
staging: comedi: adl_pci9118: cleanup and simplify pci9118_reset()
Change the return type to void, this function always succeeds and the callers never check the return value. According to the The User Manual for the PCI-9118, the hardware does not require any particular "reset" in order to function. Simplify the reset so it justs gets the board info a known state with interrupts disabled. There is no reason to initialize the private data members in this function. They all default to '0' due to the kzalloc() of the private data and the subdevice operations all initialize them as needed. 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>
-rw-r--r--drivers/staging/comedi/drivers/adl_pci9118.c59
1 files changed, 13 insertions, 46 deletions
diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c
index 4a956ccb1acc..56458acdac75 100644
--- a/drivers/staging/comedi/drivers/adl_pci9118.c
+++ b/drivers/staging/comedi/drivers/adl_pci9118.c
@@ -1654,63 +1654,30 @@ static int pci9118_do_insn_bits(struct comedi_device *dev,
return insn->n;
}
-static int pci9118_reset(struct comedi_device *dev)
+static void pci9118_reset(struct comedi_device *dev)
{
- struct pci9118_private *devpriv = dev->private;
+ /* reset analog input subsystem */
+ outl(0, dev->iobase + PCI9118_INT_CTRL_REG);
+ outl(0, dev->iobase + PCI9118_AI_CTRL_REG);
+ outl(0, dev->iobase + PCI9118_AI_CFG_REG);
+ pci9118_ai_reset_fifo(dev);
- devpriv->IntControlReg = 0;
- devpriv->exttrg_users = 0;
- /* clear interrupts then disable all interrupt sources */
+ /* clear any pending interrupts and status */
inl(dev->iobase + PCI9118_INT_CTRL_REG);
- outl(devpriv->IntControlReg, dev->iobase + PCI9118_INT_CTRL_REG);
+ inl(dev->iobase + PCI9118_AI_STATUS_REG);
+
+ /* reset and stop counters */
pci9118_timer_set_mode(dev, 0, I8254_MODE0);
- pci9118_start_pacer(dev, 0); /* stop 8254 counters */
- devpriv->AdControlReg = 0;
- outl(devpriv->AdControlReg, dev->iobase + PCI9118_AI_CTRL_REG);
- /*
- * bipolar, S.E., use 8254,
- * stop 8354, internal trigger,
- * soft trigger,
- * disable INT and DMA
- */
+ pci9118_start_pacer(dev, 0);
+
+ /* reset DMA and scan queue */
outl(0, dev->iobase + PCI9118_AI_BURST_NUM_REG);
- /* reset scan queue */
outl(1, dev->iobase + PCI9118_AI_AUTOSCAN_MODE_REG);
outl(2, dev->iobase + PCI9118_AI_AUTOSCAN_MODE_REG);
- devpriv->AdFunctionReg = PCI9118_AI_CFG_PDTRG | PCI9118_AI_CFG_PETRG;
- outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_AI_CFG_REG);
- /*
- * positive triggers, no S&H,
- * no burst, burst stop,
- * no post trigger,
- * no about trigger,
- * trigger stop
- */
/* reset analog outputs to 0V */
outl(2047, dev->iobase + PCI9118_AO_REG(0));
outl(2047, dev->iobase + PCI9118_AO_REG(1));
-
- udelay(10);
- inl(dev->iobase + PCI9118_AI_FIFO_REG);
- pci9118_ai_reset_fifo(dev);
- /* disable all interrupt sources */
- outl(0, dev->iobase + PCI9118_INT_CTRL_REG);
- /* clear A/D and INT status registers */
- inl(dev->iobase + PCI9118_AI_STATUS_REG);
- inl(dev->iobase + PCI9118_INT_CTRL_REG);
- devpriv->AdControlReg = 0;
- outl(devpriv->AdControlReg, dev->iobase + PCI9118_AI_CTRL_REG);
- /*
- * bipolar, S.E., use 8254,
- * stop 8354, internal trigger,
- * soft trigger,
- * disable INT and DMA
- */
-
- devpriv->exttrg_users = 0;
-
- return 0;
}
static struct pci_dev *pci9118_find_pci(struct comedi_device *dev,