diff options
Diffstat (limited to 'drivers/input/misc/hi6421_pwrkey.c')
-rw-r--r-- | drivers/input/misc/hi6421_pwrkey.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/drivers/input/misc/hi6421_pwrkey.c b/drivers/input/misc/hi6421_pwrkey.c index 7b2098d1fe2b..31d0145fc688 100644 --- a/drivers/input/misc/hi6421_pwrkey.c +++ b/drivers/input/misc/hi6421_pwrkey.c @@ -56,22 +56,36 @@ static int hi6421_onkey_probe(struct platform_device *pdev) info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); if (!info) return -ENOMEM; + + info->idev = input_allocate_device(); + if (!info->idev) { + dev_err(&pdev->dev, "Failed to allocate input device\n"); + return -ENOMEM; + } + info->idev->name = "hi6421_on"; + info->idev->phys = "hi6421_on/input0"; + info->idev->dev.parent = &pdev->dev; + info->idev->evbit[0] = BIT_MASK(EV_KEY); + __set_bit(KEY_POWER, info->idev->keybit); + info->irq[0] = platform_get_irq_byname(pdev, "down"); - if (info->irq[0] < 0) - return -ENOENT; + if (info->irq[0] < 0) { + ret = -ENOENT; + goto err_irq0; + } ret = request_irq(info->irq[0], hi6421_onkey_handler, IRQF_DISABLED, "down", info); if (ret < 0) - return ret; + goto err_irq0; info->irq[1] = platform_get_irq_byname(pdev, "up"); if (info->irq[1] < 0) { ret = -ENOENT; - goto err; + goto err_irq1; } ret = request_irq(info->irq[1], hi6421_onkey_handler, IRQF_DISABLED, "up", info); if (ret < 0) - goto err; + goto err_irq1; info->irq[2] = platform_get_irq_byname(pdev, "hold 1s"); if (info->irq[2] < 0) { ret = -ENOENT; @@ -91,17 +105,6 @@ static int hi6421_onkey_probe(struct platform_device *pdev) if (ret < 0) goto err_irq3; - info->idev = input_allocate_device(); - if (!info->idev) { - dev_err(&pdev->dev, "Failed to allocate input device\n"); - goto err_alloc; - } - info->idev->name = "hi6421_on"; - info->idev->phys = "hi6421_on/input0"; - info->idev->dev.parent = &pdev->dev; - info->idev->evbit[0] = BIT_MASK(EV_KEY); - __set_bit(KEY_POWER, info->idev->keybit); - ret = input_register_device(info->idev); if (ret) { dev_err(&pdev->dev, "Can't register input device: %d\n", ret); @@ -111,15 +114,15 @@ static int hi6421_onkey_probe(struct platform_device *pdev) platform_set_drvdata(pdev, info); return ret; err_reg: - input_free_device(info->idev); -err_alloc: free_irq(info->irq[3], info); err_irq3: free_irq(info->irq[2], info); err_irq2: free_irq(info->irq[1], info); -err: +err_irq1: free_irq(info->irq[0], info); +err_irq0: + input_free_device(info->idev); return ret; } |