diff options
Diffstat (limited to 'arch/arm/mach-davinci')
-rw-r--r-- | arch/arm/mach-davinci/board-dm365-evm.c | 38 | ||||
-rw-r--r-- | arch/arm/mach-davinci/dm365.c | 32 | ||||
-rw-r--r-- | arch/arm/mach-davinci/include/mach/dm365.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-davinci/include/mach/mux.h | 4 |
4 files changed, 76 insertions, 3 deletions
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 3d7b5bbeb97d..19678dc91b09 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/mtd/mtd.h> | 23 | #include <linux/mtd/mtd.h> |
24 | #include <linux/mtd/partitions.h> | 24 | #include <linux/mtd/partitions.h> |
25 | #include <linux/mtd/nand.h> | 25 | #include <linux/mtd/nand.h> |
26 | #include <linux/input.h> | ||
26 | 27 | ||
27 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
28 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
@@ -34,6 +35,7 @@ | |||
34 | #include <mach/serial.h> | 35 | #include <mach/serial.h> |
35 | #include <mach/mmc.h> | 36 | #include <mach/mmc.h> |
36 | #include <mach/nand.h> | 37 | #include <mach/nand.h> |
38 | #include <mach/keyscan.h> | ||
37 | 39 | ||
38 | static inline int have_imager(void) | 40 | static inline int have_imager(void) |
39 | { | 41 | { |
@@ -190,6 +192,38 @@ static struct davinci_i2c_platform_data i2c_pdata = { | |||
190 | .bus_delay = 0 /* usec */, | 192 | .bus_delay = 0 /* usec */, |
191 | }; | 193 | }; |
192 | 194 | ||
195 | #ifdef CONFIG_KEYBOARD_DAVINCI | ||
196 | static unsigned short dm365evm_keymap[] = { | ||
197 | KEY_KP2, | ||
198 | KEY_LEFT, | ||
199 | KEY_EXIT, | ||
200 | KEY_DOWN, | ||
201 | KEY_ENTER, | ||
202 | KEY_UP, | ||
203 | KEY_KP1, | ||
204 | KEY_RIGHT, | ||
205 | KEY_MENU, | ||
206 | KEY_RECORD, | ||
207 | KEY_REWIND, | ||
208 | KEY_KPMINUS, | ||
209 | KEY_STOP, | ||
210 | KEY_FASTFORWARD, | ||
211 | KEY_KPPLUS, | ||
212 | KEY_PLAYPAUSE, | ||
213 | 0 | ||
214 | }; | ||
215 | |||
216 | static struct davinci_ks_platform_data dm365evm_ks_data = { | ||
217 | .keymap = dm365evm_keymap, | ||
218 | .keymapsize = ARRAY_SIZE(dm365evm_keymap), | ||
219 | .rep = 1, | ||
220 | /* Scan period = strobe + interval */ | ||
221 | .strobe = 0x5, | ||
222 | .interval = 0x2, | ||
223 | .matrix_type = DAVINCI_KEYSCAN_MATRIX_4X4, | ||
224 | }; | ||
225 | #endif | ||
226 | |||
193 | static int cpld_mmc_get_cd(int module) | 227 | static int cpld_mmc_get_cd(int module) |
194 | { | 228 | { |
195 | if (!cpld) | 229 | if (!cpld) |
@@ -476,6 +510,10 @@ static __init void dm365_evm_init(void) | |||
476 | evm_init_cpld(); | 510 | evm_init_cpld(); |
477 | 511 | ||
478 | dm365_init_asp(&dm365_evm_snd_data); | 512 | dm365_init_asp(&dm365_evm_snd_data); |
513 | |||
514 | #ifdef CONFIG_KEYBOARD_DAVINCI | ||
515 | dm365_init_ks(&dm365evm_ks_data); | ||
516 | #endif | ||
479 | } | 517 | } |
480 | 518 | ||
481 | static __init void dm365_evm_irq_init(void) | 519 | static __init void dm365_evm_irq_init(void) |
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c index 0fbc2f261ee3..c12bb005b90d 100644 --- a/arch/arm/mach-davinci/dm365.c +++ b/arch/arm/mach-davinci/dm365.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <mach/serial.h> | 31 | #include <mach/serial.h> |
32 | #include <mach/common.h> | 32 | #include <mach/common.h> |
33 | #include <mach/asp.h> | 33 | #include <mach/asp.h> |
34 | #include <mach/keyscan.h> | ||
34 | 35 | ||
35 | #include "clock.h" | 36 | #include "clock.h" |
36 | #include "mux.h" | 37 | #include "mux.h" |
@@ -530,7 +531,7 @@ MUX_CFG(DM365, EMAC_CRS, 3, 2, 1, 1, false) | |||
530 | MUX_CFG(DM365, EMAC_MDIO, 3, 1, 1, 1, false) | 531 | MUX_CFG(DM365, EMAC_MDIO, 3, 1, 1, 1, false) |
531 | MUX_CFG(DM365, EMAC_MDCLK, 3, 0, 1, 1, false) | 532 | MUX_CFG(DM365, EMAC_MDCLK, 3, 0, 1, 1, false) |
532 | 533 | ||
533 | MUX_CFG(DM365, KEYPAD, 2, 0, 0x3f, 0x3f, false) | 534 | MUX_CFG(DM365, KEYSCAN, 2, 0, 0x3f, 0x3f, false) |
534 | 535 | ||
535 | MUX_CFG(DM365, PWM0, 1, 0, 3, 2, false) | 536 | MUX_CFG(DM365, PWM0, 1, 0, 3, 2, false) |
536 | MUX_CFG(DM365, PWM0_G23, 3, 26, 3, 3, false) | 537 | MUX_CFG(DM365, PWM0_G23, 3, 26, 3, 3, false) |
@@ -849,6 +850,28 @@ static struct map_desc dm365_io_desc[] = { | |||
849 | }, | 850 | }, |
850 | }; | 851 | }; |
851 | 852 | ||
853 | static struct resource dm365_ks_resources[] = { | ||
854 | { | ||
855 | /* registers */ | ||
856 | .start = DM365_KEYSCAN_BASE, | ||
857 | .end = DM365_KEYSCAN_BASE + SZ_1K - 1, | ||
858 | .flags = IORESOURCE_MEM, | ||
859 | }, | ||
860 | { | ||
861 | /* interrupt */ | ||
862 | .start = IRQ_DM365_KEYINT, | ||
863 | .end = IRQ_DM365_KEYINT, | ||
864 | .flags = IORESOURCE_IRQ, | ||
865 | }, | ||
866 | }; | ||
867 | |||
868 | static struct platform_device dm365_ks_device = { | ||
869 | .name = "davinci_keyscan", | ||
870 | .id = 0, | ||
871 | .num_resources = ARRAY_SIZE(dm365_ks_resources), | ||
872 | .resource = dm365_ks_resources, | ||
873 | }; | ||
874 | |||
852 | /* Contents of JTAG ID register used to identify exact cpu type */ | 875 | /* Contents of JTAG ID register used to identify exact cpu type */ |
853 | static struct davinci_id dm365_ids[] = { | 876 | static struct davinci_id dm365_ids[] = { |
854 | { | 877 | { |
@@ -948,6 +971,13 @@ void __init dm365_init_asp(struct snd_platform_data *pdata) | |||
948 | platform_device_register(&dm365_asp_device); | 971 | platform_device_register(&dm365_asp_device); |
949 | } | 972 | } |
950 | 973 | ||
974 | void __init dm365_init_ks(struct davinci_ks_platform_data *pdata) | ||
975 | { | ||
976 | davinci_cfg_reg(DM365_KEYSCAN); | ||
977 | dm365_ks_device.dev.platform_data = pdata; | ||
978 | platform_device_register(&dm365_ks_device); | ||
979 | } | ||
980 | |||
951 | void __init dm365_init(void) | 981 | void __init dm365_init(void) |
952 | { | 982 | { |
953 | davinci_common_init(&davinci_soc_info_dm365); | 983 | davinci_common_init(&davinci_soc_info_dm365); |
diff --git a/arch/arm/mach-davinci/include/mach/dm365.h b/arch/arm/mach-davinci/include/mach/dm365.h index 2291c0d2c2a0..d8d988a0b58b 100644 --- a/arch/arm/mach-davinci/include/mach/dm365.h +++ b/arch/arm/mach-davinci/include/mach/dm365.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <mach/emac.h> | 18 | #include <mach/emac.h> |
19 | #include <mach/asp.h> | 19 | #include <mach/asp.h> |
20 | #include <mach/keyscan.h> | ||
20 | 21 | ||
21 | #define DM365_EMAC_BASE (0x01D07000) | 22 | #define DM365_EMAC_BASE (0x01D07000) |
22 | #define DM365_EMAC_CNTRL_OFFSET (0x0000) | 23 | #define DM365_EMAC_CNTRL_OFFSET (0x0000) |
@@ -25,7 +26,11 @@ | |||
25 | #define DM365_EMAC_MDIO_OFFSET (0x4000) | 26 | #define DM365_EMAC_MDIO_OFFSET (0x4000) |
26 | #define DM365_EMAC_CNTRL_RAM_SIZE (0x2000) | 27 | #define DM365_EMAC_CNTRL_RAM_SIZE (0x2000) |
27 | 28 | ||
29 | /* Base of key scan register bank */ | ||
30 | #define DM365_KEYSCAN_BASE (0x01C69400) | ||
31 | |||
28 | void __init dm365_init(void); | 32 | void __init dm365_init(void); |
29 | void __init dm365_init_asp(struct snd_platform_data *pdata); | 33 | void __init dm365_init_asp(struct snd_platform_data *pdata); |
34 | void __init dm365_init_ks(struct davinci_ks_platform_data *pdata); | ||
30 | 35 | ||
31 | #endif /* __ASM_ARCH_DM365_H */ | 36 | #endif /* __ASM_ARCH_DM365_H */ |
diff --git a/arch/arm/mach-davinci/include/mach/mux.h b/arch/arm/mach-davinci/include/mach/mux.h index 16b8a7fc39bd..d41ad16966b7 100644 --- a/arch/arm/mach-davinci/include/mach/mux.h +++ b/arch/arm/mach-davinci/include/mach/mux.h | |||
@@ -237,8 +237,8 @@ enum davinci_dm365_index { | |||
237 | DM365_EMAC_MDIO, | 237 | DM365_EMAC_MDIO, |
238 | DM365_EMAC_MDCLK, | 238 | DM365_EMAC_MDCLK, |
239 | 239 | ||
240 | /* Keypad */ | 240 | /* Key Scan */ |
241 | DM365_KEYPAD, | 241 | DM365_KEYSCAN, |
242 | 242 | ||
243 | /* PWM */ | 243 | /* PWM */ |
244 | DM365_PWM0, | 244 | DM365_PWM0, |