[media] lirc_dev: place buffer allocation on separate function
authorAndi Shyti <andi.shyti@samsung.com>
Wed, 6 Jul 2016 09:01:13 +0000 (06:01 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 13 Jul 2016 17:52:36 +0000 (14:52 -0300)
During the driver registration, move the buffer allocation on a
separate function.

Signed-off-by: Andi Shyti <andi.shyti@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/rc/lirc_dev.c

index 92ae1903c01045cd173561078c25cec1697f14c5..571697811e4d50deb18c0e021c494f6f95d7a669 100644 (file)
@@ -203,13 +203,41 @@ err_out:
        return retval;
 }
 
-int lirc_register_driver(struct lirc_driver *d)
+static int lirc_allocate_buffer(struct irctl *ir)
 {
-       struct irctl *ir;
-       int minor;
+       int err;
        int bytes_in_key;
        unsigned int chunk_size;
        unsigned int buffer_size;
+       struct lirc_driver *d = &ir->d;
+
+       bytes_in_key = BITS_TO_LONGS(d->code_length) +
+                                               (d->code_length % 8 ? 1 : 0);
+       buffer_size = d->buffer_size ? d->buffer_size : BUFLEN / bytes_in_key;
+       chunk_size  = d->chunk_size  ? d->chunk_size  : bytes_in_key;
+
+       if (d->rbuf) {
+               ir->buf = d->rbuf;
+       } else {
+               ir->buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
+               if (!ir->buf)
+                       return -ENOMEM;
+
+               err = lirc_buffer_init(ir->buf, chunk_size, buffer_size);
+               if (err) {
+                       kfree(ir->buf);
+                       return err;
+               }
+       }
+       ir->chunk_size = ir->buf->chunk_size;
+
+       return 0;
+}
+
+int lirc_register_driver(struct lirc_driver *d)
+{
+       struct irctl *ir;
+       int minor;
        int err;
 
        if (!d) {
@@ -314,26 +342,9 @@ int lirc_register_driver(struct lirc_driver *d)
        /* some safety check 8-) */
        d->name[sizeof(d->name)-1] = '\0';
 
-       bytes_in_key = BITS_TO_LONGS(d->code_length) +
-                       (d->code_length % 8 ? 1 : 0);
-       buffer_size = d->buffer_size ? d->buffer_size : BUFLEN / bytes_in_key;
-       chunk_size  = d->chunk_size  ? d->chunk_size  : bytes_in_key;
-
-       if (d->rbuf) {
-               ir->buf = d->rbuf;
-       } else {
-               ir->buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
-               if (!ir->buf) {
-                       err = -ENOMEM;
-                       goto out_lock;
-               }
-               err = lirc_buffer_init(ir->buf, chunk_size, buffer_size);
-               if (err) {
-                       kfree(ir->buf);
-                       goto out_lock;
-               }
-       }
-       ir->chunk_size = ir->buf->chunk_size;
+       err = lirc_allocate_buffer(ir);
+       if (err)
+               goto out_lock;
 
        if (d->features == 0)
                d->features = LIRC_CAN_REC_LIRCCODE;