Skip to contentSkip to conversation

ARM:OMAP4 add Phytec phyCORE-OMAP4 board

PATCH Superseded Jan Weitzel 4 participants 34 messages Jul 8, 2011 – Jul 21, 2011

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

cover ARM:OMAP4 add Phytec phyCORE-OMAP4 board

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049. GPMC is used for the smsc911x. A gpmc clk fix is needed.

The lcd display "pd050vl1" for the generic_dpi_panel gets own patch.

Jan

Jan Weitzel (3):
ARM: OMAP4: Add pcm049 to Kconfig/Makefile
ARM: OMAP4: add pcm049 DEBUGLL
ARM: OMAP4: platformcode board-omap4pcm049.c

 arch/arm/mach-omap2/Kconfig                  |    5 +
 arch/arm/mach-omap2/Makefile                 |    4 +
 arch/arm/mach-omap2/board-omap4pcm049.c      |  728 ++++++++++++++++++++++++++
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 4 files changed, 738 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
#1 lore raw

PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile

---
 arch/arm/mach-omap2/Kconfig  |    5 +++++
 arch/arm/mach-omap2/Makefile |    4 ++++
 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +5 -0
index 19d5891..c6a2d43 100644
@@ -323,6 +323,11 @@ config MACH_OMAP4_PANDA
 	select OMAP_PACKAGE_CBS
 	select REGULATOR_FIXED_VOLTAGE
 
+config MACH_PCM049
+	bool "OMAP4 based phyCORE OMAP4"
+	depends on ARCH_OMAP4
+	select OMAP_PACKAGE_CBS
+
 config OMAP3_EMU
 	bool "OMAP3 debugging peripherals"
 	depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
index b148077..e81b594 100644
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \
+					   hsmmc.o \
+					   omap_phy_internal.o
+
 obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o \
 					   omap_phy_internal.o \
 
Signature · 1 line
1.7.0.4
#2 lore raw

PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile

Hello.

Quoted 10 lines · Jan Weitzel
---
  arch/arm/mach-omap2/Kconfig  |    5 +++++
  arch/arm/mach-omap2/Makefile |    4 ++++
  2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +0 -0
index 19d5891..c6a2d43 100644

[...]

arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 241

Quoted 9 lines
arch/arm/mach-omap2/Makefile +1 -0
index b148077..e81b594 100644
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
  					   hsmmc.o \
  					   omap_phy_internal.o
 
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \

You need to first add board-omap4pcm049.c, and only then wire it to the
Makefile. You could do both in onme patch though...

WBR, Sergei

maintainer
#3 lore raw

PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile

Quoted 23 lines · Sergei Shtylyov

Hello.

Quoted 10 lines · Jan Weitzel
---
 arch/arm/mach-omap2/Kconfig  |    5 +++++
 arch/arm/mach-omap2/Makefile |    4 ++++
 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +0 -0
index 19d5891..c6a2d43 100644

[...]

Quoted 8 lines
arch/arm/mach-omap2/Makefile +0 -0
index b148077..e81b594 100644
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
Quoted 4 lines

arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 241

Quoted 1 line
arch/arm/mach-omap2/Makefile +1 -0
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \

You need to first add board-omap4pcm049.c, and only then wire it
to the Makefile. You could do both in onme patch though...

Yes looks like this should be just one patch for everything.

Regards,

Tony

#4 lore raw

PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile

Hi Tony,

Quoted 24 lines · Tony Lindgren
Quoted 23 lines · Sergei Shtylyov

Hello.

Quoted 10 lines · Jan Weitzel
---
 arch/arm/mach-omap2/Kconfig  |    5 +++++
 arch/arm/mach-omap2/Makefile |    4 ++++
 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +0 -0
index 19d5891..c6a2d43 100644

[...]

Quoted 8 lines
arch/arm/mach-omap2/Makefile +0 -0
index b148077..e81b594 100644
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
Quoted 6 lines
Quoted 4 lines

arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 241

Quoted 1 line
arch/arm/mach-omap2/Makefile +1 -0
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \

You need to first add board-omap4pcm049.c, and only then wire it
to the Makefile. You could do both in onme patch though...

Yes looks like this should be just one patch for everything.

Are you or are you not taking now board files ? We have one which was left out due to a comment from Russell stating that no new board-files would be accepted until the move to device tree was completed [1]

[1] http://marc.info/?t=130199607500006&r=1&w=2

Signature · 8 lines
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110708/91a2ee02/attachment.sig>
maintainer
#5 lore raw

PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile

Quoted 4 lines · Felipe Balbi

Are you or are you not taking now board files ? We have one which was left out due to a comment from Russell stating that no new board-files would be accepted until the move to device tree was completed [1]

Well looking at the cumulative diffstats, adding these board files with about total of 1000 lines of addition would push our diffstat to positive side. And that's not a good sign of code coalescing.

So I'll carry the board files in testing-board until we have device tree working and won't need those.

Alternatively if somebody combines beagle variants to use board-beagle-common.c and board-panda-common.c then adding new boards would have minimal impact and would probably make device tree conversion of these boards easier too.

Regards,

Tony

Quoted 1 line

[1] http://marc.info/?t=130199607500006&r=1&w=2

maintainer
#6 lore raw

PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile

Quoted 5 lines · Tony Lindgren
Quoted 4 lines · Felipe Balbi

Are you or are you not taking now board files ? We have one which was left out due to a comment from Russell stating that no new board-files would be accepted until the move to device tree was completed [1]

For the mcop changes, that should be updated against current devel-board for the irq/timer/init_early changes. Then I can add that to testing-board too.

Tony

Quoted 1 line
Quoted 1 line

[1] http://marc.info/?t=130199607500006&r=1&w=2

#7 lore raw

PATCH v2 1/1 ARM:OMAP4 add Phytec phyCORE-OMAP4 board

In reply to Tony Lindgren

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.

---
v2:
join
ARM: OMAP4: Add pcm049 to Kconfig/Makefile
ARM: OMAP4: add pcm049 DEBUGLL
ARM: OMAP4: platformcode board-omap4pcm049.c

 arch/arm/mach-omap2/Kconfig                  |    5 +
 arch/arm/mach-omap2/Makefile                 |    4 +
 arch/arm/mach-omap2/board-omap4pcm049.c      |  728 ++++++++++++++++++++++++++
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 4 files changed, 738 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
arch/arm/mach-omap2/Kconfig +5 -0
index 19d5891..c6a2d43 100644
@@ -323,6 +323,11 @@ config MACH_OMAP4_PANDA
 	select OMAP_PACKAGE_CBS
 	select REGULATOR_FIXED_VOLTAGE
 
+config MACH_PCM049
+	bool "OMAP4 based phyCORE OMAP4"
+	depends on ARCH_OMAP4
+	select OMAP_PACKAGE_CBS
+
 config OMAP3_EMU
 	bool "OMAP3 debugging peripherals"
 	depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
index b148077..e81b594 100644
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \
+					   hsmmc.o \
+					   omap_phy_internal.o
+
 obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o \
 					   omap_phy_internal.o \
 
arch/arm/mach-omap2/board-omap4pcm049.c new file +728 -0

728 lines not on this page · raw message

arch/arm/plat-omap/include/plat/uncompress.h +1 -0
index ac4b60d..10507a6 100644
@@ -164,6 +164,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		/* omap4 based boards using UART3 */
 		DEBUG_LL_OMAP4(3, omap_4430sdp);
 		DEBUG_LL_OMAP4(3, omap4_panda);
+		DEBUG_LL_OMAP4(3, pcm049);
 
 		/* zoom2/3 external uart */
 		DEBUG_LL_ZOOM(omap_zoom2);
Signature · 1 line
1.7.0.4
maintainer
#8 lore raw

PATCH v2 1/1 ARM:OMAP4 add Phytec phyCORE-OMAP4 board

Quoted 1 line · Jan Weitzel

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.

I've updated this for the TWL cleanup, that left out about 150 LOC. Will apply to board-part-2 branch.

Jan, can you please check?

Regards,

Tony

From: Jan Weitzel <[email protected]>
Date: Wed, 13 Jul 2011 00:58:26 -0700
Subject: [PATCH] ARM:OMAP4 add Phytec phyCORE-OMAP4 board

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.

[tony at atomide.com: updated for timer and twl cleanup, and to select the board by default]
arch/arm/mach-omap2/Kconfig +6 -0
index 6b88799..d5e4b60 100644
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA
 	select OMAP_PACKAGE_CBS
 	select REGULATOR_FIXED_VOLTAGE
 
+config MACH_PCM049
+	bool "OMAP4 based phyCORE OMAP4"
+	depends on ARCH_OMAP4
+	default y
+	select OMAP_PACKAGE_CBS
+
 config OMAP3_EMU
 	bool "OMAP3 debugging peripherals"
 	depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
index 2d4d18e..7494b04 100644
@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \
+					   hsmmc.o \
+					   omap_phy_internal.o
+
 obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o \
 					   omap_phy_internal.o \
 
arch/arm/mach-omap2/board-omap4pcm049.c new file +602 -0

602 lines not on this page · raw message

arch/arm/plat-omap/include/plat/uncompress.h +1 -0
index 2b71b17..cb4a6c2 100644
@@ -166,6 +166,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		/* omap4 based boards using UART3 */
 		DEBUG_LL_OMAP4(3, omap_4430sdp);
 		DEBUG_LL_OMAP4(3, omap4_panda);
+		DEBUG_LL_OMAP4(3, pcm049);
 
 		/* zoom2/3 external uart */
 		DEBUG_LL_ZOOM(omap_zoom2);
#9 lore raw

PATCH v2 1/1 ARM:OMAP4 add Phytec phyCORE-OMAP4 board

Am Mittwoch, den 13.07.2011, 01:03 -0700 schrieb Tony Lindgren:

Quoted 7 lines · Jan Weitzel
Quoted 1 line

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.

I've updated this for the TWL cleanup, that left out about 150 LOC. Will apply to board-part-2 branch.

Jan, can you please check?

works fine for me. I see vusim is not used in our board. I will send a patch to remove it also.

Jan

Quoted 671 lines

Regards,

Tony

From: Jan Weitzel <[email protected]>
Date: Wed, 13 Jul 2011 00:58:26 -0700
Subject: [PATCH] ARM:OMAP4 add Phytec phyCORE-OMAP4 board

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.

[tony at atomide.com: updated for timer and twl cleanup, and to select the board by default]
arch/arm/mach-omap2/Kconfig +6 -0
index 6b88799..d5e4b60 100644
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA
 	select OMAP_PACKAGE_CBS
 	select REGULATOR_FIXED_VOLTAGE
 
+config MACH_PCM049
+	bool "OMAP4 based phyCORE OMAP4"
+	depends on ARCH_OMAP4
+	default y
+	select OMAP_PACKAGE_CBS
+
 config OMAP3_EMU
 	bool "OMAP3 debugging peripherals"
 	depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
index 2d4d18e..7494b04 100644
@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
+obj-$(CONFIG_MACH_PCM049)		+= board-omap4pcm049.o \
+					   hsmmc.o \
+					   omap_phy_internal.o
+
 obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o \
 					   omap_phy_internal.o \
 
arch/arm/mach-omap2/board-omap4pcm049.c new file +602 -0
new file mode 100644
index 0000000..ad8cb46
@@ -0,0 +1,602 @@
+/*
+ * Board support file for Phytec phyCORE-OMAP4 Board.
+ *
+ * Copyright (C) 2011 Phytec Messtechnik GmbH
+ *
+ * Author: Jan Weitzel <[email protected]>
+ *
+ * Based on mach-omap2/board-omap4panda.c
+ *
+ * Author: David Anders <[email protected]>
+ *
+ * Author: Santosh Shilimkar <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/leds.h>
+#include <linux/gpio.h>
+#include <linux/usb/otg.h>
+#include <linux/i2c/twl.h>
+#include <linux/i2c/at24.h>
+#include <linux/mfd/stmpe.h>
+#include <linux/leds-pca9532.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/fixed.h>
+#include <linux/smsc911x.h>
+
+#include <mach/hardware.h>
+#include <mach/omap4-common.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <video/omapdss.h>
+
+#include <plat/board.h>
+#include <plat/common.h>
+#include <plat/usb.h>
+#include <plat/gpmc.h>
+#include <plat/gpmc-smsc911x.h>
+#include <plat/mmc.h>
+#include <video/omap-panel-generic-dpi.h>
+
+#include "hsmmc.h"
+#include "control.h"
+#include "mux.h"
+#include "common-board-devices.h"
+
+#define OMAP4_PCM049_ETH_GPIO_IRQ	121
+#define OMAP4_PCM049_ETH_CS		5
+#define OMAP4_PCM049_STMPE811_GPIO_IRQ	117
+#define OMAP4_PCM049_LCD_ENABLE		118
+
+static struct gpio_led gpio_leds[] = {
+	{
+		.name			= "modul:red:status1",
+		.default_trigger	= "heartbeat",
+		.gpio			= 152,
+	},
+	{
+		.name			= "modul:green:status2",
+		.default_trigger	= "mmc0",
+		.gpio			= 153,
+	},
+};
+
+static struct gpio_led_platform_data gpio_led_info = {
+	.leds		= gpio_leds,
+	.num_leds	= ARRAY_SIZE(gpio_leds),
+};
+
+static struct platform_device leds_gpio = {
+	.name	= "leds-gpio",
+	.id	= -1,
+	.dev	= {
+		.platform_data	= &gpio_led_info,
+	},
+};
+
+static void __init pcm049_init_early(void)
+{
+	omap2_init_common_infrastructure();
+	omap2_init_common_devices(NULL, NULL);
+}
+
+static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
+	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
+	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
+	.phy_reset  = false,
+	.reset_gpio_port[0]  = -EINVAL,
+	.reset_gpio_port[1]  = -EINVAL,
+	.reset_gpio_port[2]  = -EINVAL
+};
+
+static void __init omap4_ehci_init(void)
+{
+	struct clk *phy_ref_clk;
+	/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
+	phy_ref_clk = clk_get(NULL, "auxclk3_ck");
+	if (IS_ERR(phy_ref_clk)) {
+		pr_err("Cannot request auxclk3\n");
+		return;
+	}
+	clk_set_rate(phy_ref_clk, 19200000);
+	clk_enable(phy_ref_clk);
+
+	usbhs_init(&usbhs_bdata);
+	return;
+}
+
+static struct omap_musb_board_data musb_board_data = {
+	.interface_type		= MUSB_INTERFACE_UTMI,
+	.mode			= MUSB_OTG,
+	.power			= 100,
+};
+
+static struct omap2_hsmmc_info mmc[] = {
+	{
+		.mmc		= 1,
+		.caps		= MMC_CAP_4_BIT_DATA,
+		.gpio_wp	= -EINVAL,
+		.gpio_cd	= -EINVAL,
+	}, {
+		.mmc		= 5,
+		.caps		= MMC_CAP_4_BIT_DATA,
+		.gpio_wp	= -EINVAL,
+		.gpio_cd	= 30,	/* wk30 */
+		.ocr_mask	= MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */
+	}, {}	/* Terminator */
+};
+
+#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
+static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
+	.cs             = OMAP4_PCM049_ETH_CS,
+	.gpio_irq       = OMAP4_PCM049_ETH_GPIO_IRQ,
+	.gpio_reset     = -EINVAL,
+	.flags          = SMSC911X_USE_16BIT,
+};
+
+static inline void __init pcm049_init_smsc911x(void)
+{
+	omap_mux_init_gpio(OMAP4_PCM049_ETH_GPIO_IRQ, OMAP_PIN_INPUT);
+	gpmc_smsc911x_init(&board_smsc911x_data);
+}
+#else
+static inline void __init pcm049_init_smsc911x(void) { return; }
+#endif
+
+static int omap4_twl6030_hsmmc_late_init(struct device *dev)
+{
+	int ret = 0;
+	struct platform_device *pdev = container_of(dev,
+				struct platform_device, dev);
+	struct omap_mmc_platform_data *pdata = dev->platform_data;
+
+	/* Setting MMC1 Card detect Irq */
+	if (pdev->id == 0) {
+		ret = twl6030_mmc_card_detect_config();
+		if (ret)
+			dev_err(dev, "%s: Error card detect config(%d)\n",
+				__func__, ret);
+		pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
+						MMCDETECT_INTR_OFFSET;
+		pdata->slots[0].card_detect = twl6030_mmc_card_detect;
+	}
+	return ret;
+}
+
+static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)
+{
+	struct omap_mmc_platform_data *pdata;
+
+	/* dev can be null if CONFIG_MMC_OMAP_HS is not set */
+	if (!dev) {
+		pr_err("Failed omap4_twl6030_hsmmc_set_late_init\n");
+		return;
+	}
+	pdata = dev->platform_data;
+
+	pdata->init =	omap4_twl6030_hsmmc_late_init;
+}
+
+static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
+{
+	struct omap2_hsmmc_info *c;
+
+	omap2_hsmmc_init(controllers);
+	for (c = controllers; c->mmc; c++)
+		omap4_twl6030_hsmmc_set_late_init(c->dev);
+
+	return 0;
+}
+
+/* Fixed regulator for max1027 */
+static struct regulator_consumer_supply pcm049_vcc_3v3_consumer_supply[] = {
+	REGULATOR_SUPPLY("vcc", "4-0064"),
+};
+
+struct regulator_init_data pcm049_vcc_3v3_initdata = {
+	.consumer_supplies = pcm049_vcc_3v3_consumer_supply,
+	.num_consumer_supplies = ARRAY_SIZE(pcm049_vcc_3v3_consumer_supply),
+	.constraints = {
+		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct fixed_voltage_config pcm049_vcc_3v3_config = {
+	.supply_name		= "pcm049_vcc_3v3",
+	.microvolts		= 3300000,
+	.gpio			= -EINVAL,
+	.enabled_at_boot	= 1,
+	.init_data		= &pcm049_vcc_3v3_initdata,
+};
+
+static struct platform_device pcm049_vcc_3v3_device = {
+	.name	= "reg-fixed-voltage",
+	.id	= 0,
+	.dev	= {
+		.platform_data = &pcm049_vcc_3v3_config,
+	},
+};
+
+static struct regulator_init_data pcm049_vusim = {
+	.constraints = {
+		.min_uV			= 1800000,
+		.max_uV			= 3300000,
+		.apply_uV		= true,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 =	REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct at24_platform_data board_eeprom = {
+	.byte_len = 4096,
+	.page_size = 32,
+	.flags = AT24_FLAG_ADDR16,
+};
+
+static struct stmpe_gpio_platform_data pba_gpio_stm_data = {
+	.gpio_base = -1,
+	.norequest_mask = STMPE_GPIO_NOREQ_811_TOUCH,
+};
+
+static struct stmpe_ts_platform_data pba_ts_stm_pdata = {
+	.sample_time = 4,
+	.mod_12b = 1,
+	.ref_sel = 0,
+	.adc_freq = 1,
+	.ave_ctrl = 3,
+	.touch_det_delay = 3,
+	.settling = 3,
+	.fraction_z = 7,
+	.i_drive = 0,
+};
+
+static struct stmpe_platform_data pba_stm_pdata = {
+	.blocks = STMPE_BLOCK_GPIO | STMPE_BLOCK_TOUCHSCREEN,
+	.irq_base = TWL6030_IRQ_END,
+	.irq_trigger = IRQF_TRIGGER_RISING,
+	.irq_invert_polarity = true,
+	.gpio = &pba_gpio_stm_data,
+	.ts = &pba_ts_stm_pdata,
+};
+
+static struct pca9532_platform_data pba_pca9532 = {
+	.leds = {
+		{
+			.name = "board:red:free_use1",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		}, {
+			.name = "board:yellow:free_use2",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		}, {
+			.name = "board:yellow:free_use3",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		}, {
+			.name = "board:green:free_use4",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		},
+	},
+	.psc = { 1, 1 },
+	.pwm = { 1, 1 },
+};
+
+static struct i2c_board_info __initdata pcm049_i2c_1_boardinfo[] = {
+	{
+		I2C_BOARD_INFO("at24", 0x57), /* E0=1, E1=1, E2=1 */
+		.platform_data = &board_eeprom,
+	},
+};
+
+static struct i2c_board_info __initdata pcm049_i2c_3_boardinfo[] = {
+};
+
+static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = {
+	{
+		I2C_BOARD_INFO("stmpe811", 0x41),	/* Touch controller */
+		.irq = OMAP_GPIO_IRQ(OMAP4_PCM049_STMPE811_GPIO_IRQ),
+		.platform_data = &pba_stm_pdata,
+	}, {
+		I2C_BOARD_INFO("max1037", 0x64),	/* A/D converter */
+	}, {
+		I2C_BOARD_INFO("pca9533", 0x62),	/* Leds pca9533 */
+		.platform_data = &pba_pca9532,
+	}
+};
+
+static struct twl4030_platform_data pcm049_twldata = {
+	.vusim		= &pcm049_vusim,
+};
+
+static int __init pcm049_i2c_init(void)
+{
+	/* I2C1 */
+	omap4_pmic_get_config(&pcm049_twldata, TWL_COMMON_PDATA_USB,
+			TWL_COMMON_REGULATOR_VDAC |
+			TWL_COMMON_REGULATOR_VAUX2 |
+			TWL_COMMON_REGULATOR_VAUX3 |
+			TWL_COMMON_REGULATOR_VMMC |
+			TWL_COMMON_REGULATOR_VPP |
+			TWL_COMMON_REGULATOR_VANA |
+			TWL_COMMON_REGULATOR_VCXIO |
+			TWL_COMMON_REGULATOR_VUSB |
+			TWL_COMMON_REGULATOR_CLK32KG);
+	omap4_pmic_init("twl6030", &pcm049_twldata);
+	i2c_register_board_info(1, pcm049_i2c_1_boardinfo,
+				ARRAY_SIZE(pcm049_i2c_1_boardinfo));
+
+	/* I2C3 */
+	omap_register_i2c_bus(3, 400, pcm049_i2c_3_boardinfo,
+				ARRAY_SIZE(pcm049_i2c_3_boardinfo));
+
+	/* I2C4 */
+	if (omap_mux_init_gpio(OMAP4_PCM049_STMPE811_GPIO_IRQ, OMAP_PIN_INPUT))
+		printk(KERN_ERR "Failed to mux GPIO%d for STMPE811 IRQ\n",
+			OMAP4_PCM049_STMPE811_GPIO_IRQ);
+	else if (gpio_request(OMAP4_PCM049_STMPE811_GPIO_IRQ, "STMPE811 irq"))
+		printk(KERN_ERR "Failed to request GPIO%d for STMPE811 IRQ\n",
+			OMAP4_PCM049_STMPE811_GPIO_IRQ);
+	else
+		gpio_direction_input(OMAP4_PCM049_STMPE811_GPIO_IRQ);
+
+	omap_register_i2c_bus(4, 400, pcm049_i2c_4_boardinfo,
+				ARRAY_SIZE(pcm049_i2c_4_boardinfo));
+	return 0;
+}
+
+#ifdef CONFIG_OMAP_MUX
+static struct omap_board_mux board_mux[] __initdata = {
+	OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+
+	/* dispc2_data23 */
+	OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data22 */
+	OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data21 */
+	OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data20 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data19 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data18 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data15 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data14 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data13 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data12 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data11 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data10 */
+	OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data9 */
+	OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data16 */
+	OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data17 */
+	OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_hsync */
+	OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_pclk */
+	OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_vsync */
+	OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_de */
+	OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data8 */
+	OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data7 */
+	OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data6 */
+	OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data5 */
+	OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data4 */
+	OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data3 */
+	OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data2 */
+	OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data1 */
+	OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data0 */
+	OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+
+	{ .reg_offset = OMAP_MUX_TERMINATOR },
+};
+
+static struct omap_device_pad serial2_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart2_cts.uart2_cts",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_rts.uart2_rts",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_rx.uart2_rx",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_tx.uart2_tx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_device_pad serial3_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
+			 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_board_data serial2_data __initdata = {
+	.id             = 1,
+	.pads           = serial2_pads,
+	.pads_cnt       = ARRAY_SIZE(serial2_pads),
+};
+
+static struct omap_board_data serial3_data __initdata = {
+	.id             = 2,
+	.pads           = serial3_pads,
+	.pads_cnt       = ARRAY_SIZE(serial3_pads),
+};
+
+static inline void board_serial_init(void)
+{
+	omap_serial_init_port(&serial2_data);
+	omap_serial_init_port(&serial3_data);
+}
+#else
+#define board_mux	NULL
+
+static inline void board_serial_init(void)
+{
+	omap_serial_init();
+}
+#endif
+
+/* Display */
+static int pcm049_panel_enable_lcd(struct omap_dss_device *dssdev)
+{
+	return gpio_direction_output(OMAP4_PCM049_LCD_ENABLE, 1);
+}
+
+static void pcm049_panel_disable_lcd(struct omap_dss_device *dssdev)
+{
+	gpio_direction_output(OMAP4_PCM049_LCD_ENABLE, 0);
+	return;
+}
+
+/* Using generic display panel */
+static struct panel_generic_dpi_data omap4_dpi_panel = {
+	.name			= "pd050vl1",
+	.platform_enable	= pcm049_panel_enable_lcd,
+	.platform_disable	= pcm049_panel_disable_lcd,
+};
+
+struct omap_dss_device pcm049_dpi_device = {
+	.type			= OMAP_DISPLAY_TYPE_DPI,
+	.name			= "dpi",
+	.driver_name		= "generic_dpi_panel",
+	.data			= &omap4_dpi_panel,
+	.phy.dpi.data_lines	= 24,
+	.channel		= OMAP_DSS_CHANNEL_LCD2,
+};
+
+static void pcm049_dvi_mux_init(void)
+{
+	/* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
+	omap_mux_init_signal("hdmi_hpd",
+			OMAP_PIN_INPUT_PULLUP);
+	omap_mux_init_signal("hdmi_cec",
+			OMAP_PIN_INPUT_PULLUP);
+	/* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
+	omap_mux_init_signal("hdmi_ddc_scl",
+			OMAP_PIN_INPUT_PULLUP);
+	omap_mux_init_signal("hdmi_ddc_sda",
+			OMAP_PIN_INPUT_PULLUP);
+}
+
+static struct omap_dss_device  pcm049_dvi_device = {
+	.name = "dvi",
+	.driver_name = "hdmi_panel",
+	.type = OMAP_DISPLAY_TYPE_HDMI,
+	.clocks	= {
+		.dispc	= {
+			.dispc_fclk_src	= OMAP_DSS_CLK_SRC_FCK,
+		},
+		.hdmi	= {
+			.regn	= 15,
+			.regm2	= 1,
+		},
+	},
+	.channel = OMAP_DSS_CHANNEL_DIGIT,
+};
+
+static struct omap_dss_device *pcm049_dss_devices[] = {
+	&pcm049_dpi_device,
+	&pcm049_dvi_device,
+};
+
+static struct omap_dss_board_info pcm049_dss_data = {
+	.num_devices	= ARRAY_SIZE(pcm049_dss_devices),
+	.devices	= pcm049_dss_devices,
+	.default_device = &pcm049_dpi_device,
+};
+
+void pcm049_display_init(void)
+{
+	omap_mux_init_gpio(OMAP4_PCM049_LCD_ENABLE, OMAP_PIN_OUTPUT);
+
+	if ((gpio_request(OMAP4_PCM049_LCD_ENABLE, "DISP_ENA") == 0) &&
+		(gpio_direction_output(OMAP4_PCM049_LCD_ENABLE, 1) == 0)) {
+		gpio_export(OMAP4_PCM049_LCD_ENABLE, 0);
+		gpio_set_value(OMAP4_PCM049_LCD_ENABLE, 0);
+	} else
+		printk(KERN_ERR "could not obtain gpio for DISP_ENA");
+	pcm049_dvi_mux_init();
+	omap_display_init(&pcm049_dss_data);
+}
+
+static struct platform_device *pcm049_devices[] __initdata = {
+	&pcm049_vcc_3v3_device,
+	&leds_gpio,
+};
+
+#define	TWL_PHOENIX_DEV_ON	0x25
+
+static void pcm049_power_off(void)
+{
+	printk(KERN_INFO "Goodbye phyCORE OMAP4!\n");
+	twl_i2c_write_u8(TWL6030_MODULE_ID0, 0x7, TWL_PHOENIX_DEV_ON);
+}
+
+
+static void __init pcm049_init(void)
+{
+	pm_power_off = pcm049_power_off;
+	omap4_mux_init(board_mux, NULL, OMAP_PACKAGE_CBS);
+	pcm049_init_smsc911x();
+	pcm049_i2c_init();
+	platform_add_devices(pcm049_devices, ARRAY_SIZE(pcm049_devices));
+	board_serial_init();
+	omap4_twl6030_hsmmc_init(mmc);
+	omap4_ehci_init();
+	usb_musb_init(&musb_board_data);
+	pcm049_display_init();
+}
+
+static void __init pcm049_map_io(void)
+{
+	omap2_set_globals_443x();
+	omap44xx_map_common_io();
+}
+
+MACHINE_START(PCM049, "phyCORE OMAP4")
+	/* Maintainer: Jan Weitzel - Phytec Messtechnik GmbH */
+	.boot_params	= 0x80000100,
+	.reserve	= omap_reserve,
+	.map_io		= pcm049_map_io,
+	.init_early	= pcm049_init_early,
+	.init_irq	= gic_init_irq,
+	.init_machine	= pcm049_init,
+	.timer		= &omap4_timer,
+MACHINE_END
arch/arm/plat-omap/include/plat/uncompress.h +1 -1
index 2b71b17..cb4a6c2 100644
@@ -166,6 +166,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		/* omap4 based boards using UART3 */
 		DEBUG_LL_OMAP4(3, omap_4430sdp);
 		DEBUG_LL_OMAP4(3, omap4_panda);
+		DEBUG_LL_OMAP4(3, pcm049);
 
 		/* zoom2/3 external uart */
 		DEBUG_LL_ZOOM(omap_zoom2);
--

To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html

#10 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

vusim is not used.

---
 arch/arm/mach-omap2/board-omap4pcm049.c |   16 +---------------
 1 files changed, 1 insertions(+), 15 deletions(-)
arch/arm/mach-omap2/board-omap4pcm049.c +1 -15
index ad8cb46..85193ec 100644
@@ -227,18 +227,6 @@ static struct platform_device pcm049_vcc_3v3_device = {
 	},
 };
 
-static struct regulator_init_data pcm049_vusim = {
-	.constraints = {
-		.min_uV			= 1800000,
-		.max_uV			= 3300000,
-		.apply_uV		= true,
-		.valid_modes_mask	= REGULATOR_MODE_NORMAL
-					| REGULATOR_MODE_STANDBY,
-		.valid_ops_mask	 =	REGULATOR_CHANGE_MODE
-					| REGULATOR_CHANGE_STATUS,
-	},
-};
-
 static struct at24_platform_data board_eeprom = {
 	.byte_len = 4096,
 	.page_size = 32,
@@ -318,9 +306,7 @@ static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = {
 	}
 };
 
-static struct twl4030_platform_data pcm049_twldata = {
-	.vusim		= &pcm049_vusim,
-};
+static struct twl4030_platform_data pcm049_twldatai;
 
 static int __init pcm049_i2c_init(void)
 {
Signature · 1 line
1.7.0.4
#11 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Hello.

Quoted 11 lines · Jan Weitzel

vusim is not used.

---
  arch/arm/mach-omap2/board-omap4pcm049.c |   16 +---------------
  1 files changed, 1 insertions(+), 15 deletions(-)
arch/arm/mach-omap2/board-omap4pcm049.c +0 -0
index ad8cb46..85193ec 100644

[...]

arch/arm/mach-omap2/board-omap4pcm049.c static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { · line 309

Quoted 8 lines
arch/arm/mach-omap2/board-omap4pcm049.c +1 -3
@@ -318,9 +306,7 @@ static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = {
  	}
  };
 
-static struct twl4030_platform_data pcm049_twldata = {
-	.vusim		=&pcm049_vusim,
-};
+static struct twl4030_platform_data pcm049_twldatai;

Have you added that 'i' at the end intentionally?

WBR, Sergei

#12 lore raw

PATCH v2 1/1 ARM: OMAP4: PCM049: remove vusim regulator

vusim is not used.

---
v2:
fix typing error

 arch/arm/mach-omap2/board-omap4pcm049.c |   16 +---------------
 1 files changed, 1 insertions(+), 15 deletions(-)
arch/arm/mach-omap2/board-omap4pcm049.c +1 -15
index ad8cb46..707929d 100644
@@ -227,18 +227,6 @@ static struct platform_device pcm049_vcc_3v3_device = {
 	},
 };
 
-static struct regulator_init_data pcm049_vusim = {
-	.constraints = {
-		.min_uV			= 1800000,
-		.max_uV			= 3300000,
-		.apply_uV		= true,
-		.valid_modes_mask	= REGULATOR_MODE_NORMAL
-					| REGULATOR_MODE_STANDBY,
-		.valid_ops_mask	 =	REGULATOR_CHANGE_MODE
-					| REGULATOR_CHANGE_STATUS,
-	},
-};
-
 static struct at24_platform_data board_eeprom = {
 	.byte_len = 4096,
 	.page_size = 32,
@@ -318,9 +306,7 @@ static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = {
 	}
 };
 
-static struct twl4030_platform_data pcm049_twldata = {
-	.vusim		= &pcm049_vusim,
-};
+static struct twl4030_platform_data pcm049_twldata;
 
 static int __init pcm049_i2c_init(void)
 {
Signature · 1 line
1.7.0.4
#13 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

In reply to Sergei Shtylyov

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Thank you. It was a tribute to vim.

Jan

maintainer
#14 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Quoted 6 lines · Jan Weitzel

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Thank you. It was a tribute to vim.

:i)

I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.

Tony

#15 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:

Quoted 6 lines · Jan Weitzel
Quoted 5 lines

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Quoted 7 lines
Quoted 1 line

Thank you. It was a tribute to vim.

:i)

I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.

So there is no way to get the board mainline yet?

Jan

Quoted 6 lines

Tony

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

maintainer
#16 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Quoted 9 lines · Jan Weitzel

Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:

Quoted 8 lines · Jan Weitzel
Quoted 6 lines

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Thank you. It was a tribute to vim.

Quoted 7 lines
Quoted 5 lines

:i)

I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.

So there is no way to get the board mainline yet?

Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.

It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.

Adding the pending boards without combining code would be adding code that will be going away for most part with the device tree support.

And most likely the beagle and panda based boards will be the first ones to work with device tree. So anything we can do to have common board init code will also help with this effort.

Regards,

Tony

#17 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Hi,

Quoted 18 lines · Tony Lindgren
Quoted 9 lines · Jan Weitzel

Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:

Quoted 8 lines · Jan Weitzel
Quoted 6 lines

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Thank you. It was a tribute to vim.

Quoted 7 lines
Quoted 5 lines

:i)

I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.

So there is no way to get the board mainline yet?

Quoted 8 lines

Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.

It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.

isn't it easier than to just add a few if (machine_is_xxxx()) checks and another MACHINE_START() to board-omap4panda.c rather than creating a new file, shuffling code around and then adding a new board file ??

Signature · 8 lines
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110715/125881cc/attachment-0001.sig>
maintainer
#18 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Quoted 26 lines · Felipe Balbi

Hi,

Quoted 23 lines · Tony Lindgren
Quoted 9 lines · Jan Weitzel

Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:

Quoted 8 lines · Jan Weitzel
Quoted 6 lines

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Thank you. It was a tribute to vim.

Quoted 7 lines
Quoted 5 lines

:i)

I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.

So there is no way to get the board mainline yet?

Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.

Quoted 7 lines
Quoted 3 lines

It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.

isn't it easier than to just add a few if (machine_is_xxxx()) checks and another MACHINE_START() to board-omap4panda.c rather than creating a new file, shuffling code around and then adding a new board file ??

That works too if the init_machine does not get too complicated.

Regards,

Tony

#19 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Hi,

Quoted 31 lines · Tony Lindgren
Quoted 30 lines · Felipe Balbi

Hi,

Quoted 26 lines · Tony Lindgren
Quoted 9 lines · Jan Weitzel

Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:

Quoted 8 lines · Jan Weitzel
Quoted 6 lines

Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:

Quoted 3 lines

Have you added that 'i' at the end intentionally?

Thank you. It was a tribute to vim.

Quoted 7 lines
Quoted 5 lines

:i)

I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.

So there is no way to get the board mainline yet?

Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.

It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.

Quoted 5 lines
Quoted 3 lines

isn't it easier than to just add a few if (machine_is_xxxx()) checks and another MACHINE_START() to board-omap4panda.c rather than creating a new file, shuffling code around and then adding a new board file ??

That works too if the init_machine does not get too complicated.

possibly something like this (still missing MACHINE_START a few more things):

arch/arm/mach-omap2/board-omap4panda.c +27 -3
index 0cfe200..dff174c 100644
@@ -681,20 +681,44 @@ void omap4_panda_display_init(void)
        omap_display_init(&omap4_panda_dss_data);
 }
 
+static struct omap_smsc911x_platform_data board_smsc911x_data __initdata = {
+       .cs             = OMAP4_SMSC911X_ETH_CS,
+       .gpio_irq       = OMAP4_SMSC911X_ETH_GPIO_IRQ,
+       .gpio_reset     = -EINVAL,
+       .flags          = SMSC911X_USE_16BIT,
+};
+
+static void __init omap4_panda_smsc91xx_init(void)
+{
+       if (!machine_is_pcm049())
+               return;
+
+       omap_mux_init_gpio(OMAP4_PCM049_ETH_GPIO_IRQ, OMAP_PIN_INPUT);
+       gpmc_smsc911x_init(&board_smsc911x_data);
+}
+
 static void __init omap4_panda_init(void)
 {
        int package = OMAP_PACKAGE_CBS;
 
        if (omap_rev() == OMAP4430_REV_ES1_0)
                package = OMAP_PACKAGE_CBL;
+
        omap4_mux_init(board_mux, NULL, package);
 
-       if (wl12xx_set_platform_data(&omap_panda_wlan_data))
-               pr_err("error setting wl12xx data\n");
+       if (machine_is_omap4panda()) {
+               int             ret;
+
+               ret = wl12xx_set_platform_data(&omap_panda_wlan_data);
+               if (ret)
+                       pr_err("error setting wl12xx data\n");
+
+               platform_device_register(&omap_vwlan_device);
+       }
 
+       omap4_panda_smsc91xx_init();
        omap4_panda_i2c_init();
        platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
-       platform_device_register(&omap_vwlan_device);
        board_serial_init();
        omap4_twl6030_hsmmc_init(mmc);
 
Signature · 8 lines
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110715/d0fbe0d4/attachment.sig>
maintainer
#20 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Quoted 3 lines · Felipe Balbi

possibly something like this (still missing MACHINE_START a few more things):

Yes and it would be better to initialize data in the .init_machine to avoid adding machine_is tests in multiple places.

Quoted 41 lines
arch/arm/mach-omap2/board-omap4panda.c +23 -2
index 0cfe200..dff174c 100644
@@ -681,20 +681,44 @@ void omap4_panda_display_init(void)
        omap_display_init(&omap4_panda_dss_data);
 }
 
+static struct omap_smsc911x_platform_data board_smsc911x_data __initdata = {
+       .cs             = OMAP4_SMSC911X_ETH_CS,
+       .gpio_irq       = OMAP4_SMSC911X_ETH_GPIO_IRQ,
+       .gpio_reset     = -EINVAL,
+       .flags          = SMSC911X_USE_16BIT,
+};
+
+static void __init omap4_panda_smsc91xx_init(void)
+{
+       if (!machine_is_pcm049())
+               return;
+
+       omap_mux_init_gpio(OMAP4_PCM049_ETH_GPIO_IRQ, OMAP_PIN_INPUT);
+       gpmc_smsc911x_init(&board_smsc911x_data);
+}
+
 static void __init omap4_panda_init(void)
 {
        int package = OMAP_PACKAGE_CBS;
 
        if (omap_rev() == OMAP4430_REV_ES1_0)
                package = OMAP_PACKAGE_CBL;
+
        omap4_mux_init(board_mux, NULL, package);
 
-       if (wl12xx_set_platform_data(&omap_panda_wlan_data))
-               pr_err("error setting wl12xx data\n");
+       if (machine_is_omap4panda()) {
+               int             ret;
+
+               ret = wl12xx_set_platform_data(&omap_panda_wlan_data);
+               if (ret)
+                       pr_err("error setting wl12xx data\n");

arch/arm/mach-omap2/board-omap4panda.c void omap4_panda_display_init(void) · line 723

Quoted 10 lines
arch/arm/mach-omap2/board-omap4panda.c +4 -1
+
+               platform_device_register(&omap_vwlan_device);
+       }
 
+       omap4_panda_smsc91xx_init();
        omap4_panda_i2c_init();
        platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
-       platform_device_register(&omap_vwlan_device);
        board_serial_init();
        omap4_twl6030_hsmmc_init(mmc);

So we sould have panda_common_init() and then omap4_panda_init() and omap4_phycore_init() or something like that. No need for machine_is tests then as the .machine_init already takes care of that test.

Regards,

Tony

#21 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

In reply to Tony Lindgren

Am Freitag, den 15.07.2011, 00:50 -0700 schrieb Tony Lindgren:

Quoted 12 lines

Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.

It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.

Adding the pending boards without combining code would be adding code that will be going away for most part with the device tree support.

Quoted 7 lines

And most likely the beagle and panda based boards will be the first ones to work with device tree. So anything we can do to have common board init code will also help with this effort.

Regards,

Tony

pcm049 and panda board have some more different devices.
I am working on patches to add NAND support and using tlv320aic3x audio codec which need regulators in platformcode. I need a hack to controll usb otg by gpio (controlling a external power circuit). The patches are not mainline ready by now.
If using machine_is_xxxx() in board-omap4panda.c then also is good way, I could provide our board as patches on top of board-omap4panda.c. When will pandaboard use device tree to boot?

Kind Regards,
Jan

maintainer
#22 lore raw

PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator

Quoted 17 lines · Jan Weitzel

Am Freitag, den 15.07.2011, 00:50 -0700 schrieb Tony Lindgren:

Quoted 16 lines

Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.

It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.

Adding the pending boards without combining code would be adding code that will be going away for most part with the device tree support.

And most likely the beagle and panda based boards will be the first ones to work with device tree. So anything we can do to have common board init code will also help with this effort.

Quoted 8 lines
Quoted 3 lines

Regards,

Tony

pcm049 and panda board have some more different devices.
I am working on patches to add NAND support and using tlv320aic3x audio codec which need regulators in platformcode. I need a hack to controll usb otg by gpio (controlling a external power circuit). The patches are not mainline ready by now.

OK, let's figure out how we can add the basic support first then.

Quoted 3 lines

If using machine_is_xxxx() in board-omap4panda.c then also is good way, I could provide our board as patches on top of board-omap4panda.c. When will pandaboard use device tree to boot?

Yes, but it would better just to use separate .init_machine entries to initialize thing. Gpio entries can be initialized along the lines of the recent beagle commit 5fe8b4c19dc24e3bb873daf9e96a2439a83bbd79 that adds support for beagl xm board. Except you already have a separate machine_id, so no runtime detection is needed.

That avoids adding the machine_is entries all over the place that tend to cause problems when some other panda variant is added as it requires patching in multiple places.

Regards,

Tony

#23 lore raw

cover join omap4panda and pcm049

First try to join both boards. Only compile testet. basis for discusson

Jan Weitzel (2):
omap4: board-omap4panda: prepare for join
omap4: board-omap4panda: join Phytec phyCORE-OMAP4

 arch/arm/mach-omap2/Kconfig                  |    6 +
 arch/arm/mach-omap2/board-omap4panda.c       |  817 +++++++++++++++++++-------
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 3 files changed, 616 insertions(+), 208 deletions(-)
maintainer
#24 lore raw

Re: [RFC 0/2] join omap4panda and pcm049

Quoted 11 lines · Jan Weitzel

First try to join both boards. Only compile testet. basis for discusson

Jan Weitzel (2):
omap4: board-omap4panda: prepare for join
omap4: board-omap4panda: join Phytec phyCORE-OMAP4

 arch/arm/mach-omap2/Kconfig                  |    6 +
 arch/arm/mach-omap2/board-omap4panda.c       |  817 +++++++++++++++++++-------
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 3 files changed, 616 insertions(+), 208 deletions(-)

Thanks for working on this. To me it seems that it might be more readable to have board-panda-common.c file instead of having everything in one file.

Then from the board specific files you could just call panda_common_init(&omap4_panda_config).

Regards,

Tony

#25 lore raw

v2 cover join omap4panda and pcm049

Try to join both boards. Only compile testet.
basis for discusson

Jan Weitzel (2):
omap4: board-omap4panda: prepare for join
omap4: board-omap4pcm049: add Phytec phyCORE-OMAP4

 arch/arm/mach-omap2/Kconfig                   |    6 +
 arch/arm/mach-omap2/Makefile                  |    5 +
 arch/arm/mach-omap2/board-omap4panda-common.c |  380 ++++++++++++++++++++++
 arch/arm/mach-omap2/board-omap4panda-common.h |   39 +++
 arch/arm/mach-omap2/board-omap4panda.c        |  421 +++++--------------------
 arch/arm/mach-omap2/board-omap4pcm049.c       |  368 +++++++++++++++++++++
 arch/arm/plat-omap/include/plat/uncompress.h  |    1 +
 7 files changed, 875 insertions(+), 345 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.c
 create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.h
 create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
#26 lore raw

RFC 1/2 omap4: board-omap4panda: prepare for join

In reply to Tony Lindgren

Prepare board-omap4panda for joing other similar boards. Split common stuff into board-omap4panda-common.

MUX: board_mux and omap4_panda_mux
omap4_common_preinit: for muxing
omap4_common_init: all common devices
struct panda_board_data: gpios, omap_board_data, i2c_board_info ...

some inititialisation check if omap4_panda_config entry is valid i2c_2_board_speed == 0 -> i2c_2 not used hup_power_gpio == -EINVAL -> gpio not used

---
 arch/arm/mach-omap2/Makefile                  |    1 +
 arch/arm/mach-omap2/board-omap4panda-common.c |  380 ++++++++++++++++++++++
 arch/arm/mach-omap2/board-omap4panda-common.h |   39 +++
 arch/arm/mach-omap2/board-omap4panda.c        |  421 +++++--------------------
 4 files changed, 496 insertions(+), 345 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.c
 create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.h
arch/arm/mach-omap2/Makefile +1 -0
index 2d4d18e..5d829d6 100644
@@ -237,6 +237,7 @@ obj-$(CONFIG_MACH_OMAP_4430SDP)		+= board-4430sdp.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
+					   board-omap4panda-common.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
 
arch/arm/mach-omap2/board-omap4panda-common.c new file +380 -0

380 lines not on this page · raw message

arch/arm/mach-omap2/board-omap4panda-common.h new file +39 -0
new file mode 100644
index 0000000..1c6a723
@@ -0,0 +1,39 @@
+#ifndef __BOAR_OAMP4PANDA_COMMON_H__
+#define __BOAR_OAMP4PANDA_COMMON_H__
+
+struct panda_board_data {
+	int hup_power_gpio;
+	int hup_nreset_gpio;
+	struct gpio_led_platform_data gpio_led_info;
+	struct omap2_hsmmc_info *mmc;
+	struct twl4030_platform_data twldata;
+	struct i2c_board_info *i2c_2_board_info;
+	int i2c_2_board_size;
+	int i2c_2_board_speed;
+	struct i2c_board_info *i2c_3_board_info;
+	int i2c_3_board_size;
+	int i2c_3_board_speed;
+	struct i2c_board_info *i2c_4_board_info;
+	int i2c_4_board_size;
+	int i2c_4_board_speed;
+	struct omap_board_data *serial1;
+	struct omap_board_data *serial2;
+	struct omap_board_data *serial3;
+	struct omap_board_data *serial4;
+
+};
+
+extern struct omap_board_data bdata;
+extern struct omap_board_data serial2_data;
+extern struct omap_board_data serial3_data;
+extern struct omap_board_data serial4_data;
+extern const struct usbhs_omap_board_data usbhs_bdata;
+extern struct omap_musb_board_data musb_board_datai;
+
+void __init omap4_panda_init_early(void);
+void omap4_common_hdmi_mux_init(void);
+
+void __init omap4_common_preinit(void);
+void __init omap4_common_init(struct panda_board_data *config);
+
+#endif /* __BOAR_OAMP4PANDA_COMMON_H__ */
arch/arm/mach-omap2/board-omap4panda.c +76 -345

476 lines not on this page · raw message

Signature · 1 line
1.7.0.4
maintainer
#27 lore raw

Re: [RFC 1/2] omap4: board-omap4panda: prepare for join

Quoted 11 lines · Jan Weitzel

Prepare board-omap4panda for joing other similar boards. Split common stuff into board-omap4panda-common.

MUX: board_mux and omap4_panda_mux
omap4_common_preinit: for muxing
omap4_common_init: all common devices
struct panda_board_data: gpios, omap_board_data, i2c_board_info ...

some inititialisation check if omap4_panda_config entry is valid i2c_2_board_speed == 0 -> i2c_2 not used hup_power_gpio == -EINVAL -> gpio not used

This should probably be split into two patches:

- Prepare things for panda common code
- Move panda common code

That way we can see from the patches what actually changes. Might also make sense to do it the other way around for the two patches.

Regards,

Tony

#28 lore raw

RFC 2/2 omap4: board-omap4pcm049: add Phytec phyCORE-OMAP4

In reply to Tony Lindgren

Adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.

---
 arch/arm/mach-omap2/Kconfig                  |    6 +
 arch/arm/mach-omap2/Makefile                 |    4 +
 arch/arm/mach-omap2/board-omap4pcm049.c      |  368 ++++++++++++++++++++++++++
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 4 files changed, 379 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
arch/arm/mach-omap2/Kconfig +6 -0
index 6b88799..d5e4b60 100644
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA
 	select OMAP_PACKAGE_CBS
 	select REGULATOR_FIXED_VOLTAGE
 
+config MACH_PCM049
+	bool "OMAP4 based phyCORE OMAP4"
+	depends on ARCH_OMAP4
+	default y
+	select OMAP_PACKAGE_CBS
+
 config OMAP3_EMU
 	bool "OMAP3 debugging peripherals"
 	depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
index 5d829d6..6cc4ccb 100644
@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   board-omap4panda-common.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
+obj-$(CONFIG_MACH_MACH_PCM049)		+= board-pcm049.o \
+					   board-omap4panda-common.o \
+					   hsmmc.o \
+					   omap_phy_internal.o
 
 obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o \
 					   omap_phy_internal.o \
arch/arm/mach-omap2/board-omap4pcm049.c new file +368 -0

368 lines not on this page · raw message

arch/arm/plat-omap/include/plat/uncompress.h +1 -0
index 2b71b17..cb4a6c2 100644
@@ -166,6 +166,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		/* omap4 based boards using UART3 */
 		DEBUG_LL_OMAP4(3, omap_4430sdp);
 		DEBUG_LL_OMAP4(3, omap4_panda);
+		DEBUG_LL_OMAP4(3, pcm049);
 
 		/* zoom2/3 external uart */
 		DEBUG_LL_ZOOM(omap_zoom2);
Signature · 1 line
1.7.0.4
maintainer
#29 lore raw

Re: [RFC 2/2] omap4: board-omap4pcm049: add Phytec phyCORE-OMAP4

arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 243

Quoted 7 lines · Jan Weitzel
arch/arm/mach-omap2/Makefile +1 -0
@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o \
 					   board-omap4panda-common.o \
 					   hsmmc.o \
 					   omap_phy_internal.o
+obj-$(CONFIG_MACH_MACH_PCM049)		+= board-pcm049.o \
                ^^^^

Extra mach above?

arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 249

Quoted 6 lines
arch/arm/mach-omap2/Makefile +3 -0
+					   board-omap4panda-common.o \
+					   hsmmc.o \
+					   omap_phy_internal.o
 
 obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o \
 					   omap_phy_internal.o \

Maybe use just board-panda-common.o here instead? And in the Makefile it can be compiled in with something like:

obj-$(CONFIG_MACH_OMAP4_PANDA) += board-panda-common.o
obj-$(CONFIG_MACH_PCM049) += board-panda-common.o
...

obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o
obj-$(CONFIG_MACH_PCM049) += board-pcm049.o
...

I already posted a patch to get rid of repeating the hsmmc.o for each board using it.

Quoted 27 lines
arch/arm/mach-omap2/Makefile +27 -0
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/leds.h>
+#include <linux/gpio.h>
+#include <linux/usb/otg.h>
+#include <linux/i2c/twl.h>
+#include <linux/i2c/at24.h>
+#include <linux/mfd/stmpe.h>
+#include <linux/leds-pca9532.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/fixed.h>
+#include <linux/wl12xx.h>
+#include <linux/smsc911x.h>
+
+#include <mach/hardware.h>
+#include <mach/omap4-common.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <video/omapdss.h>
+
+#include <plat/board.h>
+#include <plat/common.h>
+#include <plat/usb.h>

arch/arm/mach-omap2/Makefile

Quoted 10 lines
arch/arm/mach-omap2/Makefile +10 -0
+#include <plat/gpmc.h>
+#include <plat/gpmc-smsc911x.h>
+#include <plat/mmc.h>
+#include <video/omap-panel-generic-dpi.h>
+
+#include "hsmmc.h"
+#include "control.h"
+#include "mux.h"
+#include "common-board-devices.h"
+#include "board-omap4panda-common.h"

Maybe check which includes are now needed with the panda-common?

arch/arm/mach-omap2/Makefile

Quoted 8 lines
arch/arm/mach-omap2/Makefile +8 -0
+struct omap_dss_device pcm049_dpi_device = {
+	.type			= OMAP_DISPLAY_TYPE_DPI,
+	.name			= "dpi",
+	.driver_name		= "generic_dpi_panel",
+	.data			= &omap4_dpi_panel,
+	.phy.dpi.data_lines	= 24,
+	.channel		= OMAP_DSS_CHANNEL_LCD2,
+};

Usually tabs are used for aligning the structs like above..

arch/arm/mach-omap2/Makefile

Quoted 4 lines
arch/arm/mach-omap2/Makefile +4 -0
+static struct omap_dss_device  pcm049_dvi_device = {
+	.name = "dvi",
+	.driver_name = "hdmi_panel",
+	.type = OMAP_DISPLAY_TYPE_HDMI,

.. so please align the structs with tabs for the new data too. Please check the data structs in all your patches while at it. Also looks like there's an extra space above before pcm049_dvi_device.

arch/arm/mach-omap2/Makefile

Quoted 8 lines
arch/arm/mach-omap2/Makefile +8 -0
+static struct stmpe_platform_data pba_stm_pdata = {
+	.blocks = STMPE_BLOCK_GPIO | STMPE_BLOCK_TOUCHSCREEN,
+	.irq_base = TWL6030_IRQ_END,
+	.irq_trigger = IRQF_TRIGGER_RISING,
+	.irq_invert_polarity = true,
+	.gpio = &pba_gpio_stm_data,
+	.ts = &pba_ts_stm_pdata,
+};

Here too please check the alignment.

Regards,

Tony

#30 lore raw

PATCH 1/2 omap4: board-omap4panda: prepare for join

In reply to Tony Lindgren

Prepare board-omap4panda for joing other similar boards.
MUX: board_mux and omap4_panda_mux
omap4_common_preinit: for muxing
omap4_common_init: all common devices
omap4_panda_config: gpios, omap_board_data, i2c_board_info ...
runtime overwriteable

some inititialisation check if omap4_panda_config entry is valid i2c_2_board_speed == 0 -> i2c_2 not used hup_power_gpio == EINVAL -> gpio not used

---
 arch/arm/mach-omap2/board-omap4panda.c |  498 ++++++++++++++++++-------------
 1 files changed, 289 insertions(+), 209 deletions(-)
arch/arm/mach-omap2/board-omap4panda.c +289 -209
index 9aaa960..b9bea86 100644
@@ -47,23 +47,11 @@
 #include "mux.h"
 #include "common-board-devices.h"
 
-#define GPIO_HUB_POWER		1
-#define GPIO_HUB_NRESET		62
 #define GPIO_WIFI_PMENA		43
 #define GPIO_WIFI_IRQ		53
 #define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
 #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
 
-/* wl127x BT, FM, GPS connectivity chip */
-static int wl1271_gpios[] = {46, -1, -1};
-static struct platform_device wl1271_device = {
-	.name	= "kim",
-	.id	= -1,
-	.dev	= {
-		.platform_data	= &wl1271_gpios,
-	},
-};
-
 static struct gpio_led gpio_leds[] = {
 	{
 		.name			= "pandaboard::status1",
@@ -77,21 +65,219 @@ static struct gpio_led gpio_leds[] = {
 	},
 };
 
-static struct gpio_led_platform_data gpio_led_info = {
-	.leds		= gpio_leds,
-	.num_leds	= ARRAY_SIZE(gpio_leds),
+/*
+ * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
+ * is connected as I2C slave device, and can be accessed at address 0x50
+ */
+static struct i2c_board_info __initdata panda_i2c_eeprom[] = {
+	{
+		I2C_BOARD_INFO("eeprom", 0x50),
+	},
+};
+
+#ifdef CONFIG_OMAP_MUX
+static struct omap_board_mux board_mux[] __initdata = {
+	/* dispc2_data23 */
+	OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data22 */
+	OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data21 */
+	OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data20 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data19 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data18 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data15 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data14 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data13 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data12 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data11 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data10 */
+	OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data9 */
+	OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data16 */
+	OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data17 */
+	OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_hsync */
+	OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_pclk */
+	OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_vsync */
+	OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_de */
+	OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data8 */
+	OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data7 */
+	OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data6 */
+	OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data5 */
+	OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data4 */
+	OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data3 */
+	OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data2 */
+	OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data1 */
+	OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data0 */
+	OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	{ .reg_offset = OMAP_MUX_TERMINATOR },
+};
+
+static struct omap_device_pad serial2_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart2_cts.uart2_cts",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_rts.uart2_rts",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_rx.uart2_rx",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_tx.uart2_tx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_device_pad serial3_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
+			 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_device_pad serial4_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart4_rx.uart4_rx",
+			 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart4_tx.uart4_tx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_board_data serial2_data __initdata = {
+	.id             = 1,
+	.pads           = serial2_pads,
+	.pads_cnt       = ARRAY_SIZE(serial2_pads),
+};
+
+static struct omap_board_data serial3_data __initdata = {
+	.id             = 2,
+	.pads           = serial3_pads,
+	.pads_cnt       = ARRAY_SIZE(serial3_pads),
+};
+
+static struct omap_board_data serial4_data __initdata = {
+	.id             = 3,
+	.pads           = serial4_pads,
+	.pads_cnt       = ARRAY_SIZE(serial4_pads),
+};
+#else
+#define board_mux	NULL
+#endif
+
+/* dummy data for UART1 */
+struct omap_board_data bdata;
+
+static struct omap2_hsmmc_info omap4_panda_mmc[] = {
+	{
+		.mmc		= 1,
+		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
+		.gpio_wp	= -EINVAL,
+		.gpio_cd	= -EINVAL,
+	},
+	{
+		.name		= "wl1271",
+		.mmc		= 5,
+		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
+		.gpio_wp	= -EINVAL,
+		.gpio_cd	= -EINVAL,
+		.ocr_mask	= MMC_VDD_165_195,
+		.nonremovable	= true,
+	},
+	{}	/* Terminator */
+};
+
+/*
+ * Board-specific configuration
+ */
+static struct {
+	int hup_power_gpio;
+	int hup_nreset_gpio;
+	struct gpio_led_platform_data gpio_led_info;
+	struct omap2_hsmmc_info *mmc;
+	struct twl4030_platform_data twldata;
+	struct i2c_board_info *i2c_2_board_info;
+	int i2c_2_board_size;
+	int i2c_2_board_speed;
+	struct i2c_board_info *i2c_3_board_info;
+	int i2c_3_board_size;
+	int i2c_3_board_speed;
+	struct i2c_board_info *i2c_4_board_info;
+	int i2c_4_board_size;
+	int i2c_4_board_speed;
+	struct omap_board_data *serial1;
+	struct omap_board_data *serial2;
+	struct omap_board_data *serial3;
+	struct omap_board_data *serial4;
+} omap4_panda_config = {
+	.hup_power_gpio = 1,
+	.hup_nreset_gpio = 62,
+	.gpio_led_info.leds = gpio_leds,
+	.gpio_led_info.num_leds	= ARRAY_SIZE(gpio_leds),
+	.mmc = omap4_panda_mmc,
+	.i2c_2_board_info = NULL,
+	.i2c_2_board_size = 0,
+	.i2c_2_board_speed = 400,
+	.i2c_3_board_info = panda_i2c_eeprom,
+	.i2c_3_board_size = ARRAY_SIZE(panda_i2c_eeprom),
+	/*
+	 * Bus 3 is attached to the DVI port where devices like the pico DLP
+	 * projector don't work reliably with 400kHz
+	 */
+	.i2c_3_board_speed = 100,
+	.i2c_4_board_info = NULL,
+	.i2c_4_board_size = 0,
+	.i2c_4_board_speed = 400,
+	.serial1 = &bdata,
+	.serial2 = &serial2_data,
+	.serial3 = &serial3_data,
+	.serial4 = &serial4_data,
+};
+
+/* wl127x BT, FM, GPS connectivity chip */
+static int wl1271_gpios[] = {46, -1, -1};
+static struct platform_device wl1271_device = {
+	.name	= "kim",
+	.id	= -1,
+	.dev	= {
+		.platform_data	= &wl1271_gpios,
+	},
 };
 
 static struct platform_device leds_gpio = {
 	.name	= "leds-gpio",
 	.id	= -1,
 	.dev	= {
-		.platform_data	= &gpio_led_info,
+		.platform_data	= &omap4_panda_config.gpio_led_info,
 	},
 };
 
-static struct platform_device *panda_devices[] __initdata = {
+static struct platform_device *common_devices[] __initdata = {
 	&leds_gpio,
+};
+
+static struct platform_device *panda_devices[] __initdata = {
 	&wl1271_device,
 };
 
@@ -111,11 +297,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 	.reset_gpio_port[2]  = -EINVAL
 };
 
-static struct gpio panda_ehci_gpios[] __initdata = {
-	{ GPIO_HUB_POWER,	GPIOF_OUT_INIT_LOW,  "hub_power"  },
-	{ GPIO_HUB_NRESET,	GPIOF_OUT_INIT_LOW,  "hub_nreset" },
-};
-
 static void __init omap4_ehci_init(void)
 {
 	int ret;
@@ -131,21 +312,32 @@ static void __init omap4_ehci_init(void)
 	clk_enable(phy_ref_clk);
 
 	/* disable the power to the usb hub prior to init and reset phy+hub */
-	ret = gpio_request_array(panda_ehci_gpios,
-				 ARRAY_SIZE(panda_ehci_gpios));
-	if (ret) {
-		pr_err("Unable to initialize EHCI power/reset\n");
-		return;
+	if (omap4_panda_config.hup_power_gpio != -EINVAL) {
+		ret = gpio_request_one(omap4_panda_config.hup_power_gpio, 
+				GPIOF_OUT_INIT_LOW,  "hub_power");
+		if (ret) {
+			pr_err("Unable to initialize EHCI power\n");
+			return;
+		}
+		gpio_export(omap4_panda_config.hup_power_gpio, 0);
 	}
 
-	gpio_export(GPIO_HUB_POWER, 0);
-	gpio_export(GPIO_HUB_NRESET, 0);
-	gpio_set_value(GPIO_HUB_NRESET, 1);
+	if (omap4_panda_config.hup_nreset_gpio != -EINVAL) {
+		ret = gpio_request_one(omap4_panda_config.hup_nreset_gpio,
+				GPIOF_OUT_INIT_LOW,  "hub_nreset");
+		if (ret) {
+			pr_err("Unable to initialize EHCI reset\n");
+			return;
+		}
+		gpio_export(omap4_panda_config.hup_nreset_gpio, 0);
+		gpio_set_value(omap4_panda_config.hup_nreset_gpio, 1);
+	}
 
 	usbhs_init(&usbhs_bdata);
 
 	/* enable power to hub */
-	gpio_set_value(GPIO_HUB_POWER, 1);
+	if (omap4_panda_config.hup_power_gpio != -EINVAL)
+		gpio_set_value(omap4_panda_config.hup_power_gpio, 1);
 }
 
 static struct omap_musb_board_data musb_board_data = {
@@ -154,25 +346,6 @@ static struct omap_musb_board_data musb_board_data = {
 	.power			= 100,
 };
 
-static struct omap2_hsmmc_info mmc[] = {
-	{
-		.mmc		= 1,
-		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
-		.gpio_wp	= -EINVAL,
-		.gpio_cd	= -EINVAL,
-	},
-	{
-		.name		= "wl1271",
-		.mmc		= 5,
-		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
-		.gpio_wp	= -EINVAL,
-		.gpio_cd	= -EINVAL,
-		.ocr_mask	= MMC_VDD_165_195,
-		.nonremovable	= true,
-	},
-	{}	/* Terminator */
-};
-
 static struct regulator_consumer_supply omap4_panda_vmmc5_supply[] = {
 	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.4"),
 };
@@ -257,22 +430,10 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
 	return 0;
 }
 
-/* Panda board uses the common PMIC configuration */
-static struct twl4030_platform_data omap4_panda_twldata;
-
-/*
- * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
- * is connected as I2C slave device, and can be accessed at address 0x50
- */
-static struct i2c_board_info __initdata panda_i2c_eeprom[] = {
-	{
-		I2C_BOARD_INFO("eeprom", 0x50),
-	},
-};
-
 static int __init omap4_panda_i2c_init(void)
 {
-	omap4_pmic_get_config(&omap4_panda_twldata, TWL_COMMON_PDATA_USB,
+	omap4_pmic_get_config(&omap4_panda_config.twldata, 
+			TWL_COMMON_PDATA_USB,
 			TWL_COMMON_REGULATOR_VDAC |
 			TWL_COMMON_REGULATOR_VAUX2 |
 			TWL_COMMON_REGULATOR_VAUX3 |
@@ -282,157 +443,40 @@ static int __init omap4_panda_i2c_init(void)
 			TWL_COMMON_REGULATOR_VCXIO |
 			TWL_COMMON_REGULATOR_VUSB |
 			TWL_COMMON_REGULATOR_CLK32KG);
-	omap4_pmic_init("twl6030", &omap4_panda_twldata);
-	omap_register_i2c_bus(2, 400, NULL, 0);
-	/*
-	 * Bus 3 is attached to the DVI port where devices like the pico DLP
-	 * projector don't work reliably with 400kHz
-	 */
-	omap_register_i2c_bus(3, 100, panda_i2c_eeprom,
-					ARRAY_SIZE(panda_i2c_eeprom));
-	omap_register_i2c_bus(4, 400, NULL, 0);
+	omap4_pmic_init("twl6030", &omap4_panda_config.twldata);
+	if (!omap4_panda_config.i2c_2_board_speed)
+		omap_register_i2c_bus(2, omap4_panda_config.i2c_2_board_speed,
+				omap4_panda_config.i2c_2_board_info, 
+				omap4_panda_config.i2c_2_board_size);
+	if (!omap4_panda_config.i2c_3_board_speed)
+		omap_register_i2c_bus(3, omap4_panda_config.i2c_3_board_speed,
+				omap4_panda_config.i2c_3_board_info,
+				omap4_panda_config.i2c_3_board_size);
+	if (!omap4_panda_config.i2c_4_board_speed)
+		omap_register_i2c_bus(4, omap4_panda_config.i2c_4_board_speed, 
+				omap4_panda_config.i2c_4_board_info,
+				omap4_panda_config.i2c_4_board_size);
 	return 0;
 }
 
 #ifdef CONFIG_OMAP_MUX
-static struct omap_board_mux board_mux[] __initdata = {
-	/* WLAN IRQ - GPIO 53 */
-	OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
-	/* WLAN POWER ENABLE - GPIO 43 */
-	OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
-	/* WLAN SDIO: MMC5 CMD */
-	OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-	/* WLAN SDIO: MMC5 CLK */
-	OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-	/* WLAN SDIO: MMC5 DAT[0-3] */
-	OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-	OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-	OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-	OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-	/* gpio 0 - TFP410 PD */
-	OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
-	/* dispc2_data23 */
-	OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data22 */
-	OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data21 */
-	OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data20 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data19 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data18 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data15 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data14 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data13 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data12 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data11 */
-	OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data10 */
-	OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data9 */
-	OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data16 */
-	OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data17 */
-	OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_hsync */
-	OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_pclk */
-	OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_vsync */
-	OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_de */
-	OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data8 */
-	OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data7 */
-	OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data6 */
-	OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data5 */
-	OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data4 */
-	OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data3 */
-	OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data2 */
-	OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data1 */
-	OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	/* dispc2_data0 */
-	OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
-	{ .reg_offset = OMAP_MUX_TERMINATOR },
-};
-
-static struct omap_device_pad serial2_pads[] __initdata = {
-	OMAP_MUX_STATIC("uart2_cts.uart2_cts",
-			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart2_rts.uart2_rts",
-			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart2_rx.uart2_rx",
-			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart2_tx.uart2_tx",
-			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial3_pads[] __initdata = {
-	OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
-			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
-			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
-			 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
-			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial4_pads[] __initdata = {
-	OMAP_MUX_STATIC("uart4_rx.uart4_rx",
-			 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
-	OMAP_MUX_STATIC("uart4_tx.uart4_tx",
-			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_board_data serial2_data __initdata = {
-	.id             = 1,
-	.pads           = serial2_pads,
-	.pads_cnt       = ARRAY_SIZE(serial2_pads),
-};
-
-static struct omap_board_data serial3_data __initdata = {
-	.id             = 2,
-	.pads           = serial3_pads,
-	.pads_cnt       = ARRAY_SIZE(serial3_pads),
-};
-
-static struct omap_board_data serial4_data __initdata = {
-	.id             = 3,
-	.pads           = serial4_pads,
-	.pads_cnt       = ARRAY_SIZE(serial4_pads),
-};
-
 static inline void board_serial_init(void)
 {
-	struct omap_board_data bdata;
+	/* pass dummy data for UART1 */
 	bdata.flags     = 0;
 	bdata.pads      = NULL;
 	bdata.pads_cnt  = 0;
 	bdata.id        = 0;
-	/* pass dummy data for UART1 */
-	omap_serial_init_port(&bdata);
-
-	omap_serial_init_port(&serial2_data);
-	omap_serial_init_port(&serial3_data);
-	omap_serial_init_port(&serial4_data);
+	if (omap4_panda_config.serial1)
+		omap_serial_init_port(omap4_panda_config.serial1);
+	if (omap4_panda_config.serial2)
+		omap_serial_init_port(omap4_panda_config.serial2);
+	if (omap4_panda_config.serial3)
+		omap_serial_init_port(omap4_panda_config.serial3);
+	if (omap4_panda_config.serial4)
+		omap_serial_init_port(omap4_panda_config.serial4);
 }
 #else
-#define board_mux	NULL
 
 static inline void board_serial_init(void)
 {
@@ -554,7 +598,9 @@ void omap4_panda_display_init(void)
 	omap_display_init(&omap4_panda_dss_data);
 }
 
-static void __init omap4_panda_init(void)
+static struct omap_mux_partition *partition;
+
+static void __init omap4_common_preinit(void)
 {
 	int package = OMAP_PACKAGE_CBS;
 
@@ -562,16 +608,50 @@ static void __init omap4_panda_init(void)
 		package = OMAP_PACKAGE_CBL;
 	omap4_mux_init(board_mux, NULL, package);
 
-	if (wl12xx_set_platform_data(&omap_panda_wlan_data))
-		pr_err("error setting wl12xx data\n");
+	partition = omap_mux_get("core");
+}
 
+static void __init omap4_common_init(void)
+{
+	platform_add_devices(common_devices, ARRAY_SIZE(common_devices));
+	omap4_twl6030_hsmmc_init(omap4_panda_config.mmc);
 	omap4_panda_i2c_init();
-	platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
-	platform_device_register(&omap_vwlan_device);
 	board_serial_init();
-	omap4_twl6030_hsmmc_init(mmc);
 	omap4_ehci_init();
 	usb_musb_init(&musb_board_data);
+}
+
+static struct omap_board_mux omap4_panda_mux[] = {
+#ifdef CONFIG_OMAP_MUX
+	/* WLAN IRQ - GPIO 53 */
+	OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
+	/* WLAN POWER ENABLE - GPIO 43 */
+	OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
+	/* WLAN SDIO: MMC5 CMD */
+	OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	/* WLAN SDIO: MMC5 CLK */
+	OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	/* WLAN SDIO: MMC5 DAT[0-3] */
+	OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	/* gpio 0 - TFP410 PD */
+	OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+#endif
+	{ .reg_offset = OMAP_MUX_TERMINATOR },
+};
+
+static void __init omap4_panda_init(void)
+{
+	omap4_common_preinit();
+	omap_mux_write_array(partition, omap4_panda_mux);
+	omap4_common_init();
+	if (wl12xx_set_platform_data(&omap_panda_wlan_data))
+		pr_err("error setting wl12xx data\n");
+
+	platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
+	platform_device_register(&omap_vwlan_device);
 	omap4_panda_display_init();
 }
 
Signature · 1 line
1.7.0.4
#31 lore raw

PATCH 2/2 omap4: board-omap4panda: join Phytec phyCORE-OMAP4

In reply to Tony Lindgren

This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049. It reuse board-omap4panda platform code.

---
 arch/arm/mach-omap2/Kconfig                  |    6 +
 arch/arm/mach-omap2/board-omap4panda.c       |  321 ++++++++++++++++++++++++++
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 3 files changed, 328 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +6 -0
index 6b88799..d5e4b60 100644
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA
 	select OMAP_PACKAGE_CBS
 	select REGULATOR_FIXED_VOLTAGE
 
+config MACH_PCM049
+	bool "OMAP4 based phyCORE OMAP4"
+	depends on ARCH_OMAP4
+	default y
+	select OMAP_PACKAGE_CBS
+
 config OMAP3_EMU
 	bool "OMAP3 debugging peripherals"
 	depends on ARCH_OMAP3
arch/arm/mach-omap2/board-omap4panda.c +321 -0

345 lines not on this page · raw message

arch/arm/plat-omap/include/plat/uncompress.h +1 -0
index 2b71b17..cb4a6c2 100644
@@ -166,6 +166,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		/* omap4 based boards using UART3 */
 		DEBUG_LL_OMAP4(3, omap_4430sdp);
 		DEBUG_LL_OMAP4(3, omap4_panda);
+		DEBUG_LL_OMAP4(3, pcm049);
 
 		/* zoom2/3 external uart */
 		DEBUG_LL_ZOOM(omap_zoom2);
Signature · 1 line
1.7.0.4
#32 lore raw

PATCH 2/3 ARM: OMAP4: add pcm049 DEBUGLL

In reply to Jan Weitzel
---
 arch/arm/plat-omap/include/plat/uncompress.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
arch/arm/plat-omap/include/plat/uncompress.h +1 -0
index ac4b60d..10507a6 100644
@@ -164,6 +164,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
 		/* omap4 based boards using UART3 */
 		DEBUG_LL_OMAP4(3, omap_4430sdp);
 		DEBUG_LL_OMAP4(3, omap4_panda);
+		DEBUG_LL_OMAP4(3, pcm049);
 
 		/* zoom2/3 external uart */
 		DEBUG_LL_ZOOM(omap_zoom2);
Signature · 1 line
1.7.0.4
#33 lore raw

PATCH 3/3 ARM: OMAP4: platformcode board-omap4pcm049.c

In reply to Jan Weitzel

platformcode for Phytec phyCORE-OMAP4 PCM049 OMAP4430 board.

---
 arch/arm/mach-omap2/board-omap4pcm049.c |  728 +++++++++++++++++++++++++++++++
 1 files changed, 728 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
arch/arm/mach-omap2/board-omap4pcm049.c new file +728 -0
new file mode 100644
index 0000000..51bb7a7
@@ -0,0 +1,728 @@
+/*
+ * Board support file for Phytec phyCORE-OMAP4 Board.
+ *
+ * Copyright (C) 2011 Phytec Messtechnik GmbH
+ *
+ * Author: Jan Weitzel <[email protected]>
+ *
+ * Based on mach-omap2/board-omap4panda.c
+ *
+ * Author: David Anders <[email protected]>
+ *
+ * Author: Santosh Shilimkar <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/leds.h>
+#include <linux/gpio.h>
+#include <linux/usb/otg.h>
+#include <linux/i2c/twl.h>
+#include <linux/i2c/at24.h>
+#include <linux/mfd/stmpe.h>
+#include <linux/leds-pca9532.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/fixed.h>
+#include <linux/smsc911x.h>
+
+#include <mach/hardware.h>
+#include <mach/omap4-common.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <video/omapdss.h>
+
+#include <plat/board.h>
+#include <plat/common.h>
+#include <plat/usb.h>
+#include <plat/gpmc.h>
+#include <plat/gpmc-smsc911x.h>
+#include <plat/mmc.h>
+#include <video/omap-panel-generic-dpi.h>
+#include "timer-gp.h"
+
+#include "hsmmc.h"
+#include "control.h"
+#include "mux.h"
+#include "common-board-devices.h"
+
+#define OMAP4_PCM049_ETH_GPIO_IRQ	121
+#define OMAP4_PCM049_ETH_CS		5
+#define OMAP4_PCM049_STMPE811_GPIO_IRQ	117
+#define OMAP4_PCM049_LCD_ENABLE		118
+
+static struct gpio_led gpio_leds[] = {
+	{
+		.name			= "modul:red:status1",
+		.default_trigger	= "heartbeat",
+		.gpio			= 152,
+	},
+	{
+		.name			= "modul:green:status2",
+		.default_trigger	= "mmc0",
+		.gpio			= 153,
+	},
+};
+
+static struct gpio_led_platform_data gpio_led_info = {
+	.leds		= gpio_leds,
+	.num_leds	= ARRAY_SIZE(gpio_leds),
+};
+
+static struct platform_device leds_gpio = {
+	.name	= "leds-gpio",
+	.id	= -1,
+	.dev	= {
+		.platform_data	= &gpio_led_info,
+	},
+};
+
+static void __init pcm049_init_early(void)
+{
+	omap2_init_common_infrastructure();
+	omap2_init_common_devices(NULL, NULL);
+}
+
+static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
+	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
+	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
+	.phy_reset  = false,
+	.reset_gpio_port[0]  = -EINVAL,
+	.reset_gpio_port[1]  = -EINVAL,
+	.reset_gpio_port[2]  = -EINVAL
+};
+
+static void __init omap4_ehci_init(void)
+{
+	struct clk *phy_ref_clk;
+	/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
+	phy_ref_clk = clk_get(NULL, "auxclk3_ck");
+	if (IS_ERR(phy_ref_clk)) {
+		pr_err("Cannot request auxclk3\n");
+		return;
+	}
+	clk_set_rate(phy_ref_clk, 19200000);
+	clk_enable(phy_ref_clk);
+
+	usbhs_init(&usbhs_bdata);
+	return;
+}
+
+static struct omap_musb_board_data musb_board_data = {
+	.interface_type		= MUSB_INTERFACE_UTMI,
+	.mode			= MUSB_OTG,
+	.power			= 100,
+};
+
+static struct twl4030_usb_data omap4_usbphy_data = {
+	.phy_init	= omap4430_phy_init,
+	.phy_exit	= omap4430_phy_exit,
+	.phy_power	= omap4430_phy_power,
+	.phy_set_clock	= omap4430_phy_set_clk,
+	.phy_suspend	= omap4430_phy_suspend,
+};
+
+static struct omap2_hsmmc_info mmc[] = {
+	{
+		.mmc		= 1,
+		.caps		= MMC_CAP_4_BIT_DATA,
+		.gpio_wp	= -EINVAL,
+		.gpio_cd	= -EINVAL,
+	}, {
+		.mmc		= 5,
+		.caps		= MMC_CAP_4_BIT_DATA,
+		.gpio_wp	= -EINVAL,
+		.gpio_cd	= 30,	/* wk30 */
+		.ocr_mask	= MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */
+	}, {}	/* Terminator */
+};
+
+static struct regulator_consumer_supply pcm049_vmmc_supply[] = {
+	{
+		.supply = "vmmc",
+		.dev_name = "omap_hsmmc.0",
+	},
+};
+
+#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
+static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
+	.cs             = OMAP4_PCM049_ETH_CS,
+	.gpio_irq       = OMAP4_PCM049_ETH_GPIO_IRQ,
+	.gpio_reset     = -EINVAL,
+	.flags          = SMSC911X_USE_16BIT,
+};
+
+static inline void __init pcm049_init_smsc911x(void)
+{
+	omap_mux_init_gpio(OMAP4_PCM049_ETH_GPIO_IRQ, OMAP_PIN_INPUT);
+	gpmc_smsc911x_init(&board_smsc911x_data);
+}
+#else
+static inline void __init pcm049_init_smsc911x(void) { return; }
+#endif
+
+static int omap4_twl6030_hsmmc_late_init(struct device *dev)
+{
+	int ret = 0;
+	struct platform_device *pdev = container_of(dev,
+				struct platform_device, dev);
+	struct omap_mmc_platform_data *pdata = dev->platform_data;
+
+	/* Setting MMC1 Card detect Irq */
+	if (pdev->id == 0) {
+		ret = twl6030_mmc_card_detect_config();
+		if (ret)
+			dev_err(dev, "%s: Error card detect config(%d)\n",
+				__func__, ret);
+		pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
+						MMCDETECT_INTR_OFFSET;
+		pdata->slots[0].card_detect = twl6030_mmc_card_detect;
+	}
+	return ret;
+}
+
+static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)
+{
+	struct omap_mmc_platform_data *pdata;
+
+	/* dev can be null if CONFIG_MMC_OMAP_HS is not set */
+	if (!dev) {
+		pr_err("Failed omap4_twl6030_hsmmc_set_late_init\n");
+		return;
+	}
+	pdata = dev->platform_data;
+
+	pdata->init =	omap4_twl6030_hsmmc_late_init;
+}
+
+static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
+{
+	struct omap2_hsmmc_info *c;
+
+	omap2_hsmmc_init(controllers);
+	for (c = controllers; c->mmc; c++)
+		omap4_twl6030_hsmmc_set_late_init(c->dev);
+
+	return 0;
+}
+
+/* Fixed regulator for max1027 */
+static struct regulator_consumer_supply pcm049_vcc_3v3_consumer_supply[] = {
+	REGULATOR_SUPPLY("vcc", "4-0064"),
+};
+
+struct regulator_init_data pcm049_vcc_3v3_initdata = {
+	.consumer_supplies = pcm049_vcc_3v3_consumer_supply,
+	.num_consumer_supplies = ARRAY_SIZE(pcm049_vcc_3v3_consumer_supply),
+	.constraints = {
+		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct fixed_voltage_config pcm049_vcc_3v3_config = {
+	.supply_name		= "pcm049_vcc_3v3",
+	.microvolts		= 3300000,
+	.gpio			= -EINVAL,
+	.enabled_at_boot	= 1,
+	.init_data		= &pcm049_vcc_3v3_initdata,
+};
+
+static struct platform_device pcm049_vcc_3v3_device = {
+	.name	= "reg-fixed-voltage",
+	.id	= 0,
+	.dev	= {
+		.platform_data = &pcm049_vcc_3v3_config,
+	},
+};
+
+static struct regulator_init_data pcm049_vaux2 = {
+	.constraints = {
+		.min_uV			= 1200000,
+		.max_uV			= 2800000,
+		.apply_uV		= true,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 = REGULATOR_CHANGE_VOLTAGE
+					| REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_vaux3 = {
+	.constraints = {
+		.min_uV			= 1000000,
+		.max_uV			= 3000000,
+		.apply_uV		= true,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 = REGULATOR_CHANGE_VOLTAGE
+					| REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+/* VMMC1 for MMC1 card */
+static struct regulator_init_data pcm049_vmmc = {
+	.constraints = {
+		.min_uV			= 1200000,
+		.max_uV			= 3000000,
+		.apply_uV		= true,
+		.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      = pcm049_vmmc_supply,
+};
+
+static struct regulator_init_data pcm049_vpp = {
+	.constraints = {
+		.min_uV			= 1800000,
+		.max_uV			= 2500000,
+		.apply_uV		= true,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 = REGULATOR_CHANGE_VOLTAGE
+					| REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_vana = {
+	.constraints = {
+		.min_uV			= 2100000,
+		.max_uV			= 2100000,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_vcxio = {
+	.constraints = {
+		.min_uV			= 1800000,
+		.max_uV			= 1800000,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_vdac = {
+	.constraints = {
+		.min_uV			= 1800000,
+		.max_uV			= 1800000,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_vusb = {
+	.constraints = {
+		.min_uV			= 3300000,
+		.max_uV			= 3300000,
+		.apply_uV		= true,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 =	REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_vusim = {
+	.constraints = {
+		.min_uV			= 1800000,
+		.max_uV			= 3300000,
+		.apply_uV		= true,
+		.valid_modes_mask	= REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask	 =	REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct regulator_init_data pcm049_clk32kg = {
+	.constraints = {
+		.valid_ops_mask		= REGULATOR_CHANGE_STATUS,
+	},
+};
+
+static struct twl4030_platform_data pcm049_twldata = {
+	.irq_base	= TWL6030_IRQ_BASE,
+	.irq_end	= TWL6030_IRQ_END,
+
+	/* Regulators */
+	.vmmc		= &pcm049_vmmc,
+	.vpp		= &pcm049_vpp,
+	.vana		= &pcm049_vana,
+	.vcxio		= &pcm049_vcxio,
+	.vdac		= &pcm049_vdac,
+	.vusb		= &pcm049_vusb,
+	.vaux2		= &pcm049_vaux2,
+	.vaux3		= &pcm049_vaux3,
+	.clk32kg	= &pcm049_clk32kg,
+	.usb		= &omap4_usbphy_data,
+	.vusim		= &pcm049_vusim,
+};
+
+static struct at24_platform_data board_eeprom = {
+	.byte_len = 4096,
+	.page_size = 32,
+	.flags = AT24_FLAG_ADDR16,
+};
+
+static struct stmpe_gpio_platform_data pba_gpio_stm_data = {
+	.gpio_base = -1,
+	.norequest_mask = STMPE_GPIO_NOREQ_811_TOUCH,
+};
+
+static struct stmpe_ts_platform_data pba_ts_stm_pdata = {
+	.sample_time = 4,
+	.mod_12b = 1,
+	.ref_sel = 0,
+	.adc_freq = 1,
+	.ave_ctrl = 3,
+	.touch_det_delay = 3,
+	.settling = 3,
+	.fraction_z = 7,
+	.i_drive = 0,
+};
+
+static struct stmpe_platform_data pba_stm_pdata = {
+	.blocks = STMPE_BLOCK_GPIO | STMPE_BLOCK_TOUCHSCREEN,
+	.irq_base = TWL6030_IRQ_END,
+	.irq_trigger = IRQF_TRIGGER_RISING,
+	.irq_invert_polarity = true,
+	.gpio = &pba_gpio_stm_data,
+	.ts = &pba_ts_stm_pdata,
+};
+
+static struct pca9532_platform_data pba_pca9532 = {
+	.leds = {
+		{
+			.name = "board:red:free_use1",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		}, {
+			.name = "board:yellow:free_use2",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		}, {
+			.name = "board:yellow:free_use3",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		}, {
+			.name = "board:green:free_use4",
+			.state = PCA9532_OFF,
+			.type = PCA9532_TYPE_LED,
+		},
+	},
+	.psc = { 1, 1 },
+	.pwm = { 1, 1 },
+};
+
+static struct i2c_board_info __initdata pcm049_i2c_1_boardinfo[] = {
+	{
+		I2C_BOARD_INFO("at24", 0x57), /* E0=1, E1=1, E2=1 */
+		.platform_data = &board_eeprom,
+	},
+};
+
+static struct i2c_board_info __initdata pcm049_i2c_3_boardinfo[] = {
+};
+
+static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = {
+	{
+		I2C_BOARD_INFO("stmpe811", 0x41),	/* Touch controller */
+		.irq = OMAP_GPIO_IRQ(OMAP4_PCM049_STMPE811_GPIO_IRQ),
+		.platform_data = &pba_stm_pdata,
+	}, {
+		I2C_BOARD_INFO("max1037", 0x64),	/* A/D converter */
+	}, {
+		I2C_BOARD_INFO("pca9533", 0x62),	/* Leds pca9533 */
+		.platform_data = &pba_pca9532,
+	}
+};
+
+static int __init pcm049_i2c_init(void)
+{
+	/* I2C1 */
+	omap4_pmic_init("twl6030", &pcm049_twldata);
+	i2c_register_board_info(1, pcm049_i2c_1_boardinfo,
+				ARRAY_SIZE(pcm049_i2c_1_boardinfo));
+
+	/* I2C3 */
+	omap_register_i2c_bus(3, 400, pcm049_i2c_3_boardinfo,
+				ARRAY_SIZE(pcm049_i2c_3_boardinfo));
+
+	/* I2C4 */
+	if (omap_mux_init_gpio(OMAP4_PCM049_STMPE811_GPIO_IRQ, OMAP_PIN_INPUT))
+		printk(KERN_ERR "Failed to mux GPIO%d for STMPE811 IRQ\n",
+			OMAP4_PCM049_STMPE811_GPIO_IRQ);
+	else if (gpio_request(OMAP4_PCM049_STMPE811_GPIO_IRQ, "STMPE811 irq"))
+		printk(KERN_ERR "Failed to request GPIO%d for STMPE811 IRQ\n",
+			OMAP4_PCM049_STMPE811_GPIO_IRQ);
+	else
+		gpio_direction_input(OMAP4_PCM049_STMPE811_GPIO_IRQ);
+
+	omap_register_i2c_bus(4, 400, pcm049_i2c_4_boardinfo,
+				ARRAY_SIZE(pcm049_i2c_4_boardinfo));
+	return 0;
+}
+
+#ifdef CONFIG_OMAP_MUX
+static struct omap_board_mux board_mux[] __initdata = {
+	OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+	OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
+
+	/* dispc2_data23 */
+	OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data22 */
+	OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data21 */
+	OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data20 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data19 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data18 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data15 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data14 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data13 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data12 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data11 */
+	OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data10 */
+	OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data9 */
+	OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data16 */
+	OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data17 */
+	OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_hsync */
+	OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_pclk */
+	OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_vsync */
+	OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_de */
+	OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data8 */
+	OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data7 */
+	OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data6 */
+	OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data5 */
+	OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data4 */
+	OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data3 */
+	OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data2 */
+	OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data1 */
+	OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+	/* dispc2_data0 */
+	OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
+
+	{ .reg_offset = OMAP_MUX_TERMINATOR },
+};
+
+static struct omap_device_pad serial2_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart2_cts.uart2_cts",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_rts.uart2_rts",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_rx.uart2_rx",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart2_tx.uart2_tx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_device_pad serial3_pads[] __initdata = {
+	OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
+			 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
+			 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+	OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
+			 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+};
+
+static struct omap_board_data serial2_data __initdata = {
+	.id             = 1,
+	.pads           = serial2_pads,
+	.pads_cnt       = ARRAY_SIZE(serial2_pads),
+};
+
+static struct omap_board_data serial3_data __initdata = {
+	.id             = 2,
+	.pads           = serial3_pads,
+	.pads_cnt       = ARRAY_SIZE(serial3_pads),
+};
+
+static inline void board_serial_init(void)
+{
+	omap_serial_init_port(&serial2_data);
+	omap_serial_init_port(&serial3_data);
+}
+#else
+#define board_mux	NULL
+
+static inline void board_serial_init(void)
+{
+	omap_serial_init();
+}
+#endif
+
+/* Display */
+static int pcm049_panel_enable_lcd(struct omap_dss_device *dssdev)
+{
+	return gpio_direction_output(OMAP4_PCM049_LCD_ENABLE, 1);
+}
+
+static void pcm049_panel_disable_lcd(struct omap_dss_device *dssdev)
+{
+	gpio_direction_output(OMAP4_PCM049_LCD_ENABLE, 0);
+	return;
+}
+
+/* Using generic display panel */
+static struct panel_generic_dpi_data omap4_dpi_panel = {
+	.name			= "pd050vl1",
+	.platform_enable	= pcm049_panel_enable_lcd,
+	.platform_disable	= pcm049_panel_disable_lcd,
+};
+
+struct omap_dss_device pcm049_dpi_device = {
+	.type			= OMAP_DISPLAY_TYPE_DPI,
+	.name			= "dpi",
+	.driver_name		= "generic_dpi_panel",
+	.data			= &omap4_dpi_panel,
+	.phy.dpi.data_lines	= 24,
+	.channel		= OMAP_DSS_CHANNEL_LCD2,
+};
+
+static void pcm049_dvi_mux_init(void)
+{
+	/* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
+	omap_mux_init_signal("hdmi_hpd",
+			OMAP_PIN_INPUT_PULLUP);
+	omap_mux_init_signal("hdmi_cec",
+			OMAP_PIN_INPUT_PULLUP);
+	/* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
+	omap_mux_init_signal("hdmi_ddc_scl",
+			OMAP_PIN_INPUT_PULLUP);
+	omap_mux_init_signal("hdmi_ddc_sda",
+			OMAP_PIN_INPUT_PULLUP);
+}
+
+static struct omap_dss_device  pcm049_dvi_device = {
+	.name = "dvi",
+	.driver_name = "hdmi_panel",
+	.type = OMAP_DISPLAY_TYPE_HDMI,
+	.clocks	= {
+		.dispc	= {
+			.dispc_fclk_src	= OMAP_DSS_CLK_SRC_FCK,
+		},
+		.hdmi	= {
+			.regn	= 15,
+			.regm2	= 1,
+		},
+	},
+	.channel = OMAP_DSS_CHANNEL_DIGIT,
+};
+
+static struct omap_dss_device *pcm049_dss_devices[] = {
+	&pcm049_dpi_device,
+	&pcm049_dvi_device,
+};
+
+static struct omap_dss_board_info pcm049_dss_data = {
+	.num_devices	= ARRAY_SIZE(pcm049_dss_devices),
+	.devices	= pcm049_dss_devices,
+	.default_device = &pcm049_dpi_device,
+};
+
+void pcm049_display_init(void)
+{
+	omap_mux_init_gpio(OMAP4_PCM049_LCD_ENABLE, OMAP_PIN_OUTPUT);
+
+	if ((gpio_request(OMAP4_PCM049_LCD_ENABLE, "DISP_ENA") == 0) &&
+		(gpio_direction_output(OMAP4_PCM049_LCD_ENABLE, 1) == 0)) {
+		gpio_export(OMAP4_PCM049_LCD_ENABLE, 0);
+		gpio_set_value(OMAP4_PCM049_LCD_ENABLE, 0);
+	} else
+		printk(KERN_ERR "could not obtain gpio for DISP_ENA");
+	pcm049_dvi_mux_init();
+	omap_display_init(&pcm049_dss_data);
+}
+
+static struct platform_device *pcm049_devices[] __initdata = {
+	&pcm049_vcc_3v3_device,
+	&leds_gpio,
+};
+
+#define	TWL_PHOENIX_DEV_ON	0x25
+
+static void pcm049_power_off(void)
+{
+	printk(KERN_INFO "Goodbye phyCORE OMAP4!\n");
+	twl_i2c_write_u8(TWL6030_MODULE_ID0, 0x7, TWL_PHOENIX_DEV_ON);
+}
+
+
+static void __init pcm049_init(void)
+{
+	pm_power_off = pcm049_power_off;
+	omap4_mux_init(board_mux, NULL, OMAP_PACKAGE_CBS);
+	pcm049_init_smsc911x();
+	pcm049_i2c_init();
+	platform_add_devices(pcm049_devices, ARRAY_SIZE(pcm049_devices));
+	board_serial_init();
+	omap4_twl6030_hsmmc_init(mmc);
+	omap4_ehci_init();
+	usb_musb_init(&musb_board_data);
+	pcm049_display_init();
+}
+
+static void __init pcm049_map_io(void)
+{
+	omap2_set_globals_443x();
+	omap44xx_map_common_io();
+}
+
+MACHINE_START(PCM049, "phyCORE OMAP4")
+	/* Maintainer: Jan Weitzel - Phytec Messtechnik GmbH */
+	.boot_params	= 0x80000100,
+	.reserve	= omap_reserve,
+	.map_io		= pcm049_map_io,
+	.init_early	= pcm049_init_early,
+	.init_irq	= gic_init_irq,
+	.init_machine	= pcm049_init,
+	.timer		= &omap_timer,
+MACHINE_END
Signature · 1 line
1.7.0.4