For sure.
Better code in attachment (correctly remove 4024 access for 0903).
On 2018-01-24 11:03, Igor Filatov wrote:
I have a feeling that for 0903 commands 4023 and 4024 mean something
different. I-byte mean is weird. given 2-byte "pixels".
diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c
index 1152509..8ba2cdb 100644
--- a/libfprint/drivers/elan.c
+++ b/libfprint/drivers/elan.c
@@ -45,6 +45,9 @@ static struct fpi_frame_asmbl_ctx assembling_ctx = {
};
struct elan_dev {
+ /* const */
+ unsigned short fwver;
+
/* device config */
unsigned short dev_type;
/* number of pixels to discard on left and right (along raw image height)
@@ -440,6 +443,11 @@ static int elan_need_calibration(struct elan_dev *elandev)
{
fp_dbg("");
+ if (elandev->fwver <= 0x0153) {
+ fp_dbg("Old 0x%04x firmware. How to calibrate?",elandev->fwver);
+ return 0;
+ }
+
unsigned short calib_mean =
elandev->last_read[0] * 0xff + elandev->last_read[1];
unsigned short *bg_data = ((GSList *) elandev->frames)->data;
@@ -469,7 +477,7 @@ enum calibrate_states {
CALIBRATE_NUM_STATES,
};
-static void alibrate_run_state(struct fpi_ssm *ssm)
+static void calibrate_run_state(struct fpi_ssm *ssm)
{
struct fp_img_dev *dev = ssm->priv;
struct elan_dev *elandev = dev->priv;
@@ -543,7 +551,7 @@ static void elan_calibrate(struct fp_img_dev *dev)
elan_dev_reset(elandev);
struct fpi_ssm *ssm =
- fpi_ssm_new(dev->dev, alibrate_run_state, CALIBRATE_NUM_STATES);
+ fpi_ssm_new(dev->dev, calibrate_run_state, CALIBRATE_NUM_STATES);
ssm->priv = dev;
fpi_ssm_start(ssm, calibrate_complete);
}
@@ -572,8 +580,9 @@ static void activate_run_state(struct fpi_ssm *ssm)
elan_run_cmd(ssm, &get_fw_ver_cmd, ELAN_CMD_TIMEOUT);
break;
case ACTIVATE_PRINT_FW_VER:
- fp_dbg("FW ver %d.%d", elandev->last_read[0],
- elandev->last_read[1]);
+ elandev->fwver = elandev->last_read[0]<<8 | elandev->last_read[1];
+ fp_dbg("FW ver 0x%04x", elandev->fwver);
+
fpi_ssm_next_state(ssm);
break;
case ACTIVATE_GET_SENSOR_DIM:
diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h
index ee2153c..0f74069 100644
--- a/libfprint/drivers/elan.h
+++ b/libfprint/drivers/elan.h
@@ -103,7 +103,7 @@ static const struct elan_cmd get_calib_mean_cmd = {
.cmd = {0x40, 0x24},
.response_len = 0x2,
.response_in = ELAN_EP_CMD_IN,
- .devices = ELAN_ALL_DEVICES,
+ .devices = ELAN_0907|ELAN_0C03|ELAN_0C16|ELAN_0C1A|ELAN_0C26,
};
static const struct elan_cmd reset_sensor_cmd = {
@@ -113,6 +113,13 @@ static const struct elan_cmd reset_sensor_cmd = {
.devices = ELAN_ALL_DEVICES,
};
+static const struct elan_cmd status_cmd = {
+ .cmd = {0x40, 0x13},
+ .response_len = 0x1,
+ .response_in = ELAN_EP_CMD_IN,
+ .devices = ELAN_ALL_DEVICES,
+};
+
static const struct elan_cmd fuse_load_cmd = {
.cmd = {0x40, 0x14},
.response_len = 0x0,
_______________________________________________
fprint mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/fprint