diff options
Diffstat (limited to 'drivers/mmc/host/mmci.h')
| -rw-r--r-- | drivers/mmc/host/mmci.h | 32 | 
1 files changed, 25 insertions, 7 deletions
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h index 14df81054438..4f071bd34e59 100644 --- a/drivers/mmc/host/mmci.h +++ b/drivers/mmc/host/mmci.h @@ -131,6 +131,11 @@  /* Control register extensions in the Qualcomm versions */  #define MCI_DPSM_QCOM_DATA_PEND	BIT(17)  #define MCI_DPSM_QCOM_RX_DATA_PEND BIT(20) +/* Control register extensions in STM32 versions */ +#define MCI_DPSM_STM32_MODE_BLOCK	(0 << 2) +#define MCI_DPSM_STM32_MODE_SDIO	(1 << 2) +#define MCI_DPSM_STM32_MODE_STREAM	(2 << 2) +#define MCI_DPSM_STM32_MODE_BLOCK_STOP	(3 << 2)  #define MMCIDATACNT		0x030  #define MMCISTATUS		0x034 @@ -275,12 +280,8 @@ struct mmci_host;   * @st_clkdiv: true if using a ST-specific clock divider algorithm   * @stm32_clkdiv: true if using a STM32-specific clock divider algorithm   * @datactrl_mask_ddrmode: ddr mode mask in datactrl register. - * @blksz_datactrl16: true if Block size is at b16..b30 position in datactrl register - * @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl - *		     register   * @datactrl_mask_sdio: SDIO enable mask in datactrl register   * @datactrl_blksz: block size in power of two - * @datactrl_dpsm_enable: enable value for DPSM   * @datactrl_first: true if data must be setup before send command   * @datacnt_useless: true if you could not use datacnt register to read   *		     remaining data @@ -325,14 +326,11 @@ struct variant_data {  	unsigned int		datactrl_mask_ddrmode;  	unsigned int		datactrl_mask_sdio;  	unsigned int		datactrl_blocksz; -	unsigned int		datactrl_dpsm_enable;  	u8			datactrl_first:1;  	u8			datacnt_useless:1;  	u8			st_sdio:1;  	u8			st_clkdiv:1;  	u8			stm32_clkdiv:1; -	u8			blksz_datactrl16:1; -	u8			blksz_datactrl4:1;  	u32			pwrreg_powerup;  	u32			f_max;  	u8			signal_direction:1; @@ -362,6 +360,7 @@ struct mmci_host_ops {  			 bool next);  	void (*unprep_data)(struct mmci_host *host, struct mmc_data *data,  			    int err); +	u32 (*get_datactrl_cfg)(struct mmci_host *host);  	void (*get_next_data)(struct mmci_host *host, struct mmc_data *data);  	int (*dma_setup)(struct mmci_host *host);  	void (*dma_release)(struct mmci_host *host); @@ -429,6 +428,12 @@ struct mmci_host {  void mmci_write_clkreg(struct mmci_host *host, u32 clk);  void mmci_write_pwrreg(struct mmci_host *host, u32 pwr); +static inline u32 mmci_dctrl_blksz(struct mmci_host *host) +{ +	return (ffs(host->data->blksz) - 1) << 4; +} + +#ifdef CONFIG_DMA_ENGINE  int mmci_dmae_prep_data(struct mmci_host *host, struct mmc_data *data,  			bool next);  void mmci_dmae_unprep_data(struct mmci_host *host, struct mmc_data *data, @@ -439,3 +444,16 @@ void mmci_dmae_release(struct mmci_host *host);  int mmci_dmae_start(struct mmci_host *host, unsigned int *datactrl);  void mmci_dmae_finalize(struct mmci_host *host, struct mmc_data *data);  void mmci_dmae_error(struct mmci_host *host); +#endif + +#ifdef CONFIG_MMC_QCOM_DML +void qcom_variant_init(struct mmci_host *host); +#else +static inline void qcom_variant_init(struct mmci_host *host) {} +#endif + +#ifdef CONFIG_MMC_STM32_SDMMC +void sdmmc_variant_init(struct mmci_host *host); +#else +static inline void sdmmc_variant_init(struct mmci_host *host) {} +#endif  |