Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53560
b: refs/heads/master
c: 592d372
h: refs/heads/master
v: v3
  • Loading branch information
Alex Dubov authored and Pierre Ossman committed May 1, 2007
1 parent a225130 commit bb7af36
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b039d4a187a4064c926159db063004377281b041
refs/heads/master: 592d372ae89dd5b43117cf5113a910f67f6e6a7e
25 changes: 10 additions & 15 deletions trunk/drivers/mmc/tifm_sd.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ typedef enum {
enum {
FIFO_RDY = 0x0001, /* hardware dependent value */
EJECT = 0x0004,
EJECT_DONE = 0x0008,
CARD_BUSY = 0x0010,
OPENDRAIN = 0x0040, /* hardware dependent value */
CARD_EVENT = 0x0100, /* hardware dependent value */
Expand All @@ -99,7 +98,6 @@ struct tifm_sd {
struct tasklet_struct finish_tasklet;
struct timer_list timer;
struct mmc_request *req;
wait_queue_head_t notify;

size_t written_blocks;
size_t buffer_size;
Expand Down Expand Up @@ -738,12 +736,6 @@ static void tifm_sd_ios(struct mmc_host *mmc, struct mmc_ios *ios)
/* chip_select : maybe later */
//vdd
//power is set before probe / after remove
//I believe, power_off when already marked for eject is sufficient to
// allow removal.
if ((host->flags & EJECT) && ios->power_mode == MMC_POWER_OFF) {
host->flags |= EJECT_DONE;
wake_up_all(&host->notify);
}

spin_unlock_irqrestore(&sock->lock, flags);
}
Expand Down Expand Up @@ -854,7 +846,6 @@ static int tifm_sd_probe(struct tifm_dev *sock)
host->dev = sock;
host->timeout_jiffies = msecs_to_jiffies(1000);

init_waitqueue_head(&host->notify);
tasklet_init(&host->finish_tasklet,
no_dma ? tifm_sd_end_cmd_nodma : tifm_sd_end_cmd,
(unsigned long)host);
Expand Down Expand Up @@ -896,28 +887,32 @@ static void tifm_sd_remove(struct tifm_dev *sock)
struct tifm_sd *host = mmc_priv(mmc);
unsigned long flags;

del_timer_sync(&host->timer);
spin_lock_irqsave(&sock->lock, flags);
host->flags |= EJECT;
writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE);
mmiowb();
spin_unlock_irqrestore(&sock->lock, flags);

tasklet_kill(&host->finish_tasklet);

spin_lock_irqsave(&sock->lock, flags);
host->flags |= EJECT;
if (host->req) {
writel(TIFM_FIFO_INT_SETALL,
sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR);
writel(0, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_SET);
host->req->cmd->error = MMC_ERR_TIMEOUT;
if (host->req->stop)
host->req->stop->error = MMC_ERR_TIMEOUT;
tasklet_schedule(&host->finish_tasklet);
}
spin_unlock_irqrestore(&sock->lock, flags);
wait_event_timeout(host->notify, host->flags & EJECT_DONE,
host->timeout_jiffies);
tasklet_kill(&host->finish_tasklet);
mmc_remove_host(mmc);
dev_dbg(&sock->dev, "after remove\n");

/* The meaning of the bit majority in this constant is unknown. */
writel(0xfff8 & readl(sock->addr + SOCK_CONTROL),
sock->addr + SOCK_CONTROL);

tifm_set_drvdata(sock, NULL);
mmc_free_host(mmc);
}

Expand Down

0 comments on commit bb7af36

Please sign in to comment.