diff options
Diffstat (limited to 'include/linux/mmc/host.h')
| -rw-r--r-- | include/linux/mmc/host.h | 28 | 
1 files changed, 27 insertions, 1 deletions
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index b5bedaec6223..1369e54faeb7 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -12,6 +12,7 @@  #include <linux/leds.h>  #include <linux/mutex.h> +#include <linux/timer.h>  #include <linux/sched.h>  #include <linux/device.h>  #include <linux/fault-inject.h> @@ -131,7 +132,9 @@ struct mmc_host_ops {  	/* Prepare HS400 target operating frequency depending host driver */  	int	(*prepare_hs400_tuning)(struct mmc_host *host, struct mmc_ios *ios); -	int	(*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv); +	int	(*select_drive_strength)(struct mmc_card *card, +					 unsigned int max_dtr, int host_drv, +					 int card_drv, int *drv_type);  	void	(*hw_reset)(struct mmc_host *host);  	void	(*card_event)(struct mmc_host *host); @@ -285,6 +288,7 @@ struct mmc_host {  				 MMC_CAP2_HS400_1_2V)  #define MMC_CAP2_HSX00_1_2V	(MMC_CAP2_HS200_1_2V_SDR | MMC_CAP2_HS400_1_2V)  #define MMC_CAP2_SDIO_IRQ_NOTHREAD (1 << 17) +#define MMC_CAP2_NO_WRITE_PROTECT (1 << 18)	/* No physical write protect pin, assume that card is always read-write */  	mmc_pm_flag_t		pm_caps;	/* supported pm features */ @@ -321,10 +325,18 @@ struct mmc_host {  #ifdef CONFIG_MMC_DEBUG  	unsigned int		removed:1;	/* host is being removed */  #endif +	unsigned int		can_retune:1;	/* re-tuning can be used */ +	unsigned int		doing_retune:1;	/* re-tuning in progress */ +	unsigned int		retune_now:1;	/* do re-tuning at next req */  	int			rescan_disable;	/* disable card detection */  	int			rescan_entered;	/* used with nonremovable devices */ +	int			need_retune;	/* re-tuning is needed */ +	int			hold_retune;	/* hold off re-tuning */ +	unsigned int		retune_period;	/* re-tuning period in secs */ +	struct timer_list	retune_timer;	/* for periodic re-tuning */ +  	bool			trigger_card_event; /* card_event necessary */  	struct mmc_card		*card;		/* device attached to this host */ @@ -513,4 +525,18 @@ static inline bool mmc_card_hs400(struct mmc_card *card)  	return card->host->ios.timing == MMC_TIMING_MMC_HS400;  } +void mmc_retune_timer_stop(struct mmc_host *host); + +static inline void mmc_retune_needed(struct mmc_host *host) +{ +	if (host->can_retune) +		host->need_retune = 1; +} + +static inline void mmc_retune_recheck(struct mmc_host *host) +{ +	if (host->hold_retune <= 1) +		host->retune_now = 1; +} +  #endif /* LINUX_MMC_HOST_H */  |