Lines Matching refs:ati_remote

246 struct ati_remote {  struct
338 static int ati_remote_open(struct ati_remote *ati_remote) in ati_remote_open() argument
342 mutex_lock(&ati_remote->open_mutex); in ati_remote_open()
344 if (ati_remote->users++ != 0) in ati_remote_open()
348 ati_remote->irq_urb->dev = ati_remote->udev; in ati_remote_open()
349 if (usb_submit_urb(ati_remote->irq_urb, GFP_KERNEL)) { in ati_remote_open()
350 dev_err(&ati_remote->interface->dev, in ati_remote_open()
355 out: mutex_unlock(&ati_remote->open_mutex); in ati_remote_open()
362 static void ati_remote_close(struct ati_remote *ati_remote) in ati_remote_close() argument
364 mutex_lock(&ati_remote->open_mutex); in ati_remote_close()
365 if (--ati_remote->users == 0) in ati_remote_close()
366 usb_kill_urb(ati_remote->irq_urb); in ati_remote_close()
367 mutex_unlock(&ati_remote->open_mutex); in ati_remote_close()
372 struct ati_remote *ati_remote = input_get_drvdata(inputdev); in ati_remote_input_open() local
373 return ati_remote_open(ati_remote); in ati_remote_input_open()
378 struct ati_remote *ati_remote = input_get_drvdata(inputdev); in ati_remote_input_close() local
379 ati_remote_close(ati_remote); in ati_remote_input_close()
384 struct ati_remote *ati_remote = rdev->priv; in ati_remote_rc_open() local
385 return ati_remote_open(ati_remote); in ati_remote_rc_open()
390 struct ati_remote *ati_remote = rdev->priv; in ati_remote_rc_close() local
391 ati_remote_close(ati_remote); in ati_remote_rc_close()
399 struct ati_remote *ati_remote = urb->context; in ati_remote_irq_out() local
402 dev_dbg(&ati_remote->interface->dev, "%s: status %d\n", in ati_remote_irq_out()
407 ati_remote->send_flags |= SEND_FLAG_COMPLETE; in ati_remote_irq_out()
409 wake_up(&ati_remote->wait); in ati_remote_irq_out()
417 static int ati_remote_sendpacket(struct ati_remote *ati_remote, u16 cmd, in ati_remote_sendpacket() argument
423 memcpy(ati_remote->out_urb->transfer_buffer + 1, data, LO(cmd)); in ati_remote_sendpacket()
424 ((char *) ati_remote->out_urb->transfer_buffer)[0] = HI(cmd); in ati_remote_sendpacket()
426 ati_remote->out_urb->transfer_buffer_length = LO(cmd) + 1; in ati_remote_sendpacket()
427 ati_remote->out_urb->dev = ati_remote->udev; in ati_remote_sendpacket()
428 ati_remote->send_flags = SEND_FLAG_IN_PROGRESS; in ati_remote_sendpacket()
430 retval = usb_submit_urb(ati_remote->out_urb, GFP_ATOMIC); in ati_remote_sendpacket()
432 dev_dbg(&ati_remote->interface->dev, in ati_remote_sendpacket()
437 wait_event_timeout(ati_remote->wait, in ati_remote_sendpacket()
438 ((ati_remote->out_urb->status != -EINPROGRESS) || in ati_remote_sendpacket()
439 (ati_remote->send_flags & SEND_FLAG_COMPLETE)), in ati_remote_sendpacket()
441 usb_kill_urb(ati_remote->out_urb); in ati_remote_sendpacket()
455 static int ati_remote_compute_accel(struct ati_remote *ati_remote) in ati_remote_compute_accel() argument
461 if (time_after(now, ati_remote->old_jiffies + msecs_to_jiffies(250))) { in ati_remote_compute_accel()
463 ati_remote->acc_jiffies = now; in ati_remote_compute_accel()
465 else if (time_before(now, ati_remote->acc_jiffies + msecs_to_jiffies(125))) in ati_remote_compute_accel()
467 else if (time_before(now, ati_remote->acc_jiffies + msecs_to_jiffies(250))) in ati_remote_compute_accel()
469 else if (time_before(now, ati_remote->acc_jiffies + msecs_to_jiffies(500))) in ati_remote_compute_accel()
471 else if (time_before(now, ati_remote->acc_jiffies + msecs_to_jiffies(1000))) in ati_remote_compute_accel()
473 else if (time_before(now, ati_remote->acc_jiffies + msecs_to_jiffies(1500))) in ati_remote_compute_accel()
475 else if (time_before(now, ati_remote->acc_jiffies + msecs_to_jiffies(2000))) in ati_remote_compute_accel()
488 struct ati_remote *ati_remote = urb->context; in ati_remote_input_report() local
489 unsigned char *data= ati_remote->inbuf; in ati_remote_input_report()
490 struct input_dev *dev = ati_remote->idev; in ati_remote_input_report()
513 dbginfo(&ati_remote->interface->dev, in ati_remote_input_report()
522 dbginfo(&ati_remote->interface->dev, in ati_remote_input_report()
535 dbginfo(&ati_remote->interface->dev, in ati_remote_input_report()
546 wheel_keycode = rc_g_keycode_from_table(ati_remote->rdev, in ati_remote_input_report()
572 ati_remote->old_jiffies = jiffies; in ati_remote_input_report()
578 if (ati_remote->old_data == data[2] && in ati_remote_input_report()
579 time_before(now, ati_remote->old_jiffies + in ati_remote_input_report()
581 ati_remote->repeat_count++; in ati_remote_input_report()
583 ati_remote->repeat_count = 0; in ati_remote_input_report()
584 ati_remote->first_jiffies = now; in ati_remote_input_report()
587 ati_remote->old_jiffies = now; in ati_remote_input_report()
593 if (ati_remote->repeat_count > 0 && in ati_remote_input_report()
594 (ati_remote->repeat_count < 5 || in ati_remote_input_report()
595 time_before(now, ati_remote->first_jiffies + in ati_remote_input_report()
623 rc_keydown_notimeout(ati_remote->rdev, RC_TYPE_OTHER, in ati_remote_input_report()
625 rc_keyup(ati_remote->rdev); in ati_remote_input_report()
639 int acc = ati_remote_compute_accel(ati_remote); in ati_remote_input_report()
644 ati_remote->old_jiffies = jiffies; in ati_remote_input_report()
647 dev_dbg(&ati_remote->interface->dev, "ati_remote kind=%d\n", in ati_remote_input_report()
653 ati_remote->old_data = data[2]; in ati_remote_input_report()
661 struct ati_remote *ati_remote = urb->context; in ati_remote_irq_in() local
671 dev_dbg(&ati_remote->interface->dev, in ati_remote_irq_in()
676 dev_dbg(&ati_remote->interface->dev, in ati_remote_irq_in()
683 dev_err(&ati_remote->interface->dev, in ati_remote_irq_in()
692 struct ati_remote *ati_remote) in ati_remote_alloc_buffers() argument
694 ati_remote->inbuf = usb_alloc_coherent(udev, DATA_BUFSIZE, GFP_ATOMIC, in ati_remote_alloc_buffers()
695 &ati_remote->inbuf_dma); in ati_remote_alloc_buffers()
696 if (!ati_remote->inbuf) in ati_remote_alloc_buffers()
699 ati_remote->outbuf = usb_alloc_coherent(udev, DATA_BUFSIZE, GFP_ATOMIC, in ati_remote_alloc_buffers()
700 &ati_remote->outbuf_dma); in ati_remote_alloc_buffers()
701 if (!ati_remote->outbuf) in ati_remote_alloc_buffers()
704 ati_remote->irq_urb = usb_alloc_urb(0, GFP_KERNEL); in ati_remote_alloc_buffers()
705 if (!ati_remote->irq_urb) in ati_remote_alloc_buffers()
708 ati_remote->out_urb = usb_alloc_urb(0, GFP_KERNEL); in ati_remote_alloc_buffers()
709 if (!ati_remote->out_urb) in ati_remote_alloc_buffers()
718 static void ati_remote_free_buffers(struct ati_remote *ati_remote) in ati_remote_free_buffers() argument
720 usb_free_urb(ati_remote->irq_urb); in ati_remote_free_buffers()
721 usb_free_urb(ati_remote->out_urb); in ati_remote_free_buffers()
723 usb_free_coherent(ati_remote->udev, DATA_BUFSIZE, in ati_remote_free_buffers()
724 ati_remote->inbuf, ati_remote->inbuf_dma); in ati_remote_free_buffers()
726 usb_free_coherent(ati_remote->udev, DATA_BUFSIZE, in ati_remote_free_buffers()
727 ati_remote->outbuf, ati_remote->outbuf_dma); in ati_remote_free_buffers()
730 static void ati_remote_input_init(struct ati_remote *ati_remote) in ati_remote_input_init() argument
732 struct input_dev *idev = ati_remote->idev; in ati_remote_input_init()
744 input_set_drvdata(idev, ati_remote); in ati_remote_input_init()
749 idev->name = ati_remote->mouse_name; in ati_remote_input_init()
750 idev->phys = ati_remote->mouse_phys; in ati_remote_input_init()
752 usb_to_input_id(ati_remote->udev, &idev->id); in ati_remote_input_init()
753 idev->dev.parent = &ati_remote->interface->dev; in ati_remote_input_init()
756 static void ati_remote_rc_init(struct ati_remote *ati_remote) in ati_remote_rc_init() argument
758 struct rc_dev *rdev = ati_remote->rdev; in ati_remote_rc_init()
760 rdev->priv = ati_remote; in ati_remote_rc_init()
768 rdev->input_name = ati_remote->rc_name; in ati_remote_rc_init()
769 rdev->input_phys = ati_remote->rc_phys; in ati_remote_rc_init()
771 usb_to_input_id(ati_remote->udev, &rdev->input_id); in ati_remote_rc_init()
772 rdev->dev.parent = &ati_remote->interface->dev; in ati_remote_rc_init()
775 static int ati_remote_initialize(struct ati_remote *ati_remote) in ati_remote_initialize() argument
777 struct usb_device *udev = ati_remote->udev; in ati_remote_initialize()
780 init_waitqueue_head(&ati_remote->wait); in ati_remote_initialize()
783 pipe = usb_rcvintpipe(udev, ati_remote->endpoint_in->bEndpointAddress); in ati_remote_initialize()
787 usb_fill_int_urb(ati_remote->irq_urb, udev, pipe, ati_remote->inbuf, in ati_remote_initialize()
788 maxp, ati_remote_irq_in, ati_remote, in ati_remote_initialize()
789 ati_remote->endpoint_in->bInterval); in ati_remote_initialize()
790 ati_remote->irq_urb->transfer_dma = ati_remote->inbuf_dma; in ati_remote_initialize()
791 ati_remote->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in ati_remote_initialize()
794 pipe = usb_sndintpipe(udev, ati_remote->endpoint_out->bEndpointAddress); in ati_remote_initialize()
798 usb_fill_int_urb(ati_remote->out_urb, udev, pipe, ati_remote->outbuf, in ati_remote_initialize()
799 maxp, ati_remote_irq_out, ati_remote, in ati_remote_initialize()
800 ati_remote->endpoint_out->bInterval); in ati_remote_initialize()
801 ati_remote->out_urb->transfer_dma = ati_remote->outbuf_dma; in ati_remote_initialize()
802 ati_remote->out_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in ati_remote_initialize()
805 if ((ati_remote_sendpacket(ati_remote, 0x8004, init1)) || in ati_remote_initialize()
806 (ati_remote_sendpacket(ati_remote, 0x8007, init2))) { in ati_remote_initialize()
807 dev_err(&ati_remote->interface->dev, in ati_remote_initialize()
825 struct ati_remote *ati_remote; in ati_remote_probe() local
847 ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL); in ati_remote_probe()
849 if (!ati_remote || !rc_dev) in ati_remote_probe()
853 if (ati_remote_alloc_buffers(udev, ati_remote)) in ati_remote_probe()
856 ati_remote->endpoint_in = endpoint_in; in ati_remote_probe()
857 ati_remote->endpoint_out = endpoint_out; in ati_remote_probe()
858 ati_remote->udev = udev; in ati_remote_probe()
859 ati_remote->rdev = rc_dev; in ati_remote_probe()
860 ati_remote->interface = interface; in ati_remote_probe()
862 usb_make_path(udev, ati_remote->rc_phys, sizeof(ati_remote->rc_phys)); in ati_remote_probe()
863 strlcpy(ati_remote->mouse_phys, ati_remote->rc_phys, in ati_remote_probe()
864 sizeof(ati_remote->mouse_phys)); in ati_remote_probe()
866 strlcat(ati_remote->rc_phys, "/input0", sizeof(ati_remote->rc_phys)); in ati_remote_probe()
867 strlcat(ati_remote->mouse_phys, "/input1", sizeof(ati_remote->mouse_phys)); in ati_remote_probe()
870 strlcpy(ati_remote->rc_name, udev->manufacturer, in ati_remote_probe()
871 sizeof(ati_remote->rc_name)); in ati_remote_probe()
874 snprintf(ati_remote->rc_name, sizeof(ati_remote->rc_name), in ati_remote_probe()
875 "%s %s", ati_remote->rc_name, udev->product); in ati_remote_probe()
877 if (!strlen(ati_remote->rc_name)) in ati_remote_probe()
878 snprintf(ati_remote->rc_name, sizeof(ati_remote->rc_name), in ati_remote_probe()
880 le16_to_cpu(ati_remote->udev->descriptor.idVendor), in ati_remote_probe()
881 le16_to_cpu(ati_remote->udev->descriptor.idProduct)); in ati_remote_probe()
883 snprintf(ati_remote->mouse_name, sizeof(ati_remote->mouse_name), in ati_remote_probe()
884 "%s mouse", ati_remote->rc_name); in ati_remote_probe()
896 ati_remote_rc_init(ati_remote); in ati_remote_probe()
897 mutex_init(&ati_remote->open_mutex); in ati_remote_probe()
900 err = ati_remote_initialize(ati_remote); in ati_remote_probe()
905 err = rc_register_device(ati_remote->rdev); in ati_remote_probe()
910 ati_remote->rdev->input_dev->rep[REP_DELAY] = repeat_delay; in ati_remote_probe()
920 ati_remote->idev = input_dev; in ati_remote_probe()
921 ati_remote_input_init(ati_remote); in ati_remote_probe()
928 usb_set_intfdata(interface, ati_remote); in ati_remote_probe()
937 usb_kill_urb(ati_remote->irq_urb); in ati_remote_probe()
938 usb_kill_urb(ati_remote->out_urb); in ati_remote_probe()
940 ati_remote_free_buffers(ati_remote); in ati_remote_probe()
943 kfree(ati_remote); in ati_remote_probe()
952 struct ati_remote *ati_remote; in ati_remote_disconnect() local
954 ati_remote = usb_get_intfdata(interface); in ati_remote_disconnect()
956 if (!ati_remote) { in ati_remote_disconnect()
961 usb_kill_urb(ati_remote->irq_urb); in ati_remote_disconnect()
962 usb_kill_urb(ati_remote->out_urb); in ati_remote_disconnect()
963 if (ati_remote->idev) in ati_remote_disconnect()
964 input_unregister_device(ati_remote->idev); in ati_remote_disconnect()
965 rc_unregister_device(ati_remote->rdev); in ati_remote_disconnect()
966 ati_remote_free_buffers(ati_remote); in ati_remote_disconnect()
967 kfree(ati_remote); in ati_remote_disconnect()