Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 5445
b: refs/heads/master
c: bc5d048
h: refs/heads/master
i:
  5443: 17515d8
v: v3
  • Loading branch information
Adam Kropelin authored and Dmitry Torokhov committed Jul 11, 2005
1 parent 695727c commit d697560
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 153ab429cad3b585ddf1a5521cfaadb57402cd31
refs/heads/master: bc5d04822bd9f34ea93a681f05f5e5683935d574
20 changes: 10 additions & 10 deletions trunk/drivers/usb/input/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -789,12 +789,12 @@ static __inline__ int search(__s32 *array, __s32 value, unsigned n)
return -1;
}

static void hid_process_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value, struct pt_regs *regs)
static void hid_process_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value, int interrupt, struct pt_regs *regs)
{
hid_dump_input(usage, value);
if (hid->claimed & HID_CLAIMED_INPUT)
hidinput_hid_event(hid, field, usage, value, regs);
if (hid->claimed & HID_CLAIMED_HIDDEV)
if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt)
hiddev_hid_event(hid, field, usage, value, regs);
}

Expand All @@ -804,7 +804,7 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, s
* reporting to the layer).
*/

static void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data, struct pt_regs *regs)
static void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data, int interrupt, struct pt_regs *regs)
{
unsigned n;
unsigned count = field->report_count;
Expand All @@ -831,27 +831,27 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field, __u
for (n = 0; n < count; n++) {

if (HID_MAIN_ITEM_VARIABLE & field->flags) {
hid_process_event(hid, field, &field->usage[n], value[n], regs);
hid_process_event(hid, field, &field->usage[n], value[n], interrupt, regs);
continue;
}

if (field->value[n] >= min && field->value[n] <= max
&& field->usage[field->value[n] - min].hid
&& search(value, field->value[n], count))
hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, regs);
hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, interrupt, regs);

if (value[n] >= min && value[n] <= max
&& field->usage[value[n] - min].hid
&& search(field->value, value[n], count))
hid_process_event(hid, field, &field->usage[value[n] - min], 1, regs);
hid_process_event(hid, field, &field->usage[value[n] - min], 1, interrupt, regs);
}

memcpy(field->value, value, count * sizeof(__s32));
exit:
kfree(value);
}

static int hid_input_report(int type, struct urb *urb, struct pt_regs *regs)
static int hid_input_report(int type, struct urb *urb, int interrupt, struct pt_regs *regs)
{
struct hid_device *hid = urb->context;
struct hid_report_enum *report_enum = hid->report_enum + type;
Expand Down Expand Up @@ -899,7 +899,7 @@ static int hid_input_report(int type, struct urb *urb, struct pt_regs *regs)
hiddev_report_event(hid, report);

for (n = 0; n < report->maxfield; n++)
hid_input_field(hid, report->field[n], data, regs);
hid_input_field(hid, report->field[n], data, interrupt, regs);

if (hid->claimed & HID_CLAIMED_INPUT)
hidinput_report_event(hid, report);
Expand All @@ -918,7 +918,7 @@ static void hid_irq_in(struct urb *urb, struct pt_regs *regs)

switch (urb->status) {
case 0: /* success */
hid_input_report(HID_INPUT_REPORT, urb, regs);
hid_input_report(HID_INPUT_REPORT, urb, 1, regs);
break;
case -ECONNRESET: /* unlink */
case -ENOENT:
Expand Down Expand Up @@ -1142,7 +1142,7 @@ static void hid_ctrl(struct urb *urb, struct pt_regs *regs)
switch (urb->status) {
case 0: /* success */
if (hid->ctrl[hid->ctrltail].dir == USB_DIR_IN)
hid_input_report(hid->ctrl[hid->ctrltail].report->type, urb, regs);
hid_input_report(hid->ctrl[hid->ctrltail].report->type, urb, 0, regs);
case -ESHUTDOWN: /* unplug */
case -EILSEQ: /* unplug timectrl on uhci */
unplug = 1;
Expand Down

0 comments on commit d697560

Please sign in to comment.