Commit d3132c5c authored by Tai-hwa Liang's avatar Tai-hwa Liang Committed by Dmitry Torokhov

Input: sentelic - report device's production serial number

Hardware since Cx supports an unique identity (used to identify OEM vendors
and released lot number) which is very helpful for diagnostic purpose.
This revision tries to make it as a part of driver boot up message.

Whilst here, also bumping fsp_drv_ver to acknowledge recent addition of
absolute coordinates output.
Signed-off-by: default avatarTai-hwa Liang <avatar@sentelic.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 9ac7b1a3
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#define GET_ABS_Y(packet) ((packet[2] << 2) | (packet[3] & 0x03)) #define GET_ABS_Y(packet) ((packet[2] << 2) | (packet[3] & 0x03))
/** Driver version. */ /** 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 * 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,6 +303,27 @@ static int fsp_get_revision(struct psmouse *psmouse, int *rev)
return 0; 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 int fsp_get_buttons(struct psmouse *psmouse, int *btn)
{ {
static const int buttons[] = { static const int buttons[] = {
...@@ -1000,16 +1021,21 @@ static int fsp_reconnect(struct psmouse *psmouse) ...@@ -1000,16 +1021,21 @@ static int fsp_reconnect(struct psmouse *psmouse)
int fsp_init(struct psmouse *psmouse) int fsp_init(struct psmouse *psmouse)
{ {
struct fsp_data *priv; struct fsp_data *priv;
int ver, rev; int ver, rev, sn = 0;
int error; int error;
if (fsp_get_version(psmouse, &ver) || if (fsp_get_version(psmouse, &ver) ||
fsp_get_revision(psmouse, &rev)) { fsp_get_revision(psmouse, &rev)) {
return -ENODEV; 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", psmouse_info(psmouse,
ver >> 4, ver & 0x0F, rev, fsp_drv_ver); "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); psmouse->private = priv = kzalloc(sizeof(struct fsp_data), GFP_KERNEL);
if (!priv) if (!priv)
......
...@@ -65,6 +65,14 @@ ...@@ -65,6 +65,14 @@
#define FSP_BIT_SWC1_GST_GRP1 BIT(6) #define FSP_BIT_SWC1_GST_GRP1 BIT(6)
#define FSP_BIT_SWC1_BX_COMPAT BIT(7) #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 */ /* Finger-sensing Pad packet formating related definitions */
/* absolute packet type */ /* absolute packet type */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment