Lines Matching refs:cmd

305 static bool labpc_use_continuous_mode(const struct comedi_cmd *cmd,
308 if (mode == MODE_SINGLE_CHAN || cmd->scan_begin_src == TRIG_FOLLOW)
314 static unsigned int labpc_ai_convert_period(const struct comedi_cmd *cmd,
317 if (cmd->convert_src != TRIG_TIMER)
320 if (mode == MODE_SINGLE_CHAN && cmd->scan_begin_src == TRIG_TIMER)
321 return cmd->scan_begin_arg;
323 return cmd->convert_arg;
326 static void labpc_set_ai_convert_period(struct comedi_cmd *cmd,
329 if (cmd->convert_src != TRIG_TIMER)
333 cmd->scan_begin_src == TRIG_TIMER) {
334 cmd->scan_begin_arg = ns;
335 if (cmd->convert_arg > cmd->scan_begin_arg)
336 cmd->convert_arg = cmd->scan_begin_arg;
338 cmd->convert_arg = ns;
342 static unsigned int labpc_ai_scan_period(const struct comedi_cmd *cmd,
345 if (cmd->scan_begin_src != TRIG_TIMER)
348 if (mode == MODE_SINGLE_CHAN && cmd->convert_src == TRIG_TIMER)
351 return cmd->scan_begin_arg;
354 static void labpc_set_ai_scan_period(struct comedi_cmd *cmd,
357 if (cmd->scan_begin_src != TRIG_TIMER)
360 if (mode == MODE_SINGLE_CHAN && cmd->convert_src == TRIG_TIMER)
363 cmd->scan_begin_arg = ns;
367 static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd,
383 convert_period = labpc_ai_convert_period(cmd, mode);
384 scan_period = labpc_ai_scan_period(cmd, mode);
400 switch (cmd->flags & CMDF_ROUND_MASK) {
429 labpc_set_ai_convert_period(cmd, mode,
431 labpc_set_ai_scan_period(cmd, mode,
445 &scan_period, cmd->flags);
446 labpc_set_ai_scan_period(cmd, mode, scan_period);
455 &convert_period, cmd->flags);
456 labpc_set_ai_convert_period(cmd, mode, convert_period);
460 static enum scan_mode labpc_ai_scan_mode(const struct comedi_cmd *cmd)
465 if (cmd->chanlist_len == 1)
469 if (cmd->chanlist == NULL)
472 chan0 = CR_CHAN(cmd->chanlist[0]);
473 chan1 = CR_CHAN(cmd->chanlist[1]);
486 struct comedi_cmd *cmd)
488 enum scan_mode mode = labpc_ai_scan_mode(cmd);
489 unsigned int chan0 = CR_CHAN(cmd->chanlist[0]);
490 unsigned int range0 = CR_RANGE(cmd->chanlist[0]);
491 unsigned int aref0 = CR_AREF(cmd->chanlist[0]);
497 for (i = 0; i < cmd->chanlist_len; i++) {
498 unsigned int chan = CR_CHAN(cmd->chanlist[i]);
499 unsigned int range = CR_RANGE(cmd->chanlist[i]);
500 unsigned int aref = CR_AREF(cmd->chanlist[i]);
520 if (chan != (cmd->chanlist_len - i - 1)) {
545 struct comedi_subdevice *s, struct comedi_cmd *cmd)
555 err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW | TRIG_EXT);
556 err |= cfc_check_trigger_src(&cmd->scan_begin_src,
558 err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_TIMER | TRIG_EXT);
559 err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT);
564 err |= cfc_check_trigger_src(&cmd->stop_src, stop_mask);
571 err |= cfc_check_trigger_is_unique(cmd->start_src);
572 err |= cfc_check_trigger_is_unique(cmd->scan_begin_src);
573 err |= cfc_check_trigger_is_unique(cmd->convert_src);
574 err |= cfc_check_trigger_is_unique(cmd->stop_src);
579 if (cmd->start_src == TRIG_EXT && cmd->stop_src == TRIG_EXT)
587 switch (cmd->start_src) {
589 err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
596 if (!cmd->chanlist_len)
598 err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
600 if (cmd->convert_src == TRIG_TIMER)
601 err |= cfc_check_trigger_arg_min(&cmd->convert_arg,
605 if (cmd->scan_begin_src == TRIG_TIMER) {
606 if (cmd->convert_src == TRIG_TIMER)
607 err |= cfc_check_trigger_arg_min(&cmd->scan_begin_arg,
608 cmd->convert_arg * cmd->chanlist_len);
609 err |= cfc_check_trigger_arg_min(&cmd->scan_begin_arg,
610 board->ai_speed * cmd->chanlist_len);
613 switch (cmd->stop_src) {
615 err |= cfc_check_trigger_arg_min(&cmd->stop_arg, 1);
618 err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
633 tmp = cmd->convert_arg;
634 tmp2 = cmd->scan_begin_arg;
635 mode = labpc_ai_scan_mode(cmd);
636 labpc_adc_timing(dev, cmd, mode);
637 if (tmp != cmd->convert_arg || tmp2 != cmd->scan_begin_arg)
644 if (cmd->chanlist && cmd->chanlist_len > 0)
645 err |= labpc_ai_check_chanlist(dev, s, cmd);
658 struct comedi_cmd *cmd = &async->cmd;
659 enum scan_mode mode = labpc_ai_scan_mode(cmd);
661 cmd->chanlist[cmd->chanlist_len - 1] :
662 cmd->chanlist[0];
673 if (cmd->stop_src == TRIG_COUNT)
674 devpriv->count = cmd->stop_arg * cmd->chanlist_len;
677 if (cmd->stop_src == TRIG_EXT) {
693 (cmd->flags & (CMDF_WAKE_EOS | CMDF_PRIORITY)) == 0)
698 (cmd->flags & CMDF_WAKE_EOS) == 0 &&
700 (cmd->stop_src != TRIG_COUNT || devpriv->count > 256))
709 (cmd->stop_src == TRIG_EXT));
721 devpriv->write_byte(dev, cmd->chanlist_len, INTERVAL_COUNT_REG);
725 if (cmd->convert_src == TRIG_TIMER ||
726 cmd->scan_begin_src == TRIG_TIMER) {
728 labpc_adc_timing(dev, cmd, mode);
734 if (labpc_ai_convert_period(cmd, mode)) {
744 if (labpc_ai_scan_period(cmd, mode)) {
764 if (cmd->convert_src != TRIG_EXT)
768 if (!labpc_use_continuous_mode(cmd, mode)) {
770 if (cmd->scan_begin_src == TRIG_EXT)
786 if (cmd->start_src == TRIG_EXT)
790 if (cmd->stop_src == TRIG_EXT)
805 struct comedi_cmd *cmd = &async->cmd;
815 if (cmd->stop_src == TRIG_COUNT) {
853 struct comedi_cmd *cmd;
861 cmd = &async->cmd;
904 if (cmd->stop_src == TRIG_EXT) {
912 if (cmd->stop_src == TRIG_COUNT) {