Lines Matching refs:djrcv_dev
559 static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev);
580 struct dj_receiver_dev *djrcv_dev;
590 list_for_each_entry(djrcv_dev, &dj_hdev_list, list) {
591 if (djrcv_dev->mouse &&
592 hid_compare_device_paths(hdev, djrcv_dev->mouse, sep)) {
593 kref_get(&djrcv_dev->kref);
594 return djrcv_dev;
596 if (djrcv_dev->keyboard &&
597 hid_compare_device_paths(hdev, djrcv_dev->keyboard, sep)) {
598 kref_get(&djrcv_dev->kref);
599 return djrcv_dev;
601 if (djrcv_dev->hidpp &&
602 hid_compare_device_paths(hdev, djrcv_dev->hidpp, sep)) {
603 kref_get(&djrcv_dev->kref);
604 return djrcv_dev;
613 struct dj_receiver_dev *djrcv_dev = container_of(kref, struct dj_receiver_dev, kref);
615 list_del(&djrcv_dev->list);
616 kfifo_free(&djrcv_dev->notif_fifo);
617 kfree(djrcv_dev);
622 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
626 if (djrcv_dev->mouse == hdev)
627 djrcv_dev->mouse = NULL;
628 if (djrcv_dev->keyboard == hdev)
629 djrcv_dev->keyboard = NULL;
630 if (djrcv_dev->hidpp == hdev)
631 djrcv_dev->hidpp = NULL;
633 kref_put(&djrcv_dev->kref, dj_release_receiver_dev);
643 struct dj_receiver_dev *djrcv_dev;
647 djrcv_dev = dj_find_receiver_dev(hdev, type);
648 if (!djrcv_dev) {
649 djrcv_dev = kzalloc(sizeof(*djrcv_dev), GFP_KERNEL);
650 if (!djrcv_dev)
653 INIT_WORK(&djrcv_dev->work, delayedwork_callback);
654 spin_lock_init(&djrcv_dev->lock);
655 if (kfifo_alloc(&djrcv_dev->notif_fifo,
658 kfree(djrcv_dev);
659 djrcv_dev = NULL;
662 kref_init(&djrcv_dev->kref);
663 list_add_tail(&djrcv_dev->list, &dj_hdev_list);
664 djrcv_dev->last_query = jiffies;
665 djrcv_dev->type = type;
669 djrcv_dev->keyboard = hdev;
671 djrcv_dev->mouse = hdev;
673 djrcv_dev->hidpp = hdev;
675 hid_set_drvdata(hdev, djrcv_dev);
678 return djrcv_dev;
681 static void logi_dj_recv_destroy_djhid_device(struct dj_receiver_dev *djrcv_dev,
688 spin_lock_irqsave(&djrcv_dev->lock, flags);
689 dj_dev = djrcv_dev->paired_dj_devices[workitem->device_index];
690 djrcv_dev->paired_dj_devices[workitem->device_index] = NULL;
691 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
697 hid_err(djrcv_dev->hidpp, "%s: can't destroy a NULL device\n",
702 static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
706 struct hid_device *djrcv_hdev = djrcv_dev->hidpp;
718 if (djrcv_dev->paired_dj_devices[device_index]) {
758 if (djrcv_dev->type == recvr_type_27mhz)
776 dj_dev->dj_receiver_dev = djrcv_dev;
780 spin_lock_irqsave(&djrcv_dev->lock, flags);
781 djrcv_dev->paired_dj_devices[device_index] = dj_dev;
782 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
792 spin_lock_irqsave(&djrcv_dev->lock, flags);
793 djrcv_dev->paired_dj_devices[device_index] = NULL;
794 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
802 struct dj_receiver_dev *djrcv_dev =
812 spin_lock_irqsave(&djrcv_dev->lock, flags);
818 if (!djrcv_dev->ready) {
821 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
825 count = kfifo_out(&djrcv_dev->notif_fifo, &workitem, sizeof(workitem));
828 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
832 if (!kfifo_is_empty(&djrcv_dev->notif_fifo))
833 schedule_work(&djrcv_dev->work);
835 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
839 logi_dj_recv_add_djhid_device(djrcv_dev, &workitem);
842 logi_dj_recv_destroy_djhid_device(djrcv_dev, &workitem);
845 retval = logi_dj_recv_query_paired_devices(djrcv_dev);
847 hid_err(djrcv_dev->hidpp, "%s: logi_dj_recv_query_paired_devices error: %d\n",
869 static void logi_dj_recv_queue_unknown_work(struct dj_receiver_dev *djrcv_dev)
874 if (time_before(jiffies, djrcv_dev->last_query + HZ / 2))
877 kfifo_in(&djrcv_dev->notif_fifo, &workitem, sizeof(workitem));
878 schedule_work(&djrcv_dev->work);
881 static void logi_dj_recv_queue_notification(struct dj_receiver_dev *djrcv_dev,
911 logi_dj_recv_queue_unknown_work(djrcv_dev);
915 kfifo_in(&djrcv_dev->notif_fifo, &workitem, sizeof(workitem));
916 schedule_work(&djrcv_dev->work);
943 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
959 if (djrcv_dev->type == recvr_type_dinovo)
969 if (djrcv_dev->type == recvr_type_mouse_only)
1010 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1096 kfifo_in(&djrcv_dev->notif_fifo, &workitem, sizeof(workitem));
1097 schedule_work(&djrcv_dev->work);
1100 static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev,
1108 djdev = djrcv_dev->paired_dj_devices[dj_report->device_index];
1126 static void logi_dj_recv_forward_dj(struct dj_receiver_dev *djrcv_dev,
1132 dj_device = djrcv_dev->paired_dj_devices[dj_report->device_index];
1158 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1169 spin_lock_irqsave(&djrcv_dev->lock, flags);
1171 dj_dev = djrcv_dev->paired_dj_devices[i];
1174 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1179 logi_dj_recv_queue_unknown_work(djrcv_dev);
1180 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1185 static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev,
1188 struct hid_device *hdev = djrcv_dev->hidpp;
1210 static int logi_dj_recv_query_hidpp_devices(struct dj_receiver_dev *djrcv_dev)
1227 retval = hid_hw_raw_request(djrcv_dev->hidpp,
1237 static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
1242 djrcv_dev->last_query = jiffies;
1244 if (djrcv_dev->type != recvr_type_dj)
1245 return logi_dj_recv_query_hidpp_devices(djrcv_dev);
1253 retval = logi_dj_recv_send_report(djrcv_dev, dj_report);
1259 static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev,
1262 struct hid_device *hdev = djrcv_dev->hidpp;
1271 if (djrcv_dev->type == recvr_type_dj) {
1279 retval = logi_dj_recv_send_report(djrcv_dev, dj_report);
1352 struct dj_receiver_dev *djrcv_dev = djdev->dj_receiver_dev;
1369 return hid_hw_raw_request(djrcv_dev->hidpp, reportnum, buf,
1376 if (djrcv_dev->type != recvr_type_dj && count >= 2) {
1377 if (!djrcv_dev->keyboard) {
1382 return hid_hw_raw_request(djrcv_dev->keyboard, 0, buf, count,
1397 ret = hid_hw_raw_request(djrcv_dev->hidpp, out_buf[0], out_buf,
1507 struct dj_receiver_dev *djrcv_dev = djdev->dj_receiver_dev;
1509 return hid_hw_may_wakeup(djrcv_dev->hidpp);
1526 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1561 spin_lock_irqsave(&djrcv_dev->lock, flags);
1563 if (!djrcv_dev->paired_dj_devices[dj_report->device_index]) {
1565 logi_dj_recv_queue_notification(djrcv_dev, dj_report);
1574 logi_dj_recv_queue_notification(djrcv_dev, dj_report);
1579 logi_dj_recv_forward_null_report(djrcv_dev, dj_report);
1583 logi_dj_recv_forward_dj(djrcv_dev, dj_report);
1587 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1596 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1633 spin_lock_irqsave(&djrcv_dev->lock, flags);
1635 dj_dev = djrcv_dev->paired_dj_devices[device_index];
1641 if (djrcv_dev->type == recvr_type_27mhz && dj_dev &&
1650 kfifo_in(&djrcv_dev->notif_fifo, &workitem, sizeof(workitem));
1661 logi_dj_recv_queue_unknown_work(djrcv_dev);
1664 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1673 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1676 if (!djrcv_dev)
1681 if (djrcv_dev->unnumbered_application == HID_GD_KEYBOARD) {
1700 if (djrcv_dev->unnumbered_application == HID_GD_MOUSE &&
1751 struct dj_receiver_dev *djrcv_dev;
1818 djrcv_dev = dj_get_receiver_dev(hdev, id->driver_data,
1820 if (!djrcv_dev) {
1826 djrcv_dev->unnumbered_application = rep->application;
1837 retval = logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0);
1857 spin_lock_irqsave(&djrcv_dev->lock, flags);
1858 djrcv_dev->ready = true;
1859 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1860 retval = logi_dj_recv_query_paired_devices(djrcv_dev);
1886 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1888 if (!djrcv_dev || djrcv_dev->hidpp != hdev)
1891 retval = logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0);
1903 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
1910 if (!djrcv_dev)
1917 spin_lock_irqsave(&djrcv_dev->lock, flags);
1918 djrcv_dev->ready = false;
1919 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
1921 cancel_work_sync(&djrcv_dev->work);
1931 * djrcv_dev, so we need locking here.
1934 spin_lock_irqsave(&djrcv_dev->lock, flags);
1935 dj_dev = djrcv_dev->paired_dj_devices[i];
1936 djrcv_dev->paired_dj_devices[i] = NULL;
1937 spin_unlock_irqrestore(&djrcv_dev->lock, flags);