Lines Matching refs:yld

142 static int setChar(struct yealink_dev *yld, int el, int chr)  in setChar()  argument
152 yld->lcdMap[el] = chr; in setChar()
158 yld->master.b[a] |= m; in setChar()
160 yld->master.b[a] &= ~m; in setChar()
173 yld->master.b[a] |= m; in setChar()
175 yld->master.b[a] &= ~m; in setChar()
235 static void report_key(struct yealink_dev *yld, int key) in report_key() argument
237 struct input_dev *idev = yld->idev; in report_key()
239 if (yld->key_code >= 0) { in report_key()
241 input_report_key(idev, yld->key_code & 0xff, 0); in report_key()
242 if (yld->key_code >> 8) in report_key()
243 input_report_key(idev, yld->key_code >> 8, 0); in report_key()
246 yld->key_code = key; in report_key()
260 static int yealink_cmd(struct yealink_dev *yld, struct yld_ctl_packet *p) in yealink_cmd() argument
269 return usb_control_msg(yld->udev, in yealink_cmd()
270 usb_sndctrlpipe(yld->udev, 0), in yealink_cmd()
292 static int yealink_set_ringtone(struct yealink_dev *yld, u8 *buf, size_t size) in yealink_set_ringtone() argument
294 struct yld_ctl_packet *p = yld->ctl_data; in yealink_set_ringtone()
301 memset(yld->ctl_data, 0, sizeof(*(yld->ctl_data))); in yealink_set_ringtone()
302 yld->ctl_data->cmd = CMD_RING_VOLUME; in yealink_set_ringtone()
303 yld->ctl_data->size = 1; in yealink_set_ringtone()
304 yld->ctl_data->data[0] = buf[0]; in yealink_set_ringtone()
305 yealink_cmd(yld, p); in yealink_set_ringtone()
319 yealink_cmd(yld, p); in yealink_set_ringtone()
327 static int yealink_do_idle_tasks(struct yealink_dev *yld) in yealink_do_idle_tasks() argument
332 ix = yld->stat_ix; in yealink_do_idle_tasks()
334 memset(yld->ctl_data, 0, sizeof(*(yld->ctl_data))); in yealink_do_idle_tasks()
335 yld->ctl_data->cmd = CMD_KEYPRESS; in yealink_do_idle_tasks()
336 yld->ctl_data->size = 1; in yealink_do_idle_tasks()
337 yld->ctl_data->sum = 0xff - CMD_KEYPRESS; in yealink_do_idle_tasks()
340 if (ix >= sizeof(yld->master)) { in yealink_do_idle_tasks()
341 yld->stat_ix = 0; in yealink_do_idle_tasks()
347 val = yld->master.b[ix]; in yealink_do_idle_tasks()
348 if (val != yld->copy.b[ix]) in yealink_do_idle_tasks()
350 } while (++ix < sizeof(yld->master)); in yealink_do_idle_tasks()
353 yld->stat_ix = 0; in yealink_do_idle_tasks()
362 yld->copy.b[ix] = val; in yealink_do_idle_tasks()
363 yld->ctl_data->data[0] = val; in yealink_do_idle_tasks()
367 yld->ctl_data->cmd = CMD_LED; in yealink_do_idle_tasks()
368 yld->ctl_data->sum = -1 - CMD_LED - val; in yealink_do_idle_tasks()
371 yld->ctl_data->cmd = CMD_DIALTONE; in yealink_do_idle_tasks()
372 yld->ctl_data->sum = -1 - CMD_DIALTONE - val; in yealink_do_idle_tasks()
375 yld->ctl_data->cmd = CMD_RINGTONE; in yealink_do_idle_tasks()
376 yld->ctl_data->sum = -1 - CMD_RINGTONE - val; in yealink_do_idle_tasks()
381 yld->ctl_data->cmd = CMD_SCANCODE; in yealink_do_idle_tasks()
382 yld->ctl_data->offset = cpu_to_be16(val); in yealink_do_idle_tasks()
383 yld->ctl_data->data[0] = 0; in yealink_do_idle_tasks()
384 yld->ctl_data->sum = -1 - CMD_SCANCODE - val; in yealink_do_idle_tasks()
387 len = sizeof(yld->master.s.lcd) - ix; in yealink_do_idle_tasks()
388 if (len > sizeof(yld->ctl_data->data)) in yealink_do_idle_tasks()
389 len = sizeof(yld->ctl_data->data); in yealink_do_idle_tasks()
393 yld->ctl_data->cmd = CMD_LCD; in yealink_do_idle_tasks()
394 yld->ctl_data->offset = cpu_to_be16(ix); in yealink_do_idle_tasks()
395 yld->ctl_data->size = len; in yealink_do_idle_tasks()
396 yld->ctl_data->sum = -CMD_LCD - ix - val - len; in yealink_do_idle_tasks()
399 val = yld->master.b[ix]; in yealink_do_idle_tasks()
400 yld->copy.b[ix] = val; in yealink_do_idle_tasks()
401 yld->ctl_data->data[i] = val; in yealink_do_idle_tasks()
402 yld->ctl_data->sum -= val; in yealink_do_idle_tasks()
405 yld->stat_ix = ix + 1; in yealink_do_idle_tasks()
425 struct yealink_dev *yld = urb->context; in urb_irq_callback() local
429 dev_err(&yld->intf->dev, "%s - urb status %d\n", in urb_irq_callback()
432 switch (yld->irq_data->cmd) { in urb_irq_callback()
435 yld->master.s.keynum = yld->irq_data->data[0]; in urb_irq_callback()
439 dev_dbg(&yld->intf->dev, "get scancode %x\n", in urb_irq_callback()
440 yld->irq_data->data[0]); in urb_irq_callback()
442 report_key(yld, map_p1k_to_key(yld->irq_data->data[0])); in urb_irq_callback()
446 dev_err(&yld->intf->dev, "unexpected response %x\n", in urb_irq_callback()
447 yld->irq_data->cmd); in urb_irq_callback()
450 yealink_do_idle_tasks(yld); in urb_irq_callback()
452 if (!yld->shutdown) { in urb_irq_callback()
453 ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); in urb_irq_callback()
455 dev_err(&yld->intf->dev, in urb_irq_callback()
463 struct yealink_dev *yld = urb->context; in urb_ctl_callback() local
467 dev_err(&yld->intf->dev, "%s - urb status %d\n", in urb_ctl_callback()
470 switch (yld->ctl_data->cmd) { in urb_ctl_callback()
474 if (!yld->shutdown) in urb_ctl_callback()
475 ret = usb_submit_urb(yld->urb_irq, GFP_ATOMIC); in urb_ctl_callback()
479 yealink_do_idle_tasks(yld); in urb_ctl_callback()
480 if (!yld->shutdown) in urb_ctl_callback()
481 ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); in urb_ctl_callback()
486 dev_err(&yld->intf->dev, "%s - usb_submit_urb failed %d\n", in urb_ctl_callback()
516 struct yealink_dev *yld = input_get_drvdata(dev); in input_open() local
519 dev_dbg(&yld->intf->dev, "%s\n", __func__); in input_open()
522 for (i = 0; i<sizeof(yld->master); i++) in input_open()
523 yld->copy.b[i] = ~yld->master.b[i]; in input_open()
524 yld->key_code = -1; /* no keys pressed */ in input_open()
526 yealink_set_ringtone(yld, default_ringtone, sizeof(default_ringtone)); in input_open()
529 memset(yld->ctl_data, 0, sizeof(*(yld->ctl_data))); in input_open()
530 yld->ctl_data->cmd = CMD_INIT; in input_open()
531 yld->ctl_data->size = 10; in input_open()
532 yld->ctl_data->sum = 0x100-CMD_INIT-10; in input_open()
533 if ((ret = usb_submit_urb(yld->urb_ctl, GFP_KERNEL)) != 0) { in input_open()
534 dev_dbg(&yld->intf->dev, in input_open()
544 struct yealink_dev *yld = input_get_drvdata(dev); in input_close() local
546 yld->shutdown = 1; in input_close()
553 usb_kill_urb(yld->urb_ctl); in input_close()
554 usb_kill_urb(yld->urb_irq); in input_close()
556 yld->shutdown = 0; in input_close()
596 struct yealink_dev *yld; in show_line() local
600 yld = dev_get_drvdata(dev); in show_line()
601 if (yld == NULL) { in show_line()
610 *buf++ = yld->lcdMap[i]; in show_line()
646 struct yealink_dev *yld; in store_line() local
650 yld = dev_get_drvdata(dev); in store_line()
651 if (yld == NULL) { in store_line()
659 setChar(yld, el++, buf[i]); in store_line()
691 struct yealink_dev *yld; in get_icons() local
695 yld = dev_get_drvdata(dev); in get_icons()
696 if (yld == NULL) { in get_icons()
705 yld->lcdMap[i] == ' ' ? " " : "on", in get_icons()
716 struct yealink_dev *yld; in set_icon() local
720 yld = dev_get_drvdata(dev); in set_icon()
721 if (yld == NULL) { in set_icon()
730 setChar(yld, i, chr); in set_icon()
759 struct yealink_dev *yld; in store_ringtone() local
762 yld = dev_get_drvdata(dev); in store_ringtone()
763 if (yld == NULL) { in store_ringtone()
769 yealink_set_ringtone(yld, (char *)buf, count); in store_ringtone()
829 static int usb_cleanup(struct yealink_dev *yld, int err) in usb_cleanup() argument
831 if (yld == NULL) in usb_cleanup()
834 if (yld->idev) { in usb_cleanup()
836 input_free_device(yld->idev); in usb_cleanup()
838 input_unregister_device(yld->idev); in usb_cleanup()
841 usb_free_urb(yld->urb_irq); in usb_cleanup()
842 usb_free_urb(yld->urb_ctl); in usb_cleanup()
844 kfree(yld->ctl_req); in usb_cleanup()
845 usb_free_coherent(yld->udev, USB_PKT_LEN, yld->ctl_data, yld->ctl_dma); in usb_cleanup()
846 usb_free_coherent(yld->udev, USB_PKT_LEN, yld->irq_data, yld->irq_dma); in usb_cleanup()
848 kfree(yld); in usb_cleanup()
854 struct yealink_dev *yld; in usb_disconnect() local
857 yld = usb_get_intfdata(intf); in usb_disconnect()
862 usb_cleanup(yld, 0); in usb_disconnect()
871 struct yealink_dev *yld; in usb_probe() local
884 yld = kzalloc(sizeof(struct yealink_dev), GFP_KERNEL); in usb_probe()
885 if (!yld) in usb_probe()
888 yld->udev = udev; in usb_probe()
889 yld->intf = intf; in usb_probe()
891 yld->idev = input_dev = input_allocate_device(); in usb_probe()
893 return usb_cleanup(yld, -ENOMEM); in usb_probe()
896 yld->irq_data = usb_alloc_coherent(udev, USB_PKT_LEN, in usb_probe()
897 GFP_KERNEL, &yld->irq_dma); in usb_probe()
898 if (yld->irq_data == NULL) in usb_probe()
899 return usb_cleanup(yld, -ENOMEM); in usb_probe()
901 yld->ctl_data = usb_alloc_coherent(udev, USB_PKT_LEN, in usb_probe()
902 GFP_KERNEL, &yld->ctl_dma); in usb_probe()
903 if (!yld->ctl_data) in usb_probe()
904 return usb_cleanup(yld, -ENOMEM); in usb_probe()
906 yld->ctl_req = kmalloc(sizeof(*(yld->ctl_req)), GFP_KERNEL); in usb_probe()
907 if (yld->ctl_req == NULL) in usb_probe()
908 return usb_cleanup(yld, -ENOMEM); in usb_probe()
911 yld->urb_irq = usb_alloc_urb(0, GFP_KERNEL); in usb_probe()
912 if (yld->urb_irq == NULL) in usb_probe()
913 return usb_cleanup(yld, -ENOMEM); in usb_probe()
915 yld->urb_ctl = usb_alloc_urb(0, GFP_KERNEL); in usb_probe()
916 if (yld->urb_ctl == NULL) in usb_probe()
917 return usb_cleanup(yld, -ENOMEM); in usb_probe()
927 usb_fill_int_urb(yld->urb_irq, udev, pipe, yld->irq_data, in usb_probe()
930 yld, endpoint->bInterval); in usb_probe()
931 yld->urb_irq->transfer_dma = yld->irq_dma; in usb_probe()
932 yld->urb_irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_probe()
933 yld->urb_irq->dev = udev; in usb_probe()
936 yld->ctl_req->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | in usb_probe()
938 yld->ctl_req->bRequest = USB_REQ_SET_CONFIGURATION; in usb_probe()
939 yld->ctl_req->wValue = cpu_to_le16(0x200); in usb_probe()
940 yld->ctl_req->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber); in usb_probe()
941 yld->ctl_req->wLength = cpu_to_le16(USB_PKT_LEN); in usb_probe()
943 usb_fill_control_urb(yld->urb_ctl, udev, usb_sndctrlpipe(udev, 0), in usb_probe()
944 (void *)yld->ctl_req, yld->ctl_data, USB_PKT_LEN, in usb_probe()
945 urb_ctl_callback, yld); in usb_probe()
946 yld->urb_ctl->transfer_dma = yld->ctl_dma; in usb_probe()
947 yld->urb_ctl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_probe()
948 yld->urb_ctl->dev = udev; in usb_probe()
951 usb_make_path(udev, yld->phys, sizeof(yld->phys)); in usb_probe()
952 strlcat(yld->phys, "/input0", sizeof(yld->phys)); in usb_probe()
956 input_dev->phys = yld->phys; in usb_probe()
960 input_set_drvdata(input_dev, yld); in usb_probe()
977 ret = input_register_device(yld->idev); in usb_probe()
979 return usb_cleanup(yld, ret); in usb_probe()
981 usb_set_intfdata(intf, yld); in usb_probe()
985 setChar(yld, i, ' '); in usb_probe()