···46464747#define RECV_SIZE 8 /* The UIA-11 type have a 8 byte limit. */48484949-/* table of devices that work with this driver */5050-static struct usb_device_id keyspan_table[] = {5151- { USB_DEVICE(USB_KEYSPAN_VENDOR_ID, USB_KEYSPAN_PRODUCT_UIA11) },5252- { } /* Terminating entry */5353-};5454-5555-/* Structure to store all the real stuff that a remote sends to us. */5656-struct keyspan_message {5757- u16 system;5858- u8 button;5959- u8 toggle;6060-};6161-6262-/* Structure used for all the bit testing magic needed to be done. */6363-struct bit_tester {6464- u32 tester;6565- int len;6666- int pos;6767- int bits_left;6868- u8 buffer[32];6969-};7070-7171-/* Structure to hold all of our driver specific stuff */7272-struct usb_keyspan {7373- char name[128];7474- char phys[64];7575- struct usb_device* udev;7676- struct input_dev *input;7777- struct usb_interface* interface;7878- struct usb_endpoint_descriptor* in_endpoint;7979- struct urb* irq_urb;8080- int open;8181- dma_addr_t in_dma;8282- unsigned char* in_buffer;8383-8484- /* variables used to parse messages from remote. */8585- struct bit_tester data;8686- int stage;8787- int toggle;8888-};8989-9049/*9150 * Table that maps the 31 possible keycodes to input keys.9251 * Currently there are 15 and 17 button models so RESERVED codes9352 * are blank areas in the mapping.9453 */9595-static const int keyspan_key_table[] = {5454+static const unsigned short keyspan_key_table[] = {9655 KEY_RESERVED, /* 0 is just a place holder. */9756 KEY_RESERVED,9857 KEY_STOP,···84125 KEY_KPASTERISK,85126 KEY_RESERVED,86127 KEY_MENU128128+};129129+130130+/* table of devices that work with this driver */131131+static struct usb_device_id keyspan_table[] = {132132+ { USB_DEVICE(USB_KEYSPAN_VENDOR_ID, USB_KEYSPAN_PRODUCT_UIA11) },133133+ { } /* Terminating entry */134134+};135135+136136+/* Structure to store all the real stuff that a remote sends to us. */137137+struct keyspan_message {138138+ u16 system;139139+ u8 button;140140+ u8 toggle;141141+};142142+143143+/* Structure used for all the bit testing magic needed to be done. */144144+struct bit_tester {145145+ u32 tester;146146+ int len;147147+ int pos;148148+ int bits_left;149149+ u8 buffer[32];150150+};151151+152152+/* Structure to hold all of our driver specific stuff */153153+struct usb_keyspan {154154+ char name[128];155155+ char phys[64];156156+ unsigned short keymap[ARRAY_SIZE(keyspan_key_table)];157157+ struct usb_device *udev;158158+ struct input_dev *input;159159+ struct usb_interface *interface;160160+ struct usb_endpoint_descriptor *in_endpoint;161161+ struct urb* irq_urb;162162+ int open;163163+ dma_addr_t in_dma;164164+ unsigned char *in_buffer;165165+166166+ /* variables used to parse messages from remote. */167167+ struct bit_tester data;168168+ int stage;169169+ int toggle;87170};8817189172static struct usb_driver keyspan_driver;···172171 }173172174173 return 0;174174+}175175+176176+static void keyspan_report_button(struct usb_keyspan *remote, int button, int press)177177+{178178+ struct input_dev *input = remote->input;179179+180180+ input_event(input, EV_MSC, MSC_SCAN, button);181181+ input_report_key(input, remote->keymap[button], press);182182+ input_sync(input);175183}176184177185/*···321311 __FUNCTION__, message.system, message.button, message.toggle);322312323313 if (message.toggle != remote->toggle) {324324- input_report_key(remote->input, keyspan_key_table[message.button], 1);325325- input_report_key(remote->input, keyspan_key_table[message.button], 0);326326- input_sync(remote->input);314314+ keyspan_report_button(remote, message.button, 1);315315+ keyspan_report_button(remote, message.button, 0);327316 remote->toggle = message.toggle;328317 }329318···500491501492 usb_make_path(udev, remote->phys, sizeof(remote->phys));502493 strlcat(remote->phys, "/input0", sizeof(remote->phys));494494+ memcpy(remote->keymap, keyspan_key_table, sizeof(remote->keymap));503495504496 input_dev->name = remote->name;505497 input_dev->phys = remote->phys;506498 usb_to_input_id(udev, &input_dev->id);507499 input_dev->dev.parent = &interface->dev;500500+ input_dev->keycode = remote->keymap;501501+ input_dev->keycodesize = sizeof(unsigned short);502502+ input_dev->keycodemax = ARRAY_SIZE(remote->keymap);508503509509- input_dev->evbit[0] = BIT_MASK(EV_KEY); /* We will only report KEY events. */504504+ input_set_capability(input_dev, EV_MSC, MSC_SCAN);505505+ __set_bit(EV_KEY, input_dev->evbit);510506 for (i = 0; i < ARRAY_SIZE(keyspan_key_table); i++)511511- if (keyspan_key_table[i] != KEY_RESERVED)512512- set_bit(keyspan_key_table[i], input_dev->keybit);507507+ __set_bit(keyspan_key_table[i], input_dev->keybit);508508+ __clear_bit(KEY_RESERVED, input_dev->keybit);513509514510 input_set_drvdata(input_dev, remote);515511···522508 input_dev->close = keyspan_close;523509524510 /*525525- * Initialize the URB to access the device. The urb gets sent to the device in keyspan_open()511511+ * Initialize the URB to access the device.512512+ * The urb gets sent to the device in keyspan_open()526513 */527514 usb_fill_int_urb(remote->irq_urb,528528- remote->udev, usb_rcvintpipe(remote->udev, remote->in_endpoint->bEndpointAddress),515515+ remote->udev,516516+ usb_rcvintpipe(remote->udev, endpoint->bEndpointAddress),529517 remote->in_buffer, RECV_SIZE, keyspan_irq_recv, remote,530530- remote->in_endpoint->bInterval);518518+ endpoint->bInterval);531519 remote->irq_urb->transfer_dma = remote->in_dma;532520 remote->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;533521