| From 98a4f1ff7bea8002ab79d6776e30d27932e88244 Mon Sep 17 00:00:00 2001 |
| From: Lan Tianyu <tianyu.lan@intel.com> |
| Date: Wed, 3 Jul 2013 22:17:54 +0800 |
| Subject: usb: don't check pm qos NO_POWER_OFF flag in usb_port_suspend() |
| |
| From: Lan Tianyu <tianyu.lan@intel.com> |
| |
| commit 98a4f1ff7bea8002ab79d6776e30d27932e88244 upstream. |
| |
| The pm qos NO_POWER_OFF flag is checked twice during usb device suspend |
| to see if the usb port power off condition is met. This is redundant and |
| also will prevent the port from being powered off if the NO_POWER_OFF |
| flag is changed to 1 from 0 after the device was already suspended. |
| |
| More detail in the following link. |
| http://marc.info/?l=linux-usb&m=136543949130865&w=2 |
| |
| This patch should be backported to kernels as old as 3.7, that |
| contain the commit f7ac7787ad361e31a7972e2854ed8dc2eedfac3b "usb/acpi: |
| Use ACPI methods to power off ports." |
| |
| Signed-off-by: Lan Tianyu <tianyu.lan@intel.com> |
| Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/core/hub.c | 14 ++------------ |
| 1 file changed, 2 insertions(+), 12 deletions(-) |
| |
| --- a/drivers/usb/core/hub.c |
| +++ b/drivers/usb/core/hub.c |
| @@ -3041,19 +3041,9 @@ int usb_port_suspend(struct usb_device * |
| usb_set_device_state(udev, USB_STATE_SUSPENDED); |
| } |
| |
| - /* |
| - * Check whether current status meets the requirement of |
| - * usb port power off mechanism |
| - */ |
| if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled) { |
| - enum pm_qos_flags_status pm_qos_stat; |
| - |
| - pm_qos_stat = dev_pm_qos_flags(&port_dev->dev, |
| - PM_QOS_FLAG_NO_POWER_OFF); |
| - if (pm_qos_stat != PM_QOS_FLAGS_ALL) { |
| - pm_runtime_put_sync(&port_dev->dev); |
| - port_dev->did_runtime_put = true; |
| - } |
| + pm_runtime_put_sync(&port_dev->dev); |
| + port_dev->did_runtime_put = true; |
| } |
| |
| usb_mark_last_busy(hub->hdev); |