Commit 40f58a65 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: drivers (core): factor out async subdevice postconfig

Factor the setup of an async subdevice out of postconfig(). This allows
bringing the code back a couple indents and makes the postconfig a bit
clearer.

For aesthetic reasons, rename postconfig() to __comedi_device_postconfig().
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 01fca378
...@@ -171,51 +171,32 @@ static int insn_rw_emulate_bits(struct comedi_device *dev, ...@@ -171,51 +171,32 @@ static int insn_rw_emulate_bits(struct comedi_device *dev,
return 1; return 1;
} }
static int postconfig(struct comedi_device *dev) static int __comedi_device_postconfig_async(struct comedi_device *dev,
struct comedi_subdevice *s)
{ {
int i; struct comedi_async *async;
struct comedi_subdevice *s;
struct comedi_async *async = NULL;
int ret;
for (i = 0; i < dev->n_subdevices; i++) {
s = &dev->subdevices[i];
if (s->type == COMEDI_SUBD_UNUSED)
continue;
if (s->len_chanlist == 0)
s->len_chanlist = 1;
if (s->do_cmd) {
unsigned int buf_size; unsigned int buf_size;
int ret;
BUG_ON((s->subdev_flags & (SDF_CMD_READ | BUG_ON((s->subdev_flags & (SDF_CMD_READ | SDF_CMD_WRITE)) == 0);
SDF_CMD_WRITE)) == 0);
BUG_ON(!s->do_cmdtest); BUG_ON(!s->do_cmdtest);
async = async = kzalloc(sizeof(*async), GFP_KERNEL);
kzalloc(sizeof(struct comedi_async), GFP_KERNEL); if (!async) {
if (async == NULL) { dev_warn(dev->class_dev, "failed to allocate async struct\n");
dev_warn(dev->class_dev,
"failed to allocate async struct\n");
return -ENOMEM; return -ENOMEM;
} }
init_waitqueue_head(&async->wait_head); init_waitqueue_head(&async->wait_head);
async->subdevice = s; async->subdevice = s;
s->async = async; s->async = async;
async->max_bufsize = async->max_bufsize = comedi_default_buf_maxsize_kb * 1024;
comedi_default_buf_maxsize_kb * 1024;
buf_size = comedi_default_buf_size_kb * 1024; buf_size = comedi_default_buf_size_kb * 1024;
if (buf_size > async->max_bufsize) if (buf_size > async->max_bufsize)
buf_size = async->max_bufsize; buf_size = async->max_bufsize;
async->prealloc_buf = NULL;
async->prealloc_bufsz = 0;
if (comedi_buf_alloc(dev, s, buf_size) < 0) { if (comedi_buf_alloc(dev, s, buf_size) < 0) {
dev_warn(dev->class_dev, dev_warn(dev->class_dev, "Buffer allocation failed\n");
"Buffer allocation failed\n");
return -ENOMEM; return -ENOMEM;
} }
if (s->buf_change) { if (s->buf_change) {
...@@ -223,7 +204,31 @@ static int postconfig(struct comedi_device *dev) ...@@ -223,7 +204,31 @@ static int postconfig(struct comedi_device *dev)
if (ret < 0) if (ret < 0)
return ret; return ret;
} }
comedi_alloc_subdevice_minor(dev, s); comedi_alloc_subdevice_minor(dev, s);
return 0;
}
static int __comedi_device_postconfig(struct comedi_device *dev)
{
struct comedi_subdevice *s;
int ret;
int i;
for (i = 0; i < dev->n_subdevices; i++) {
s = &dev->subdevices[i];
if (s->type == COMEDI_SUBD_UNUSED)
continue;
if (s->len_chanlist == 0)
s->len_chanlist = 1;
if (s->do_cmd) {
ret = __comedi_device_postconfig_async(dev, s);
if (ret)
return ret;
} }
if (!s->range_table && !s->range_table_list) if (!s->range_table && !s->range_table_list)
...@@ -254,7 +259,7 @@ static int postconfig(struct comedi_device *dev) ...@@ -254,7 +259,7 @@ static int postconfig(struct comedi_device *dev)
/* called with module refcount incremented, decrements it */ /* called with module refcount incremented, decrements it */
static int comedi_device_postconfig(struct comedi_device *dev) static int comedi_device_postconfig(struct comedi_device *dev)
{ {
int ret = postconfig(dev); int ret = __comedi_device_postconfig(dev);
module_put(dev->driver->module); module_put(dev->driver->module);
if (ret < 0) { if (ret < 0) {
__comedi_device_detach(dev); __comedi_device_detach(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment