Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

staging: comedi: ni_tio: fix ni_tio_insn_config()

The (*insn_config) functions are supposed to return an errno or the number
of 'data' values used for the instruction (insn->n). Currently this function
returns an errno or 0. Fix the function to work like the core expects.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

H Hartley Sweeten and committed by
Greg Kroah-Hartman
592ef9fb 475ea1ed

+20 -13
+20 -13
drivers/staging/comedi/drivers/ni_tio.c
··· 1295 1295 struct ni_gpct *counter = s->private; 1296 1296 unsigned int cidx = counter->counter_index; 1297 1297 unsigned int status; 1298 + int ret = 0; 1298 1299 1299 1300 switch (data[0]) { 1300 1301 case INSN_CONFIG_SET_COUNTER_MODE: 1301 - return ni_tio_set_counter_mode(counter, data[1]); 1302 + ret = ni_tio_set_counter_mode(counter, data[1]); 1303 + break; 1302 1304 case INSN_CONFIG_ARM: 1303 - return ni_tio_arm(counter, true, data[1]); 1305 + ret = ni_tio_arm(counter, true, data[1]); 1306 + break; 1304 1307 case INSN_CONFIG_DISARM: 1305 - ni_tio_arm(counter, false, 0); 1306 - return 0; 1308 + ret = ni_tio_arm(counter, false, 0); 1309 + break; 1307 1310 case INSN_CONFIG_GET_COUNTER_STATUS: 1308 1311 data[1] = 0; 1309 1312 status = ni_tio_read(counter, NITIO_SHARED_STATUS_REG(cidx)); ··· 1316 1313 data[1] |= COMEDI_COUNTER_COUNTING; 1317 1314 } 1318 1315 data[2] = COMEDI_COUNTER_ARMED | COMEDI_COUNTER_COUNTING; 1319 - return 0; 1316 + break; 1320 1317 case INSN_CONFIG_SET_CLOCK_SRC: 1321 - return ni_tio_set_clock_src(counter, data[1], data[2]); 1318 + ret = ni_tio_set_clock_src(counter, data[1], data[2]); 1319 + break; 1322 1320 case INSN_CONFIG_GET_CLOCK_SRC: 1323 1321 ni_tio_get_clock_src(counter, &data[1], &data[2]); 1324 - return 0; 1322 + break; 1325 1323 case INSN_CONFIG_SET_GATE_SRC: 1326 - return ni_tio_set_gate_src(counter, data[1], data[2]); 1324 + ret = ni_tio_set_gate_src(counter, data[1], data[2]); 1325 + break; 1327 1326 case INSN_CONFIG_GET_GATE_SRC: 1328 - return ni_tio_get_gate_src(counter, data[1], &data[2]); 1327 + ret = ni_tio_get_gate_src(counter, data[1], &data[2]); 1328 + break; 1329 1329 case INSN_CONFIG_SET_OTHER_SRC: 1330 - return ni_tio_set_other_src(counter, data[1], data[2]); 1330 + ret = ni_tio_set_other_src(counter, data[1], data[2]); 1331 + break; 1331 1332 case INSN_CONFIG_RESET: 1332 1333 ni_tio_reset_count_and_disarm(counter); 1333 - return 0; 1334 - default: 1335 1334 break; 1335 + default: 1336 + return -EINVAL; 1336 1337 } 1337 - return -EINVAL; 1338 + return ret ? ret : insn->n; 1338 1339 } 1339 1340 EXPORT_SYMBOL_GPL(ni_tio_insn_config); 1340 1341