diff options
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/mouse/sentelic.c | 34 | ||||
-rw-r--r-- | drivers/input/mouse/sentelic.h | 8 |
2 files changed, 38 insertions, 4 deletions
diff --git a/drivers/input/mouse/sentelic.c b/drivers/input/mouse/sentelic.c index 661a0ca3b3d6..3f5649f19082 100644 --- a/drivers/input/mouse/sentelic.c +++ b/drivers/input/mouse/sentelic.c | |||
@@ -41,7 +41,7 @@ | |||
41 | #define GET_ABS_Y(packet) ((packet[2] << 2) | (packet[3] & 0x03)) | 41 | #define GET_ABS_Y(packet) ((packet[2] << 2) | (packet[3] & 0x03)) |
42 | 42 | ||
43 | /** Driver version. */ | 43 | /** Driver version. */ |
44 | static const char fsp_drv_ver[] = "1.0.0-K"; | 44 | static const char fsp_drv_ver[] = "1.1.0-K"; |
45 | 45 | ||
46 | /* | 46 | /* |
47 | * Make sure that the value being sent to FSP will not conflict with | 47 | * Make sure that the value being sent to FSP will not conflict with |
@@ -303,6 +303,27 @@ static int fsp_get_revision(struct psmouse *psmouse, int *rev) | |||
303 | return 0; | 303 | return 0; |
304 | } | 304 | } |
305 | 305 | ||
306 | static int fsp_get_sn(struct psmouse *psmouse, int *sn) | ||
307 | { | ||
308 | int v0, v1, v2; | ||
309 | int rc = -EIO; | ||
310 | |||
311 | /* production number since Cx is available at: 0x0b40 ~ 0x0b42 */ | ||
312 | if (fsp_page_reg_write(psmouse, FSP_PAGE_0B)) | ||
313 | goto out; | ||
314 | if (fsp_reg_read(psmouse, FSP_REG_SN0, &v0)) | ||
315 | goto out; | ||
316 | if (fsp_reg_read(psmouse, FSP_REG_SN1, &v1)) | ||
317 | goto out; | ||
318 | if (fsp_reg_read(psmouse, FSP_REG_SN2, &v2)) | ||
319 | goto out; | ||
320 | *sn = (v0 << 16) | (v1 << 8) | v2; | ||
321 | rc = 0; | ||
322 | out: | ||
323 | fsp_page_reg_write(psmouse, FSP_PAGE_DEFAULT); | ||
324 | return rc; | ||
325 | } | ||
326 | |||
306 | static int fsp_get_buttons(struct psmouse *psmouse, int *btn) | 327 | static int fsp_get_buttons(struct psmouse *psmouse, int *btn) |
307 | { | 328 | { |
308 | static const int buttons[] = { | 329 | static const int buttons[] = { |
@@ -1000,16 +1021,21 @@ static int fsp_reconnect(struct psmouse *psmouse) | |||
1000 | int fsp_init(struct psmouse *psmouse) | 1021 | int fsp_init(struct psmouse *psmouse) |
1001 | { | 1022 | { |
1002 | struct fsp_data *priv; | 1023 | struct fsp_data *priv; |
1003 | int ver, rev; | 1024 | int ver, rev, sn = 0; |
1004 | int error; | 1025 | int error; |
1005 | 1026 | ||
1006 | if (fsp_get_version(psmouse, &ver) || | 1027 | if (fsp_get_version(psmouse, &ver) || |
1007 | fsp_get_revision(psmouse, &rev)) { | 1028 | fsp_get_revision(psmouse, &rev)) { |
1008 | return -ENODEV; | 1029 | return -ENODEV; |
1009 | } | 1030 | } |
1031 | if (ver >= FSP_VER_STL3888_C0) { | ||
1032 | /* firmware information is only available since C0 */ | ||
1033 | fsp_get_sn(psmouse, &sn); | ||
1034 | } | ||
1010 | 1035 | ||
1011 | psmouse_info(psmouse, "Finger Sensing Pad, hw: %d.%d.%d, sw: %s\n", | 1036 | psmouse_info(psmouse, |
1012 | ver >> 4, ver & 0x0F, rev, fsp_drv_ver); | 1037 | "Finger Sensing Pad, hw: %d.%d.%d, sn: %x, sw: %s\n", |
1038 | ver >> 4, ver & 0x0F, rev, sn, fsp_drv_ver); | ||
1013 | 1039 | ||
1014 | psmouse->private = priv = kzalloc(sizeof(struct fsp_data), GFP_KERNEL); | 1040 | psmouse->private = priv = kzalloc(sizeof(struct fsp_data), GFP_KERNEL); |
1015 | if (!priv) | 1041 | if (!priv) |
diff --git a/drivers/input/mouse/sentelic.h b/drivers/input/mouse/sentelic.h index 334de19e5ddb..aa697ece405b 100644 --- a/drivers/input/mouse/sentelic.h +++ b/drivers/input/mouse/sentelic.h | |||
@@ -65,6 +65,14 @@ | |||
65 | #define FSP_BIT_SWC1_GST_GRP1 BIT(6) | 65 | #define FSP_BIT_SWC1_GST_GRP1 BIT(6) |
66 | #define FSP_BIT_SWC1_BX_COMPAT BIT(7) | 66 | #define FSP_BIT_SWC1_BX_COMPAT BIT(7) |
67 | 67 | ||
68 | #define FSP_PAGE_0B (0x0b) | ||
69 | #define FSP_PAGE_82 (0x82) | ||
70 | #define FSP_PAGE_DEFAULT FSP_PAGE_82 | ||
71 | |||
72 | #define FSP_REG_SN0 (0x40) | ||
73 | #define FSP_REG_SN1 (0x41) | ||
74 | #define FSP_REG_SN2 (0x42) | ||
75 | |||
68 | /* Finger-sensing Pad packet formating related definitions */ | 76 | /* Finger-sensing Pad packet formating related definitions */ |
69 | 77 | ||
70 | /* absolute packet type */ | 78 | /* absolute packet type */ |