• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/mmc/host/

Lines Matching refs:host

19 #include <linux/mmc/host.h>
34 #define DBG(host,fmt,args...) \
35 pr_debug("%s: %s: " fmt, mmc_hostname(host->mmc), __func__ , args)
40 mmci_request_end(struct mmci_host *host, struct mmc_request *mrq)
42 writel(0, host->base + MMCICOMMAND);
44 BUG_ON(host->data);
46 host->mrq = NULL;
47 host->cmd = NULL;
50 mrq->data->bytes_xfered = host->data_xfered;
53 * Need to drop the host lock here; mmc_request_done may call
56 spin_unlock(&host->lock);
57 mmc_request_done(host->mmc, mrq);
58 spin_lock(&host->lock);
61 static void mmci_stop_data(struct mmci_host *host)
63 writel(0, host->base + MMCIDATACTRL);
64 writel(0, host->base + MMCIMASK1);
65 host->data = NULL;
68 static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
75 DBG(host, "blksz %04x blks %04x flags %08x\n",
78 host->data = data;
79 host->size = data->blksz;
80 host->data_xfered = 0;
82 mmci_init_sg(host, data);
84 clks = (unsigned long long)data->timeout_ns * host->cclk;
89 base = host->base;
91 writel(host->size, base + MMCIDATALENGTH);
105 if (host->size < MCI_FIFOSIZE)
121 mmci_start_command(struct mmci_host *host, struct mmc_command *cmd, u32 c)
123 void __iomem *base = host->base;
125 DBG(host, "op %02x arg %08x flags %08x\n",
142 host->cmd = cmd;
149 mmci_data_irq(struct mmci_host *host, struct mmc_data *data,
153 host->data_xfered += data->blksz;
168 if (host->sg_len && data->flags & MMC_DATA_READ)
169 flush_dcache_page(host->sg_ptr->page);
172 mmci_stop_data(host);
175 mmci_request_end(host, data->mrq);
177 mmci_start_command(host, data->stop, 0);
183 mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
186 void __iomem *base = host->base;
188 host->cmd = NULL;
202 if (host->data)
203 mmci_stop_data(host);
204 mmci_request_end(host, cmd->mrq);
206 mmci_start_data(host, cmd->data);
210 static int mmci_pio_read(struct mmci_host *host, char *buffer, unsigned int remain)
212 void __iomem *base = host->base;
217 int count = host->size - (readl(base + MMCIFIFOCNT) << 2);
239 static int mmci_pio_write(struct mmci_host *host, char *buffer, unsigned int remain, u32 status)
241 void __iomem *base = host->base;
269 struct mmci_host *host = dev_id;
270 void __iomem *base = host->base;
275 DBG(host, "irq1 %08x\n", status);
295 buffer = mmci_kmap_atomic(host, &flags) + host->sg_off;
296 remain = host->sg_ptr->length - host->sg_off;
300 len = mmci_pio_read(host, buffer, remain);
302 len = mmci_pio_write(host, buffer, remain, status);
307 mmci_kunmap_atomic(host, buffer, &flags);
309 host->sg_off += len;
310 host->size -= len;
321 flush_dcache_page(host->sg_ptr->page);
323 if (!mmci_next_sg(host))
333 if (status & MCI_RXACTIVE && host->size < MCI_FIFOSIZE)
342 if (host->size == 0) {
355 struct mmci_host *host = dev_id;
359 spin_lock(&host->lock);
365 status = readl(host->base + MMCISTATUS);
366 status &= readl(host->base + MMCIMASK0);
367 writel(status, host->base + MMCICLEAR);
369 DBG(host, "irq0 %08x\n", status);
371 data = host->data;
374 mmci_data_irq(host, data, status);
376 cmd = host->cmd;
378 mmci_cmd_irq(host, cmd, status);
383 spin_unlock(&host->lock);
390 struct mmci_host *host = mmc_priv(mmc);
392 WARN_ON(host->mrq != NULL);
394 spin_lock_irq(&host->lock);
396 host->mrq = mrq;
399 mmci_start_data(host, mrq->data);
401 mmci_start_command(host, mrq->cmd, 0);
403 spin_unlock_irq(&host->lock);
408 struct mmci_host *host = mmc_priv(mmc);
412 if (ios->clock >= host->mclk) {
414 host->cclk = host->mclk;
416 clk = host->mclk / (2 * ios->clock) - 1;
419 host->cclk = host->mclk / (2 * (clk + 1));
424 if (host->plat->translate_vdd)
425 pwr |= host->plat->translate_vdd(mmc_dev(mmc), ios->vdd);
441 writel(clk, host->base + MMCICLOCK);
443 if (host->pwr != pwr) {
444 host->pwr = pwr;
445 writel(pwr, host->base + MMCIPOWER);
456 struct mmci_host *host = (struct mmci_host *)data;
459 status = host->plat->status(mmc_dev(host->mmc));
460 if (status ^ host->oldstat)
461 mmc_detect_change(host->mmc, 0);
463 host->oldstat = status;
464 mod_timer(&host->timer, jiffies + HZ);
470 struct mmci_host *host;
490 host = mmc_priv(mmc);
491 host->clk = clk_get(&dev->dev, "MCLK");
492 if (IS_ERR(host->clk)) {
493 ret = PTR_ERR(host->clk);
494 host->clk = NULL;
498 ret = clk_enable(host->clk);
502 host->plat = plat;
503 host->mclk = clk_get_rate(host->clk);
504 host->mmc = mmc;
505 host->base = ioremap(dev->res.start, SZ_4K);
506 if (!host->base) {
512 mmc->f_min = (host->mclk + 511) / 512;
513 mmc->f_max = min(host->mclk, fmax);
545 spin_lock_init(&host->lock);
547 writel(0, host->base + MMCIMASK0);
548 writel(0, host->base + MMCIMASK1);
549 writel(0xfff, host->base + MMCICLEAR);
551 ret = request_irq(dev->irq[0], mmci_irq, IRQF_SHARED, DRIVER_NAME " (cmd)", host);
555 ret = request_irq(dev->irq[1], mmci_pio_irq, IRQF_SHARED, DRIVER_NAME " (pio)", host);
559 writel(MCI_IRQENABLE, host->base + MMCIMASK0);
569 init_timer(&host->timer);
570 host->timer.data = (unsigned long)host;
571 host->timer.function = mmci_check_status;
572 host->timer.expires = jiffies + HZ;
573 add_timer(&host->timer);
578 free_irq(dev->irq[0], host);
580 iounmap(host->base);
582 clk_disable(host->clk);
584 clk_put(host->clk);
600 struct mmci_host *host = mmc_priv(mmc);
602 del_timer_sync(&host->timer);
606 writel(0, host->base + MMCIMASK0);
607 writel(0, host->base + MMCIMASK1);
609 writel(0, host->base + MMCICOMMAND);
610 writel(0, host->base + MMCIDATACTRL);
612 free_irq(dev->irq[0], host);
613 free_irq(dev->irq[1], host);
615 iounmap(host->base);
616 clk_disable(host->clk);
617 clk_put(host->clk);
634 struct mmci_host *host = mmc_priv(mmc);
638 writel(0, host->base + MMCIMASK0);
650 struct mmci_host *host = mmc_priv(mmc);
652 writel(MCI_IRQENABLE, host->base + MMCIMASK0);