Merge master.kernel.org:/home/rmk/linux-2.6-mmc
* master.kernel.org:/home/rmk/linux-2.6-mmc: [MMC] Pass -DDEBUG on compiler command line if MMC_DEBUG selected [MMC] Add OMAP MMC host driver
This commit is contained in:
commit
500156a0f0
|
@ -60,6 +60,17 @@ config MMC_SDHCI
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config MMC_OMAP
|
||||
tristate "TI OMAP Multimedia Card Interface support"
|
||||
depends on ARCH_OMAP && MMC
|
||||
select TPS65010 if MACH_OMAP_H2
|
||||
help
|
||||
This selects the TI OMAP Multimedia card Interface.
|
||||
If you have an OMAP board with a Multimedia Card slot,
|
||||
say Y or M here.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config MMC_WBSD
|
||||
tristate "Winbond W83L51xD SD/MMC Card Interface support"
|
||||
depends on MMC && ISA_DMA_API
|
||||
|
|
|
@ -20,5 +20,10 @@ obj-$(CONFIG_MMC_PXA) += pxamci.o
|
|||
obj-$(CONFIG_MMC_SDHCI) += sdhci.o
|
||||
obj-$(CONFIG_MMC_WBSD) += wbsd.o
|
||||
obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
|
||||
obj-$(CONFIG_MMC_OMAP) += omap.o
|
||||
|
||||
mmc_core-y := mmc.o mmc_queue.o mmc_sysfs.o
|
||||
|
||||
ifeq ($(CONFIG_MMC_DEBUG),y)
|
||||
EXTRA_CFLAGS += -DDEBUG
|
||||
endif
|
||||
|
|
|
@ -56,12 +56,11 @@
|
|||
#define DRIVER_NAME "au1xxx-mmc"
|
||||
|
||||
/* Set this to enable special debugging macros */
|
||||
/* #define MMC_DEBUG */
|
||||
|
||||
#ifdef MMC_DEBUG
|
||||
#define DEBUG(fmt, idx, args...) printk("au1xx(%d): DEBUG: " fmt, idx, ##args)
|
||||
#ifdef DEBUG
|
||||
#define DBG(fmt, idx, args...) printk("au1xx(%d): DEBUG: " fmt, idx, ##args)
|
||||
#else
|
||||
#define DEBUG(fmt, idx, args...)
|
||||
#define DBG(fmt, idx, args...)
|
||||
#endif
|
||||
|
||||
const struct {
|
||||
|
@ -424,18 +423,18 @@ static void au1xmmc_receive_pio(struct au1xmmc_host *host)
|
|||
break;
|
||||
|
||||
if (status & SD_STATUS_RC) {
|
||||
DEBUG("RX CRC Error [%d + %d].\n", host->id,
|
||||
DBG("RX CRC Error [%d + %d].\n", host->id,
|
||||
host->pio.len, count);
|
||||
break;
|
||||
}
|
||||
|
||||
if (status & SD_STATUS_RO) {
|
||||
DEBUG("RX Overrun [%d + %d]\n", host->id,
|
||||
DBG("RX Overrun [%d + %d]\n", host->id,
|
||||
host->pio.len, count);
|
||||
break;
|
||||
}
|
||||
else if (status & SD_STATUS_RU) {
|
||||
DEBUG("RX Underrun [%d + %d]\n", host->id,
|
||||
DBG("RX Underrun [%d + %d]\n", host->id,
|
||||
host->pio.len, count);
|
||||
break;
|
||||
}
|
||||
|
@ -721,7 +720,7 @@ static void au1xmmc_set_ios(struct mmc_host* mmc, struct mmc_ios* ios)
|
|||
{
|
||||
struct au1xmmc_host *host = mmc_priv(mmc);
|
||||
|
||||
DEBUG("set_ios (power=%u, clock=%uHz, vdd=%u, mode=%u)\n",
|
||||
DBG("set_ios (power=%u, clock=%uHz, vdd=%u, mode=%u)\n",
|
||||
host->id, ios->power_mode, ios->clock, ios->vdd,
|
||||
ios->bus_mode);
|
||||
|
||||
|
@ -810,7 +809,7 @@ static irqreturn_t au1xmmc_irq(int irq, void *dev_id, struct pt_regs *regs)
|
|||
au1xmmc_receive_pio(host);
|
||||
}
|
||||
else if (status & 0x203FBC70) {
|
||||
DEBUG("Unhandled status %8.8x\n", host->id, status);
|
||||
DBG("Unhandled status %8.8x\n", host->id, status);
|
||||
handled = 0;
|
||||
}
|
||||
|
||||
|
@ -839,7 +838,7 @@ static void au1xmmc_poll_event(unsigned long arg)
|
|||
|
||||
if (host->mrq != NULL) {
|
||||
u32 status = au_readl(HOST_STATUS(host));
|
||||
DEBUG("PENDING - %8.8x\n", host->id, status);
|
||||
DBG("PENDING - %8.8x\n", host->id, status);
|
||||
}
|
||||
|
||||
mod_timer(&host->timer, jiffies + AU1XMMC_DETECT_TIMEOUT);
|
||||
|
|
|
@ -27,12 +27,6 @@
|
|||
|
||||
#include "mmc.h"
|
||||
|
||||
#ifdef CONFIG_MMC_DEBUG
|
||||
#define DBG(x...) printk(KERN_DEBUG x)
|
||||
#else
|
||||
#define DBG(x...) do { } while (0)
|
||||
#endif
|
||||
|
||||
#define CMD_RETRIES 3
|
||||
|
||||
/*
|
||||
|
@ -77,8 +71,9 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
|
|||
{
|
||||
struct mmc_command *cmd = mrq->cmd;
|
||||
int err = mrq->cmd->error;
|
||||
DBG("MMC: req done (%02x): %d: %08x %08x %08x %08x\n", cmd->opcode,
|
||||
err, cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
|
||||
pr_debug("MMC: req done (%02x): %d: %08x %08x %08x %08x\n",
|
||||
cmd->opcode, err, cmd->resp[0], cmd->resp[1],
|
||||
cmd->resp[2], cmd->resp[3]);
|
||||
|
||||
if (err && cmd->retries) {
|
||||
cmd->retries--;
|
||||
|
@ -102,8 +97,8 @@ EXPORT_SYMBOL(mmc_request_done);
|
|||
void
|
||||
mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
|
||||
{
|
||||
DBG("MMC: starting cmd %02x arg %08x flags %08x\n",
|
||||
mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags);
|
||||
pr_debug("MMC: starting cmd %02x arg %08x flags %08x\n",
|
||||
mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags);
|
||||
|
||||
WARN_ON(host->card_busy == NULL);
|
||||
|
||||
|
@ -976,8 +971,8 @@ static unsigned int mmc_calculate_clock(struct mmc_host *host)
|
|||
if (!mmc_card_dead(card) && max_dtr > card->csd.max_dtr)
|
||||
max_dtr = card->csd.max_dtr;
|
||||
|
||||
DBG("MMC: selected %d.%03dMHz transfer rate\n",
|
||||
max_dtr / 1000000, (max_dtr / 1000) % 1000);
|
||||
pr_debug("MMC: selected %d.%03dMHz transfer rate\n",
|
||||
max_dtr / 1000000, (max_dtr / 1000) % 1000);
|
||||
|
||||
return max_dtr;
|
||||
}
|
||||
|
|
|
@ -33,12 +33,8 @@
|
|||
|
||||
#define DRIVER_NAME "mmci-pl18x"
|
||||
|
||||
#ifdef CONFIG_MMC_DEBUG
|
||||
#define DBG(host,fmt,args...) \
|
||||
pr_debug("%s: %s: " fmt, mmc_hostname(host->mmc), __func__ , args)
|
||||
#else
|
||||
#define DBG(host,fmt,args...) do { } while (0)
|
||||
#endif
|
||||
|
||||
static unsigned int fmax = 515633;
|
||||
|
||||
|
|
1226
drivers/mmc/omap.c
Normal file
1226
drivers/mmc/omap.c
Normal file
File diff suppressed because it is too large
Load Diff
55
drivers/mmc/omap.h
Normal file
55
drivers/mmc/omap.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
#ifndef DRIVERS_MEDIA_MMC_OMAP_H
|
||||
#define DRIVERS_MEDIA_MMC_OMAP_H
|
||||
|
||||
#define OMAP_MMC_REG_CMD 0x00
|
||||
#define OMAP_MMC_REG_ARGL 0x04
|
||||
#define OMAP_MMC_REG_ARGH 0x08
|
||||
#define OMAP_MMC_REG_CON 0x0c
|
||||
#define OMAP_MMC_REG_STAT 0x10
|
||||
#define OMAP_MMC_REG_IE 0x14
|
||||
#define OMAP_MMC_REG_CTO 0x18
|
||||
#define OMAP_MMC_REG_DTO 0x1c
|
||||
#define OMAP_MMC_REG_DATA 0x20
|
||||
#define OMAP_MMC_REG_BLEN 0x24
|
||||
#define OMAP_MMC_REG_NBLK 0x28
|
||||
#define OMAP_MMC_REG_BUF 0x2c
|
||||
#define OMAP_MMC_REG_SDIO 0x34
|
||||
#define OMAP_MMC_REG_REV 0x3c
|
||||
#define OMAP_MMC_REG_RSP0 0x40
|
||||
#define OMAP_MMC_REG_RSP1 0x44
|
||||
#define OMAP_MMC_REG_RSP2 0x48
|
||||
#define OMAP_MMC_REG_RSP3 0x4c
|
||||
#define OMAP_MMC_REG_RSP4 0x50
|
||||
#define OMAP_MMC_REG_RSP5 0x54
|
||||
#define OMAP_MMC_REG_RSP6 0x58
|
||||
#define OMAP_MMC_REG_RSP7 0x5c
|
||||
#define OMAP_MMC_REG_IOSR 0x60
|
||||
#define OMAP_MMC_REG_SYSC 0x64
|
||||
#define OMAP_MMC_REG_SYSS 0x68
|
||||
|
||||
#define OMAP_MMC_STAT_CARD_ERR (1 << 14)
|
||||
#define OMAP_MMC_STAT_CARD_IRQ (1 << 13)
|
||||
#define OMAP_MMC_STAT_OCR_BUSY (1 << 12)
|
||||
#define OMAP_MMC_STAT_A_EMPTY (1 << 11)
|
||||
#define OMAP_MMC_STAT_A_FULL (1 << 10)
|
||||
#define OMAP_MMC_STAT_CMD_CRC (1 << 8)
|
||||
#define OMAP_MMC_STAT_CMD_TOUT (1 << 7)
|
||||
#define OMAP_MMC_STAT_DATA_CRC (1 << 6)
|
||||
#define OMAP_MMC_STAT_DATA_TOUT (1 << 5)
|
||||
#define OMAP_MMC_STAT_END_BUSY (1 << 4)
|
||||
#define OMAP_MMC_STAT_END_OF_DATA (1 << 3)
|
||||
#define OMAP_MMC_STAT_CARD_BUSY (1 << 2)
|
||||
#define OMAP_MMC_STAT_END_OF_CMD (1 << 0)
|
||||
|
||||
#define OMAP_MMC_READ(base, reg) __raw_readw((base) + OMAP_MMC_REG_##reg)
|
||||
#define OMAP_MMC_WRITE(base, reg, val) __raw_writew((val), (base) + OMAP_MMC_REG_##reg)
|
||||
|
||||
/*
|
||||
* Command types
|
||||
*/
|
||||
#define OMAP_MMC_CMDTYPE_BC 0
|
||||
#define OMAP_MMC_CMDTYPE_BCR 1
|
||||
#define OMAP_MMC_CMDTYPE_AC 2
|
||||
#define OMAP_MMC_CMDTYPE_ADTC 3
|
||||
|
||||
#endif
|
|
@ -37,12 +37,6 @@
|
|||
|
||||
#include "pxamci.h"
|
||||
|
||||
#ifdef CONFIG_MMC_DEBUG
|
||||
#define DBG(x...) printk(KERN_DEBUG x)
|
||||
#else
|
||||
#define DBG(x...) do { } while (0)
|
||||
#endif
|
||||
|
||||
#define DRIVER_NAME "pxa2xx-mci"
|
||||
|
||||
#define NR_SG 1
|
||||
|
@ -206,7 +200,7 @@ static void pxamci_start_cmd(struct pxamci_host *host, struct mmc_command *cmd,
|
|||
|
||||
static void pxamci_finish_request(struct pxamci_host *host, struct mmc_request *mrq)
|
||||
{
|
||||
DBG("PXAMCI: request done\n");
|
||||
pr_debug("PXAMCI: request done\n");
|
||||
host->mrq = NULL;
|
||||
host->cmd = NULL;
|
||||
host->data = NULL;
|
||||
|
@ -252,7 +246,7 @@ static int pxamci_cmd_done(struct pxamci_host *host, unsigned int stat)
|
|||
if ((cmd->resp[0] & 0x80000000) == 0)
|
||||
cmd->error = MMC_ERR_BADCRC;
|
||||
} else {
|
||||
DBG("ignoring CRC from command %d - *risky*\n",cmd->opcode);
|
||||
pr_debug("ignoring CRC from command %d - *risky*\n",cmd->opcode);
|
||||
}
|
||||
#else
|
||||
cmd->error = MMC_ERR_BADCRC;
|
||||
|
@ -317,12 +311,12 @@ static irqreturn_t pxamci_irq(int irq, void *devid, struct pt_regs *regs)
|
|||
|
||||
ireg = readl(host->base + MMC_I_REG);
|
||||
|
||||
DBG("PXAMCI: irq %08x\n", ireg);
|
||||
pr_debug("PXAMCI: irq %08x\n", ireg);
|
||||
|
||||
if (ireg) {
|
||||
unsigned stat = readl(host->base + MMC_STAT);
|
||||
|
||||
DBG("PXAMCI: stat %08x\n", stat);
|
||||
pr_debug("PXAMCI: stat %08x\n", stat);
|
||||
|
||||
if (ireg & END_CMD_RES)
|
||||
handled |= pxamci_cmd_done(host, stat);
|
||||
|
@ -376,9 +370,9 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
|||
{
|
||||
struct pxamci_host *host = mmc_priv(mmc);
|
||||
|
||||
DBG("pxamci_set_ios: clock %u power %u vdd %u.%02u\n",
|
||||
ios->clock, ios->power_mode, ios->vdd / 100,
|
||||
ios->vdd % 100);
|
||||
pr_debug("pxamci_set_ios: clock %u power %u vdd %u.%02u\n",
|
||||
ios->clock, ios->power_mode, ios->vdd / 100,
|
||||
ios->vdd % 100);
|
||||
|
||||
if (ios->clock) {
|
||||
unsigned int clk = CLOCKRATE / ios->clock;
|
||||
|
@ -405,8 +399,8 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
|||
host->cmdat |= CMDAT_INIT;
|
||||
}
|
||||
|
||||
DBG("pxamci_set_ios: clkrt = %x cmdat = %x\n",
|
||||
host->clkrt, host->cmdat);
|
||||
pr_debug("pxamci_set_ios: clkrt = %x cmdat = %x\n",
|
||||
host->clkrt, host->cmdat);
|
||||
}
|
||||
|
||||
static struct mmc_host_ops pxamci_ops = {
|
||||
|
|
|
@ -31,12 +31,8 @@
|
|||
|
||||
#define BUGMAIL "<sdhci-devel@list.drzeus.cx>"
|
||||
|
||||
#ifdef CONFIG_MMC_DEBUG
|
||||
#define DBG(f, x...) \
|
||||
printk(KERN_DEBUG DRIVER_NAME " [%s()]: " f, __func__,## x)
|
||||
#else
|
||||
#define DBG(f, x...) do { } while (0)
|
||||
#endif
|
||||
pr_debug(DRIVER_NAME " [%s()]: " f, __func__,## x)
|
||||
|
||||
static const struct pci_device_id pci_ids[] __devinitdata = {
|
||||
/* handle any SD host controller */
|
||||
|
|
|
@ -44,15 +44,10 @@
|
|||
#define DRIVER_NAME "wbsd"
|
||||
#define DRIVER_VERSION "1.5"
|
||||
|
||||
#ifdef CONFIG_MMC_DEBUG
|
||||
#define DBG(x...) \
|
||||
printk(KERN_DEBUG DRIVER_NAME ": " x)
|
||||
pr_debug(DRIVER_NAME ": " x)
|
||||
#define DBGF(f, x...) \
|
||||
printk(KERN_DEBUG DRIVER_NAME " [%s()]: " f, __func__ , ##x)
|
||||
#else
|
||||
#define DBG(x...) do { } while (0)
|
||||
#define DBGF(x...) do { } while (0)
|
||||
#endif
|
||||
pr_debug(DRIVER_NAME " [%s()]: " f, __func__ , ##x)
|
||||
|
||||
/*
|
||||
* Device resources
|
||||
|
|
Loading…
Reference in New Issue
Block a user