Lines Matching refs:synusb
75 struct synusb { struct
94 static void synusb_report_buttons(struct synusb *synusb) in synusb_report_buttons() argument
96 struct input_dev *input_dev = synusb->input; in synusb_report_buttons()
98 input_report_key(input_dev, BTN_LEFT, synusb->data[1] & 0x04); in synusb_report_buttons()
99 input_report_key(input_dev, BTN_RIGHT, synusb->data[1] & 0x01); in synusb_report_buttons()
100 input_report_key(input_dev, BTN_MIDDLE, synusb->data[1] & 0x02); in synusb_report_buttons()
103 static void synusb_report_stick(struct synusb *synusb) in synusb_report_stick() argument
105 struct input_dev *input_dev = synusb->input; in synusb_report_stick()
109 pressure = synusb->data[6]; in synusb_report_stick()
110 x = (s16)(be16_to_cpup((__be16 *)&synusb->data[2]) << 3) >> 7; in synusb_report_stick()
111 y = (s16)(be16_to_cpup((__be16 *)&synusb->data[4]) << 3) >> 7; in synusb_report_stick()
120 synusb_report_buttons(synusb); in synusb_report_stick()
125 static void synusb_report_touchpad(struct synusb *synusb) in synusb_report_touchpad() argument
127 struct input_dev *input_dev = synusb->input; in synusb_report_touchpad()
132 pressure = synusb->data[6]; in synusb_report_touchpad()
133 x = be16_to_cpup((__be16 *)&synusb->data[2]); in synusb_report_touchpad()
134 y = be16_to_cpup((__be16 *)&synusb->data[4]); in synusb_report_touchpad()
135 w = synusb->data[0] & 0x0f; in synusb_report_touchpad()
181 synusb_report_buttons(synusb); in synusb_report_touchpad()
182 if (synusb->flags & SYNUSB_AUXDISPLAY) in synusb_report_touchpad()
183 input_report_key(input_dev, BTN_MIDDLE, synusb->data[1] & 0x08); in synusb_report_touchpad()
190 struct synusb *synusb = urb->context; in synusb_irq() local
196 usb_mark_last_busy(synusb->udev); in synusb_irq()
210 if (synusb->flags & SYNUSB_STICK) in synusb_irq()
211 synusb_report_stick(synusb); in synusb_irq()
213 synusb_report_touchpad(synusb); in synusb_irq()
218 dev_err(&synusb->intf->dev, in synusb_irq()
244 struct synusb *synusb = input_get_drvdata(dev); in synusb_open() local
247 retval = usb_autopm_get_interface(synusb->intf); in synusb_open()
249 dev_err(&synusb->intf->dev, in synusb_open()
255 mutex_lock(&synusb->pm_mutex); in synusb_open()
256 retval = usb_submit_urb(synusb->urb, GFP_KERNEL); in synusb_open()
258 dev_err(&synusb->intf->dev, in synusb_open()
265 synusb->intf->needs_remote_wakeup = 1; in synusb_open()
266 synusb->is_open = true; in synusb_open()
269 mutex_unlock(&synusb->pm_mutex); in synusb_open()
270 usb_autopm_put_interface(synusb->intf); in synusb_open()
276 struct synusb *synusb = input_get_drvdata(dev); in synusb_close() local
279 autopm_error = usb_autopm_get_interface(synusb->intf); in synusb_close()
281 mutex_lock(&synusb->pm_mutex); in synusb_close()
282 usb_kill_urb(synusb->urb); in synusb_close()
283 synusb->intf->needs_remote_wakeup = 0; in synusb_close()
284 synusb->is_open = false; in synusb_close()
285 mutex_unlock(&synusb->pm_mutex); in synusb_close()
288 usb_autopm_put_interface(synusb->intf); in synusb_close()
296 struct synusb *synusb; in synusb_probe() local
314 synusb = kzalloc(sizeof(*synusb), GFP_KERNEL); in synusb_probe()
316 if (!synusb || !input_dev) { in synusb_probe()
321 synusb->udev = udev; in synusb_probe()
322 synusb->intf = intf; in synusb_probe()
323 synusb->input = input_dev; in synusb_probe()
324 mutex_init(&synusb->pm_mutex); in synusb_probe()
326 synusb->flags = id->driver_info; in synusb_probe()
327 if (synusb->flags & SYNUSB_COMBO) { in synusb_probe()
332 synusb->flags |= intf_num == 1 ? in synusb_probe()
336 synusb->urb = usb_alloc_urb(0, GFP_KERNEL); in synusb_probe()
337 if (!synusb->urb) { in synusb_probe()
342 synusb->data = usb_alloc_coherent(udev, SYNUSB_RECV_SIZE, GFP_KERNEL, in synusb_probe()
343 &synusb->urb->transfer_dma); in synusb_probe()
344 if (!synusb->data) { in synusb_probe()
349 usb_fill_int_urb(synusb->urb, udev, in synusb_probe()
351 synusb->data, SYNUSB_RECV_SIZE, in synusb_probe()
352 synusb_irq, synusb, in synusb_probe()
354 synusb->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in synusb_probe()
357 strscpy(synusb->name, udev->manufacturer, in synusb_probe()
358 sizeof(synusb->name)); in synusb_probe()
362 strlcat(synusb->name, " ", sizeof(synusb->name)); in synusb_probe()
363 strlcat(synusb->name, udev->product, sizeof(synusb->name)); in synusb_probe()
366 if (!strlen(synusb->name)) in synusb_probe()
367 snprintf(synusb->name, sizeof(synusb->name), in synusb_probe()
372 if (synusb->flags & SYNUSB_STICK) in synusb_probe()
373 strlcat(synusb->name, " (Stick)", sizeof(synusb->name)); in synusb_probe()
375 usb_make_path(udev, synusb->phys, sizeof(synusb->phys)); in synusb_probe()
376 strlcat(synusb->phys, "/input0", sizeof(synusb->phys)); in synusb_probe()
378 input_dev->name = synusb->name; in synusb_probe()
379 input_dev->phys = synusb->phys; in synusb_probe()
381 input_dev->dev.parent = &synusb->intf->dev; in synusb_probe()
383 if (!(synusb->flags & SYNUSB_IO_ALWAYS)) { in synusb_probe()
388 input_set_drvdata(input_dev, synusb); in synusb_probe()
393 if (synusb->flags & SYNUSB_STICK) { in synusb_probe()
412 if (synusb->flags & SYNUSB_TOUCHSCREEN) in synusb_probe()
421 usb_set_intfdata(intf, synusb); in synusb_probe()
423 if (synusb->flags & SYNUSB_IO_ALWAYS) { in synusb_probe()
440 if (synusb->flags & SYNUSB_IO_ALWAYS) in synusb_probe()
441 synusb_close(synusb->input); in synusb_probe()
443 usb_free_coherent(udev, SYNUSB_RECV_SIZE, synusb->data, in synusb_probe()
444 synusb->urb->transfer_dma); in synusb_probe()
446 usb_free_urb(synusb->urb); in synusb_probe()
449 kfree(synusb); in synusb_probe()
457 struct synusb *synusb = usb_get_intfdata(intf); in synusb_disconnect() local
460 if (synusb->flags & SYNUSB_IO_ALWAYS) in synusb_disconnect()
461 synusb_close(synusb->input); in synusb_disconnect()
463 input_unregister_device(synusb->input); in synusb_disconnect()
465 usb_free_coherent(udev, SYNUSB_RECV_SIZE, synusb->data, in synusb_disconnect()
466 synusb->urb->transfer_dma); in synusb_disconnect()
467 usb_free_urb(synusb->urb); in synusb_disconnect()
468 kfree(synusb); in synusb_disconnect()
475 struct synusb *synusb = usb_get_intfdata(intf); in synusb_suspend() local
477 mutex_lock(&synusb->pm_mutex); in synusb_suspend()
478 usb_kill_urb(synusb->urb); in synusb_suspend()
479 mutex_unlock(&synusb->pm_mutex); in synusb_suspend()
486 struct synusb *synusb = usb_get_intfdata(intf); in synusb_resume() local
489 mutex_lock(&synusb->pm_mutex); in synusb_resume()
491 if ((synusb->is_open || (synusb->flags & SYNUSB_IO_ALWAYS)) && in synusb_resume()
492 usb_submit_urb(synusb->urb, GFP_NOIO) < 0) { in synusb_resume()
496 mutex_unlock(&synusb->pm_mutex); in synusb_resume()
503 struct synusb *synusb = usb_get_intfdata(intf); in synusb_pre_reset() local
505 mutex_lock(&synusb->pm_mutex); in synusb_pre_reset()
506 usb_kill_urb(synusb->urb); in synusb_pre_reset()
513 struct synusb *synusb = usb_get_intfdata(intf); in synusb_post_reset() local
516 if ((synusb->is_open || (synusb->flags & SYNUSB_IO_ALWAYS)) && in synusb_post_reset()
517 usb_submit_urb(synusb->urb, GFP_NOIO) < 0) { in synusb_post_reset()
521 mutex_unlock(&synusb->pm_mutex); in synusb_post_reset()