Message ID | 1253811240-21437-1-git-send-email-miguel.aguilar@ridgerun.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Sep 24, 2009 at 10:54:00AM -0600, miguel.aguilar@ridgerun.com wrote: > > +/* Masks for the various keys on the DM365 EVM */ > +#define KEY_DM365_KEY2 0 > +#define KEY_DM365_LEFT 1 > +#define KEY_DM365_EXIT 2 > +#define KEY_DM365_DOWN 3 > +#define KEY_DM365_ENTER 4 > +#define KEY_DM365_UP 5 > +#define KEY_DM365_KEY1 6 > +#define KEY_DM365_RIGHT 7 > +#define KEY_DM365_MENU 8 > +#define KEY_DM365_REC 9 > +#define KEY_DM365_REW 10 > +#define KEY_DM365_SKIPMINUS 11 > +#define KEY_DM365_STOP 12 > +#define KEY_DM365_FF 13 > +#define KEY_DM365_SKIPPLUL 14 > +#define KEY_DM365_PLAYPAUSE 15 > + > +#ifdef CONFIG_KEYBOARD_DAVINCI > +static unsigned short dm365evm_keymap[] = { > + KEY_DM365_KEY2, > + KEY_DM365_LEFT, > + KEY_DM365_EXIT, > + KEY_DM365_DOWN, > + KEY_DM365_ENTER, > + KEY_DM365_UP, > + KEY_DM365_KEY1, > + KEY_DM365_RIGHT, > + KEY_DM365_MENU, > + KEY_DM365_REC, > + KEY_DM365_REW, > + KEY_DM365_SKIPMINUS, > + KEY_DM365_STOP, > + KEY_DM365_FF, > + KEY_DM365_SKIPPLUL, > + KEY_DM365_PLAYPAUSE, These are not standard key codes, why don't you use the ones defined in linux/input.h?
Dmitry Torokhov wrote: > On Thu, Sep 24, 2009 at 10:54:00AM -0600, miguel.aguilar@ridgerun.com wrote: >> >> +/* Masks for the various keys on the DM365 EVM */ >> +#define KEY_DM365_KEY2 0 >> +#define KEY_DM365_LEFT 1 >> +#define KEY_DM365_EXIT 2 >> +#define KEY_DM365_DOWN 3 >> +#define KEY_DM365_ENTER 4 >> +#define KEY_DM365_UP 5 >> +#define KEY_DM365_KEY1 6 >> +#define KEY_DM365_RIGHT 7 >> +#define KEY_DM365_MENU 8 >> +#define KEY_DM365_REC 9 >> +#define KEY_DM365_REW 10 >> +#define KEY_DM365_SKIPMINUS 11 >> +#define KEY_DM365_STOP 12 >> +#define KEY_DM365_FF 13 >> +#define KEY_DM365_SKIPPLUL 14 >> +#define KEY_DM365_PLAYPAUSE 15 >> + >> +#ifdef CONFIG_KEYBOARD_DAVINCI >> +static unsigned short dm365evm_keymap[] = { >> + KEY_DM365_KEY2, >> + KEY_DM365_LEFT, >> + KEY_DM365_EXIT, >> + KEY_DM365_DOWN, >> + KEY_DM365_ENTER, >> + KEY_DM365_UP, >> + KEY_DM365_KEY1, >> + KEY_DM365_RIGHT, >> + KEY_DM365_MENU, >> + KEY_DM365_REC, >> + KEY_DM365_REW, >> + KEY_DM365_SKIPMINUS, >> + KEY_DM365_STOP, >> + KEY_DM365_FF, >> + KEY_DM365_SKIPPLUL, >> + KEY_DM365_PLAYPAUSE, > > These are not standard key codes, why don't you use the ones defined in > linux/input.h? > These keys make sense for the DM365 EVM, they are defined in the board specific file which is the proper way to do that. Using the standard keys would be confusing for identifying the real key names defined in the board itself. Is it really necessary to use the standard keys?, if not lets keep the board specific names. -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Miguel Aguilar wrote: > Dmitry Torokhov wrote: >> On Thu, Sep 24, 2009 at 10:54:00AM -0600, miguel.aguilar@ridgerun.com >> wrote: >>> >>> +/* Masks for the various keys on the DM365 EVM */ >>> +#define KEY_DM365_KEY2 0 >>> +#define KEY_DM365_LEFT 1 >>> +#define KEY_DM365_EXIT 2 >>> +#define KEY_DM365_DOWN 3 >>> +#define KEY_DM365_ENTER 4 >>> +#define KEY_DM365_UP 5 >>> +#define KEY_DM365_KEY1 6 >>> +#define KEY_DM365_RIGHT 7 >>> +#define KEY_DM365_MENU 8 >>> +#define KEY_DM365_REC 9 >>> +#define KEY_DM365_REW 10 >>> +#define KEY_DM365_SKIPMINUS 11 >>> +#define KEY_DM365_STOP 12 >>> +#define KEY_DM365_FF 13 >>> +#define KEY_DM365_SKIPPLUL 14 >>> +#define KEY_DM365_PLAYPAUSE 15 >>> + >>> +#ifdef CONFIG_KEYBOARD_DAVINCI >>> +static unsigned short dm365evm_keymap[] = { >>> + KEY_DM365_KEY2, >>> + KEY_DM365_LEFT, >>> + KEY_DM365_EXIT, >>> + KEY_DM365_DOWN, >>> + KEY_DM365_ENTER, >>> + KEY_DM365_UP, >>> + KEY_DM365_KEY1, >>> + KEY_DM365_RIGHT, >>> + KEY_DM365_MENU, >>> + KEY_DM365_REC, >>> + KEY_DM365_REW, >>> + KEY_DM365_SKIPMINUS, >>> + KEY_DM365_STOP, >>> + KEY_DM365_FF, >>> + KEY_DM365_SKIPPLUL, >>> + KEY_DM365_PLAYPAUSE, >> >> These are not standard key codes, why don't you use the ones defined in >> linux/input.h? >> > > These keys make sense for the DM365 EVM, they are defined in the board > specific file which is the proper way to do that. Using the standard > keys would be confusing for identifying the real key names defined in > the board itself. Is it really necessary to use the standard keys?, if > not lets keep the board specific names. > -- > To unsubscribe from this list: send the line "unsubscribe linux-input" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html In case that the standard keys should be used what are the proper key codes for these 16 keys? -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Sep 25, 2009 at 08:26:32AM -0600, Miguel Aguilar wrote: > Miguel Aguilar wrote: >> Dmitry Torokhov wrote: >>> On Thu, Sep 24, 2009 at 10:54:00AM -0600, miguel.aguilar@ridgerun.com >>> wrote: >>>> +/* Masks for the various keys on the DM365 EVM */ >>>> +#define KEY_DM365_KEY2 0 >>>> +#define KEY_DM365_LEFT 1 >>>> +#define KEY_DM365_EXIT 2 >>>> +#define KEY_DM365_DOWN 3 >>>> +#define KEY_DM365_ENTER 4 >>>> +#define KEY_DM365_UP 5 >>>> +#define KEY_DM365_KEY1 6 >>>> +#define KEY_DM365_RIGHT 7 >>>> +#define KEY_DM365_MENU 8 >>>> +#define KEY_DM365_REC 9 >>>> +#define KEY_DM365_REW 10 >>>> +#define KEY_DM365_SKIPMINUS 11 >>>> +#define KEY_DM365_STOP 12 >>>> +#define KEY_DM365_FF 13 >>>> +#define KEY_DM365_SKIPPLUL 14 >>>> +#define KEY_DM365_PLAYPAUSE 15 >>>> + >>>> +#ifdef CONFIG_KEYBOARD_DAVINCI >>>> +static unsigned short dm365evm_keymap[] = { >>>> + KEY_DM365_KEY2, >>>> + KEY_DM365_LEFT, >>>> + KEY_DM365_EXIT, >>>> + KEY_DM365_DOWN, >>>> + KEY_DM365_ENTER, >>>> + KEY_DM365_UP, >>>> + KEY_DM365_KEY1, >>>> + KEY_DM365_RIGHT, >>>> + KEY_DM365_MENU, >>>> + KEY_DM365_REC, >>>> + KEY_DM365_REW, >>>> + KEY_DM365_SKIPMINUS, >>>> + KEY_DM365_STOP, >>>> + KEY_DM365_FF, >>>> + KEY_DM365_SKIPPLUL, >>>> + KEY_DM365_PLAYPAUSE, >>> >>> These are not standard key codes, why don't you use the ones defined in >>> linux/input.h? >>> >> >> These keys make sense for the DM365 EVM, they are defined in the board >> specific file which is the proper way to do that. Using the standard >> keys would be confusing for identifying the real key names defined in >> the board itself. Is it really necessary to use the standard keys?, if >> not lets keep the board specific names. These are the codes you send to userspace, you don't want to rewrite it if you switch to a slightly different keypad module, right? Plus, all other userspace tools that are already there would be confused when you present hardware-specific codes in place of standard input keycodes. > In case that the standard keys should be used what are the proper key > codes for these 16 keys? I am not sure what is the intended purpose of KEY1 and KEY2, the rest can be mapped easily to input codes (start with removing 'DM365' from your defines, you'll get most of them correct right there ;) ).
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 77f815c..1d1add7 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c @@ -38,6 +38,7 @@ #include <mach/common.h> #include <mach/mmc.h> #include <mach/nand.h> +#include <mach/keyscan.h> static inline int have_imager(void) @@ -197,6 +198,55 @@ static struct davinci_i2c_platform_data i2c_pdata = { .bus_delay = 0 /* usec */, }; +/* Masks for the various keys on the DM365 EVM */ +#define KEY_DM365_KEY2 0 +#define KEY_DM365_LEFT 1 +#define KEY_DM365_EXIT 2 +#define KEY_DM365_DOWN 3 +#define KEY_DM365_ENTER 4 +#define KEY_DM365_UP 5 +#define KEY_DM365_KEY1 6 +#define KEY_DM365_RIGHT 7 +#define KEY_DM365_MENU 8 +#define KEY_DM365_REC 9 +#define KEY_DM365_REW 10 +#define KEY_DM365_SKIPMINUS 11 +#define KEY_DM365_STOP 12 +#define KEY_DM365_FF 13 +#define KEY_DM365_SKIPPLUL 14 +#define KEY_DM365_PLAYPAUSE 15 + +#ifdef CONFIG_KEYBOARD_DAVINCI +static unsigned short dm365evm_keymap[] = { + KEY_DM365_KEY2, + KEY_DM365_LEFT, + KEY_DM365_EXIT, + KEY_DM365_DOWN, + KEY_DM365_ENTER, + KEY_DM365_UP, + KEY_DM365_KEY1, + KEY_DM365_RIGHT, + KEY_DM365_MENU, + KEY_DM365_REC, + KEY_DM365_REW, + KEY_DM365_SKIPMINUS, + KEY_DM365_STOP, + KEY_DM365_FF, + KEY_DM365_SKIPPLUL, + KEY_DM365_PLAYPAUSE, + 0 +}; + +static struct davinci_ks_platform_data dm365evm_ks_data = { + .keymap = dm365evm_keymap, + .keymapsize = ARRAY_SIZE(dm365evm_keymap), + .rep = 1, + /* Scan period = strobe + interval */ + .strobe = 0x5, + .interval = 0x2, +}; +#endif + static int cpld_mmc_get_cd(int module) { if (!cpld) @@ -483,6 +533,10 @@ static __init void dm365_evm_init(void) evm_init_cpld(); dm365_init_asp(&dm365_evm_snd_data); + +#ifdef CONFIG_KEYBOARD_DAVINCI + dm365_init_ks(&dm365evm_ks_data); +#endif } 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 2674438..3eda695 100644 --- a/arch/arm/mach-davinci/dm365.c +++ b/arch/arm/mach-davinci/dm365.c @@ -33,6 +33,7 @@ #include <mach/serial.h> #include <mach/common.h> #include <mach/asp.h> +#include <mach/keyscan.h> #include "clock.h" #include "mux.h" @@ -532,7 +533,7 @@ MUX_CFG(DM365, EMAC_CRS, 3, 2, 1, 1, false) MUX_CFG(DM365, EMAC_MDIO, 3, 1, 1, 1, false) MUX_CFG(DM365, EMAC_MDCLK, 3, 0, 1, 1, false) -MUX_CFG(DM365, KEYPAD, 2, 0, 0x3f, 0x3f, false) +MUX_CFG(DM365, KEYSCAN, 2, 0, 0x3f, 0x3f, false) MUX_CFG(DM365, PWM0, 1, 0, 3, 2, false) MUX_CFG(DM365, PWM0_G23, 3, 26, 3, 3, false) @@ -851,6 +852,28 @@ static struct map_desc dm365_io_desc[] = { }, }; +static struct resource dm365_ks_resources[] = { + { + /* registers */ + .start = DM365_KEYSCAN_BASE, + .end = DM365_KEYSCAN_BASE + SZ_1K - 1, + .flags = IORESOURCE_MEM, + }, + { + /* interrupt */ + .start = IRQ_DM365_KEYINT, + .end = IRQ_DM365_KEYINT, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device dm365_ks_device = { + .name = "davinci_keyscan", + .id = 0, + .num_resources = ARRAY_SIZE(dm365_ks_resources), + .resource = dm365_ks_resources, +}; + /* Contents of JTAG ID register used to identify exact cpu type */ static struct davinci_id dm365_ids[] = { { @@ -950,6 +973,13 @@ void __init dm365_init_asp(struct snd_platform_data *pdata) platform_device_register(&dm365_asp_device); } +void __init dm365_init_ks(struct davinci_ks_platform_data *pdata) +{ + davinci_cfg_reg(DM365_KEYSCAN); + dm365_ks_device.dev.platform_data = pdata; + platform_device_register(&dm365_ks_device); +} + void __init dm365_init(void) { 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 2291c0d..d8d988a 100644 --- a/arch/arm/mach-davinci/include/mach/dm365.h +++ b/arch/arm/mach-davinci/include/mach/dm365.h @@ -17,6 +17,7 @@ #include <mach/hardware.h> #include <mach/emac.h> #include <mach/asp.h> +#include <mach/keyscan.h> #define DM365_EMAC_BASE (0x01D07000) #define DM365_EMAC_CNTRL_OFFSET (0x0000) @@ -25,7 +26,11 @@ #define DM365_EMAC_MDIO_OFFSET (0x4000) #define DM365_EMAC_CNTRL_RAM_SIZE (0x2000) +/* Base of key scan register bank */ +#define DM365_KEYSCAN_BASE (0x01C69400) + void __init dm365_init(void); void __init dm365_init_asp(struct snd_platform_data *pdata); +void __init dm365_init_ks(struct davinci_ks_platform_data *pdata); #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 fc8eb16..a063f99 100644 --- a/arch/arm/mach-davinci/include/mach/mux.h +++ b/arch/arm/mach-davinci/include/mach/mux.h @@ -228,8 +228,8 @@ enum davinci_dm365_index { DM365_EMAC_MDIO, DM365_EMAC_MDCLK, - /* Keypad */ - DM365_KEYPAD, + /* Key Scan */ + DM365_KEYSCAN, /* PWM */ DM365_PWM0,