]> Pileus Git - ~andy/linux/blobdiff - drivers/gpio/gpio-wm8994.c
Merge tag 'gpio-for-v3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[~andy/linux] / drivers / gpio / gpio-wm8994.c
index aa61ad2fcaaa6573e1de350a82d08151c0040289..1c764e779d8009b066bb61d93426eb7384cf99d3 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/mfd/core.h>
 #include <linux/platform_device.h>
 #include <linux/seq_file.h>
+#include <linux/regmap.h>
 
 #include <linux/mfd/wm8994/core.h>
 #include <linux/mfd/wm8994/pdata.h>
@@ -112,10 +113,7 @@ static int wm8994_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
        struct wm8994_gpio *wm8994_gpio = to_wm8994_gpio(chip);
        struct wm8994 *wm8994 = wm8994_gpio->wm8994;
 
-       if (!wm8994->irq_base)
-               return -EINVAL;
-
-       return wm8994->irq_base + offset;
+       return regmap_irq_get_virq(wm8994->irq_data, offset);
 }
 
 
@@ -254,7 +252,8 @@ static int __devinit wm8994_gpio_probe(struct platform_device *pdev)
        struct wm8994_gpio *wm8994_gpio;
        int ret;
 
-       wm8994_gpio = kzalloc(sizeof(*wm8994_gpio), GFP_KERNEL);
+       wm8994_gpio = devm_kzalloc(&pdev->dev, sizeof(*wm8994_gpio),
+                                  GFP_KERNEL);
        if (wm8994_gpio == NULL)
                return -ENOMEM;
 
@@ -279,20 +278,14 @@ static int __devinit wm8994_gpio_probe(struct platform_device *pdev)
        return ret;
 
 err:
-       kfree(wm8994_gpio);
        return ret;
 }
 
 static int __devexit wm8994_gpio_remove(struct platform_device *pdev)
 {
        struct wm8994_gpio *wm8994_gpio = platform_get_drvdata(pdev);
-       int ret;
 
-       ret = gpiochip_remove(&wm8994_gpio->gpio_chip);
-       if (ret == 0)
-               kfree(wm8994_gpio);
-
-       return ret;
+       return gpiochip_remove(&wm8994_gpio->gpio_chip);
 }
 
 static struct platform_driver wm8994_gpio_driver = {