aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHimangi Saraogi <himangi774@gmail.com>2014-05-29 03:11:09 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-05-29 03:26:33 -0400
commit157d45fbdde4919c2b0421bb41d52fc8da155e28 (patch)
tree523dde74adadca13cd1343ff5e81f53a4b3178d0
parentac414da37f88ddbc04617d883539113f27c75f56 (diff)
Input: intel-mid-touch - switch to using managed resources
Let's switch the driver to use managed resources, this will simplify error handling and driver unbinding logic. Signed-off-by: Himangi Saraogi <himangi774@gmail.com> Acked-by: Julia Lawall <julia.lawall@lip6.fr> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/touchscreen/intel-mid-touch.c47
1 files changed, 17 insertions, 30 deletions
diff --git a/drivers/input/touchscreen/intel-mid-touch.c b/drivers/input/touchscreen/intel-mid-touch.c
index 4f6b156144e9..c38ca4a7e386 100644
--- a/drivers/input/touchscreen/intel-mid-touch.c
+++ b/drivers/input/touchscreen/intel-mid-touch.c
@@ -36,6 +36,7 @@
36#include <linux/irq.h> 36#include <linux/irq.h>
37#include <linux/delay.h> 37#include <linux/delay.h>
38#include <asm/intel_scu_ipc.h> 38#include <asm/intel_scu_ipc.h>
39#include <linux/device.h>
39 40
40/* PMIC Interrupt registers */ 41/* PMIC Interrupt registers */
41#define PMIC_REG_ID1 0x00 /* PMIC ID1 register */ 42#define PMIC_REG_ID1 0x00 /* PMIC ID1 register */
@@ -580,12 +581,17 @@ static int mrstouch_probe(struct platform_device *pdev)
580 return -EINVAL; 581 return -EINVAL;
581 } 582 }
582 583
583 tsdev = kzalloc(sizeof(struct mrstouch_dev), GFP_KERNEL); 584 tsdev = devm_kzalloc(&pdev->dev, sizeof(struct mrstouch_dev),
584 input = input_allocate_device(); 585 GFP_KERNEL);
585 if (!tsdev || !input) { 586 if (!tsdev) {
586 dev_err(&pdev->dev, "unable to allocate memory\n"); 587 dev_err(&pdev->dev, "unable to allocate memory\n");
587 err = -ENOMEM; 588 return -ENOMEM;
588 goto err_free_mem; 589 }
590
591 input = devm_input_allocate_device(&pdev->dev);
592 if (!input) {
593 dev_err(&pdev->dev, "unable to allocate input device\n");
594 return -ENOMEM;
589 } 595 }
590 596
591 tsdev->dev = &pdev->dev; 597 tsdev->dev = &pdev->dev;
@@ -598,7 +604,7 @@ static int mrstouch_probe(struct platform_device *pdev)
598 err = mrstouch_adc_init(tsdev); 604 err = mrstouch_adc_init(tsdev);
599 if (err) { 605 if (err) {
600 dev_err(&pdev->dev, "ADC initialization failed\n"); 606 dev_err(&pdev->dev, "ADC initialization failed\n");
601 goto err_free_mem; 607 return err;
602 } 608 }
603 609
604 input->name = "mrst_touchscreen"; 610 input->name = "mrst_touchscreen";
@@ -618,38 +624,20 @@ static int mrstouch_probe(struct platform_device *pdev)
618 input_set_abs_params(tsdev->input, ABS_PRESSURE, 624 input_set_abs_params(tsdev->input, ABS_PRESSURE,
619 MRST_PRESSURE_MIN, MRST_PRESSURE_MAX, 0, 0); 625 MRST_PRESSURE_MIN, MRST_PRESSURE_MAX, 0, 0);
620 626
621 err = request_threaded_irq(tsdev->irq, NULL, mrstouch_pendet_irq, 627 err = devm_request_threaded_irq(&pdev->dev, tsdev->irq, NULL,
622 IRQF_ONESHOT, "mrstouch", tsdev); 628 mrstouch_pendet_irq, IRQF_ONESHOT,
629 "mrstouch", tsdev);
623 if (err) { 630 if (err) {
624 dev_err(tsdev->dev, "unable to allocate irq\n"); 631 dev_err(tsdev->dev, "unable to allocate irq\n");
625 goto err_free_mem; 632 return err;
626 } 633 }
627 634
628 err = input_register_device(tsdev->input); 635 err = input_register_device(tsdev->input);
629 if (err) { 636 if (err) {
630 dev_err(tsdev->dev, "unable to register input device\n"); 637 dev_err(tsdev->dev, "unable to register input device\n");
631 goto err_free_irq; 638 return err;
632 } 639 }
633 640
634 platform_set_drvdata(pdev, tsdev);
635 return 0;
636
637err_free_irq:
638 free_irq(tsdev->irq, tsdev);
639err_free_mem:
640 input_free_device(input);
641 kfree(tsdev);
642 return err;
643}
644
645static int mrstouch_remove(struct platform_device *pdev)
646{
647 struct mrstouch_dev *tsdev = platform_get_drvdata(pdev);
648
649 free_irq(tsdev->irq, tsdev);
650 input_unregister_device(tsdev->input);
651 kfree(tsdev);
652
653 return 0; 641 return 0;
654} 642}
655 643
@@ -659,7 +647,6 @@ static struct platform_driver mrstouch_driver = {
659 .owner = THIS_MODULE, 647 .owner = THIS_MODULE,
660 }, 648 },
661 .probe = mrstouch_probe, 649 .probe = mrstouch_probe,
662 .remove = mrstouch_remove,
663}; 650};
664module_platform_driver(mrstouch_driver); 651module_platform_driver(mrstouch_driver);
665 652