Lines Matching refs:yld
144 static int setChar(struct yealink_dev *yld, int el, int chr) in setChar() argument
154 yld->lcdMap[el] = chr; in setChar()
160 yld->master.b[a] |= m; in setChar()
162 yld->master.b[a] &= ~m; in setChar()
175 yld->master.b[a] |= m; in setChar()
177 yld->master.b[a] &= ~m; in setChar()
237 static void report_key(struct yealink_dev *yld, int key) in report_key() argument
239 struct input_dev *idev = yld->idev; in report_key()
241 if (yld->key_code >= 0) { in report_key()
243 input_report_key(idev, yld->key_code & 0xff, 0); in report_key()
244 if (yld->key_code >> 8) in report_key()
245 input_report_key(idev, yld->key_code >> 8, 0); in report_key()
248 yld->key_code = key; in report_key()
262 static int yealink_cmd(struct yealink_dev *yld, struct yld_ctl_packet *p) in yealink_cmd() argument
271 return usb_control_msg(yld->udev, in yealink_cmd()
272 usb_sndctrlpipe(yld->udev, 0), in yealink_cmd()
294 static int yealink_set_ringtone(struct yealink_dev *yld, u8 *buf, size_t size) in yealink_set_ringtone() argument
296 struct yld_ctl_packet *p = yld->ctl_data; in yealink_set_ringtone()
303 memset(yld->ctl_data, 0, sizeof(*(yld->ctl_data))); in yealink_set_ringtone()
304 yld->ctl_data->cmd = CMD_RING_VOLUME; in yealink_set_ringtone()
305 yld->ctl_data->size = 1; in yealink_set_ringtone()
306 yld->ctl_data->data[0] = buf[0]; in yealink_set_ringtone()
307 yealink_cmd(yld, p); in yealink_set_ringtone()
321 yealink_cmd(yld, p); in yealink_set_ringtone()
329 static int yealink_do_idle_tasks(struct yealink_dev *yld) in yealink_do_idle_tasks() argument
334 ix = yld->stat_ix; in yealink_do_idle_tasks()
336 memset(yld->ctl_data, 0, sizeof(*(yld->ctl_data))); in yealink_do_idle_tasks()
337 yld->ctl_data->cmd = CMD_KEYPRESS; in yealink_do_idle_tasks()
338 yld->ctl_data->size = 1; in yealink_do_idle_tasks()
339 yld->ctl_data->sum = 0xff - CMD_KEYPRESS; in yealink_do_idle_tasks()
342 if (ix >= sizeof(yld->master)) { in yealink_do_idle_tasks()
343 yld->stat_ix = 0; in yealink_do_idle_tasks()
349 val = yld->master.b[ix]; in yealink_do_idle_tasks()
350 if (val != yld->copy.b[ix]) in yealink_do_idle_tasks()
352 } while (++ix < sizeof(yld->master)); in yealink_do_idle_tasks()
355 yld->stat_ix = 0; in yealink_do_idle_tasks()
364 yld->copy.b[ix] = val; in yealink_do_idle_tasks()
365 yld->ctl_data->data[0] = val; in yealink_do_idle_tasks()
369 yld->ctl_data->cmd = CMD_LED; in yealink_do_idle_tasks()
370 yld->ctl_data->sum = -1 - CMD_LED - val; in yealink_do_idle_tasks()
373 yld->ctl_data->cmd = CMD_DIALTONE; in yealink_do_idle_tasks()
374 yld->ctl_data->sum = -1 - CMD_DIALTONE - val; in yealink_do_idle_tasks()
377 yld->ctl_data->cmd = CMD_RINGTONE; in yealink_do_idle_tasks()
378 yld->ctl_data->sum = -1 - CMD_RINGTONE - val; in yealink_do_idle_tasks()
383 yld->ctl_data->cmd = CMD_SCANCODE; in yealink_do_idle_tasks()
384 yld->ctl_data->offset = cpu_to_be16(val); in yealink_do_idle_tasks()
385 yld->ctl_data->data[0] = 0; in yealink_do_idle_tasks()
386 yld->ctl_data->sum = -1 - CMD_SCANCODE - val; in yealink_do_idle_tasks()
389 len = sizeof(yld->master.s.lcd) - ix; in yealink_do_idle_tasks()
390 if (len > sizeof(yld->ctl_data->data)) in yealink_do_idle_tasks()
391 len = sizeof(yld->ctl_data->data); in yealink_do_idle_tasks()
395 yld->ctl_data->cmd = CMD_LCD; in yealink_do_idle_tasks()
396 yld->ctl_data->offset = cpu_to_be16(ix); in yealink_do_idle_tasks()
397 yld->ctl_data->size = len; in yealink_do_idle_tasks()
398 yld->ctl_data->sum = -CMD_LCD - ix - val - len; in yealink_do_idle_tasks()
401 val = yld->master.b[ix]; in yealink_do_idle_tasks()
402 yld->copy.b[ix] = val; in yealink_do_idle_tasks()
403 yld->ctl_data->data[i] = val; in yealink_do_idle_tasks()
404 yld->ctl_data->sum -= val; in yealink_do_idle_tasks()
407 yld->stat_ix = ix + 1; in yealink_do_idle_tasks()
427 struct yealink_dev *yld = urb->context; in urb_irq_callback() local
431 dev_err(&yld->intf->dev, "%s - urb status %d\n", in urb_irq_callback()
434 switch (yld->irq_data->cmd) { in urb_irq_callback()
437 yld->master.s.keynum = yld->irq_data->data[0]; in urb_irq_callback()
441 dev_dbg(&yld->intf->dev, "get scancode %x\n", in urb_irq_callback()
442 yld->irq_data->data[0]); in urb_irq_callback()
444 report_key(yld, map_p1k_to_key(yld->irq_data->data[0])); in urb_irq_callback()
448 dev_err(&yld->intf->dev, "unexpected response %x\n", in urb_irq_callback()
449 yld->irq_data->cmd); in urb_irq_callback()
452 yealink_do_idle_tasks(yld); in urb_irq_callback()
454 if (!yld->shutdown) { in urb_irq_callback()
455 ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); in urb_irq_callback()
457 dev_err(&yld->intf->dev, in urb_irq_callback()
465 struct yealink_dev *yld = urb->context; in urb_ctl_callback() local
469 dev_err(&yld->intf->dev, "%s - urb status %d\n", in urb_ctl_callback()
472 switch (yld->ctl_data->cmd) { in urb_ctl_callback()
476 if (!yld->shutdown) in urb_ctl_callback()
477 ret = usb_submit_urb(yld->urb_irq, GFP_ATOMIC); in urb_ctl_callback()
481 yealink_do_idle_tasks(yld); in urb_ctl_callback()
482 if (!yld->shutdown) in urb_ctl_callback()
483 ret = usb_submit_urb(yld->urb_ctl, GFP_ATOMIC); in urb_ctl_callback()
488 dev_err(&yld->intf->dev, "%s - usb_submit_urb failed %d\n", in urb_ctl_callback()
518 struct yealink_dev *yld = input_get_drvdata(dev); in input_open() local
521 dev_dbg(&yld->intf->dev, "%s\n", __func__); in input_open()
524 for (i = 0; i<sizeof(yld->master); i++) in input_open()
525 yld->copy.b[i] = ~yld->master.b[i]; in input_open()
526 yld->key_code = -1; /* no keys pressed */ in input_open()
528 yealink_set_ringtone(yld, default_ringtone, sizeof(default_ringtone)); in input_open()
531 memset(yld->ctl_data, 0, sizeof(*(yld->ctl_data))); in input_open()
532 yld->ctl_data->cmd = CMD_INIT; in input_open()
533 yld->ctl_data->size = 10; in input_open()
534 yld->ctl_data->sum = 0x100-CMD_INIT-10; in input_open()
535 if ((ret = usb_submit_urb(yld->urb_ctl, GFP_KERNEL)) != 0) { in input_open()
536 dev_dbg(&yld->intf->dev, in input_open()
546 struct yealink_dev *yld = input_get_drvdata(dev); in input_close() local
548 yld->shutdown = 1; in input_close()
555 usb_kill_urb(yld->urb_ctl); in input_close()
556 usb_kill_urb(yld->urb_irq); in input_close()
558 yld->shutdown = 0; in input_close()
598 struct yealink_dev *yld; in show_line() local
602 yld = dev_get_drvdata(dev); in show_line()
603 if (yld == NULL) { in show_line()
612 *buf++ = yld->lcdMap[i]; in show_line()
648 struct yealink_dev *yld; in store_line() local
652 yld = dev_get_drvdata(dev); in store_line()
653 if (yld == NULL) { in store_line()
661 setChar(yld, el++, buf[i]); in store_line()
693 struct yealink_dev *yld; in get_icons() local
697 yld = dev_get_drvdata(dev); in get_icons()
698 if (yld == NULL) { in get_icons()
707 yld->lcdMap[i] == ' ' ? " " : "on", in get_icons()
718 struct yealink_dev *yld; in set_icon() local
722 yld = dev_get_drvdata(dev); in set_icon()
723 if (yld == NULL) { in set_icon()
732 setChar(yld, i, chr); in set_icon()
761 struct yealink_dev *yld; in store_ringtone() local
764 yld = dev_get_drvdata(dev); in store_ringtone()
765 if (yld == NULL) { in store_ringtone()
771 yealink_set_ringtone(yld, (char *)buf, count); in store_ringtone()
831 static int usb_cleanup(struct yealink_dev *yld, int err) in usb_cleanup() argument
833 if (yld == NULL) in usb_cleanup()
836 if (yld->idev) { in usb_cleanup()
838 input_free_device(yld->idev); in usb_cleanup()
840 input_unregister_device(yld->idev); in usb_cleanup()
843 usb_free_urb(yld->urb_irq); in usb_cleanup()
844 usb_free_urb(yld->urb_ctl); in usb_cleanup()
846 kfree(yld->ctl_req); in usb_cleanup()
847 usb_free_coherent(yld->udev, USB_PKT_LEN, yld->ctl_data, yld->ctl_dma); in usb_cleanup()
848 usb_free_coherent(yld->udev, USB_PKT_LEN, yld->irq_data, yld->irq_dma); in usb_cleanup()
850 kfree(yld); in usb_cleanup()
856 struct yealink_dev *yld; in usb_disconnect() local
859 yld = usb_get_intfdata(intf); in usb_disconnect()
864 usb_cleanup(yld, 0); in usb_disconnect()
873 struct yealink_dev *yld; in usb_probe() local
882 yld = kzalloc(sizeof(struct yealink_dev), GFP_KERNEL); in usb_probe()
883 if (!yld) in usb_probe()
886 yld->udev = udev; in usb_probe()
887 yld->intf = intf; in usb_probe()
889 yld->idev = input_dev = input_allocate_device(); in usb_probe()
891 return usb_cleanup(yld, -ENOMEM); in usb_probe()
894 yld->irq_data = usb_alloc_coherent(udev, USB_PKT_LEN, in usb_probe()
895 GFP_ATOMIC, &yld->irq_dma); in usb_probe()
896 if (yld->irq_data == NULL) in usb_probe()
897 return usb_cleanup(yld, -ENOMEM); in usb_probe()
899 yld->ctl_data = usb_alloc_coherent(udev, USB_PKT_LEN, in usb_probe()
900 GFP_ATOMIC, &yld->ctl_dma); in usb_probe()
901 if (!yld->ctl_data) in usb_probe()
902 return usb_cleanup(yld, -ENOMEM); in usb_probe()
904 yld->ctl_req = kmalloc(sizeof(*(yld->ctl_req)), GFP_KERNEL); in usb_probe()
905 if (yld->ctl_req == NULL) in usb_probe()
906 return usb_cleanup(yld, -ENOMEM); in usb_probe()
909 yld->urb_irq = usb_alloc_urb(0, GFP_KERNEL); in usb_probe()
910 if (yld->urb_irq == NULL) in usb_probe()
911 return usb_cleanup(yld, -ENOMEM); in usb_probe()
913 yld->urb_ctl = usb_alloc_urb(0, GFP_KERNEL); in usb_probe()
914 if (yld->urb_ctl == NULL) in usb_probe()
915 return usb_cleanup(yld, -ENOMEM); in usb_probe()
925 usb_fill_int_urb(yld->urb_irq, udev, pipe, yld->irq_data, in usb_probe()
928 yld, endpoint->bInterval); in usb_probe()
929 yld->urb_irq->transfer_dma = yld->irq_dma; in usb_probe()
930 yld->urb_irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_probe()
931 yld->urb_irq->dev = udev; in usb_probe()
934 yld->ctl_req->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | in usb_probe()
936 yld->ctl_req->bRequest = USB_REQ_SET_CONFIGURATION; in usb_probe()
937 yld->ctl_req->wValue = cpu_to_le16(0x200); in usb_probe()
938 yld->ctl_req->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber); in usb_probe()
939 yld->ctl_req->wLength = cpu_to_le16(USB_PKT_LEN); in usb_probe()
941 usb_fill_control_urb(yld->urb_ctl, udev, usb_sndctrlpipe(udev, 0), in usb_probe()
942 (void *)yld->ctl_req, yld->ctl_data, USB_PKT_LEN, in usb_probe()
943 urb_ctl_callback, yld); in usb_probe()
944 yld->urb_ctl->transfer_dma = yld->ctl_dma; in usb_probe()
945 yld->urb_ctl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_probe()
946 yld->urb_ctl->dev = udev; in usb_probe()
949 usb_make_path(udev, yld->phys, sizeof(yld->phys)); in usb_probe()
950 strlcat(yld->phys, "/input0", sizeof(yld->phys)); in usb_probe()
954 input_dev->phys = yld->phys; in usb_probe()
958 input_set_drvdata(input_dev, yld); in usb_probe()
975 ret = input_register_device(yld->idev); in usb_probe()
977 return usb_cleanup(yld, ret); in usb_probe()
979 usb_set_intfdata(intf, yld); in usb_probe()
983 setChar(yld, i, ' '); in usb_probe()