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: Tai-hwa Liang <avatar@sentelic.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
Tai-hwa Liang 2012-05-07 08:45:58 -07:00 committed by Dmitry Torokhov
parent 9ac7b1a36c
commit d3132c5c95
2 changed files with 38 additions and 4 deletions

View File

@ -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)
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)
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)

View File

@ -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 */