Lines Matching refs:ati_remote

232 struct ati_remote {  struct
324 static int ati_remote_open(struct ati_remote *ati_remote) in ati_remote_open() argument
328 mutex_lock(&ati_remote->open_mutex); in ati_remote_open()
330 if (ati_remote->users++ != 0) in ati_remote_open()
334 ati_remote->irq_urb->dev = ati_remote->udev; in ati_remote_open()
335 if (usb_submit_urb(ati_remote->irq_urb, GFP_KERNEL)) { in ati_remote_open()
336 dev_err(&ati_remote->interface->dev, in ati_remote_open()
341 out: mutex_unlock(&ati_remote->open_mutex); in ati_remote_open()
348 static void ati_remote_close(struct ati_remote *ati_remote) in ati_remote_close() argument
350 mutex_lock(&ati_remote->open_mutex); in ati_remote_close()
351 if (--ati_remote->users == 0) in ati_remote_close()
352 usb_kill_urb(ati_remote->irq_urb); in ati_remote_close()
353 mutex_unlock(&ati_remote->open_mutex); in ati_remote_close()
358 struct ati_remote *ati_remote = input_get_drvdata(inputdev); in ati_remote_input_open() local
359 return ati_remote_open(ati_remote); in ati_remote_input_open()
364 struct ati_remote *ati_remote = input_get_drvdata(inputdev); in ati_remote_input_close() local
365 ati_remote_close(ati_remote); in ati_remote_input_close()
370 struct ati_remote *ati_remote = rdev->priv; in ati_remote_rc_open() local
371 return ati_remote_open(ati_remote); in ati_remote_rc_open()
376 struct ati_remote *ati_remote = rdev->priv; in ati_remote_rc_close() local
377 ati_remote_close(ati_remote); in ati_remote_rc_close()
385 struct ati_remote *ati_remote = urb->context; in ati_remote_irq_out() local
388 dev_dbg(&ati_remote->interface->dev, "%s: status %d\n", in ati_remote_irq_out()
393 ati_remote->send_flags |= SEND_FLAG_COMPLETE; in ati_remote_irq_out()
395 wake_up(&ati_remote->wait); in ati_remote_irq_out()
403 static int ati_remote_sendpacket(struct ati_remote *ati_remote, u16 cmd, in ati_remote_sendpacket() argument
409 memcpy(ati_remote->out_urb->transfer_buffer + 1, data, LO(cmd)); in ati_remote_sendpacket()
410 ((char *) ati_remote->out_urb->transfer_buffer)[0] = HI(cmd); in ati_remote_sendpacket()
412 ati_remote->out_urb->transfer_buffer_length = LO(cmd) + 1; in ati_remote_sendpacket()
413 ati_remote->out_urb->dev = ati_remote->udev; in ati_remote_sendpacket()
414 ati_remote->send_flags = SEND_FLAG_IN_PROGRESS; in ati_remote_sendpacket()
416 retval = usb_submit_urb(ati_remote->out_urb, GFP_ATOMIC); in ati_remote_sendpacket()
418 dev_dbg(&ati_remote->interface->dev, in ati_remote_sendpacket()
423 wait_event_timeout(ati_remote->wait, in ati_remote_sendpacket()
424 ((ati_remote->out_urb->status != -EINPROGRESS) || in ati_remote_sendpacket()
425 (ati_remote->send_flags & SEND_FLAG_COMPLETE)), in ati_remote_sendpacket()
427 usb_kill_urb(ati_remote->out_urb); in ati_remote_sendpacket()
456 static int ati_remote_compute_accel(struct ati_remote *ati_remote) in ati_remote_compute_accel() argument
463 if (time_after(now, ati_remote->old_jiffies + reset_time)) { in ati_remote_compute_accel()
464 ati_remote->acc_jiffies = now; in ati_remote_compute_accel()
470 if (time_before(now, ati_remote->acc_jiffies + timeout)) in ati_remote_compute_accel()
481 struct ati_remote *ati_remote = urb->context; in ati_remote_input_report() local
482 unsigned char *data= ati_remote->inbuf; in ati_remote_input_report()
483 struct input_dev *dev = ati_remote->idev; in ati_remote_input_report()
506 dbginfo(&ati_remote->interface->dev, in ati_remote_input_report()
515 dbginfo(&ati_remote->interface->dev, in ati_remote_input_report()
527 dbginfo(&ati_remote->interface->dev, in ati_remote_input_report()
538 wheel_keycode = rc_g_keycode_from_table(ati_remote->rdev, in ati_remote_input_report()
564 ati_remote->old_jiffies = jiffies; in ati_remote_input_report()
570 if (ati_remote->old_data == data[2] && in ati_remote_input_report()
571 time_before(now, ati_remote->old_jiffies + in ati_remote_input_report()
573 ati_remote->repeat_count++; in ati_remote_input_report()
575 ati_remote->repeat_count = 0; in ati_remote_input_report()
576 ati_remote->first_jiffies = now; in ati_remote_input_report()
579 ati_remote->old_jiffies = now; in ati_remote_input_report()
585 if (ati_remote->repeat_count > 0 && in ati_remote_input_report()
586 (ati_remote->repeat_count < 5 || in ati_remote_input_report()
587 time_before(now, ati_remote->first_jiffies + in ati_remote_input_report()
615 rc_keydown_notimeout(ati_remote->rdev, in ati_remote_input_report()
618 rc_keyup(ati_remote->rdev); in ati_remote_input_report()
632 int acc = ati_remote_compute_accel(ati_remote); in ati_remote_input_report()
637 ati_remote->old_jiffies = jiffies; in ati_remote_input_report()
640 dev_dbg(&ati_remote->interface->dev, "ati_remote kind=%d\n", in ati_remote_input_report()
646 ati_remote->old_data = data[2]; in ati_remote_input_report()
654 struct ati_remote *ati_remote = urb->context; in ati_remote_irq_in() local
664 dev_dbg(&ati_remote->interface->dev, in ati_remote_irq_in()
669 dev_dbg(&ati_remote->interface->dev, in ati_remote_irq_in()
676 dev_err(&ati_remote->interface->dev, in ati_remote_irq_in()
685 struct ati_remote *ati_remote) in ati_remote_alloc_buffers() argument
687 ati_remote->inbuf = usb_alloc_coherent(udev, DATA_BUFSIZE, GFP_ATOMIC, in ati_remote_alloc_buffers()
688 &ati_remote->inbuf_dma); in ati_remote_alloc_buffers()
689 if (!ati_remote->inbuf) in ati_remote_alloc_buffers()
692 ati_remote->outbuf = usb_alloc_coherent(udev, DATA_BUFSIZE, GFP_ATOMIC, in ati_remote_alloc_buffers()
693 &ati_remote->outbuf_dma); in ati_remote_alloc_buffers()
694 if (!ati_remote->outbuf) in ati_remote_alloc_buffers()
697 ati_remote->irq_urb = usb_alloc_urb(0, GFP_KERNEL); in ati_remote_alloc_buffers()
698 if (!ati_remote->irq_urb) in ati_remote_alloc_buffers()
701 ati_remote->out_urb = usb_alloc_urb(0, GFP_KERNEL); in ati_remote_alloc_buffers()
702 if (!ati_remote->out_urb) in ati_remote_alloc_buffers()
711 static void ati_remote_free_buffers(struct ati_remote *ati_remote) in ati_remote_free_buffers() argument
713 usb_free_urb(ati_remote->irq_urb); in ati_remote_free_buffers()
714 usb_free_urb(ati_remote->out_urb); in ati_remote_free_buffers()
716 usb_free_coherent(ati_remote->udev, DATA_BUFSIZE, in ati_remote_free_buffers()
717 ati_remote->inbuf, ati_remote->inbuf_dma); in ati_remote_free_buffers()
719 usb_free_coherent(ati_remote->udev, DATA_BUFSIZE, in ati_remote_free_buffers()
720 ati_remote->outbuf, ati_remote->outbuf_dma); in ati_remote_free_buffers()
723 static void ati_remote_input_init(struct ati_remote *ati_remote) in ati_remote_input_init() argument
725 struct input_dev *idev = ati_remote->idev; in ati_remote_input_init()
737 input_set_drvdata(idev, ati_remote); in ati_remote_input_init()
742 idev->name = ati_remote->mouse_name; in ati_remote_input_init()
743 idev->phys = ati_remote->mouse_phys; in ati_remote_input_init()
745 usb_to_input_id(ati_remote->udev, &idev->id); in ati_remote_input_init()
746 idev->dev.parent = &ati_remote->interface->dev; in ati_remote_input_init()
749 static void ati_remote_rc_init(struct ati_remote *ati_remote) in ati_remote_rc_init() argument
751 struct rc_dev *rdev = ati_remote->rdev; in ati_remote_rc_init()
753 rdev->priv = ati_remote; in ati_remote_rc_init()
760 rdev->device_name = ati_remote->rc_name; in ati_remote_rc_init()
761 rdev->input_phys = ati_remote->rc_phys; in ati_remote_rc_init()
763 usb_to_input_id(ati_remote->udev, &rdev->input_id); in ati_remote_rc_init()
764 rdev->dev.parent = &ati_remote->interface->dev; in ati_remote_rc_init()
767 static int ati_remote_initialize(struct ati_remote *ati_remote) in ati_remote_initialize() argument
769 struct usb_device *udev = ati_remote->udev; in ati_remote_initialize()
772 init_waitqueue_head(&ati_remote->wait); in ati_remote_initialize()
775 pipe = usb_rcvintpipe(udev, ati_remote->endpoint_in->bEndpointAddress); in ati_remote_initialize()
779 usb_fill_int_urb(ati_remote->irq_urb, udev, pipe, ati_remote->inbuf, in ati_remote_initialize()
780 maxp, ati_remote_irq_in, ati_remote, in ati_remote_initialize()
781 ati_remote->endpoint_in->bInterval); in ati_remote_initialize()
782 ati_remote->irq_urb->transfer_dma = ati_remote->inbuf_dma; in ati_remote_initialize()
783 ati_remote->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in ati_remote_initialize()
786 pipe = usb_sndintpipe(udev, ati_remote->endpoint_out->bEndpointAddress); in ati_remote_initialize()
790 usb_fill_int_urb(ati_remote->out_urb, udev, pipe, ati_remote->outbuf, in ati_remote_initialize()
791 maxp, ati_remote_irq_out, ati_remote, in ati_remote_initialize()
792 ati_remote->endpoint_out->bInterval); in ati_remote_initialize()
793 ati_remote->out_urb->transfer_dma = ati_remote->outbuf_dma; in ati_remote_initialize()
794 ati_remote->out_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in ati_remote_initialize()
797 if ((ati_remote_sendpacket(ati_remote, 0x8004, init1)) || in ati_remote_initialize()
798 (ati_remote_sendpacket(ati_remote, 0x8007, init2))) { in ati_remote_initialize()
799 dev_err(&ati_remote->interface->dev, in ati_remote_initialize()
817 struct ati_remote *ati_remote; in ati_remote_probe() local
843 ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL); in ati_remote_probe()
845 if (!ati_remote || !rc_dev) in ati_remote_probe()
849 if (ati_remote_alloc_buffers(udev, ati_remote)) in ati_remote_probe()
852 ati_remote->endpoint_in = endpoint_in; in ati_remote_probe()
853 ati_remote->endpoint_out = endpoint_out; in ati_remote_probe()
854 ati_remote->udev = udev; in ati_remote_probe()
855 ati_remote->rdev = rc_dev; in ati_remote_probe()
856 ati_remote->interface = interface; in ati_remote_probe()
858 usb_make_path(udev, ati_remote->rc_phys, sizeof(ati_remote->rc_phys)); in ati_remote_probe()
859 strscpy(ati_remote->mouse_phys, ati_remote->rc_phys, in ati_remote_probe()
860 sizeof(ati_remote->mouse_phys)); in ati_remote_probe()
862 strlcat(ati_remote->rc_phys, "/input0", sizeof(ati_remote->rc_phys)); in ati_remote_probe()
863 strlcat(ati_remote->mouse_phys, "/input1", sizeof(ati_remote->mouse_phys)); in ati_remote_probe()
865 snprintf(ati_remote->rc_name, sizeof(ati_remote->rc_name), "%s%s%s", in ati_remote_probe()
870 if (!strlen(ati_remote->rc_name)) in ati_remote_probe()
871 snprintf(ati_remote->rc_name, sizeof(ati_remote->rc_name), in ati_remote_probe()
873 le16_to_cpu(ati_remote->udev->descriptor.idVendor), in ati_remote_probe()
874 le16_to_cpu(ati_remote->udev->descriptor.idProduct)); in ati_remote_probe()
876 snprintf(ati_remote->mouse_name, sizeof(ati_remote->mouse_name), in ati_remote_probe()
877 "%s mouse", ati_remote->rc_name); in ati_remote_probe()
889 ati_remote_rc_init(ati_remote); in ati_remote_probe()
890 mutex_init(&ati_remote->open_mutex); in ati_remote_probe()
893 err = ati_remote_initialize(ati_remote); in ati_remote_probe()
898 err = rc_register_device(ati_remote->rdev); in ati_remote_probe()
910 ati_remote->idev = input_dev; in ati_remote_probe()
911 ati_remote_input_init(ati_remote); in ati_remote_probe()
918 usb_set_intfdata(interface, ati_remote); in ati_remote_probe()
927 usb_kill_urb(ati_remote->irq_urb); in ati_remote_probe()
928 usb_kill_urb(ati_remote->out_urb); in ati_remote_probe()
930 ati_remote_free_buffers(ati_remote); in ati_remote_probe()
933 kfree(ati_remote); in ati_remote_probe()
942 struct ati_remote *ati_remote; in ati_remote_disconnect() local
944 ati_remote = usb_get_intfdata(interface); in ati_remote_disconnect()
946 if (!ati_remote) { in ati_remote_disconnect()
951 usb_kill_urb(ati_remote->irq_urb); in ati_remote_disconnect()
952 usb_kill_urb(ati_remote->out_urb); in ati_remote_disconnect()
953 if (ati_remote->idev) in ati_remote_disconnect()
954 input_unregister_device(ati_remote->idev); in ati_remote_disconnect()
955 rc_unregister_device(ati_remote->rdev); in ati_remote_disconnect()
956 ati_remote_free_buffers(ati_remote); in ati_remote_disconnect()
957 kfree(ati_remote); in ati_remote_disconnect()