diff options
| -rw-r--r-- | arch/arm/mach-shmobile/board-g4evm.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/board-g4evm.c b/arch/arm/mach-shmobile/board-g4evm.c index 5acd623f93e7..10673a90be52 100644 --- a/arch/arm/mach-shmobile/board-g4evm.c +++ b/arch/arm/mach-shmobile/board-g4evm.c | |||
| @@ -28,6 +28,8 @@ | |||
| 28 | #include <linux/mtd/physmap.h> | 28 | #include <linux/mtd/physmap.h> |
| 29 | #include <linux/usb/r8a66597.h> | 29 | #include <linux/usb/r8a66597.h> |
| 30 | #include <linux/io.h> | 30 | #include <linux/io.h> |
| 31 | #include <linux/input.h> | ||
| 32 | #include <linux/input/sh_keysc.h> | ||
| 31 | #include <linux/gpio.h> | 33 | #include <linux/gpio.h> |
| 32 | #include <mach/sh7377.h> | 34 | #include <mach/sh7377.h> |
| 33 | #include <mach/common.h> | 35 | #include <mach/common.h> |
| @@ -128,9 +130,49 @@ static struct platform_device usb_host_device = { | |||
| 128 | .resource = usb_host_resources, | 130 | .resource = usb_host_resources, |
| 129 | }; | 131 | }; |
| 130 | 132 | ||
| 133 | /* KEYSC */ | ||
| 134 | static struct sh_keysc_info keysc_info = { | ||
| 135 | .mode = SH_KEYSC_MODE_5, | ||
| 136 | .scan_timing = 3, | ||
| 137 | .delay = 100, | ||
| 138 | .keycodes = { | ||
| 139 | KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, | ||
| 140 | KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, | ||
| 141 | KEY_M, KEY_N, KEY_U, KEY_P, KEY_Q, KEY_R, | ||
| 142 | KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, | ||
| 143 | KEY_Y, KEY_Z, KEY_HOME, KEY_SLEEP, KEY_WAKEUP, KEY_COFFEE, | ||
| 144 | KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, | ||
| 145 | KEY_6, KEY_7, KEY_8, KEY_9, KEY_STOP, KEY_COMPUTER, | ||
| 146 | }, | ||
| 147 | }; | ||
| 148 | |||
| 149 | static struct resource keysc_resources[] = { | ||
| 150 | [0] = { | ||
| 151 | .name = "KEYSC", | ||
| 152 | .start = 0xe61b0000, | ||
| 153 | .end = 0xe61b000f, | ||
| 154 | .flags = IORESOURCE_MEM, | ||
| 155 | }, | ||
| 156 | [1] = { | ||
| 157 | .start = 79, | ||
| 158 | .flags = IORESOURCE_IRQ, | ||
| 159 | }, | ||
| 160 | }; | ||
| 161 | |||
| 162 | static struct platform_device keysc_device = { | ||
| 163 | .name = "sh_keysc", | ||
| 164 | .id = 0, /* keysc0 clock */ | ||
| 165 | .num_resources = ARRAY_SIZE(keysc_resources), | ||
| 166 | .resource = keysc_resources, | ||
| 167 | .dev = { | ||
| 168 | .platform_data = &keysc_info, | ||
| 169 | }, | ||
| 170 | }; | ||
| 171 | |||
| 131 | static struct platform_device *g4evm_devices[] __initdata = { | 172 | static struct platform_device *g4evm_devices[] __initdata = { |
| 132 | &nor_flash_device, | 173 | &nor_flash_device, |
| 133 | &usb_host_device, | 174 | &usb_host_device, |
| 175 | &keysc_device, | ||
| 134 | }; | 176 | }; |
| 135 | 177 | ||
| 136 | static struct map_desc g4evm_io_desc[] __initdata = { | 178 | static struct map_desc g4evm_io_desc[] __initdata = { |
| @@ -196,6 +238,21 @@ static void __init g4evm_init(void) | |||
| 196 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ | 238 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ |
| 197 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ | 239 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ |
| 198 | 240 | ||
| 241 | /* KEYSC @ CN31 */ | ||
| 242 | gpio_request(GPIO_FN_PORT60_KEYOUT5, NULL); | ||
| 243 | gpio_request(GPIO_FN_PORT61_KEYOUT4, NULL); | ||
| 244 | gpio_request(GPIO_FN_PORT62_KEYOUT3, NULL); | ||
| 245 | gpio_request(GPIO_FN_PORT63_KEYOUT2, NULL); | ||
| 246 | gpio_request(GPIO_FN_PORT64_KEYOUT1, NULL); | ||
| 247 | gpio_request(GPIO_FN_PORT65_KEYOUT0, NULL); | ||
| 248 | gpio_request(GPIO_FN_PORT66_KEYIN0_PU, NULL); | ||
| 249 | gpio_request(GPIO_FN_PORT67_KEYIN1_PU, NULL); | ||
| 250 | gpio_request(GPIO_FN_PORT68_KEYIN2_PU, NULL); | ||
| 251 | gpio_request(GPIO_FN_PORT69_KEYIN3_PU, NULL); | ||
| 252 | gpio_request(GPIO_FN_PORT70_KEYIN4_PU, NULL); | ||
| 253 | gpio_request(GPIO_FN_PORT71_KEYIN5_PU, NULL); | ||
| 254 | gpio_request(GPIO_FN_PORT72_KEYIN6_PU, NULL); | ||
| 255 | |||
| 199 | sh7377_add_standard_devices(); | 256 | sh7377_add_standard_devices(); |
| 200 | 257 | ||
| 201 | platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); | 258 | platform_add_devices(g4evm_devices, ARRAY_SIZE(g4evm_devices)); |
