|
|
|
@ -338,5 +338,85 @@ static inline u8 sdhci_readb(struct sdhci_host *host, int reg) |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_BLK |
|
|
|
|
/**
|
|
|
|
|
* sdhci_setup_cfg() - Set up the configuration for DWMMC |
|
|
|
|
* |
|
|
|
|
* This is used to set up an SDHCI device when you are using CONFIG_BLK. |
|
|
|
|
* |
|
|
|
|
* This should be called from your MMC driver's probe() method once you have |
|
|
|
|
* the information required. |
|
|
|
|
* |
|
|
|
|
* Generally your driver will have a platform data structure which holds both |
|
|
|
|
* the configuration (struct mmc_config) and the MMC device info (struct mmc). |
|
|
|
|
* For example: |
|
|
|
|
* |
|
|
|
|
* struct msm_sdhc_plat { |
|
|
|
|
* struct mmc_config cfg; |
|
|
|
|
* struct mmc mmc; |
|
|
|
|
* }; |
|
|
|
|
* |
|
|
|
|
* ... |
|
|
|
|
* |
|
|
|
|
* Inside U_BOOT_DRIVER(): |
|
|
|
|
* .platdata_auto_alloc_size = sizeof(struct msm_sdhc_plat), |
|
|
|
|
* |
|
|
|
|
* To access platform data: |
|
|
|
|
* struct msm_sdhc_plat *plat = dev_get_platdata(dev); |
|
|
|
|
* |
|
|
|
|
* See msm_sdhci.c for an example. |
|
|
|
|
* |
|
|
|
|
* @cfg: Configuration structure to fill in (generally &plat->mmc) |
|
|
|
|
* @name: Device name (normally dev->name) |
|
|
|
|
* @buswidth: Bus width (in bits, such as 4 or 8) |
|
|
|
|
* @caps: Host capabilities (MMC_MODE_...) |
|
|
|
|
* @max_clk: Maximum supported clock speed in HZ (0 for default) |
|
|
|
|
* @min_clk: Minimum supported clock speed in HZ (0 for default) |
|
|
|
|
* @version: Host controller version (generally read from the |
|
|
|
|
* SDHCI_HOST_VERSION register) |
|
|
|
|
* @quirks: Quick flags (SDHCI_QUIRK_...) |
|
|
|
|
* @host_caps: Additional host capabilities (0 if none) |
|
|
|
|
*/ |
|
|
|
|
int sdhci_setup_cfg(struct mmc_config *cfg, const char *name, int buswidth, |
|
|
|
|
uint caps, u32 max_clk, u32 min_clk, uint version, |
|
|
|
|
uint quirks, uint host_caps); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* sdhci_bind() - Set up a new MMC block device |
|
|
|
|
* |
|
|
|
|
* This is used to set up an SDHCI block device when you are using CONFIG_BLK. |
|
|
|
|
* It should be called from your driver's bind() method. |
|
|
|
|
* |
|
|
|
|
* See msm_sdhci.c for an example. |
|
|
|
|
* |
|
|
|
|
* @dev: Device to set up |
|
|
|
|
* @mmc: Pointer to mmc structure (normally &plat->mmc) |
|
|
|
|
* @cfg: Empty configuration structure (generally &plat->cfg). This is |
|
|
|
|
* normally all zeroes at this point. The only purpose of passing |
|
|
|
|
* this in is to set mmc->cfg to it. |
|
|
|
|
* @return 0 if OK, -ve if the block device could not be created |
|
|
|
|
*/ |
|
|
|
|
int sdhci_bind(struct udevice *dev, struct mmc *mmc, struct mmc_config *cfg); |
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* add_sdhci() - Add a new SDHCI interface |
|
|
|
|
* |
|
|
|
|
* This is used when you are not using CONFIG_BLK. Convert your driver over! |
|
|
|
|
* |
|
|
|
|
* @host: SDHCI host structure |
|
|
|
|
* @max_clk: Maximum supported clock speed in HZ (0 for default) |
|
|
|
|
* @min_clk: Minimum supported clock speed in HZ (0 for default) |
|
|
|
|
* @return 0 if OK, -ve on error |
|
|
|
|
*/ |
|
|
|
|
int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk); |
|
|
|
|
#endif /* !CONFIG_BLK */ |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_DM_MMC_OPS |
|
|
|
|
/* Export the operations to drivers */ |
|
|
|
|
int sdhci_probe(struct udevice *dev); |
|
|
|
|
extern const struct dm_mmc_ops sdhci_ops; |
|
|
|
|
#else |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#endif /* __SDHCI_HW_H */ |
|
|
|
|