tegra: mmc: Set the removable flag correctly

If the mmc device is non-removable (as indicated by the device tree), set
the flag so that users of the device know.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
Simon Glass 2015-05-04 11:31:16 -06:00 committed by Pantelis Antoniou
parent ebe78bb993
commit 707ac1ad17

View file

@ -528,7 +528,7 @@ static const struct mmc_ops tegra_mmc_ops = {
.getcd = tegra_mmc_getcd, .getcd = tegra_mmc_getcd,
}; };
static int do_mmc_init(int dev_index) static int do_mmc_init(int dev_index, bool removable)
{ {
struct mmc_host *host; struct mmc_host *host;
struct mmc *mmc; struct mmc *mmc;
@ -573,6 +573,7 @@ static int do_mmc_init(int dev_index)
host->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT; host->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
mmc = mmc_create(&host->cfg, host); mmc = mmc_create(&host->cfg, host);
mmc->block_dev.removable = removable;
if (mmc == NULL) if (mmc == NULL)
return -1; return -1;
@ -586,7 +587,8 @@ static int do_mmc_init(int dev_index)
* @param node Device index (0-3) * @param node Device index (0-3)
* @param host Structure to fill in (reg, width, mmc_id) * @param host Structure to fill in (reg, width, mmc_id)
*/ */
static int mmc_get_config(const void *blob, int node, struct mmc_host *host) static int mmc_get_config(const void *blob, int node, struct mmc_host *host,
bool *removablep)
{ {
debug("%s: node = %d\n", __func__, node); debug("%s: node = %d\n", __func__, node);
@ -619,6 +621,7 @@ static int mmc_get_config(const void *blob, int node, struct mmc_host *host)
GPIOD_IS_IN); GPIOD_IS_IN);
gpio_request_by_name_nodev(blob, node, "power-gpios", 0, gpio_request_by_name_nodev(blob, node, "power-gpios", 0,
&host->pwr_gpio, GPIOD_IS_OUT); &host->pwr_gpio, GPIOD_IS_OUT);
*removablep = !fdtdec_get_bool(blob, node, "non-removable");
debug("%s: found controller at %p, width = %d, periph_id = %d\n", debug("%s: found controller at %p, width = %d, periph_id = %d\n",
__func__, host->reg, host->width, host->mmc_id); __func__, host->reg, host->width, host->mmc_id);
@ -636,6 +639,7 @@ static int mmc_get_config(const void *blob, int node, struct mmc_host *host)
static int process_nodes(const void *blob, int node_list[], int count) static int process_nodes(const void *blob, int node_list[], int count)
{ {
struct mmc_host *host; struct mmc_host *host;
bool removable;
int i, node; int i, node;
debug("%s: count = %d\n", __func__, count); debug("%s: count = %d\n", __func__, count);
@ -649,11 +653,11 @@ static int process_nodes(const void *blob, int node_list[], int count)
host = &mmc_host[i]; host = &mmc_host[i];
host->id = i; host->id = i;
if (mmc_get_config(blob, node, host)) { if (mmc_get_config(blob, node, host, &removable)) {
printf("%s: failed to decode dev %d\n", __func__, i); printf("%s: failed to decode dev %d\n", __func__, i);
return -1; return -1;
} }
do_mmc_init(i); do_mmc_init(i, removable);
} }
return 0; return 0;
} }