| From bae3f4c53585e9a170da9436e0f06919874bda9a Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <jhovold@gmail.com> |
| Date: Mon, 26 May 2014 19:23:39 +0200 |
| Subject: USB: cdc-acm: fix runtime PM for control messages |
| |
| From: Johan Hovold <jhovold@gmail.com> |
| |
| commit bae3f4c53585e9a170da9436e0f06919874bda9a upstream. |
| |
| Fix runtime PM handling of control messages by adding the required PM |
| counter operations. |
| |
| Fixes: 11ea859d64b6 ("USB: additional power savings for cdc-acm devices |
| that support remote wakeup") |
| |
| Signed-off-by: Johan Hovold <jhovold@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/class/cdc-acm.c | 12 +++++++++++- |
| 1 file changed, 11 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/class/cdc-acm.c |
| +++ b/drivers/usb/class/cdc-acm.c |
| @@ -123,13 +123,23 @@ static void acm_release_minor(struct acm |
| static int acm_ctrl_msg(struct acm *acm, int request, int value, |
| void *buf, int len) |
| { |
| - int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0), |
| + int retval; |
| + |
| + retval = usb_autopm_get_interface(acm->control); |
| + if (retval) |
| + return retval; |
| + |
| + retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0), |
| request, USB_RT_ACM, value, |
| acm->control->altsetting[0].desc.bInterfaceNumber, |
| buf, len, 5000); |
| + |
| dev_dbg(&acm->control->dev, |
| "%s - rq 0x%02x, val %#x, len %#x, result %d\n", |
| __func__, request, value, len, retval); |
| + |
| + usb_autopm_put_interface(acm->control); |
| + |
| return retval < 0 ? retval : 0; |
| } |
| |