Lines Matching refs:djrcv_dev

343 static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev);
345 static void logi_dj_recv_destroy_djhid_device(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_destroy_djhid_device() argument
352 spin_lock_irqsave(&djrcv_dev->lock, flags); in logi_dj_recv_destroy_djhid_device()
353 dj_dev = djrcv_dev->paired_dj_devices[dj_report->device_index]; in logi_dj_recv_destroy_djhid_device()
354 djrcv_dev->paired_dj_devices[dj_report->device_index] = NULL; in logi_dj_recv_destroy_djhid_device()
355 spin_unlock_irqrestore(&djrcv_dev->lock, flags); in logi_dj_recv_destroy_djhid_device()
361 dev_err(&djrcv_dev->hdev->dev, "%s: can't destroy a NULL device\n", in logi_dj_recv_destroy_djhid_device()
366 static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_add_djhid_device() argument
370 struct hid_device *djrcv_hdev = djrcv_dev->hdev; in logi_dj_recv_add_djhid_device()
384 djrcv_dev->querying_devices = false; in logi_dj_recv_add_djhid_device()
388 if (djrcv_dev->paired_dj_devices[dj_report->device_index]) { in logi_dj_recv_add_djhid_device()
431 dj_dev->dj_receiver_dev = djrcv_dev; in logi_dj_recv_add_djhid_device()
435 djrcv_dev->paired_dj_devices[dj_report->device_index] = dj_dev; in logi_dj_recv_add_djhid_device()
446 djrcv_dev->paired_dj_devices[dj_report->device_index] = NULL; in logi_dj_recv_add_djhid_device()
454 struct dj_receiver_dev *djrcv_dev = in delayedwork_callback() local
464 spin_lock_irqsave(&djrcv_dev->lock, flags); in delayedwork_callback()
466 count = kfifo_out(&djrcv_dev->notif_fifo, &dj_report, in delayedwork_callback()
470 dev_err(&djrcv_dev->hdev->dev, "%s: workitem triggered without " in delayedwork_callback()
472 spin_unlock_irqrestore(&djrcv_dev->lock, flags); in delayedwork_callback()
476 if (!kfifo_is_empty(&djrcv_dev->notif_fifo)) { in delayedwork_callback()
477 if (schedule_work(&djrcv_dev->work) == 0) { in delayedwork_callback()
483 spin_unlock_irqrestore(&djrcv_dev->lock, flags); in delayedwork_callback()
487 logi_dj_recv_add_djhid_device(djrcv_dev, &dj_report); in delayedwork_callback()
490 logi_dj_recv_destroy_djhid_device(djrcv_dev, &dj_report); in delayedwork_callback()
500 if (!djrcv_dev->paired_dj_devices[dj_report.device_index]) { in delayedwork_callback()
503 retval = logi_dj_recv_query_paired_devices(djrcv_dev); in delayedwork_callback()
508 dev_err(&djrcv_dev->hdev->dev, in delayedwork_callback()
516 static void logi_dj_recv_queue_notification(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_queue_notification() argument
521 kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report)); in logi_dj_recv_queue_notification()
523 if (schedule_work(&djrcv_dev->work) == 0) { in logi_dj_recv_queue_notification()
529 static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_forward_null_report() argument
537 djdev = djrcv_dev->paired_dj_devices[dj_report->device_index]; in logi_dj_recv_forward_null_report()
555 static void logi_dj_recv_forward_report(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_forward_report() argument
561 dj_device = djrcv_dev->paired_dj_devices[dj_report->device_index]; in logi_dj_recv_forward_report()
584 static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_send_report() argument
587 struct hid_device *hdev = djrcv_dev->hdev; in logi_dj_recv_send_report()
609 static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev) in logi_dj_recv_query_paired_devices() argument
615 if (djrcv_dev->querying_devices) in logi_dj_recv_query_paired_devices()
624 retval = logi_dj_recv_send_report(djrcv_dev, dj_report); in logi_dj_recv_query_paired_devices()
630 static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev, in logi_dj_recv_switch_to_dj_mode() argument
633 struct hid_device *hdev = djrcv_dev->hdev; in logi_dj_recv_switch_to_dj_mode()
646 retval = logi_dj_recv_send_report(djrcv_dev, dj_report); in logi_dj_recv_switch_to_dj_mode()
708 struct dj_receiver_dev *djrcv_dev = djdev->dj_receiver_dev; in logi_dj_ll_raw_request() local
724 return hid_hw_raw_request(djrcv_dev->hdev, reportnum, buf, in logi_dj_ll_raw_request()
742 ret = hid_hw_raw_request(djrcv_dev->hdev, out_buf[0], out_buf, in logi_dj_ll_raw_request()
839 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); in logi_dj_dj_event() local
874 spin_lock_irqsave(&djrcv_dev->lock, flags); in logi_dj_dj_event()
876 if (!djrcv_dev->paired_dj_devices[dj_report->device_index]) { in logi_dj_dj_event()
878 logi_dj_recv_queue_notification(djrcv_dev, dj_report); in logi_dj_dj_event()
887 logi_dj_recv_queue_notification(djrcv_dev, dj_report); in logi_dj_dj_event()
892 logi_dj_recv_forward_null_report(djrcv_dev, dj_report); in logi_dj_dj_event()
896 logi_dj_recv_forward_report(djrcv_dev, dj_report); in logi_dj_dj_event()
900 spin_unlock_irqrestore(&djrcv_dev->lock, flags); in logi_dj_dj_event()
909 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); in logi_dj_hidpp_event() local
945 spin_lock_irqsave(&djrcv_dev->lock, flags); in logi_dj_hidpp_event()
947 if (!djrcv_dev->paired_dj_devices[device_index]) in logi_dj_hidpp_event()
951 logi_dj_recv_forward_hidpp(djrcv_dev->paired_dj_devices[device_index], in logi_dj_hidpp_event()
955 spin_unlock_irqrestore(&djrcv_dev->lock, flags); in logi_dj_hidpp_event()
996 struct dj_receiver_dev *djrcv_dev; in logi_dj_probe() local
1013 djrcv_dev = kzalloc(sizeof(struct dj_receiver_dev), GFP_KERNEL); in logi_dj_probe()
1014 if (!djrcv_dev) { in logi_dj_probe()
1019 djrcv_dev->hdev = hdev; in logi_dj_probe()
1020 INIT_WORK(&djrcv_dev->work, delayedwork_callback); in logi_dj_probe()
1021 spin_lock_init(&djrcv_dev->lock); in logi_dj_probe()
1022 if (kfifo_alloc(&djrcv_dev->notif_fifo, in logi_dj_probe()
1027 kfree(djrcv_dev); in logi_dj_probe()
1030 hid_set_drvdata(hdev, djrcv_dev); in logi_dj_probe()
1058 retval = logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0); in logi_dj_probe()
1077 retval = logi_dj_recv_query_paired_devices(djrcv_dev); in logi_dj_probe()
1095 kfifo_free(&djrcv_dev->notif_fifo); in logi_dj_probe()
1096 kfree(djrcv_dev); in logi_dj_probe()
1106 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); in logi_dj_reset_resume() local
1108 retval = logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0); in logi_dj_reset_resume()
1121 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); in logi_dj_remove() local
1127 cancel_work_sync(&djrcv_dev->work); in logi_dj_remove()
1138 dj_dev = djrcv_dev->paired_dj_devices[i]; in logi_dj_remove()
1142 djrcv_dev->paired_dj_devices[i] = NULL; in logi_dj_remove()
1146 kfifo_free(&djrcv_dev->notif_fifo); in logi_dj_remove()
1147 kfree(djrcv_dev); in logi_dj_remove()