mmc: rtsx_usb_sdmmc: Handle runtime PM while changing the led
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 15 Sep 2016 12:46:21 +0000 (14:46 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Oct 2016 13:43:03 +0000 (15:43 +0200)
Accesses of the rtsx sdmmc's parent device, which is the rtsx usb device,
must be done when it's runtime resumed. Currently this isn't case when
changing the led, so let's fix this by adding a pm_runtime_get_sync() and
a pm_runtime_put() around those operations.

Reported-by: Ritesh Raj Sarraf <rrs@researchut.com>
Tested-by: Ritesh Raj Sarraf <rrs@researchut.com>
Cc: <stable@vger.kernel.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/rtsx_usb_sdmmc.c

index e0b85904c9bbbd6b7ea174dc5f02efdcdc6bdf48..6e9c0f8fddb1064c64c195812fdf8ad220728360 100644 (file)
@@ -1309,6 +1309,7 @@ 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));
        mutex_lock(&ucr->dev_mutex);
 
        if (host->led.brightness == LED_OFF)
@@ -1317,6 +1318,7 @@ static void rtsx_usb_update_led(struct work_struct *work)
                rtsx_usb_turn_on_led(ucr);
 
        mutex_unlock(&ucr->dev_mutex);
+       pm_runtime_put(sdmmc_dev(host));
 }
 #endif