[media] lirc_dev: place buffer allocation on separate function
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>
This commit is contained in:
parent
199946731f
commit
6fa99e1af1
@ -203,13 +203,41 @@ err_out:
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lirc_allocate_buffer(struct irctl *ir)
|
||||||
|
{
|
||||||
|
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)
|
int lirc_register_driver(struct lirc_driver *d)
|
||||||
{
|
{
|
||||||
struct irctl *ir;
|
struct irctl *ir;
|
||||||
int minor;
|
int minor;
|
||||||
int bytes_in_key;
|
|
||||||
unsigned int chunk_size;
|
|
||||||
unsigned int buffer_size;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!d) {
|
if (!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;
|
||||||
|
Loading…
Reference in New Issue
Block a user