diff options
author | Dmitry Artamonow <mad_soft@inbox.ru> | 2009-11-27 12:00:00 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-12-06 16:52:55 +0000 |
commit | 2eec62d7dbaa8ed05f318d88f938a86fcf274b34 (patch) | |
tree | c3581ee62fabe4104c379d647495fc2b87c22f63 /arch/arm/mach-sa1100/h3600.c | |
parent | cf5a87d80a70958b0622042b0b447f61aca1caf8 (diff) |
ARM: 5813/1: SA1100: h3100/h3600: add htc-egpio driver
It will be used for future conversion of assign_h3600_egpio calls to
gpiolib.
Signed-off-by: Dmitry Artamonow <mad_soft@inbox.ru>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-sa1100/h3600.c')
-rw-r--r-- | arch/arm/mach-sa1100/h3600.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c index 1297c11c030..429fdb051a3 100644 --- a/arch/arm/mach-sa1100/h3600.c +++ b/arch/arm/mach-sa1100/h3600.c @@ -25,10 +25,12 @@ #include <linux/tty.h> #include <linux/pm.h> #include <linux/device.h> +#include <linux/mfd/htc-egpio.h> #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/serial_core.h> #include <linux/gpio.h> +#include <linux/platform_device.h> #include <asm/irq.h> #include <mach/hardware.h> @@ -184,11 +186,54 @@ static struct sa1100_port_fns h3xxx_port_fns __initdata = { .set_wake = h3xxx_uart_set_wake, }; +/* + * EGPIO + */ + +static struct resource egpio_resources[] = { + [0] = { + .start = H3600_EGPIO_PHYS, + .end = H3600_EGPIO_PHYS + 0x4 - 1, + .flags = IORESOURCE_MEM, + }, +}; + +static struct htc_egpio_chip egpio_chips[] = { + [0] = { + .reg_start = 0, + .gpio_base = H3XXX_EGPIO_BASE, + .num_gpios = 16, + .direction = HTC_EGPIO_OUTPUT, + .initial_values = 0x0080, /* H3XXX_EGPIO_RS232_ON */ + }, +}; + +static struct htc_egpio_platform_data egpio_info = { + .reg_width = 16, + .bus_width = 16, + .chip = egpio_chips, + .num_chips = ARRAY_SIZE(egpio_chips), +}; + +static struct platform_device h3xxx_egpio = { + .name = "htc-egpio", + .id = -1, + .resource = egpio_resources, + .num_resources = ARRAY_SIZE(egpio_resources), + .dev = { + .platform_data = &egpio_info, + }, +}; + +static struct platform_device *h3xxx_devices[] = { + &h3xxx_egpio, +}; static void __init h3xxx_mach_init(void) { sa1100_register_uart_fns(&h3xxx_port_fns); sa11x0_register_mtd(&h3xxx_flash_data, &h3xxx_flash_resource, 1); + platform_add_devices(h3xxx_devices, ARRAY_SIZE(h3xxx_devices)); } static struct map_desc h3600_io_desc[] __initdata = { |