Lines Matching +full:report +full:- +full:error
1 // SPDX-License-Identifier: GPL-2.0-or-later
9 * - tested with PantherLord USB/PS2 2in1 Adapter
10 * - contains two reports, one for each port (HID_QUIRK_MULTI_INPUT)
13 * - tested with König Gaming gamepad
16 * - another version of the König gamepad
29 #define debug(format, arg...) pr_debug("hid-plff: " format "\n" , ## arg)
36 #include "hid-ids.h"
41 struct hid_report *report; member
54 left = effect->u.rumble.strong_magnitude; in hid_plff_play()
55 right = effect->u.rumble.weak_magnitude; in hid_plff_play()
58 left = left * plff->maxval / 0xffff; in hid_plff_play()
59 right = right * plff->maxval / 0xffff; in hid_plff_play()
61 *plff->strong = left; in hid_plff_play()
62 *plff->weak = right; in hid_plff_play()
64 hid_hw_request(hid, plff->report, HID_REQ_SET_REPORT); in hid_plff_play()
72 struct hid_report *report; in plff_init() local
75 &hid->report_enum[HID_OUTPUT_REPORT].report_list; in plff_init()
78 int error; in plff_init() local
83 /* The device contains one output report per physical device, all in plff_init()
93 Zeroplus (hid-zpff) devices. in plff_init()
98 return -ENODEV; in plff_init()
101 list_for_each_entry(hidinput, &hid->inputs, list) { in plff_init()
103 report_ptr = report_ptr->next; in plff_init()
106 hid_err(hid, "required output report is missing\n"); in plff_init()
107 return -ENODEV; in plff_init()
110 report = list_entry(report_ptr, struct hid_report, list); in plff_init()
111 if (report->maxfield < 1) { in plff_init()
112 hid_err(hid, "no fields in the report\n"); in plff_init()
113 return -ENODEV; in plff_init()
117 if (report->field[0]->report_count >= 4) { in plff_init()
118 report->field[0]->value[0] = 0x00; in plff_init()
119 report->field[0]->value[1] = 0x00; in plff_init()
120 strong = &report->field[0]->value[2]; in plff_init()
121 weak = &report->field[0]->value[3]; in plff_init()
122 debug("detected single-field device"); in plff_init()
123 } else if (report->field[0]->maxusage == 1 && in plff_init()
124 report->field[0]->usage[0].hid == in plff_init()
126 report->maxfield >= 4 && in plff_init()
127 report->field[0]->report_count >= 1 && in plff_init()
128 report->field[1]->report_count >= 1 && in plff_init()
129 report->field[2]->report_count >= 1 && in plff_init()
130 report->field[3]->report_count >= 1) { in plff_init()
131 report->field[0]->value[0] = 0x00; in plff_init()
132 report->field[1]->value[0] = 0x00; in plff_init()
133 strong = &report->field[2]->value[0]; in plff_init()
134 weak = &report->field[3]->value[0]; in plff_init()
135 if (hid->vendor == USB_VENDOR_ID_JESS2) in plff_init()
137 debug("detected 4-field device"); in plff_init()
140 return -ENODEV; in plff_init()
145 return -ENOMEM; in plff_init()
147 dev = hidinput->input; in plff_init()
149 set_bit(FF_RUMBLE, dev->ffbit); in plff_init()
151 error = input_ff_create_memless(dev, plff, hid_plff_play); in plff_init()
152 if (error) { in plff_init()
154 return error; in plff_init()
157 plff->report = report; in plff_init()
158 plff->strong = strong; in plff_init()
159 plff->weak = weak; in plff_init()
160 plff->maxval = maxval; in plff_init()
164 hid_hw_request(hid, plff->report, HID_REQ_SET_REPORT); in plff_init()
182 if (id->driver_data) in pl_probe()
183 hdev->quirks |= HID_QUIRK_MULTI_INPUT; in pl_probe()