diff options
Diffstat (limited to 'include/linux/mmc')
| -rw-r--r-- | include/linux/mmc/card.h | 2 | ||||
| -rw-r--r-- | include/linux/mmc/core.h | 1 | ||||
| -rw-r--r-- | include/linux/mmc/dw_mmc.h | 6 | ||||
| -rw-r--r-- | include/linux/mmc/host.h | 28 | ||||
| -rw-r--r-- | include/linux/mmc/mmc.h | 4 | ||||
| -rw-r--r-- | include/linux/mmc/sdhci-pci-data.h | 2 | 
6 files changed, 36 insertions, 7 deletions
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 19f0175c0afa..4d3776d25925 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -97,6 +97,7 @@ struct mmc_ext_csd {  	u8			raw_erased_mem_count;	/* 181 */  	u8			raw_ext_csd_structure;	/* 194 */  	u8			raw_card_type;		/* 196 */ +	u8			raw_driver_strength;	/* 197 */  	u8			out_of_int_time;	/* 198 */  	u8			raw_pwr_cl_52_195;	/* 200 */  	u8			raw_pwr_cl_26_195;	/* 201 */ @@ -305,6 +306,7 @@ struct mmc_card {  	unsigned int		sd_bus_speed;	/* Bus Speed Mode set for the card */  	unsigned int		mmc_avail_type;	/* supported device type by both host and card */ +	unsigned int		drive_strength;	/* for UHS-I, HS200 or HS400 */  	struct dentry		*debugfs_root;  	struct mmc_part	part[MMC_NUM_PHY_PARTITION]; /* physical partitions */ diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index de722d4e9d61..258daf914c6d 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h @@ -121,6 +121,7 @@ struct mmc_data {  	struct mmc_request	*mrq;		/* associated request */  	unsigned int		sg_len;		/* size of scatter list */ +	int			sg_count;	/* mapped sg entries */  	struct scatterlist	*sg;		/* I/O scatter list */  	s32			host_cookie;	/* host private data */  }; diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 12111993a317..5be97676f1fa 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h @@ -226,12 +226,6 @@ struct dw_mci_dma_ops {  #define DW_MCI_QUIRK_HIGHSPEED			BIT(2)  /* Unreliable card detection */  #define DW_MCI_QUIRK_BROKEN_CARD_DETECTION	BIT(3) -/* No write protect */ -#define DW_MCI_QUIRK_NO_WRITE_PROTECT		BIT(4) - -/* Slot level quirks */ -/* This slot has no write protect */ -#define DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT	BIT(0)  struct dma_pdata; 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 */ diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 124f562118b8..15f2c4a0a62c 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h @@ -302,6 +302,7 @@ struct _mmc_csd {  #define EXT_CSD_REV			192	/* RO */  #define EXT_CSD_STRUCTURE		194	/* RO */  #define EXT_CSD_CARD_TYPE		196	/* RO */ +#define EXT_CSD_DRIVER_STRENGTH		197	/* RO */  #define EXT_CSD_OUT_OF_INTERRUPT_TIME	198	/* RO */  #define EXT_CSD_PART_SWITCH_TIME        199     /* RO */  #define EXT_CSD_PWR_CL_52_195		200	/* RO */ @@ -390,6 +391,7 @@ struct _mmc_csd {  #define EXT_CSD_TIMING_HS	1	/* High speed */  #define EXT_CSD_TIMING_HS200	2	/* HS200 */  #define EXT_CSD_TIMING_HS400	3	/* HS400 */ +#define EXT_CSD_DRV_STR_SHIFT	4	/* Driver Strength shift */  #define EXT_CSD_SEC_ER_EN	BIT(0)  #define EXT_CSD_SEC_BD_BLK_EN	BIT(2) @@ -441,4 +443,6 @@ struct _mmc_csd {  #define MMC_SWITCH_MODE_CLEAR_BITS	0x02	/* Clear bits which are 1 in value */  #define MMC_SWITCH_MODE_WRITE_BYTE	0x03	/* Set target to value */ +#define mmc_driver_type_mask(n)		(1 << (n)) +  #endif /* LINUX_MMC_MMC_H */ diff --git a/include/linux/mmc/sdhci-pci-data.h b/include/linux/mmc/sdhci-pci-data.h index 8959604a13d3..fda15b6d4135 100644 --- a/include/linux/mmc/sdhci-pci-data.h +++ b/include/linux/mmc/sdhci-pci-data.h @@ -15,4 +15,6 @@ struct sdhci_pci_data {  extern struct sdhci_pci_data *(*sdhci_pci_get_data)(struct pci_dev *pdev,  				int slotno); +extern int sdhci_pci_spt_drive_strength; +  #endif  |