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