mmc: rtsx_usb_sdmmc: Don't runtime resume the device while changing led
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 31 May 2018 09:40:39 +0000 (11:40 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Dec 2018 07:26:24 +0000 (08:26 +0100)
In case the card has been powered off, it seems silly to continue to allow
the led to be updated. Instead let's forbid that, as it enables us to
prevent runtime resuming the device and thus avoids wasting energy.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
drivers/mmc/host/rtsx_usb_sdmmc.c

index 9a3ff22dd0fe29353ffa20a94695670b15c81737..14b4a4e13fe60a03704149d1aa39c987362061a1 100644 (file)
@@ -1297,14 +1297,18 @@ static void rtsx_usb_update_led(struct work_struct *work)
                container_of(work, struct rtsx_usb_sdmmc, led_work);
        struct rtsx_ucr *ucr = host->ucr;
 
-       pm_runtime_get_sync(sdmmc_dev(host));
+       pm_runtime_get_noresume(sdmmc_dev(host));
        mutex_lock(&ucr->dev_mutex);
 
+       if (host->power_mode == MMC_POWER_OFF)
+               goto out;
+
        if (host->led.brightness == LED_OFF)
                rtsx_usb_turn_off_led(ucr);
        else
                rtsx_usb_turn_on_led(ucr);
 
+out:
        mutex_unlock(&ucr->dev_mutex);
        pm_runtime_put(sdmmc_dev(host));
 }