forked from Minki/linux
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:
parent
9ac7b1a36c
commit
d3132c5c95
@ -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)
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user