drivers/misc/cardreader/rtsx_usb.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/misc/cardreader/rtsx_usb.c b/drivers/misc/cardreader/rtsx_usb.c index 148107a4547c..d007a4455ce5 100644 --- a/drivers/misc/cardreader/rtsx_usb.c +++ b/drivers/misc/cardreader/rtsx_usb.c @@ -698,6 +698,12 @@ static void rtsx_usb_disconnect(struct usb_interface *intf) }
#ifdef CONFIG_PM +static int rtsx_usb_resume_child(struct device *dev, void *data) +{
pm_request_resume(dev);
return 0;
+}
static int rtsx_usb_suspend(struct usb_interface *intf, pm_message_t message) { struct rtsx_ucr *ucr = @@ -713,8 +719,10 @@ static int rtsx_usb_suspend(struct usb_interface *intf, pm_message_t message) mutex_unlock(&ucr->dev_mutex);
/* Defer the autosuspend if card exists */
if (val & (SD_CD | MS_CD))
if (val & (SD_CD | MS_CD)) {
device_for_each_child(&intf->dev, NULL, rtsx_usb_resume_child);
Why not calling rtsx_usb_resume() here?
return -EAGAIN;
} } else { /* There is an ongoing operation*/ return -EAGAIN;
@@ -724,12 +732,6 @@ static int rtsx_usb_suspend(struct usb_interface *intf, pm_message_t message) return 0; }
-static int rtsx_usb_resume_child(struct device *dev, void *data) -{
pm_request_resume(dev);
return 0;
-}
static int rtsx_usb_resume(struct usb_interface *intf) { device_for_each_child(&intf->dev, NULL, rtsx_usb_resume_child); -- 2.25.1
drivers/misc/cardreader/rtsx_usb.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/misc/cardreader/rtsx_usb.c
b/drivers/misc/cardreader/rtsx_usb.c
index 148107a4547c..d007a4455ce5 100644 --- a/drivers/misc/cardreader/rtsx_usb.c +++ b/drivers/misc/cardreader/rtsx_usb.c @@ -698,6 +698,12 @@ static void rtsx_usb_disconnect(struct usb_interface
*intf)
}
#ifdef CONFIG_PM +static int rtsx_usb_resume_child(struct device *dev, void *data) +{
pm_request_resume(dev);
return 0;
+}
static int rtsx_usb_suspend(struct usb_interface *intf, pm_message_t
message)
{ struct rtsx_ucr *ucr = @@ -713,8 +719,10 @@ static int rtsx_usb_suspend(struct usb_interface
*intf, pm_message_t message)
mutex_unlock(&ucr->dev_mutex); /* Defer the autosuspend if card exists */
if (val & (SD_CD | MS_CD))
if (val & (SD_CD | MS_CD)) {
device_for_each_child(&intf->dev,
NULL, rtsx_usb_resume_child); Why not calling rtsx_usb_resume() here?
Because in this time rtsx_usb is not in runtime_suspend, only need to make sure child is not in suspend Actually when the program came here this suspend will be rejected because return -EAGAIN
return -EAGAIN;
} } else { /* There is an ongoing operation*/ return -EAGAIN;
@@ -724,12 +732,6 @@ static int rtsx_usb_suspend(struct usb_interface
*intf, pm_message_t message)
return 0;
}
-static int rtsx_usb_resume_child(struct device *dev, void *data) -{
pm_request_resume(dev);
return 0;
-}
static int rtsx_usb_resume(struct usb_interface *intf) { device_for_each_child(&intf->dev, NULL, rtsx_usb_resume_child); -- 2.25.1
linux-stable-mirror@lists.linaro.org