* [PATCH 0/3] ARM:OMAP4 add Phytec phyCORE-OMAP4 board
@ 2011-07-08 10:04 Jan Weitzel
2011-07-08 10:04 ` [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile Jan Weitzel
` (2 more replies)
0 siblings, 3 replies; 25+ messages in thread
From: Jan Weitzel @ 2011-07-08 10:04 UTC (permalink / raw)
To: linux-arm-kernel
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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile
2011-07-08 10:04 [PATCH 0/3] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
@ 2011-07-08 10:04 ` Jan Weitzel
2011-07-08 11:49 ` Sergei Shtylyov
2011-07-08 10:04 ` [PATCH 2/3] ARM: OMAP4: add pcm049 DEBUGLL Jan Weitzel
2011-07-08 10:04 ` [PATCH 3/3] ARM: OMAP4: platformcode board-omap4pcm049.c Jan Weitzel
2 siblings, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-08 10:04 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
arch/arm/mach-omap2/Kconfig | 5 +++++
arch/arm/mach-omap2/Makefile | 4 ++++
2 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 19d5891..c6a2d43 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -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
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index b148077..e81b594 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -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 \
--
1.7.0.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/3] ARM: OMAP4: add pcm049 DEBUGLL
2011-07-08 10:04 [PATCH 0/3] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
2011-07-08 10:04 ` [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile Jan Weitzel
@ 2011-07-08 10:04 ` Jan Weitzel
2011-07-08 10:04 ` [PATCH 3/3] ARM: OMAP4: platformcode board-omap4pcm049.c Jan Weitzel
2 siblings, 0 replies; 25+ messages in thread
From: Jan Weitzel @ 2011-07-08 10:04 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
arch/arm/plat-omap/include/plat/uncompress.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h
index ac4b60d..10507a6 100644
--- a/arch/arm/plat-omap/include/plat/uncompress.h
+++ b/arch/arm/plat-omap/include/plat/uncompress.h
@@ -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);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 3/3] ARM: OMAP4: platformcode board-omap4pcm049.c
2011-07-08 10:04 [PATCH 0/3] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
2011-07-08 10:04 ` [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile Jan Weitzel
2011-07-08 10:04 ` [PATCH 2/3] ARM: OMAP4: add pcm049 DEBUGLL Jan Weitzel
@ 2011-07-08 10:04 ` Jan Weitzel
2 siblings, 0 replies; 25+ messages in thread
From: Jan Weitzel @ 2011-07-08 10:04 UTC (permalink / raw)
To: linux-arm-kernel
platformcode for Phytec phyCORE-OMAP4 PCM049 OMAP4430 board.
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
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
diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
new file mode 100644
index 0000000..51bb7a7
--- /dev/null
+++ b/arch/arm/mach-omap2/board-omap4pcm049.c
@@ -0,0 +1,728 @@
+/*
+ * Board support file for Phytec phyCORE-OMAP4 Board.
+ *
+ * Copyright (C) 2011 Phytec Messtechnik GmbH
+ *
+ * Author: Jan Weitzel <armlinux@phytec.de>
+ *
+ * Based on mach-omap2/board-omap4panda.c
+ *
+ * Author: David Anders <x0132446@ti.com>
+ *
+ * Author: Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *
+ * 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
--
1.7.0.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile
2011-07-08 10:04 ` [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile Jan Weitzel
@ 2011-07-08 11:49 ` Sergei Shtylyov
2011-07-08 11:55 ` Tony Lindgren
0 siblings, 1 reply; 25+ messages in thread
From: Sergei Shtylyov @ 2011-07-08 11:49 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
On 08-07-2011 14:04, Jan Weitzel wrote:
> Signed-off-by: Jan Weitzel<j.weitzel@phytec.de>
> ---
> arch/arm/mach-omap2/Kconfig | 5 +++++
> arch/arm/mach-omap2/Makefile | 4 ++++
> 2 files changed, 9 insertions(+), 0 deletions(-)
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 19d5891..c6a2d43 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
[...]
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index b148077..e81b594 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile
2011-07-08 11:49 ` Sergei Shtylyov
@ 2011-07-08 11:55 ` Tony Lindgren
2011-07-08 11:58 ` Felipe Balbi
2011-07-08 12:21 ` [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
0 siblings, 2 replies; 25+ messages in thread
From: Tony Lindgren @ 2011-07-08 11:55 UTC (permalink / raw)
To: linux-arm-kernel
* Sergei Shtylyov <sshtylyov@mvista.com> [110708 04:45]:
> Hello.
>
> On 08-07-2011 14:04, Jan Weitzel wrote:
>
> >Signed-off-by: Jan Weitzel<j.weitzel@phytec.de>
> >---
> > arch/arm/mach-omap2/Kconfig | 5 +++++
> > arch/arm/mach-omap2/Makefile | 4 ++++
> > 2 files changed, 9 insertions(+), 0 deletions(-)
>
> >diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> >index 19d5891..c6a2d43 100644
> >--- a/arch/arm/mach-omap2/Kconfig
> >+++ b/arch/arm/mach-omap2/Kconfig
> [...]
> >diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> >index b148077..e81b594 100644
> >--- a/arch/arm/mach-omap2/Makefile
> >+++ b/arch/arm/mach-omap2/Makefile
> >@@ -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...
Yes looks like this should be just one patch for everything.
Regards,
Tony
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile
2011-07-08 11:55 ` Tony Lindgren
@ 2011-07-08 11:58 ` Felipe Balbi
2011-07-14 7:27 ` Tony Lindgren
2011-07-08 12:21 ` [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
1 sibling, 1 reply; 25+ messages in thread
From: Felipe Balbi @ 2011-07-08 11:58 UTC (permalink / raw)
To: linux-arm-kernel
Hi Tony,
On Fri, Jul 08, 2011 at 04:55:21AM -0700, Tony Lindgren wrote:
> * Sergei Shtylyov <sshtylyov@mvista.com> [110708 04:45]:
> > Hello.
> >
> > On 08-07-2011 14:04, Jan Weitzel wrote:
> >
> > >Signed-off-by: Jan Weitzel<j.weitzel@phytec.de>
> > >---
> > > arch/arm/mach-omap2/Kconfig | 5 +++++
> > > arch/arm/mach-omap2/Makefile | 4 ++++
> > > 2 files changed, 9 insertions(+), 0 deletions(-)
> >
> > >diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> > >index 19d5891..c6a2d43 100644
> > >--- a/arch/arm/mach-omap2/Kconfig
> > >+++ b/arch/arm/mach-omap2/Kconfig
> > [...]
> > >diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> > >index b148077..e81b594 100644
> > >--- a/arch/arm/mach-omap2/Makefile
> > >+++ b/arch/arm/mach-omap2/Makefile
> > >@@ -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...
>
> 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
--
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>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board
2011-07-08 11:55 ` Tony Lindgren
2011-07-08 11:58 ` Felipe Balbi
@ 2011-07-08 12:21 ` Jan Weitzel
2011-07-13 8:03 ` Tony Lindgren
1 sibling, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-08 12:21 UTC (permalink / raw)
To: linux-arm-kernel
This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
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
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 19d5891..c6a2d43 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -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
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index b148077..e81b594 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -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 \
diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
new file mode 100644
index 0000000..51bb7a7
--- /dev/null
+++ b/arch/arm/mach-omap2/board-omap4pcm049.c
@@ -0,0 +1,728 @@
+/*
+ * Board support file for Phytec phyCORE-OMAP4 Board.
+ *
+ * Copyright (C) 2011 Phytec Messtechnik GmbH
+ *
+ * Author: Jan Weitzel <armlinux@phytec.de>
+ *
+ * Based on mach-omap2/board-omap4panda.c
+ *
+ * Author: David Anders <x0132446@ti.com>
+ *
+ * Author: Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *
+ * 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
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h
index ac4b60d..10507a6 100644
--- a/arch/arm/plat-omap/include/plat/uncompress.h
+++ b/arch/arm/plat-omap/include/plat/uncompress.h
@@ -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);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board
2011-07-08 12:21 ` [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
@ 2011-07-13 8:03 ` Tony Lindgren
2011-07-13 10:58 ` Jan Weitzel
0 siblings, 1 reply; 25+ messages in thread
From: Tony Lindgren @ 2011-07-13 8:03 UTC (permalink / raw)
To: linux-arm-kernel
* Jan Weitzel <j.weitzel@phytec.de> [110708 05:16]:
> 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 <j.weitzel@phytec.de>
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.
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
[tony at atomide.com: updated for timer and twl cleanup, and to select the board by default]
Signed-off-by: Tony Lindgren <tony@atomide.com>
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 6b88799..d5e4b60 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -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
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 2d4d18e..7494b04 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -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 \
diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
new file mode 100644
index 0000000..ad8cb46
--- /dev/null
+++ b/arch/arm/mach-omap2/board-omap4pcm049.c
@@ -0,0 +1,602 @@
+/*
+ * Board support file for Phytec phyCORE-OMAP4 Board.
+ *
+ * Copyright (C) 2011 Phytec Messtechnik GmbH
+ *
+ * Author: Jan Weitzel <armlinux@phytec.de>
+ *
+ * Based on mach-omap2/board-omap4panda.c
+ *
+ * Author: David Anders <x0132446@ti.com>
+ *
+ * Author: Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *
+ * 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
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h
index 2b71b17..cb4a6c2 100644
--- a/arch/arm/plat-omap/include/plat/uncompress.h
+++ b/arch/arm/plat-omap/include/plat/uncompress.h
@@ -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);
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board
2011-07-13 8:03 ` Tony Lindgren
@ 2011-07-13 10:58 ` Jan Weitzel
2011-07-13 10:59 ` [PATCH] ARM: OMAP4: PCM049: remove vusim regulator Jan Weitzel
0 siblings, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-13 10:58 UTC (permalink / raw)
To: linux-arm-kernel
Am Mittwoch, den 13.07.2011, 01:03 -0700 schrieb Tony Lindgren:
> * Jan Weitzel <j.weitzel@phytec.de> [110708 05:16]:
> > 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
> Regards,
>
> Tony
>
>
> From: Jan Weitzel <j.weitzel@phytec.de>
> 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.
>
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> [tony at atomide.com: updated for timer and twl cleanup, and to select the board by default]
> Signed-off-by: Tony Lindgren <tony@atomide.com>
>
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 6b88799..d5e4b60 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -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
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 2d4d18e..7494b04 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -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 \
>
> diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
> new file mode 100644
> index 0000000..ad8cb46
> --- /dev/null
> +++ b/arch/arm/mach-omap2/board-omap4pcm049.c
> @@ -0,0 +1,602 @@
> +/*
> + * Board support file for Phytec phyCORE-OMAP4 Board.
> + *
> + * Copyright (C) 2011 Phytec Messtechnik GmbH
> + *
> + * Author: Jan Weitzel <armlinux@phytec.de>
> + *
> + * Based on mach-omap2/board-omap4panda.c
> + *
> + * Author: David Anders <x0132446@ti.com>
> + *
> + * Author: Santosh Shilimkar <santosh.shilimkar@ti.com>
> + *
> + * 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
> diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h
> index 2b71b17..cb4a6c2 100644
> --- a/arch/arm/plat-omap/include/plat/uncompress.h
> +++ b/arch/arm/plat-omap/include/plat/uncompress.h
> @@ -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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-13 10:58 ` Jan Weitzel
@ 2011-07-13 10:59 ` Jan Weitzel
2011-07-13 12:13 ` Sergei Shtylyov
0 siblings, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-13 10:59 UTC (permalink / raw)
To: linux-arm-kernel
vusim is not used.
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
arch/arm/mach-omap2/board-omap4pcm049.c | 16 +---------------
1 files changed, 1 insertions(+), 15 deletions(-)
diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
index ad8cb46..85193ec 100644
--- a/arch/arm/mach-omap2/board-omap4pcm049.c
+++ b/arch/arm/mach-omap2/board-omap4pcm049.c
@@ -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)
{
--
1.7.0.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-13 10:59 ` [PATCH] ARM: OMAP4: PCM049: remove vusim regulator Jan Weitzel
@ 2011-07-13 12:13 ` Sergei Shtylyov
2011-07-13 12:54 ` [PATCH v2] " Jan Weitzel
2011-07-13 12:56 ` [PATCH] " Jan Weitzel
0 siblings, 2 replies; 25+ messages in thread
From: Sergei Shtylyov @ 2011-07-13 12:13 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
On 13-07-2011 14:59, Jan Weitzel wrote:
> vusim is not used.
> Signed-off-by: Jan Weitzel<j.weitzel@phytec.de>
> ---
> arch/arm/mach-omap2/board-omap4pcm049.c | 16 +---------------
> 1 files changed, 1 insertions(+), 15 deletions(-)
> diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
> index ad8cb46..85193ec 100644
> --- a/arch/arm/mach-omap2/board-omap4pcm049.c
> +++ b/arch/arm/mach-omap2/board-omap4pcm049.c
[...]
> @@ -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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-13 12:13 ` Sergei Shtylyov
@ 2011-07-13 12:54 ` Jan Weitzel
2011-07-13 12:56 ` [PATCH] " Jan Weitzel
1 sibling, 0 replies; 25+ messages in thread
From: Jan Weitzel @ 2011-07-13 12:54 UTC (permalink / raw)
To: linux-arm-kernel
vusim is not used.
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
v2:
fix typing error
arch/arm/mach-omap2/board-omap4pcm049.c | 16 +---------------
1 files changed, 1 insertions(+), 15 deletions(-)
diff --git a/arch/arm/mach-omap2/board-omap4pcm049.c b/arch/arm/mach-omap2/board-omap4pcm049.c
index ad8cb46..707929d 100644
--- a/arch/arm/mach-omap2/board-omap4pcm049.c
+++ b/arch/arm/mach-omap2/board-omap4pcm049.c
@@ -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)
{
--
1.7.0.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-13 12:13 ` Sergei Shtylyov
2011-07-13 12:54 ` [PATCH v2] " Jan Weitzel
@ 2011-07-13 12:56 ` Jan Weitzel
2011-07-14 7:34 ` Tony Lindgren
1 sibling, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-13 12:56 UTC (permalink / raw)
To: linux-arm-kernel
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
>
> Have you added that 'i' at the end intentionally?
>
Thank you. It was a tribute to vim.
Jan
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile
2011-07-08 11:58 ` Felipe Balbi
@ 2011-07-14 7:27 ` Tony Lindgren
2011-07-14 7:47 ` Tony Lindgren
0 siblings, 1 reply; 25+ messages in thread
From: Tony Lindgren @ 2011-07-14 7:27 UTC (permalink / raw)
To: linux-arm-kernel
* Felipe Balbi <balbi@ti.com> [110708 04:53]:
>
> 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
> [1] http://marc.info/?t=130199607500006&r=1&w=2
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-13 12:56 ` [PATCH] " Jan Weitzel
@ 2011-07-14 7:34 ` Tony Lindgren
2011-07-14 8:39 ` Jan Weitzel
0 siblings, 1 reply; 25+ messages in thread
From: Tony Lindgren @ 2011-07-14 7:34 UTC (permalink / raw)
To: linux-arm-kernel
* Jan Weitzel <J.Weitzel@phytec.de> [110713 05:51]:
> Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
>
> >
> > 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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile
2011-07-14 7:27 ` Tony Lindgren
@ 2011-07-14 7:47 ` Tony Lindgren
0 siblings, 0 replies; 25+ messages in thread
From: Tony Lindgren @ 2011-07-14 7:47 UTC (permalink / raw)
To: linux-arm-kernel
* Tony Lindgren <tony@atomide.com> [110714 00:22]:
> * Felipe Balbi <balbi@ti.com> [110708 04:53]:
> >
> > 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
> > [1] http://marc.info/?t=130199607500006&r=1&w=2
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-14 7:34 ` Tony Lindgren
@ 2011-07-14 8:39 ` Jan Weitzel
2011-07-15 7:50 ` Tony Lindgren
0 siblings, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-14 8:39 UTC (permalink / raw)
To: linux-arm-kernel
Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
> * Jan Weitzel <J.Weitzel@phytec.de> [110713 05:51]:
> > Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
> >
> > >
> > > 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.
So there is no way to get the board mainline yet?
Jan
> Tony
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-14 8:39 ` Jan Weitzel
@ 2011-07-15 7:50 ` Tony Lindgren
2011-07-15 7:58 ` Felipe Balbi
2011-07-15 9:47 ` Jan Weitzel
0 siblings, 2 replies; 25+ messages in thread
From: Tony Lindgren @ 2011-07-15 7:50 UTC (permalink / raw)
To: linux-arm-kernel
* Jan Weitzel <J.Weitzel@phytec.de> [110714 01:34]:
> Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
> > * Jan Weitzel <J.Weitzel@phytec.de> [110713 05:51]:
> > > Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
> > >
> > > >
> > > > 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.
>
> 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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-15 7:50 ` Tony Lindgren
@ 2011-07-15 7:58 ` Felipe Balbi
2011-07-15 8:20 ` Tony Lindgren
2011-07-15 9:47 ` Jan Weitzel
1 sibling, 1 reply; 25+ messages in thread
From: Felipe Balbi @ 2011-07-15 7:58 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Fri, Jul 15, 2011 at 12:50:24AM -0700, Tony Lindgren wrote:
> * Jan Weitzel <J.Weitzel@phytec.de> [110714 01:34]:
> > Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
> > > * Jan Weitzel <J.Weitzel@phytec.de> [110713 05:51]:
> > > > Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
> > > >
> > > > >
> > > > > 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.
> >
> > 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.
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 ??
--
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>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-15 7:58 ` Felipe Balbi
@ 2011-07-15 8:20 ` Tony Lindgren
2011-07-15 8:31 ` Felipe Balbi
0 siblings, 1 reply; 25+ messages in thread
From: Tony Lindgren @ 2011-07-15 8:20 UTC (permalink / raw)
To: linux-arm-kernel
* Felipe Balbi <balbi@ti.com> [110715 00:53]:
> Hi,
>
> On Fri, Jul 15, 2011 at 12:50:24AM -0700, Tony Lindgren wrote:
> > * Jan Weitzel <J.Weitzel@phytec.de> [110714 01:34]:
> > > Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
> > > > * Jan Weitzel <J.Weitzel@phytec.de> [110713 05:51]:
> > > > > Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
> > > > >
> > > > > >
> > > > > > 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.
> > >
> > > 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.
>
> 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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-15 8:20 ` Tony Lindgren
@ 2011-07-15 8:31 ` Felipe Balbi
2011-07-15 10:59 ` Tony Lindgren
0 siblings, 1 reply; 25+ messages in thread
From: Felipe Balbi @ 2011-07-15 8:31 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Fri, Jul 15, 2011 at 01:20:12AM -0700, Tony Lindgren wrote:
> * Felipe Balbi <balbi@ti.com> [110715 00:53]:
> > Hi,
> >
> > On Fri, Jul 15, 2011 at 12:50:24AM -0700, Tony Lindgren wrote:
> > > * Jan Weitzel <J.Weitzel@phytec.de> [110714 01:34]:
> > > > Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
> > > > > * Jan Weitzel <J.Weitzel@phytec.de> [110713 05:51]:
> > > > > > Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
> > > > > >
> > > > > > >
> > > > > > > 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.
> > > >
> > > > 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.
> >
> > 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):
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 0cfe200..dff174c 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -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);
--
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>
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-15 7:50 ` Tony Lindgren
2011-07-15 7:58 ` Felipe Balbi
@ 2011-07-15 9:47 ` Jan Weitzel
2011-07-15 10:55 ` Tony Lindgren
1 sibling, 1 reply; 25+ messages in thread
From: Jan Weitzel @ 2011-07-15 9:47 UTC (permalink / raw)
To: linux-arm-kernel
Am Freitag, den 15.07.2011, 00:50 -0700 schrieb Tony Lindgren:
> 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
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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-15 9:47 ` Jan Weitzel
@ 2011-07-15 10:55 ` Tony Lindgren
0 siblings, 0 replies; 25+ messages in thread
From: Tony Lindgren @ 2011-07-15 10:55 UTC (permalink / raw)
To: linux-arm-kernel
* Jan Weitzel <J.Weitzel@phytec.de> [110715 02:42]:
> Am Freitag, den 15.07.2011, 00:50 -0700 schrieb Tony Lindgren:
> > 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
> 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.
> 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
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH] ARM: OMAP4: PCM049: remove vusim regulator
2011-07-15 8:31 ` Felipe Balbi
@ 2011-07-15 10:59 ` Tony Lindgren
0 siblings, 0 replies; 25+ messages in thread
From: Tony Lindgren @ 2011-07-15 10:59 UTC (permalink / raw)
To: linux-arm-kernel
* Felipe Balbi <balbi@ti.com> [110715 01:25]:
>
> 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.
> diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
> index 0cfe200..dff174c 100644
> --- a/arch/arm/mach-omap2/board-omap4panda.c
> +++ b/arch/arm/mach-omap2/board-omap4panda.c
> @@ -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);
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
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2011-07-15 10:59 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-08 10:04 [PATCH 0/3] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
2011-07-08 10:04 ` [PATCH 1/3] ARM: OMAP4: Add pcm049 to Kconfig/Makefile Jan Weitzel
2011-07-08 11:49 ` Sergei Shtylyov
2011-07-08 11:55 ` Tony Lindgren
2011-07-08 11:58 ` Felipe Balbi
2011-07-14 7:27 ` Tony Lindgren
2011-07-14 7:47 ` Tony Lindgren
2011-07-08 12:21 ` [PATCH v2] ARM:OMAP4 add Phytec phyCORE-OMAP4 board Jan Weitzel
2011-07-13 8:03 ` Tony Lindgren
2011-07-13 10:58 ` Jan Weitzel
2011-07-13 10:59 ` [PATCH] ARM: OMAP4: PCM049: remove vusim regulator Jan Weitzel
2011-07-13 12:13 ` Sergei Shtylyov
2011-07-13 12:54 ` [PATCH v2] " Jan Weitzel
2011-07-13 12:56 ` [PATCH] " Jan Weitzel
2011-07-14 7:34 ` Tony Lindgren
2011-07-14 8:39 ` Jan Weitzel
2011-07-15 7:50 ` Tony Lindgren
2011-07-15 7:58 ` Felipe Balbi
2011-07-15 8:20 ` Tony Lindgren
2011-07-15 8:31 ` Felipe Balbi
2011-07-15 10:59 ` Tony Lindgren
2011-07-15 9:47 ` Jan Weitzel
2011-07-15 10:55 ` Tony Lindgren
2011-07-08 10:04 ` [PATCH 2/3] ARM: OMAP4: add pcm049 DEBUGLL Jan Weitzel
2011-07-08 10:04 ` [PATCH 3/3] ARM: OMAP4: platformcode board-omap4pcm049.c Jan Weitzel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).