Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: elan_i2c - add new trackpoint report type 0x5F

The 0x5F is a new trackpoint report type used by some modules.

Signed-off-by: Jingle Wu <jingle.wu@emc.com.tw>
Link: https://lore.kernel.org/r/20201211071511.32349-1-jingle.wu@emc.com.tw
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Jingle Wu and committed by
Dmitry Torokhov
056115da c18b443c

+23 -14
+16
drivers/input/mouse/elan_i2c.h
··· 28 28 29 29 #define ETP_FEATURE_REPORT_MK BIT(0) 30 30 31 + #define ETP_REPORT_ID 0x5D 32 + #define ETP_TP_REPORT_ID 0x5E 33 + #define ETP_TP_REPORT_ID2 0x5F 34 + #define ETP_REPORT_ID2 0x60 /* High precision report */ 35 + 36 + #define ETP_REPORT_ID_OFFSET 2 37 + #define ETP_TOUCH_INFO_OFFSET 3 38 + #define ETP_FINGER_DATA_OFFSET 4 39 + #define ETP_HOVER_INFO_OFFSET 30 40 + #define ETP_MK_DATA_OFFSET 33 /* For high precision reports */ 41 + 42 + #define ETP_MAX_REPORT_LEN 39 43 + 44 + #define ETP_MAX_FINGERS 5 45 + #define ETP_FINGER_DATA_LEN 5 46 + 31 47 /* IAP Firmware handling */ 32 48 #define ETP_PRODUCT_ID_FORMAT_STRING "%d.0" 33 49 #define ETP_FW_NAME "elan_i2c_" ETP_PRODUCT_ID_FORMAT_STRING ".bin"
+1 -12
drivers/input/mouse/elan_i2c_core.c
··· 46 46 #define ETP_FINGER_WIDTH 15 47 47 #define ETP_RETRY_COUNT 3 48 48 49 - #define ETP_MAX_FINGERS 5 50 - #define ETP_FINGER_DATA_LEN 5 51 - #define ETP_REPORT_ID 0x5D 52 - #define ETP_REPORT_ID2 0x60 /* High precision report */ 53 - #define ETP_TP_REPORT_ID 0x5E 54 - #define ETP_REPORT_ID_OFFSET 2 55 - #define ETP_TOUCH_INFO_OFFSET 3 56 - #define ETP_FINGER_DATA_OFFSET 4 57 - #define ETP_HOVER_INFO_OFFSET 30 58 - #define ETP_MK_DATA_OFFSET 33 /* For high precision reports */ 59 - #define ETP_MAX_REPORT_LEN 39 60 - 61 49 /* The main device structure */ 62 50 struct elan_tp_data { 63 51 struct i2c_client *client; ··· 1062 1074 elan_report_absolute(data, report, true); 1063 1075 break; 1064 1076 case ETP_TP_REPORT_ID: 1077 + case ETP_TP_REPORT_ID2: 1065 1078 elan_report_trackpoint(data, report); 1066 1079 break; 1067 1080 default:
+6 -2
drivers/input/mouse/elan_i2c_smbus.c
··· 45 45 #define ETP_SMBUS_CALIBRATE_QUERY 0xC5 46 46 47 47 #define ETP_SMBUS_REPORT_LEN 32 48 + #define ETP_SMBUS_REPORT_LEN2 7 48 49 #define ETP_SMBUS_REPORT_OFFSET 2 49 50 #define ETP_SMBUS_HELLOPACKET_LEN 5 50 51 #define ETP_SMBUS_IAP_PASSWORD 0x1234 ··· 498 497 return len; 499 498 } 500 499 501 - if (len != ETP_SMBUS_REPORT_LEN) { 500 + if (report[ETP_REPORT_ID_OFFSET] == ETP_TP_REPORT_ID2) 501 + report_len = ETP_SMBUS_REPORT_LEN2; 502 + 503 + if (len != report_len) { 502 504 dev_err(&client->dev, 503 505 "wrong report length (%d vs %d expected)\n", 504 - len, ETP_SMBUS_REPORT_LEN); 506 + len, report_len); 505 507 return -EIO; 506 508 } 507 509