Commit 0831e3e4 authored by Russell King's avatar Russell King

ARM: iPAQ: provide a way to setup platform-controlled GPIOs

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent a5d176a1
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/gpio.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <mach/hardware.h> #include <mach/hardware.h>
...@@ -49,6 +50,47 @@ ...@@ -49,6 +50,47 @@
void (*assign_h3600_egpio)(enum ipaq_egpio_type x, int level); void (*assign_h3600_egpio)(enum ipaq_egpio_type x, int level);
EXPORT_SYMBOL(assign_h3600_egpio); EXPORT_SYMBOL(assign_h3600_egpio);
struct gpio_default_state {
int gpio;
int mode;
const char *name;
};
#define GPIO_MODE_IN -1
#define GPIO_MODE_OUT0 0
#define GPIO_MODE_OUT1 1
static void h3xxx_init_gpio(struct gpio_default_state *s, size_t n)
{
while (n--) {
const char *name = s->name;
int err;
if (!name)
name = "[init]";
err = gpio_request(s->gpio, name);
if (err) {
printk(KERN_ERR "gpio%u: unable to request: %d\n",
s->gpio, err);
continue;
}
if (s->mode >= 0) {
err = gpio_direction_output(s->gpio, s->mode);
} else {
err = gpio_direction_input(s->gpio);
}
if (err) {
printk(KERN_ERR "gpio%u: unable to set direction: %d\n",
s->gpio, err);
continue;
}
if (!s->name)
gpio_free(s->gpio);
s++;
}
}
static struct mtd_partition h3xxx_partitions[] = { static struct mtd_partition h3xxx_partitions[] = {
{ {
.name = "H3XXX boot firmware", .name = "H3XXX boot firmware",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment