diff options
| -rw-r--r-- | arch/arm/mach-s3c64xx/Kconfig | 7 | ||||
| -rw-r--r-- | arch/arm/mach-s3c64xx/Makefile | 1 | ||||
| -rw-r--r-- | arch/arm/mach-s3c64xx/clock.c | 6 | ||||
| -rw-r--r-- | arch/arm/mach-s3c64xx/include/mach/map.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-s3c64xx/mach-smdk6410.c | 24 | ||||
| -rw-r--r-- | arch/arm/mach-s3c64xx/setup-keypad.c | 34 |
6 files changed, 74 insertions, 0 deletions
diff --git a/arch/arm/mach-s3c64xx/Kconfig b/arch/arm/mach-s3c64xx/Kconfig index 3b632e4ec1a6..071e8a1e0765 100644 --- a/arch/arm/mach-s3c64xx/Kconfig +++ b/arch/arm/mach-s3c64xx/Kconfig | |||
| @@ -67,6 +67,11 @@ config S3C64XX_SETUP_FB_24BPP | |||
| 67 | help | 67 | help |
| 68 | Common setup code for S3C64XX with an 24bpp RGB display helper. | 68 | Common setup code for S3C64XX with an 24bpp RGB display helper. |
| 69 | 69 | ||
| 70 | config S3C64XX_SETUP_KEYPAD | ||
| 71 | bool | ||
| 72 | help | ||
| 73 | Common setup code for S3C64XX KEYPAD GPIO configurations | ||
| 74 | |||
| 70 | config S3C64XX_SETUP_SDHCI_GPIO | 75 | config S3C64XX_SETUP_SDHCI_GPIO |
| 71 | bool | 76 | bool |
| 72 | help | 77 | help |
| @@ -107,11 +112,13 @@ config MACH_SMDK6410 | |||
| 107 | select S3C_DEV_USB_HOST | 112 | select S3C_DEV_USB_HOST |
| 108 | select S3C_DEV_USB_HSOTG | 113 | select S3C_DEV_USB_HSOTG |
| 109 | select S3C_DEV_WDT | 114 | select S3C_DEV_WDT |
| 115 | select SAMSUNG_DEV_KEYPAD | ||
| 110 | select HAVE_S3C2410_WATCHDOG | 116 | select HAVE_S3C2410_WATCHDOG |
| 111 | select S3C64XX_SETUP_SDHCI | 117 | select S3C64XX_SETUP_SDHCI |
| 112 | select S3C64XX_SETUP_I2C1 | 118 | select S3C64XX_SETUP_I2C1 |
| 113 | select S3C64XX_SETUP_IDE | 119 | select S3C64XX_SETUP_IDE |
| 114 | select S3C64XX_SETUP_FB_24BPP | 120 | select S3C64XX_SETUP_FB_24BPP |
| 121 | select S3C64XX_SETUP_KEYPAD | ||
| 115 | help | 122 | help |
| 116 | Machine support for the Samsung SMDK6410 | 123 | Machine support for the Samsung SMDK6410 |
| 117 | 124 | ||
diff --git a/arch/arm/mach-s3c64xx/Makefile b/arch/arm/mach-s3c64xx/Makefile index aa5c36772b1a..48d3dfac8dd7 100644 --- a/arch/arm/mach-s3c64xx/Makefile +++ b/arch/arm/mach-s3c64xx/Makefile | |||
| @@ -36,6 +36,7 @@ obj-$(CONFIG_S3C64XX_DMA) += dma.o | |||
| 36 | obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o | 36 | obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o |
| 37 | obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o | 37 | obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o |
| 38 | obj-$(CONFIG_S3C64XX_SETUP_IDE) += setup-ide.o | 38 | obj-$(CONFIG_S3C64XX_SETUP_IDE) += setup-ide.o |
| 39 | obj-$(CONFIG_S3C64XX_SETUP_KEYPAD) += setup-keypad.o | ||
| 39 | obj-$(CONFIG_S3C64XX_SETUP_SDHCI) += setup-sdhci.o | 40 | obj-$(CONFIG_S3C64XX_SETUP_SDHCI) += setup-sdhci.o |
| 40 | obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o | 41 | obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o |
| 41 | obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o | 42 | obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o |
diff --git a/arch/arm/mach-s3c64xx/clock.c b/arch/arm/mach-s3c64xx/clock.c index 3999a18404b5..7e03f0ae2fc8 100644 --- a/arch/arm/mach-s3c64xx/clock.c +++ b/arch/arm/mach-s3c64xx/clock.c | |||
| @@ -171,6 +171,12 @@ static struct clk init_clocks_disable[] = { | |||
| 171 | .ctrlbit = S3C6410_CLKCON_PCLK_IIS2, | 171 | .ctrlbit = S3C6410_CLKCON_PCLK_IIS2, |
| 172 | }, { | 172 | }, { |
| 173 | #endif | 173 | #endif |
| 174 | .name = "keypad", | ||
| 175 | .id = -1, | ||
| 176 | .parent = &clk_p, | ||
| 177 | .enable = s3c64xx_pclk_ctrl, | ||
| 178 | .ctrlbit = S3C_CLKCON_PCLK_KEYPAD, | ||
| 179 | }, { | ||
| 174 | .name = "spi", | 180 | .name = "spi", |
| 175 | .id = 0, | 181 | .id = 0, |
| 176 | .parent = &clk_p, | 182 | .parent = &clk_p, |
diff --git a/arch/arm/mach-s3c64xx/include/mach/map.h b/arch/arm/mach-s3c64xx/include/mach/map.h index 1caaa5f25f8d..a1f13f02c841 100644 --- a/arch/arm/mach-s3c64xx/include/mach/map.h +++ b/arch/arm/mach-s3c64xx/include/mach/map.h | |||
| @@ -67,6 +67,7 @@ | |||
| 67 | #define S3C64XX_PA_USB_HSOTG (0x7C000000) | 67 | #define S3C64XX_PA_USB_HSOTG (0x7C000000) |
| 68 | #define S3C64XX_PA_WATCHDOG (0x7E004000) | 68 | #define S3C64XX_PA_WATCHDOG (0x7E004000) |
| 69 | #define S3C64XX_PA_RTC (0x7E005000) | 69 | #define S3C64XX_PA_RTC (0x7E005000) |
| 70 | #define S3C64XX_PA_KEYPAD (0x7E00A000) | ||
| 70 | #define S3C64XX_PA_ADC (0x7E00B000) | 71 | #define S3C64XX_PA_ADC (0x7E00B000) |
| 71 | #define S3C64XX_PA_SYSCON (0x7E00F000) | 72 | #define S3C64XX_PA_SYSCON (0x7E00F000) |
| 72 | #define S3C64XX_PA_AC97 (0x7F001000) | 73 | #define S3C64XX_PA_AC97 (0x7F001000) |
| @@ -124,5 +125,6 @@ | |||
| 124 | 125 | ||
| 125 | #define SAMSUNG_PA_ADC S3C64XX_PA_ADC | 126 | #define SAMSUNG_PA_ADC S3C64XX_PA_ADC |
| 126 | #define SAMSUNG_PA_CFCON S3C64XX_PA_CFCON | 127 | #define SAMSUNG_PA_CFCON S3C64XX_PA_CFCON |
| 128 | #define SAMSUNG_PA_KEYPAD S3C64XX_PA_KEYPAD | ||
| 127 | 129 | ||
| 128 | #endif /* __ASM_ARCH_6400_MAP_H */ | 130 | #endif /* __ASM_ARCH_6400_MAP_H */ |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c index 7fd38e9dcfca..b5d78616c774 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/list.h> | 17 | #include <linux/list.h> |
| 18 | #include <linux/timer.h> | 18 | #include <linux/timer.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/input.h> | ||
| 20 | #include <linux/serial_core.h> | 21 | #include <linux/serial_core.h> |
| 21 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
| 22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
| @@ -67,6 +68,7 @@ | |||
| 67 | #include <plat/cpu.h> | 68 | #include <plat/cpu.h> |
| 68 | #include <plat/adc.h> | 69 | #include <plat/adc.h> |
| 69 | #include <plat/ts.h> | 70 | #include <plat/ts.h> |
| 71 | #include <plat/keypad.h> | ||
| 70 | 72 | ||
| 71 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK | 73 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK |
| 72 | #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB | 74 | #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB |
| @@ -247,6 +249,25 @@ static struct s3c_ide_platdata smdk6410_ide_pdata __initdata = { | |||
| 247 | .setup_gpio = s3c64xx_ide_setup_gpio, | 249 | .setup_gpio = s3c64xx_ide_setup_gpio, |
| 248 | }; | 250 | }; |
| 249 | 251 | ||
| 252 | static uint32_t smdk6410_keymap[] __initdata = { | ||
| 253 | /* KEY(row, col, keycode) */ | ||
| 254 | KEY(0, 3, KEY_1), KEY(0, 4, KEY_2), KEY(0, 5, KEY_3), | ||
| 255 | KEY(0, 6, KEY_4), KEY(0, 7, KEY_5), | ||
| 256 | KEY(1, 3, KEY_A), KEY(1, 4, KEY_B), KEY(1, 5, KEY_C), | ||
| 257 | KEY(1, 6, KEY_D), KEY(1, 7, KEY_E) | ||
| 258 | }; | ||
| 259 | |||
| 260 | static struct matrix_keymap_data smdk6410_keymap_data __initdata = { | ||
| 261 | .keymap = smdk6410_keymap, | ||
| 262 | .keymap_size = ARRAY_SIZE(smdk6410_keymap), | ||
| 263 | }; | ||
| 264 | |||
| 265 | static struct samsung_keypad_platdata smdk6410_keypad_data __initdata = { | ||
| 266 | .keymap_data = &smdk6410_keymap_data, | ||
| 267 | .rows = 2, | ||
| 268 | .cols = 8, | ||
| 269 | }; | ||
| 270 | |||
| 250 | static struct map_desc smdk6410_iodesc[] = {}; | 271 | static struct map_desc smdk6410_iodesc[] = {}; |
| 251 | 272 | ||
| 252 | static struct platform_device *smdk6410_devices[] __initdata = { | 273 | static struct platform_device *smdk6410_devices[] __initdata = { |
| @@ -262,6 +283,7 @@ static struct platform_device *smdk6410_devices[] __initdata = { | |||
| 262 | &s3c_device_ohci, | 283 | &s3c_device_ohci, |
| 263 | &s3c_device_usb_hsotg, | 284 | &s3c_device_usb_hsotg, |
| 264 | &s3c64xx_device_iisv4, | 285 | &s3c64xx_device_iisv4, |
| 286 | &samsung_device_keypad, | ||
| 265 | 287 | ||
| 266 | #ifdef CONFIG_REGULATOR | 288 | #ifdef CONFIG_REGULATOR |
| 267 | &smdk6410_b_pwr_5v, | 289 | &smdk6410_b_pwr_5v, |
| @@ -643,6 +665,8 @@ static void __init smdk6410_machine_init(void) | |||
| 643 | s3c_i2c1_set_platdata(NULL); | 665 | s3c_i2c1_set_platdata(NULL); |
| 644 | s3c_fb_set_platdata(&smdk6410_lcd_pdata); | 666 | s3c_fb_set_platdata(&smdk6410_lcd_pdata); |
| 645 | 667 | ||
| 668 | samsung_keypad_set_platdata(&smdk6410_keypad_data); | ||
| 669 | |||
| 646 | s3c24xx_ts_set_platdata(&s3c_ts_platform); | 670 | s3c24xx_ts_set_platdata(&s3c_ts_platform); |
| 647 | 671 | ||
| 648 | /* configure nCS1 width to 16 bits */ | 672 | /* configure nCS1 width to 16 bits */ |
diff --git a/arch/arm/mach-s3c64xx/setup-keypad.c b/arch/arm/mach-s3c64xx/setup-keypad.c new file mode 100644 index 000000000000..abc34e4e1a93 --- /dev/null +++ b/arch/arm/mach-s3c64xx/setup-keypad.c | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | /* linux/arch/arm/mach-s3c64xx/setup-keypad.c | ||
| 2 | * | ||
| 3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | ||
| 4 | * http://www.samsung.com/ | ||
| 5 | * | ||
| 6 | * GPIO configuration for S3C64XX KeyPad device | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/gpio.h> | ||
| 14 | #include <plat/gpio-cfg.h> | ||
| 15 | |||
| 16 | void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols) | ||
| 17 | { | ||
| 18 | unsigned int gpio; | ||
| 19 | unsigned int end; | ||
| 20 | |||
| 21 | /* Set all the necessary GPK pins to special-function 3: KP_ROW[x] */ | ||
| 22 | end = S3C64XX_GPK(8 + rows); | ||
| 23 | for (gpio = S3C64XX_GPK(8); gpio < end; gpio++) { | ||
| 24 | s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); | ||
| 25 | s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); | ||
| 26 | } | ||
| 27 | |||
| 28 | /* Set all the necessary GPL pins to special-function 3: KP_COL[x] */ | ||
| 29 | end = S3C64XX_GPL(0 + cols); | ||
| 30 | for (gpio = S3C64XX_GPL(0); gpio < end; gpio++) { | ||
| 31 | s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); | ||
| 32 | s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); | ||
| 33 | } | ||
| 34 | } | ||
