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
fprint@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/fprint

Reply via email to