Skip to content

Commit

Permalink
staging: comedi: amplc_pc236: check bus type before accessing LCR
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ian Abbott authored and Greg Kroah-Hartman committed Aug 16, 2012
1 parent 02918c0 commit 15bad7b
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions drivers/staging/comedi/drivers/amplc_pc236.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand All @@ -264,15 +266,15 @@ 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;

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) {
Expand Down

0 comments on commit 15bad7b

Please sign in to comment.