diff options
Diffstat (limited to 'drivers/mmc/core/host.c')
| -rw-r--r-- | drivers/mmc/core/host.c | 23 | 
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index b29d3e8fd3a..ca2e4f50f61 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -119,14 +119,14 @@ static void mmc_host_clk_gate_work(struct work_struct *work)  }  /** - *	mmc_host_clk_ungate - ungate hardware MCI clocks + *	mmc_host_clk_hold - ungate hardware MCI clocks   *	@host: host to ungate.   *   *	Makes sure the host ios.clock is restored to a non-zero value   *	past this call.	Increase clock reference count and ungate clock   *	if we're the first user.   */ -void mmc_host_clk_ungate(struct mmc_host *host) +void mmc_host_clk_hold(struct mmc_host *host)  {  	unsigned long flags; @@ -164,14 +164,14 @@ static bool mmc_host_may_gate_card(struct mmc_card *card)  }  /** - *	mmc_host_clk_gate - gate off hardware MCI clocks + *	mmc_host_clk_release - gate off hardware MCI clocks   *	@host: host to gate.   *   *	Calls the host driver with ios.clock set to zero as often as possible   *	in order to gate off hardware MCI clocks. Decrease clock reference   *	count and schedule disabling of clock.   */ -void mmc_host_clk_gate(struct mmc_host *host) +void mmc_host_clk_release(struct mmc_host *host)  {  	unsigned long flags; @@ -179,7 +179,7 @@ void mmc_host_clk_gate(struct mmc_host *host)  	host->clk_requests--;  	if (mmc_host_may_gate_card(host->card) &&  	    !host->clk_requests) -		schedule_work(&host->clk_gate_work); +		queue_work(system_nrt_wq, &host->clk_gate_work);  	spin_unlock_irqrestore(&host->clk_lock, flags);  } @@ -231,7 +231,7 @@ static inline void mmc_host_clk_exit(struct mmc_host *host)  	if (cancel_work_sync(&host->clk_gate_work))  		mmc_host_clk_gate_delayed(host);  	if (host->clk_gated) -		mmc_host_clk_ungate(host); +		mmc_host_clk_hold(host);  	/* There should be only one user now */  	WARN_ON(host->clk_requests > 1);  } @@ -301,6 +301,17 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)  	host->max_blk_size = 512;  	host->max_blk_count = PAGE_CACHE_SIZE / 512; +	/* +	 * Enable runtime power management by default. This flag was added due +	 * to runtime power management causing disruption for some users, but +	 * the power on/off code has been improved since then. +	 * +	 * We'll enable this flag by default as an experiment, and if no +	 * problems are reported, we will follow up later and remove the flag +	 * altogether. +	 */ +	host->caps = MMC_CAP_POWER_OFF_CARD; +  	return host;  free:  |