diff options
author | David Härdeman <david@hardeman.nu> | 2017-05-01 19:04:21 +0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-06-06 15:04:35 +0300 |
commit | 712551f0e45d668bd42cf5ce752f02fa0bba63f2 (patch) | |
tree | a6339e26921016db64637262751815b870ef1645 | |
parent | bd16168da80dde6cfc6b7f89959206b74409cb86 (diff) | |
download | linux-712551f0e45d668bd42cf5ce752f02fa0bba63f2.tar.xz |
[media] lirc_dev: remove lirc_irctl_init() and lirc_cdev_add()
These two functions only make the logic in lirc_register_driver()
harder to follow.
(Note that almost no other driver calls kobject_set_name() on their cdev
so I simply removed that part).
Signed-off-by: David Härdeman <david@hardeman.nu>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r-- | drivers/media/rc/lirc_dev.c | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/drivers/media/rc/lirc_dev.c b/drivers/media/rc/lirc_dev.c index a4cfffecac36..ad288760b3c3 100644 --- a/drivers/media/rc/lirc_dev.c +++ b/drivers/media/rc/lirc_dev.c @@ -65,15 +65,6 @@ static struct irctl *irctls[MAX_IRCTL_DEVICES]; /* Only used for sysfs but defined to void otherwise */ static struct class *lirc_class; -/* helper function - * initializes the irctl structure - */ -static void lirc_irctl_init(struct irctl *ir) -{ - mutex_init(&ir->irctl_lock); - ir->d.minor = NOPLUG; -} - static void lirc_release(struct device *ld) { struct irctl *ir = container_of(ld, struct irctl, dev); @@ -91,27 +82,6 @@ static void lirc_release(struct device *ld) kfree(ir); } -static int lirc_cdev_add(struct irctl *ir) -{ - struct lirc_driver *d = &ir->d; - struct cdev *cdev; - int retval; - - cdev = &ir->cdev; - - if (!d->fops) - return -EINVAL; - - cdev_init(cdev, d->fops); - cdev->owner = d->owner; - retval = kobject_set_name(&cdev->kobj, "lirc%d", d->minor); - if (retval) - return retval; - - cdev->kobj.parent = &ir->dev.kobj; - return cdev_add(cdev, ir->dev.devt, 1); -} - static int lirc_allocate_buffer(struct irctl *ir) { int err = 0; @@ -167,6 +137,11 @@ int lirc_register_driver(struct lirc_driver *d) return -EINVAL; } + if (!d->fops) { + pr_err("fops pointer not filled in!\n"); + return -EINVAL; + } + if (d->minor >= MAX_IRCTL_DEVICES) { dev_err(d->dev, "minor must be between 0 and %d!\n", MAX_IRCTL_DEVICES - 1); @@ -210,7 +185,8 @@ int lirc_register_driver(struct lirc_driver *d) err = -ENOMEM; goto out_lock; } - lirc_irctl_init(ir); + + mutex_init(&ir->irctl_lock); irctls[minor] = ir; d->minor = minor; @@ -238,7 +214,11 @@ int lirc_register_driver(struct lirc_driver *d) ir->dev.release = lirc_release; dev_set_name(&ir->dev, "lirc%d", ir->d.minor); - err = lirc_cdev_add(ir); + cdev_init(&ir->cdev, d->fops); + ir->cdev.owner = ir->d.owner; + ir->cdev.kobj.parent = &ir->dev.kobj; + + err = cdev_add(&ir->cdev, ir->dev.devt, 1); if (err) goto out_free_dev; |