On Sun, 10 Feb 2019 at 18:31, Jonathan Neuschäfer <j.neuschaefer@xxxxxxx> wrote: > > When using the mmc_spi driver with a card-detect pin, I noticed that the > card was not detected immediately after probe, but only after it was > unplugged and plugged back in (and the CD IRQ fired). > > The call tree looks something like this: > > mmc_spi_probe > mmc_add_host > mmc_start_host > _mmc_detect_change > mmc_schedule_delayed_work(&host->detect, 0) > mmc_rescan > host->bus_ops->detect(host) > mmc_detect > _mmc_detect_card_removed > host->ops->get_cd(host) > mmc_gpio_get_cd -> -ENOSYS (ctx->cd_gpio not set) > mmc_gpiod_request_cd > ctx->cd_gpio = desc > > To fix this issue, call mmc_detect_change after the card-detect GPIO/IRQ > is registered. > > Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@xxxxxxx> This works well as fix and for stable! However, we should probably clean up the code in ->probe() to avoid this thing altogether. Anyway, I send a patch for that - on top. Applied for fixes and added a stable tag, thanks! Kind regards Uffe > --- > drivers/mmc/host/mmc_spi.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c > index 10ba46b728e8..8ade14fb2148 100644 > --- a/drivers/mmc/host/mmc_spi.c > +++ b/drivers/mmc/host/mmc_spi.c > @@ -1450,6 +1450,7 @@ static int mmc_spi_probe(struct spi_device *spi) > mmc->caps &= ~MMC_CAP_NEEDS_POLL; > mmc_gpiod_request_cd_irq(mmc); > } > + mmc_detect_change(mmc, 0); > > /* Index 1 is write protect/read only */ > status = mmc_gpiod_request_ro(mmc, NULL, 1, false, 0, NULL); > -- > 2.20.1 >