mirror of https://gitee.com/openkylin/linux.git
staging: comedi: cb_das16_cs: remove incomplete async command support
This driver has a (*do_cmdtest) function for analog input async command support but the (*do_cmd) function just returns -EINVAL. Remove the incomplete async command support. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
bb73fc99bd
commit
654410c90d
|
@ -95,12 +95,6 @@ static const struct comedi_lrange das16cs_ai_range = {
|
|||
}
|
||||
};
|
||||
|
||||
static irqreturn_t das16cs_interrupt(int irq, void *d)
|
||||
{
|
||||
/* struct comedi_device *dev = d; */
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int das16cs_ai_eoc(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s,
|
||||
struct comedi_insn *insn,
|
||||
|
@ -161,117 +155,6 @@ static int das16cs_ai_rinsn(struct comedi_device *dev,
|
|||
return i;
|
||||
}
|
||||
|
||||
static int das16cs_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int das16cs_ai_cmdtest(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s,
|
||||
struct comedi_cmd *cmd)
|
||||
{
|
||||
int err = 0;
|
||||
int tmp;
|
||||
|
||||
/* Step 1 : check if triggers are trivially valid */
|
||||
|
||||
err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW);
|
||||
err |= cfc_check_trigger_src(&cmd->scan_begin_src,
|
||||
TRIG_TIMER | TRIG_EXT);
|
||||
err |= cfc_check_trigger_src(&cmd->convert_src,
|
||||
TRIG_TIMER | TRIG_EXT);
|
||||
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->scan_begin_src);
|
||||
err |= cfc_check_trigger_is_unique(cmd->convert_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);
|
||||
|
||||
#define MAX_SPEED 10000 /* in nanoseconds */
|
||||
#define MIN_SPEED 1000000000 /* in nanoseconds */
|
||||
|
||||
if (cmd->scan_begin_src == TRIG_TIMER) {
|
||||
err |= cfc_check_trigger_arg_min(&cmd->scan_begin_arg,
|
||||
MAX_SPEED);
|
||||
err |= cfc_check_trigger_arg_max(&cmd->scan_begin_arg,
|
||||
MIN_SPEED);
|
||||
} else {
|
||||
/* external trigger */
|
||||
/* should be level/edge, hi/lo specification here */
|
||||
/* should specify multiple external triggers */
|
||||
err |= cfc_check_trigger_arg_max(&cmd->scan_begin_arg, 9);
|
||||
}
|
||||
if (cmd->convert_src == TRIG_TIMER) {
|
||||
err |= cfc_check_trigger_arg_min(&cmd->convert_arg,
|
||||
MAX_SPEED);
|
||||
err |= cfc_check_trigger_arg_max(&cmd->convert_arg,
|
||||
MIN_SPEED);
|
||||
} else {
|
||||
/* external trigger */
|
||||
/* see above */
|
||||
err |= cfc_check_trigger_arg_max(&cmd->convert_arg, 9);
|
||||
}
|
||||
|
||||
err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
|
||||
|
||||
if (cmd->stop_src == TRIG_COUNT)
|
||||
err |= cfc_check_trigger_arg_max(&cmd->stop_arg, 0x00ffffff);
|
||||
else /* TRIG_NONE */
|
||||
err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
|
||||
|
||||
if (err)
|
||||
return 3;
|
||||
|
||||
/* step 4: fix up any arguments */
|
||||
|
||||
if (cmd->scan_begin_src == TRIG_TIMER) {
|
||||
unsigned int div1 = 0, div2 = 0;
|
||||
|
||||
tmp = cmd->scan_begin_arg;
|
||||
i8253_cascade_ns_to_timer(I8254_OSC_BASE_10MHZ,
|
||||
&div1, &div2,
|
||||
&cmd->scan_begin_arg, cmd->flags);
|
||||
if (tmp != cmd->scan_begin_arg)
|
||||
err++;
|
||||
}
|
||||
if (cmd->convert_src == TRIG_TIMER) {
|
||||
unsigned int div1 = 0, div2 = 0;
|
||||
|
||||
tmp = cmd->convert_arg;
|
||||
i8253_cascade_ns_to_timer(I8254_OSC_BASE_10MHZ,
|
||||
&div1, &div2,
|
||||
&cmd->scan_begin_arg, cmd->flags);
|
||||
if (tmp != cmd->convert_arg)
|
||||
err++;
|
||||
if (cmd->scan_begin_src == TRIG_TIMER &&
|
||||
cmd->scan_begin_arg <
|
||||
cmd->convert_arg * cmd->scan_end_arg) {
|
||||
cmd->scan_begin_arg =
|
||||
cmd->convert_arg * cmd->scan_end_arg;
|
||||
err++;
|
||||
}
|
||||
}
|
||||
|
||||
if (err)
|
||||
return 4;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int das16cs_ao_winsn(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s,
|
||||
struct comedi_insn *insn, unsigned int *data)
|
||||
|
@ -409,10 +292,6 @@ static int das16cs_auto_attach(struct comedi_device *dev,
|
|||
dev->iobase = link->resource[0]->start;
|
||||
|
||||
link->priv = dev;
|
||||
ret = pcmcia_request_irq(link, das16cs_interrupt);
|
||||
if (ret)
|
||||
return ret;
|
||||
dev->irq = link->irq;
|
||||
|
||||
devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv));
|
||||
if (!devpriv)
|
||||
|
@ -423,7 +302,6 @@ static int das16cs_auto_attach(struct comedi_device *dev,
|
|||
return ret;
|
||||
|
||||
s = &dev->subdevices[0];
|
||||
dev->read_subdev = s;
|
||||
/* analog input subdevice */
|
||||
s->type = COMEDI_SUBD_AI;
|
||||
s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_DIFF | SDF_CMD_READ;
|
||||
|
@ -432,8 +310,6 @@ static int das16cs_auto_attach(struct comedi_device *dev,
|
|||
s->range_table = &das16cs_ai_range;
|
||||
s->len_chanlist = 16;
|
||||
s->insn_read = das16cs_ai_rinsn;
|
||||
s->do_cmd = das16cs_ai_cmd;
|
||||
s->do_cmdtest = das16cs_ai_cmdtest;
|
||||
|
||||
s = &dev->subdevices[1];
|
||||
/* analog output subdevice */
|
||||
|
|
Loading…
Reference in New Issue