diff options
| author | Tony Lindgren <tony@atomide.com> | 2011-10-06 15:43:00 -0700 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2011-11-04 18:07:21 -0700 | 
| commit | 41eb2d813f558900884e240c2f723e36c7bd151f (patch) | |
| tree | 9b40261999588d6fc274d296f8eb6a644bc46da0 | |
| parent | 98e541ffaadf01fc4d202ad2bd187a14b671f1a4 (diff) | |
| download | olio-linux-3.10-41eb2d813f558900884e240c2f723e36c7bd151f.tar.xz olio-linux-3.10-41eb2d813f558900884e240c2f723e36c7bd151f.zip  | |
ARM: OMAP2: Fix H4 matrix keyboard warning
Convert to use matrix keyboard to remove the warning
"Please update the board to use matrix-keypad driver".
Based on similar setup in palmtc.c. Note that this
patch is compile tested only because of lack of working
hardware.
Signed-off-by: Tony Lindgren <tony@atomide.com>
| -rw-r--r-- | arch/arm/mach-omap2/board-h4.c | 122 | 
1 files changed, 69 insertions, 53 deletions
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index c12666ee701..8b351d92a1c 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c @@ -25,6 +25,7 @@  #include <linux/err.h>  #include <linux/clk.h>  #include <linux/io.h> +#include <linux/input/matrix_keypad.h>  #include <mach/hardware.h>  #include <asm/mach-types.h> @@ -34,7 +35,6 @@  #include <plat/usb.h>  #include <plat/board.h>  #include <plat/common.h> -#include <plat/keypad.h>  #include <plat/menelaus.h>  #include <plat/dma.h>  #include <plat/gpmc.h> @@ -50,10 +50,8 @@  #define H4_ETHR_GPIO_IRQ		92 -static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; -static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; - -static const unsigned int h4_keymap[] = { +#if defined(CONFIG_KEYBOARD_MATRIX) || defined(CONFIG_KEYBOARD_MATRIX_MODULE) +static const uint32_t board_matrix_keys[] = {  	KEY(0, 0, KEY_LEFT),  	KEY(1, 0, KEY_RIGHT),  	KEY(2, 0, KEY_A), @@ -86,6 +84,71 @@ static const unsigned int h4_keymap[] = {  	KEY(4, 5, KEY_ENTER),  }; +static const struct matrix_keymap_data board_keymap_data = { +	.keymap			= board_matrix_keys, +	.keymap_size		= ARRAY_SIZE(board_matrix_keys), +}; + +static unsigned int board_keypad_row_gpios[] = { +	88, 89, 124, 11, 6, 96 +}; + +static unsigned int board_keypad_col_gpios[] = { +	90, 91, 100, 36, 12, 97, 98 +}; + +static struct matrix_keypad_platform_data board_keypad_platform_data = { +	.keymap_data	= &board_keymap_data, +	.row_gpios	= board_keypad_row_gpios, +	.num_row_gpios	= ARRAY_SIZE(board_keypad_row_gpios), +	.col_gpios	= board_keypad_col_gpios, +	.num_col_gpios	= ARRAY_SIZE(board_keypad_col_gpios), +	.active_low	= 1, + +	.debounce_ms		= 20, +	.col_scan_delay_us	= 5, +}; + +static struct platform_device board_keyboard = { +	.name	= "matrix-keypad", +	.id	= -1, +	.dev	= { +		.platform_data = &board_keypad_platform_data, +	}, +}; +static void __init board_mkp_init(void) +{ +	omap_mux_init_gpio(88, OMAP_PULL_ENA | OMAP_PULL_UP); +	omap_mux_init_gpio(89, OMAP_PULL_ENA | OMAP_PULL_UP); +	omap_mux_init_gpio(124, OMAP_PULL_ENA | OMAP_PULL_UP); +	omap_mux_init_signal("mcbsp2_dr.gpio_11", OMAP_PULL_ENA | OMAP_PULL_UP); +	if (omap_has_menelaus()) { +		omap_mux_init_signal("sdrc_a14.gpio0", +			OMAP_PULL_ENA | OMAP_PULL_UP); +		omap_mux_init_signal("vlynq_rx0.gpio_15", 0); +		omap_mux_init_signal("gpio_98", 0); +		board_keypad_row_gpios[5] = 0; +		board_keypad_col_gpios[2] = 15; +		board_keypad_col_gpios[6] = 18; +	} else { +		omap_mux_init_signal("gpio_96", OMAP_PULL_ENA | OMAP_PULL_UP); +		omap_mux_init_signal("gpio_100", 0); +		omap_mux_init_signal("gpio_98", 0); +	} +	omap_mux_init_signal("gpio_90", 0); +	omap_mux_init_signal("gpio_91", 0); +	omap_mux_init_signal("gpio_36", 0); +	omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); +	omap_mux_init_signal("gpio_97", 0); + +	platform_device_register(&board_keyboard); +} +#else +static inline void board_mkp_init(void) +{ +} +#endif +  static struct mtd_partition h4_partitions[] = {  	/* bootloader (U-Boot, etc) in first sector */  	{ @@ -137,31 +200,8 @@ static struct platform_device h4_flash_device = {  	.resource	= &h4_flash_resource,  }; -static const struct matrix_keymap_data h4_keymap_data = { -	.keymap		= h4_keymap, -	.keymap_size	= ARRAY_SIZE(h4_keymap), -}; - -static struct omap_kp_platform_data h4_kp_data = { -	.rows		= 6, -	.cols		= 7, -	.keymap_data	= &h4_keymap_data, -	.rep		= true, -	.row_gpios 	= row_gpios, -	.col_gpios 	= col_gpios, -}; - -static struct platform_device h4_kp_device = { -	.name		= "omap-keypad", -	.id		= -1, -	.dev		= { -		.platform_data = &h4_kp_data, -	}, -}; -  static struct platform_device *h4_devices[] __initdata = {  	&h4_flash_device, -	&h4_kp_device,  };  static struct panel_generic_dpi_data h4_panel_data = { @@ -336,31 +376,7 @@ static void __init omap_h4_init(void)  	 * if not needed.  	 */ -#if defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE) -	omap_mux_init_gpio(88, OMAP_PULL_ENA | OMAP_PULL_UP); -	omap_mux_init_gpio(89, OMAP_PULL_ENA | OMAP_PULL_UP); -	omap_mux_init_gpio(124, OMAP_PULL_ENA | OMAP_PULL_UP); -	omap_mux_init_signal("mcbsp2_dr.gpio_11", OMAP_PULL_ENA | OMAP_PULL_UP); -	if (omap_has_menelaus()) { -		omap_mux_init_signal("sdrc_a14.gpio0", -			OMAP_PULL_ENA | OMAP_PULL_UP); -		omap_mux_init_signal("vlynq_rx0.gpio_15", 0); -		omap_mux_init_signal("gpio_98", 0); -		row_gpios[5] = 0; -		col_gpios[2] = 15; -		col_gpios[6] = 18; -	} else { -		omap_mux_init_signal("gpio_96", OMAP_PULL_ENA | OMAP_PULL_UP); -		omap_mux_init_signal("gpio_100", 0); -		omap_mux_init_signal("gpio_98", 0); -	} -	omap_mux_init_signal("gpio_90", 0); -	omap_mux_init_signal("gpio_91", 0); -	omap_mux_init_signal("gpio_36", 0); -	omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); -	omap_mux_init_signal("gpio_97", 0); -#endif - +	board_mkp_init();  	i2c_register_board_info(1, h4_i2c_board_info,  			ARRAY_SIZE(h4_i2c_board_info));  |