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>
This commit is contained in:
Tom Hughes 2020-08-18 10:56:47 -07:00 committed by Commit Bot
parent fe521237b3
commit bd67306369
5 changed files with 31 additions and 0 deletions

View File

@ -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();
}

View File

@ -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;
}

View File

@ -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] */

View File

@ -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;

View File

@ -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();
}