Hello Igor,

This hack for firmware <= 0x0153 working.

diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c
index 1152509..a2cc013 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:
@@ -601,7 +610,10 @@ static void activate_run_state(struct fpi_ssm *ssm)
 		fpi_ssm_next_state(ssm);
 		break;
 	case ACTIVATE_GET_MEAN:
-		elan_run_cmd(ssm, &get_calib_mean_cmd, ELAN_CMD_TIMEOUT);
+		if (elandev->fwver > 0x0153)
+			elan_run_cmd(ssm, &get_calib_mean_cmd, ELAN_CMD_TIMEOUT);
+		else
+			fpi_ssm_next_state(ssm);			
 		break;
 	}
 }
diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h
index ee2153c..562b272 100644
--- a/libfprint/drivers/elan.h
+++ b/libfprint/drivers/elan.h
@@ -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