blob: cd15e2da824bf5ff0bdd4aecb29d609c39674775 [file] [log] [blame]
/* FPC1020 Touch sensor driver
*
* Copyright (c) 2013,2014 Fingerprint Cards AB <tech@fingerprints.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License Version 2
* as published by the Free Software Foundation.
*/
#ifndef __FPC1020_REGS_H
#define __FPC1020_REGS_H
typedef enum {
/* --- Common registers --- */
FPC102X_REG_FPC_STATUS = 20, /* RO, 1 bytes */
FPC102X_REG_READ_INTERRUPT = 24, /* RO, 1 byte */
FPC102X_REG_READ_INTERRUPT_WITH_CLEAR = 28, /* RO, 1 byte */
FPC102X_REG_READ_ERROR_WITH_CLEAR = 56, /* RO, 1 byte */
FPC102X_REG_MISO_EDGE_RIS_EN = 64, /* WO, 1 byte */
FPC102X_REG_FPC_CONFIG = 68, /* RW, 1 byte */
FPC102X_REG_IMG_SMPL_SETUP = 76, /* RW, 3 bytes */
FPC102X_REG_CLOCK_CONFIG = 80, /* RW, 1 byte */
FPC102X_REG_IMG_CAPT_SIZE = 84, /* RW, 4 bytes */
FPC102X_REG_IMAGE_SETUP = 92, /* RW, 1 byte */
FPC102X_REG_ADC_TEST_CTRL = 96, /* RW, 1 byte */
FPC102X_REG_IMG_RD = 100, /* RW, 1 byte */
FPC102X_REG_SAMPLE_PX_DLY = 104, /* RW, 8 bytes */
FPC102X_REG_PXL_RST_DLY = 108, /* RW, 1 byte */
FPC102X_REG_TST_COL_PATTERN_EN = 120, /* RW, 2 bytes */
FPC102X_REG_CLK_BIST_RESULT = 124, /* RW, 4 bytes */
FPC102X_REG_ADC_WEIGHT_SETUP = 132, /* RW, 1 byte */
FPC102X_REG_ANA_TEST_MUX = 136, /* RW, 4 bytes */
FPC102X_REG_FINGER_DRIVE_CONF = 140, /* RW, 1 byte */
FPC102X_REG_FINGER_DRIVE_DLY = 144, /* RW, 1 byte */
FPC102X_REG_OSC_TRIM = 148, /* RW, 2 bytes */
FPC102X_REG_ADC_WEIGHT_TABLE = 152, /* RW, 10 bytes */
FPC102X_REG_ADC_SETUP = 156, /* RW, 5 bytes */
FPC102X_REG_ADC_SHIFT_GAIN = 160, /* RW, 2 bytes */
FPC102X_REG_BIAS_TRIM = 164, /* RW, 1 byte */
FPC102X_REG_PXL_CTRL = 168, /* RW, 2 bytes */
FPC102X_REG_FPC_DEBUG = 208, /* RO, 1 bytes */
FPC102X_REG_FINGER_PRESENT_STATUS = 212, /* RO, 2 bytes */
FPC102X_REG_HWID = 252, /* RO, 2 bytes */
/* --- fpc1020/21 specific --- */
FPC1020_REG_FNGR_DET_THRES = 216, /* RW, 1 byte */
FPC1020_REG_FNGR_DET_CNTR = 220, /* RW, 2 bytes */
/* --- fpc1150 specific --- */
FPC1150_REG_OFFSET = 1000, /* Not a register ! */
FPC1150_REG_FNGR_DET_THRES = 1216, /* RW, 4 byte */
FPC1150_REG_FNGR_DET_CNTR = 1220, /* RW, 4 bytes */
} fpc1020_reg_t;
#define FPC1020_REG_MAX_SIZE 10
#define FPC1020_REG_SIZE(reg) ( \
((reg) == FPC102X_REG_FPC_STATUS) ? 1 : \
((reg) == FPC102X_REG_READ_INTERRUPT) ? 1 : \
((reg) == FPC102X_REG_READ_INTERRUPT_WITH_CLEAR) ? 1 : \
((reg) == FPC102X_REG_READ_ERROR_WITH_CLEAR) ? 1 : \
((reg) == FPC102X_REG_MISO_EDGE_RIS_EN) ? 1 : \
((reg) == FPC102X_REG_FPC_CONFIG) ? 1 : \
((reg) == FPC102X_REG_IMG_SMPL_SETUP) ? 3 : \
((reg) == FPC102X_REG_CLOCK_CONFIG) ? 1 : \
((reg) == FPC102X_REG_IMG_CAPT_SIZE) ? 4 : \
((reg) == FPC102X_REG_IMAGE_SETUP) ? 1 : \
((reg) == FPC102X_REG_ADC_TEST_CTRL) ? 1 : \
((reg) == FPC102X_REG_IMG_RD) ? 1 : \
((reg) == FPC102X_REG_SAMPLE_PX_DLY) ? 8 : \
((reg) == FPC102X_REG_PXL_RST_DLY) ? 1 : \
((reg) == FPC102X_REG_TST_COL_PATTERN_EN) ? 2 : \
((reg) == FPC102X_REG_CLK_BIST_RESULT) ? 4 : \
((reg) == FPC102X_REG_ADC_WEIGHT_SETUP) ? 1 : \
((reg) == FPC102X_REG_ANA_TEST_MUX) ? 4 : \
((reg) == FPC102X_REG_FINGER_DRIVE_CONF) ? 1 : \
((reg) == FPC102X_REG_FINGER_DRIVE_DLY) ? 1 : \
((reg) == FPC102X_REG_OSC_TRIM) ? 2 : \
((reg) == FPC102X_REG_ADC_WEIGHT_TABLE) ? 10 :\
((reg) == FPC102X_REG_ADC_SETUP) ? 5 : \
((reg) == FPC102X_REG_ADC_SHIFT_GAIN) ? 2 : \
((reg) == FPC102X_REG_BIAS_TRIM) ? 1 : \
((reg) == FPC102X_REG_PXL_CTRL) ? 2 : \
((reg) == FPC102X_REG_FPC_DEBUG) ? 2 : \
((reg) == FPC102X_REG_FINGER_PRESENT_STATUS) ? 2 : \
((reg) == FPC102X_REG_HWID) ? 2 : \
\
((reg) == FPC1020_REG_FNGR_DET_THRES) ? 1 : \
((reg) == FPC1020_REG_FNGR_DET_CNTR) ? 2 : \
\
((reg) == FPC1150_REG_FNGR_DET_THRES) ? 4 : \
((reg) == FPC1150_REG_FNGR_DET_CNTR) ? 4 : \
0)
#define FPC1020_REG_ACCESS_DUMMY_BYTES(reg) ( \
((reg) == FPC102X_REG_FPC_STATUS) ? 1 : \
((reg) == FPC102X_REG_FPC_DEBUG) ? 1 : 0)
#define FPC1020_REG_TO_ACTUAL(reg) ( \
((reg) >= FPC1150_REG_OFFSET) ? ((reg) - FPC1150_REG_OFFSET) : (reg) )
#endif /* __FPC1020_REGS_H */