usb: usbtmc: Fix suspend/resume

Submitted urbs are not allowed when system is suspended.
Thus the submitted urb waiting at interrupt pipe is killed
during suspend callback and submitted again when system resumes.

Signed-off-by: Guido Kiener <guido.kiener@rohde-schwarz.com>
Reviewed-by: Steve Bayless <steve_bayless@keysight.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Guido Kiener 2018-09-12 10:50:57 +02:00 committed by Greg Kroah-Hartman
parent 987b81998b
commit b19bbdc5f4

View File

@ -2306,7 +2306,9 @@ static void usbtmc_free_int(struct usbtmc_device_data *data)
return;
usb_kill_urb(data->iin_urb);
kfree(data->iin_buffer);
data->iin_buffer = NULL;
usb_free_urb(data->iin_urb);
data->iin_urb = NULL;
kref_put(&data->kref, usbtmc_delete);
}
@ -2488,13 +2490,25 @@ static int usbtmc_suspend(struct usb_interface *intf, pm_message_t message)
file_elem);
usbtmc_draw_down(file_data);
}
if (data->iin_ep_present && data->iin_urb)
usb_kill_urb(data->iin_urb);
mutex_unlock(&data->io_mutex);
return 0;
}
static int usbtmc_resume(struct usb_interface *intf)
{
return 0;
struct usbtmc_device_data *data = usb_get_intfdata(intf);
int retcode = 0;
if (data->iin_ep_present && data->iin_urb)
retcode = usb_submit_urb(data->iin_urb, GFP_KERNEL);
if (retcode)
dev_err(&intf->dev, "Failed to submit iin_urb\n");
return retcode;
}
static int usbtmc_pre_reset(struct usb_interface *intf)