* [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 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 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 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 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] 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] 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 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
* [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 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
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).