summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/drivers/ni_65xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_65xx.c')
-rw-r--r--drivers/staging/comedi/drivers/ni_65xx.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c
index 6a89e5c166e3..5907fd262a38 100644
--- a/drivers/staging/comedi/drivers/ni_65xx.c
+++ b/drivers/staging/comedi/drivers/ni_65xx.c
@@ -281,13 +281,16 @@ static inline struct ni_65xx_subdevice_private *sprivate(struct comedi_subdevice
return subdev->private;
}
-static struct ni_65xx_subdevice_private *ni_65xx_alloc_subdevice_private(void)
+static int ni_65xx_alloc_subdevice_private(struct comedi_subdevice *s)
{
- struct ni_65xx_subdevice_private *subdev_private =
- kzalloc(sizeof(struct ni_65xx_subdevice_private), GFP_KERNEL);
- if (subdev_private == NULL)
- return NULL;
- return subdev_private;
+ struct ni_65xx_subdevice_private *spriv;
+
+ spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
+ if (!spriv)
+ return -ENOMEM;
+ comedi_set_spriv(s, spriv);
+
+ return 0;
}
static int ni_65xx_config_filter(struct comedi_device *dev,
@@ -632,9 +635,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev,
s->maxdata = 1;
s->insn_config = ni_65xx_dio_insn_config;
s->insn_bits = ni_65xx_dio_insn_bits;
- s->private = ni_65xx_alloc_subdevice_private();
- if (s->private == NULL)
- return -ENOMEM;
+ ret = ni_65xx_alloc_subdevice_private(s);
+ if (ret)
+ return ret;
sprivate(s)->base_port = 0;
} else {
s->type = COMEDI_SUBD_UNUSED;
@@ -649,9 +652,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev,
s->range_table = &range_digital;
s->maxdata = 1;
s->insn_bits = ni_65xx_dio_insn_bits;
- s->private = ni_65xx_alloc_subdevice_private();
- if (s->private == NULL)
- return -ENOMEM;
+ ret = ni_65xx_alloc_subdevice_private(s);
+ if (ret)
+ return ret;
sprivate(s)->base_port = board->num_di_ports;
} else {
s->type = COMEDI_SUBD_UNUSED;
@@ -667,9 +670,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev,
s->maxdata = 1;
s->insn_config = ni_65xx_dio_insn_config;
s->insn_bits = ni_65xx_dio_insn_bits;
- s->private = ni_65xx_alloc_subdevice_private();
- if (s->private == NULL)
- return -ENOMEM;
+ ret = ni_65xx_alloc_subdevice_private(s);
+ if (ret)
+ return ret;
sprivate(s)->base_port = 0;
for (i = 0; i < board->num_dio_ports; ++i) {
/* configure all ports for input */
@@ -725,7 +728,6 @@ static int ni_65xx_auto_attach(struct comedi_device *dev,
static void ni_65xx_detach(struct comedi_device *dev)
{
struct ni_65xx_private *devpriv = dev->private;
- int i;
if (devpriv && devpriv->mite && devpriv->mite->daq_io_addr) {
writeb(0x00,
@@ -734,8 +736,6 @@ static void ni_65xx_detach(struct comedi_device *dev)
}
if (dev->irq)
free_irq(dev->irq, dev);
- for (i = 0; i < dev->n_subdevices; ++i)
- comedi_spriv_free(dev, i);
if (devpriv) {
if (devpriv->mite) {
mite_unsetup(devpriv->mite);