Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8dc00335 authored by Richard Purdie's avatar Richard Purdie Committed by Russell King
Browse files

[MMC] Allow detection/removal to be delayed



Change mmc_detect_change() to take a delay argument such that
the detection of card insertions and removals can be delayed
according to the requirements of the host driver or platform.

Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent caf39e87
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -1079,12 +1079,16 @@ static void mmc_setup(struct mmc_host *host)
/**
 *	mmc_detect_change - process change of state on a MMC socket
 *	@host: host which changed state.
 *	@delay: optional delay to wait before detection (jiffies)
 *
 *	All we know is that card(s) have been inserted or removed
 *	from the socket(s).  We don't know which socket or cards.
 */
void mmc_detect_change(struct mmc_host *host)
void mmc_detect_change(struct mmc_host *host, unsigned long delay)
{
	if (delay)
		schedule_delayed_work(&host->detect, delay);
	else
		schedule_work(&host->detect);
}

@@ -1189,7 +1193,7 @@ int mmc_add_host(struct mmc_host *host)
	ret = mmc_add_host_sysfs(host);
	if (ret == 0) {
		mmc_power_off(host);
		mmc_detect_change(host);
		mmc_detect_change(host, 0);
	}

	return ret;
@@ -1259,7 +1263,7 @@ EXPORT_SYMBOL(mmc_suspend_host);
 */
int mmc_resume_host(struct mmc_host *host)
{
	mmc_detect_change(host);
	mmc_detect_change(host, 0);

	return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -442,7 +442,7 @@ static void mmci_check_status(unsigned long data)

	status = host->plat->status(mmc_dev(host->mmc));
	if (status ^ host->oldstat)
		mmc_detect_change(host->mmc);
		mmc_detect_change(host->mmc, 0);

	host->oldstat = status;
	mod_timer(&host->timer, jiffies + HZ);
+1 −1
Original line number Diff line number Diff line
@@ -423,7 +423,7 @@ static void pxamci_dma_irq(int dma, void *devid, struct pt_regs *regs)

static irqreturn_t pxamci_detect_irq(int irq, void *devid, struct pt_regs *regs)
{
	mmc_detect_change(devid);
	mmc_detect_change(devid, 0);
	return IRQ_HANDLED;
}

+2 −2
Original line number Diff line number Diff line
@@ -1122,7 +1122,7 @@ static void wbsd_detect_card(unsigned long data)
	
	DBG("Executing card detection\n");
	
	mmc_detect_change(host->mmc);	
	mmc_detect_change(host->mmc, 0);	
}

/*
@@ -1198,7 +1198,7 @@ static void wbsd_tasklet_card(unsigned long param)
		 */
		spin_unlock(&host->lock);

		mmc_detect_change(host->mmc);
		mmc_detect_change(host->mmc, 0);
	}
	else
		spin_unlock(&host->lock);
+1 −1
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ extern void mmc_free_host(struct mmc_host *);
extern int mmc_suspend_host(struct mmc_host *, pm_message_t);
extern int mmc_resume_host(struct mmc_host *);

extern void mmc_detect_change(struct mmc_host *);
extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
extern void mmc_request_done(struct mmc_host *, struct mmc_request *);

#endif