fpc1020_regs.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /* FPC1020 Touch sensor driver
  2. *
  3. * Copyright (c) 2013,2014 Fingerprint Cards AB <tech@fingerprints.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License Version 2
  7. * as published by the Free Software Foundation.
  8. */
  9. #ifndef __FPC1020_REGS_H
  10. #define __FPC1020_REGS_H
  11. typedef enum {
  12. /* --- Common registers --- */
  13. FPC102X_REG_FPC_STATUS = 20, /* RO, 1 bytes */
  14. FPC102X_REG_READ_INTERRUPT = 24, /* RO, 1 byte */
  15. FPC102X_REG_READ_INTERRUPT_WITH_CLEAR = 28, /* RO, 1 byte */
  16. FPC102X_REG_READ_ERROR_WITH_CLEAR = 56, /* RO, 1 byte */
  17. FPC102X_REG_MISO_EDGE_RIS_EN = 64, /* WO, 1 byte */
  18. FPC102X_REG_FPC_CONFIG = 68, /* RW, 1 byte */
  19. FPC102X_REG_IMG_SMPL_SETUP = 76, /* RW, 3 bytes */
  20. FPC102X_REG_CLOCK_CONFIG = 80, /* RW, 1 byte */
  21. FPC102X_REG_IMG_CAPT_SIZE = 84, /* RW, 4 bytes */
  22. FPC102X_REG_IMAGE_SETUP = 92, /* RW, 1 byte */
  23. FPC102X_REG_ADC_TEST_CTRL = 96, /* RW, 1 byte */
  24. FPC102X_REG_IMG_RD = 100, /* RW, 1 byte */
  25. FPC102X_REG_SAMPLE_PX_DLY = 104, /* RW, 8 bytes */
  26. FPC102X_REG_PXL_RST_DLY = 108, /* RW, 1 byte */
  27. FPC102X_REG_TST_COL_PATTERN_EN = 120, /* RW, 2 bytes */
  28. FPC102X_REG_CLK_BIST_RESULT = 124, /* RW, 4 bytes */
  29. FPC102X_REG_ADC_WEIGHT_SETUP = 132, /* RW, 1 byte */
  30. FPC102X_REG_ANA_TEST_MUX = 136, /* RW, 4 bytes */
  31. FPC102X_REG_FINGER_DRIVE_CONF = 140, /* RW, 1 byte */
  32. FPC102X_REG_FINGER_DRIVE_DLY = 144, /* RW, 1 byte */
  33. FPC102X_REG_OSC_TRIM = 148, /* RW, 2 bytes */
  34. FPC102X_REG_ADC_WEIGHT_TABLE = 152, /* RW, 10 bytes */
  35. FPC102X_REG_ADC_SETUP = 156, /* RW, 5 bytes */
  36. FPC102X_REG_ADC_SHIFT_GAIN = 160, /* RW, 2 bytes */
  37. FPC102X_REG_BIAS_TRIM = 164, /* RW, 1 byte */
  38. FPC102X_REG_PXL_CTRL = 168, /* RW, 2 bytes */
  39. FPC102X_REG_FPC_DEBUG = 208, /* RO, 1 bytes */
  40. FPC102X_REG_FINGER_PRESENT_STATUS = 212, /* RO, 2 bytes */
  41. FPC102X_REG_HWID = 252, /* RO, 2 bytes */
  42. /* --- fpc1020/21 specific --- */
  43. FPC1020_REG_FNGR_DET_THRES = 216, /* RW, 1 byte */
  44. FPC1020_REG_FNGR_DET_CNTR = 220, /* RW, 2 bytes */
  45. /* --- fpc1150 specific --- */
  46. FPC1150_REG_OFFSET = 1000, /* Not a register ! */
  47. FPC1150_REG_FNGR_DET_THRES = 1216, /* RW, 4 byte */
  48. FPC1150_REG_FNGR_DET_CNTR = 1220, /* RW, 4 bytes */
  49. /* --- fpc1022 specific --- */
  50. FPC1022_REG_OFFSET = 2000, /* Not a register ! */
  51. FPC1022_REG_CLOCK_CONFIG = 2080, /* RW, 2 bytes */
  52. FPC1022_REG_SAMPLE_PX_DLY = 2104, /* RW, 9 bytes */
  53. FPC1022_REG_CLK_BIST_RESULT = 2124, /* RO, 8 bytes */
  54. FPC1022_REG_FINGER_PRESENT_STATUS = 2212, /* RO, 4 bytes */
  55. FPC1022_REG_FNGR_DET_THRES = 2216, /* RW, 10 bytes */
  56. FPC1022_REG_FINGER_DRIVE_DLY = 2144, /* RW, 8 bytes */
  57. FPC1022_REG_FNGR_DET_CNTR = 2220, /* RW, 4 bytes */
  58. } fpc1020_reg_t;
  59. #define FPC1020_REG_MAX_SIZE 10
  60. #define FPC1020_REG_SIZE(reg) ( \
  61. ((reg) == FPC102X_REG_FPC_STATUS) ? 1 : \
  62. ((reg) == FPC102X_REG_READ_INTERRUPT) ? 1 : \
  63. ((reg) == FPC102X_REG_READ_INTERRUPT_WITH_CLEAR) ? 1 : \
  64. ((reg) == FPC102X_REG_READ_ERROR_WITH_CLEAR) ? 1 : \
  65. ((reg) == FPC102X_REG_MISO_EDGE_RIS_EN) ? 1 : \
  66. ((reg) == FPC102X_REG_FPC_CONFIG) ? 1 : \
  67. ((reg) == FPC102X_REG_IMG_SMPL_SETUP) ? 3 : \
  68. ((reg) == FPC102X_REG_CLOCK_CONFIG) ? 1 : \
  69. ((reg) == FPC102X_REG_IMG_CAPT_SIZE) ? 4 : \
  70. ((reg) == FPC102X_REG_IMAGE_SETUP) ? 1 : \
  71. ((reg) == FPC102X_REG_ADC_TEST_CTRL) ? 1 : \
  72. ((reg) == FPC102X_REG_IMG_RD) ? 1 : \
  73. ((reg) == FPC102X_REG_SAMPLE_PX_DLY) ? 8 : \
  74. ((reg) == FPC102X_REG_PXL_RST_DLY) ? 1 : \
  75. ((reg) == FPC102X_REG_TST_COL_PATTERN_EN) ? 2 : \
  76. ((reg) == FPC102X_REG_CLK_BIST_RESULT) ? 4 : \
  77. ((reg) == FPC102X_REG_ADC_WEIGHT_SETUP) ? 1 : \
  78. ((reg) == FPC102X_REG_ANA_TEST_MUX) ? 4 : \
  79. ((reg) == FPC102X_REG_FINGER_DRIVE_CONF) ? 1 : \
  80. ((reg) == FPC102X_REG_FINGER_DRIVE_DLY) ? 1 : \
  81. ((reg) == FPC102X_REG_OSC_TRIM) ? 2 : \
  82. ((reg) == FPC102X_REG_ADC_WEIGHT_TABLE) ? 10 :\
  83. ((reg) == FPC102X_REG_ADC_SETUP) ? 5 : \
  84. ((reg) == FPC102X_REG_ADC_SHIFT_GAIN) ? 2 : \
  85. ((reg) == FPC102X_REG_BIAS_TRIM) ? 1 : \
  86. ((reg) == FPC102X_REG_PXL_CTRL) ? 2 : \
  87. ((reg) == FPC102X_REG_FPC_DEBUG) ? 2 : \
  88. ((reg) == FPC102X_REG_FINGER_PRESENT_STATUS) ? 2 : \
  89. ((reg) == FPC102X_REG_HWID) ? 2 : \
  90. \
  91. ((reg) == FPC1020_REG_FNGR_DET_THRES) ? 1 : \
  92. ((reg) == FPC1020_REG_FNGR_DET_CNTR) ? 2 : \
  93. \
  94. ((reg) == FPC1150_REG_FNGR_DET_THRES) ? 4 : \
  95. ((reg) == FPC1150_REG_FNGR_DET_CNTR) ? 4 : \
  96. \
  97. ((reg) == FPC1022_REG_CLOCK_CONFIG) ? 2 : \
  98. ((reg) == FPC1022_REG_CLK_BIST_RESULT) ? 8 : \
  99. ((reg) == FPC1022_REG_SAMPLE_PX_DLY) ? 9 : \
  100. ((reg) == FPC1022_REG_FINGER_PRESENT_STATUS) ? 4 : \
  101. ((reg) == FPC1022_REG_FINGER_DRIVE_DLY) ? 8 : \
  102. ((reg) == FPC1022_REG_FNGR_DET_THRES) ? 10 : \
  103. ((reg) == FPC1022_REG_FNGR_DET_CNTR) ? 4 : \
  104. 0)
  105. #define FPC1020_REG_ACCESS_DUMMY_BYTES(reg) ( \
  106. ((reg) == FPC102X_REG_FPC_STATUS) ? 1 : \
  107. ((reg) == FPC102X_REG_FPC_DEBUG) ? 1 : 0)
  108. #define FPC1020_REG_TO_ACTUAL(reg) ( \
  109. ((reg) >= FPC1022_REG_OFFSET) ? ((reg) - FPC1022_REG_OFFSET) : \
  110. ((reg) >= FPC1150_REG_OFFSET) ? ((reg) - FPC1150_REG_OFFSET) : (reg))
  111. #endif /* __FPC1020_REGS_H */