Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parent a5d176a1
Loading
Loading
Loading
Loading
+42 −0
Original line number Original line Diff line number Diff line
@@ -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 @@
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",