diff options
author | sfking@fdwdc.com <sfking@fdwdc.com> | 2009-06-19 21:11:05 -0400 |
---|---|---|
committer | Greg Ungerer <gerg@uclinux.org> | 2009-09-09 22:01:22 -0400 |
commit | 9e8ded166dcc7831ee6f31f8a0937cd9b58e83b0 (patch) | |
tree | 1cc871251322ea0c426ed084a5a2fef9906ae74d /arch | |
parent | a03ce7d9ef05e145ef706f99e68d5ffacf0ad325 (diff) |
generic GPIO support for the Freescale Coldfire 5249.
Add support for the 5249.
Signed-off-by: Steven King <sfking@fdwdc.com>
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/m68k/include/asm/m5249sim.h | 23 | ||||
-rw-r--r-- | arch/m68knommu/platform/5249/Makefile | 2 | ||||
-rw-r--r-- | arch/m68knommu/platform/5249/gpio.c | 65 |
3 files changed, 80 insertions, 10 deletions
diff --git a/arch/m68k/include/asm/m5249sim.h b/arch/m68k/include/asm/m5249sim.h index 366eb8602d2f..2c23a83512a4 100644 --- a/arch/m68k/include/asm/m5249sim.h +++ b/arch/m68k/include/asm/m5249sim.h | |||
@@ -73,14 +73,14 @@ | |||
73 | /* | 73 | /* |
74 | * General purpose IO registers (in MBAR2). | 74 | * General purpose IO registers (in MBAR2). |
75 | */ | 75 | */ |
76 | #define MCFSIM2_GPIOREAD 0x0 /* GPIO read values */ | 76 | #define MCFSIM2_GPIOREAD (MCF_MBAR2 + 0x000) /* GPIO read values */ |
77 | #define MCFSIM2_GPIOWRITE 0x4 /* GPIO write values */ | 77 | #define MCFSIM2_GPIOWRITE (MCF_MBAR2 + 0x004) /* GPIO write values */ |
78 | #define MCFSIM2_GPIOENABLE 0x8 /* GPIO enabled */ | 78 | #define MCFSIM2_GPIOENABLE (MCF_MBAR2 + 0x008) /* GPIO enabled */ |
79 | #define MCFSIM2_GPIOFUNC 0xc /* GPIO function */ | 79 | #define MCFSIM2_GPIOFUNC (MCF_MBAR2 + 0x00C) /* GPIO function */ |
80 | #define MCFSIM2_GPIO1READ 0xb0 /* GPIO1 read values */ | 80 | #define MCFSIM2_GPIO1READ (MCF_MBAR2 + 0x0B0) /* GPIO1 read values */ |
81 | #define MCFSIM2_GPIO1WRITE 0xb4 /* GPIO1 write values */ | 81 | #define MCFSIM2_GPIO1WRITE (MCF_MBAR2 + 0x0B4) /* GPIO1 write values */ |
82 | #define MCFSIM2_GPIO1ENABLE 0xb8 /* GPIO1 enabled */ | 82 | #define MCFSIM2_GPIO1ENABLE (MCF_MBAR2 + 0x0B8) /* GPIO1 enabled */ |
83 | #define MCFSIM2_GPIO1FUNC 0xbc /* GPIO1 function */ | 83 | #define MCFSIM2_GPIO1FUNC (MCF_MBAR2 + 0x0BC) /* GPIO1 function */ |
84 | 84 | ||
85 | #define MCFSIM2_GPIOINTSTAT 0xc0 /* GPIO interrupt status */ | 85 | #define MCFSIM2_GPIOINTSTAT 0xc0 /* GPIO interrupt status */ |
86 | #define MCFSIM2_GPIOINTCLEAR 0xc0 /* GPIO interrupt clear */ | 86 | #define MCFSIM2_GPIOINTCLEAR 0xc0 /* GPIO interrupt clear */ |
@@ -100,7 +100,12 @@ | |||
100 | #define MCFSIM2_IDECONFIG1 0x18c /* IDEconfig1 */ | 100 | #define MCFSIM2_IDECONFIG1 0x18c /* IDEconfig1 */ |
101 | #define MCFSIM2_IDECONFIG2 0x190 /* IDEconfig2 */ | 101 | #define MCFSIM2_IDECONFIG2 0x190 /* IDEconfig2 */ |
102 | 102 | ||
103 | 103 | /* | |
104 | * Generic GPIO support | ||
105 | */ | ||
106 | #define MCFGPIO_PIN_MAX 64 | ||
107 | #define MCFGPIO_IRQ_MAX -1 | ||
108 | #define MCFGPIO_IRQ_VECBASE -1 | ||
104 | /* | 109 | /* |
105 | * Macro to set IMR register. It is 32 bits on the 5249. | 110 | * Macro to set IMR register. It is 32 bits on the 5249. |
106 | */ | 111 | */ |
diff --git a/arch/m68knommu/platform/5249/Makefile b/arch/m68knommu/platform/5249/Makefile index a439d9ab3f27..113c33390064 100644 --- a/arch/m68knommu/platform/5249/Makefile +++ b/arch/m68knommu/platform/5249/Makefile | |||
@@ -14,5 +14,5 @@ | |||
14 | 14 | ||
15 | asflags-$(CONFIG_FULLDEBUG) := -DDEBUGGER_COMPATIBLE_CACHE=1 | 15 | asflags-$(CONFIG_FULLDEBUG) := -DDEBUGGER_COMPATIBLE_CACHE=1 |
16 | 16 | ||
17 | obj-y := config.o | 17 | obj-y := config.o gpio.o |
18 | 18 | ||
diff --git a/arch/m68knommu/platform/5249/gpio.c b/arch/m68knommu/platform/5249/gpio.c new file mode 100644 index 000000000000..c611eab8b3b6 --- /dev/null +++ b/arch/m68knommu/platform/5249/gpio.c | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | * Coldfire generic GPIO support | ||
3 | * | ||
4 | * (C) Copyright 2009, Steven King <sfking@fdwdc.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; version 2 of the License. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | */ | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | |||
19 | #include <asm/coldfire.h> | ||
20 | #include <asm/mcfsim.h> | ||
21 | #include <asm/mcfgpio.h> | ||
22 | |||
23 | static struct mcf_gpio_chip mcf_gpio_chips[] = { | ||
24 | { | ||
25 | .gpio_chip = { | ||
26 | .label = "GPIO0", | ||
27 | .request = mcf_gpio_request, | ||
28 | .free = mcf_gpio_free, | ||
29 | .direction_input = mcf_gpio_direction_input, | ||
30 | .direction_output = mcf_gpio_direction_output, | ||
31 | .get = mcf_gpio_get_value, | ||
32 | .set = mcf_gpio_set_value, | ||
33 | .ngpio = 32, | ||
34 | }, | ||
35 | .pddr = MCFSIM2_GPIOENABLE, | ||
36 | .podr = MCFSIM2_GPIOWRITE, | ||
37 | .ppdr = MCFSIM2_GPIOREAD, | ||
38 | }, | ||
39 | { | ||
40 | .gpio_chip = { | ||
41 | .label = "GPIO1", | ||
42 | .request = mcf_gpio_request, | ||
43 | .free = mcf_gpio_free, | ||
44 | .direction_input = mcf_gpio_direction_input, | ||
45 | .direction_output = mcf_gpio_direction_output, | ||
46 | .get = mcf_gpio_get_value, | ||
47 | .set = mcf_gpio_set_value, | ||
48 | .base = 32, | ||
49 | .ngpio = 32, | ||
50 | }, | ||
51 | .pddr = MCFSIM2_GPIO1ENABLE, | ||
52 | .podr = MCFSIM2_GPIO1WRITE, | ||
53 | .ppdr = MCFSIM2_GPIO1READ, | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | static int __init mcf_gpio_init(void) | ||
58 | { | ||
59 | unsigned i = 0; | ||
60 | while (i < ARRAY_SIZE(mcf_gpio_chips)) | ||
61 | (void)gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]); | ||
62 | return 0; | ||
63 | } | ||
64 | |||
65 | core_initcall(mcf_gpio_init); | ||