diff mbox

[2/3] Davinci: DM365: Enable DaVinci Key Scan support for DM365 EVM

Message ID 1253811240-21437-1-git-send-email-miguel.aguilar@ridgerun.com (mailing list archive)
State New, archived
Headers show

Commit Message

miguel.aguilar@ridgerun.com Sept. 24, 2009, 4:54 p.m. UTC
From: Miguel Aguilar <miguel.aguilar@ridgerun.com>

The general structures are defined at DM365 SoC file and the specific
platform data structure for the EVM is defined at board file.

Signed-off-by: Miguel Aguilar <miguel.aguilar@ridgerun.com>
---
 arch/arm/mach-davinci/board-dm365-evm.c    |   54 ++++++++++++++++++++++++++++
 arch/arm/mach-davinci/dm365.c              |   32 ++++++++++++++++-
 arch/arm/mach-davinci/include/mach/dm365.h |    5 +++
 arch/arm/mach-davinci/include/mach/mux.h   |    4 +-
 4 files changed, 92 insertions(+), 3 deletions(-)

Comments

Dmitry Torokhov Sept. 25, 2009, 4:01 a.m. UTC | #1
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?
miguel.aguilar@ridgerun.com Sept. 25, 2009, 2:09 p.m. UTC | #2
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@ridgerun.com Sept. 25, 2009, 2:26 p.m. UTC | #3
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
Dmitry Torokhov Sept. 28, 2009, 5:02 p.m. UTC | #4
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 mbox

Patch

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,