Loading drivers/mmc/host/sdhci-msm.c +14 −0 Original line number Diff line number Diff line Loading @@ -3709,6 +3709,19 @@ static void sdhci_msm_init(struct sdhci_host *host) msm_host->pdata->pm_qos_data.latency); } static unsigned int sdhci_msm_get_current_limit(struct sdhci_host *host) { struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_msm_host *msm_host = pltfm_host->priv; struct sdhci_msm_slot_reg_data *curr_slot = msm_host->pdata->vreg_data; u32 max_curr = 0; if (curr_slot && curr_slot->vdd_data) max_curr = curr_slot->vdd_data->hpm_uA; return max_curr; } static struct sdhci_ops sdhci_msm_ops = { .crypto_engine_cfg = sdhci_msm_ice_cfg, .crypto_cfg_reset = sdhci_msm_ice_cfg_reset, Loading @@ -3734,6 +3747,7 @@ static struct sdhci_ops sdhci_msm_ops = { .init = sdhci_msm_init, .pre_req = sdhci_msm_pre_req, .post_req = sdhci_msm_post_req, .get_current_limit = sdhci_msm_get_current_limit, }; static void sdhci_set_default_hw_caps(struct sdhci_msm_host *msm_host, Loading drivers/mmc/host/sdhci.c +8 −3 Original line number Diff line number Diff line Loading @@ -4117,10 +4117,15 @@ int sdhci_add_host(struct sdhci_host *host) * value. */ max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT); if (!max_current_caps && !IS_ERR(mmc->supply.vmmc)) { int curr = regulator_get_current_limit(mmc->supply.vmmc); if (curr > 0) { if (!max_current_caps) { u32 curr = 0; if (!IS_ERR(mmc->supply.vmmc)) curr = regulator_get_current_limit(mmc->supply.vmmc); else if (host->ops->get_current_limit) curr = host->ops->get_current_limit(host); if (curr > 0) { /* convert to SDHCI_MAX_CURRENT format */ curr = curr/1000; /* convert to mA */ curr = curr/SDHCI_MAX_CURRENT_MULTIPLIER; Loading drivers/mmc/host/sdhci.h +1 −0 Original line number Diff line number Diff line Loading @@ -337,6 +337,7 @@ struct sdhci_ops { void (*init)(struct sdhci_host *host); void (*pre_req)(struct sdhci_host *host, struct mmc_request *req); void (*post_req)(struct sdhci_host *host, struct mmc_request *req); unsigned int (*get_current_limit)(struct sdhci_host *host); }; #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS Loading Loading
drivers/mmc/host/sdhci-msm.c +14 −0 Original line number Diff line number Diff line Loading @@ -3709,6 +3709,19 @@ static void sdhci_msm_init(struct sdhci_host *host) msm_host->pdata->pm_qos_data.latency); } static unsigned int sdhci_msm_get_current_limit(struct sdhci_host *host) { struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_msm_host *msm_host = pltfm_host->priv; struct sdhci_msm_slot_reg_data *curr_slot = msm_host->pdata->vreg_data; u32 max_curr = 0; if (curr_slot && curr_slot->vdd_data) max_curr = curr_slot->vdd_data->hpm_uA; return max_curr; } static struct sdhci_ops sdhci_msm_ops = { .crypto_engine_cfg = sdhci_msm_ice_cfg, .crypto_cfg_reset = sdhci_msm_ice_cfg_reset, Loading @@ -3734,6 +3747,7 @@ static struct sdhci_ops sdhci_msm_ops = { .init = sdhci_msm_init, .pre_req = sdhci_msm_pre_req, .post_req = sdhci_msm_post_req, .get_current_limit = sdhci_msm_get_current_limit, }; static void sdhci_set_default_hw_caps(struct sdhci_msm_host *msm_host, Loading
drivers/mmc/host/sdhci.c +8 −3 Original line number Diff line number Diff line Loading @@ -4117,10 +4117,15 @@ int sdhci_add_host(struct sdhci_host *host) * value. */ max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT); if (!max_current_caps && !IS_ERR(mmc->supply.vmmc)) { int curr = regulator_get_current_limit(mmc->supply.vmmc); if (curr > 0) { if (!max_current_caps) { u32 curr = 0; if (!IS_ERR(mmc->supply.vmmc)) curr = regulator_get_current_limit(mmc->supply.vmmc); else if (host->ops->get_current_limit) curr = host->ops->get_current_limit(host); if (curr > 0) { /* convert to SDHCI_MAX_CURRENT format */ curr = curr/1000; /* convert to mA */ curr = curr/SDHCI_MAX_CURRENT_MULTIPLIER; Loading
drivers/mmc/host/sdhci.h +1 −0 Original line number Diff line number Diff line Loading @@ -337,6 +337,7 @@ struct sdhci_ops { void (*init)(struct sdhci_host *host); void (*pre_req)(struct sdhci_host *host, struct mmc_request *req); void (*post_req)(struct sdhci_host *host, struct mmc_request *req); unsigned int (*get_current_limit)(struct sdhci_host *host); }; #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS Loading