|
@@ -77,10 +77,10 @@ Configuration Options:
|
|
|
|
|
|
#include <linux/interrupt.h>
|
|
|
#include <linux/slab.h>
|
|
|
-#include "../comedidev.h"
|
|
|
-#include "pcm_common.h"
|
|
|
+#include <linux/pci.h>
|
|
|
|
|
|
-#include <linux/pci.h> /* for PCI devices */
|
|
|
+#include "../comedidev.h"
|
|
|
+#include "comedi_fc.h"
|
|
|
|
|
|
#define CHANS_PER_PORT 8
|
|
|
#define PORTS_PER_ASIC 6
|
|
@@ -740,11 +740,59 @@ static int pcmuio_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int
|
|
|
-pcmuio_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
|
|
|
- struct comedi_cmd *cmd)
|
|
|
+static int pcmuio_cmdtest(struct comedi_device *dev,
|
|
|
+ struct comedi_subdevice *s,
|
|
|
+ struct comedi_cmd *cmd)
|
|
|
{
|
|
|
- return comedi_pcm_cmdtest(dev, s, cmd);
|
|
|
+ int err = 0;
|
|
|
+
|
|
|
+ /* Step 1 : check if triggers are trivially valid */
|
|
|
+
|
|
|
+ err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW | TRIG_INT);
|
|
|
+ err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT);
|
|
|
+ err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_NOW);
|
|
|
+ err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT);
|
|
|
+ err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_COUNT | TRIG_NONE);
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ /* Step 2a : make sure trigger sources are unique */
|
|
|
+
|
|
|
+ err |= cfc_check_trigger_is_unique(cmd->start_src);
|
|
|
+ err |= cfc_check_trigger_is_unique(cmd->stop_src);
|
|
|
+
|
|
|
+ /* Step 2b : and mutually compatible */
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ return 2;
|
|
|
+
|
|
|
+ /* Step 3: check if arguments are trivially valid */
|
|
|
+
|
|
|
+ err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
|
|
|
+ err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, 0);
|
|
|
+ err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0);
|
|
|
+ err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
|
|
|
+
|
|
|
+ switch (cmd->stop_src) {
|
|
|
+ case TRIG_COUNT:
|
|
|
+ /* any count allowed */
|
|
|
+ break;
|
|
|
+ case TRIG_NONE:
|
|
|
+ err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ return 3;
|
|
|
+
|
|
|
+ /* step 4: fix up any arguments */
|
|
|
+
|
|
|
+ /* if (err) return 4; */
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int pcmuio_attach(struct comedi_device *dev, struct comedi_devconfig *it)
|