On 23 August 2018 at 10:12, Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx> wrote: > at 21:29, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > >> [...] >> >>> -#ifdef CONFIG_PM_SLEEP >>> -static int rtsx_usb_ms_suspend(struct device *dev) >>> +#ifdef CONFIG_PM >>> +static int rtsx_usb_ms_runtime_suspend(struct device *dev) >>> { >>> struct rtsx_usb_ms *host = dev_get_drvdata(dev); >>> struct memstick_host *msh = host->msh; >>> >>> - dev_dbg(ms_dev(host), "--> %s\n", __func__); >>> - >>> + host->suspend = true; >>> memstick_suspend_host(msh); >> >> >> I missed this one. Does this really work? To me, this looks like doing >> things upside-down. >> >> To suspend the host, you first need to runtime resume it, because >> mmc_suspend_host() calls into one of the host ops and my touch the >> device, right? >> >> If you want to suspend the host (actually the naming is wrong, as it's >> about suspending/power-iff the memstick card), that should be done via >> when the memstick core finds that the card is removed or during system >> wide suspend. > > > Do you mean the logic was wrong even before my modification? No. I think you should keep the existing callbacks for system sleep, they seems to do what they should. Then add new ones for runtime PM. [...] Kind regards Uffe