From 94262da331e03690388209a755bf7d2cf93b9fc5 Mon Sep 17 00:00:00 2001 From: Tai-hwa Liang Date: Mon, 7 May 2012 08:45:58 -0700 Subject: [PATCH] --- yaml --- r: 306610 b: refs/heads/master c: d3132c5c95507d570987712d037d184c637171bb h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/input/mouse/sentelic.c | 34 ++++++++++++++++++++++++---- trunk/drivers/input/mouse/sentelic.h | 8 +++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 674d457bdf2d..39213fa58cbe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9ac7b1a36c729ce88eee7370da3c9992d7b40590 +refs/heads/master: d3132c5c95507d570987712d037d184c637171bb diff --git a/trunk/drivers/input/mouse/sentelic.c b/trunk/drivers/input/mouse/sentelic.c index 661a0ca3b3d6..3f5649f19082 100644 --- a/trunk/drivers/input/mouse/sentelic.c +++ b/trunk/drivers/input/mouse/sentelic.c @@ -41,7 +41,7 @@ #define GET_ABS_Y(packet) ((packet[2] << 2) | (packet[3] & 0x03)) /** Driver version. */ -static const char fsp_drv_ver[] = "1.0.0-K"; +static const char fsp_drv_ver[] = "1.1.0-K"; /* * 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) return 0; } +static int fsp_get_sn(struct psmouse *psmouse, int *sn) +{ + int v0, v1, v2; + int rc = -EIO; + + /* production number since Cx is available at: 0x0b40 ~ 0x0b42 */ + if (fsp_page_reg_write(psmouse, FSP_PAGE_0B)) + goto out; + if (fsp_reg_read(psmouse, FSP_REG_SN0, &v0)) + goto out; + if (fsp_reg_read(psmouse, FSP_REG_SN1, &v1)) + goto out; + if (fsp_reg_read(psmouse, FSP_REG_SN2, &v2)) + goto out; + *sn = (v0 << 16) | (v1 << 8) | v2; + rc = 0; +out: + fsp_page_reg_write(psmouse, FSP_PAGE_DEFAULT); + return rc; +} + static int fsp_get_buttons(struct psmouse *psmouse, int *btn) { static const int buttons[] = { @@ -1000,16 +1021,21 @@ static int fsp_reconnect(struct psmouse *psmouse) int fsp_init(struct psmouse *psmouse) { struct fsp_data *priv; - int ver, rev; + int ver, rev, sn = 0; int error; if (fsp_get_version(psmouse, &ver) || fsp_get_revision(psmouse, &rev)) { return -ENODEV; } + if (ver >= FSP_VER_STL3888_C0) { + /* firmware information is only available since C0 */ + fsp_get_sn(psmouse, &sn); + } - psmouse_info(psmouse, "Finger Sensing Pad, hw: %d.%d.%d, sw: %s\n", - ver >> 4, ver & 0x0F, rev, fsp_drv_ver); + psmouse_info(psmouse, + "Finger Sensing Pad, hw: %d.%d.%d, sn: %x, sw: %s\n", + ver >> 4, ver & 0x0F, rev, sn, fsp_drv_ver); psmouse->private = priv = kzalloc(sizeof(struct fsp_data), GFP_KERNEL); if (!priv) diff --git a/trunk/drivers/input/mouse/sentelic.h b/trunk/drivers/input/mouse/sentelic.h index 334de19e5ddb..aa697ece405b 100644 --- a/trunk/drivers/input/mouse/sentelic.h +++ b/trunk/drivers/input/mouse/sentelic.h @@ -65,6 +65,14 @@ #define FSP_BIT_SWC1_GST_GRP1 BIT(6) #define FSP_BIT_SWC1_BX_COMPAT BIT(7) +#define FSP_PAGE_0B (0x0b) +#define FSP_PAGE_82 (0x82) +#define FSP_PAGE_DEFAULT FSP_PAGE_82 + +#define FSP_REG_SN0 (0x40) +#define FSP_REG_SN1 (0x41) +#define FSP_REG_SN2 (0x42) + /* Finger-sensing Pad packet formating related definitions */ /* absolute packet type */