Skip to contentSkip to conversation

Updates for omap3 for merge window after 2.6.30

PATCH Applied Tony Lindgren 3 participants 11 messages May 22, 2009 – May 26, 2009

Subsystems (4)
lore
Share & tools
lore

Tony Lindgren

author maintainer
#0 lore raw

cover Updates for omap3 for merge window after 2.6.30

Hi all,

Here are mostly omap3 specific updates for the coming merge window for review. Still to come few more boards and regulator framework changes for omap3 in one more series.

Regards,

Tony

---

Imre Deak (1):
ARM: OMAP3: ZOOM MDK: Add FB support to board file

Paul Walmsley (2):
ARM: OMAP3: SDRC: add timing data for Qimonda HYB18M512160AF-6
ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6

Tony Lindgren (2):
ARM: OMAP3: Initialize more devices for LDP
ARM: OMAP2/3: Remove L4_WK_OMAP_BASE, L4_PER_OMAP_BASE, L4_EMU_BASE, L3_OMAP_BASE

Vikram Pandita (1):
ARM: OMAP2/3: Serial: Remove arch_initcall dependency

 arch/arm/mach-omap2/board-3430sdp.c                |    3 
 arch/arm/mach-omap2/board-ldp.c                    |  219 ++++++++++++++++++++
 arch/arm/mach-omap2/board-omap3beagle.c            |    4 
 arch/arm/mach-omap2/board-omap3pandora.c           |    3 
 arch/arm/mach-omap2/board-overo.c                  |    3 
 arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h  |   69 ++++++
 .../mach-omap2/sdram-qimonda-hyb18m512160af-6.h    |   54 +++++
 arch/arm/mach-omap2/serial.c                       |   22 +-
 arch/arm/plat-omap/include/mach/keypad.h           |    4 
 arch/arm/plat-omap/include/mach/omap34xx.h         |    4 
 10 files changed, 361 insertions(+), 24 deletions(-)
 create mode 100644 arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h
 create mode 100644 arch/arm/mach-omap2/sdram-qimonda-hyb18m512160af-6.h
Signature · 1 line
Signature
author maintainer
#1 lore raw

PATCH 1/6 ARM: OMAP2/3: Remove L4_WK_OMAP_BASE, L4_PER_OMAP_BASE, L4_EMU_BASE, L3_OMAP_BASE

These are not being used right now, and the processor specific defines should be used instead by any code accessing these registers.

---
 arch/arm/plat-omap/include/mach/omap34xx.h |    4 ----
 1 files changed, 0 insertions(+), 4 deletions(-)
arch/arm/plat-omap/include/mach/omap34xx.h +0 -4
index cc25733..f8d186a 100644
@@ -31,13 +31,9 @@
 
 #define L4_34XX_BASE		0x48000000
 #define L4_WK_34XX_BASE		0x48300000
-#define L4_WK_OMAP_BASE		L4_WK_34XX_BASE
 #define L4_PER_34XX_BASE	0x49000000
-#define L4_PER_OMAP_BASE	L4_PER_34XX_BASE
 #define L4_EMU_34XX_BASE	0x54000000
-#define L4_EMU_BASE		L4_EMU_34XX_BASE
 #define L3_34XX_BASE		0x68000000
-#define L3_OMAP_BASE		L3_34XX_BASE
 
 #define OMAP3430_32KSYNCT_BASE	0x48320000
 #define OMAP3430_CM_BASE	0x48004800
author maintainer
#2 lore raw

PATCH 2/6 ARM: OMAP2/3: Serial: Remove arch_initcall dependency

In reply to Tony Lindgren

From: Vikram Pandita <[email protected]>

Move platform_device_register() for serial device to omap_serial_init()

There is no need to have arch_initcall() dependency in serial as already board files call the function omap_serial_init()

---
 arch/arm/mach-omap2/serial.c |   22 +++++++++-------------
 1 files changed, 9 insertions(+), 13 deletions(-)
arch/arm/mach-omap2/serial.c +9 -13
index 4dcf39c..3c2d325 100644
@@ -98,6 +98,14 @@ void omap_serial_enable_clocks(int enable)
 	}
 }
 
+static struct platform_device serial_device = {
+	.name			= "serial8250",
+	.id			= PLAT8250_DEV_PLATFORM,
+	.dev			= {
+		.platform_data	= serial_platform_data,
+	},
+};
+
 void __init omap_serial_init(void)
 {
 	int i;
@@ -142,18 +150,6 @@ void __init omap_serial_init(void)
 
 		omap_serial_reset(p);
 	}
-}
 
-static struct platform_device serial_device = {
-	.name			= "serial8250",
-	.id			= PLAT8250_DEV_PLATFORM,
-	.dev			= {
-		.platform_data	= serial_platform_data,
-	},
-};
-
-static int __init omap_init(void)
-{
-	return platform_device_register(&serial_device);
+	platform_device_register(&serial_device);
 }
-arch_initcall(omap_init);
author maintainer
#3 lore raw

PATCH 3/6 ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6

In reply to Tony Lindgren

From: Paul Walmsley <[email protected]>

Add timing data for the Micron MT46H32M32LF-6 SDRAM chip, used on the OMAP3 Beagle and EVM boards. Original timing data is from the Micron datasheet PDF downloaded from:

http://download.micron.com/pdf/datasheets/dram/mobile/1gb_ddr_mobile_sdram_t48m.pdf

Thanks to Rajendra Nayak <[email protected]> for his help identifying the chips used on Beagle & OMAP3EVM.

---
 arch/arm/mach-omap2/board-omap3beagle.c           |    4 +
 arch/arm/mach-omap2/board-omap3pandora.c          |    3 +
 arch/arm/mach-omap2/board-overo.c                 |    3 +
 arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h |   69 +++++++++++++++++++++
 4 files changed, 76 insertions(+), 3 deletions(-)
 create mode 100644 arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h
arch/arm/mach-omap2/board-omap3beagle.c +3 -1
index 3a7a29d..f25082c 100644
@@ -105,6 +105,8 @@ static struct platform_device omap3beagle_nand_device = {
 	.resource	= &omap3beagle_nand_resource,
 };
 
+#include "sdram-micron-mt46h32m32lf-6.h"
+
 static struct omap_uart_config omap3_beagle_uart_config __initdata = {
 	.enabled_uarts	= ((1 << 0) | (1 << 1) | (1 << 2)),
 };
@@ -185,7 +187,7 @@ static int __init omap3_beagle_i2c_init(void)
 
 static void __init omap3_beagle_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
 	omap_init_irq();
 #ifdef CONFIG_OMAP_32K_TIMER
 	omap2_gp_clockevent_set_gptimer(12);
arch/arm/mach-omap2/board-omap3pandora.c +2 -1
index 402f09c..3571bb4 100644
@@ -36,6 +36,7 @@
 #include <mach/mcspi.h>
 #include <mach/usb.h>
 
+#include "sdram-micron-mt46h32m32lf-6.h"
 #include "mmc-twl4030.h"
 
 #define OMAP3_PANDORA_TS_GPIO		94
@@ -118,7 +119,7 @@ static int __init omap3pandora_i2c_init(void)
 
 static void __init omap3pandora_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
 	omap_init_irq();
 	omap_gpio_init();
 }
arch/arm/mach-omap2/board-overo.c +2 -1
index b1f23be..c7443ff 100644
@@ -45,6 +45,7 @@
 #include <mach/nand.h>
 #include <mach/usb.h>
 
+#include "sdram-micron-mt46h32m32lf-6.h"
 #include "mmc-twl4030.h"
 
 #define OVERO_GPIO_BT_XGATE	15
@@ -303,7 +304,7 @@ static int __init overo_i2c_init(void)
 
 static void __init overo_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
 	omap_init_irq();
 	omap_gpio_init();
 }
arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h new file +69 -0

69 lines not on this page · raw message

author maintainer
#4 lore raw

Re: [PATCH 3/6] ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6, v2

Quoted 10 lines · Tony Lindgren

From: Paul Walmsley <[email protected]>

Add timing data for the Micron MT46H32M32LF-6 SDRAM chip, used on the OMAP3 Beagle and EVM boards. Original timing data is from the Micron datasheet PDF downloaded from:

http://download.micron.com/pdf/datasheets/dram/mobile/1gb_ddr_mobile_sdram_t48m.pdf

Thanks to Rajendra Nayak <[email protected]> for his help identifying the chips used on Beagle & OMAP3EVM.

Here's this one with updated timings from Paul:

Boards that used 133.3MHz maximum rate SDRAM were never released to the public and presumably used the OMAPZoom kernel; so, drop these unused rates. Viz.:

    http://marc.info/?l=linux-omap&m=124232922426311&w=2

Regards,

Tony

Quoted 1 line

From 91429b625404116b31f7c03700407df11ed61bcb Mon Sep 17 00:00:00 2001

From: Paul Walmsley <[email protected]>
Date: Thu, 21 May 2009 09:50:27 -0700
Subject: [PATCH] ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6, v2

Add timing data for the Micron MT46H32M32LF-6 SDRAM chip, used on the OMAP3 Beagle and EVM boards. Original timing data is from the Micron datasheet PDF downloaded from:

http://download.micron.com/pdf/datasheets/dram/mobile/1gb_ddr_mobile_sdram_t48m.pdf

Thanks to Rajendra Nayak <[email protected]> for his help identifying the chips used on Beagle & OMAP3EVM.

arch/arm/mach-omap2/board-omap3beagle.c +3 -1
index 3a7a29d..f25082c 100644
@@ -105,6 +105,8 @@ static struct platform_device omap3beagle_nand_device = {
 	.resource	= &omap3beagle_nand_resource,
 };
 
+#include "sdram-micron-mt46h32m32lf-6.h"
+
 static struct omap_uart_config omap3_beagle_uart_config __initdata = {
 	.enabled_uarts	= ((1 << 0) | (1 << 1) | (1 << 2)),
 };
@@ -185,7 +187,7 @@ static int __init omap3_beagle_i2c_init(void)
 
 static void __init omap3_beagle_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
 	omap_init_irq();
 #ifdef CONFIG_OMAP_32K_TIMER
 	omap2_gp_clockevent_set_gptimer(12);
arch/arm/mach-omap2/board-omap3pandora.c +2 -1
index 402f09c..3571bb4 100644
@@ -36,6 +36,7 @@
 #include <mach/mcspi.h>
 #include <mach/usb.h>
 
+#include "sdram-micron-mt46h32m32lf-6.h"
 #include "mmc-twl4030.h"
 
 #define OMAP3_PANDORA_TS_GPIO		94
@@ -118,7 +119,7 @@ static int __init omap3pandora_i2c_init(void)
 
 static void __init omap3pandora_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
 	omap_init_irq();
 	omap_gpio_init();
 }
arch/arm/mach-omap2/board-overo.c +2 -1
index b1f23be..c7443ff 100644
@@ -45,6 +45,7 @@
 #include <mach/nand.h>
 #include <mach/usb.h>
 
+#include "sdram-micron-mt46h32m32lf-6.h"
 #include "mmc-twl4030.h"
 
 #define OVERO_GPIO_BT_XGATE	15
@@ -303,7 +304,7 @@ static int __init overo_i2c_init(void)
 
 static void __init overo_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
 	omap_init_irq();
 	omap_gpio_init();
 }
arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h new file +55 -0

55 lines not on this page · raw message

author maintainer
#5 lore raw

PATCH 4/6 ARM: OMAP3: SDRC: add timing data for Qimonda HYB18M512160AF-6

In reply to Tony Lindgren

From: Paul Walmsley <[email protected]>

Add timing data for the Qimonda HYB18M512160AF-6 SDRAM chip, used on the OMAP3430SDP boards.

Thanks to Rajendra Nayak <[email protected]> for his help identifying the chip used on 3430SDP.

---
 arch/arm/mach-omap2/board-3430sdp.c                |    3 +
 .../mach-omap2/sdram-qimonda-hyb18m512160af-6.h    |   54 ++++++++++++++++++++
 2 files changed, 56 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/mach-omap2/sdram-qimonda-hyb18m512160af-6.h
arch/arm/mach-omap2/board-3430sdp.c +2 -1
index 439b826..1d0c30a 100644
@@ -41,6 +41,7 @@
 #include <mach/keypad.h>
 #include <mach/gpmc-smc91x.h>
 
+#include "sdram-qimonda-hyb18m512160af-6.h"
 #include "mmc-twl4030.h"
 
 #define CONFIG_DISABLE_HFCLK 1
@@ -168,7 +169,7 @@ static struct platform_device *sdp3430_devices[] __initdata = {
 
 static void __init omap_3430sdp_init_irq(void)
 {
-	omap2_init_common_hw(NULL);
+	omap2_init_common_hw(hyb18m512160af6_sdrc_params);
 	omap_init_irq();
 	omap_gpio_init();
 }
arch/arm/mach-omap2/sdram-qimonda-hyb18m512160af-6.h new file +54 -0

54 lines not on this page · raw message

author maintainer
#6 lore raw

PATCH 5/6 ARM: OMAP3: ZOOM MDK: Add FB support to board file

In reply to Tony Lindgren

From: Imre Deak <[email protected]>

Based on an earlier patch by Stanley.Miao <[email protected]> with board-*.c changes split to avoid conflicts with other device updates.

---
 arch/arm/mach-omap2/board-ldp.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)
arch/arm/mach-omap2/board-ldp.c +15 -4
index da57b0f..59ac8ed 100644
@@ -77,10 +77,6 @@ static struct platform_device ldp_smsc911x_device = {
 	},
 };
 
-static struct platform_device *ldp_devices[] __initdata = {
-	&ldp_smsc911x_device,
-};
-
 static inline void __init ldp_init_smsc911x(void)
 {
 	int eth_cs;
@@ -122,8 +118,18 @@ static struct omap_uart_config ldp_uart_config __initdata = {
 	.enabled_uarts	= ((1 << 0) | (1 << 1) | (1 << 2)),
 };
 
+static struct platform_device ldp_lcd_device = {
+	.name		= "ldp_lcd",
+	.id		= -1,
+};
+
+static struct omap_lcd_config ldp_lcd_config __initdata = {
+	.ctrl_name	= "internal",
+};
+
 static struct omap_board_config_kernel ldp_config[] __initdata = {
 	{ OMAP_TAG_UART,	&ldp_uart_config },
+	{ OMAP_TAG_LCD,		&ldp_lcd_config },
 };
 
 static struct twl4030_gpio_platform_data ldp_gpio_data = {
@@ -168,6 +174,11 @@ static struct twl4030_hsmmc_info mmc[] __initdata = {
 	{}	/* Terminator */
 };
 
+static struct platform_device *ldp_devices[] __initdata = {
+	&ldp_smsc911x_device,
+	&ldp_lcd_device,
+};
+
 static void __init omap_ldp_init(void)
 {
 	omap_i2c_init();
author maintainer
#7 lore raw

PATCH 6/6 ARM: OMAP3: Initialize more devices for LDP

In reply to Tony Lindgren

Based on an earlier patches by Stanley.Miao <[email protected]> and Nishant Kamat <[email protected]>.

Note that at the ads7846 support still needs support for vaux_control for the touchscreen to work.

---
 arch/arm/mach-omap2/board-ldp.c          |  204 ++++++++++++++++++++++++++++++
 arch/arm/plat-omap/include/mach/keypad.h |    4 +
 2 files changed, 207 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/board-ldp.c +203 -1
index 59ac8ed..d8bc0a7 100644
@@ -16,11 +16,13 @@
 #include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/input.h>
+#include <linux/gpio_keys.h>
 #include <linux/workqueue.h>
 #include <linux/err.h>
 #include <linux/clk.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/ads7846.h>
+#include <linux/regulator/machine.h>
 #include <linux/i2c/twl4030.h>
 #include <linux/io.h>
 #include <linux/smsc911x.h>
@@ -39,6 +41,7 @@
 #include <asm/delay.h>
 #include <mach/control.h>
 #include <mach/usb.h>
+#include <mach/keypad.h>
 
 #include "mmc-twl4030.h"
 
@@ -77,6 +80,165 @@ static struct platform_device ldp_smsc911x_device = {
 	},
 };
 
+static int ldp_twl4030_keymap[] = {
+	KEY(0, 0, KEY_1),
+	KEY(1, 0, KEY_2),
+	KEY(2, 0, KEY_3),
+	KEY(0, 1, KEY_4),
+	KEY(1, 1, KEY_5),
+	KEY(2, 1, KEY_6),
+	KEY(3, 1, KEY_F5),
+	KEY(0, 2, KEY_7),
+	KEY(1, 2, KEY_8),
+	KEY(2, 2, KEY_9),
+	KEY(3, 2, KEY_F6),
+	KEY(0, 3, KEY_F7),
+	KEY(1, 3, KEY_0),
+	KEY(2, 3, KEY_F8),
+	PERSISTENT_KEY(4, 5),
+	KEY(4, 4, KEY_VOLUMEUP),
+	KEY(5, 5, KEY_VOLUMEDOWN),
+	0
+};
+
+static struct twl4030_keypad_data ldp_kp_twl4030_data = {
+	.rows		= 6,
+	.cols		= 6,
+	.keymap		= ldp_twl4030_keymap,
+	.keymapsize	= ARRAY_SIZE(ldp_twl4030_keymap),
+	.rep		= 1,
+};
+
+static struct gpio_keys_button ldp_gpio_keys_buttons[] = {
+	[0] = {
+		.code			= KEY_ENTER,
+		.gpio			= 101,
+		.desc			= "enter sw",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[1] = {
+		.code			= KEY_F1,
+		.gpio			= 102,
+		.desc			= "func 1",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[2] = {
+		.code			= KEY_F2,
+		.gpio			= 103,
+		.desc			= "func 2",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[3] = {
+		.code			= KEY_F3,
+		.gpio			= 104,
+		.desc			= "func 3",
+		.active_low		= 1,
+		.debounce_interval 	= 30,
+	},
+	[4] = {
+		.code			= KEY_F4,
+		.gpio			= 105,
+		.desc			= "func 4",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[5] = {
+		.code			= KEY_LEFT,
+		.gpio			= 106,
+		.desc			= "left sw",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[6] = {
+		.code			= KEY_RIGHT,
+		.gpio			= 107,
+		.desc			= "right sw",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[7] = {
+		.code			= KEY_UP,
+		.gpio			= 108,
+		.desc			= "up sw",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+	[8] = {
+		.code			= KEY_DOWN,
+		.gpio			= 109,
+		.desc			= "down sw",
+		.active_low		= 1,
+		.debounce_interval	= 30,
+	},
+};
+
+static struct gpio_keys_platform_data ldp_gpio_keys = {
+	.buttons		= ldp_gpio_keys_buttons,
+	.nbuttons		= ARRAY_SIZE(ldp_gpio_keys_buttons),
+	.rep			= 1,
+};
+
+static struct platform_device ldp_gpio_keys_device = {
+	.name		= "gpio-keys",
+	.id		= -1,
+	.dev		= {
+		.platform_data	= &ldp_gpio_keys,
+	},
+};
+
+static int ts_gpio;
+
+/**
+ * @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
+ *
+ * @return - void. If request gpio fails then Flag KERN_ERR.
+ */
+static void ads7846_dev_init(void)
+{
+	if (gpio_request(ts_gpio, "ads7846 irq") < 0) {
+		printk(KERN_ERR "can't get ads746 pen down GPIO\n");
+		return;
+	}
+
+	gpio_direction_input(ts_gpio);
+	omap_set_gpio_debounce(ts_gpio, 1);
+	omap_set_gpio_debounce_time(ts_gpio, 0xa);
+}
+
+static int ads7846_get_pendown_state(void)
+{
+	return !gpio_get_value(ts_gpio);
+}
+
+static struct ads7846_platform_data tsc2046_config __initdata = {
+	.get_pendown_state	= ads7846_get_pendown_state,
+	.keep_vref_on		= 1,
+};
+
+static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
+	.turbo_mode	= 0,
+	.single_channel	= 1,	/* 0: slave, 1: master */
+};
+
+static struct spi_board_info ldp_spi_board_info[] __initdata = {
+	[0] = {
+		/*
+		 * TSC2046 operates at a max freqency of 2MHz, so
+		 * operate slightly below at 1.5MHz
+		 */
+		.modalias		= "ads7846",
+		.bus_num		= 1,
+		.chip_select		= 0,
+		.max_speed_hz		= 1500000,
+		.controller_data	= &tsc2046_mcspi_config,
+		.irq			= 0,
+		.platform_data		= &tsc2046_config,
+	},
+};
+
 static inline void __init ldp_init_smsc911x(void)
 {
 	int eth_cs;
@@ -132,18 +294,49 @@ static struct omap_board_config_kernel ldp_config[] __initdata = {
 	{ OMAP_TAG_LCD,		&ldp_lcd_config },
 };
 
+static struct twl4030_usb_data ldp_usb_data = {
+	.usb_mode	= T2_USB_MODE_ULPI,
+};
+
 static struct twl4030_gpio_platform_data ldp_gpio_data = {
 	.gpio_base	= OMAP_MAX_GPIO_LINES,
 	.irq_base	= TWL4030_GPIO_IRQ_BASE,
 	.irq_end	= TWL4030_GPIO_IRQ_END,
 };
 
+static struct twl4030_madc_platform_data ldp_madc_data = {
+	.irq_line	= 1,
+};
+
+static struct regulator_consumer_supply ldp_vmmc1_supply = {
+	.supply			= "vmmc",
+};
+
+/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
+static struct regulator_init_data ldp_vmmc1 = {
+	.constraints = {
+		.min_uV			= 1850000,
+		.max_uV			= 3150000,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
+					| REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies	= 1,
+	.consumer_supplies	= &ldp_vmmc1_supply,
+};
+
 static struct twl4030_platform_data ldp_twldata = {
 	.irq_base	= TWL4030_IRQ_BASE,
 	.irq_end	= TWL4030_IRQ_END,
 
 	/* platform_data for children goes here */
+	.madc		= &ldp_madc_data,
+	.usb		= &ldp_usb_data,
+	.vmmc1		= &ldp_vmmc1,
 	.gpio		= &ldp_gpio_data,
+	.keypad		= &ldp_kp_twl4030_data,
 };
 
 static struct i2c_board_info __initdata ldp_i2c_boardinfo[] = {
@@ -177,6 +370,7 @@ static struct twl4030_hsmmc_info mmc[] __initdata = {
 static struct platform_device *ldp_devices[] __initdata = {
 	&ldp_smsc911x_device,
 	&ldp_lcd_device,
+	&ldp_gpio_keys_device,
 };
 
 static void __init omap_ldp_init(void)
@@ -185,9 +379,17 @@ static void __init omap_ldp_init(void)
 	platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
 	omap_board_config = ldp_config;
 	omap_board_config_size = ARRAY_SIZE(ldp_config);
+	ts_gpio = 54;
+	ldp_spi_board_info[0].irq = gpio_to_irq(ts_gpio);
+	spi_register_board_info(ldp_spi_board_info,
+				ARRAY_SIZE(ldp_spi_board_info));
+	ads7846_dev_init();
 	omap_serial_init();
-	twl4030_mmc_init(mmc);
 	usb_musb_init();
+
+	twl4030_mmc_init(mmc);
+	/* link regulators to MMC adapters */
+	ldp_vmmc1_supply.dev = mmc[0].dev;
 }
 
 static void __init omap_ldp_map_io(void)
arch/arm/plat-omap/include/mach/keypad.h +4 -0
index 232923a..45ea3ae 100644
@@ -33,7 +33,11 @@ struct omap_kp_platform_data {
 #define GROUP_3		(3 << 16)
 #define GROUP_MASK	GROUP_3
 
+#define KEY_PERSISTENT		0x00800000
+#define KEYNUM_MASK		0x00EFFFFF
 #define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val))
+#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \
+						KEY_PERSISTENT)
 
 #endif
 
#8 lore raw

Re: [PATCH 6/6] ARM: OMAP3: Initialize more devices for LDP

Quoted 21 lines · Tony Lindgren
arch/arm/mach-omap2/board-ldp.c +12 -0
+static struct regulator_consumer_supply ldp_vmmc1_supply = {
+	.supply			= "vmmc",
+};
+
+/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
+static struct regulator_init_data ldp_vmmc1 = {
+	.consumer_supplies	= &ldp_vmmc1_supply,
+};
+
 static struct twl4030_platform_data ldp_twldata = {
+	.vmmc1		= &ldp_vmmc1,
 };
 
 static struct i2c_board_info __initdata ldp_i2c_boardinfo[] = {
@@ -185,9 +379,17 @@ static void __init omap_ldp_init(void)
 	platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
 	omap_board_config = ldp_config;
 	omap_board_config_size = ARRAY_SIZE(ldp_config);
+	ts_gpio = 54;
+	ldp_spi_board_info[0].irq = gpio_to_irq(ts_gpio);

arch/arm/mach-omap2/board-ldp.c static void __init omap_ldp_init(void) · line 392

Quoted 10 lines
arch/arm/mach-omap2/board-ldp.c +7 -1
+	spi_register_board_info(ldp_spi_board_info,
+				ARRAY_SIZE(ldp_spi_board_info));
+	ads7846_dev_init();
 	omap_serial_init();
-	twl4030_mmc_init(mmc);
 	usb_musb_init();
+
+	twl4030_mmc_init(mmc);
+	/* link regulators to MMC adapters */
+	ldp_vmmc1_supply.dev = mmc[0].dev;

This feels wrong - setup after registering devices. All it takes is to have to move various device drivers to be earlier in the initialization ordering and things start breaking in unexpected ways.

If MMC controls the Vmmc1 supply, then why does the Vmmc1 supply need the struct device pointer for the MMC controller?

#9 lore raw

Re: [PATCH 6/6] ARM: OMAP3: Initialize more devices for LDP

Quoted 11 lines · Russell King - ARM Linux

arch/arm/mach-omap2/board-ldp.c static void __init omap_ldp_init(void) · line 392

Quoted 2 lines · Tony Lindgren
arch/arm/mach-omap2/board-ldp.c +2 -0
+	/* link regulators to MMC adapters */
+	ldp_vmmc1_supply.dev = mmc[0].dev;

This feels wrong - setup after registering devices. All it takes is to have to move various device drivers to be earlier in the initialization ordering and things start breaking in unexpected ways.

If MMC controls the Vmmc1 supply, then why does the Vmmc1 supply need the struct device pointer for the MMC controller?

Like the clock API the regulator API looks up clients for regulators based on a combination of the struct device for the client driver and the name of the supply. Unfortunately with both the I2C and SPI APIs the struct device is only available once the driver has probed so this can't be set up with static data prior to probe, hence this sort of bodge.

Long term I think we'll want to fix I2C and SPI to let us have static data for this.

author maintainer Applied
#10 lore raw
In reply to Tony Lindgren
Quoted 5 lines · Tony Lindgren

Hi all,

Here are mostly omap3 specific updates for the coming merge window for review. Still to come few more boards and regulator framework changes for omap3 in one more series.

I've merged these into omap for-next branch.

Quoted 41 lines

Regards,

Tony

---

Imre Deak (1):
ARM: OMAP3: ZOOM MDK: Add FB support to board file

Paul Walmsley (2):
ARM: OMAP3: SDRC: add timing data for Qimonda HYB18M512160AF-6
ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6

Tony Lindgren (2):
ARM: OMAP3: Initialize more devices for LDP
ARM: OMAP2/3: Remove L4_WK_OMAP_BASE, L4_PER_OMAP_BASE, L4_EMU_BASE, L3_OMAP_BASE

Vikram Pandita (1):
ARM: OMAP2/3: Serial: Remove arch_initcall dependency

 arch/arm/mach-omap2/board-3430sdp.c                |    3 
 arch/arm/mach-omap2/board-ldp.c                    |  219 ++++++++++++++++++++
 arch/arm/mach-omap2/board-omap3beagle.c            |    4 
 arch/arm/mach-omap2/board-omap3pandora.c           |    3 
 arch/arm/mach-omap2/board-overo.c                  |    3 
 arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h  |   69 ++++++
 .../mach-omap2/sdram-qimonda-hyb18m512160af-6.h    |   54 +++++
 arch/arm/mach-omap2/serial.c                       |   22 +-
 arch/arm/plat-omap/include/mach/keypad.h           |    4 
 arch/arm/plat-omap/include/mach/omap34xx.h         |    4 
 10 files changed, 361 insertions(+), 24 deletions(-)
 create mode 100644 arch/arm/mach-omap2/sdram-micron-mt46h32m32lf-6.h
 create mode 100644 arch/arm/mach-omap2/sdram-qimonda-hyb18m512160af-6.h
Signature · 5 lines
Signature
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html