#include <linux/gpio/driver.h>
#include <linux/module.h>
#include <linux/syscore_ops.h>
#include <soc/sa1100/pwer.h>
#include <mach/hardware.h>
struct sa1100_gpio_chip {
#define sa1100_gpio_chip(x) container_of(x, struct sa1100_gpio_chip, chip)
static int sa1100_gpio_get(struct gpio_chip *chip, unsigned offset)
return readl_relaxed(sa1100_gpio_chip(chip)->membase + R_GPLR) &
static void sa1100_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
int reg = value ? R_GPSR : R_GPCR;
writel_relaxed(BIT(offset), sa1100_gpio_chip(chip)->membase + reg);
static int sa1100_get_direction(struct gpio_chip *chip, unsigned offset)
void __iomem *gpdr = sa1100_gpio_chip(chip)->membase + R_GPDR;
return !(readl_relaxed(gpdr) & BIT(offset));
static int sa1100_direction_input(struct gpio_chip *chip, unsigned offset)