Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[cascardo/linux.git] / drivers / gpio / gpio-mxs.c
index a4288f4..b9daa0b 100644 (file)
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/irqdomain.h>
-#include <linux/gpio.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
-#include <linux/basic_mmio_gpio.h>
+#include <linux/gpio/driver.h>
+/* FIXME: for gpio_get_value(), replace this by direct register read */
+#include <linux/gpio.h>
 #include <linux/module.h>
 
 #define MXS_SET                0x4
@@ -64,7 +65,7 @@ struct mxs_gpio_port {
        int id;
        int irq;
        struct irq_domain *domain;
-       struct bgpio_chip bgc;
+       struct gpio_chip gc;
        enum mxs_gpio_id devid;
        u32 both_edges;
 };
@@ -93,7 +94,7 @@ static int mxs_gpio_set_irq_type(struct irq_data *d, unsigned int type)
        port->both_edges &= ~pin_mask;
        switch (type) {
        case IRQ_TYPE_EDGE_BOTH:
-               val = gpio_get_value(port->bgc.gc.base + d->hwirq);
+               val = gpio_get_value(port->gc.base + d->hwirq);
                if (val)
                        edge = GPIO_INT_FALL_EDGE;
                else
@@ -225,18 +226,14 @@ static int __init mxs_gpio_init_gc(struct mxs_gpio_port *port, int irq_base)
 
 static int mxs_gpio_to_irq(struct gpio_chip *gc, unsigned offset)
 {
-       struct bgpio_chip *bgc = to_bgpio_chip(gc);
-       struct mxs_gpio_port *port =
-               container_of(bgc, struct mxs_gpio_port, bgc);
+       struct mxs_gpio_port *port = gpiochip_get_data(gc);
 
        return irq_find_mapping(port->domain, offset);
 }
 
 static int mxs_gpio_get_direction(struct gpio_chip *gc, unsigned offset)
 {
-       struct bgpio_chip *bgc = to_bgpio_chip(gc);
-       struct mxs_gpio_port *port =
-               container_of(bgc, struct mxs_gpio_port, bgc);
+       struct mxs_gpio_port *port = gpiochip_get_data(gc);
        u32 mask = 1 << offset;
        u32 dir;
 
@@ -330,26 +327,24 @@ static int mxs_gpio_probe(struct platform_device *pdev)
        irq_set_chained_handler_and_data(port->irq, mxs_gpio_irq_handler,
                                         port);
 
-       err = bgpio_init(&port->bgc, &pdev->dev, 4,
+       err = bgpio_init(&port->gc, &pdev->dev, 4,
                         port->base + PINCTRL_DIN(port),
                         port->base + PINCTRL_DOUT(port) + MXS_SET,
                         port->base + PINCTRL_DOUT(port) + MXS_CLR,
                         port->base + PINCTRL_DOE(port), NULL, 0);
        if (err)
-               goto out_irqdesc_free;
+               goto out_irqdomain_remove;
 
-       port->bgc.gc.to_irq = mxs_gpio_to_irq;
-       port->bgc.gc.get_direction = mxs_gpio_get_direction;
-       port->bgc.gc.base = port->id * 32;
+       port->gc.to_irq = mxs_gpio_to_irq;
+       port->gc.get_direction = mxs_gpio_get_direction;
+       port->gc.base = port->id * 32;
 
-       err = gpiochip_add(&port->bgc.gc);
+       err = gpiochip_add_data(&port->gc, port);
        if (err)
-               goto out_bgpio_remove;
+               goto out_irqdomain_remove;
 
        return 0;
 
-out_bgpio_remove:
-       bgpio_remove(&port->bgc);
 out_irqdomain_remove:
        irq_domain_remove(port->domain);
 out_irqdesc_free: