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:
parent
987b81998b
commit
b19bbdc5f4
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue