Lines Matching refs:kbd
114 struct usb_kbd *kbd = urb->context; in usb_kbd_irq() local
130 input_report_key(kbd->dev, usb_kbd_keycode[i + 224], (kbd->new[0] >> i) & 1); in usb_kbd_irq()
134 if (kbd->old[i] > 3 && memscan(kbd->new + 2, kbd->old[i], 6) == kbd->new + 8) { in usb_kbd_irq()
135 if (usb_kbd_keycode[kbd->old[i]]) in usb_kbd_irq()
136 input_report_key(kbd->dev, usb_kbd_keycode[kbd->old[i]], 0); in usb_kbd_irq()
140 kbd->old[i]); in usb_kbd_irq()
143 if (kbd->new[i] > 3 && memscan(kbd->old + 2, kbd->new[i], 6) == kbd->old + 8) { in usb_kbd_irq()
144 if (usb_kbd_keycode[kbd->new[i]]) in usb_kbd_irq()
145 input_report_key(kbd->dev, usb_kbd_keycode[kbd->new[i]], 1); in usb_kbd_irq()
149 kbd->new[i]); in usb_kbd_irq()
153 input_sync(kbd->dev); in usb_kbd_irq()
155 memcpy(kbd->old, kbd->new, 8); in usb_kbd_irq()
161 kbd->usbdev->bus->bus_name, in usb_kbd_irq()
162 kbd->usbdev->devpath, i); in usb_kbd_irq()
169 struct usb_kbd *kbd = input_get_drvdata(dev); in usb_kbd_event() local
174 spin_lock_irqsave(&kbd->leds_lock, flags); in usb_kbd_event()
175 …kbd->newleds = (!!test_bit(LED_KANA, dev->led) << 3) | (!!test_bit(LED_COMPOSE, dev->led) << 3)… in usb_kbd_event()
179 if (kbd->led_urb_submitted){ in usb_kbd_event()
180 spin_unlock_irqrestore(&kbd->leds_lock, flags); in usb_kbd_event()
184 if (*(kbd->leds) == kbd->newleds){ in usb_kbd_event()
185 spin_unlock_irqrestore(&kbd->leds_lock, flags); in usb_kbd_event()
189 *(kbd->leds) = kbd->newleds; in usb_kbd_event()
191 kbd->led->dev = kbd->usbdev; in usb_kbd_event()
192 if (usb_submit_urb(kbd->led, GFP_ATOMIC)) in usb_kbd_event()
195 kbd->led_urb_submitted = true; in usb_kbd_event()
197 spin_unlock_irqrestore(&kbd->leds_lock, flags); in usb_kbd_event()
205 struct usb_kbd *kbd = urb->context; in usb_kbd_led() local
211 spin_lock_irqsave(&kbd->leds_lock, flags); in usb_kbd_led()
213 if (*(kbd->leds) == kbd->newleds){ in usb_kbd_led()
214 kbd->led_urb_submitted = false; in usb_kbd_led()
215 spin_unlock_irqrestore(&kbd->leds_lock, flags); in usb_kbd_led()
219 *(kbd->leds) = kbd->newleds; in usb_kbd_led()
221 kbd->led->dev = kbd->usbdev; in usb_kbd_led()
222 if (usb_submit_urb(kbd->led, GFP_ATOMIC)){ in usb_kbd_led()
224 kbd->led_urb_submitted = false; in usb_kbd_led()
226 spin_unlock_irqrestore(&kbd->leds_lock, flags); in usb_kbd_led()
232 struct usb_kbd *kbd = input_get_drvdata(dev); in usb_kbd_open() local
234 kbd->irq->dev = kbd->usbdev; in usb_kbd_open()
235 if (usb_submit_urb(kbd->irq, GFP_KERNEL)) in usb_kbd_open()
243 struct usb_kbd *kbd = input_get_drvdata(dev); in usb_kbd_close() local
245 usb_kill_urb(kbd->irq); in usb_kbd_close()
248 static int usb_kbd_alloc_mem(struct usb_device *dev, struct usb_kbd *kbd) in usb_kbd_alloc_mem() argument
250 if (!(kbd->irq = usb_alloc_urb(0, GFP_KERNEL))) in usb_kbd_alloc_mem()
252 if (!(kbd->led = usb_alloc_urb(0, GFP_KERNEL))) in usb_kbd_alloc_mem()
254 if (!(kbd->new = usb_alloc_coherent(dev, 8, GFP_ATOMIC, &kbd->new_dma))) in usb_kbd_alloc_mem()
256 if (!(kbd->cr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL))) in usb_kbd_alloc_mem()
258 if (!(kbd->leds = usb_alloc_coherent(dev, 1, GFP_ATOMIC, &kbd->leds_dma))) in usb_kbd_alloc_mem()
264 static void usb_kbd_free_mem(struct usb_device *dev, struct usb_kbd *kbd) in usb_kbd_free_mem() argument
266 usb_free_urb(kbd->irq); in usb_kbd_free_mem()
267 usb_free_urb(kbd->led); in usb_kbd_free_mem()
268 usb_free_coherent(dev, 8, kbd->new, kbd->new_dma); in usb_kbd_free_mem()
269 kfree(kbd->cr); in usb_kbd_free_mem()
270 usb_free_coherent(dev, 1, kbd->leds, kbd->leds_dma); in usb_kbd_free_mem()
279 struct usb_kbd *kbd; in usb_kbd_probe() local
296 kbd = kzalloc(sizeof(struct usb_kbd), GFP_KERNEL); in usb_kbd_probe()
298 if (!kbd || !input_dev) in usb_kbd_probe()
301 if (usb_kbd_alloc_mem(dev, kbd)) in usb_kbd_probe()
304 kbd->usbdev = dev; in usb_kbd_probe()
305 kbd->dev = input_dev; in usb_kbd_probe()
306 spin_lock_init(&kbd->leds_lock); in usb_kbd_probe()
309 strlcpy(kbd->name, dev->manufacturer, sizeof(kbd->name)); in usb_kbd_probe()
313 strlcat(kbd->name, " ", sizeof(kbd->name)); in usb_kbd_probe()
314 strlcat(kbd->name, dev->product, sizeof(kbd->name)); in usb_kbd_probe()
317 if (!strlen(kbd->name)) in usb_kbd_probe()
318 snprintf(kbd->name, sizeof(kbd->name), in usb_kbd_probe()
323 usb_make_path(dev, kbd->phys, sizeof(kbd->phys)); in usb_kbd_probe()
324 strlcat(kbd->phys, "/input0", sizeof(kbd->phys)); in usb_kbd_probe()
326 input_dev->name = kbd->name; in usb_kbd_probe()
327 input_dev->phys = kbd->phys; in usb_kbd_probe()
331 input_set_drvdata(input_dev, kbd); in usb_kbd_probe()
347 usb_fill_int_urb(kbd->irq, dev, pipe, in usb_kbd_probe()
348 kbd->new, (maxp > 8 ? 8 : maxp), in usb_kbd_probe()
349 usb_kbd_irq, kbd, endpoint->bInterval); in usb_kbd_probe()
350 kbd->irq->transfer_dma = kbd->new_dma; in usb_kbd_probe()
351 kbd->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_kbd_probe()
353 kbd->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE; in usb_kbd_probe()
354 kbd->cr->bRequest = 0x09; in usb_kbd_probe()
355 kbd->cr->wValue = cpu_to_le16(0x200); in usb_kbd_probe()
356 kbd->cr->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber); in usb_kbd_probe()
357 kbd->cr->wLength = cpu_to_le16(1); in usb_kbd_probe()
359 usb_fill_control_urb(kbd->led, dev, usb_sndctrlpipe(dev, 0), in usb_kbd_probe()
360 (void *) kbd->cr, kbd->leds, 1, in usb_kbd_probe()
361 usb_kbd_led, kbd); in usb_kbd_probe()
362 kbd->led->transfer_dma = kbd->leds_dma; in usb_kbd_probe()
363 kbd->led->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_kbd_probe()
365 error = input_register_device(kbd->dev); in usb_kbd_probe()
369 usb_set_intfdata(iface, kbd); in usb_kbd_probe()
374 usb_kbd_free_mem(dev, kbd); in usb_kbd_probe()
377 kfree(kbd); in usb_kbd_probe()
383 struct usb_kbd *kbd = usb_get_intfdata (intf); in usb_kbd_disconnect() local
386 if (kbd) { in usb_kbd_disconnect()
387 usb_kill_urb(kbd->irq); in usb_kbd_disconnect()
388 input_unregister_device(kbd->dev); in usb_kbd_disconnect()
389 usb_kill_urb(kbd->led); in usb_kbd_disconnect()
390 usb_kbd_free_mem(interface_to_usbdev(intf), kbd); in usb_kbd_disconnect()
391 kfree(kbd); in usb_kbd_disconnect()