From b1ae16b12812f74d294dfafd0b22fd0828df90fb Mon Sep 17 00:00:00 2001 From: Kimplul Date: Tue, 3 Nov 2020 14:34:23 +0200 Subject: Added hacky sleep between init interrupts --- hid-tminit.c | 33 +++++++++++++++++++++++++-------- hid-tmt300rs.c | 18 ++++++++++++++++++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/hid-tminit.c b/hid-tminit.c index 25caf51..7f1c657 100644 --- a/hid-tminit.c +++ b/hid-tminit.c @@ -39,7 +39,7 @@ static void tminit_interrupts(struct hid_device *hdev){ kzfree(send_buf); } -/* + void tminit_controls(struct hid_device *hdev){ int i = 0, ret; struct usb_host_endpoint *ep; @@ -61,7 +61,7 @@ void tminit_controls(struct hid_device *hdev){ USB_CTRL_SET_TIMEOUT); if(ret < 0){ - hid_err(hdev, "failed with the ctrl: %i", ret); + hid_err(hdev, "failed retrieveing ctrl 86: %i", ret); } ret = usb_control_msg(usbdev, @@ -75,8 +75,9 @@ void tminit_controls(struct hid_device *hdev){ USB_CTRL_SET_TIMEOUT); if(ret < 0){ - hid_err(hdev, "failed with the ctrl: %i", ret); + hid_err(hdev, "failed retrieving ctrl 73: %i", ret); } + ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 66, @@ -88,8 +89,9 @@ void tminit_controls(struct hid_device *hdev){ USB_CTRL_SET_TIMEOUT); if(ret < 0){ - hid_err(hdev, "failed with the ctrl: %i", ret); + hid_err(hdev, "failed retreiving ctrl 66: %i", ret); } + ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 78, @@ -101,7 +103,7 @@ void tminit_controls(struct hid_device *hdev){ USB_CTRL_SET_TIMEOUT); if(ret < 0){ - hid_err(hdev, "failed with the ctrl: %i", ret); + hid_err(hdev, "failed retrieving ctrl 78: %i", ret); } ret = usb_control_msg(usbdev, @@ -115,10 +117,9 @@ void tminit_controls(struct hid_device *hdev){ USB_CTRL_SET_TIMEOUT); if(ret < 0){ - hid_err(hdev, "failed with the ctrl: %i", ret); + hid_err(hdev, "failed retrieving 86: %i", ret); } } -*/ int tminit(struct hid_device *hdev){ struct urb *urb; @@ -127,8 +128,9 @@ int tminit(struct hid_device *hdev){ struct usb_interface *usbif = to_usb_interface(dev->parent); struct usb_device *usbdev = interface_to_usbdev(usbif); int ret; + u8 *transfer = kzalloc(64, GFP_ATOMIC); - //tminit_controls(hdev); + tminit_controls(hdev); tminit_interrupts(hdev); @@ -138,6 +140,20 @@ int tminit(struct hid_device *hdev){ memcpy(setup_packet, hw_rq_out, 8); memcpy(transfer_buffer, hw_rq_in, 8); + ret = usb_control_msg(usbdev, + usb_rcvctrlpipe(usbdev, 0), + 73, + 0xc1, + 0, + 0, + transfer, + 16, + USB_CTRL_SET_TIMEOUT); + + if(ret < 0){ + hid_err(hdev, "failed retrieving 73 after interrupts: %i", ret); + } + urb = usb_alloc_urb(0, GFP_ATOMIC); usb_fill_control_urb(urb, @@ -156,6 +172,7 @@ int tminit(struct hid_device *hdev){ ret = usb_submit_urb(urb, GFP_ATOMIC); kfree(setup_packet); kfree(transfer_buffer); + kfree(transfer); return ret; } diff --git a/hid-tmt300rs.c b/hid-tmt300rs.c index e73520e..46b792c 100644 --- a/hid-tmt300rs.c +++ b/hid-tmt300rs.c @@ -1306,6 +1306,9 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; } + + msleep(10); + memset(send_buffer, 0, T300RS_BUFFER_LENGTH); send_buffer[0] = 0x0a; @@ -1318,6 +1321,9 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; } + + msleep(10); + memset(send_buffer, 0, T300RS_BUFFER_LENGTH); send_buffer[0] = 0x0a; @@ -1330,6 +1336,9 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; } + + msleep(10); + memset(send_buffer, 0, T300RS_BUFFER_LENGTH); send_buffer[0] = 0x0a; @@ -1342,6 +1351,9 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; } + + msleep(10); + memset(send_buffer, 0, T300RS_BUFFER_LENGTH); send_buffer[0] = 0x0a; @@ -1382,6 +1394,9 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; } + + msleep(10); + memset(send_buffer, 0, T300RS_BUFFER_LENGTH); send_buffer[0] = 0x0a; @@ -1393,6 +1408,9 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; } + + msleep(10); + memset(send_buffer, 0, T300RS_BUFFER_LENGTH); send_buffer[0] = 0x0a; -- cgit v1.3