summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2020-08-18 10:56:47 -0700
committerCommit Bot <commit-bot@chromium.org>2020-08-31 00:34:25 +0000
commitbd67306369e6141fefaf8d8a6ea814a03d02f88d (patch)
treea378be16cc83792a2e2119d0a781d64d23ff2ec8
parentfe521237b361da3be09aac94c976d038046f0752 (diff)
downloadchrome-ec-bd67306369e6141fefaf8d8a6ea814a03d02f88d.tar.gz
fpsensor: Run maintenance when in maintenance mode
BRANCH=none BUG=b:76037094 TEST=make buildall -j Signed-off-by: Tom Hughes <tomhughes@chromium.org> Change-Id: Ibe8649c3cf77ef4542b5fc46d7df5eee03293b56 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2364755 Commit-Queue: Craig Hesling <hesling@chromium.org> Reviewed-by: Craig Hesling <hesling@chromium.org>
-rw-r--r--common/fpsensor/fpsensor.c3
-rw-r--r--common/mock/fp_sensor_mock.c5
-rw-r--r--include/ec_commands.h3
-rw-r--r--include/mock/fp_sensor_mock.h2
-rw-r--r--test/fpsensor_state.c18
5 files changed, 31 insertions, 0 deletions
diff --git a/common/fpsensor/fpsensor.c b/common/fpsensor/fpsensor.c
index 01a6157cda..bd36717707 100644
--- a/common/fpsensor/fpsensor.c
+++ b/common/fpsensor/fpsensor.c
@@ -252,6 +252,9 @@ void fp_task(void)
} else if (mode & FP_MODE_RESET_SENSOR) {
fp_reset_and_clear_context();
sensor_mode &= ~FP_MODE_RESET_SENSOR;
+ } else if (mode & FP_MODE_SENSOR_MAINTENANCE) {
+ fp_maintenance();
+ sensor_mode &= ~FP_MODE_SENSOR_MAINTENANCE;
} else {
fp_sensor_low_power();
}
diff --git a/common/mock/fp_sensor_mock.c b/common/mock/fp_sensor_mock.c
index 778b7c270d..18e6d656be 100644
--- a/common/mock/fp_sensor_mock.c
+++ b/common/mock/fp_sensor_mock.c
@@ -76,3 +76,8 @@ int fp_finger_enroll(uint8_t *image, int *completion)
{
return mock_ctrl_fp_sensor.fp_finger_enroll_return;
}
+
+int fp_maintenance(void)
+{
+ return mock_ctrl_fp_sensor.fp_maintenance_return;
+}
diff --git a/include/ec_commands.h b/include/ec_commands.h
index d592dc2e18..841d10dae7 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -6355,6 +6355,8 @@ struct ec_params_fp_passthru {
#define FP_MODE_MATCH BIT(6)
/* Reset and re-initialize the sensor. */
#define FP_MODE_RESET_SENSOR BIT(7)
+/* Sensor maintenance for dead pixels. */
+#define FP_MODE_SENSOR_MAINTENANCE BIT(8)
/* special value: don't change anything just read back current mode */
#define FP_MODE_DONT_CHANGE BIT(31)
@@ -6366,6 +6368,7 @@ struct ec_params_fp_passthru {
FP_MODE_ENROLL_IMAGE | \
FP_MODE_MATCH | \
FP_MODE_RESET_SENSOR | \
+ FP_MODE_SENSOR_MAINTENANCE | \
FP_MODE_DONT_CHANGE)
/* Capture types defined in bits [30..28] */
diff --git a/include/mock/fp_sensor_mock.h b/include/mock/fp_sensor_mock.h
index df2dc7614e..432802348c 100644
--- a/include/mock/fp_sensor_mock.h
+++ b/include/mock/fp_sensor_mock.h
@@ -25,6 +25,7 @@ struct mock_ctrl_fp_sensor {
int fp_enrollment_begin_return;
int fp_enrollment_finish_return;
int fp_finger_enroll_return;
+ int fp_maintenance_return;
};
#define MOCK_CTRL_DEFAULT_FP_SENSOR \
@@ -39,6 +40,7 @@ struct mock_ctrl_fp_sensor {
.fp_enrollment_begin_return = 0, \
.fp_enrollment_finish_return = 0, \
.fp_finger_enroll_return = EC_MKBP_FP_ERR_ENROLL_OK, \
+ .fp_maintenance_return = EC_SUCCESS \
}
extern struct mock_ctrl_fp_sensor mock_ctrl_fp_sensor;
diff --git a/test/fpsensor_state.c b/test/fpsensor_state.c
index 9681bcad39..3822fe49ab 100644
--- a/test/fpsensor_state.c
+++ b/test/fpsensor_state.c
@@ -169,6 +169,23 @@ test_static int test_fp_set_sensor_mode(void)
return EC_SUCCESS;
}
+test_static int test_fp_set_maintenance_mode(void)
+{
+ uint32_t output_mode = 0;
+
+ /* GIVEN request to change to maintenance sensor mode */
+ TEST_ASSERT(sensor_mode == 0);
+ /* THEN succeed */
+ TEST_ASSERT(fp_set_sensor_mode(FP_MODE_SENSOR_MAINTENANCE,
+ &output_mode) == EC_RES_SUCCESS);
+ /* THEN requested mode is returned */
+ TEST_ASSERT(output_mode == FP_MODE_SENSOR_MAINTENANCE);
+ /* THEN sensor_mode is updated */
+ TEST_ASSERT(sensor_mode == FP_MODE_SENSOR_MAINTENANCE);
+
+ return EC_SUCCESS;
+}
+
void run_test(int argc, char **argv)
{
RUN_TEST(test_fp_enc_status_valid_flags);
@@ -176,5 +193,6 @@ void run_test(int argc, char **argv)
RUN_TEST(test_set_fp_tpm_seed);
RUN_TEST(test_set_fp_tpm_seed_again);
RUN_TEST(test_fp_set_sensor_mode);
+ RUN_TEST(test_fp_set_maintenance_mode);
test_print_result();
}