Skip to content

Commit c3be5c7

Browse files
H Hartley Sweetengregkh
authored andcommitted
staging: comedi: ni_mio_common: use cfc_check_trigger_arg_*() helpers
Use the new helpers in the step 3 tests of ni_{ai,ao,cdio}_cmdtest(). Note that all the command triggers in ni_cdio_cmdtest are single source so the extra tests are not required. Signed-off-by: H Hartley Sweeten <[email protected]> Cc: Ian Abbott <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 7ec2659 commit c3be5c7

File tree

1 file changed

+51
-135
lines changed

1 file changed

+51
-135
lines changed

drivers/staging/comedi/drivers/ni_mio_common.c

Lines changed: 51 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -2256,7 +2256,7 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
22562256
if (err)
22572257
return 2;
22582258

2259-
/* step 3: make sure arguments are trivially compatible */
2259+
/* Step 3: check if arguments are trivially valid */
22602260

22612261
if (cmd->start_src == TRIG_EXT) {
22622262
/* external trigger */
@@ -2265,63 +2265,38 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
22652265
if (tmp > 16)
22662266
tmp = 16;
22672267
tmp |= (cmd->start_arg & (CR_INVERT | CR_EDGE));
2268-
if (cmd->start_arg != tmp) {
2269-
cmd->start_arg = tmp;
2270-
err++;
2271-
}
2268+
err |= cfc_check_trigger_arg_is(&cmd->start_arg, tmp);
22722269
} else {
2273-
if (cmd->start_arg != 0) {
2274-
/* true for both TRIG_NOW and TRIG_INT */
2275-
cmd->start_arg = 0;
2276-
err++;
2277-
}
2270+
/* true for both TRIG_NOW and TRIG_INT */
2271+
err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
22782272
}
2273+
22792274
if (cmd->scan_begin_src == TRIG_TIMER) {
2280-
if (cmd->scan_begin_arg < ni_min_ai_scan_period_ns(dev,
2281-
cmd->
2282-
chanlist_len))
2283-
{
2284-
cmd->scan_begin_arg =
2285-
ni_min_ai_scan_period_ns(dev, cmd->chanlist_len);
2286-
err++;
2287-
}
2288-
if (cmd->scan_begin_arg > devpriv->clock_ns * 0xffffff) {
2289-
cmd->scan_begin_arg = devpriv->clock_ns * 0xffffff;
2290-
err++;
2291-
}
2275+
err |= cfc_check_trigger_arg_min(&cmd->scan_begin_arg,
2276+
ni_min_ai_scan_period_ns(dev, cmd->chanlist_len));
2277+
err |= cfc_check_trigger_arg_max(&cmd->scan_begin_arg,
2278+
devpriv->clock_ns * 0xffffff);
22922279
} else if (cmd->scan_begin_src == TRIG_EXT) {
22932280
/* external trigger */
22942281
unsigned int tmp = CR_CHAN(cmd->scan_begin_arg);
22952282

22962283
if (tmp > 16)
22972284
tmp = 16;
22982285
tmp |= (cmd->scan_begin_arg & (CR_INVERT | CR_EDGE));
2299-
if (cmd->scan_begin_arg != tmp) {
2300-
cmd->scan_begin_arg = tmp;
2301-
err++;
2302-
}
2286+
err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, tmp);
23032287
} else { /* TRIG_OTHER */
2304-
if (cmd->scan_begin_arg) {
2305-
cmd->scan_begin_arg = 0;
2306-
err++;
2307-
}
2288+
err |= cfc_check_trigger_arg_is(&cmd->scan_begin_arg, 0);
23082289
}
2290+
23092291
if (cmd->convert_src == TRIG_TIMER) {
23102292
if ((boardtype.reg_type == ni_reg_611x)
23112293
|| (boardtype.reg_type == ni_reg_6143)) {
2312-
if (cmd->convert_arg != 0) {
2313-
cmd->convert_arg = 0;
2314-
err++;
2315-
}
2294+
err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0);
23162295
} else {
2317-
if (cmd->convert_arg < boardtype.ai_speed) {
2318-
cmd->convert_arg = boardtype.ai_speed;
2319-
err++;
2320-
}
2321-
if (cmd->convert_arg > devpriv->clock_ns * 0xffff) {
2322-
cmd->convert_arg = devpriv->clock_ns * 0xffff;
2323-
err++;
2324-
}
2296+
err |= cfc_check_trigger_arg_min(&cmd->convert_arg,
2297+
boardtype.ai_speed);
2298+
err |= cfc_check_trigger_arg_max(&cmd->convert_arg,
2299+
devpriv->clock_ns * 0xffff);
23252300
}
23262301
} else if (cmd->convert_src == TRIG_EXT) {
23272302
/* external trigger */
@@ -2330,40 +2305,23 @@ static int ni_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
23302305
if (tmp > 16)
23312306
tmp = 16;
23322307
tmp |= (cmd->convert_arg & (CR_ALT_FILTER | CR_INVERT));
2333-
if (cmd->convert_arg != tmp) {
2334-
cmd->convert_arg = tmp;
2335-
err++;
2336-
}
2308+
err |= cfc_check_trigger_arg_is(&cmd->convert_arg, tmp);
23372309
} else if (cmd->convert_src == TRIG_NOW) {
2338-
if (cmd->convert_arg != 0) {
2339-
cmd->convert_arg = 0;
2340-
err++;
2341-
}
2310+
err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0);
23422311
}
23432312

2344-
if (cmd->scan_end_arg != cmd->chanlist_len) {
2345-
cmd->scan_end_arg = cmd->chanlist_len;
2346-
err++;
2347-
}
2313+
err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
2314+
23482315
if (cmd->stop_src == TRIG_COUNT) {
23492316
unsigned int max_count = 0x01000000;
23502317

23512318
if (boardtype.reg_type == ni_reg_611x)
23522319
max_count -= num_adc_stages_611x;
2353-
if (cmd->stop_arg > max_count) {
2354-
cmd->stop_arg = max_count;
2355-
err++;
2356-
}
2357-
if (cmd->stop_arg < 1) {
2358-
cmd->stop_arg = 1;
2359-
err++;
2360-
}
2320+
err |= cfc_check_trigger_arg_max(&cmd->stop_arg, max_count);
2321+
err |= cfc_check_trigger_arg_min(&cmd->stop_arg, 1);
23612322
} else {
23622323
/* TRIG_NONE */
2363-
if (cmd->stop_arg != 0) {
2364-
cmd->stop_arg = 0;
2365-
err++;
2366-
}
2324+
err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
23672325
}
23682326

23692327
if (err)
@@ -3432,7 +3390,7 @@ static int ni_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
34323390
if (err)
34333391
return 2;
34343392

3435-
/* step 3: make sure arguments are trivially compatible */
3393+
/* Step 3: check if arguments are trivially valid */
34363394

34373395
if (cmd->start_src == TRIG_EXT) {
34383396
/* external trigger */
@@ -3441,48 +3399,27 @@ static int ni_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
34413399
if (tmp > 18)
34423400
tmp = 18;
34433401
tmp |= (cmd->start_arg & (CR_INVERT | CR_EDGE));
3444-
if (cmd->start_arg != tmp) {
3445-
cmd->start_arg = tmp;
3446-
err++;
3447-
}
3402+
err |= cfc_check_trigger_arg_is(&cmd->start_arg, tmp);
34483403
} else {
3449-
if (cmd->start_arg != 0) {
3450-
/* true for both TRIG_NOW and TRIG_INT */
3451-
cmd->start_arg = 0;
3452-
err++;
3453-
}
3404+
/* true for both TRIG_NOW and TRIG_INT */
3405+
err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
34543406
}
3407+
34553408
if (cmd->scan_begin_src == TRIG_TIMER) {
3456-
if (cmd->scan_begin_arg < boardtype.ao_speed) {
3457-
cmd->scan_begin_arg = boardtype.ao_speed;
3458-
err++;
3459-
}
3460-
if (cmd->scan_begin_arg > devpriv->clock_ns * 0xffffff) { /* XXX check */
3461-
cmd->scan_begin_arg = devpriv->clock_ns * 0xffffff;
3462-
err++;
3463-
}
3464-
}
3465-
if (cmd->convert_arg != 0) {
3466-
cmd->convert_arg = 0;
3467-
err++;
3468-
}
3469-
if (cmd->scan_end_arg != cmd->chanlist_len) {
3470-
cmd->scan_end_arg = cmd->chanlist_len;
3471-
err++;
3472-
}
3473-
if (cmd->stop_src == TRIG_COUNT) { /* XXX check */
3474-
if (cmd->stop_arg > 0x00ffffff) {
3475-
cmd->stop_arg = 0x00ffffff;
3476-
err++;
3477-
}
3478-
} else {
3479-
/* TRIG_NONE */
3480-
if (cmd->stop_arg != 0) {
3481-
cmd->stop_arg = 0;
3482-
err++;
3483-
}
3409+
err |= cfc_check_trigger_arg_min(&cmd->scan_begin_arg,
3410+
boardtype.ao_speed);
3411+
err |= cfc_check_trigger_arg_max(&cmd->scan_begin_arg,
3412+
devpriv->clock_ns * 0xffffff);
34843413
}
34853414

3415+
err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0);
3416+
err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
3417+
3418+
if (cmd->stop_src == TRIG_COUNT)
3419+
err |= cfc_check_trigger_arg_max(&cmd->stop_arg, 0x00ffffff);
3420+
else /* TRIG_NONE */
3421+
err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
3422+
34863423
if (err)
34873424
return 3;
34883425

@@ -3706,39 +3643,18 @@ static int ni_cdio_cmdtest(struct comedi_device *dev,
37063643
if (err)
37073644
return 2;
37083645

3709-
/* step 3: make sure arguments are trivially compatible */
3710-
if (cmd->start_src == TRIG_INT) {
3711-
if (cmd->start_arg != 0) {
3712-
cmd->start_arg = 0;
3713-
err++;
3714-
}
3715-
}
3716-
if (cmd->scan_begin_src == TRIG_EXT) {
3717-
tmp = cmd->scan_begin_arg;
3718-
tmp &= CR_PACK_FLAGS(CDO_Sample_Source_Select_Mask, 0, 0,
3719-
CR_INVERT);
3720-
if (tmp != cmd->scan_begin_arg) {
3721-
err++;
3722-
}
3723-
}
3724-
if (cmd->convert_src == TRIG_NOW) {
3725-
if (cmd->convert_arg) {
3726-
cmd->convert_arg = 0;
3727-
err++;
3728-
}
3729-
}
3646+
/* Step 3: check if arguments are trivially valid */
37303647

3731-
if (cmd->scan_end_arg != cmd->chanlist_len) {
3732-
cmd->scan_end_arg = cmd->chanlist_len;
3733-
err++;
3734-
}
3648+
err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
37353649

3736-
if (cmd->stop_src == TRIG_NONE) {
3737-
if (cmd->stop_arg != 0) {
3738-
cmd->stop_arg = 0;
3739-
err++;
3740-
}
3741-
}
3650+
tmp = cmd->scan_begin_arg;
3651+
tmp &= CR_PACK_FLAGS(CDO_Sample_Source_Select_Mask, 0, 0, CR_INVERT);
3652+
if (tmp != cmd->scan_begin_arg)
3653+
err |= -EINVAL;
3654+
3655+
err |= cfc_check_trigger_arg_is(&cmd->convert_arg, 0);
3656+
err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len);
3657+
err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0);
37423658

37433659
if (err)
37443660
return 3;

0 commit comments

Comments
 (0)