ARM:OMAP4 add Phytec phyCORE-OMAP4 board
Subsystems (3)
cover ARM:OMAP4 add Phytec phyCORE-OMAP4 board
This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049. GPMC is used for the smsc911x. A gpmc clk fix is needed.
The lcd display "pd050vl1" for the generic_dpi_panel gets own patch.
Jan
Jan Weitzel (3):
ARM: OMAP4: Add pcm049 to Kconfig/Makefile
ARM: OMAP4: add pcm049 DEBUGLL
ARM: OMAP4: platformcode board-omap4pcm049.c
arch/arm/mach-omap2/Kconfig | 5 + arch/arm/mach-omap2/Makefile | 4 + arch/arm/mach-omap2/board-omap4pcm049.c | 728 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 4 files changed, 738 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile
--- arch/arm/mach-omap2/Kconfig | 5 +++++ arch/arm/mach-omap2/Makefile | 4 ++++ 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +5 -0
@@ -323,6 +323,11 @@ config MACH_OMAP4_PANDA select OMAP_PACKAGE_CBS select REGULATOR_FIXED_VOLTAGE +config MACH_PCM049 + bool "OMAP4 based phyCORE OMAP4" + depends on ARCH_OMAP4 + select OMAP_PACKAGE_CBS + config OMAP3_EMU bool "OMAP3 debugging peripherals" depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ hsmmc.o \ omap_phy_internal.o +obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \ + hsmmc.o \ + omap_phy_internal.o + obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ omap_phy_internal.o \
Signature · 1 line
1.7.0.4
PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile
Hello.
Quoted 10 lines · Jan Weitzel
Signed-off-by Jan Weitzel<[email protected]>--- arch/arm/mach-omap2/Kconfig | 5 +++++ arch/arm/mach-omap2/Makefile | 4 ++++ 2 files changed, 9 insertions(+), 0 deletions(-)arch/arm/mach-omap2/Kconfig +0
-0
[...]
arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 241
Quoted 9 lines
arch/arm/mach-omap2/Makefile +1
-0@@ -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 theMakefile. You could do both in onme patch though...
WBR, Sergei
Tony Lindgren
maintainerPATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile
Quoted 23 lines · Sergei Shtylyov
Hello.
Quoted 10 lines · Jan Weitzel
Signed-off-by Jan Weitzel<[email protected]>--- arch/arm/mach-omap2/Kconfig | 5 +++++ arch/arm/mach-omap2/Makefile | 4 ++++ 2 files changed, 9 insertions(+), 0 deletions(-)arch/arm/mach-omap2/Kconfig +0
-0[...]
Quoted 8 lines
arch/arm/mach-omap2/Makefile +0
-0@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ hsmmc.o \ omap_phy_internal.o
Quoted 4 lines
arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 241
Quoted 1 line
arch/arm/mach-omap2/Makefile +1
-0+obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \You need to first add
board-omap4pcm049.c, and only then wire it
to theMakefile. You could do both in onme patch though...
Yes looks like this should be just one patch for everything.
Regards,
Tony
PATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile
Hi Tony,
Quoted 24 lines · Tony Lindgren
Quoted 23 lines · Sergei Shtylyov
Hello.
Quoted 10 lines · Jan Weitzel
Signed-off-by Jan Weitzel<[email protected]>--- arch/arm/mach-omap2/Kconfig | 5 +++++ arch/arm/mach-omap2/Makefile | 4 ++++ 2 files changed, 9 insertions(+), 0 deletions(-)arch/arm/mach-omap2/Kconfig +0
-0[...]
Quoted 8 lines
arch/arm/mach-omap2/Makefile +0
-0@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ hsmmc.o \ omap_phy_internal.o
Quoted 6 lines
Quoted 4 lines
arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 241
Quoted 1 line
arch/arm/mach-omap2/Makefile +1
-0+obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \You need to first add
board-omap4pcm049.c, and only then wire it
to theMakefile. You could do both in onme patch though...Yes looks like this should be just one patch for everything.
Are you or are you not taking now board files ? We have one which was left out due to a comment from Russell stating that no new board-files would be accepted until the move to device tree was completed [1]
[1] http://marc.info/?t=130199607500006&r=1&w=2
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 490 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110708/91a2ee02/attachment.sig>
Tony Lindgren
maintainerPATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile
Quoted 4 lines · Felipe Balbi
Are you or are you not taking now board files ? We have one which was left out due to a comment from Russell stating that no new board-files would be accepted until the move to device tree was completed [1]
Well looking at the cumulative diffstats, adding these board files with about total of 1000 lines of addition would push our diffstat to positive side. And that's not a good sign of code coalescing.
So I'll carry the board files in testing-board until we have device tree working and won't need those.
Alternatively if somebody combines beagle variants to use board-beagle-common.c and board-panda-common.c then adding new boards would have minimal impact and would probably make device tree conversion of these boards easier too.
Regards,
Tony
Quoted 1 line
Tony Lindgren
maintainerPATCH 1/3 ARM: OMAP4: Add pcm049 to Kconfig/Makefile
Quoted 5 lines · Tony Lindgren
Quoted 4 lines · Felipe Balbi
Are you or are you not taking now board files ? We have one which was left out due to a comment from Russell stating that no new board-files would be accepted until the move to device tree was completed [1]
For the mcop changes, that should be updated against current devel-board for the irq/timer/init_early changes. Then I can add that to testing-board too.
Tony
Quoted 1 line
Quoted 1 line
PATCH v2 1/1 ARM:OMAP4 add Phytec phyCORE-OMAP4 board
In reply to Tony LindgrenThis adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
---
v2:
join
ARM: OMAP4: Add pcm049 to Kconfig/Makefile
ARM: OMAP4: add pcm049 DEBUGLL
ARM: OMAP4: platformcode board-omap4pcm049.c
arch/arm/mach-omap2/Kconfig | 5 + arch/arm/mach-omap2/Makefile | 4 + arch/arm/mach-omap2/board-omap4pcm049.c | 728 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 4 files changed, 738 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
arch/arm/mach-omap2/Kconfig +5 -0
@@ -323,6 +323,11 @@ config MACH_OMAP4_PANDA select OMAP_PACKAGE_CBS select REGULATOR_FIXED_VOLTAGE +config MACH_PCM049 + bool "OMAP4 based phyCORE OMAP4" + depends on ARCH_OMAP4 + select OMAP_PACKAGE_CBS + config OMAP3_EMU bool "OMAP3 debugging peripherals" depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
@@ -238,6 +238,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ hsmmc.o \ omap_phy_internal.o +obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \ + hsmmc.o \ + omap_phy_internal.o + obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ omap_phy_internal.o \
arch/arm/mach-omap2/board-omap4pcm049.c new file +728 -0
728 lines not on this page · raw message
arch/arm/plat-omap/include/plat/uncompress.h +1 -0
@@ -164,6 +164,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* omap4 based boards using UART3 */ DEBUG_LL_OMAP4 (3 , omap_4430sdp);DEBUG_LL_OMAP4 (3 , omap4_panda); +DEBUG_LL_OMAP4 (3 , pcm049);/* zoom2/3 external uart */ DEBUG_LL_ZOOM (omap_zoom2);
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerPATCH v2 1/1 ARM:OMAP4 add Phytec phyCORE-OMAP4 board
Quoted 1 line · Jan Weitzel
This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
I've updated this for the TWL cleanup, that left out about 150 LOC. Will apply to board-part-2 branch.
Jan, can you please check?
Regards,
Tony
From: Jan Weitzel <[email protected]>
Date: Wed, 13 Jul 2011 00:58:26 -0700
Subject: [PATCH] ARM:OMAP4 add Phytec phyCORE-OMAP4 board
This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
arch/arm/mach-omap2/Kconfig +6 -0
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA select OMAP_PACKAGE_CBS select REGULATOR_FIXED_VOLTAGE +config MACH_PCM049 + bool "OMAP4 based phyCORE OMAP4" + depends on ARCH_OMAP4 + default y + select OMAP_PACKAGE_CBS + config OMAP3_EMU bool "OMAP3 debugging peripherals" depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ hsmmc.o \ omap_phy_internal.o +obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \ + hsmmc.o \ + omap_phy_internal.o + obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ omap_phy_internal.o \
arch/arm/mach-omap2/board-omap4pcm049.c new file +602 -0
602 lines not on this page · raw message
arch/arm/plat-omap/include/plat/uncompress.h +1 -0
@@ -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);
PATCH v2 1/1 ARM:OMAP4 add Phytec phyCORE-OMAP4 board
Am Mittwoch, den 13.07.2011, 01:03 -0700 schrieb Tony Lindgren:
Quoted 7 lines · Jan Weitzel
Quoted 1 line
This adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
I've updated this for the TWL cleanup, that left out about 150 LOC. Will apply to board-part-2 branch.
Jan, can you please check?
works fine for me. I see vusim is not used in our board. I will send a patch to remove it also.
Jan
Quoted 671 lines
Regards,
Tony
From: Jan Weitzel <[email protected]>
Date: Wed, 13 Jul 2011 00:58:26 -0700
Subject: [PATCH] ARM:OMAP4 add Phytec phyCORE-OMAP4 boardThis adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
Signed-off-by Jan Weitzel <[email protected]>[tony at atomide.com: updated for timer and twl cleanup, and to select the board by default]Signed-off-by Tony Lindgren <[email protected]>arch/arm/mach-omap2/Kconfig +6
-0@@ -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_OMAP3arch/arm/mach-omap2/Makefile +4
-0@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ hsmmc.o \ omap_phy_internal.o +obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \ + hsmmc.o \ + omap_phy_internal.o + obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ omap_phy_internal.o \arch/arm/mach-omap2/board-omap4pcm049.c new file +602
-0@@ -0,0 +1,602 @@ +/* +* Board support file for Phytec phyCORE-OMAP4 Board. +* +* Copyright (C) 2011 Phytec Messtechnik GmbH +* +* Author: Jan Weitzel <[email protected]> +* +* Based on mach-omap2/board-omap4panda.c +* +* Author: David Anders <[email protected]> +* +* Author: Santosh Shilimkar <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/leds.h> +#include <linux/gpio.h> +#include <linux/usb/otg.h> +#include <linux/i2c/twl.h> +#include <linux/i2c/at24.h> +#include <linux/mfd/stmpe.h> +#include <linux/leds-pca9532.h> +#include <linux/regulator/machine.h> +#include <linux/regulator/fixed.h> +#include <linux/smsc911x.h> + +#include <mach/hardware.h> +#include <mach/omap4-common.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <video/omapdss.h> + +#include <plat/board.h> +#include <plat/common.h> +#include <plat/usb.h> +#include <plat/gpmc.h> +#include <plat/gpmc-smsc911x.h> +#include <plat/mmc.h> +#include <video/omap-panel-generic-dpi.h> + +#include "hsmmc.h" +#include "control.h" +#include "mux.h" +#include "common-board-devices.h" + +#define OMAP4_PCM049_ETH_GPIO_IRQ 121 +#define OMAP4_PCM049_ETH_CS 5 +#define OMAP4_PCM049_STMPE811_GPIO_IRQ 117 +#define OMAP4_PCM049_LCD_ENABLE 118 + +static struct gpio_led gpio_leds[] = { + { + .name ="modul:red:status1" , + .default_trigger ="heartbeat" , + .gpio =152 , + }, + { + .name ="modul:green:status2" , + .default_trigger ="mmc0" , + .gpio =153 , + }, +}; + +static struct gpio_led_platform_data gpio_led_info = { + .leds = gpio_leds, + .num_leds =ARRAY_SIZE (gpio_leds), +}; + +static struct platform_device leds_gpio = { + .name ="leds-gpio" , + .id =-1 , + .dev = { + .platform_data = &gpio_led_info, + }, +}; + +static void __init pcm049_init_early (void ) +{ +omap2_init_common_infrastructure (); +omap2_init_common_devices (NULL ,NULL ); +} + +static const struct usbhs_omap_board_data usbhs_bdata__initconst = { + .port_mode[0 ] =OMAP_EHCI_PORT_MODE_PHY , + .port_mode[1 ] =OMAP_USBHS_PORT_MODE_UNUSED , + .port_mode[2 ] =OMAP_USBHS_PORT_MODE_UNUSED , + .phy_reset = false, + .reset_gpio_port[0 ] = -EINVAL , + .reset_gpio_port[1 ] = -EINVAL , + .reset_gpio_port[2 ] = -EINVAL +}; + +static void __init omap4_ehci_init (void ) +{ +struct clk *phy_ref_clk; +/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */ + phy_ref_clk =clk_get (NULL ,"auxclk3_ck" ); +if (IS_ERR (phy_ref_clk)) { +pr_err ("Cannot request auxclk3\n" ); +return ; + } +clk_set_rate (phy_ref_clk,19200000 ); +clk_enable (phy_ref_clk); + +usbhs_init (&usbhs_bdata); +return ; +} + +static struct omap_musb_board_data musb_board_data = { + .interface_type =MUSB_INTERFACE_UTMI , + .mode =MUSB_OTG , + .power =100 , +}; + +static struct omap2_hsmmc_info mmc[] = { + { + .mmc =1 , + .caps =MMC_CAP_4_BIT_DATA , + .gpio_wp = -EINVAL , + .gpio_cd = -EINVAL , + }, { + .mmc =5 , + .caps =MMC_CAP_4_BIT_DATA , + .gpio_wp = -EINVAL , + .gpio_cd =30 ,/* wk30 */ + .ocr_mask =MMC_VDD_32_33 |MMC_VDD_33_34 ,/* 3V3 */ + }, {}/* Terminator */ +}; + +#if defined(CONFIG_SMSC911X ) || defined(CONFIG_SMSC911X_MODULE ) +static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = { + .cs =OMAP4_PCM049_ETH_CS , + .gpio_irq =OMAP4_PCM049_ETH_GPIO_IRQ , + .gpio_reset = -EINVAL , + .flags =SMSC911X_USE_16BIT , +}; + +static inline void __init pcm049_init_smsc911x (void ) +{ +omap_mux_init_gpio (OMAP4_PCM049_ETH_GPIO_IRQ ,OMAP_PIN_INPUT ); +gpmc_smsc911x_init (&board_smsc911x_data); +} +#else +static inline void __init pcm049_init_smsc911x (void ) {return ; } +#endif + +static int omap4_twl6030_hsmmc_late_init (struct device *dev) +{ +int ret =0 ; +struct platform_device *pdev =container_of (dev, + struct platform_device, dev); +struct omap_mmc_platform_data *pdata = dev->platform_data; + +/* Setting MMC1 Card detect Irq */ +if (pdev->id ==0 ) { + ret =twl6030_mmc_card_detect_config (); +if (ret) +dev_err (dev,"%s: Error card detect config(%d)\n" , + __func__, ret); + pdata->slots[0 ].card_detect_irq =TWL6030_IRQ_BASE + +MMCDETECT_INTR_OFFSET ; + pdata->slots[0 ].card_detect = twl6030_mmc_card_detect; + } +return ret; +} + +static __init void omap4_twl6030_hsmmc_set_late_init (struct device *dev) +{ +struct omap_mmc_platform_data *pdata; + +/* dev can be null if CONFIG_MMC_OMAP_HS is not set */ +if (!dev) { +pr_err ("Failed omap4_twl6030_hsmmc_set_late_init\n" ); +return ; + } + pdata = dev->platform_data; + + pdata->init = omap4_twl6030_hsmmc_late_init; +} + +static int __init omap4_twl6030_hsmmc_init (struct omap2_hsmmc_info *controllers) +{ +struct omap2_hsmmc_info *c; + +omap2_hsmmc_init (controllers); +for (c = controllers; c->mmc; c++) +omap4_twl6030_hsmmc_set_late_init (c->dev); + +return 0 ; +} + +/* Fixed regulator for max1027 */ +static struct regulator_consumer_supply pcm049_vcc_3v3_consumer_supply[] = { +REGULATOR_SUPPLY ("vcc" ,"4-0064" ), +}; + +struct regulator_init_data pcm049_vcc_3v3_initdata = { + .consumer_supplies = pcm049_vcc_3v3_consumer_supply, + .num_consumer_supplies =ARRAY_SIZE (pcm049_vcc_3v3_consumer_supply), + .constraints = { + .valid_ops_mask =REGULATOR_CHANGE_STATUS , + }, +}; + +static struct fixed_voltage_config pcm049_vcc_3v3_config = { + .supply_name ="pcm049_vcc_3v3" , + .microvolts =3300000 , + .gpio = -EINVAL , + .enabled_at_boot =1 , + .init_data = &pcm049_vcc_3v3_initdata, +}; + +static struct platform_device pcm049_vcc_3v3_device = { + .name ="reg-fixed-voltage" , + .id =0 , + .dev = { + .platform_data = &pcm049_vcc_3v3_config, + }, +}; + +static struct regulator_init_data pcm049_vusim = { + .constraints = { + .min_uV =1800000 , + .max_uV =3300000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct at24_platform_data board_eeprom = { + .byte_len =4096 , + .page_size =32 , + .flags =AT24_FLAG_ADDR16 , +}; + +static struct stmpe_gpio_platform_data pba_gpio_stm_data = { + .gpio_base =-1 , + .norequest_mask =STMPE_GPIO_NOREQ_811_TOUCH , +}; + +static struct stmpe_ts_platform_data pba_ts_stm_pdata = { + .sample_time =4 , + .mod_12b =1 , + .ref_sel =0 , + .adc_freq =1 , + .ave_ctrl =3 , + .touch_det_delay =3 , + .settling =3 , + .fraction_z =7 , + .i_drive =0 , +}; + +static struct stmpe_platform_data pba_stm_pdata = { + .blocks =STMPE_BLOCK_GPIO |STMPE_BLOCK_TOUCHSCREEN , + .irq_base =TWL6030_IRQ_END , + .irq_trigger =IRQF_TRIGGER_RISING , + .irq_invert_polarity = true, + .gpio = &pba_gpio_stm_data, + .ts = &pba_ts_stm_pdata, +}; + +static struct pca9532_platform_data pba_pca9532 = { + .leds = { + { + .name ="board:red:free_use1" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, { + .name ="board:yellow:free_use2" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, { + .name ="board:yellow:free_use3" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, { + .name ="board:green:free_use4" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, + }, + .psc = {1 ,1 }, + .pwm = {1 ,1 }, +}; + +static struct i2c_board_info __initdata pcm049_i2c_1_boardinfo[] = { + { +I2C_BOARD_INFO ("at24" ,0x57 ),/* E0=1, E1=1, E2=1 */ + .platform_data = &board_eeprom, + }, +}; + +static struct i2c_board_info __initdata pcm049_i2c_3_boardinfo[] = { +}; + +static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { + { +I2C_BOARD_INFO ("stmpe811" ,0x41 ),/* Touch controller */ + .irq =OMAP_GPIO_IRQ (OMAP4_PCM049_STMPE811_GPIO_IRQ ), + .platform_data = &pba_stm_pdata, + }, { +I2C_BOARD_INFO ("max1037" ,0x64 ),/* A/D converter */ + }, { +I2C_BOARD_INFO ("pca9533" ,0x62 ),/* Leds pca9533 */ + .platform_data = &pba_pca9532, + } +}; + +static struct twl4030_platform_data pcm049_twldata = { + .vusim = &pcm049_vusim, +}; + +static int __init pcm049_i2c_init (void ) +{ +/* I2C1 */ +omap4_pmic_get_config (&pcm049_twldata,TWL_COMMON_PDATA_USB , +TWL_COMMON_REGULATOR_VDAC | +TWL_COMMON_REGULATOR_VAUX2 | +TWL_COMMON_REGULATOR_VAUX3 | +TWL_COMMON_REGULATOR_VMMC | +TWL_COMMON_REGULATOR_VPP | +TWL_COMMON_REGULATOR_VANA | +TWL_COMMON_REGULATOR_VCXIO | +TWL_COMMON_REGULATOR_VUSB | +TWL_COMMON_REGULATOR_CLK32KG ); +omap4_pmic_init ("twl6030" , &pcm049_twldata); +i2c_register_board_info (1 , pcm049_i2c_1_boardinfo, +ARRAY_SIZE (pcm049_i2c_1_boardinfo)); + +/* I2C3 */ +omap_register_i2c_bus (3 ,400 , pcm049_i2c_3_boardinfo, +ARRAY_SIZE (pcm049_i2c_3_boardinfo)); + +/* I2C4 */ +if (omap_mux_init_gpio (OMAP4_PCM049_STMPE811_GPIO_IRQ ,OMAP_PIN_INPUT )) +printk (KERN_ERR "Failed to mux GPIO%d for STMPE811 IRQ\n" , +OMAP4_PCM049_STMPE811_GPIO_IRQ ); +else if (gpio_request (OMAP4_PCM049_STMPE811_GPIO_IRQ ,"STMPE811 irq" )) +printk (KERN_ERR "Failed to request GPIO%d for STMPE811 IRQ\n" , +OMAP4_PCM049_STMPE811_GPIO_IRQ ); +else +gpio_direction_input (OMAP4_PCM049_STMPE811_GPIO_IRQ ); + +omap_register_i2c_bus (4 ,400 , pcm049_i2c_4_boardinfo, +ARRAY_SIZE (pcm049_i2c_4_boardinfo)); +return 0 ; +} + +#ifdef CONFIG_OMAP_MUX +static struct omap_board_mux board_mux[]__initdata = { +OMAP4_MUX (SDMMC5_DAT0 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT1 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT2 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT3 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), + +/* dispc2_data23 */ +OMAP4_MUX (USBB2_ULPITLL_STP ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data22 */ +OMAP4_MUX (USBB2_ULPITLL_DIR ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data21 */ +OMAP4_MUX (USBB2_ULPITLL_NXT ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data20 */ +OMAP4_MUX (USBB2_ULPITLL_DAT0 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data19 */ +OMAP4_MUX (USBB2_ULPITLL_DAT1 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data18 */ +OMAP4_MUX (USBB2_ULPITLL_DAT2 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data15 */ +OMAP4_MUX (USBB2_ULPITLL_DAT3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data14 */ +OMAP4_MUX (USBB2_ULPITLL_DAT4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data13 */ +OMAP4_MUX (USBB2_ULPITLL_DAT5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data12 */ +OMAP4_MUX (USBB2_ULPITLL_DAT6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data11 */ +OMAP4_MUX (USBB2_ULPITLL_DAT7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data10 */ +OMAP4_MUX (DPM_EMU3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data9 */ +OMAP4_MUX (DPM_EMU4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data16 */ +OMAP4_MUX (DPM_EMU5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data17 */ +OMAP4_MUX (DPM_EMU6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_hsync */ +OMAP4_MUX (DPM_EMU7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_pclk */ +OMAP4_MUX (DPM_EMU8 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_vsync */ +OMAP4_MUX (DPM_EMU9 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_de */ +OMAP4_MUX (DPM_EMU10 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data8 */ +OMAP4_MUX (DPM_EMU11 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data7 */ +OMAP4_MUX (DPM_EMU12 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data6 */ +OMAP4_MUX (DPM_EMU13 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data5 */ +OMAP4_MUX (DPM_EMU14 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data4 */ +OMAP4_MUX (DPM_EMU15 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data3 */ +OMAP4_MUX (DPM_EMU16 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data2 */ +OMAP4_MUX (DPM_EMU17 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data1 */ +OMAP4_MUX (DPM_EMU18 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data0 */ +OMAP4_MUX (DPM_EMU19 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), + + { .reg_offset =OMAP_MUX_TERMINATOR }, +}; + +static struct omap_device_pad serial2_pads[]__initdata = { +OMAP_MUX_STATIC ("uart2_cts.uart2_cts" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_rts.uart2_rts" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_rx.uart2_rx" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_tx.uart2_tx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_device_pad serial3_pads[]__initdata = { +OMAP_MUX_STATIC ("uart3_cts_rctx.uart3_cts_rctx" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_rts_sd.uart3_rts_sd" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_rx_irrx.uart3_rx_irrx" , +OMAP_PIN_INPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_tx_irtx.uart3_tx_irtx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_board_data serial2_data__initdata = { + .id =1 , + .pads = serial2_pads, + .pads_cnt =ARRAY_SIZE (serial2_pads), +}; + +static struct omap_board_data serial3_data__initdata = { + .id =2 , + .pads = serial3_pads, + .pads_cnt =ARRAY_SIZE (serial3_pads), +}; + +static inline void board_serial_init (void ) +{ +omap_serial_init_port (&serial2_data); +omap_serial_init_port (&serial3_data); +} +#else +#define board_mux NULL + +static inline void board_serial_init (void ) +{ +omap_serial_init (); +} +#endif + +/* Display */ +static int pcm049_panel_enable_lcd (struct omap_dss_device *dssdev) +{ +return gpio_direction_output (OMAP4_PCM049_LCD_ENABLE ,1 ); +} + +static void pcm049_panel_disable_lcd (struct omap_dss_device *dssdev) +{ +gpio_direction_output (OMAP4_PCM049_LCD_ENABLE ,0 ); +return ; +} + +/* Using generic display panel */ +static struct panel_generic_dpi_data omap4_dpi_panel = { + .name ="pd050vl1" , + .platform_enable = pcm049_panel_enable_lcd, + .platform_disable = pcm049_panel_disable_lcd, +}; + +struct omap_dss_device pcm049_dpi_device = { + .type =OMAP_DISPLAY_TYPE_DPI , + .name ="dpi" , + .driver_name ="generic_dpi_panel" , + .data = &omap4_dpi_panel, + .phy.dpi.data_lines =24 , + .channel =OMAP_DSS_CHANNEL_LCD2 , +}; + +static void pcm049_dvi_mux_init (void ) +{ +/* PAD0_HDMI_HPD_PAD1_HDMI_CEC */ +omap_mux_init_signal ("hdmi_hpd" , +OMAP_PIN_INPUT_PULLUP ); +omap_mux_init_signal ("hdmi_cec" , +OMAP_PIN_INPUT_PULLUP ); +/* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */ +omap_mux_init_signal ("hdmi_ddc_scl" , +OMAP_PIN_INPUT_PULLUP ); +omap_mux_init_signal ("hdmi_ddc_sda" , +OMAP_PIN_INPUT_PULLUP ); +} + +static struct omap_dss_device pcm049_dvi_device = { + .name ="dvi" , + .driver_name ="hdmi_panel" , + .type =OMAP_DISPLAY_TYPE_HDMI , + .clocks = { + .dispc = { + .dispc_fclk_src =OMAP_DSS_CLK_SRC_FCK , + }, + .hdmi = { + .regn =15 , + .regm2 =1 , + }, + }, + .channel =OMAP_DSS_CHANNEL_DIGIT , +}; + +static struct omap_dss_device *pcm049_dss_devices[] = { + &pcm049_dpi_device, + &pcm049_dvi_device, +}; + +static struct omap_dss_board_info pcm049_dss_data = { + .num_devices =ARRAY_SIZE (pcm049_dss_devices), + .devices = pcm049_dss_devices, + .default_device = &pcm049_dpi_device, +}; + +void pcm049_display_init (void ) +{ +omap_mux_init_gpio (OMAP4_PCM049_LCD_ENABLE ,OMAP_PIN_OUTPUT ); + +if ((gpio_request (OMAP4_PCM049_LCD_ENABLE ,"DISP_ENA" ) ==0 ) && + (gpio_direction_output (OMAP4_PCM049_LCD_ENABLE ,1 ) ==0 )) { +gpio_export (OMAP4_PCM049_LCD_ENABLE ,0 ); +gpio_set_value (OMAP4_PCM049_LCD_ENABLE ,0 ); + }else +printk (KERN_ERR "could not obtain gpio for DISP_ENA" ); +pcm049_dvi_mux_init (); +omap_display_init (&pcm049_dss_data); +} + +static struct platform_device *pcm049_devices[]__initdata = { + &pcm049_vcc_3v3_device, + &leds_gpio, +}; + +#define TWL_PHOENIX_DEV_ON 0x25 + +static void pcm049_power_off (void ) +{ +printk (KERN_INFO "Goodbye phyCORE OMAP4!\n" ); +twl_i2c_write_u8 (TWL6030_MODULE_ID0 ,0x7 ,TWL_PHOENIX_DEV_ON ); +} + + +static void __init pcm049_init (void ) +{ + pm_power_off = pcm049_power_off; +omap4_mux_init (board_mux,NULL ,OMAP_PACKAGE_CBS ); +pcm049_init_smsc911x (); +pcm049_i2c_init (); +platform_add_devices (pcm049_devices,ARRAY_SIZE (pcm049_devices)); +board_serial_init (); +omap4_twl6030_hsmmc_init (mmc); +omap4_ehci_init (); +usb_musb_init (&musb_board_data); +pcm049_display_init (); +} + +static void __init pcm049_map_io (void ) +{ +omap2_set_globals_443x (); +omap44xx_map_common_io (); +} + +MACHINE_START (PCM049 ,"phyCORE OMAP4" ) +/* Maintainer: Jan Weitzel - Phytec Messtechnik GmbH */ + .boot_params = 0x80000100, + .reserve = omap_reserve, + .map_io = pcm049_map_io, + .init_early = pcm049_init_early, + .init_irq = gic_init_irq, + .init_machine = pcm049_init, + .timer = &omap4_timer, +MACHINE_END arch/arm/plat-omap/include/plat/uncompress.h +1
-1@@ -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
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
vusim is not used.
--- arch/arm/mach-omap2/board-omap4pcm049.c | 16 +--------------- 1 files changed, 1 insertions(+), 15 deletions(-)
arch/arm/mach-omap2/board-omap4pcm049.c +1 -15
@@ -227,18 +227,6 @@ static struct platform_device pcm049_vcc_3v3_device = { }, }; -static struct regulator_init_data pcm049_vusim = { - .constraints = { - .min_uV =1800000 , - .max_uV =3300000 , - .apply_uV = true, - .valid_modes_mask =REGULATOR_MODE_NORMAL - |REGULATOR_MODE_STANDBY , - .valid_ops_mask =REGULATOR_CHANGE_MODE - |REGULATOR_CHANGE_STATUS , - }, -}; -static struct at24_platform_data board_eeprom = { .byte_len =4096 , .page_size =32 ,
@@ -318,9 +306,7 @@ static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { } }; -static struct twl4030_platform_data pcm049_twldata = { - .vusim = &pcm049_vusim, -}; +static struct twl4030_platform_data pcm049_twldatai;static int __init pcm049_i2c_init (void ) {
Signature · 1 line
1.7.0.4
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Hello.
Quoted 11 lines · Jan Weitzel
vusim is not used.
Signed-off-by Jan Weitzel<[email protected]>--- arch/arm/mach-omap2/board-omap4pcm049.c | 16 +--------------- 1 files changed, 1 insertions(+), 15 deletions(-)arch/arm/mach-omap2/board-omap4pcm049.c +0
-0
[...]
arch/arm/mach-omap2/board-omap4pcm049.c static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { · line 309
Quoted 8 lines
arch/arm/mach-omap2/board-omap4pcm049.c +1
-3@@ -318,9 +306,7 @@ static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { } }; -static struct twl4030_platform_data pcm049_twldata = { - .vusim =&pcm049_vusim, -}; +static struct twl4030_platform_data pcm049_twldatai;
Have you added that 'i' at the end intentionally?
WBR, Sergei
PATCH v2 1/1 ARM: OMAP4: PCM049: remove vusim regulator
vusim is not used.
---
v2:
fix typing error
arch/arm/mach-omap2/board-omap4pcm049.c | 16 +--------------- 1 files changed, 1 insertions(+), 15 deletions(-)
arch/arm/mach-omap2/board-omap4pcm049.c +1 -15
@@ -227,18 +227,6 @@ static struct platform_device pcm049_vcc_3v3_device = { }, }; -static struct regulator_init_data pcm049_vusim = { - .constraints = { - .min_uV =1800000 , - .max_uV =3300000 , - .apply_uV = true, - .valid_modes_mask =REGULATOR_MODE_NORMAL - |REGULATOR_MODE_STANDBY , - .valid_ops_mask =REGULATOR_CHANGE_MODE - |REGULATOR_CHANGE_STATUS , - }, -}; -static struct at24_platform_data board_eeprom = { .byte_len =4096 , .page_size =32 ,
@@ -318,9 +306,7 @@ static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { } }; -static struct twl4030_platform_data pcm049_twldata = { - .vusim = &pcm049_vusim, -}; +static struct twl4030_platform_data pcm049_twldata;static int __init pcm049_i2c_init (void ) {
Signature · 1 line
1.7.0.4
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
In reply to Sergei ShtylyovAm Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Thank you. It was a tribute to vim.
Jan
Tony Lindgren
maintainerPATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Quoted 6 lines · Jan Weitzel
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Thank you. It was a tribute to vim.
:i)
I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.
Tony
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
Quoted 6 lines · Jan Weitzel
Quoted 5 lines
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Quoted 7 lines
Quoted 1 line
Thank you. It was a tribute to vim.
:i)
I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.
So there is no way to get the board mainline yet?
Jan
Quoted 6 lines
Tony
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Tony Lindgren
maintainerPATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Quoted 9 lines · Jan Weitzel
Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
Quoted 8 lines · Jan Weitzel
Quoted 6 lines
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Thank you. It was a tribute to vim.
Quoted 7 lines
Quoted 5 lines
:i)
I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.
So there is no way to get the board mainline yet?
Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating board-panda-common.c or similar so the code can be shared amongst the panda variants.
It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.
Adding the pending boards without combining code would be adding code that will be going away for most part with the device tree support.
And most likely the beagle and panda based boards will be the first ones to work with device tree. So anything we can do to have common board init code will also help with this effort.
Regards,
Tony
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Hi,
Quoted 18 lines · Tony Lindgren
Quoted 9 lines · Jan Weitzel
Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
Quoted 8 lines · Jan Weitzel
Quoted 6 lines
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Thank you. It was a tribute to vim.
Quoted 7 lines
Quoted 5 lines
:i)
I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.
So there is no way to get the board mainline yet?
Quoted 8 lines
Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating
board-panda-common.cor similar so the code can be shared amongst the panda variants.It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.
isn't it easier than to just add a few if (machine_is_xxxx()) checks and another MACHINE_START() to board-omap4panda.c rather than creating a new file, shuffling code around and then adding a new board file ??
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 490 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110715/125881cc/attachment-0001.sig>
Tony Lindgren
maintainerPATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Quoted 26 lines · Felipe Balbi
Hi,
Quoted 23 lines · Tony Lindgren
Quoted 9 lines · Jan Weitzel
Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
Quoted 8 lines · Jan Weitzel
Quoted 6 lines
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Thank you. It was a tribute to vim.
Quoted 7 lines
Quoted 5 lines
:i)
I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.
So there is no way to get the board mainline yet?
Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating
board-panda-common.cor similar so the code can be shared amongst the panda variants.
Quoted 7 lines
Quoted 3 lines
It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.
isn't it easier than to just add a few if (
machine_is_xxxx()) checks and anotherMACHINE_START()toboard-omap4panda.crather 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
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Hi,
Quoted 31 lines · Tony Lindgren
Quoted 30 lines · Felipe Balbi
Hi,
Quoted 26 lines · Tony Lindgren
Quoted 9 lines · Jan Weitzel
Am Donnerstag, den 14.07.2011, 00:34 -0700 schrieb Tony Lindgren:
Quoted 8 lines · Jan Weitzel
Quoted 6 lines
Am Mittwoch, den 13.07.2011, 16:13 +0400 schrieb Sergei Shtylyov:
Quoted 3 lines
Have you added that 'i' at the end intentionally?
Thank you. It was a tribute to vim.
Quoted 7 lines
Quoted 5 lines
:i)
I'll fold the fixed patch into your original patch. Will also keep the new board files in testing-board because of the code coalescing and device tree conversion effort.
So there is no way to get the board mainline yet?
Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating
board-panda-common.cor similar so the code can be shared amongst the panda variants.It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.
Quoted 5 lines
Quoted 3 lines
isn't it easier than to just add a few if (
machine_is_xxxx()) checks and anotherMACHINE_START()toboard-omap4panda.crather than creating a new file, shuffling code around and then adding a new board file ??That works too if the
init_machinedoes not get too complicated.
possibly something like this (still missing MACHINE_START a few more things):
arch/arm/mach-omap2/board-omap4panda.c +27 -3
@@ -681,20 +681,44 @@ void omap4_panda_display_init(void)omap_display_init (&omap4_panda_dss_data); } +static struct omap_smsc911x_platform_data board_smsc911x_data__initdata = { + .cs =OMAP4_SMSC911X_ETH_CS , + .gpio_irq =OMAP4_SMSC911X_ETH_GPIO_IRQ , + .gpio_reset = -EINVAL , + .flags =SMSC911X_USE_16BIT , +}; + +static void __init omap4_panda_smsc91xx_init (void ) +{ +if (!machine_is_pcm049 ()) +return ; + +omap_mux_init_gpio (OMAP4_PCM049_ETH_GPIO_IRQ ,OMAP_PIN_INPUT ); +gpmc_smsc911x_init (&board_smsc911x_data); +} +static void __init omap4_panda_init (void ) {int package =OMAP_PACKAGE_CBS ;if (omap_rev () ==OMAP4430_REV_ES1_0 ) package =OMAP_PACKAGE_CBL ; +omap4_mux_init (board_mux,NULL , package); -if (wl12xx_set_platform_data (&omap_panda_wlan_data)) -pr_err ("error setting wl12xx data\n" ); +if (machine_is_omap4panda ()) { +int ret; + + ret =wl12xx_set_platform_data (&omap_panda_wlan_data); +if (ret) +pr_err ("error setting wl12xx data\n" ); + +platform_device_register (&omap_vwlan_device); + } +omap4_panda_smsc91xx_init ();omap4_panda_i2c_init ();platform_add_devices (panda_devices,ARRAY_SIZE (panda_devices)); -platform_device_register (&omap_vwlan_device);board_serial_init ();omap4_twl6030_hsmmc_init (mmc);
Signature · 8 lines
balbi -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 490 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110715/d0fbe0d4/attachment.sig>
Tony Lindgren
maintainerPATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Quoted 3 lines · Felipe Balbi
possibly something like this (still missing
MACHINE_STARTa few more things):
Yes and it would be better to initialize data in the .init_machine to avoid adding machine_is tests in multiple places.
Quoted 41 lines
arch/arm/mach-omap2/board-omap4panda.c +23
-2@@ -681,20 +681,44 @@ void omap4_panda_display_init(void)omap_display_init (&omap4_panda_dss_data); } +static struct omap_smsc911x_platform_data board_smsc911x_data__initdata = { + .cs =OMAP4_SMSC911X_ETH_CS , + .gpio_irq =OMAP4_SMSC911X_ETH_GPIO_IRQ , + .gpio_reset = -EINVAL , + .flags =SMSC911X_USE_16BIT , +}; + +static void __init omap4_panda_smsc91xx_init (void ) +{ +if (!machine_is_pcm049 ()) +return ; + +omap_mux_init_gpio (OMAP4_PCM049_ETH_GPIO_IRQ ,OMAP_PIN_INPUT ); +gpmc_smsc911x_init (&board_smsc911x_data); +} +static void __init omap4_panda_init (void ) {int package =OMAP_PACKAGE_CBS ;if (omap_rev () ==OMAP4430_REV_ES1_0 ) package =OMAP_PACKAGE_CBL ; +omap4_mux_init (board_mux,NULL , package); -if (wl12xx_set_platform_data (&omap_panda_wlan_data)) -pr_err ("error setting wl12xx data\n" ); +if (machine_is_omap4panda ()) { +int ret; + + ret =wl12xx_set_platform_data (&omap_panda_wlan_data); +if (ret) +pr_err ("error setting wl12xx data\n" );
arch/arm/mach-omap2/board-omap4panda.c void omap4_panda_display_init(void) · line 723
Quoted 10 lines
arch/arm/mach-omap2/board-omap4panda.c +4
-1+ +platform_device_register (&omap_vwlan_device); + } +omap4_panda_smsc91xx_init ();omap4_panda_i2c_init ();platform_add_devices (panda_devices,ARRAY_SIZE (panda_devices)); -platform_device_register (&omap_vwlan_device);board_serial_init ();omap4_twl6030_hsmmc_init (mmc);
So we sould have panda_common_init() and then omap4_panda_init() and omap4_phycore_init() or something like that. No need for machine_is tests then as the .machine_init already takes care of that test.
Regards,
Tony
PATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
In reply to Tony LindgrenAm Freitag, den 15.07.2011, 00:50 -0700 schrieb Tony Lindgren:
Quoted 12 lines
Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating
board-panda-common.cor similar so the code can be shared amongst the panda variants.It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.
Adding the pending boards without combining code would be adding code that will be going away for most part with the device tree support.
Quoted 7 lines
And most likely the beagle and panda based boards will be the first ones to work with device tree. So anything we can do to have common board init code will also help with this effort.
Regards,
Tony
pcm049 and panda board have some more different devices.
I am working on patches to add NAND support and using tlv320aic3x audio codec which need regulators in platformcode. I need a hack to controll usb otg by gpio (controlling a external power circuit). The patches are not mainline ready by now.
If using machine_is_xxxx() in board-omap4panda.c then also is good way, I could provide our board as patches on top of board-omap4panda.c. When will pandaboard use device tree to boot?
Kind Regards,
Jan
Tony Lindgren
maintainerPATCH 1/1 ARM: OMAP4: PCM049: remove vusim regulator
Quoted 17 lines · Jan Weitzel
Am Freitag, den 15.07.2011, 00:50 -0700 schrieb Tony Lindgren:
Quoted 16 lines
Well we can add it even before device tree support if it makes sense from code coalescing point of view. In this case it would mean creating
board-panda-common.cor similar so the code can be shared amongst the panda variants.It seems that some GPIO pins are different and there are some difference in devices connected, but big parts of the code can be shared.
Adding the pending boards without combining code would be adding code that will be going away for most part with the device tree support.
And most likely the beagle and panda based boards will be the first ones to work with device tree. So anything we can do to have common board init code will also help with this effort.
Quoted 8 lines
Quoted 3 lines
Regards,
Tony
pcm049 and panda board have some more different devices.
I am working on patches to add NAND support and using tlv320aic3x audio codec which need regulators in platformcode. I need a hack to controll usb otg by gpio (controlling a external power circuit). The patches are not mainline ready by now.
OK, let's figure out how we can add the basic support first then.
Quoted 3 lines
If using
machine_is_xxxx()inboard-omap4panda.cthen also is good way, I could provide our board as patches on top ofboard-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
cover join omap4panda and pcm049
First try to join both boards. Only compile testet. basis for discusson
Jan Weitzel (2):
omap4: board-omap4panda: prepare for join
omap4: board-omap4panda: join Phytec phyCORE-OMAP4
arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/board-omap4panda.c | 817 +++++++++++++++++++------- arch/arm/plat-omap/include/plat/uncompress.h | 1 + 3 files changed, 616 insertions(+), 208 deletions(-)
Tony Lindgren
maintainerRe: [RFC 0/2] join omap4panda and pcm049
Quoted 11 lines · Jan Weitzel
First try to join both boards. Only compile testet. basis for discusson
Jan Weitzel (2):
omap4: board-omap4panda: prepare for join
omap4: board-omap4panda: join Phytec phyCORE-OMAP4arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/board-omap4panda.c | 817 +++++++++++++++++++------- arch/arm/plat-omap/include/plat/uncompress.h | 1 + 3 files changed, 616 insertions(+), 208 deletions(-)
Thanks for working on this. To me it seems that it might be more readable to have board-panda-common.c file instead of having everything in one file.
Then from the board specific files you could just call panda_common_init(&omap4_panda_config).
Regards,
Tony
v2 cover join omap4panda and pcm049
Try to join both boards. Only compile testet.
basis for discusson
Jan Weitzel (2):
omap4: board-omap4panda: prepare for join
omap4: board-omap4pcm049: add Phytec phyCORE-OMAP4
arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/Makefile | 5 + arch/arm/mach-omap2/board-omap4panda-common.c | 380 ++++++++++++++++++++++ arch/arm/mach-omap2/board-omap4panda-common.h | 39 +++ arch/arm/mach-omap2/board-omap4panda.c | 421 +++++-------------------- arch/arm/mach-omap2/board-omap4pcm049.c | 368 +++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 7 files changed, 875 insertions(+), 345 deletions(-) create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.c create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.h create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
RFC 1/2 omap4: board-omap4panda: prepare for join
In reply to Tony LindgrenPrepare board-omap4panda for joing other similar boards. Split common stuff into board-omap4panda-common.
MUX: board_mux and omap4_panda_muxomap4_common_preinit: for muxingomap4_common_init: all common devices
struct panda_board_data: gpios, omap_board_data, i2c_board_info ...
some inititialisation check if omap4_panda_config entry is valid i2c_2_board_speed == 0 -> i2c_2 not used hup_power_gpio == -EINVAL -> gpio not used
--- arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/board-omap4panda-common.c | 380 ++++++++++++++++++++++ arch/arm/mach-omap2/board-omap4panda-common.h | 39 +++ arch/arm/mach-omap2/board-omap4panda.c | 421 +++++-------------------- 4 files changed, 496 insertions(+), 345 deletions(-) create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.c create mode 100644 arch/arm/mach-omap2/board-omap4panda-common.h
arch/arm/mach-omap2/Makefile +1 -0
@@ -237,6 +237,7 @@ obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \ hsmmc.o \ omap_phy_internal.o obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ + board-omap4panda-common.o \ hsmmc.o \ omap_phy_internal.o
arch/arm/mach-omap2/board-omap4panda-common.c new file +380 -0
380 lines not on this page · raw message
arch/arm/mach-omap2/board-omap4panda-common.h new file +39 -0
@@ -0,0 +1,39 @@ +#ifndef __BOAR_OAMP4PANDA_COMMON_H__ +#define __BOAR_OAMP4PANDA_COMMON_H__ + +struct panda_board_data { +int hup_power_gpio; +int hup_nreset_gpio; +struct gpio_led_platform_data gpio_led_info; +struct omap2_hsmmc_info *mmc; +struct twl4030_platform_data twldata; +struct i2c_board_info *i2c_2_board_info; +int i2c_2_board_size; +int i2c_2_board_speed; +struct i2c_board_info *i2c_3_board_info; +int i2c_3_board_size; +int i2c_3_board_speed; +struct i2c_board_info *i2c_4_board_info; +int i2c_4_board_size; +int i2c_4_board_speed; +struct omap_board_data *serial1; +struct omap_board_data *serial2; +struct omap_board_data *serial3; +struct omap_board_data *serial4; + +}; + +extern struct omap_board_data bdata; +extern struct omap_board_data serial2_data; +extern struct omap_board_data serial3_data; +extern struct omap_board_data serial4_data; +extern const struct usbhs_omap_board_data usbhs_bdata; +extern struct omap_musb_board_data musb_board_datai; + +void __init omap4_panda_init_early (void ); +void omap4_common_hdmi_mux_init (void ); + +void __init omap4_common_preinit (void ); +void __init omap4_common_init (struct panda_board_data *config); + +#endif /* __BOAR_OAMP4PANDA_COMMON_H__ */
arch/arm/mach-omap2/board-omap4panda.c +76 -345
476 lines not on this page · raw message
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerRe: [RFC 1/2] omap4: board-omap4panda: prepare for join
Quoted 11 lines · Jan Weitzel
Prepare board-omap4panda for joing other similar boards. Split common stuff into board-omap4panda-common.
MUX:
board_muxandomap4_panda_muxomap4_common_preinit: for muxingomap4_common_init: all common devices
structpanda_board_data: gpios,omap_board_data,i2c_board_info...some inititialisation check if
omap4_panda_configentry is validi2c_2_board_speed== 0 ->i2c_2not usedhup_power_gpio==-EINVAL-> gpio not used
This should probably be split into two patches:
- Prepare things for panda common code
- Move panda common code
That way we can see from the patches what actually changes. Might also make sense to do it the other way around for the two patches.
Regards,
Tony
RFC 2/2 omap4: board-omap4pcm049: add Phytec phyCORE-OMAP4
In reply to Tony LindgrenAdds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049.
--- arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/Makefile | 4 + arch/arm/mach-omap2/board-omap4pcm049.c | 368 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 4 files changed, 379 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
arch/arm/mach-omap2/Kconfig +6 -0
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA select OMAP_PACKAGE_CBS select REGULATOR_FIXED_VOLTAGE +config MACH_PCM049 + bool "OMAP4 based phyCORE OMAP4" + depends on ARCH_OMAP4 + default y + select OMAP_PACKAGE_CBS + config OMAP3_EMU bool "OMAP3 debugging peripherals" depends on ARCH_OMAP3
arch/arm/mach-omap2/Makefile +4 -0
@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ board-omap4panda-common.o \ hsmmc.o \ omap_phy_internal.o +obj-$(CONFIG_MACH_MACH_PCM049) += board-pcm049.o \ + board-omap4panda-common.o \ + hsmmc.o \ + omap_phy_internal.o obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ omap_phy_internal.o \
arch/arm/mach-omap2/board-omap4pcm049.c new file +368 -0
368 lines not on this page · raw message
arch/arm/plat-omap/include/plat/uncompress.h +1 -0
@@ -166,6 +166,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* omap4 based boards using UART3 */ DEBUG_LL_OMAP4 (3 , omap_4430sdp);DEBUG_LL_OMAP4 (3 , omap4_panda); +DEBUG_LL_OMAP4 (3 , pcm049);/* zoom2/3 external uart */ DEBUG_LL_ZOOM (omap_zoom2);
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerRe: [RFC 2/2] omap4: board-omap4pcm049: add Phytec phyCORE-OMAP4
arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 243
Quoted 7 lines · Jan Weitzel
arch/arm/mach-omap2/Makefile +1
-0@@ -240,6 +240,10 @@ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ board-omap4panda-common.o \ hsmmc.o \ omap_phy_internal.o +obj-$(CONFIG_MACH_MACH_PCM049) += board-pcm049.o \
^^^^
Extra mach above?
arch/arm/mach-omap2/Makefile obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ · line 249
Quoted 6 lines
arch/arm/mach-omap2/Makefile +3
-0+ board-omap4panda-common.o \ + hsmmc.o \ + omap_phy_internal.o obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ omap_phy_internal.o \
Maybe use just board-panda-common.o here instead? And in the Makefile it can be compiled in with something like:
obj-$(CONFIG_MACH_OMAP4_PANDA) += board-panda-common.o
obj-$(CONFIG_MACH_PCM049) += board-panda-common.o
...
obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o
obj-$(CONFIG_MACH_PCM049) += board-pcm049.o
...
I already posted a patch to get rid of repeating the hsmmc.o for each board using it.
Quoted 27 lines
arch/arm/mach-omap2/Makefile +27
-0+#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/leds.h> +#include <linux/gpio.h> +#include <linux/usb/otg.h> +#include <linux/i2c/twl.h> +#include <linux/i2c/at24.h> +#include <linux/mfd/stmpe.h> +#include <linux/leds-pca9532.h> +#include <linux/regulator/machine.h> +#include <linux/regulator/fixed.h> +#include <linux/wl12xx.h> +#include <linux/smsc911x.h> + +#include <mach/hardware.h> +#include <mach/omap4-common.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <video/omapdss.h> + +#include <plat/board.h> +#include <plat/common.h> +#include <plat/usb.h>
arch/arm/mach-omap2/Makefile
Quoted 10 lines
arch/arm/mach-omap2/Makefile +10
-0+#include <plat/gpmc.h> +#include <plat/gpmc-smsc911x.h> +#include <plat/mmc.h> +#include <video/omap-panel-generic-dpi.h> + +#include "hsmmc.h" +#include "control.h" +#include "mux.h" +#include "common-board-devices.h" +#include "board-omap4panda-common.h"
Maybe check which includes are now needed with the panda-common?
arch/arm/mach-omap2/Makefile
Quoted 8 lines
arch/arm/mach-omap2/Makefile +8
-0+struct omap_dss_device pcm049_dpi_device = { + .type = OMAP_DISPLAY_TYPE_DPI, + .name = "dpi", + .driver_name = "generic_dpi_panel", + .data = &omap4_dpi_panel, + .phy.dpi.data_lines = 24, + .channel = OMAP_DSS_CHANNEL_LCD2, +};
Usually tabs are used for aligning the structs like above..
arch/arm/mach-omap2/Makefile
Quoted 4 lines
arch/arm/mach-omap2/Makefile +4
-0+static struct omap_dss_device pcm049_dvi_device = { + .name = "dvi", + .driver_name = "hdmi_panel", + .type = OMAP_DISPLAY_TYPE_HDMI,
.. so please align the structs with tabs for the new data too. Please check the data structs in all your patches while at it. Also looks like there's an extra space above before pcm049_dvi_device.
arch/arm/mach-omap2/Makefile
Quoted 8 lines
arch/arm/mach-omap2/Makefile +8
-0+static struct stmpe_platform_data pba_stm_pdata = { + .blocks = STMPE_BLOCK_GPIO | STMPE_BLOCK_TOUCHSCREEN, + .irq_base = TWL6030_IRQ_END, + .irq_trigger = IRQF_TRIGGER_RISING, + .irq_invert_polarity = true, + .gpio = &pba_gpio_stm_data, + .ts = &pba_ts_stm_pdata, +};
Here too please check the alignment.
Regards,
Tony
PATCH 1/2 omap4: board-omap4panda: prepare for join
In reply to Tony LindgrenPrepare board-omap4panda for joing other similar boards.
MUX: board_mux and omap4_panda_muxomap4_common_preinit: for muxingomap4_common_init: all common devicesomap4_panda_config: gpios, omap_board_data, i2c_board_info ...
runtime overwriteable
some inititialisation check if omap4_panda_config entry is valid i2c_2_board_speed == 0 -> i2c_2 not used hup_power_gpio == EINVAL -> gpio not used
--- arch/arm/mach-omap2/board-omap4panda.c | 498 ++++++++++++++++++------------- 1 files changed, 289 insertions(+), 209 deletions(-)
arch/arm/mach-omap2/board-omap4panda.c +289 -209
@@ -47,23 +47,11 @@#include "mux.h" #include "common-board-devices.h" -#define GPIO_HUB_POWER 1 -#define GPIO_HUB_NRESET 62#define GPIO_WIFI_PMENA 43#define GPIO_WIFI_IRQ 53#define HDMI_GPIO_HPD 60/* Hot plug pin for HDMI */ #define HDMI_GPIO_LS_OE 41/* Level shifter for HDMI */ -/* wl127x BT, FM, GPS connectivity chip */ -static int wl1271_gpios[] = {46 ,-1 ,-1 }; -static struct platform_device wl1271_device = { - .name ="kim" , - .id =-1 , - .dev = { - .platform_data = &wl1271_gpios, - }, -}; -static struct gpio_led gpio_leds[] = { { .name ="pandaboard::status1" ,
@@ -77,21 +65,219 @@ static struct gpio_led gpio_leds[] = { }, }; -static struct gpio_led_platform_data gpio_led_info = { - .leds = gpio_leds, - .num_leds =ARRAY_SIZE (gpio_leds), +/* +* Display monitor features are burnt in their EEPROM as EDID data. The EEPROM +* is connected as I2C slave device, and can be accessed at address 0x50 +*/ +static struct i2c_board_info __initdata panda_i2c_eeprom[] = { + { +I2C_BOARD_INFO ("eeprom" ,0x50 ), + }, +}; + +#ifdef CONFIG_OMAP_MUX +static struct omap_board_mux board_mux[]__initdata = { +/* dispc2_data23 */ +OMAP4_MUX (USBB2_ULPITLL_STP ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data22 */ +OMAP4_MUX (USBB2_ULPITLL_DIR ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data21 */ +OMAP4_MUX (USBB2_ULPITLL_NXT ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data20 */ +OMAP4_MUX (USBB2_ULPITLL_DAT0 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data19 */ +OMAP4_MUX (USBB2_ULPITLL_DAT1 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data18 */ +OMAP4_MUX (USBB2_ULPITLL_DAT2 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data15 */ +OMAP4_MUX (USBB2_ULPITLL_DAT3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data14 */ +OMAP4_MUX (USBB2_ULPITLL_DAT4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data13 */ +OMAP4_MUX (USBB2_ULPITLL_DAT5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data12 */ +OMAP4_MUX (USBB2_ULPITLL_DAT6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data11 */ +OMAP4_MUX (USBB2_ULPITLL_DAT7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data10 */ +OMAP4_MUX (DPM_EMU3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data9 */ +OMAP4_MUX (DPM_EMU4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data16 */ +OMAP4_MUX (DPM_EMU5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data17 */ +OMAP4_MUX (DPM_EMU6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_hsync */ +OMAP4_MUX (DPM_EMU7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_pclk */ +OMAP4_MUX (DPM_EMU8 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_vsync */ +OMAP4_MUX (DPM_EMU9 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_de */ +OMAP4_MUX (DPM_EMU10 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data8 */ +OMAP4_MUX (DPM_EMU11 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data7 */ +OMAP4_MUX (DPM_EMU12 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data6 */ +OMAP4_MUX (DPM_EMU13 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data5 */ +OMAP4_MUX (DPM_EMU14 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data4 */ +OMAP4_MUX (DPM_EMU15 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data3 */ +OMAP4_MUX (DPM_EMU16 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data2 */ +OMAP4_MUX (DPM_EMU17 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data1 */ +OMAP4_MUX (DPM_EMU18 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data0 */ +OMAP4_MUX (DPM_EMU19 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), + { .reg_offset =OMAP_MUX_TERMINATOR }, +}; + +static struct omap_device_pad serial2_pads[]__initdata = { +OMAP_MUX_STATIC ("uart2_cts.uart2_cts" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_rts.uart2_rts" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_rx.uart2_rx" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_tx.uart2_tx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_device_pad serial3_pads[]__initdata = { +OMAP_MUX_STATIC ("uart3_cts_rctx.uart3_cts_rctx" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_rts_sd.uart3_rts_sd" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_rx_irrx.uart3_rx_irrx" , +OMAP_PIN_INPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_tx_irtx.uart3_tx_irtx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_device_pad serial4_pads[]__initdata = { +OMAP_MUX_STATIC ("uart4_rx.uart4_rx" , +OMAP_PIN_INPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart4_tx.uart4_tx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_board_data serial2_data__initdata = { + .id =1 , + .pads = serial2_pads, + .pads_cnt =ARRAY_SIZE (serial2_pads), +}; + +static struct omap_board_data serial3_data__initdata = { + .id =2 , + .pads = serial3_pads, + .pads_cnt =ARRAY_SIZE (serial3_pads), +}; + +static struct omap_board_data serial4_data__initdata = { + .id =3 , + .pads = serial4_pads, + .pads_cnt =ARRAY_SIZE (serial4_pads), +}; +#else +#define board_mux NULL +#endif + +/* dummy data for UART1 */ +struct omap_board_data bdata; + +static struct omap2_hsmmc_info omap4_panda_mmc[] = { + { + .mmc =1 , + .caps =MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA , + .gpio_wp = -EINVAL , + .gpio_cd = -EINVAL , + }, + { + .name ="wl1271" , + .mmc =5 , + .caps =MMC_CAP_4_BIT_DATA |MMC_CAP_POWER_OFF_CARD , + .gpio_wp = -EINVAL , + .gpio_cd = -EINVAL , + .ocr_mask =MMC_VDD_165_195 , + .nonremovable = true, + }, + {}/* Terminator */ +}; + +/* +* Board-specific configuration +*/ +static struct { +int hup_power_gpio; +int hup_nreset_gpio; +struct gpio_led_platform_data gpio_led_info; +struct omap2_hsmmc_info *mmc; +struct twl4030_platform_data twldata; +struct i2c_board_info *i2c_2_board_info; +int i2c_2_board_size; +int i2c_2_board_speed; +struct i2c_board_info *i2c_3_board_info; +int i2c_3_board_size; +int i2c_3_board_speed; +struct i2c_board_info *i2c_4_board_info; +int i2c_4_board_size; +int i2c_4_board_speed; +struct omap_board_data *serial1; +struct omap_board_data *serial2; +struct omap_board_data *serial3; +struct omap_board_data *serial4; +} omap4_panda_config = { + .hup_power_gpio =1 , + .hup_nreset_gpio =62 , + .gpio_led_info.leds = gpio_leds, + .gpio_led_info.num_leds =ARRAY_SIZE (gpio_leds), + .mmc = omap4_panda_mmc, + .i2c_2_board_info =NULL , + .i2c_2_board_size =0 , + .i2c_2_board_speed =400 , + .i2c_3_board_info = panda_i2c_eeprom, + .i2c_3_board_size =ARRAY_SIZE (panda_i2c_eeprom), +/* +* Bus 3 is attached to the DVI port where devices like the pico DLP +* projector don't work reliably with 400kHz +*/ + .i2c_3_board_speed =100 , + .i2c_4_board_info =NULL , + .i2c_4_board_size =0 , + .i2c_4_board_speed =400 , + .serial1 = &bdata, + .serial2 = &serial2_data, + .serial3 = &serial3_data, + .serial4 = &serial4_data, +}; + +/* wl127x BT, FM, GPS connectivity chip */ +static int wl1271_gpios[] = {46 ,-1 ,-1 }; +static struct platform_device wl1271_device = { + .name ="kim" , + .id =-1 , + .dev = { + .platform_data = &wl1271_gpios, + }, };static struct platform_device leds_gpio = { .name ="leds-gpio" , .id =-1 , .dev = { - .platform_data = &gpio_led_info, + .platform_data = &omap4_panda_config.gpio_led_info, }, }; -static struct platform_device *panda_devices[]__initdata = { +static struct platform_device *common_devices[]__initdata = { &leds_gpio, +}; + +static struct platform_device *panda_devices[]__initdata = { &wl1271_device, };
@@ -111,11 +297,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = { .reset_gpio_port[2] = -EINVAL }; -static struct gpio panda_ehci_gpios[]__initdata = { - {GPIO_HUB_POWER ,GPIOF_OUT_INIT_LOW ,"hub_power" }, - {GPIO_HUB_NRESET ,GPIOF_OUT_INIT_LOW ,"hub_nreset" }, -}; -static void __init omap4_ehci_init (void ) {int ret;
@@ -131,21 +312,32 @@ static void __init omap4_ehci_init(void)clk_enable (phy_ref_clk);/* disable the power to the usb hub prior to init and reset phy+hub */ - ret =gpio_request_array (panda_ehci_gpios, -ARRAY_SIZE (panda_ehci_gpios)); -if (ret) { -pr_err ("Unable to initialize EHCI power/reset\n" ); -return ; +if (omap4_panda_config.hup_power_gpio != -EINVAL ) { + ret =gpio_request_one (omap4_panda_config.hup_power_gpio, +GPIOF_OUT_INIT_LOW ,"hub_power" ); +if (ret) { +pr_err ("Unable to initialize EHCI power\n" ); +return ; + } +gpio_export (omap4_panda_config.hup_power_gpio,0 ); } -gpio_export (GPIO_HUB_POWER ,0 ); -gpio_export (GPIO_HUB_NRESET ,0 ); -gpio_set_value (GPIO_HUB_NRESET ,1 ); +if (omap4_panda_config.hup_nreset_gpio != -EINVAL ) { + ret =gpio_request_one (omap4_panda_config.hup_nreset_gpio, +GPIOF_OUT_INIT_LOW ,"hub_nreset" ); +if (ret) { +pr_err ("Unable to initialize EHCI reset\n" ); +return ; + } +gpio_export (omap4_panda_config.hup_nreset_gpio,0 ); +gpio_set_value (omap4_panda_config.hup_nreset_gpio,1 ); + }usbhs_init (&usbhs_bdata);/* enable power to hub */ -gpio_set_value (GPIO_HUB_POWER ,1 ); +if (omap4_panda_config.hup_power_gpio != -EINVAL ) +gpio_set_value (omap4_panda_config.hup_power_gpio,1 ); }static struct omap_musb_board_data musb_board_data = {
@@ -154,25 +346,6 @@ static struct omap_musb_board_data musb_board_data = { .power = 100, }; -static struct omap2_hsmmc_info mmc[] = { - { - .mmc =1 , - .caps =MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA , - .gpio_wp = -EINVAL , - .gpio_cd = -EINVAL , - }, - { - .name ="wl1271" , - .mmc =5 , - .caps =MMC_CAP_4_BIT_DATA |MMC_CAP_POWER_OFF_CARD , - .gpio_wp = -EINVAL , - .gpio_cd = -EINVAL , - .ocr_mask =MMC_VDD_165_195 , - .nonremovable = true, - }, - {}/* Terminator */ -}; -static struct regulator_consumer_supply omap4_panda_vmmc5_supply[] = {REGULATOR_SUPPLY ("vmmc" ,"omap_hsmmc.4" ), };
@@ -257,22 +430,10 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)return 0 ; } -/* Panda board uses the common PMIC configuration */ -static struct twl4030_platform_data omap4_panda_twldata; - -/* -* Display monitor features are burnt in their EEPROM as EDID data. The EEPROM -* is connected as I2C slave device, and can be accessed at address 0x50 -*/ -static struct i2c_board_info __initdata panda_i2c_eeprom[] = { - { -I2C_BOARD_INFO ("eeprom" ,0x50 ), - }, -}; -static int __init omap4_panda_i2c_init (void ) { - omap4_pmic_get_config(&omap4_panda_twldata, TWL_COMMON_PDATA_USB, + omap4_pmic_get_config(&omap4_panda_config.twldata, + TWL_COMMON_PDATA_USB, TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VAUX2 | TWL_COMMON_REGULATOR_VAUX3 |
@@ -282,157 +443,40 @@ static int __init omap4_panda_i2c_init(void)TWL_COMMON_REGULATOR_VCXIO |TWL_COMMON_REGULATOR_VUSB | TWL_COMMON_REGULATOR_CLK32KG); -omap4_pmic_init ("twl6030" , &omap4_panda_twldata); -omap_register_i2c_bus (2 ,400 ,NULL ,0 ); -/* -* Bus 3 is attached to the DVI port where devices like the pico DLP -* projector don't work reliably with 400kHz -*/ -omap_register_i2c_bus (3 ,100 , panda_i2c_eeprom, -ARRAY_SIZE (panda_i2c_eeprom)); -omap_register_i2c_bus (4 ,400 ,NULL ,0 ); +omap4_pmic_init ("twl6030" , &omap4_panda_config.twldata); +if (!omap4_panda_config.i2c_2_board_speed) +omap_register_i2c_bus (2 , omap4_panda_config.i2c_2_board_speed, + omap4_panda_config.i2c_2_board_info, + omap4_panda_config.i2c_2_board_size); +if (!omap4_panda_config.i2c_3_board_speed) +omap_register_i2c_bus (3 , omap4_panda_config.i2c_3_board_speed, + omap4_panda_config.i2c_3_board_info, + omap4_panda_config.i2c_3_board_size); +if (!omap4_panda_config.i2c_4_board_speed) +omap_register_i2c_bus (4 , omap4_panda_config.i2c_4_board_speed, + omap4_panda_config.i2c_4_board_info, + omap4_panda_config.i2c_4_board_size);return 0 ; }#ifdef CONFIG_OMAP_MUX -static struct omap_board_mux board_mux[]__initdata = { -/* WLAN IRQ - GPIO 53 */ -OMAP4_MUX (GPMC_NCS3 ,OMAP_MUX_MODE3 |OMAP_PIN_INPUT ), -/* WLAN POWER ENABLE - GPIO 43 */ -OMAP4_MUX (GPMC_A19 ,OMAP_MUX_MODE3 |OMAP_PIN_OUTPUT ), -/* WLAN SDIO: MMC5 CMD */ -OMAP4_MUX (SDMMC5_CMD ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), -/* WLAN SDIO: MMC5 CLK */ -OMAP4_MUX (SDMMC5_CLK ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), -/* WLAN SDIO: MMC5 DAT[0-3] */ -OMAP4_MUX (SDMMC5_DAT0 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), -OMAP4_MUX (SDMMC5_DAT1 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), -OMAP4_MUX (SDMMC5_DAT2 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), -OMAP4_MUX (SDMMC5_DAT3 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), -/* gpio 0 - TFP410 PD */ -OMAP4_MUX (KPD_COL1 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE3 ), -/* dispc2_data23 */ -OMAP4_MUX (USBB2_ULPITLL_STP ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data22 */ -OMAP4_MUX (USBB2_ULPITLL_DIR ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data21 */ -OMAP4_MUX (USBB2_ULPITLL_NXT ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data20 */ -OMAP4_MUX (USBB2_ULPITLL_DAT0 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data19 */ -OMAP4_MUX (USBB2_ULPITLL_DAT1 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data18 */ -OMAP4_MUX (USBB2_ULPITLL_DAT2 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data15 */ -OMAP4_MUX (USBB2_ULPITLL_DAT3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data14 */ -OMAP4_MUX (USBB2_ULPITLL_DAT4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data13 */ -OMAP4_MUX (USBB2_ULPITLL_DAT5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data12 */ -OMAP4_MUX (USBB2_ULPITLL_DAT6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data11 */ -OMAP4_MUX (USBB2_ULPITLL_DAT7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data10 */ -OMAP4_MUX (DPM_EMU3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data9 */ -OMAP4_MUX (DPM_EMU4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data16 */ -OMAP4_MUX (DPM_EMU5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data17 */ -OMAP4_MUX (DPM_EMU6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_hsync */ -OMAP4_MUX (DPM_EMU7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_pclk */ -OMAP4_MUX (DPM_EMU8 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_vsync */ -OMAP4_MUX (DPM_EMU9 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_de */ -OMAP4_MUX (DPM_EMU10 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data8 */ -OMAP4_MUX (DPM_EMU11 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data7 */ -OMAP4_MUX (DPM_EMU12 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data6 */ -OMAP4_MUX (DPM_EMU13 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data5 */ -OMAP4_MUX (DPM_EMU14 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data4 */ -OMAP4_MUX (DPM_EMU15 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data3 */ -OMAP4_MUX (DPM_EMU16 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data2 */ -OMAP4_MUX (DPM_EMU17 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data1 */ -OMAP4_MUX (DPM_EMU18 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), -/* dispc2_data0 */ -OMAP4_MUX (DPM_EMU19 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), - { .reg_offset =OMAP_MUX_TERMINATOR }, -}; - -static struct omap_device_pad serial2_pads[]__initdata = { -OMAP_MUX_STATIC ("uart2_cts.uart2_cts" , -OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart2_rts.uart2_rts" , -OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart2_rx.uart2_rx" , -OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart2_tx.uart2_tx" , -OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), -}; - -static struct omap_device_pad serial3_pads[]__initdata = { -OMAP_MUX_STATIC ("uart3_cts_rctx.uart3_cts_rctx" , -OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart3_rts_sd.uart3_rts_sd" , -OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart3_rx_irrx.uart3_rx_irrx" , -OMAP_PIN_INPUT |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart3_tx_irtx.uart3_tx_irtx" , -OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), -}; - -static struct omap_device_pad serial4_pads[]__initdata = { -OMAP_MUX_STATIC ("uart4_rx.uart4_rx" , -OMAP_PIN_INPUT |OMAP_MUX_MODE0 ), -OMAP_MUX_STATIC ("uart4_tx.uart4_tx" , -OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), -}; - -static struct omap_board_data serial2_data__initdata = { - .id =1 , - .pads = serial2_pads, - .pads_cnt =ARRAY_SIZE (serial2_pads), -}; - -static struct omap_board_data serial3_data__initdata = { - .id =2 , - .pads = serial3_pads, - .pads_cnt =ARRAY_SIZE (serial3_pads), -}; - -static struct omap_board_data serial4_data__initdata = { - .id =3 , - .pads = serial4_pads, - .pads_cnt =ARRAY_SIZE (serial4_pads), -}; -static inline void board_serial_init (void ) { -struct omap_board_data bdata; +/* pass dummy data for UART1 */ bdata.flags =0 ; bdata.pads =NULL ; bdata.pads_cnt =0 ; bdata.id =0 ; -/* pass dummy data for UART1 */ -omap_serial_init_port (&bdata); - -omap_serial_init_port (&serial2_data); -omap_serial_init_port (&serial3_data); -omap_serial_init_port (&serial4_data); +if (omap4_panda_config.serial1) +omap_serial_init_port (omap4_panda_config.serial1); +if (omap4_panda_config.serial2) +omap_serial_init_port (omap4_panda_config.serial2); +if (omap4_panda_config.serial3) +omap_serial_init_port (omap4_panda_config.serial3); +if (omap4_panda_config.serial4) +omap_serial_init_port (omap4_panda_config.serial4); }#else -#define board_mux NULLstatic inline void board_serial_init (void ) {
@@ -554,7 +598,9 @@ void omap4_panda_display_init(void)omap_display_init (&omap4_panda_dss_data); } -static void __init omap4_panda_init (void ) +static struct omap_mux_partition *partition; + +static void __init omap4_common_preinit (void ) {int package =OMAP_PACKAGE_CBS ;
@@ -562,16 +608,50 @@ static void __init omap4_panda_init(void) package =OMAP_PACKAGE_CBL ;omap4_mux_init (board_mux,NULL , package); -if (wl12xx_set_platform_data (&omap_panda_wlan_data)) -pr_err ("error setting wl12xx data\n" ); + partition =omap_mux_get ("core" ); +} +static void __init omap4_common_init (void ) +{ +platform_add_devices (common_devices,ARRAY_SIZE (common_devices)); +omap4_twl6030_hsmmc_init (omap4_panda_config.mmc);omap4_panda_i2c_init (); -platform_add_devices (panda_devices,ARRAY_SIZE (panda_devices)); -platform_device_register (&omap_vwlan_device);board_serial_init (); -omap4_twl6030_hsmmc_init (mmc);omap4_ehci_init ();usb_musb_init (&musb_board_data); +} + +static struct omap_board_mux omap4_panda_mux[] = { +#ifdef CONFIG_OMAP_MUX +/* WLAN IRQ - GPIO 53 */ +OMAP4_MUX (GPMC_NCS3 ,OMAP_MUX_MODE3 |OMAP_PIN_INPUT ), +/* WLAN POWER ENABLE - GPIO 43 */ +OMAP4_MUX (GPMC_A19 ,OMAP_MUX_MODE3 |OMAP_PIN_OUTPUT ), +/* WLAN SDIO: MMC5 CMD */ +OMAP4_MUX (SDMMC5_CMD ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +/* WLAN SDIO: MMC5 CLK */ +OMAP4_MUX (SDMMC5_CLK ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +/* WLAN SDIO: MMC5 DAT[0-3] */ +OMAP4_MUX (SDMMC5_DAT0 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT1 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT2 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT3 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +/* gpio 0 - TFP410 PD */ +OMAP4_MUX (KPD_COL1 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE3 ), +#endif + { .reg_offset =OMAP_MUX_TERMINATOR }, +}; + +static void __init omap4_panda_init (void ) +{ +omap4_common_preinit (); +omap_mux_write_array (partition, omap4_panda_mux); +omap4_common_init (); +if (wl12xx_set_platform_data (&omap_panda_wlan_data)) +pr_err ("error setting wl12xx data\n" ); + +platform_add_devices (panda_devices,ARRAY_SIZE (panda_devices)); +platform_device_register (&omap_vwlan_device);omap4_panda_display_init (); }
Signature · 1 line
1.7.0.4
PATCH 2/2 omap4: board-omap4panda: join Phytec phyCORE-OMAP4
In reply to Tony LindgrenThis adds support for the Phytec OMAP4430 board called phyCORE-OMAP4 PCM049. It reuse board-omap4panda platform code.
--- arch/arm/mach-omap2/Kconfig | 6 + arch/arm/mach-omap2/board-omap4panda.c | 321 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/uncompress.h | 1 + 3 files changed, 328 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/Kconfig +6 -0
@@ -333,6 +333,12 @@ config MACH_OMAP4_PANDA select OMAP_PACKAGE_CBS select REGULATOR_FIXED_VOLTAGE +config MACH_PCM049 + bool "OMAP4 based phyCORE OMAP4" + depends on ARCH_OMAP4 + default y + select OMAP_PACKAGE_CBS + config OMAP3_EMU bool "OMAP3 debugging peripherals" depends on ARCH_OMAP3
arch/arm/mach-omap2/board-omap4panda.c +321 -0
345 lines not on this page · raw message
arch/arm/plat-omap/include/plat/uncompress.h +1 -0
@@ -166,6 +166,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* omap4 based boards using UART3 */ DEBUG_LL_OMAP4 (3 , omap_4430sdp);DEBUG_LL_OMAP4 (3 , omap4_panda); +DEBUG_LL_OMAP4 (3 , pcm049);/* zoom2/3 external uart */ DEBUG_LL_ZOOM (omap_zoom2);
Signature · 1 line
1.7.0.4
PATCH 2/3 ARM: OMAP4: add pcm049 DEBUGLL
In reply to Jan Weitzel--- arch/arm/plat-omap/include/plat/uncompress.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
arch/arm/plat-omap/include/plat/uncompress.h +1 -0
@@ -164,6 +164,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* omap4 based boards using UART3 */ DEBUG_LL_OMAP4 (3 , omap_4430sdp);DEBUG_LL_OMAP4 (3 , omap4_panda); +DEBUG_LL_OMAP4 (3 , pcm049);/* zoom2/3 external uart */ DEBUG_LL_ZOOM (omap_zoom2);
Signature · 1 line
1.7.0.4
PATCH 3/3 ARM: OMAP4: platformcode board-omap4pcm049.c
In reply to Jan Weitzelplatformcode for Phytec phyCORE-OMAP4 PCM049 OMAP4430 board.
--- arch/arm/mach-omap2/board-omap4pcm049.c | 728 +++++++++++++++++++++++++++++++ 1 files changed, 728 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/board-omap4pcm049.c
arch/arm/mach-omap2/board-omap4pcm049.c new file +728 -0
@@ -0,0 +1,728 @@ +/* +* Board support file for Phytec phyCORE-OMAP4 Board. +* +* Copyright (C) 2011 Phytec Messtechnik GmbH +* +* Author: Jan Weitzel <[email protected]> +* +* Based on mach-omap2/board-omap4panda.c +* +* Author: David Anders <[email protected]> +* +* Author: Santosh Shilimkar <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/leds.h> +#include <linux/gpio.h> +#include <linux/usb/otg.h> +#include <linux/i2c/twl.h> +#include <linux/i2c/at24.h> +#include <linux/mfd/stmpe.h> +#include <linux/leds-pca9532.h> +#include <linux/regulator/machine.h> +#include <linux/regulator/fixed.h> +#include <linux/smsc911x.h> + +#include <mach/hardware.h> +#include <mach/omap4-common.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <video/omapdss.h> + +#include <plat/board.h> +#include <plat/common.h> +#include <plat/usb.h> +#include <plat/gpmc.h> +#include <plat/gpmc-smsc911x.h> +#include <plat/mmc.h> +#include <video/omap-panel-generic-dpi.h> +#include "timer-gp.h" + +#include "hsmmc.h" +#include "control.h" +#include "mux.h" +#include "common-board-devices.h" + +#define OMAP4_PCM049_ETH_GPIO_IRQ 121 +#define OMAP4_PCM049_ETH_CS 5 +#define OMAP4_PCM049_STMPE811_GPIO_IRQ 117 +#define OMAP4_PCM049_LCD_ENABLE 118 + +static struct gpio_led gpio_leds[] = { + { + .name ="modul:red:status1" , + .default_trigger ="heartbeat" , + .gpio =152 , + }, + { + .name ="modul:green:status2" , + .default_trigger ="mmc0" , + .gpio =153 , + }, +}; + +static struct gpio_led_platform_data gpio_led_info = { + .leds = gpio_leds, + .num_leds =ARRAY_SIZE (gpio_leds), +}; + +static struct platform_device leds_gpio = { + .name ="leds-gpio" , + .id =-1 , + .dev = { + .platform_data = &gpio_led_info, + }, +}; + +static void __init pcm049_init_early (void ) +{ +omap2_init_common_infrastructure (); +omap2_init_common_devices (NULL ,NULL ); +} + +static const struct usbhs_omap_board_data usbhs_bdata__initconst = { + .port_mode[0 ] =OMAP_EHCI_PORT_MODE_PHY , + .port_mode[1 ] =OMAP_USBHS_PORT_MODE_UNUSED , + .port_mode[2 ] =OMAP_USBHS_PORT_MODE_UNUSED , + .phy_reset = false, + .reset_gpio_port[0 ] = -EINVAL , + .reset_gpio_port[1 ] = -EINVAL , + .reset_gpio_port[2 ] = -EINVAL +}; + +static void __init omap4_ehci_init (void ) +{ +struct clk *phy_ref_clk; +/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */ + phy_ref_clk =clk_get (NULL ,"auxclk3_ck" ); +if (IS_ERR (phy_ref_clk)) { +pr_err ("Cannot request auxclk3\n" ); +return ; + } +clk_set_rate (phy_ref_clk,19200000 ); +clk_enable (phy_ref_clk); + +usbhs_init (&usbhs_bdata); +return ; +} + +static struct omap_musb_board_data musb_board_data = { + .interface_type =MUSB_INTERFACE_UTMI , + .mode =MUSB_OTG , + .power =100 , +}; + +static struct twl4030_usb_data omap4_usbphy_data = { + .phy_init = omap4430_phy_init, + .phy_exit = omap4430_phy_exit, + .phy_power = omap4430_phy_power, + .phy_set_clock = omap4430_phy_set_clk, + .phy_suspend = omap4430_phy_suspend, +}; + +static struct omap2_hsmmc_info mmc[] = { + { + .mmc =1 , + .caps =MMC_CAP_4_BIT_DATA , + .gpio_wp = -EINVAL , + .gpio_cd = -EINVAL , + }, { + .mmc =5 , + .caps =MMC_CAP_4_BIT_DATA , + .gpio_wp = -EINVAL , + .gpio_cd =30 ,/* wk30 */ + .ocr_mask =MMC_VDD_32_33 |MMC_VDD_33_34 ,/* 3V3 */ + }, {}/* Terminator */ +}; + +static struct regulator_consumer_supply pcm049_vmmc_supply[] = { + { + .supply ="vmmc" , + .dev_name ="omap_hsmmc.0" , + }, +}; + +#if defined(CONFIG_SMSC911X ) || defined(CONFIG_SMSC911X_MODULE ) +static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = { + .cs =OMAP4_PCM049_ETH_CS , + .gpio_irq =OMAP4_PCM049_ETH_GPIO_IRQ , + .gpio_reset = -EINVAL , + .flags =SMSC911X_USE_16BIT , +}; + +static inline void __init pcm049_init_smsc911x (void ) +{ +omap_mux_init_gpio (OMAP4_PCM049_ETH_GPIO_IRQ ,OMAP_PIN_INPUT ); +gpmc_smsc911x_init (&board_smsc911x_data); +} +#else +static inline void __init pcm049_init_smsc911x (void ) {return ; } +#endif + +static int omap4_twl6030_hsmmc_late_init (struct device *dev) +{ +int ret =0 ; +struct platform_device *pdev =container_of (dev, + struct platform_device, dev); +struct omap_mmc_platform_data *pdata = dev->platform_data; + +/* Setting MMC1 Card detect Irq */ +if (pdev->id ==0 ) { + ret =twl6030_mmc_card_detect_config (); +if (ret) +dev_err (dev,"%s: Error card detect config(%d)\n" , + __func__, ret); + pdata->slots[0 ].card_detect_irq =TWL6030_IRQ_BASE + +MMCDETECT_INTR_OFFSET ; + pdata->slots[0 ].card_detect = twl6030_mmc_card_detect; + } +return ret; +} + +static __init void omap4_twl6030_hsmmc_set_late_init (struct device *dev) +{ +struct omap_mmc_platform_data *pdata; + +/* dev can be null if CONFIG_MMC_OMAP_HS is not set */ +if (!dev) { +pr_err ("Failed omap4_twl6030_hsmmc_set_late_init\n" ); +return ; + } + pdata = dev->platform_data; + + pdata->init = omap4_twl6030_hsmmc_late_init; +} + +static int __init omap4_twl6030_hsmmc_init (struct omap2_hsmmc_info *controllers) +{ +struct omap2_hsmmc_info *c; + +omap2_hsmmc_init (controllers); +for (c = controllers; c->mmc; c++) +omap4_twl6030_hsmmc_set_late_init (c->dev); + +return 0 ; +} + +/* Fixed regulator for max1027 */ +static struct regulator_consumer_supply pcm049_vcc_3v3_consumer_supply[] = { +REGULATOR_SUPPLY ("vcc" ,"4-0064" ), +}; + +struct regulator_init_data pcm049_vcc_3v3_initdata = { + .consumer_supplies = pcm049_vcc_3v3_consumer_supply, + .num_consumer_supplies =ARRAY_SIZE (pcm049_vcc_3v3_consumer_supply), + .constraints = { + .valid_ops_mask =REGULATOR_CHANGE_STATUS , + }, +}; + +static struct fixed_voltage_config pcm049_vcc_3v3_config = { + .supply_name ="pcm049_vcc_3v3" , + .microvolts =3300000 , + .gpio = -EINVAL , + .enabled_at_boot =1 , + .init_data = &pcm049_vcc_3v3_initdata, +}; + +static struct platform_device pcm049_vcc_3v3_device = { + .name ="reg-fixed-voltage" , + .id =0 , + .dev = { + .platform_data = &pcm049_vcc_3v3_config, + }, +}; + +static struct regulator_init_data pcm049_vaux2 = { + .constraints = { + .min_uV =1200000 , + .max_uV =2800000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE + |REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_vaux3 = { + .constraints = { + .min_uV =1000000 , + .max_uV =3000000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE + |REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +/* VMMC1 for MMC1 card */ +static struct regulator_init_data pcm049_vmmc = { + .constraints = { + .min_uV =1200000 , + .max_uV =3000000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE + |REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, + .num_consumer_supplies =1 , + .consumer_supplies = pcm049_vmmc_supply, +}; + +static struct regulator_init_data pcm049_vpp = { + .constraints = { + .min_uV =1800000 , + .max_uV =2500000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_VOLTAGE + |REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_vana = { + .constraints = { + .min_uV =2100000 , + .max_uV =2100000 , + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_vcxio = { + .constraints = { + .min_uV =1800000 , + .max_uV =1800000 , + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_vdac = { + .constraints = { + .min_uV =1800000 , + .max_uV =1800000 , + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_vusb = { + .constraints = { + .min_uV =3300000 , + .max_uV =3300000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_vusim = { + .constraints = { + .min_uV =1800000 , + .max_uV =3300000 , + .apply_uV = true, + .valid_modes_mask =REGULATOR_MODE_NORMAL + |REGULATOR_MODE_STANDBY , + .valid_ops_mask =REGULATOR_CHANGE_MODE + |REGULATOR_CHANGE_STATUS , + }, +}; + +static struct regulator_init_data pcm049_clk32kg = { + .constraints = { + .valid_ops_mask =REGULATOR_CHANGE_STATUS , + }, +}; + +static struct twl4030_platform_data pcm049_twldata = { + .irq_base =TWL6030_IRQ_BASE , + .irq_end =TWL6030_IRQ_END , + +/* Regulators */ + .vmmc = &pcm049_vmmc, + .vpp = &pcm049_vpp, + .vana = &pcm049_vana, + .vcxio = &pcm049_vcxio, + .vdac = &pcm049_vdac, + .vusb = &pcm049_vusb, + .vaux2 = &pcm049_vaux2, + .vaux3 = &pcm049_vaux3, + .clk32kg = &pcm049_clk32kg, + .usb = &omap4_usbphy_data, + .vusim = &pcm049_vusim, +}; + +static struct at24_platform_data board_eeprom = { + .byte_len =4096 , + .page_size =32 , + .flags =AT24_FLAG_ADDR16 , +}; + +static struct stmpe_gpio_platform_data pba_gpio_stm_data = { + .gpio_base =-1 , + .norequest_mask =STMPE_GPIO_NOREQ_811_TOUCH , +}; + +static struct stmpe_ts_platform_data pba_ts_stm_pdata = { + .sample_time =4 , + .mod_12b =1 , + .ref_sel =0 , + .adc_freq =1 , + .ave_ctrl =3 , + .touch_det_delay =3 , + .settling =3 , + .fraction_z =7 , + .i_drive =0 , +}; + +static struct stmpe_platform_data pba_stm_pdata = { + .blocks =STMPE_BLOCK_GPIO |STMPE_BLOCK_TOUCHSCREEN , + .irq_base =TWL6030_IRQ_END , + .irq_trigger =IRQF_TRIGGER_RISING , + .irq_invert_polarity = true, + .gpio = &pba_gpio_stm_data, + .ts = &pba_ts_stm_pdata, +}; + +static struct pca9532_platform_data pba_pca9532 = { + .leds = { + { + .name ="board:red:free_use1" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, { + .name ="board:yellow:free_use2" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, { + .name ="board:yellow:free_use3" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, { + .name ="board:green:free_use4" , + .state =PCA9532_OFF , + .type =PCA9532_TYPE_LED , + }, + }, + .psc = {1 ,1 }, + .pwm = {1 ,1 }, +}; + +static struct i2c_board_info __initdata pcm049_i2c_1_boardinfo[] = { + { +I2C_BOARD_INFO ("at24" ,0x57 ),/* E0=1, E1=1, E2=1 */ + .platform_data = &board_eeprom, + }, +}; + +static struct i2c_board_info __initdata pcm049_i2c_3_boardinfo[] = { +}; + +static struct i2c_board_info __initdata pcm049_i2c_4_boardinfo[] = { + { +I2C_BOARD_INFO ("stmpe811" ,0x41 ),/* Touch controller */ + .irq =OMAP_GPIO_IRQ (OMAP4_PCM049_STMPE811_GPIO_IRQ ), + .platform_data = &pba_stm_pdata, + }, { +I2C_BOARD_INFO ("max1037" ,0x64 ),/* A/D converter */ + }, { +I2C_BOARD_INFO ("pca9533" ,0x62 ),/* Leds pca9533 */ + .platform_data = &pba_pca9532, + } +}; + +static int __init pcm049_i2c_init (void ) +{ +/* I2C1 */ +omap4_pmic_init ("twl6030" , &pcm049_twldata); +i2c_register_board_info (1 , pcm049_i2c_1_boardinfo, +ARRAY_SIZE (pcm049_i2c_1_boardinfo)); + +/* I2C3 */ +omap_register_i2c_bus (3 ,400 , pcm049_i2c_3_boardinfo, +ARRAY_SIZE (pcm049_i2c_3_boardinfo)); + +/* I2C4 */ +if (omap_mux_init_gpio (OMAP4_PCM049_STMPE811_GPIO_IRQ ,OMAP_PIN_INPUT )) +printk (KERN_ERR "Failed to mux GPIO%d for STMPE811 IRQ\n" , +OMAP4_PCM049_STMPE811_GPIO_IRQ ); +else if (gpio_request (OMAP4_PCM049_STMPE811_GPIO_IRQ ,"STMPE811 irq" )) +printk (KERN_ERR "Failed to request GPIO%d for STMPE811 IRQ\n" , +OMAP4_PCM049_STMPE811_GPIO_IRQ ); +else +gpio_direction_input (OMAP4_PCM049_STMPE811_GPIO_IRQ ); + +omap_register_i2c_bus (4 ,400 , pcm049_i2c_4_boardinfo, +ARRAY_SIZE (pcm049_i2c_4_boardinfo)); +return 0 ; +} + +#ifdef CONFIG_OMAP_MUX +static struct omap_board_mux board_mux[]__initdata = { +OMAP4_MUX (SDMMC5_DAT0 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT1 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT2 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), +OMAP4_MUX (SDMMC5_DAT3 ,OMAP_MUX_MODE0 |OMAP_PIN_INPUT_PULLUP ), + +/* dispc2_data23 */ +OMAP4_MUX (USBB2_ULPITLL_STP ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data22 */ +OMAP4_MUX (USBB2_ULPITLL_DIR ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data21 */ +OMAP4_MUX (USBB2_ULPITLL_NXT ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data20 */ +OMAP4_MUX (USBB2_ULPITLL_DAT0 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data19 */ +OMAP4_MUX (USBB2_ULPITLL_DAT1 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data18 */ +OMAP4_MUX (USBB2_ULPITLL_DAT2 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data15 */ +OMAP4_MUX (USBB2_ULPITLL_DAT3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data14 */ +OMAP4_MUX (USBB2_ULPITLL_DAT4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data13 */ +OMAP4_MUX (USBB2_ULPITLL_DAT5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data12 */ +OMAP4_MUX (USBB2_ULPITLL_DAT6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data11 */ +OMAP4_MUX (USBB2_ULPITLL_DAT7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data10 */ +OMAP4_MUX (DPM_EMU3 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data9 */ +OMAP4_MUX (DPM_EMU4 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data16 */ +OMAP4_MUX (DPM_EMU5 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data17 */ +OMAP4_MUX (DPM_EMU6 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_hsync */ +OMAP4_MUX (DPM_EMU7 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_pclk */ +OMAP4_MUX (DPM_EMU8 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_vsync */ +OMAP4_MUX (DPM_EMU9 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_de */ +OMAP4_MUX (DPM_EMU10 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data8 */ +OMAP4_MUX (DPM_EMU11 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data7 */ +OMAP4_MUX (DPM_EMU12 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data6 */ +OMAP4_MUX (DPM_EMU13 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data5 */ +OMAP4_MUX (DPM_EMU14 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data4 */ +OMAP4_MUX (DPM_EMU15 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data3 */ +OMAP4_MUX (DPM_EMU16 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data2 */ +OMAP4_MUX (DPM_EMU17 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data1 */ +OMAP4_MUX (DPM_EMU18 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), +/* dispc2_data0 */ +OMAP4_MUX (DPM_EMU19 ,OMAP_PIN_OUTPUT |OMAP_MUX_MODE5 ), + + { .reg_offset =OMAP_MUX_TERMINATOR }, +}; + +static struct omap_device_pad serial2_pads[]__initdata = { +OMAP_MUX_STATIC ("uart2_cts.uart2_cts" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_rts.uart2_rts" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_rx.uart2_rx" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart2_tx.uart2_tx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_device_pad serial3_pads[]__initdata = { +OMAP_MUX_STATIC ("uart3_cts_rctx.uart3_cts_rctx" , +OMAP_PIN_INPUT_PULLUP |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_rts_sd.uart3_rts_sd" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_rx_irrx.uart3_rx_irrx" , +OMAP_PIN_INPUT |OMAP_MUX_MODE0 ), +OMAP_MUX_STATIC ("uart3_tx_irtx.uart3_tx_irtx" , +OMAP_PIN_OUTPUT |OMAP_MUX_MODE0 ), +}; + +static struct omap_board_data serial2_data__initdata = { + .id =1 , + .pads = serial2_pads, + .pads_cnt =ARRAY_SIZE (serial2_pads), +}; + +static struct omap_board_data serial3_data__initdata = { + .id =2 , + .pads = serial3_pads, + .pads_cnt =ARRAY_SIZE (serial3_pads), +}; + +static inline void board_serial_init (void ) +{ +omap_serial_init_port (&serial2_data); +omap_serial_init_port (&serial3_data); +} +#else +#define board_mux NULL + +static inline void board_serial_init (void ) +{ +omap_serial_init (); +} +#endif + +/* Display */ +static int pcm049_panel_enable_lcd (struct omap_dss_device *dssdev) +{ +return gpio_direction_output (OMAP4_PCM049_LCD_ENABLE ,1 ); +} + +static void pcm049_panel_disable_lcd (struct omap_dss_device *dssdev) +{ +gpio_direction_output (OMAP4_PCM049_LCD_ENABLE ,0 ); +return ; +} + +/* Using generic display panel */ +static struct panel_generic_dpi_data omap4_dpi_panel = { + .name ="pd050vl1" , + .platform_enable = pcm049_panel_enable_lcd, + .platform_disable = pcm049_panel_disable_lcd, +}; + +struct omap_dss_device pcm049_dpi_device = { + .type =OMAP_DISPLAY_TYPE_DPI , + .name ="dpi" , + .driver_name ="generic_dpi_panel" , + .data = &omap4_dpi_panel, + .phy.dpi.data_lines =24 , + .channel =OMAP_DSS_CHANNEL_LCD2 , +}; + +static void pcm049_dvi_mux_init (void ) +{ +/* PAD0_HDMI_HPD_PAD1_HDMI_CEC */ +omap_mux_init_signal ("hdmi_hpd" , +OMAP_PIN_INPUT_PULLUP ); +omap_mux_init_signal ("hdmi_cec" , +OMAP_PIN_INPUT_PULLUP ); +/* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */ +omap_mux_init_signal ("hdmi_ddc_scl" , +OMAP_PIN_INPUT_PULLUP ); +omap_mux_init_signal ("hdmi_ddc_sda" , +OMAP_PIN_INPUT_PULLUP ); +} + +static struct omap_dss_device pcm049_dvi_device = { + .name ="dvi" , + .driver_name ="hdmi_panel" , + .type =OMAP_DISPLAY_TYPE_HDMI , + .clocks = { + .dispc = { + .dispc_fclk_src =OMAP_DSS_CLK_SRC_FCK , + }, + .hdmi = { + .regn =15 , + .regm2 =1 , + }, + }, + .channel =OMAP_DSS_CHANNEL_DIGIT , +}; + +static struct omap_dss_device *pcm049_dss_devices[] = { + &pcm049_dpi_device, + &pcm049_dvi_device, +}; + +static struct omap_dss_board_info pcm049_dss_data = { + .num_devices =ARRAY_SIZE (pcm049_dss_devices), + .devices = pcm049_dss_devices, + .default_device = &pcm049_dpi_device, +}; + +void pcm049_display_init (void ) +{ +omap_mux_init_gpio (OMAP4_PCM049_LCD_ENABLE ,OMAP_PIN_OUTPUT ); + +if ((gpio_request (OMAP4_PCM049_LCD_ENABLE ,"DISP_ENA" ) ==0 ) && + (gpio_direction_output (OMAP4_PCM049_LCD_ENABLE ,1 ) ==0 )) { +gpio_export (OMAP4_PCM049_LCD_ENABLE ,0 ); +gpio_set_value (OMAP4_PCM049_LCD_ENABLE ,0 ); + }else +printk (KERN_ERR "could not obtain gpio for DISP_ENA" ); +pcm049_dvi_mux_init (); +omap_display_init (&pcm049_dss_data); +} + +static struct platform_device *pcm049_devices[]__initdata = { + &pcm049_vcc_3v3_device, + &leds_gpio, +}; + +#define TWL_PHOENIX_DEV_ON 0x25 + +static void pcm049_power_off (void ) +{ +printk (KERN_INFO "Goodbye phyCORE OMAP4!\n" ); +twl_i2c_write_u8 (TWL6030_MODULE_ID0 ,0x7 ,TWL_PHOENIX_DEV_ON ); +} + + +static void __init pcm049_init (void ) +{ + pm_power_off = pcm049_power_off; +omap4_mux_init (board_mux,NULL ,OMAP_PACKAGE_CBS ); +pcm049_init_smsc911x (); +pcm049_i2c_init (); +platform_add_devices (pcm049_devices,ARRAY_SIZE (pcm049_devices)); +board_serial_init (); +omap4_twl6030_hsmmc_init (mmc); +omap4_ehci_init (); +usb_musb_init (&musb_board_data); +pcm049_display_init (); +} + +static void __init pcm049_map_io (void ) +{ +omap2_set_globals_443x (); +omap44xx_map_common_io (); +} + +MACHINE_START (PCM049 ,"phyCORE OMAP4" ) +/* Maintainer: Jan Weitzel - Phytec Messtechnik GmbH */ + .boot_params = 0x80000100, + .reserve = omap_reserve, + .map_io = pcm049_map_io, + .init_early = pcm049_init_early, + .init_irq = gic_init_irq, + .init_machine = pcm049_init, + .timer = &omap_timer, +MACHINE_END
Signature · 1 line
1.7.0.4