include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[linux-2.6.git] / drivers / input / touchscreen / w90p910_ts.c
index 6071f58..cc18265 100644 (file)
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/clk.h>
 #include <linux/input.h>
 #include <linux/interrupt.h>
+#include <linux/slab.h>
 
 /* ADC controller bit defines */
 #define ADC_DELAY      0xf00
@@ -47,8 +49,8 @@ enum ts_state {
 struct w90p910_ts {
        struct input_dev *input;
        struct timer_list timer;
+       struct clk *clk;
        int irq_num;
-       void __iomem *clocken;
        void __iomem *ts_reg;
        spinlock_t lock;
        enum ts_state state;
@@ -166,8 +168,7 @@ static int w90p910_open(struct input_dev *dev)
        unsigned long val;
 
        /* enable the ADC clock */
-       val = __raw_readl(w90p910_ts->clocken);
-       __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
+       clk_enable(w90p910_ts->clk);
 
        __raw_writel(ADC_RST1, w90p910_ts->ts_reg);
        msleep(1);
@@ -211,8 +212,7 @@ static void w90p910_close(struct input_dev *dev)
        del_timer_sync(&w90p910_ts->timer);
 
        /* stop the ADC clock */
-       val = __raw_readl(w90p910_ts->clocken);
-       __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
+       clk_disable(w90p910_ts->clk);
 }
 
 static int __devinit w90x900ts_probe(struct platform_device *pdev)
@@ -241,26 +241,24 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
                goto fail1;
        }
 
-       if (!request_mem_region(res->start, res->end - res->start + 1,
+       if (!request_mem_region(res->start, resource_size(res),
                                pdev->name)) {
                err = -EBUSY;
                goto fail1;
        }
 
-       w90p910_ts->ts_reg = ioremap(res->start, res->end - res->start + 1);
+       w90p910_ts->ts_reg = ioremap(res->start, resource_size(res));
        if (!w90p910_ts->ts_reg) {
                err = -ENOMEM;
                goto fail2;
        }
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       if (!res) {
-               err = -ENXIO;
+       w90p910_ts->clk = clk_get(&pdev->dev, NULL);
+       if (IS_ERR(w90p910_ts->clk)) {
+               err = PTR_ERR(w90p910_ts->clk);
                goto fail3;
        }
 
-       w90p910_ts->clocken = (void __iomem *)res->start;
-
        input_dev->name = "W90P910 TouchScreen";
        input_dev->phys = "w90p910ts/event0";
        input_dev->id.bustype = BUS_HOST;
@@ -283,20 +281,21 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
        if (request_irq(w90p910_ts->irq_num, w90p910_ts_interrupt,
                        IRQF_DISABLED, "w90p910ts", w90p910_ts)) {
                err = -EBUSY;
-               goto fail3;
+               goto fail4;
        }
 
        err = input_register_device(w90p910_ts->input);
        if (err)
-               goto fail4;
+               goto fail5;
 
        platform_set_drvdata(pdev, w90p910_ts);
 
        return 0;
 
-fail4: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail5: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail4: clk_put(w90p910_ts->clk);
 fail3: iounmap(w90p910_ts->ts_reg);
-fail2: release_mem_region(res->start, res->end - res->start + 1);
+fail2: release_mem_region(res->start, resource_size(res));
 fail1: input_free_device(input_dev);
        kfree(w90p910_ts);
        return err;
@@ -311,8 +310,10 @@ static int __devexit w90x900ts_remove(struct platform_device *pdev)
        del_timer_sync(&w90p910_ts->timer);
        iounmap(w90p910_ts->ts_reg);
 
+       clk_put(w90p910_ts->clk);
+
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       release_mem_region(res->start, res->end - res->start + 1);
+       release_mem_region(res->start, resource_size(res));
 
        input_unregister_device(w90p910_ts->input);
        kfree(w90p910_ts);
@@ -326,7 +327,7 @@ static struct platform_driver w90x900ts_driver = {
        .probe          = w90x900ts_probe,
        .remove         = __devexit_p(w90x900ts_remove),
        .driver         = {
-               .name   = "w90x900-ts",
+               .name   = "nuc900-ts",
                .owner  = THIS_MODULE,
        },
 };
@@ -347,4 +348,4 @@ module_exit(w90x900ts_exit);
 MODULE_AUTHOR("Wan ZongShun <mcuos.com@gmail.com>");
 MODULE_DESCRIPTION("w90p910 touch screen driver!");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:w90p910-ts");
+MODULE_ALIAS("platform:nuc900-ts");