diff options
| -rw-r--r-- | usr/src/dkms_source_tree/hid-egalax.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/usr/src/dkms_source_tree/hid-egalax.c b/usr/src/dkms_source_tree/hid-egalax.c index 94ff0f7..17b00df 100644 --- a/usr/src/dkms_source_tree/hid-egalax.c +++ b/usr/src/dkms_source_tree/hid-egalax.c | |||
| @@ -42,7 +42,7 @@ struct egalax_contact { | |||
| 42 | 42 | ||
| 43 | struct egalax_data { | 43 | struct egalax_data { |
| 44 | struct egalax_contact contact[MAX_SLOTS]; | 44 | struct egalax_contact contact[MAX_SLOTS]; |
| 45 | int valid; | 45 | int down, valid; |
| 46 | int x, y, z; | 46 | int x, y, z; |
| 47 | int slot, prev_slot; | 47 | int slot, prev_slot; |
| 48 | int mask; | 48 | int mask; |
| @@ -135,13 +135,13 @@ static int egalax_input_mapped(struct hid_device *hdev, struct hid_input *hi, | |||
| 135 | return -1; | 135 | return -1; |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static void report_frame(struct egalax_data *td, struct input_dev *input) | 138 | static void report_contact(struct egalax_data *td, struct input_dev *input) |
| 139 | { | 139 | { |
| 140 | struct egalax_contact *f = &td->contact[td->slot]; | 140 | struct egalax_contact *f = &td->contact[td->slot]; |
| 141 | struct egalax_contact *oldest = 0; | 141 | struct egalax_contact *oldest = 0; |
| 142 | int i; | 142 | int i; |
| 143 | 143 | ||
| 144 | if (!td->valid) | 144 | if (!td->down) |
| 145 | f->id = -1; | 145 | f->id = -1; |
| 146 | else if (f->id < 0) | 146 | else if (f->id < 0) |
| 147 | f->id = td->trkid++ & MAX_TRKID; | 147 | f->id = td->trkid++ & MAX_TRKID; |
| @@ -149,7 +149,6 @@ static void report_frame(struct egalax_data *td, struct input_dev *input) | |||
| 149 | f->y = td->y; | 149 | f->y = td->y; |
| 150 | f->z = td->z; | 150 | f->z = td->z; |
| 151 | 151 | ||
| 152 | td->mask = 0; | ||
| 153 | if (td->prev_slot != td->slot) { | 152 | if (td->prev_slot != td->slot) { |
| 154 | td->prev_slot = td->slot; | 153 | td->prev_slot = td->slot; |
| 155 | if (td->reported) { | 154 | if (td->reported) { |
| @@ -203,31 +202,33 @@ static int egalax_event(struct hid_device *hid, struct hid_field *field, | |||
| 203 | //return 1; | 202 | //return 1; |
| 204 | 203 | ||
| 205 | switch (usage->hid) { | 204 | switch (usage->hid) { |
| 206 | case HID_DG_INRANGE: | ||
| 207 | case HID_DG_CONFIDENCE: | 205 | case HID_DG_CONFIDENCE: |
| 208 | case HID_DG_CONTACTCOUNT: | 206 | case HID_DG_CONTACTCOUNT: |
| 209 | break; | 207 | break; |
| 210 | 208 | ||
| 211 | case HID_DG_TIPSWITCH: | 209 | case HID_DG_TIPSWITCH: |
| 212 | td->valid = value; | 210 | td->down = value; |
| 213 | td->mask |= 0x01; | 211 | td->mask |= 0x01; |
| 214 | break; | 212 | break; |
| 215 | 213 | case HID_DG_INRANGE: | |
| 214 | td->valid = value; | ||
| 215 | td->mask |= 0x02; | ||
| 216 | break; | ||
| 216 | case HID_DG_CONTACTID: | 217 | case HID_DG_CONTACTID: |
| 217 | td->slot = clamp_val(value, 0, MAX_SLOTS - 1); | 218 | td->slot = clamp_val(value, 0, MAX_SLOTS - 1); |
| 218 | td->mask |= 0x02; | 219 | td->mask |= 0x04; |
| 219 | break; | 220 | break; |
| 220 | case HID_GD_X: | 221 | case HID_GD_X: |
| 221 | td->x = value; | 222 | td->x = value; |
| 222 | td->mask |= 0x04; | 223 | td->mask |= 0x08; |
| 223 | break; | 224 | break; |
| 224 | case HID_GD_Y: | 225 | case HID_GD_Y: |
| 225 | td->y = value; | 226 | td->y = value; |
| 226 | td->mask |= 0x08; | 227 | td->mask |= 0x10; |
| 227 | break; | 228 | break; |
| 228 | case HID_DG_TIPPRESSURE: | 229 | case HID_DG_TIPPRESSURE: |
| 229 | td->z = value; | 230 | td->z = value; |
| 230 | td->mask |= 0x10; | 231 | td->mask |= 0x20; |
| 231 | break; | 232 | break; |
| 232 | 233 | ||
| 233 | default: | 234 | default: |
| @@ -235,8 +236,11 @@ static int egalax_event(struct hid_device *hid, struct hid_field *field, | |||
| 235 | return 0; | 236 | return 0; |
| 236 | } | 237 | } |
| 237 | 238 | ||
| 238 | if (td->mask == 0x1f) | 239 | if (td->mask == 0x3f) { |
| 239 | report_frame(td, input); | 240 | td->mask = 0; |
| 241 | if (td->valid) | ||
| 242 | report_contact(td, input); | ||
| 243 | } | ||
| 240 | } | 244 | } |
| 241 | 245 | ||
| 242 | /* we have handled the hidinput part, now remains hiddev */ | 246 | /* we have handled the hidinput part, now remains hiddev */ |
