|
@@ -58,7 +58,7 @@ static int twl4030_pwrbutton_probe(struct platform_device *pdev)
|
|
int irq = platform_get_irq(pdev, 0);
|
|
int irq = platform_get_irq(pdev, 0);
|
|
int err;
|
|
int err;
|
|
|
|
|
|
- pwr = input_allocate_device();
|
|
|
|
|
|
+ pwr = devm_input_allocate_device(&pdev->dev);
|
|
if (!pwr) {
|
|
if (!pwr) {
|
|
dev_err(&pdev->dev, "Can't allocate power button\n");
|
|
dev_err(&pdev->dev, "Can't allocate power button\n");
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
@@ -70,39 +70,22 @@ static int twl4030_pwrbutton_probe(struct platform_device *pdev)
|
|
pwr->phys = "twl4030_pwrbutton/input0";
|
|
pwr->phys = "twl4030_pwrbutton/input0";
|
|
pwr->dev.parent = &pdev->dev;
|
|
pwr->dev.parent = &pdev->dev;
|
|
|
|
|
|
- err = request_threaded_irq(irq, NULL, powerbutton_irq,
|
|
|
|
|
|
+ err = devm_request_threaded_irq(&pwr->dev, irq, NULL, powerbutton_irq,
|
|
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
|
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
|
"twl4030_pwrbutton", pwr);
|
|
"twl4030_pwrbutton", pwr);
|
|
if (err < 0) {
|
|
if (err < 0) {
|
|
dev_err(&pdev->dev, "Can't get IRQ for pwrbutton: %d\n", err);
|
|
dev_err(&pdev->dev, "Can't get IRQ for pwrbutton: %d\n", err);
|
|
- goto free_input_dev;
|
|
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
err = input_register_device(pwr);
|
|
err = input_register_device(pwr);
|
|
if (err) {
|
|
if (err) {
|
|
dev_err(&pdev->dev, "Can't register power button: %d\n", err);
|
|
dev_err(&pdev->dev, "Can't register power button: %d\n", err);
|
|
- goto free_irq;
|
|
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
platform_set_drvdata(pdev, pwr);
|
|
platform_set_drvdata(pdev, pwr);
|
|
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
-free_irq:
|
|
|
|
- free_irq(irq, pwr);
|
|
|
|
-free_input_dev:
|
|
|
|
- input_free_device(pwr);
|
|
|
|
- return err;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int __exit twl4030_pwrbutton_remove(struct platform_device *pdev)
|
|
|
|
-{
|
|
|
|
- struct input_dev *pwr = platform_get_drvdata(pdev);
|
|
|
|
- int irq = platform_get_irq(pdev, 0);
|
|
|
|
-
|
|
|
|
- free_irq(irq, pwr);
|
|
|
|
- input_unregister_device(pwr);
|
|
|
|
-
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -116,7 +99,6 @@ MODULE_DEVICE_TABLE(of, twl4030_pwrbutton_dt_match_table);
|
|
|
|
|
|
static struct platform_driver twl4030_pwrbutton_driver = {
|
|
static struct platform_driver twl4030_pwrbutton_driver = {
|
|
.probe = twl4030_pwrbutton_probe,
|
|
.probe = twl4030_pwrbutton_probe,
|
|
- .remove = __exit_p(twl4030_pwrbutton_remove),
|
|
|
|
.driver = {
|
|
.driver = {
|
|
.name = "twl4030_pwrbutton",
|
|
.name = "twl4030_pwrbutton",
|
|
.owner = THIS_MODULE,
|
|
.owner = THIS_MODULE,
|