mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-17 16:14:25 +08:00
mmc: tmio: support IP-builtin card detection logic
A card detect GPIO is set up only for platforms with "cd-gpios" DT property or TMIO_MMC_USE_GPIO_CD flag. However, the driver core always uses mmc_gpio_get_cd, which just fails with -ENOSYS if ctx->cd_gpio is unset. The bit 5 of the status register provides the current signal level of the CD line. Allow to use it if the GPIO is unused. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
This commit is contained in:
parent
788778b0d2
commit
497d1f965c
@ -1066,6 +1066,14 @@ static int tmio_mmc_get_ro(struct mmc_host *mmc)
|
||||
TMIO_STAT_WRPROTECT);
|
||||
}
|
||||
|
||||
static int tmio_mmc_get_cd(struct mmc_host *mmc)
|
||||
{
|
||||
struct tmio_mmc_host *host = mmc_priv(mmc);
|
||||
|
||||
return !!(sd_ctrl_read16_and_16_as_32(host, CTL_STATUS) &
|
||||
TMIO_STAT_SIGSTATE);
|
||||
}
|
||||
|
||||
static int tmio_multi_io_quirk(struct mmc_card *card,
|
||||
unsigned int direction, int blk_size)
|
||||
{
|
||||
@ -1081,7 +1089,7 @@ static const struct mmc_host_ops tmio_mmc_ops = {
|
||||
.request = tmio_mmc_request,
|
||||
.set_ios = tmio_mmc_set_ios,
|
||||
.get_ro = tmio_mmc_get_ro,
|
||||
.get_cd = mmc_gpio_get_cd,
|
||||
.get_cd = tmio_mmc_get_cd,
|
||||
.enable_sdio_irq = tmio_mmc_enable_sdio_irq,
|
||||
.multi_io_quirk = tmio_multi_io_quirk,
|
||||
.hw_reset = tmio_mmc_hw_reset,
|
||||
@ -1234,6 +1242,9 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host)
|
||||
if (mmc_can_gpio_ro(mmc))
|
||||
_host->ops.get_ro = mmc_gpio_get_ro;
|
||||
|
||||
if (mmc_can_gpio_cd(mmc))
|
||||
_host->ops.get_cd = mmc_gpio_get_cd;
|
||||
|
||||
_host->native_hotplug = !(mmc_can_gpio_cd(mmc) ||
|
||||
mmc->caps & MMC_CAP_NEEDS_POLL ||
|
||||
!mmc_card_is_removable(mmc));
|
||||
|
Loading…
Reference in New Issue
Block a user