summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi
diff options
context:
space:
mode:
authorIan Abbott2013-01-29 15:05:58 +0100
committerGreg Kroah-Hartman2013-01-30 05:11:41 +0100
commit104640606be0df6bcdb5ec7960a9c3c1278117ae (patch)
treeaa572bfcb97400ae3ec27eab3037b082c7bb8217 /drivers/staging/comedi
parentstaging: comedi: ni_labpc_cs: remove '#undef LABPC_DEBUG' (diff)
downloadkernel-qcow2-linux-104640606be0df6bcdb5ec7960a9c3c1278117ae.tar.gz
kernel-qcow2-linux-104640606be0df6bcdb5ec7960a9c3c1278117ae.tar.xz
kernel-qcow2-linux-104640606be0df6bcdb5ec7960a9c3c1278117ae.zip
staging: comedi: don't override read/write subdevice if not supported
For comedi devices that support asynchronous commands on some of their subdevices, the comedi core creates extra device files for each of those subdevices of the form "/dev/comedi%i_subd%i". These use the same comedi device as the corresponding "/dev/comedi%i" but override the default "read" and "write" subdevice for the device. Currently it overrides both the read and write subdevice, but it only makes sense to override the "read" subdevice if the subdevice supports "read" commands, and to override the "write" subdevice if the subdevice supports "write" commands. In `comedi_alloc_subdevice_minor()`, only set `info->read_subdevice` non-NULL if the subdevice has the `SDF_CMD_READ` flag set, and only set `info->write_subdevice` non-NULL if the subdevice has the `SDF_CMD_WRITE` flag set. (`comedi_read_subdevice(info)` will use the device's default read subdevice if `info->read_subdevice` is NULL. `comedi_write_subdevice(info)` will use the device's default write subdevice if `info->write_subdevice` is NULL. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi')
-rw-r--r--drivers/staging/comedi/comedi_fops.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index b798e42ee014..fa534fe4864b 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -2358,8 +2358,10 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev,
if (!info)
return -ENOMEM;
info->device = dev;
- info->read_subdevice = s;
- info->write_subdevice = s;
+ if (s->subdev_flags & SDF_CMD_READ)
+ info->read_subdevice = s;
+ if (s->subdev_flags & SDF_CMD_WRITE)
+ info->write_subdevice = s;
spin_lock(&comedi_file_info_table_lock);
for (i = COMEDI_FIRST_SUBDEVICE_MINOR; i < COMEDI_NUM_MINORS; ++i) {
if (comedi_file_info_table[i] == NULL) {