Commit 6fa99e1a authored by Andi Shyti's avatar Andi Shyti Committed by Mauro Carvalho Chehab

[media] lirc_dev: place buffer allocation on separate function

During the driver registration, move the buffer allocation on a
separate function.
Signed-off-by: default avatarAndi Shyti <andi.shyti@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 19994673
...@@ -203,13 +203,41 @@ static int lirc_cdev_add(struct irctl *ir) ...@@ -203,13 +203,41 @@ static int lirc_cdev_add(struct irctl *ir)
return retval; return retval;
} }
int lirc_register_driver(struct lirc_driver *d) static int lirc_allocate_buffer(struct irctl *ir)
{ {
struct irctl *ir; int err;
int minor;
int bytes_in_key; int bytes_in_key;
unsigned int chunk_size; unsigned int chunk_size;
unsigned int buffer_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; int err;
if (!d) { if (!d) {
...@@ -314,26 +342,9 @@ int lirc_register_driver(struct lirc_driver *d) ...@@ -314,26 +342,9 @@ int lirc_register_driver(struct lirc_driver *d)
/* some safety check 8-) */ /* some safety check 8-) */
d->name[sizeof(d->name)-1] = '\0'; d->name[sizeof(d->name)-1] = '\0';
bytes_in_key = BITS_TO_LONGS(d->code_length) + err = lirc_allocate_buffer(ir);
(d->code_length % 8 ? 1 : 0); if (err)
buffer_size = d->buffer_size ? d->buffer_size : BUFLEN / bytes_in_key; goto out_lock;
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;
if (d->features == 0) if (d->features == 0)
d->features = LIRC_CAN_REC_LIRCCODE; d->features = LIRC_CAN_REC_LIRCCODE;
......
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