summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Abbott2012-08-16 13:24:10 +0200
committerGreg Kroah-Hartman2012-08-16 20:35:44 +0200
commit15bad7b518043aa00d6220effabaf8c262a5af64 (patch)
treecb32b0f66b5f559a701e0e4adc86d089a5136bec
parentstaging: comedi: amplc_pc236: check bus type in detach routine (diff)
downloadkernel-qcow2-linux-15bad7b518043aa00d6220effabaf8c262a5af64.tar.gz
kernel-qcow2-linux-15bad7b518043aa00d6220effabaf8c262a5af64.tar.xz
kernel-qcow2-linux-15bad7b518043aa00d6220effabaf8c262a5af64.zip
staging: comedi: amplc_pc236: check bus type before accessing LCR
The PCI-local bridge LCR registers are (assumed to be) present and used iff the board is a PCI board (a PCI236). Currently the code tests if devpriv->lcr_iobase is valid before accessing the registers. Instead, check if the board is a PCI board and assume devpriv->lcr_iobase is valid if so. (Currently, no validity check is performed as the PCI vendor and device ID ought to suffice, but simple checks could be added when attaching the device.) Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/amplc_pc236.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c
index 330fa3a895cf..88aa1791d7bd 100644
--- a/drivers/staging/comedi/drivers/amplc_pc236.c
+++ b/drivers/staging/comedi/drivers/amplc_pc236.c
@@ -228,12 +228,13 @@ static int pc236_request_region(struct comedi_device *dev, unsigned long from,
*/
static void pc236_intr_disable(struct comedi_device *dev)
{
+ const struct pc236_board *thisboard = comedi_board(dev);
struct pc236_private *devpriv = dev->private;
unsigned long flags;
spin_lock_irqsave(&dev->spinlock, flags);
devpriv->enable_irq = 0;
- if (IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI) && devpriv->lcr_iobase)
+ if (is_pci_board(thisboard))
outl(PCI236_INTR_DISABLE, devpriv->lcr_iobase + PLX9052_INTCSR);
spin_unlock_irqrestore(&dev->spinlock, flags);
}
@@ -245,12 +246,13 @@ static void pc236_intr_disable(struct comedi_device *dev)
*/
static void pc236_intr_enable(struct comedi_device *dev)
{
+ const struct pc236_board *thisboard = comedi_board(dev);
struct pc236_private *devpriv = dev->private;
unsigned long flags;
spin_lock_irqsave(&dev->spinlock, flags);
devpriv->enable_irq = 1;
- if (IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI) && devpriv->lcr_iobase)
+ if (is_pci_board(thisboard))
outl(PCI236_INTR_ENABLE, devpriv->lcr_iobase + PLX9052_INTCSR);
spin_unlock_irqrestore(&dev->spinlock, flags);
}
@@ -264,6 +266,7 @@ static void pc236_intr_enable(struct comedi_device *dev)
*/
static int pc236_intr_check(struct comedi_device *dev)
{
+ const struct pc236_board *thisboard = comedi_board(dev);
struct pc236_private *devpriv = dev->private;
int retval = 0;
unsigned long flags;
@@ -271,8 +274,7 @@ static int pc236_intr_check(struct comedi_device *dev)
spin_lock_irqsave(&dev->spinlock, flags);
if (devpriv->enable_irq) {
retval = 1;
- if (IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI) &&
- devpriv->lcr_iobase) {
+ if (is_pci_board(thisboard)) {
if ((inl(devpriv->lcr_iobase + PLX9052_INTCSR)
& PLX9052_INTCSR_LI1STAT_MASK)
== PLX9052_INTCSR_LI1STAT_INACTIVE) {