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

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

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
Loading
Loading
Loading
Loading
+45 −40
Original line number Diff line number Diff line
@@ -171,51 +171,32 @@ static int insn_rw_emulate_bits(struct comedi_device *dev,
	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_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) {
	struct comedi_async *async;
	unsigned int buf_size;
	int ret;

			BUG_ON((s->subdev_flags & (SDF_CMD_READ |
						   SDF_CMD_WRITE)) == 0);
	BUG_ON((s->subdev_flags & (SDF_CMD_READ | SDF_CMD_WRITE)) == 0);
	BUG_ON(!s->do_cmdtest);

			async =
			    kzalloc(sizeof(struct comedi_async), GFP_KERNEL);
			if (async == NULL) {
				dev_warn(dev->class_dev,
					 "failed to allocate async struct\n");
	async = kzalloc(sizeof(*async), GFP_KERNEL);
	if (!async) {
		dev_warn(dev->class_dev, "failed to allocate async struct\n");
		return -ENOMEM;
	}
	init_waitqueue_head(&async->wait_head);
	async->subdevice = s;
	s->async = async;

			async->max_bufsize =
				comedi_default_buf_maxsize_kb * 1024;
	async->max_bufsize = comedi_default_buf_maxsize_kb * 1024;
	buf_size = comedi_default_buf_size_kb * 1024;
	if (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) {
				dev_warn(dev->class_dev,
					 "Buffer allocation failed\n");
		dev_warn(dev->class_dev, "Buffer allocation failed\n");
		return -ENOMEM;
	}
	if (s->buf_change) {
@@ -223,7 +204,31 @@ static int postconfig(struct comedi_device *dev)
		if (ret < 0)
			return ret;
	}

	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)
@@ -254,7 +259,7 @@ static int postconfig(struct comedi_device *dev)
/* called with module refcount incremented, decrements it */
static int comedi_device_postconfig(struct comedi_device *dev)
{
	int ret = postconfig(dev);
	int ret = __comedi_device_postconfig(dev);
	module_put(dev->driver->module);
	if (ret < 0) {
		__comedi_device_detach(dev);