Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90a35c15 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman
Browse files

staging: comedi: store the 'index' for each subdevice



Store the 'index' for each comedi_subdevice when they are initially
allocated by comedi_alloc_subdevice(). This allows removing the
pointer math in comedi_fops.c which is used to figure out the
index that user space uses to access the individual subdevices.

Fix the ni_mio_common driver so it also uses the 'index' instead
of doing the pointer math.

Also, remove a couple unused macros in the pcmda12, pcmmio, and
pcmuio drivers which also do the pointer math to figure out the
index.

Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 71cf6d3e
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ static int resize_async_buffer(struct comedi_device *dev,
	}

	DPRINTK("comedi%i subd %d buffer resized to %i bytes\n",
		dev->minor, (int)(s - dev->subdevices), async->prealloc_bufsz);
		dev->minor, s->index, async->prealloc_bufsz);
	return 0;
}

@@ -624,13 +624,13 @@ static int do_devinfo_ioctl(struct comedi_device *dev,

	s = comedi_read_subdevice(info);
	if (s)
		devinfo.read_subdevice = s - dev->subdevices;
		devinfo.read_subdevice = s->index;
	else
		devinfo.read_subdevice = -1;

	s = comedi_write_subdevice(info);
	if (s)
		devinfo.write_subdevice = s - dev->subdevices;
		devinfo.write_subdevice = s->index;
	else
		devinfo.write_subdevice = -1;

@@ -2398,7 +2398,7 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev,
	s->minor = i;
	csdev = device_create(comedi_class, dev->class_dev,
			      MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i_subd%i",
			      dev->minor, (int)(s - dev->subdevices));
			      dev->minor, s->index);
	if (!IS_ERR(csdev))
		s->class_dev = csdev;
	dev_set_drvdata(csdev, info);
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@

struct comedi_subdevice {
	struct comedi_device *device;
	int index;
	int type;
	int n_chan;
	int subdev_flags;
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices)
	for (i = 0; i < num_subdevices; ++i) {
		s = &dev->subdevices[i];
		s->device = dev;
		s->index = i;
		s->async_dma_dir = DMA_NONE;
		spin_lock_init(&s->spin_lock);
		s->minor = -1;
+1 −1
Original line number Diff line number Diff line
@@ -986,7 +986,7 @@ static void ni_event(struct comedi_device *dev, struct comedi_subdevice *s)
	if (s->
	    async->events & (COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW |
			     COMEDI_CB_EOA)) {
		switch (s - dev->subdevices) {
		switch (s->index) {
		case NI_AI_SUBDEV:
			ni_ai_reset(dev, s);
			break;
+0 −1
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ Configuration Options:

#include <linux/pci.h>		/* for PCI devices */

#define SDEV_NO ((int)(s - dev->subdevices))
#define CHANS 8
#define IOSIZE 16
#define LSB(x) ((unsigned char)((x) & 0xff))
Loading