Deprecate use of volatile registers structure.
Use I/O accessor functions instead.
Demystify magic constants.
This is moved to use ioremap later in the patch series.
Signed-off-by: Bernard Blackham <[EMAIL PROTECTED]>
Index: linux-davinci-2.6.24.git/drivers/mmc/host/davinci_mmc.c
===================================================================
--- linux-davinci-2.6.24.git.orig/drivers/mmc/host/davinci_mmc.c
2008-02-15 20:39:37.000000000 +0900
+++ linux-davinci-2.6.24.git/drivers/mmc/host/davinci_mmc.c 2008-02-15
20:39:48.000000000 +0900
@@ -77,7 +77,7 @@
1
};
-volatile struct mmcsd_regs_base *mmcsd_regs;
+static void __iomem *mmcsd_base;
static unsigned int mmc_input_clk;
/* Used to identify whether card being used currently by linux core or not */
@@ -103,12 +103,11 @@
static DEFINE_SPINLOCK(mmc_lock);
#define RSP_TYPE(x) ((x) & ~(MMC_RSP_BUSY|MMC_RSP_OPCODE))
-#define MMCST1_BUSY (1 << 0)
static inline void wait_on_data(void)
{
int cnt = 900000;
- while (((mmcsd_regs->mmc_st1) & MMCST1_BUSY) && cnt) {
+ while ((readl(mmcsd_base + DAVINCI_MMCST1) & MMCST1_BUSY) && cnt) {
cnt--;
udelay(1);
}
@@ -122,6 +121,7 @@
u32 cmd_reg = 0;
u32 resp_type = 0;
u32 cmd_type = 0;
+ u32 im_val;
unsigned long flags;
#ifdef CONFIG_MMC_DEBUG
@@ -229,47 +229,26 @@
cmd_reg = cmd_reg | (1 << 7);
/* set Command timeout */
- mmcsd_regs->mmc_tor = 0xFFFF;
+ writel(0xFFFF, mmcsd_base + DAVINCI_MMCTOR);
/* Enable interrupt */
+ im_val = MMCSD_EVENT_EOFCMD
+ | MMCSD_EVENT_ERROR_CMDCRC
+ | MMCSD_EVENT_ERROR_DATACRC
+ | MMCSD_EVENT_ERROR_CMDTIMEOUT
+ | MMCSD_EVENT_ERROR_DATATIMEOUT;
if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) {
- if (host->do_dma != 1)
- mmcsd_regs->mmc_im = MMCSD_EVENT_EOFCMD
- | MMCSD_EVENT_WRITE
- | MMCSD_EVENT_ERROR_CMDCRC
- | MMCSD_EVENT_ERROR_DATACRC
- | MMCSD_EVENT_ERROR_CMDTIMEOUT
- | MMCSD_EVENT_ERROR_DATATIMEOUT
- | MMCSD_EVENT_BLOCK_XFERRED;
- else
- mmcsd_regs->mmc_im = MMCSD_EVENT_EOFCMD
- | MMCSD_EVENT_ERROR_CMDCRC
- | MMCSD_EVENT_ERROR_DATACRC
- | MMCSD_EVENT_ERROR_CMDTIMEOUT
- | MMCSD_EVENT_ERROR_DATATIMEOUT
- | MMCSD_EVENT_BLOCK_XFERRED;
+ im_val |= MMCSD_EVENT_BLOCK_XFERRED;
+
+ if (!host->do_dma)
+ im_val |= MMCSD_EVENT_WRITE;
} else if (host->data_dir == DAVINCI_MMC_DATADIR_READ) {
- if (host->do_dma != 1)
- mmcsd_regs->mmc_im = MMCSD_EVENT_EOFCMD
- | MMCSD_EVENT_READ
- | MMCSD_EVENT_ERROR_CMDCRC
- | MMCSD_EVENT_ERROR_DATACRC
- | MMCSD_EVENT_ERROR_CMDTIMEOUT
- | MMCSD_EVENT_ERROR_DATATIMEOUT
- | MMCSD_EVENT_BLOCK_XFERRED;
- else
- mmcsd_regs->mmc_im = MMCSD_EVENT_EOFCMD
- | MMCSD_EVENT_ERROR_CMDCRC
- | MMCSD_EVENT_ERROR_DATACRC
- | MMCSD_EVENT_ERROR_CMDTIMEOUT
- | MMCSD_EVENT_ERROR_DATATIMEOUT
- | MMCSD_EVENT_BLOCK_XFERRED;
- } else
- mmcsd_regs->mmc_im = MMCSD_EVENT_EOFCMD
- | MMCSD_EVENT_ERROR_CMDCRC
- | MMCSD_EVENT_ERROR_DATACRC
- | MMCSD_EVENT_ERROR_CMDTIMEOUT
- | MMCSD_EVENT_ERROR_DATATIMEOUT;
+ im_val |= MMCSD_EVENT_BLOCK_XFERRED;
+
+ if (!host->do_dma)
+ im_val |= MMCSD_EVENT_READ;
+ }
+ writel(im_val, mmcsd_base + DAVINCI_MMCIM);
/*
* It is required by controoler b4 WRITE command that
@@ -298,9 +277,8 @@
}
host->is_core_command = 1;
- mmcsd_regs->mmc_arghl = cmd->arg;
- mmcsd_regs->mmc_cmd = cmd_reg;
-
+ writel(cmd->arg, mmcsd_base + DAVINCI_MMCARGHL);
+ writel(cmd_reg, mmcsd_base + DAVINCI_MMCCMD);
}
static void mmc_davinci_dma_cb(int lch, u16 ch_status, void *data)
@@ -330,12 +308,12 @@
if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) {
for (i = 0; i < (n / 4); i++) {
- mmcsd_regs->mmc_dxr = *host->buffer;
+ writel(*host->buffer, mmcsd_base + DAVINCI_MMCDXR);
host->buffer++;
}
} else {
for (i = 0; i < (n / 4); i++) {
- *host->buffer = mmcsd_regs->mmc_drr;
+ *host->buffer = readl(mmcsd_base + DAVINCI_MMCDRR);
host->buffer++;
}
}
@@ -403,7 +381,6 @@
mmc_davinci_send_dma_request(host, req);
return 0;
-
}
static int davinci_release_dma_channels(struct mmc_davinci_host *host)
@@ -637,13 +614,15 @@
mmc_davinci_prepare_data(struct mmc_davinci_host *host, struct mmc_request
*req)
{
int timeout, sg_len;
+
host->data = req->data;
if (req->data == NULL) {
host->data_dir = DAVINCI_MMC_DATADIR_NONE;
- mmcsd_regs->mmc_blen = 0;
- mmcsd_regs->mmc_nblk = 0;
+ writel(0, mmcsd_base + DAVINCI_MMCBLEN);
+ writel(0, mmcsd_base + DAVINCI_MMCNBLK);
return;
}
+
/* Init idx */
host->sg_idx = 0;
@@ -662,9 +641,9 @@
if (timeout > 0xffff)
timeout = 0xffff;
- mmcsd_regs->mmc_tod = timeout;
- mmcsd_regs->mmc_nblk = req->data->blocks;
- mmcsd_regs->mmc_blen = req->data->blksz;
+ writel(timeout, mmcsd_base + DAVINCI_MMCTOD);
+ writel(req->data->blocks, mmcsd_base + DAVINCI_MMCNBLK);
+ writel(req->data->blksz, mmcsd_base + DAVINCI_MMCBLEN);
host->data_dir = (req->data->flags & MMC_DATA_WRITE)
? DAVINCI_MMC_DATADIR_WRITE
: DAVINCI_MMC_DATADIR_READ;
@@ -672,16 +651,29 @@
/* Configure the FIFO */
switch (host->data_dir) {
case DAVINCI_MMC_DATADIR_WRITE:
- mmcsd_regs->mmc_fifo_ctl = mmcsd_regs->mmc_fifo_ctl | 0x1;
- mmcsd_regs->mmc_fifo_ctl = 0x0;
- mmcsd_regs->mmc_fifo_ctl = mmcsd_regs->mmc_fifo_ctl | (1 << 1);
- mmcsd_regs->mmc_fifo_ctl = mmcsd_regs->mmc_fifo_ctl | (1 << 2);
+ /* Reset FIFO */
+ writel(MMCFIFOCTL_FIFORST, mmcsd_base + DAVINCI_MMCFIFOCTL);
+ writel(0, mmcsd_base + DAVINCI_MMCFIFOCTL);
+
+ /* Set FIFO parameters */
+ writel(
+ MMCFIFOCTL_FIFODIR_WR |
+ MMCFIFOCTL_FIFOLEV |
+ MMCFIFOCTL_ACCWD_4,
+ mmcsd_base + DAVINCI_MMCFIFOCTL);
break;
case DAVINCI_MMC_DATADIR_READ:
- mmcsd_regs->mmc_fifo_ctl = mmcsd_regs->mmc_fifo_ctl | 0x1;
- mmcsd_regs->mmc_fifo_ctl = 0x0;
- mmcsd_regs->mmc_fifo_ctl = mmcsd_regs->mmc_fifo_ctl | (1 << 2);
+ /* Reset FIFO */
+ writel(MMCFIFOCTL_FIFORST, mmcsd_base + DAVINCI_MMCFIFOCTL);
+ writel(0, mmcsd_base + DAVINCI_MMCFIFOCTL);
+
+ /* Set FIFO parameters */
+ writel(
+ MMCFIFOCTL_FIFODIR_RD |
+ MMCFIFOCTL_FIFOLEV |
+ MMCFIFOCTL_ACCWD_4,
+ mmcsd_base + DAVINCI_MMCFIFOCTL);
break;
default:
break;
@@ -782,34 +774,47 @@
ios->vdd / 100, ios->vdd % 100);
if (ios->bus_width == MMC_BUS_WIDTH_4) {
dev_dbg(&mmc_dev, "\nEnabling 4 bit mode\n");
- mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl | (1 << 2);
+ writel(readl(mmcsd_base + DAVINCI_MMCCTL) | MMCCTL_WIDTH_4_BIT,
+ mmcsd_base + DAVINCI_MMCCTL);
} else {
dev_dbg(&mmc_dev, "Disabling 4 bit mode\n");
- mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl & ~(1 << 2);
+ writel(readl(mmcsd_base + DAVINCI_MMCCTL) & ~MMCCTL_WIDTH_4_BIT,
+ mmcsd_base + DAVINCI_MMCCTL);
}
if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN) {
+ u32 temp;
open_drain_freq = ((unsigned int)cpu_arm_clk
/ (2 * MMCSD_INIT_CLOCK)) - 1;
- mmcsd_regs->mmc_clk = (mmcsd_regs->mmc_clk & ~(0xFF))
- | open_drain_freq;
+ temp = readl(mmcsd_base + DAVINCI_MMCCLK) & ~0xFF;
+ temp |= open_drain_freq;
+ writel(temp, mmcsd_base + DAVINCI_MMCCLK);
} else {
+ u32 temp;
mmc_push_pull_freq = calculate_freq_for_card(ios->clock);
- mmcsd_regs->mmc_clk &= ~(0x100);
+
+ temp = readl(mmcsd_base + DAVINCI_MMCCLK) & ~MMCCLK_CLKEN;
+ writel(temp, mmcsd_base + DAVINCI_MMCCLK);
+
udelay(10);
- mmcsd_regs->mmc_clk = (mmcsd_regs->mmc_clk & ~(0xFF))
- | mmc_push_pull_freq;
- mmcsd_regs->mmc_clk |= 0x100;
+
+ temp = readl(mmcsd_base + DAVINCI_MMCCLK) & ~MMCCLK_CLKRT_MASK;
+ temp |= mmc_push_pull_freq;
+ writel(temp, mmcsd_base + DAVINCI_MMCCLK);
+
+ writel(temp | MMCCLK_CLKEN, mmcsd_base + DAVINCI_MMCCLK);
+
udelay(10);
}
+
host->bus_mode = ios->bus_mode;
if (ios->power_mode == MMC_POWER_UP) {
/* Send clock cycles, poll completion */
- mmcsd_regs->mmc_arghl = 0x0;
- mmcsd_regs->mmc_cmd = 0x4000;
+ writel(0, mmcsd_base + DAVINCI_MMCARGHL);
+ writel(MMCCMD_INITCK, mmcsd_base + DAVINCI_MMCCMD);
status = 0;
while (!(status & (MMCSD_EVENT_EOFCMD)))
- status = mmcsd_regs->mmc_st0;
+ status = readl(mmcsd_base + DAVINCI_MMCST0);
}
}
@@ -865,13 +870,13 @@
if (cmd->flags & MMC_RSP_PRESENT) {
if (cmd->flags & MMC_RSP_136) {
/* response type 2 */
- cmd->resp[3] = mmcsd_regs->mmc_rsp01;
- cmd->resp[2] = mmcsd_regs->mmc_rsp23;
- cmd->resp[1] = mmcsd_regs->mmc_rsp45;
- cmd->resp[0] = mmcsd_regs->mmc_rsp67;
+ cmd->resp[3] = readl(mmcsd_base + DAVINCI_MMCRSP01);
+ cmd->resp[2] = readl(mmcsd_base + DAVINCI_MMCRSP23);
+ cmd->resp[1] = readl(mmcsd_base + DAVINCI_MMCRSP45);
+ cmd->resp[0] = readl(mmcsd_base + DAVINCI_MMCRSP67);
} else {
/* response types 1, 1b, 3, 4, 5, 6 */
- cmd->resp[0] = mmcsd_regs->mmc_rsp67;
+ cmd->resp[0] = readl(mmcsd_base + DAVINCI_MMCRSP67);
}
}
@@ -896,18 +901,18 @@
if (host->is_core_command) {
if (host->cmd == NULL && host->data == NULL) {
- status = mmcsd_regs->mmc_st0;
+ status = readl(mmcsd_base + DAVINCI_MMCST0);
dev_dbg(&mmc_dev, "Spurious interrupt 0x%04x\r\n",
status);
/* Disable the interrupt from mmcsd */
- mmcsd_regs->mmc_im = 0;
+ writel(0, mmcsd_base + DAVINCI_MMCIM);
return IRQ_HANDLED;
}
}
end_command = 0;
end_transfer = 0;
- status = mmcsd_regs->mmc_st0;
+ status = readl(mmcsd_base + DAVINCI_MMCST0);
if (status == 0)
return IRQ_HANDLED;
@@ -984,13 +989,18 @@
}
if (status & MMCSD_EVENT_ERROR_DATACRC) {
+ u32 temp;
/* DAT line portion is disabled
* and in reset state */
- mmcsd_regs->mmc_ctl =
- mmcsd_regs->mmc_ctl | (1 << 1);
+ temp = readl(mmcsd_base + DAVINCI_MMCCTL);
+
+ writel(temp | MMCCTL_CMDRST,
+ mmcsd_base + DAVINCI_MMCCTL);
+
udelay(10);
- mmcsd_regs->mmc_ctl =
- mmcsd_regs->mmc_ctl & ~(1 << 1);
+
+ writel(temp & ~MMCCTL_CMDRST,
+ mmcsd_base + DAVINCI_MMCCTL);
/* Data CRC error */
if (host->data) {
@@ -1053,18 +1063,15 @@
end_command = 1;
}
+ status = readl(mmcsd_base + DAVINCI_MMCST0);
if (host->data == NULL) {
- status = mmcsd_regs->mmc_st0;
if (status != 0) {
dev_dbg(&mmc_dev,
"Status is %x at end of ISR "
"when host->data is NULL",
status);
status = 0;
-
}
- } else {
- status = mmcsd_regs->mmc_st0;
}
}
@@ -1140,15 +1147,18 @@
flag_sd_mmc = 0;
host->cmd_code = 1;
/* Issue cmd1 */
- mmcsd_regs->mmc_arghl = 0x80300000;
- mmcsd_regs->mmc_cmd = 0x00000601;
+ writel(0x80300000,
+ mmcsd_base + DAVINCI_MMCARGHL);
+ writel(MMCCMD_RSPFMT_R3 | 1,
+ mmcsd_base + DAVINCI_MMCCMD);
} else {
flag_sd_mmc = 1;
host->cmd_code = 55;
/* Issue cmd55 */
- mmcsd_regs->mmc_arghl = 0x0;
- mmcsd_regs->mmc_cmd =
- ((0x0 | (1 << 9) | 55));
+ writel(0x0,
+ mmcsd_base + DAVINCI_MMCARGHL);
+ writel(MMCCMD_RSPFMT_R1456 | 55,
+ mmcsd_base + DAVINCI_MMCCMD);
}
dev_dbg(&mmc_dev,
@@ -1194,25 +1204,30 @@
spin_lock_irqsave(&mmc_lock, flags);
is_card_detect_progress = 1;
spin_unlock_irqrestore(&mmc_lock, flags);
+
/* Issue cmd13 */
- mmcsd_regs->mmc_arghl = (card && mmc_card_sd(card))
- ? (card->rca << 16) : 0x10000;
- mmcsd_regs->mmc_cmd = 0x0000028D;
+ writel((card && mmc_card_sd(card))
+ ? (card->rca << 16) : 0x10000,
+ mmcsd_base + DAVINCI_MMCARGHL);
+ writel(MMCCMD_RSPFMT_R1456 | MMCCMD_PPLEN | 13,
+ mmcsd_base + DAVINCI_MMCCMD);
} else {
host->is_core_command = 0;
host->cmd_code = 0;
spin_lock_irqsave(&mmc_lock, flags);
is_card_detect_progress = 1;
spin_unlock_irqrestore(&mmc_lock, flags);
+
/* Issue cmd0 */
- mmcsd_regs->mmc_arghl = 0;
- mmcsd_regs->mmc_cmd = 0x4000;
+ writel(0, mmcsd_base + DAVINCI_MMCARGHL);
+ writel(MMCCMD_INITCK, mmcsd_base + DAVINCI_MMCCMD);
}
- mmcsd_regs->mmc_im = MMCSD_EVENT_EOFCMD
- | MMCSD_EVENT_ERROR_CMDCRC
- | MMCSD_EVENT_ERROR_DATACRC
- | MMCSD_EVENT_ERROR_CMDTIMEOUT
- | MMCSD_EVENT_ERROR_DATATIMEOUT;
+ writel(MMCSD_EVENT_EOFCMD
+ | MMCSD_EVENT_ERROR_CMDCRC
+ | MMCSD_EVENT_ERROR_DATACRC
+ | MMCSD_EVENT_ERROR_CMDTIMEOUT
+ | MMCSD_EVENT_ERROR_DATATIMEOUT,
+ mmcsd_base + DAVINCI_MMCIM);
}
}
@@ -1235,22 +1250,29 @@
mod_timer(&host->timer, jiffies + MULTIPILER_TO_HZ * HZ);
}
-static void init_mmcsd_host(void)
+static void init_mmcsd_host()
{
- /* CMD line portion is diabled and in reset state */
- mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl | 0x1;
/* DAT line portion is diabled and in reset state */
- mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl | (1 << 1);
+ writel(readl(mmcsd_base + DAVINCI_MMCCTL) | MMCCTL_DATRST,
+ mmcsd_base + DAVINCI_MMCCTL);
+
+ /* CMD line portion is diabled and in reset state */
+ writel(readl(mmcsd_base + DAVINCI_MMCCTL) | MMCCTL_CMDRST,
+ mmcsd_base + DAVINCI_MMCCTL);
+
udelay(10);
- mmcsd_regs->mmc_clk = 0x0;
- mmcsd_regs->mmc_clk = mmcsd_regs->mmc_clk | (1 << 8);
+ writel(0, mmcsd_base + DAVINCI_MMCCLK);
+ writel(MMCCLK_CLKEN, mmcsd_base + DAVINCI_MMCCLK);
+
+ writel(0xFFFF, mmcsd_base + DAVINCI_MMCTOR);
+ writel(0xFFFF, mmcsd_base + DAVINCI_MMCTOD);
- mmcsd_regs->mmc_tor = 0xFFFF;
- mmcsd_regs->mmc_tod = 0xFFFF;
+ writel(readl(mmcsd_base + DAVINCI_MMCCTL) & ~MMCCTL_DATRST,
+ mmcsd_base + DAVINCI_MMCCTL);
+ writel(readl(mmcsd_base + DAVINCI_MMCCTL) & ~MMCCTL_CMDRST,
+ mmcsd_base + DAVINCI_MMCCTL);
- mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl & ~(0x1);
- mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl & ~(1 << 1);
udelay(10);
}
@@ -1266,8 +1288,7 @@
goto out;
}
- mmcsd_regs = (volatile struct mmcsd_regs_base *)
- IO_ADDRESS(MMCSD_REGS_BASE_ADDR);
+ mmcsd_base = (void __iomem *)IO_ADDRESS(MMCSD_REGS_BASE_ADDR);
init_mmcsd_host();
Index: linux-davinci-2.6.24.git/drivers/mmc/host/davinci_mmc.h
===================================================================
--- linux-davinci-2.6.24.git.orig/drivers/mmc/host/davinci_mmc.h
2008-02-15 20:39:37.000000000 +0900
+++ linux-davinci-2.6.24.git/drivers/mmc/host/davinci_mmc.h 2008-02-15
20:39:48.000000000 +0900
@@ -36,63 +36,115 @@
#ifndef DAVINCI_MMC_H_
#define DAVINCI_MMC_H_
-/**************************************************************************\
-* Register Overlay Structure
-\**************************************************************************/
-
-struct mmcsd_regs_base {
- unsigned short mmc_ctl;
- unsigned char rsvd0[2];
- unsigned short mmc_clk;
- unsigned char rsvd1[2];
- unsigned short mmc_st0;
- unsigned char rsvd2[2];
- unsigned short mmc_st1;
- unsigned char rsvd3[2];
- unsigned short mmc_im;
- unsigned char rsvd4[2];
- unsigned short mmc_tor;
- unsigned char rsvd5[2];
- unsigned short mmc_tod;
- unsigned char rsvd6[2];
- unsigned short mmc_blen;
- unsigned char rsvd7[2];
- unsigned short mmc_nblk;
- unsigned char rsvd8[2];
- unsigned short mmc_nblc;
- unsigned char rsvd9[2];
- unsigned int mmc_drr;
- unsigned int mmc_dxr;
- unsigned int mmc_cmd;
- unsigned int mmc_arghl;
- unsigned int mmc_rsp01;
- unsigned int mmc_rsp23;
- unsigned int mmc_rsp45;
- unsigned int mmc_rsp67;
- unsigned short mmc_drsp;
- unsigned char rsvd10[2];
- unsigned short mmc_etok;
- unsigned char rsvd11[2];
- unsigned short mmc_cidx;
- unsigned char rsvd12[2];
- unsigned short mmc_ckc;
- unsigned char rsvd13[2];
- unsigned short mmc_torc;
- unsigned char rsvd14[2];
- unsigned short mmc_todc;
- unsigned char rsvd15[2];
- unsigned short mmc_blnc;
- unsigned char rsvd16[2];
- unsigned short sdio_ctl;
- unsigned char rsvd17[2];
- unsigned short sdio_st0;
- unsigned char rsvd18[2];
- unsigned short sdio_en;
- unsigned char rsvd19[2];
- unsigned short sdio_st;
- unsigned char rsvd20[2];
- unsigned short mmc_fifo_ctl;
-};
+/**************************************************************************
+ * Register Definitions
+ **************************************************************************/
+
+#define DAVINCI_MMCCTL 0x00 /* Control Register */
+#define DAVINCI_MMCCLK 0x04 /* Memory Clock Control Register */
+#define DAVINCI_MMCST0 0x08 /* Status Register 0 */
+#define DAVINCI_MMCST1 0x0C /* Status Register 1 */
+#define DAVINCI_MMCIM 0x10 /* Interrupt Mask Register */
+#define DAVINCI_MMCTOR 0x14 /* Response Time-Out Register */
+#define DAVINCI_MMCTOD 0x18 /* Data Read Time-Out Register */
+#define DAVINCI_MMCBLEN 0x1C /* Block Length Register */
+#define DAVINCI_MMCNBLK 0x20 /* Number of Blocks Register */
+#define DAVINCI_MMCNBLC 0x24 /* Number of Blocks Counter Register */
+#define DAVINCI_MMCDRR 0x28 /* Data Receive Register */
+#define DAVINCI_MMCDXR 0x2C /* Data Transmit Register */
+#define DAVINCI_MMCCMD 0x30 /* Command Register */
+#define DAVINCI_MMCARGHL 0x34 /* Argument Register */
+#define DAVINCI_MMCRSP01 0x38 /* Response Register 0 and 1 */
+#define DAVINCI_MMCRSP23 0x3C /* Response Register 0 and 1 */
+#define DAVINCI_MMCRSP45 0x40 /* Response Register 0 and 1 */
+#define DAVINCI_MMCRSP67 0x44 /* Response Register 0 and 1 */
+#define DAVINCI_MMCDRSP 0x48 /* Data Response Register */
+#define DAVINCI_MMCETOK 0x4C
+#define DAVINCI_MMCCIDX 0x50 /* Command Index Register */
+#define DAVINCI_MMCCKC 0x54
+#define DAVINCI_MMCTORC 0x58
+#define DAVINCI_MMCTODC 0x5C
+#define DAVINCI_MMCBLNC 0x60
+#define DAVINCI_SDIOCTL 0x64
+#define DAVINCI_SDIOST0 0x68
+#define DAVINCI_SDIOEN 0x6C
+#define DAVINCI_SDIOST 0x70
+#define DAVINCI_MMCFIFOCTL 0x74 /* FIFO Control Register */
+
+/* DAVINCI_MMCCTL definitions */
+#define MMCCTL_DATRST (1 << 0)
+#define MMCCTL_CMDRST (1 << 1)
+#define MMCCTL_WIDTH_4_BIT (1 << 2)
+#define MMCCTL_DATEG_DISABLED (0 << 6)
+#define MMCCTL_DATEG_RISING (1 << 6)
+#define MMCCTL_DATEG_FALLING (2 << 6)
+#define MMCCTL_DATEG_BOTH (3 << 6)
+#define MMCCTL_PERMDR_LE (0 << 9)
+#define MMCCTL_PERMDR_BE (1 << 9)
+#define MMCCTL_PERMDX_LE (0 << 10)
+#define MMCCTL_PERMDX_BE (1 << 10)
+
+/* DAVINCI_MMCCLK definitions */
+#define MMCCLK_CLKEN (1 << 8)
+#define MMCCLK_CLKRT_MASK (0xFF << 0)
+
+/* DAVINCI_MMCST0 definitions */
+#define MMCST0_DATDNE (1 << 0)
+#define MMCST0_BSYDNE (1 << 1)
+#define MMCST0_RSPDNE (1 << 2)
+#define MMCST0_TOUTRD (1 << 3)
+#define MMCST0_TOUTRS (1 << 4)
+#define MMCST0_CRCWR (1 << 5)
+#define MMCST0_CRCRD (1 << 6)
+#define MMCST0_CRCRS (1 << 7)
+#define MMCST0_DXRDY (1 << 9)
+#define MMCST0_DRRDY (1 << 10)
+#define MMCST0_DATED (1 << 11)
+#define MMCST0_TRNDNE (1 << 12)
+
+/* DAVINCI_MMCST1 definitions */
+#define MMCST1_BUSY (1 << 0)
+
+/* DAVINCI_MMCIM definitions */
+#define MMCIM_EDATDNE (1 << 0)
+#define MMCIM_EBSYDNE (1 << 1)
+#define MMCIM_ERSPDNE (1 << 2)
+#define MMCIM_ETOUTRD (1 << 3)
+#define MMCIM_ETOUTRS (1 << 4)
+#define MMCIM_ECRCWR (1 << 5)
+#define MMCIM_ECRCRD (1 << 6)
+#define MMCIM_ECRCRS (1 << 7)
+#define MMCIM_EDXRDY (1 << 9)
+#define MMCIM_EDRRDY (1 << 10)
+#define MMCIM_EDATED (1 << 11)
+#define MMCIM_ETRNDNE (1 << 12)
+
+/* DAVINCI_MMCCMD definitions */
+#define MMCCMD_CMD_MASK (0x3F << 0)
+#define MMCCMD_PPLEN (1 << 7)
+#define MMCCMD_BSYEXP (1 << 8)
+#define MMCCMD_RSPFMT_MASK (3 << 9)
+#define MMCCMD_RSPFMT_NONE (0 << 9)
+#define MMCCMD_RSPFMT_R1456 (1 << 9)
+#define MMCCMD_RSPFMT_R2 (2 << 9)
+#define MMCCMD_RSPFMT_R3 (3 << 9)
+#define MMCCMD_DTRW (1 << 11)
+#define MMCCMD_STRMTP (1 << 12)
+#define MMCCMD_WDATX (1 << 13)
+#define MMCCMD_INITCK (1 << 14)
+#define MMCCMD_DCLR (1 << 15)
+#define MMCCMD_DMATRIG (1 << 16)
+
+/* DAVINCI_MMCFIFOCTL definitions */
+#define MMCFIFOCTL_FIFORST (1 << 0)
+#define MMCFIFOCTL_FIFODIR_WR (1 << 1)
+#define MMCFIFOCTL_FIFODIR_RD (0 << 1)
+#define MMCFIFOCTL_FIFOLEV (1 << 2) /* 0 = 128 bits, 1 = 256 bits */
+#define MMCFIFOCTL_ACCWD_4 (0 << 3) /* access width of 4 bytes */
+#define MMCFIFOCTL_ACCWD_3 (1 << 3) /* access width of 3 bytes */
+#define MMCFIFOCTL_ACCWD_2 (2 << 3) /* access width of 2 bytes */
+#define MMCFIFOCTL_ACCWD_1 (3 << 3) /* access width of 1 byte */
+
/*
* Command types
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source