Commit 6fc56ccf authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-mmc

* master.kernel.org:/home/rmk/linux-2.6-mmc:
  [MMC] Move set_ios debugging into mmc.c
  [MMC] Correct mmc_request_done comments
  [MMC] PXA: reduce the number of lines PXAMCI debug uses
  [MMC] PXA and i.MX: don't avoid sending stop command on error
  [MMC] extend data timeout for writes
  [ARM] 3485/1: i.MX: MX1 SD/MMC fix of unintentional double start possibility
parents cbdf811c 920e70c5
...@@ -621,9 +621,6 @@ static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -621,9 +621,6 @@ static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
struct at91mci_host *host = mmc_priv(mmc); struct at91mci_host *host = mmc_priv(mmc);
unsigned long at91_master_clock = clk_get_rate(mci_clk); unsigned long at91_master_clock = clk_get_rate(mci_clk);
DBG("Clock %uHz, busmode %u, powermode %u, Vdd %u\n",
ios->clock, ios->bus_mode, ios->power_mode, ios->vdd);
if (host) if (host)
host->bus_mode = ios->bus_mode; host->bus_mode = ios->bus_mode;
else else
......
...@@ -720,10 +720,6 @@ static void au1xmmc_set_ios(struct mmc_host* mmc, struct mmc_ios* ios) ...@@ -720,10 +720,6 @@ static void au1xmmc_set_ios(struct mmc_host* mmc, struct mmc_ios* ios)
{ {
struct au1xmmc_host *host = mmc_priv(mmc); struct au1xmmc_host *host = mmc_priv(mmc);
DBG("set_ios (power=%u, clock=%uHz, vdd=%u, mode=%u)\n",
host->id, ios->power_mode, ios->clock, ios->vdd,
ios->bus_mode);
if (ios->power_mode == MMC_POWER_OFF) if (ios->power_mode == MMC_POWER_OFF)
au1xmmc_set_power(host, 0); au1xmmc_set_power(host, 0);
else if (ios->power_mode == MMC_POWER_ON) { else if (ios->power_mode == MMC_POWER_ON) {
......
...@@ -102,6 +102,7 @@ struct imxmci_host { ...@@ -102,6 +102,7 @@ struct imxmci_host {
#define IMXMCI_PEND_CPU_DATA_b 5 #define IMXMCI_PEND_CPU_DATA_b 5
#define IMXMCI_PEND_CARD_XCHG_b 6 #define IMXMCI_PEND_CARD_XCHG_b 6
#define IMXMCI_PEND_SET_INIT_b 7 #define IMXMCI_PEND_SET_INIT_b 7
#define IMXMCI_PEND_STARTED_b 8
#define IMXMCI_PEND_IRQ_m (1 << IMXMCI_PEND_IRQ_b) #define IMXMCI_PEND_IRQ_m (1 << IMXMCI_PEND_IRQ_b)
#define IMXMCI_PEND_DMA_END_m (1 << IMXMCI_PEND_DMA_END_b) #define IMXMCI_PEND_DMA_END_m (1 << IMXMCI_PEND_DMA_END_b)
...@@ -111,6 +112,7 @@ struct imxmci_host { ...@@ -111,6 +112,7 @@ struct imxmci_host {
#define IMXMCI_PEND_CPU_DATA_m (1 << IMXMCI_PEND_CPU_DATA_b) #define IMXMCI_PEND_CPU_DATA_m (1 << IMXMCI_PEND_CPU_DATA_b)
#define IMXMCI_PEND_CARD_XCHG_m (1 << IMXMCI_PEND_CARD_XCHG_b) #define IMXMCI_PEND_CARD_XCHG_m (1 << IMXMCI_PEND_CARD_XCHG_b)
#define IMXMCI_PEND_SET_INIT_m (1 << IMXMCI_PEND_SET_INIT_b) #define IMXMCI_PEND_SET_INIT_m (1 << IMXMCI_PEND_SET_INIT_b)
#define IMXMCI_PEND_STARTED_m (1 << IMXMCI_PEND_STARTED_b)
static void imxmci_stop_clock(struct imxmci_host *host) static void imxmci_stop_clock(struct imxmci_host *host)
{ {
...@@ -131,23 +133,52 @@ static void imxmci_stop_clock(struct imxmci_host *host) ...@@ -131,23 +133,52 @@ static void imxmci_stop_clock(struct imxmci_host *host)
dev_dbg(mmc_dev(host->mmc), "imxmci_stop_clock blocked, no luck\n"); dev_dbg(mmc_dev(host->mmc), "imxmci_stop_clock blocked, no luck\n");
} }
static void imxmci_start_clock(struct imxmci_host *host) static int imxmci_start_clock(struct imxmci_host *host)
{ {
int i = 0; unsigned int trials = 0;
unsigned int delay_limit = 128;
unsigned long flags;
MMC_STR_STP_CLK &= ~STR_STP_CLK_STOP_CLK; MMC_STR_STP_CLK &= ~STR_STP_CLK_STOP_CLK;
while(i < 0x1000) {
if(!(i & 0x7f))
MMC_STR_STP_CLK |= STR_STP_CLK_START_CLK;
if(MMC_STATUS & STATUS_CARD_BUS_CLK_RUN) { clear_bit(IMXMCI_PEND_STARTED_b, &host->pending_events);
/* Check twice before cut */
/*
* Command start of the clock, this usually succeeds in less
* then 6 delay loops, but during card detection (low clockrate)
* it takes up to 5000 delay loops and sometimes fails for the first time
*/
MMC_STR_STP_CLK |= STR_STP_CLK_START_CLK;
do {
unsigned int delay = delay_limit;
while(delay--){
if(MMC_STATUS & STATUS_CARD_BUS_CLK_RUN) if(MMC_STATUS & STATUS_CARD_BUS_CLK_RUN)
return; /* Check twice before cut */
if(MMC_STATUS & STATUS_CARD_BUS_CLK_RUN)
return 0;
if(test_bit(IMXMCI_PEND_STARTED_b, &host->pending_events))
return 0;
} }
i++; local_irq_save(flags);
} /*
dev_dbg(mmc_dev(host->mmc), "imxmci_start_clock blocked, no luck\n"); * Ensure, that request is not doubled under all possible circumstances.
* It is possible, that cock running state is missed, because some other
* IRQ or schedule delays this function execution and the clocks has
* been already stopped by other means (response processing, SDHC HW)
*/
if(!test_bit(IMXMCI_PEND_STARTED_b, &host->pending_events))
MMC_STR_STP_CLK |= STR_STP_CLK_START_CLK;
local_irq_restore(flags);
} while(++trials<256);
dev_err(mmc_dev(host->mmc), "imxmci_start_clock blocked, no luck\n");
return -1;
} }
static void imxmci_softreset(void) static void imxmci_softreset(void)
...@@ -498,7 +529,7 @@ static int imxmci_data_done(struct imxmci_host *host, unsigned int stat) ...@@ -498,7 +529,7 @@ static int imxmci_data_done(struct imxmci_host *host, unsigned int stat)
data_error = imxmci_finish_data(host, stat); data_error = imxmci_finish_data(host, stat);
if (host->req->stop && (data_error == MMC_ERR_NONE)) { if (host->req->stop) {
imxmci_stop_clock(host); imxmci_stop_clock(host);
imxmci_start_cmd(host, host->req->stop, 0); imxmci_start_cmd(host, host->req->stop, 0);
} else { } else {
...@@ -622,6 +653,7 @@ static irqreturn_t imxmci_irq(int irq, void *devid, struct pt_regs *regs) ...@@ -622,6 +653,7 @@ static irqreturn_t imxmci_irq(int irq, void *devid, struct pt_regs *regs)
atomic_set(&host->stuck_timeout, 0); atomic_set(&host->stuck_timeout, 0);
host->status_reg = stat; host->status_reg = stat;
set_bit(IMXMCI_PEND_IRQ_b, &host->pending_events); set_bit(IMXMCI_PEND_IRQ_b, &host->pending_events);
set_bit(IMXMCI_PEND_STARTED_b, &host->pending_events);
tasklet_schedule(&host->tasklet); tasklet_schedule(&host->tasklet);
return IRQ_RETVAL(handled);; return IRQ_RETVAL(handled);;
...@@ -775,10 +807,6 @@ static void imxmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -775,10 +807,6 @@ static void imxmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
struct imxmci_host *host = mmc_priv(mmc); struct imxmci_host *host = mmc_priv(mmc);
int prescaler; int prescaler;
dev_dbg(mmc_dev(host->mmc), "clock %u power %u vdd %u width %u\n",
ios->clock, ios->power_mode, ios->vdd,
(ios->bus_width==MMC_BUS_WIDTH_4)?4:1);
if( ios->bus_width==MMC_BUS_WIDTH_4 ) { if( ios->bus_width==MMC_BUS_WIDTH_4 ) {
host->actual_bus_width = MMC_BUS_WIDTH_4; host->actual_bus_width = MMC_BUS_WIDTH_4;
imx_gpio_mode(PB11_PF_SD_DAT3); imx_gpio_mode(PB11_PF_SD_DAT3);
......
...@@ -59,21 +59,23 @@ static const unsigned int tacc_mant[] = { ...@@ -59,21 +59,23 @@ static const unsigned int tacc_mant[] = {
/** /**
* mmc_request_done - finish processing an MMC command * mmc_request_done - finish processing an MMC request
* @host: MMC host which completed command * @host: MMC host which completed request
* @mrq: MMC request which completed * @mrq: MMC request which request
* *
* MMC drivers should call this function when they have completed * MMC drivers should call this function when they have completed
* their processing of a command. This should be called before the * their processing of a request.
* data part of the command has completed.
*/ */
void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq) void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
{ {
struct mmc_command *cmd = mrq->cmd; struct mmc_command *cmd = mrq->cmd;
int err = mrq->cmd->error; int err = cmd->error;
pr_debug("MMC: req done (%02x): %d: %08x %08x %08x %08x\n",
cmd->opcode, err, cmd->resp[0], cmd->resp[1], pr_debug("%s: req done (CMD%u): %d/%d/%d: %08x %08x %08x %08x\n",
cmd->resp[2], cmd->resp[3]); mmc_hostname(host), cmd->opcode, err,
mrq->data ? mrq->data->error : 0,
mrq->stop ? mrq->stop->error : 0,
cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
if (err && cmd->retries) { if (err && cmd->retries) {
cmd->retries--; cmd->retries--;
...@@ -97,8 +99,9 @@ EXPORT_SYMBOL(mmc_request_done); ...@@ -97,8 +99,9 @@ EXPORT_SYMBOL(mmc_request_done);
void void
mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
{ {
pr_debug("MMC: starting cmd %02x arg %08x flags %08x\n", pr_debug("%s: starting CMD%u arg %08x flags %08x\n",
mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags); mmc_hostname(host), mrq->cmd->opcode,
mrq->cmd->arg, mrq->cmd->flags);
WARN_ON(host->card_busy == NULL); WARN_ON(host->card_busy == NULL);
...@@ -312,6 +315,18 @@ void mmc_release_host(struct mmc_host *host) ...@@ -312,6 +315,18 @@ void mmc_release_host(struct mmc_host *host)
EXPORT_SYMBOL(mmc_release_host); EXPORT_SYMBOL(mmc_release_host);
static inline void mmc_set_ios(struct mmc_host *host)
{
struct mmc_ios *ios = &host->ios;
pr_debug("%s: clock %uHz busmode %u powermode %u cs %u Vdd %u width %u\n",
mmc_hostname(host), ios->clock, ios->bus_mode,
ios->power_mode, ios->chip_select, ios->vdd,
ios->bus_width);
host->ops->set_ios(host, ios);
}
static int mmc_select_card(struct mmc_host *host, struct mmc_card *card) static int mmc_select_card(struct mmc_host *host, struct mmc_card *card)
{ {
int err; int err;
...@@ -364,7 +379,7 @@ static int mmc_select_card(struct mmc_host *host, struct mmc_card *card) ...@@ -364,7 +379,7 @@ static int mmc_select_card(struct mmc_host *host, struct mmc_card *card)
} }
} }
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
return MMC_ERR_NONE; return MMC_ERR_NONE;
} }
...@@ -415,7 +430,7 @@ static u32 mmc_select_voltage(struct mmc_host *host, u32 ocr) ...@@ -415,7 +430,7 @@ static u32 mmc_select_voltage(struct mmc_host *host, u32 ocr)
ocr = 3 << bit; ocr = 3 << bit;
host->ios.vdd = bit; host->ios.vdd = bit;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
} else { } else {
ocr = 0; ocr = 0;
} }
...@@ -549,6 +564,7 @@ static void mmc_decode_csd(struct mmc_card *card) ...@@ -549,6 +564,7 @@ static void mmc_decode_csd(struct mmc_card *card)
csd->read_partial = UNSTUFF_BITS(resp, 79, 1); csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
csd->write_misalign = UNSTUFF_BITS(resp, 78, 1); csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
csd->read_misalign = UNSTUFF_BITS(resp, 77, 1); csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4); csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
csd->write_partial = UNSTUFF_BITS(resp, 21, 1); csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
} else { } else {
...@@ -583,6 +599,7 @@ static void mmc_decode_csd(struct mmc_card *card) ...@@ -583,6 +599,7 @@ static void mmc_decode_csd(struct mmc_card *card)
csd->read_partial = UNSTUFF_BITS(resp, 79, 1); csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
csd->write_misalign = UNSTUFF_BITS(resp, 78, 1); csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
csd->read_misalign = UNSTUFF_BITS(resp, 77, 1); csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4); csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
csd->write_partial = UNSTUFF_BITS(resp, 21, 1); csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
} }
...@@ -666,7 +683,7 @@ static void mmc_idle_cards(struct mmc_host *host) ...@@ -666,7 +683,7 @@ static void mmc_idle_cards(struct mmc_host *host)
struct mmc_command cmd; struct mmc_command cmd;
host->ios.chip_select = MMC_CS_HIGH; host->ios.chip_select = MMC_CS_HIGH;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
mmc_delay(1); mmc_delay(1);
...@@ -679,7 +696,7 @@ static void mmc_idle_cards(struct mmc_host *host) ...@@ -679,7 +696,7 @@ static void mmc_idle_cards(struct mmc_host *host)
mmc_delay(1); mmc_delay(1);
host->ios.chip_select = MMC_CS_DONTCARE; host->ios.chip_select = MMC_CS_DONTCARE;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
mmc_delay(1); mmc_delay(1);
} }
...@@ -704,13 +721,13 @@ static void mmc_power_up(struct mmc_host *host) ...@@ -704,13 +721,13 @@ static void mmc_power_up(struct mmc_host *host)
host->ios.chip_select = MMC_CS_DONTCARE; host->ios.chip_select = MMC_CS_DONTCARE;
host->ios.power_mode = MMC_POWER_UP; host->ios.power_mode = MMC_POWER_UP;
host->ios.bus_width = MMC_BUS_WIDTH_1; host->ios.bus_width = MMC_BUS_WIDTH_1;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
mmc_delay(1); mmc_delay(1);
host->ios.clock = host->f_min; host->ios.clock = host->f_min;
host->ios.power_mode = MMC_POWER_ON; host->ios.power_mode = MMC_POWER_ON;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
mmc_delay(2); mmc_delay(2);
} }
...@@ -723,7 +740,7 @@ static void mmc_power_off(struct mmc_host *host) ...@@ -723,7 +740,7 @@ static void mmc_power_off(struct mmc_host *host)
host->ios.chip_select = MMC_CS_DONTCARE; host->ios.chip_select = MMC_CS_DONTCARE;
host->ios.power_mode = MMC_POWER_OFF; host->ios.power_mode = MMC_POWER_OFF;
host->ios.bus_width = MMC_BUS_WIDTH_1; host->ios.bus_width = MMC_BUS_WIDTH_1;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
} }
static int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr) static int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
...@@ -971,7 +988,8 @@ static unsigned int mmc_calculate_clock(struct mmc_host *host) ...@@ -971,7 +988,8 @@ static unsigned int mmc_calculate_clock(struct mmc_host *host)
if (!mmc_card_dead(card) && max_dtr > card->csd.max_dtr) if (!mmc_card_dead(card) && max_dtr > card->csd.max_dtr)
max_dtr = card->csd.max_dtr; max_dtr = card->csd.max_dtr;
pr_debug("MMC: selected %d.%03dMHz transfer rate\n", pr_debug("%s: selected %d.%03dMHz transfer rate\n",
mmc_hostname(host),
max_dtr / 1000000, (max_dtr / 1000) % 1000); max_dtr / 1000000, (max_dtr / 1000) % 1000);
return max_dtr; return max_dtr;
...@@ -1046,7 +1064,7 @@ static void mmc_setup(struct mmc_host *host) ...@@ -1046,7 +1064,7 @@ static void mmc_setup(struct mmc_host *host)
} else { } else {
host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
host->ios.clock = host->f_min; host->ios.clock = host->f_min;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
/* /*
* We should remember the OCR mask from the existing * We should remember the OCR mask from the existing
...@@ -1082,7 +1100,7 @@ static void mmc_setup(struct mmc_host *host) ...@@ -1082,7 +1100,7 @@ static void mmc_setup(struct mmc_host *host)
* Ok, now switch to push-pull mode. * Ok, now switch to push-pull mode.
*/ */
host->ios.bus_mode = MMC_BUSMODE_PUSHPULL; host->ios.bus_mode = MMC_BUSMODE_PUSHPULL;
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
mmc_read_csds(host); mmc_read_csds(host);
...@@ -1128,7 +1146,7 @@ static void mmc_rescan(void *data) ...@@ -1128,7 +1146,7 @@ static void mmc_rescan(void *data)
* attached cards and the host support. * attached cards and the host support.
*/ */
host->ios.clock = mmc_calculate_clock(host); host->ios.clock = mmc_calculate_clock(host);
host->ops->set_ios(host, &host->ios); mmc_set_ios(host);
} }
mmc_release_host(host); mmc_release_host(host);
......
...@@ -187,6 +187,12 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) ...@@ -187,6 +187,12 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
brq.cmd.opcode = MMC_WRITE_BLOCK; brq.cmd.opcode = MMC_WRITE_BLOCK;
brq.data.flags |= MMC_DATA_WRITE; brq.data.flags |= MMC_DATA_WRITE;
brq.data.blocks = 1; brq.data.blocks = 1;
/*
* Scale up the timeout by the r2w factor
*/
brq.data.timeout_ns <<= card->csd.r2w_factor;
brq.data.timeout_clks <<= card->csd.r2w_factor;
} }
if (brq.data.blocks > 1) { if (brq.data.blocks > 1) {
......
...@@ -402,9 +402,6 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -402,9 +402,6 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
struct mmci_host *host = mmc_priv(mmc); struct mmci_host *host = mmc_priv(mmc);
u32 clk = 0, pwr = 0; u32 clk = 0, pwr = 0;
DBG(host, "clock %uHz busmode %u powermode %u Vdd %u\n",
ios->clock, ios->bus_mode, ios->power_mode, ios->vdd);
if (ios->clock) { if (ios->clock) {
if (ios->clock >= host->mclk) { if (ios->clock >= host->mclk) {
clk = MCI_CLK_BYPASS; clk = MCI_CLK_BYPASS;
......
...@@ -198,7 +198,6 @@ static void pxamci_start_cmd(struct pxamci_host *host, struct mmc_command *cmd, ...@@ -198,7 +198,6 @@ 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) static void pxamci_finish_request(struct pxamci_host *host, struct mmc_request *mrq)
{ {
pr_debug("PXAMCI: request done\n");
host->mrq = NULL; host->mrq = NULL;
host->cmd = NULL; host->cmd = NULL;
host->data = NULL; host->data = NULL;
...@@ -291,7 +290,7 @@ static int pxamci_data_done(struct pxamci_host *host, unsigned int stat) ...@@ -291,7 +290,7 @@ static int pxamci_data_done(struct pxamci_host *host, unsigned int stat)
pxamci_disable_irq(host, DATA_TRAN_DONE); pxamci_disable_irq(host, DATA_TRAN_DONE);
host->data = NULL; host->data = NULL;
if (host->mrq->stop && data->error == MMC_ERR_NONE) { if (host->mrq->stop) {
pxamci_stop_clock(host); pxamci_stop_clock(host);
pxamci_start_cmd(host, host->mrq->stop, 0); pxamci_start_cmd(host, host->mrq->stop, 0);
} else { } else {
...@@ -309,12 +308,10 @@ static irqreturn_t pxamci_irq(int irq, void *devid, struct pt_regs *regs) ...@@ -309,12 +308,10 @@ static irqreturn_t pxamci_irq(int irq, void *devid, struct pt_regs *regs)
ireg = readl(host->base + MMC_I_REG); ireg = readl(host->base + MMC_I_REG);
pr_debug("PXAMCI: irq %08x\n", ireg);
if (ireg) { if (ireg) {
unsigned stat = readl(host->base + MMC_STAT); unsigned stat = readl(host->base + MMC_STAT);
pr_debug("PXAMCI: stat %08x\n", stat); pr_debug("PXAMCI: irq %08x stat %08x\n", ireg, stat);
if (ireg & END_CMD_RES) if (ireg & END_CMD_RES)
handled |= pxamci_cmd_done(host, stat); handled |= pxamci_cmd_done(host, stat);
...@@ -368,10 +365,6 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -368,10 +365,6 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
{ {
struct pxamci_host *host = mmc_priv(mmc); struct pxamci_host *host = mmc_priv(mmc);
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) { if (ios->clock) {
unsigned int clk = CLOCKRATE / ios->clock; unsigned int clk = CLOCKRATE / ios->clock;
if (CLOCKRATE / clk > ios->clock) if (CLOCKRATE / clk > ios->clock)
...@@ -397,7 +390,7 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -397,7 +390,7 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
host->cmdat |= CMDAT_INIT; host->cmdat |= CMDAT_INIT;
} }
pr_debug("pxamci_set_ios: clkrt = %x cmdat = %x\n", pr_debug("PXAMCI: clkrt = %x cmdat = %x\n",
host->clkrt, host->cmdat); host->clkrt, host->cmdat);
} }
......
...@@ -570,10 +570,6 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -570,10 +570,6 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
spin_lock_irqsave(&host->lock, flags); spin_lock_irqsave(&host->lock, flags);
DBG("clock %uHz busmode %u powermode %u cs %u Vdd %u width %u\n",
ios->clock, ios->bus_mode, ios->power_mode, ios->chip_select,
ios->vdd, ios->bus_width);
/* /*
* Reset the chip on each power off. * Reset the chip on each power off.
* Should clear out any weird states. * Should clear out any weird states.
......
...@@ -931,10 +931,6 @@ static void wbsd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -931,10 +931,6 @@ static void wbsd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
struct wbsd_host *host = mmc_priv(mmc); struct wbsd_host *host = mmc_priv(mmc);
u8 clk, setup, pwr; u8 clk, setup, pwr;
DBGF("clock %uHz busmode %u powermode %u cs %u Vdd %u width %u\n",
ios->clock, ios->bus_mode, ios->power_mode, ios->chip_select,
ios->vdd, ios->bus_width);
spin_lock_bh(&host->lock); spin_lock_bh(&host->lock);
/* /*
......
...@@ -28,6 +28,7 @@ struct mmc_csd { ...@@ -28,6 +28,7 @@ struct mmc_csd {
unsigned short cmdclass; unsigned short cmdclass;
unsigned short tacc_clks; unsigned short tacc_clks;
unsigned int tacc_ns; unsigned int tacc_ns;
unsigned int r2w_factor;
unsigned int max_dtr; unsigned int max_dtr;
unsigned int read_blkbits; unsigned int read_blkbits;
unsigned int write_blkbits; unsigned int write_blkbits;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment