diff options
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_65xx.c')
-rw-r--r-- | drivers/staging/comedi/drivers/ni_65xx.c | 36 |
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); |