aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/comedi/drivers/unioxx5.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/staging/comedi/drivers/unioxx5.c b/drivers/staging/comedi/drivers/unioxx5.c
index fc88b66f408d..c9201d821fbc 100644
--- a/drivers/staging/comedi/drivers/unioxx5.c
+++ b/drivers/staging/comedi/drivers/unioxx5.c
@@ -371,15 +371,13 @@ static int __unioxx5_subdev_init(struct comedi_device *dev,
371 int i, to, ndef_flag = 0; 371 int i, to, ndef_flag = 0;
372 int ret; 372 int ret;
373 373
374 usp = kzalloc(sizeof(*usp), GFP_KERNEL); 374 usp = comedi_alloc_spriv(s, sizeof(*usp));
375 if (usp == NULL) 375 if (!usp)
376 return -ENOMEM; 376 return -ENOMEM;
377 377
378 ret = __comedi_request_region(dev, iobase, UNIOXX5_SIZE); 378 ret = __comedi_request_region(dev, iobase, UNIOXX5_SIZE);
379 if (ret) { 379 if (ret)
380 kfree(usp);
381 return ret; 380 return ret;
382 }
383 usp->usp_iobase = iobase; 381 usp->usp_iobase = iobase;
384 382
385 /* defining modules types */ 383 /* defining modules types */
@@ -413,7 +411,6 @@ static int __unioxx5_subdev_init(struct comedi_device *dev,
413 411
414 /* initial subdevice for digital or analog i/o */ 412 /* initial subdevice for digital or analog i/o */
415 s->type = COMEDI_SUBD_DIO; 413 s->type = COMEDI_SUBD_DIO;
416 s->private = usp;
417 s->subdev_flags = SDF_READABLE | SDF_WRITABLE; 414 s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
418 s->n_chan = UNIOXX5_NUM_OF_CHANS; 415 s->n_chan = UNIOXX5_NUM_OF_CHANS;
419 s->maxdata = 0xFFF; 416 s->maxdata = 0xFFF;
@@ -483,7 +480,6 @@ static void unioxx5_detach(struct comedi_device *dev)
483 spriv = s->private; 480 spriv = s->private;
484 if (spriv && spriv->usp_iobase) 481 if (spriv && spriv->usp_iobase)
485 release_region(spriv->usp_iobase, UNIOXX5_SIZE); 482 release_region(spriv->usp_iobase, UNIOXX5_SIZE);
486 kfree(spriv);
487 } 483 }
488} 484}
489 485