diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-08-01 17:49:27 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-08-01 17:49:27 +0200 |
commit | ae982001331215adb009cc93701401623b2a94d7 (patch) | |
tree | 4305113f1e7814b314abaa6d50337844e07fe086 | |
parent | b1a4e722c3754ea11fc621e938196e8db57b1e39 (diff) | |
parent | 341159c00997b0f8b70c0ce5a719dbeededb465f (diff) | |
download | barebox-ae982001331215adb009cc93701401623b2a94d7.tar.gz barebox-ae982001331215adb009cc93701401623b2a94d7.tar.xz |
Merge branch 'for-next/pcm038'
-rw-r--r-- | arch/arm/boards/karo-tx51/tx51.c | 1 | ||||
-rw-r--r-- | arch/arm/boards/pcm038/pcm038.c | 35 | ||||
-rw-r--r-- | arch/arm/boards/pcm038/pcm970.c | 24 | ||||
-rw-r--r-- | include/mfd/mc13xxx.h | 23 |
4 files changed, 79 insertions, 4 deletions
diff --git a/arch/arm/boards/karo-tx51/tx51.c b/arch/arm/boards/karo-tx51/tx51.c index 096683a1ad..5adaaa62ff 100644 --- a/arch/arm/boards/karo-tx51/tx51.c +++ b/arch/arm/boards/karo-tx51/tx51.c @@ -32,7 +32,6 @@ #include <fcntl.h> #include <nand.h> #include <spi/spi.h> -#include <mfd/mc13xxx.h> #include <io.h> #include <asm/mmu.h> #include <mach/imx5.h> diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c index fa82b02d67..8f1271fa5e 100644 --- a/arch/arm/boards/pcm038/pcm038.c +++ b/arch/arm/boards/pcm038/pcm038.c @@ -40,6 +40,7 @@ #include <mach/spi.h> #include <mach/iomux-mx27.h> #include <mach/devices-imx27.h> +#include <mach/iim.h> #include <mfd/mc13xxx.h> #include "pll.h" @@ -124,7 +125,6 @@ static inline uint32_t get_pll_spctl10(void) */ static int pcm038_power_init(void) { -#ifdef CONFIG_MFD_MC13XXX uint32_t spctl0 = get_pll_spctl10(); struct mc13xxx *mc13xxx = mc13xxx_get(); @@ -146,6 +146,22 @@ static int pcm038_power_init(void) MC13783_SW1B_SOFTSTART | MC13783_SW_PLL_FACTOR(32)); + /* Setup VMMC voltage */ + if (IS_ENABLED(CONFIG_MCI_IMX)) { + u32 val; + + mc13xxx_reg_read(mc13xxx, MC13783_REG_REG_SETTING(1), &val); + /* VMMC1 = 3.00 V */ + val &= ~(7 << 6); + val |= 6 << 6; + mc13xxx_reg_write(mc13xxx, MC13783_REG_REG_SETTING(1), val); + + mc13xxx_reg_read(mc13xxx, MC13783_REG_REG_MODE(1), &val); + /* Enable VMMC1 */ + val |= 1 << 18; + mc13xxx_reg_write(mc13xxx, MC13783_REG_REG_MODE(1), val); + } + /* wait for required power level to run the CPU at 400 MHz */ udelay(100000); CSCR = CSCR_VAL_FINAL; @@ -158,7 +174,6 @@ static int pcm038_power_init(void) printf("Failed to initialize PMIC. Will continue with low CPU speed\n"); } } -#endif /* clock gating enable */ GPCR = 0x00050f08; @@ -179,6 +194,7 @@ mem_initcall(pcm038_mem_init); static int pcm038_devices_init(void) { int i; + u64 uid = 0; char *envdev; unsigned int mode[] = { @@ -237,6 +253,19 @@ static int pcm038_devices_init(void) PA29_PF_VSYNC, PA30_PF_CONTRAST, PA31_PF_OE_ACD, + /* OTG host */ + PC7_PF_USBOTG_DATA5, + PC8_PF_USBOTG_DATA6, + PC9_PF_USBOTG_DATA0, + PC10_PF_USBOTG_DATA2, + PC11_PF_USBOTG_DATA1, + PC12_PF_USBOTG_DATA4, + PC13_PF_USBOTG_DATA3, + PE0_PF_USBOTG_NXT, + PE1_PF_USBOTG_STP, + PE2_PF_USBOTG_DIR, + PE24_PF_USBOTG_CLK, + PE25_PF_USBOTG_DATA7, /* I2C1 */ PD17_PF_I2C_DATA | GPIO_PUEN, PD18_PF_I2C_CLK, @@ -302,6 +331,8 @@ static int pcm038_devices_init(void) printf("Using environment in %s Flash\n", envdev); + if (imx_iim_read(1, 1, &uid, 6) == 6) + armlinux_set_serial(uid); armlinux_set_bootparams((void *)0xa0000100); armlinux_set_architecture(MACH_TYPE_PCM038); diff --git a/arch/arm/boards/pcm038/pcm970.c b/arch/arm/boards/pcm038/pcm970.c index df9b8521ea..b95648270b 100644 --- a/arch/arm/boards/pcm038/pcm970.c +++ b/arch/arm/boards/pcm038/pcm970.c @@ -23,6 +23,7 @@ #include <mach/imx-regs.h> #include <mach/iomux-mx27.h> #include <mach/gpio.h> +#include <mach/devices-imx27.h> #include <usb/ulpi.h> #define GPIO_IDE_POWER (GPIO_PORTE + 18) @@ -148,6 +149,26 @@ static void pcm970_ide_init(void) } #endif +static void pcm970_mmc_init(void) +{ + uint32_t i; + unsigned int mode[] = { + /* SD2 */ + PB4_PF_SD2_D0, + PB5_PF_SD2_D1, + PB6_PF_SD2_D2, + PB7_PF_SD2_D3, + PB8_PF_SD2_CMD, + PB9_PF_SD2_CLK, + }; + + for (i = 0; i < ARRAY_SIZE(mode); i++) + imx_gpio_mode(mode[i]); + + PCCR0 |= PCCR0_SDHC2_EN; + imx27_add_mmc1(NULL); +} + static int pcm970_init(void) { int i; @@ -181,6 +202,9 @@ static int pcm970_init(void) pcm970_ide_init(); #endif + if (IS_ENABLED(CONFIG_MCI_IMX)) + pcm970_mmc_init(); + return 0; } diff --git a/include/mfd/mc13xxx.h b/include/mfd/mc13xxx.h index 2880307a2c..632c9fbe4b 100644 --- a/include/mfd/mc13xxx.h +++ b/include/mfd/mc13xxx.h @@ -163,10 +163,31 @@ struct mc13xxx { int revision; }; +#ifdef CONFIG_MFD_MC13XXX extern struct mc13xxx *mc13xxx_get(void); - extern int mc13xxx_reg_read(struct mc13xxx *mc13xxx, u8 reg, u32 *val); extern int mc13xxx_reg_write(struct mc13xxx *mc13xxx, u8 reg, u32 val); extern int mc13xxx_set_bits(struct mc13xxx *mc13xxx, u8 reg, u32 mask, u32 val); +#else +static inline struct mc13xxx *mc13xxx_get(void) +{ + return NULL; +} + +static inline int mc13xxx_reg_read(struct mc13xxx *mc13xxx, u8 reg, u32 *val) +{ + return -ENODEV; +} + +static inline int mc13xxx_reg_write(struct mc13xxx *mc13xxx, u8 reg, u32 val) +{ + return -ENODEV; +} + +static inline int mc13xxx_set_bits(struct mc13xxx *mc13xxx, u8 reg, u32 mask, u32 val) +{ + return -ENODEV; +} +#endif #endif /* __MFD_MC13XXX_H */ |