diff options
Diffstat (limited to 'driver/fingerprint/elan/elan_sensor_pal.h')
-rw-r--r-- | driver/fingerprint/elan/elan_sensor_pal.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/driver/fingerprint/elan/elan_sensor_pal.h b/driver/fingerprint/elan/elan_sensor_pal.h new file mode 100644 index 0000000000..08f0c6e2c9 --- /dev/null +++ b/driver/fingerprint/elan/elan_sensor_pal.h @@ -0,0 +1,126 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +/* ELAN Platform Abstraction Layer callbacks */ + +#ifndef ELAN_SENSOR_PAL_H_ +#define ELAN_SENSOR_PAL_H_ + +/* ELAN error codes */ +enum elan_error_code { + ELAN_ERROR_NONE = 0, + ELAN_ERROR_SPI = 1, + ELAN_ERROR_SCAN = 2, + ELAN_ERROR_CAL = 3, + ELAN_ERROR_DEFECT_NUM = 4, + ELAN_ERROR_DEFECT_X = 5, + ELAN_ERROR_DEFECT_Y = 6 +}; + +/* ELAN error info */ +struct fp_sensor_info_t { + uint32_t num_defective_pixels; + uint16_t sensor_error_code; +}; + +/** + * @brief Write fp command to the sensor + * + * @param[in] fp_cmd One byte fp command to write + * + * @return 0 on success. + * negative value on error. + */ +int elan_write_cmd(uint8_t fp_cmd); + +/** + * @brief Read fp register data from the sensor + * + * @param[in] fp_cmd One byte fp command to read + * @param[out] regdata One byte data where register's data will be stored + * + * @return 0 on success. + * negative value on error. + */ +int elan_read_cmd(uint8_t fp_cmd, uint8_t *regdata); + +/** + * @brief Transfers and receives SPI data. + * + * @param[in] tx The buffer to transfer + * @param[in] tx_len The length to transfer + * @param[out] rx The buffer where read data will be stored + * @param[in] rx_len The length to receive + * @return 0 on success. + * negative value on error. + */ +int elan_spi_transaction(uint8_t *tx, int tx_len, uint8_t *rx, int rx_len); + +/** + * @brief Write fp register data to sensor + * + * @param[in] regaddr One byte register address to write + * @param[in] regdata Data to write to register + * + * @return 0 on success. + * negative value on error. + */ +int elan_write_register(uint8_t regaddr, uint8_t regdata); + +/** + * @brief Select sensor RAM page of register + * + * @param[in] page The number of RAM page control registers + * + * @return 0 on success. + * negative value on error. + */ +int elan_write_page(uint8_t page); + +/** + * @brief Write register table to fp sensor + * + * Using a table to write data to sensor register. + * This table contains multiple pairs of address and data to + * be written. + * + * @param[in] reg_table The register address to write + * @param[in] length The data to write to register + * + * @return 0 on success. + * negative value on error. + */ +int elan_write_reg_vector(const uint8_t *reg_table, int length); + +/** + * Get 14bits raw image data from ELAN fingerprint sensor + * + * @param[out] short_raw The memory buffer to receive fingerprint image + * raw data, buffer length is: + * (IMAGE_WIDTH*IMAGE_HEIGHT)*sizeof(uint16_t) + * + * @return 0 on success. + * negative value on error. + */ +int raw_capture(uint16_t *short_raw); + +/** + * Execute calibrate ELAN fingerprint sensor flow. + * + * @return 0 on success. + * negative value on error. + */ +int elan_execute_calibration(void); + +/** + * Runs a test for defective pixels. + * + * @param[out] fp_sensor_info Structure containing output data. + * + * @return 0 on success. + * negative value on error. + */ +int fp_sensor_maintenance(fp_sensor_info_t *fp_sensor_info); + +#endif |