summaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-06-02 16:28:21 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-06-02 16:28:21 +0200
commit8f9044927dd3c0cf9abe6c1254d76886291becbb (patch)
tree03aa87cc32fc19f20157912aef3001bc94a7fd29 /arch/arm
parent89fd7e44dbe754366354cee37395f7fc11cce50e (diff)
parent9aad0fb2d616ee4fb5bd359d9053ffd47dbd399b (diff)
downloadbarebox-8f9044927dd3c0cf9abe6c1254d76886291becbb.tar.gz
barebox-8f9044927dd3c0cf9abe6c1254d76886291becbb.tar.xz
Merge branch 'for-next/mci'
Conflicts: include/driver.h
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-bcm2835/core.c1
-rw-r--r--arch/arm/mach-omap/omap4_twl6030_mmc.c19
2 files changed, 18 insertions, 2 deletions
diff --git a/arch/arm/mach-bcm2835/core.c b/arch/arm/mach-bcm2835/core.c
index f44ecd5bf3..906e4344dd 100644
--- a/arch/arm/mach-bcm2835/core.c
+++ b/arch/arm/mach-bcm2835/core.c
@@ -70,6 +70,7 @@ static int bcm2835_dev_init(void)
{
add_generic_device("bcm2835-gpio", 0, NULL, BCM2835_GPIO_BASE, 0xB0, IORESOURCE_MEM, NULL);
add_generic_device("bcm2835-cs", DEVICE_ID_SINGLE, NULL, BCM2835_ST_BASE, 0x1C, IORESOURCE_MEM, NULL);
+ add_generic_device("bcm2835_mci", 0, NULL, BCM2835_EMMC_BASE, 0xFC, IORESOURCE_MEM, NULL);
return 0;
}
coredevice_initcall(bcm2835_dev_init);
diff --git a/arch/arm/mach-omap/omap4_twl6030_mmc.c b/arch/arm/mach-omap/omap4_twl6030_mmc.c
index 7d71eb868a..155add6ea1 100644
--- a/arch/arm/mach-omap/omap4_twl6030_mmc.c
+++ b/arch/arm/mach-omap/omap4_twl6030_mmc.c
@@ -16,7 +16,7 @@
#include <common.h>
#include <io.h>
-#include <mci/twl6030.h>
+#include <mfd/twl6030.h>
/* MMC voltage */
#define OMAP4_CONTROL_PBIASLITE 0x4A100600
@@ -24,6 +24,16 @@
#define OMAP4_MMC1_PBIASLITE_PWRDNZ (1<<22)
#define OMAP4_MMC1_PWRDNZ (1<<26)
+static void twl6030_mci_write(u8 address, u8 data)
+{
+ int ret;
+ struct twl6030 *twl6030 = twl6030_get();
+
+ ret = twl6030_reg_write(twl6030, address, data);
+ if (ret != 0)
+ printf("TWL6030 Write[0x%x] Error %d\n", address, ret);
+}
+
void set_up_mmc_voltage_omap4(void)
{
u32 value;
@@ -32,7 +42,12 @@ void set_up_mmc_voltage_omap4(void)
value &= ~(OMAP4_MMC1_PBIASLITE_PWRDNZ | OMAP4_MMC1_PWRDNZ);
writel(value, OMAP4_CONTROL_PBIASLITE);
- twl6030_mci_power_init();
+ twl6030_mci_write(TWL6030_PMCS_VMMC_CFG_VOLTAGE,
+ TWL6030_VMMC_WR_S |
+ TWL6030_VMMC_VSEL_0 | TWL6030_VMMC_VSEL_2 |
+ TWL6030_VMMC_VSEL_4);
+ twl6030_mci_write(TWL6030_PMCS_VMMC_CFG_STATE,
+ TWL6030_VMMC_STATE0 | TWL6030_VMMC_GRP_APP);
value = readl(OMAP4_CONTROL_PBIASLITE);
value |= (OMAP4_MMC1_PBIASLITE_VMODE | OMAP4_MMC1_PBIASLITE_PWRDNZ |