summaryrefslogtreecommitdiffstats
path: root/drivers/mci/imx-esdhc.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-02-23 10:13:40 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-04-24 10:31:47 +0200
commit6f20c7bc709dd5875b1066d5dae99d52cc18d51c (patch)
tree20f6c9dcaf3f0a2848e3d51a18c17e1614f0222e /drivers/mci/imx-esdhc.c
parent86cfd96af42178a85ec085ddd5e2f471a02041db (diff)
downloadbarebox-6f20c7bc709dd5875b1066d5dae99d52cc18d51c.tar.gz
barebox-6f20c7bc709dd5875b1066d5dae99d52cc18d51c.tar.xz
mmc i.MX esdhc: Add i.MX6 support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mci/imx-esdhc.c')
-rw-r--r--drivers/mci/imx-esdhc.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c
index 6d0883c68b..ae3c805997 100644
--- a/drivers/mci/imx-esdhc.c
+++ b/drivers/mci/imx-esdhc.c
@@ -24,7 +24,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
-
#include <config.h>
#include <common.h>
#include <driver.h>
@@ -60,7 +59,8 @@ struct fsl_esdhc {
u32 autoc12err;
u32 hostcapblt;
u32 wml;
- char reserved1[8];
+ u32 mixctrl;
+ char reserved1[4];
u32 fevt;
char reserved2[168];
u32 hostver;
@@ -234,7 +234,7 @@ static int esdhc_setup_data(struct mci_host *mci, struct mci_data *data)
static int
esdhc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
{
- u32 xfertyp;
+ u32 xfertyp, mixctrl;
u32 irqstat;
struct fsl_esdhc_host *host = to_fsl_esdhc(mci);
struct fsl_esdhc *regs = host->regs;
@@ -266,6 +266,15 @@ esdhc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
/* Send the command */
esdhc_write32(&regs->cmdarg, cmd->cmdarg);
+
+ if (cpu_is_mx6()) {
+ /* write lower-half of xfertyp to mixctrl */
+ mixctrl = xfertyp & 0xFFFF;
+ /* Keep the bits 22-25 of the register as is */
+ mixctrl |= (esdhc_read32(&regs->mixctrl) & (0xF << 22));
+ esdhc_write32(&regs->mixctrl, mixctrl);
+ }
+
esdhc_write32(&regs->xfertyp, xfertyp);
/* Wait for the command to complete */