aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChase Southwood <chase.southwood@gmail.com>2014-07-31 21:56:15 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-08-01 18:37:22 -0400
commit6347fc88ec4453934a5428e21051ff95cad01180 (patch)
tree8c58eb10e09a805c0bb5215630854b2743324af4
parent0e1fc793c7e42308dddad103a195dd261c5bf650 (diff)
staging: comedi: addi_apci_1564: add subdevice to check diagnostic status
This board provides VCC/CC diagnostic information, and it also supports diagnostic interrupts. However, as per Ian, these interrupts aren't very useful and it is enough to simply provide an interface for accessing the diagnostic status on-demand. This patch adds a 2-channel digital input subdevice with an insn_bits handler to access this information. Signed-off-by: Chase Southwood <chase.southwood@gmail.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Cc: H Hartley Sweeten <hsweeten@visionengravers.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/addi_apci_1564.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/staging/comedi/drivers/addi_apci_1564.c b/drivers/staging/comedi/drivers/addi_apci_1564.c
index 190b02663bd0..819255b2d67c 100644
--- a/drivers/staging/comedi/drivers/addi_apci_1564.c
+++ b/drivers/staging/comedi/drivers/addi_apci_1564.c
@@ -157,6 +157,18 @@ static int apci1564_do_insn_bits(struct comedi_device *dev,
157 return insn->n; 157 return insn->n;
158} 158}
159 159
160static int apci1564_diag_insn_bits(struct comedi_device *dev,
161 struct comedi_subdevice *s,
162 struct comedi_insn *insn,
163 unsigned int *data)
164{
165 struct apci1564_private *devpriv = dev->private;
166
167 data[1] = inl(devpriv->amcc_iobase + APCI1564_DO_INT_STATUS_REG) & 3;
168
169 return insn->n;
170}
171
160/* 172/*
161 * Change-Of-State (COS) interrupt configuration 173 * Change-Of-State (COS) interrupt configuration
162 * 174 *
@@ -373,7 +385,7 @@ static int apci1564_auto_attach(struct comedi_device *dev,
373 dev->irq = pcidev->irq; 385 dev->irq = pcidev->irq;
374 } 386 }
375 387
376 ret = comedi_alloc_subdevices(dev, 5); 388 ret = comedi_alloc_subdevices(dev, 6);
377 if (ret) 389 if (ret)
378 return ret; 390 return ret;
379 391
@@ -434,6 +446,15 @@ static int apci1564_auto_attach(struct comedi_device *dev,
434 if (ret) 446 if (ret)
435 return ret; 447 return ret;
436 448
449 /* Initialize the diagnostic status subdevice */
450 s = &dev->subdevices[5];
451 s->type = COMEDI_SUBD_DI;
452 s->subdev_flags = SDF_READABLE;
453 s->n_chan = 2;
454 s->maxdata = 1;
455 s->range_table = &range_digital;
456 s->insn_bits = apci1564_diag_insn_bits;
457
437 return 0; 458 return 0;
438} 459}
439 460