From 66076e7aa2edd6529c9ce8e129fba57351a3f378 Mon Sep 17 00:00:00 2001 From: Frank Mori Hess Date: Tue, 16 Sep 2008 13:59:10 +0000 Subject: [PATCH] Added insn_bits_supported field to subdevice info ioctl, as part of a fix for: BUG in do_test_for_insn_bits() : Device or resource busy when a program opens a device file and one of the subdevices is busy when it is opened. --- comedi/comedi_fops.c | 5 +++++ include/linux/comedi.h | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/comedi/comedi_fops.c b/comedi/comedi_fops.c index 99eee335..de439471 100644 --- a/comedi/comedi_fops.c +++ b/comedi/comedi_fops.c @@ -434,6 +434,11 @@ static int do_subdinfo_ioctl(comedi_device * dev, comedi_subdinfo * arg, if (s->do_cmd) us->subd_flags |= SDF_CMD; + if (s->insn_bits) + us->insn_bits_support = COMEDI_SUPPORTED; + else + us->insn_bits_support = COMEDI_UNSUPPORTED; + us->settling_time_0 = s->settling_time_0; } diff --git a/include/linux/comedi.h b/include/linux/comedi.h index 4f64572d..ca9a43c4 100644 --- a/include/linux/comedi.h +++ b/include/linux/comedi.h @@ -276,6 +276,13 @@ extern "C" { COMEDI_OPENDRAIN = 2 }; + enum comedi_support_level + { + COMEDI_UNKNOWN_SUPPORT = 0, + COMEDI_SUPPORTED, + COMEDI_UNSUPPORTED + }; + /* ioctls */ #define CIO 'd' @@ -385,6 +392,7 @@ extern "C" { unsigned int flags; }; + struct comedi_subdinfo_struct { unsigned int type; unsigned int n_chan; @@ -395,7 +403,8 @@ extern "C" { unsigned int flags; /* channel flags */ unsigned int range_type; /* lookup in kernel */ unsigned int settling_time_0; - unsigned int unused[9]; + unsigned insn_bits_support; /* see support_level enum for values*/ + unsigned int unused[8]; }; struct comedi_devinfo_struct { -- 2.26.2