On 2013/1/22 23:05, Greg KH wrote:
On Tue, Jan 22, 2013 at 10:23:12PM +0800, Lan Tianyu wrote:
On 2013/1/22 5:33, Greg KH wrote:
On Mon, Jan 21, 2013 at 10:18:06PM +0800, Lan Tianyu wrote:
Some usb devices can't be resumed correctly after power off. This
patch is to add usb_device_allow_power_off() and usb_device_prevent_power_off()
for device's driver. Call pm_runtime_get_sync(portdev) to increase port's usage
count and then port will not be suspended. The device will not be powered off.
Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx>
---
drivers/usb/core/port.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c
index 0c51d24..0334d91 100644
--- a/drivers/usb/core/port.c
+++ b/drivers/usb/core/port.c
@@ -18,11 +18,39 @@
#include <linux/slab.h>
#include <linux/pm_qos.h>
+#include <linux/module.h>
#include "hub.h"
static const struct attribute_group *port_dev_group[];
+/**
+ * usb_device_control_power_off - Allow or prohibit power off device.
+ * @udev: target usb device
+ * @allow: choice of allow or prohibit
+ *
+ * Call pm_runtime_get/put_sync(portdev) to allow or prohibit target
+ * usb device to be powered off in the kernel. The operations of setting
+ * true and false should be couple. The default status is allowed.
+ */
+int usb_device_control_power_off(struct usb_device *udev, bool allow)
+{
+ struct usb_port *port_dev;
+
+ if (!udev->parent)
+ return -EINVAL;
+
+ port_dev = hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
+
+ if (allow)
+ pm_runtime_put_sync(&port_dev->dev);
+ else
+ pm_runtime_get_sync(&port_dev->dev);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(usb_device_control_power_off);
Oh, I don't see any code calling this function, so why did you add it?
Who needs it? Where is that code?
This is provided for device driver. Some device may not be
compatible with the power off mechanism and driver can use these
function to forbid/allow it. But currently, we are not sure which
kinds of device
they are. So just provide new interfaces.
We don't add new interfaces to the kernel unless they have a user. If I
were to see this in the tree, I would expect it to be removed because of
that. So don't add it at all, only add it when it is needed.
Ok. I will add it later when I find such device.
thanks,
greg k-h
--
Best Regards
Tianyu Lan
linux kernel enabling team
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html