| From ccf58010e579a81fd79bfcc1aa444af6ae8e2d72 Mon Sep 17 00:00:00 2001 |
| From: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Date: Mon, 5 Nov 2018 16:45:04 +0800 |
| Subject: memstick: Prevent memstick host from getting runtime suspended during |
| card detection |
| |
| [ Upstream commit e03e303edf1c63e6dd455ccd568c74e93ef3ba8c ] |
| |
| We can use MEMSTICK_POWER_{ON,OFF} along with pm_runtime_{get,put} |
| helpers to let memstick host support runtime pm. |
| |
| The rpm count may go down to zero before the memstick host powers on, so |
| the host can be runtime suspended. |
| |
| So before doing card detection, increment the rpm count to avoid the |
| host gets runtime suspended. Balance the rpm count after card detection |
| is done. |
| |
| Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name> |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/memstick/core/memstick.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c |
| index a0547dbf9806..4d673a626db4 100644 |
| --- a/drivers/memstick/core/memstick.c |
| +++ b/drivers/memstick/core/memstick.c |
| @@ -18,6 +18,7 @@ |
| #include <linux/delay.h> |
| #include <linux/slab.h> |
| #include <linux/module.h> |
| +#include <linux/pm_runtime.h> |
| |
| #define DRIVER_NAME "memstick" |
| |
| @@ -436,6 +437,7 @@ static void memstick_check(struct work_struct *work) |
| struct memstick_dev *card; |
| |
| dev_dbg(&host->dev, "memstick_check started\n"); |
| + pm_runtime_get_noresume(host->dev.parent); |
| mutex_lock(&host->lock); |
| if (!host->card) { |
| if (memstick_power_on(host)) |
| @@ -479,6 +481,7 @@ out_power_off: |
| host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); |
| |
| mutex_unlock(&host->lock); |
| + pm_runtime_put(host->dev.parent); |
| dev_dbg(&host->dev, "memstick_check finished\n"); |
| } |
| |
| -- |
| 2.19.1 |
| |