diff options
| -rw-r--r-- | drivers/hid/hid-rmi.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c index 578bbe65902b..3221a95ed97c 100644 --- a/drivers/hid/hid-rmi.c +++ b/drivers/hid/hid-rmi.c | |||
| @@ -549,10 +549,12 @@ static int rmi_populate_f11(struct hid_device *hdev) | |||
| 549 | u8 buf[20]; | 549 | u8 buf[20]; |
| 550 | int ret; | 550 | int ret; |
| 551 | bool has_query9; | 551 | bool has_query9; |
| 552 | bool has_query10; | 552 | bool has_query10 = false; |
| 553 | bool has_query11; | 553 | bool has_query11; |
| 554 | bool has_query12; | 554 | bool has_query12; |
| 555 | bool has_physical_props; | 555 | bool has_physical_props; |
| 556 | bool has_gestures; | ||
| 557 | bool has_rel; | ||
| 556 | unsigned x_size, y_size; | 558 | unsigned x_size, y_size; |
| 557 | u16 query12_offset; | 559 | u16 query12_offset; |
| 558 | 560 | ||
| @@ -589,19 +591,32 @@ static int rmi_populate_f11(struct hid_device *hdev) | |||
| 589 | return -ENODEV; | 591 | return -ENODEV; |
| 590 | } | 592 | } |
| 591 | 593 | ||
| 592 | /* query 8 to find out if query 10 exists */ | 594 | has_rel = !!(buf[0] & BIT(3)); |
| 593 | ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf); | 595 | has_gestures = !!(buf[0] & BIT(5)); |
| 594 | if (ret) { | 596 | |
| 595 | hid_err(hdev, "can not read gesture information: %d.\n", ret); | 597 | if (has_gestures) { |
| 596 | return ret; | 598 | /* query 8 to find out if query 10 exists */ |
| 599 | ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf); | ||
| 600 | if (ret) { | ||
| 601 | hid_err(hdev, "can not read gesture information: %d.\n", | ||
| 602 | ret); | ||
| 603 | return ret; | ||
| 604 | } | ||
| 605 | has_query10 = !!(buf[0] & BIT(2)); | ||
| 597 | } | 606 | } |
| 598 | has_query10 = !!(buf[0] & BIT(2)); | ||
| 599 | 607 | ||
| 600 | /* | 608 | /* |
| 601 | * At least 8 queries are guaranteed to be present in F11 | 609 | * At least 4 queries are guaranteed to be present in F11 |
| 602 | * +1 for query12. | 610 | * +1 for query 5 which is present since absolute events are |
| 611 | * reported and +1 for query 12. | ||
| 603 | */ | 612 | */ |
| 604 | query12_offset = 9; | 613 | query12_offset = 6; |
| 614 | |||
| 615 | if (has_rel) | ||
| 616 | ++query12_offset; /* query 6 is present */ | ||
| 617 | |||
| 618 | if (has_gestures) | ||
| 619 | query12_offset += 2; /* query 7 and 8 are present */ | ||
| 605 | 620 | ||
| 606 | if (has_query9) | 621 | if (has_query9) |
| 607 | ++query12_offset; | 622 | ++query12_offset; |
