Merge branch 'fbdev-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / include / linux / basic_mmio_gpio.h
index 198087a..98999cf 100644 (file)
 #ifndef __BASIC_MMIO_GPIO_H
 #define __BASIC_MMIO_GPIO_H
 
+#include <linux/gpio.h>
+#include <linux/types.h>
+#include <linux/compiler.h>
+#include <linux/spinlock_types.h>
+
 struct bgpio_pdata {
        int base;
+       int ngpio;
 };
 
+struct device;
+
+struct bgpio_chip {
+       struct gpio_chip gc;
+
+       unsigned long (*read_reg)(void __iomem *reg);
+       void (*write_reg)(void __iomem *reg, unsigned long data);
+
+       void __iomem *reg_dat;
+       void __iomem *reg_set;
+       void __iomem *reg_clr;
+       void __iomem *reg_dir;
+
+       /* Number of bits (GPIOs): <register width> * 8. */
+       int bits;
+
+       /*
+        * Some GPIO controllers work with the big-endian bits notation,
+        * e.g. in a 8-bits register, GPIO7 is the least significant bit.
+        */
+       unsigned long (*pin2mask)(struct bgpio_chip *bgc, unsigned int pin);
+
+       /*
+        * Used to lock bgpio_chip->data. Also, this is needed to keep
+        * shadowed and real data registers writes together.
+        */
+       spinlock_t lock;
+
+       /* Shadowed data register to clear/set bits safely. */
+       unsigned long data;
+
+       /* Shadowed direction registers to clear/set direction safely. */
+       unsigned long dir;
+};
+
+static inline struct bgpio_chip *to_bgpio_chip(struct gpio_chip *gc)
+{
+       return container_of(gc, struct bgpio_chip, gc);
+}
+
+int __devexit bgpio_remove(struct bgpio_chip *bgc);
+int __devinit bgpio_init(struct bgpio_chip *bgc,
+                        struct device *dev,
+                        unsigned long sz,
+                        void __iomem *dat,
+                        void __iomem *set,
+                        void __iomem *clr,
+                        void __iomem *dirout,
+                        void __iomem *dirin,
+                        bool big_endian);
+
 #endif /* __BASIC_MMIO_GPIO_H */