diff options
| -rw-r--r-- | hid-tmt300rs.c | 51 | ||||
| -rw-r--r-- | hid-tmt300rs.h | 2 |
2 files changed, 43 insertions, 10 deletions
diff --git a/hid-tmt300rs.c b/hid-tmt300rs.c index 871c0d0..84fc54c 100644 --- a/hid-tmt300rs.c +++ b/hid-tmt300rs.c @@ -31,6 +31,38 @@ static struct t300rs_device_entry *t300rs_get_device(struct hid_device *hdev){ return t300rs; } +static int t300rs_send_dumb_int(struct input_dev *dev, u8 *send_buffer, int *trans){ + struct hid_device *hdev = input_get_drvdata(dev); + struct t300rs_device_entry *t300rs; + struct usb_device *usbdev; + struct usb_interface *usbif; + struct usb_host_endpoint *ep; + struct urb *urb = usb_alloc_urb(0, GFP_ATOMIC); + int ret, i; + + t300rs = t300rs_get_device(hdev); + if(!t300rs){ + hid_err(hdev, "could not get device\n"); + } + + usbdev = t300rs->usbdev; + usbif = t300rs->usbif; + ep = &usbif->cur_altsetting->endpoint[1]; + + usb_fill_int_urb( + urb, + usbdev, + usb_sndintpipe(usbdev, 1), + send_buffer, + T300RS_BUFFER_LENGTH, + t300rs_int_callback, + hdev, + ep->desc.bInterval + ); + + return usb_submit_urb(urb, GFP_ATOMIC); +} + static int t300rs_send_int(struct input_dev *dev, u8 *send_buffer, int *trans){ struct hid_device *hdev = input_get_drvdata(dev); struct t300rs_device_entry *t300rs; @@ -1240,7 +1272,7 @@ static int t300rs_open(struct input_dev *dev){ int ret, trans; t300rs = t300rs_get_device(hdev); - +/* send_buffer[0] = 0x60; send_buffer[1] = 0x01; send_buffer[2] = 0x04; @@ -1271,6 +1303,7 @@ static int t300rs_open(struct input_dev *dev){ memset(send_buffer, 0, T300RS_BUFFER_LENGTH); t300rs_open_interrupts(t300rs); + */ send_buffer[0] = 0x60; send_buffer[1] = 0x01; @@ -1368,7 +1401,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[0] = 0x42; send_buffer[1] = 0x01; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1385,7 +1418,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[2] = 0x90; send_buffer[3] = 0x03; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1401,7 +1434,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[2] = 0x00; send_buffer[3] = 0x0c; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1416,7 +1449,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[2] = 0x12; send_buffer[3] = 0x10; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1431,7 +1464,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[2] = 0x00; send_buffer[3] = 0x06; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1459,7 +1492,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[1] = 0x04; send_buffer[2] = 0x03; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1473,7 +1506,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[1] = 0x04; send_buffer[2] = 0x03; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; @@ -1487,7 +1520,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ send_buffer[1] = 0x04; send_buffer[2] = 0x03; - ret = t300rs_send_int(t300rs->input_dev, send_buffer, &trans); + ret = t300rs_send_dumb_int(t300rs->input_dev, send_buffer, &trans); if(ret){ hid_err(t300rs->hdev, "failed sending interrupts\n"); goto err; diff --git a/hid-tmt300rs.h b/hid-tmt300rs.h index b622d15..140cf9d 100644 --- a/hid-tmt300rs.h +++ b/hid-tmt300rs.h @@ -89,7 +89,7 @@ struct t300rs_data{ static __u8 t300rs_rdesc_fixed[] = {0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0x09, 0x01, 0xa1, 0x00, 0x85, 0x07, 0x09, 0x30, 0x15, 0x00, 0x27, 0xff, 0xff, 0x00, 0x00, 0x35, 0x00, 0x47, 0xff, 0xff, 0x00, 0x00, 0x75, 0x10, 0x95, 0x01, 0x81, 0x02, 0x09, 0x35, 0x26, 0xff, 0x03, 0x46, 0xff, 0x03, 0x81, 0x02, 0x09, 0x32, 0x81, 0x02, 0x09, 0x31, 0x81, 0x02, 0x81, 0x03, 0x05, 0x09, 0x19, 0x01, 0x29, 0x0d, 0x25, 0x01, 0x45, 0x01, 0x75, 0x01, 0x95, 0x0d, 0x81, 0x02, 0x75, 0x0b, 0x95, 0x01, 0x81, 0x03, 0x05, 0x01, 0x09, 0x39, 0x25, 0x07, 0x46, 0x3b, 0x01, 0x55, 0x00, 0x65, 0x14, 0x75, 0x04, 0x81, 0x42, 0x65, 0x00, 0x81, 0x03, 0x85, 0x60, // here 0x0a 0x06, 0x00, 0xff, 0x09, 0x60, // here 0x0a - 0x75, 0x08, 0x95, 0x3f, 0x26, 0xff, 0x7f, 0x16, 0x00, 0x80, 0x46, 0xff, 0x7f, 0x36, 0x00, 0x80, 0x91, 0x02, 0x85, 0x02, 0x09, 0x02, 0x81, 0x02, 0x09, 0x14, 0x85, 0x14, 0x81, 0x02, 0xc0, 0xc0,}; + 0x75, 0x08, 0x95, 0x3f, 0x26, 0xff, 0x7f, 0x15, 0x00, 0x46, 0xff, 0x7f, 0x36, 0x00, 0x80, 0x91, 0x02, 0x85, 0x02, 0x09, 0x02, 0x81, 0x02, 0x09, 0x14, 0x85, 0x14, 0x81, 0x02, 0xc0, 0xc0,}; static u8 spring_values[] = { 0xa6, 0x6a, 0xa6, 0x6a, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xdf, 0x58, 0xa6, 0x6a, 0x06 |
