|
@@ -1131,11 +1131,20 @@ static int mmc_spi_get_ro(struct mmc_host *mmc)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int mmc_spi_get_cd(struct mmc_host *mmc)
|
|
|
|
+{
|
|
|
|
+ struct mmc_spi_host *host = mmc_priv(mmc);
|
|
|
|
+
|
|
|
|
+ if (host->pdata && host->pdata->get_cd)
|
|
|
|
+ return !!host->pdata->get_cd(mmc->parent);
|
|
|
|
+ return -ENOSYS;
|
|
|
|
+}
|
|
|
|
|
|
static const struct mmc_host_ops mmc_spi_ops = {
|
|
static const struct mmc_host_ops mmc_spi_ops = {
|
|
.request = mmc_spi_request,
|
|
.request = mmc_spi_request,
|
|
.set_ios = mmc_spi_set_ios,
|
|
.set_ios = mmc_spi_set_ios,
|
|
.get_ro = mmc_spi_get_ro,
|
|
.get_ro = mmc_spi_get_ro,
|
|
|
|
+ .get_cd = mmc_spi_get_cd,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
@@ -1319,17 +1328,23 @@ static int mmc_spi_probe(struct spi_device *spi)
|
|
goto fail_glue_init;
|
|
goto fail_glue_init;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* pass platform capabilities, if any */
|
|
|
|
+ if (host->pdata)
|
|
|
|
+ mmc->caps |= host->pdata->caps;
|
|
|
|
+
|
|
status = mmc_add_host(mmc);
|
|
status = mmc_add_host(mmc);
|
|
if (status != 0)
|
|
if (status != 0)
|
|
goto fail_add_host;
|
|
goto fail_add_host;
|
|
|
|
|
|
- dev_info(&spi->dev, "SD/MMC host %s%s%s%s\n",
|
|
|
|
|
|
+ dev_info(&spi->dev, "SD/MMC host %s%s%s%s%s\n",
|
|
mmc->class_dev.bus_id,
|
|
mmc->class_dev.bus_id,
|
|
host->dma_dev ? "" : ", no DMA",
|
|
host->dma_dev ? "" : ", no DMA",
|
|
(host->pdata && host->pdata->get_ro)
|
|
(host->pdata && host->pdata->get_ro)
|
|
? "" : ", no WP",
|
|
? "" : ", no WP",
|
|
(host->pdata && host->pdata->setpower)
|
|
(host->pdata && host->pdata->setpower)
|
|
- ? "" : ", no poweroff");
|
|
|
|
|
|
+ ? "" : ", no poweroff",
|
|
|
|
+ (mmc->caps & MMC_CAP_NEEDS_POLL)
|
|
|
|
+ ? ", cd polling" : "");
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
fail_add_host:
|
|
fail_add_host:
|