staging: comedi: pcl711: save the irq for the pcl711b only when used
Move the storing of the irq in the mode register for the pcl711b board so it's only done when the irq is actually used by the driver. 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:
parent
bca757ad53
commit
b9a8bbf911
|
@ -474,8 +474,12 @@ static int pcl711_attach(struct comedi_device *dev, struct comedi_devconfig *it)
|
||||||
{
|
{
|
||||||
const struct pcl711_board *board = comedi_board(dev);
|
const struct pcl711_board *board = comedi_board(dev);
|
||||||
struct pcl711_private *devpriv;
|
struct pcl711_private *devpriv;
|
||||||
int ret;
|
|
||||||
struct comedi_subdevice *s;
|
struct comedi_subdevice *s;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
|
||||||
|
if (!devpriv)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
ret = comedi_request_region(dev, it->options[0], 0x10);
|
ret = comedi_request_region(dev, it->options[0], 0x10);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -484,18 +488,22 @@ static int pcl711_attach(struct comedi_device *dev, struct comedi_devconfig *it)
|
||||||
if (it->options[1] && it->options[1] <= board->maxirq) {
|
if (it->options[1] && it->options[1] <= board->maxirq) {
|
||||||
ret = request_irq(it->options[1], pcl711_interrupt, 0,
|
ret = request_irq(it->options[1], pcl711_interrupt, 0,
|
||||||
dev->board_name, dev);
|
dev->board_name, dev);
|
||||||
if (ret == 0)
|
if (ret == 0) {
|
||||||
dev->irq = it->options[1];
|
dev->irq = it->options[1];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The PCL711b needs the irq number in the
|
||||||
|
* mode register.
|
||||||
|
*/
|
||||||
|
if (board->is_pcl711b)
|
||||||
|
devpriv->mode = (dev->irq << 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = comedi_alloc_subdevices(dev, 4);
|
ret = comedi_alloc_subdevices(dev, 4);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
|
|
||||||
if (!devpriv)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
/* Analog Input subdevice */
|
/* Analog Input subdevice */
|
||||||
s = &dev->subdevices[0];
|
s = &dev->subdevices[0];
|
||||||
s->type = COMEDI_SUBD_AI;
|
s->type = COMEDI_SUBD_AI;
|
||||||
|
@ -540,13 +548,6 @@ static int pcl711_attach(struct comedi_device *dev, struct comedi_devconfig *it)
|
||||||
s->range_table = &range_digital;
|
s->range_table = &range_digital;
|
||||||
s->insn_bits = pcl711_do_insn_bits;
|
s->insn_bits = pcl711_do_insn_bits;
|
||||||
|
|
||||||
/*
|
|
||||||
this is the "base value" for the mode register, which is
|
|
||||||
used for the irq on the PCL711
|
|
||||||
*/
|
|
||||||
if (board->is_pcl711b)
|
|
||||||
devpriv->mode = (dev->irq << 4);
|
|
||||||
|
|
||||||
/* clear DAC */
|
/* clear DAC */
|
||||||
outb(0, dev->iobase + PCL711_DA0_LO);
|
outb(0, dev->iobase + PCL711_DA0_LO);
|
||||||
outb(0, dev->iobase + PCL711_DA0_HI);
|
outb(0, dev->iobase + PCL711_DA0_HI);
|
||||||
|
|
Loading…
Reference in a new issue