diff options
| author | Fabio Estevam <fabio.estevam@freescale.com> | 2010-12-01 11:11:47 -0200 | 
|---|---|---|
| committer | Sascha Hauer <s.hauer@pengutronix.de> | 2011-01-12 14:50:45 +0100 | 
| commit | a5fcfef0b8db574098f2e42827117bc4accf2efd (patch) | |
| tree | c7c2223b26ae5d37ef10203af2e781e51e43b0cf | |
| parent | 076762aa52de48688f6e1b6999fe58d736479f37 (diff) | |
ARM: mx5: dynamically allocate imx-keypad devices
Add support for dynamical allocation of imx-keypad on mx5 platform.
After moving to dynamically registration of the keypad, the keypad clock
name needs to change accordingly.
The reason is that the original mx5 keypad platform_device id was 0,
now we use id=-1 as per arch/arm/plat-mxc/devices/platform-imx-keypad.c.
Tested keypad successfully on a MX51_3DS board.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
| -rw-r--r-- | arch/arm/mach-mx5/Kconfig | 2 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/board-mx51_3ds.c | 5 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/clock-mx51-mx53.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/devices-imx51.h | 4 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/devices.c | 19 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/devices.h | 1 | ||||
| -rw-r--r-- | arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c | 5 | ||||
| -rw-r--r-- | arch/arm/plat-mxc/devices/platform-imx-keypad.c | 5 | ||||
| -rw-r--r-- | arch/arm/plat-mxc/include/mach/mx51.h | 2 | 
9 files changed, 17 insertions, 28 deletions
| diff --git a/arch/arm/mach-mx5/Kconfig b/arch/arm/mach-mx5/Kconfig index 777740b9ffdd..f2f07315fd35 100644 --- a/arch/arm/mach-mx5/Kconfig +++ b/arch/arm/mach-mx5/Kconfig @@ -50,6 +50,7 @@ config MACH_MX51_BABBAGE  config MACH_MX51_3DS  	bool "Support MX51PDK (3DS)"  	select SOC_IMX51 +	select IMX_HAVE_PLATFORM_IMX_KEYPAD  	select IMX_HAVE_PLATFORM_IMX_UART  	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX  	select IMX_HAVE_PLATFORM_SPI_IMX @@ -77,6 +78,7 @@ choice  config MACH_EUKREA_MBIMX51_BASEBOARD  	prompt "Eukrea MBIMX51 development board"  	bool +	select IMX_HAVE_PLATFORM_IMX_KEYPAD  	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX  	help  	  This adds board specific devices that can be found on Eukrea's diff --git a/arch/arm/mach-mx5/board-mx51_3ds.c b/arch/arm/mach-mx5/board-mx51_3ds.c index e42bd2eb034e..49d644842379 100644 --- a/arch/arm/mach-mx5/board-mx51_3ds.c +++ b/arch/arm/mach-mx5/board-mx51_3ds.c @@ -12,7 +12,6 @@  #include <linux/irq.h>  #include <linux/platform_device.h> -#include <linux/input/matrix_keypad.h>  #include <linux/spi/spi.h>  #include <asm/mach-types.h> @@ -120,14 +119,14 @@ static int mx51_3ds_board_keymap[] = {  	KEY(3, 5, KEY_BACK)  }; -static struct matrix_keymap_data mx51_3ds_map_data = { +static const struct matrix_keymap_data mx51_3ds_map_data __initconst = {  	.keymap		= mx51_3ds_board_keymap,  	.keymap_size	= ARRAY_SIZE(mx51_3ds_board_keymap),  };  static void mxc_init_keypad(void)  { -	mxc_register_device(&mxc_keypad_device, &mx51_3ds_map_data); +	imx51_add_imx_keypad(&mx51_3ds_map_data);  }  #else  static inline void mxc_init_keypad(void) diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 8f142294e10e..f1f45b63f455 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c @@ -1295,7 +1295,7 @@ static struct clk_lookup mx51_lookups[] = {  	_REGISTER_CLOCK("mxc-ehci.2", "usb_ahb", usb_ahb_clk)  	_REGISTER_CLOCK("fsl-usb2-udc", "usb", usboh3_clk)  	_REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", ahb_clk) -	_REGISTER_CLOCK("imx-keypad.0", NULL, kpp_clk) +	_REGISTER_CLOCK("imx-keypad", NULL, kpp_clk)  	_REGISTER_CLOCK("mxc_nand", NULL, nfc_clk)  	_REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk)  	_REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) diff --git a/arch/arm/mach-mx5/devices-imx51.h b/arch/arm/mach-mx5/devices-imx51.h index 39183ee56dd6..531f4544dc95 100644 --- a/arch/arm/mach-mx5/devices-imx51.h +++ b/arch/arm/mach-mx5/devices-imx51.h @@ -51,3 +51,7 @@ extern const struct imx_imx2_wdt_data imx51_imx2_wdt_data[] __initconst;  extern const struct imx_mxc_pwm_data imx51_mxc_pwm_data[] __initconst;  #define imx51_add_mxc_pwm(id, pdata)	\  	imx_add_mxc_pwm(&imx51_mxc_pwm_data[id], pdata) + +extern const struct imx_imx_keypad_data imx51_imx_keypad_data __initconst; +#define imx51_add_imx_keypad(pdata)	\ +	imx_add_imx_keypad(&imx51_imx_keypad_data, pdata) diff --git a/arch/arm/mach-mx5/devices.c b/arch/arm/mach-mx5/devices.c index 1bda5cb339dc..153ada53e575 100644 --- a/arch/arm/mach-mx5/devices.c +++ b/arch/arm/mach-mx5/devices.c @@ -120,25 +120,6 @@ struct platform_device mxc_usbh2_device = {  	},  }; -static struct resource mxc_kpp_resources[] = { -	{ -		.start = MX51_MXC_INT_KPP, -		.end = MX51_MXC_INT_KPP, -		.flags = IORESOURCE_IRQ, -	} , { -		.start = MX51_KPP_BASE_ADDR, -		.end = MX51_KPP_BASE_ADDR + 0x8 - 1, -		.flags = IORESOURCE_MEM, -	}, -}; - -struct platform_device mxc_keypad_device = { -	.name = "imx-keypad", -	.id = 0, -	.num_resources = ARRAY_SIZE(mxc_kpp_resources), -	.resource = mxc_kpp_resources, -}; -  static struct mxc_gpio_port mxc_gpio_ports[] = {  	{  		.chip.label = "gpio-0", diff --git a/arch/arm/mach-mx5/devices.h b/arch/arm/mach-mx5/devices.h index 16891aa3573c..55a5129bc29f 100644 --- a/arch/arm/mach-mx5/devices.h +++ b/arch/arm/mach-mx5/devices.h @@ -3,4 +3,3 @@ extern struct platform_device mxc_usbh1_device;  extern struct platform_device mxc_usbh2_device;  extern struct platform_device mxc_usbdr_udc_device;  extern struct platform_device mxc_hsi2c_device; -extern struct platform_device mxc_keypad_device; diff --git a/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c b/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c index c96d018ff8a2..e83ffadb65f8 100644 --- a/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c +++ b/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c @@ -21,7 +21,6 @@  #include <linux/fsl_devices.h>  #include <linux/i2c/tsc2007.h>  #include <linux/leds.h> -#include <linux/input/matrix_keypad.h>  #include <mach/common.h>  #include <mach/hardware.h> @@ -157,7 +156,7 @@ static int mbimx51_keymap[] = {  	KEY(3, 3, KEY_ENTER),  }; -static struct matrix_keymap_data mbimx51_map_data = { +static const struct matrix_keymap_data mbimx51_map_data __initconst = {  	.keymap		= mbimx51_keymap,  	.keymap_size	= ARRAY_SIZE(mbimx51_keymap),  }; @@ -209,7 +208,7 @@ void __init eukrea_mbimx51_baseboard_init(void)  	platform_add_devices(devices, ARRAY_SIZE(devices)); -	mxc_register_device(&mxc_keypad_device, &mbimx51_map_data); +	imx51_add_imx_keypad(&mbimx51_map_data);  	gpio_request(MBIMX51_TSC2007_GPIO, "tsc2007_irq");  	gpio_direction_input(MBIMX51_TSC2007_GPIO); diff --git a/arch/arm/plat-mxc/devices/platform-imx-keypad.c b/arch/arm/plat-mxc/devices/platform-imx-keypad.c index 40238f0b8643..26366114b021 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-keypad.c +++ b/arch/arm/plat-mxc/devices/platform-imx-keypad.c @@ -41,6 +41,11 @@ const struct imx_imx_keypad_data imx35_imx_keypad_data __initconst =  	imx_imx_keypad_data_entry_single(MX35, SZ_16);  #endif /* ifdef CONFIG_SOC_IMX35 */ +#ifdef CONFIG_SOC_IMX51 +const struct imx_imx_keypad_data imx51_imx_keypad_data __initconst = +	imx_imx_keypad_data_entry_single(MX51, SZ_16); +#endif /* ifdef CONFIG_SOC_IMX51 */ +  struct platform_device *__init imx_add_imx_keypad(  		const struct imx_imx_keypad_data *data,  		const struct matrix_keymap_data *pdata) diff --git a/arch/arm/plat-mxc/include/mach/mx51.h b/arch/arm/plat-mxc/include/mach/mx51.h index ec9ae5afa09a..1eb339e6c857 100644 --- a/arch/arm/plat-mxc/include/mach/mx51.h +++ b/arch/arm/plat-mxc/include/mach/mx51.h @@ -301,7 +301,7 @@  #define MX51_MXC_INT_GPIO4_HIGH		57  #define MX51_MXC_INT_WDOG1		58  #define MX51_MXC_INT_WDOG2		59 -#define MX51_MXC_INT_KPP		60 +#define MX51_INT_KPP			60  #define MX51_INT_PWM1			61  #define MX51_INT_I2C1			62  #define MX51_INT_I2C2			63 | 
