lkml.org 
[lkml]   [2016]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/15] lirc_dev: place buffer allocation on separate function
    Date
    During the driver registration, move the buffer allocation on a
    separate function.

    Signed-off-by: Andi Shyti <andi.shyti@samsung.com>
    ---
    drivers/media/rc/lirc_dev.c | 57 +++++++++++++++++++++++++++------------------
    1 file changed, 34 insertions(+), 23 deletions(-)

    diff --git a/drivers/media/rc/lirc_dev.c b/drivers/media/rc/lirc_dev.c
    index 92ae190..5716978 100644
    --- a/drivers/media/rc/lirc_dev.c
    +++ b/drivers/media/rc/lirc_dev.c
    @@ -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;
    --
    2.8.1
    \
     
     \ /
      Last update: 2016-06-29 16:01    [W:2.254 / U:0.636 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site