unsigned char report_type)
{
struct usbhid_device *usbhid = hid->driver_data;
- struct usb_device *dev = hid_to_usb_dev(hid);
- struct usb_interface *intf = usbhid->intf;
- struct usb_host_interface *interface = intf->cur_altsetting;
+ struct usb_device *dev;
+ struct usb_interface *intf;
+ struct usb_host_interface *interface;
int skipped_report_id = 0;
int ret;
+ if (test_bit(HID_DISCONNECTED, &usbhid->iofl)) {
+ pr_err("hid device disconnected\n");
+ return -ESHUTDOWN;
+ }
+
+ dev = hid_to_usb_dev(hid);
+ intf = usbhid->intf;
+ interface = intf->cur_altsetting;
+
/* Byte 0 is the report number. Report data starts at byte 1.*/
buf[0] = report_number;
if (report_number == 0x0) {