OSDN Git Service

Added fingerprint reader driver, fixed kernel and config
[android-x86/device-motion-m1400.git] / fingerprint / aes2501_regs.h
diff --git a/fingerprint/aes2501_regs.h b/fingerprint/aes2501_regs.h
new file mode 100644 (file)
index 0000000..a01de16
--- /dev/null
@@ -0,0 +1,464 @@
+
+/*
+ * aes2501_regs.h -- AuthenTec AES2501 Fingerprint Sensor Driver for Linux
+ *
+ * Maintainer: Cyrille Bagard <nocbos@gmail.com>
+ *
+ * Copyright (C) 2007 Cyrille Bagard
+ *
+ * This file is part of the AES2501 driver.
+ *
+ * the AES2501 driver is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * the AES2501 driver is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with the AES2501 driver; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+
+#ifndef __AES2501_REGS_H
+#define __AES2501_REGS_H
+
+
+
+/*
+ * AES2501 Control Register 1 (CTRL1)
+ */
+
+#define AES2501_REG_CTRL1 0x80
+
+#define AES2501_CTRL1_MASTER_RESET     0x01    /* Master reset, same as Power On Reset */
+#define AES2501_CTRL1_SCAN_RESET       0x02    /* Scan reset: stop and restart the scan sequencer */
+#define AES2501_CTRL1_REG_UPDATE       0x04    /* 1 = continuously updated, 0 = updated prior to starting a scan */
+
+
+/*
+ * AES2501 Control Register 2 (CTRL2)
+ */
+
+#define AES2501_REG_CTRL2 0x81
+
+#define AES2501_CTRL2_CONTINUOUS       0x01    /* 1 = continuous scans, 0 = single scans */
+#define AES2501_CTRL2_READ_REGS                0x02    /* Read the current state of the local registers in the Sensor IC */
+#define AES2501_CTRL2_SET_ONE_SHOT     0x04    /* Set the one-shot flip-flop */
+#define AES2501_CTRL2_CLR_ONE_SHOT     0x08    /* Clear the one-shot flip-flop */
+#define AES2501_CTRL2_READ_ID          0x10    /* Read the ID register of the chip */
+
+
+/*
+ * AES2501 Excitation Common Control Register (EXCITCTRL)
+ */
+
+#define AES2501_REG_EXCITCTRL 0x82
+
+#define AES2501_EXCITCTRL_LO_PWR       0x01    /* If set, enable detection in sleep/suspend mode */
+#define AES2501_EXCITCTRL_AUTO_CAL     0x02    /* If set, perform finger detection calibration */
+#define AES2501_EXCITCTRL_SGC_ENABLE   0x04    /* ??? */
+#define AES2501_EXCITCTRL_SGC_RESTART  0x08    /* ??? */
+
+#define AES2501_EXCITCTRL_EXCIT_SQR    0x20    /* Select the (1=square | 0=sine) wave finger drive signal */
+#define AES2501_EXCITCTRL_EXCIT_BOOST  0x10    /* TODO: understand this part */
+
+
+/*
+ * AES2501 Detect Control Register (DETCTRL)
+ */
+
+#define AES2501_REG_DETCTRL 0x83
+
+enum aes2501_detection_rate {
+
+       AES2501_DETCTRL_DRATE_CONTINUOUS        = 0x00, /* Detection cycles occur continuously */
+       AES2501_DETCTRL_DRATE_16_MS             = 0x01, /* Detection cycles occur every 16.62 ms */
+       AES2501_DETCTRL_DRATE_31_MS             = 0x02, /* Detection cycles occur every 31.24 ms */
+       AES2501_DETCTRL_DRATE_62_MS             = 0x03, /* Detection cycles occur every 62.50 ms */
+       AES2501_DETCTRL_DRATE_125_MS            = 0x04, /* Detection cycles occur every 125.0 ms */
+       AES2501_DETCTRL_DRATE_250_MS            = 0x05, /* Detection cycles occur every 250.0 ms */
+       AES2501_DETCTRL_DRATE_500_MS            = 0x06, /* Detection cycles occur every 500.0 ms */
+       AES2501_DETCTRL_DRATE_1_S               = 0x07  /* Detection cycles occur every 1 s */
+
+};
+
+enum aes2501_settling_delay {
+
+       AES2501_DETCTRL_SDELAY_31_MS    = 0x00, /* 31.25 ms */
+       AES2501_DETCTRL_SSDELAY_62_MS   = 0x10, /* 62.5 ms */
+       AES2501_DETCTRL_SSDELAY_125_MS  = 0x20, /* 125 ms */
+       AES2501_DETCTRL_SSDELAY_250_MS  = 0x30  /* 250 ms */
+
+};
+
+
+
+
+
+/*
+ * AES2501 Column Scan Rate Register (COLSCAN)
+ */
+
+#define AES2501_REG_COLSCAN 0x88
+
+enum aes2501_col_scan_rate {
+
+    AES2501_COLSCAN_SRATE_32_US                = 0x00, /* 32 us */
+    AES2501_COLSCAN_SRATE_64_US                = 0x01, /* 64 us */
+    AES2501_COLSCAN_SRATE_128_US       = 0x02, /* 128 us */
+    AES2501_COLSCAN_SRATE_256_US       = 0x03, /* 256 us */
+    AES2501_COLSCAN_SRATE_512_US       = 0x04, /* 512 us */
+    AES2501_COLSCAN_SRATE_1024_US      = 0x05, /* 1024 us */
+    AES2501_COLSCAN_SRATE_2048_US      = 0x06, /* 2048 us */
+
+};
+
+
+/*
+ * AES2501 Measure Drive Register (MEASDRV)
+ */
+
+#define AES2501_REG_MEASDRV 0x89
+
+enum aes2501_mesure_drive {
+
+       AES2501_MEASDRV_MDRIVE_0_325    = 0x00, /* 0.325 Vpp */
+       AES2501_MEASDRV_MDRIVE_0_65     = 0x01, /* 0.65 Vpp */
+       AES2501_MEASDRV_MDRIVE_1_3      = 0x02, /* 1.3 Vpp */
+       AES2501_MEASDRV_MDRIVE_2_6      = 0x03  /* 2.6 Vpp */
+
+};
+
+#define AES2501_MEASDRV_SQUARE         0x20    /* Select (1=square | 0=sine) wave drive during measure */
+#define AES2501_MEASDRV_MEASURE_SQUARE 0x10    /* 0 = use mesure drive setting, 1 = when sine wave is selected */
+
+
+/*
+ * AES2501 Measure Frequency Register (MEASFREQ)
+ */
+
+#define AES2501_REG_MEASFREQ 0x8a
+
+enum aes2501_measure_freq {
+
+       AES2501_MEASFREQ_125K   = 0x01, /* 125 kHz */
+       AES2501_MEASFREQ_250K   = 0x02, /* 250 kHz */
+       AES2501_MEASFREQ_500K   = 0x03, /* 500 kHz */
+       AES2501_MEASFREQ_1M     = 0x04, /* 1 MHz */
+       AES2501_MEASFREQ_2M     = 0x05  /* 2 MHz */
+
+};
+
+
+
+
+/*
+ * AES2501 Demod Phase 2 Register (DEMODPHASE2)
+ */
+
+#define AES2501_REG_DEMODPHASE2 0x8c
+
+#define DEMODPHASE_NONE                0x00
+
+#define DEMODPHASE_180_00      0x40    /* 180 degrees */
+#define DEMODPHASE_2_81                0x01    /* 2.8125 degrees */
+
+
+/*
+ * AES2501 Demod Phase 1 Register (DEMODPHASE1)
+ */
+
+#define AES2501_REG_DEMODPHASE1 0x8d
+
+#define DEMODPHASE_1_40                0x40    /* 1.40625 degrees */
+#define DEMODPHASE_0_02                0x01    /* 0.02197256 degrees */
+
+
+/*
+ * AES2501 Channel Gain Register (CHANGAIN)
+ */
+
+#define AES2501_REG_CHANGAIN 0x8e
+
+enum aes2501_sensor_gain1 {
+
+       AES2501_CHANGAIN_STAGE1_2X      = 0x00, /* 2x */
+       AES2501_CHANGAIN_STAGE1_4X      = 0x01, /* 4x */
+       AES2501_CHANGAIN_STAGE1_8X      = 0x02, /* 8x */
+       AES2501_CHANGAIN_STAGE1_16X     = 0x03  /* 16x */
+
+};
+
+enum aes2501_sensor_gain2 {
+
+       AES2501_CHANGAIN_STAGE2_2X      = 0x00, /* 2x */
+       AES2501_CHANGAIN_STAGE2_4X      = 0x10, /* 4x */
+       AES2501_CHANGAIN_STAGE2_8X      = 0x20, /* 8x */
+       AES2501_CHANGAIN_STAGE2_16X     = 0x30  /* 16x */
+
+};
+
+
+
+/*
+ * AES2501 A/D Reference High Register (ADREFHI)
+ */
+
+#define AES2501_REG_ADREFHI 0x91
+
+
+/*
+ * AES2501 A/D Reference Low Register (ADREFLO)
+ */
+
+#define AES2501_REG_ADREFLO 0x92
+
+
+/*
+ * AES2501 Start Row Register (STRTROW)
+ */
+
+#define AES2501_REG_STRTROW 0x93
+
+
+/*
+ * AES2501 End Row Register (ENDROW)
+ */
+
+#define AES2501_REG_ENDROW 0x94
+
+
+/*
+ * AES2501 Start Column Register (STRTCOL)
+ */
+
+#define AES2501_REG_STRTCOL 0x95
+
+
+/*
+ * AES2501 End Column Register (ENDCOL)
+ */
+
+#define AES2501_REG_ENDCOL 0x96
+
+
+/*
+ * AES2501 Data Format Register (DATFMT)
+ */
+
+#define AES2501_REG_DATFMT 0x97
+
+#define AES2501_DATFMT_EIGHT   0x40    /* 1 = 8-bit data, 0 = 4-bit data */
+#define AES2501_DATFMT_LOW_RES 0x20    /* TODO: understand this part */
+#define AES2501_DATFMT_BIN_IMG 0x10    /* TODO: understand this part */
+
+/* TODO: Threshold */
+
+
+/*
+ * AES2501 Image Data Control Register (IMAGCTRL)
+ */
+
+#define AES2501_REG_IMAGCTRL 0x98
+
+#define AES2501_IMAGCTRL_IMG_DATA_DISABLE      0x01    /* If set, image data message and authentication message are not returned when imaging */
+#define AES2501_IMAGCTRL_HISTO_DATA_ENABLE     0x02    /* if set, send histogram message when imaging */
+#define AES2501_IMAGCTRL_HISTO_EACH_ROW                0x04    /* A histo message is sent at the end of (1=each row | 0 = scanning) */  
+#define AES2501_IMAGCTRL_HISTO_FULL_ARRAY      0x08    /* 1 = full image array, 0 = 64x64 center */  
+#define AES2501_IMAGCTRL_REG_FIRST             0x10    /* Registers are returned (1=before | 0=after) image data */
+#define AES2501_IMAGCTRL_TST_REG_ENABLE                0x20    /* If set, Test Registers are returned with register messages */
+
+
+
+
+
+
+
+
+/*
+ * AES2501 Status Register (STAT)
+ */
+
+#define AES2501_REG_STAT 0x9a
+
+#define AES2501_STAT_SCAN      0x0f    /* Scan state */
+#define AES2501_STAT_ERROR     0x10    /* Framing error */
+#define AES2501_STAT_PAUSED    0x20    /* Scan paused */
+#define AES2501_STAT_RESET     0x40    /* Reset occurred */
+
+enum aes2501_scan_state {
+
+       STATE_WAITING_FOR_FINGER        = 0x00, /* Waiting for finger */
+       STATE_FINGER_SETTLING_DELAY     = 0x01, /* In Finger settling delay */
+       STATE_POWER_UP_DELAY            = 0x02, /* In power up delay */
+       STATE_WAITING_TO_START_SCAN     = 0x03, /* Waiting to start image scan */
+       STATE_PRELOADING_SUBARRAY_0     = 0x04, /* Pre-loading subarray 0 */
+       STATE_SETUP_FOR_ROW_ADVANCE     = 0x05, /* Setup for row advance */
+       STATE_WAITING_FOR_ROW_ADVANCE   = 0x06, /* Waiting for row advance */
+       STATE_PRELOADING_COL_0          = 0x07, /* Pre-loading column 0 */
+       STATE_SETUP_FOR_COL_ADVANCE     = 0x08, /* Setup for column advance */
+       STATE_WAITING_FOR_COL_ADVANCE   = 0x09, /* Waiting for column advance */
+       STATE_WAITING_FOR_SCAN_START    = 0x0a, /* Waiting for scan start */
+       STATE_WAITING_FOR_SCAN_END      = 0x0b, /* Waiting for scan end */
+       STATE_WAITING_FOR_ROW_SETUP     = 0x0c, /* Waiting for row setup */
+       STATE_WAITING_FOR_COL_TIME      = 0x0d, /* Waiting for one column time (depends on scan rate) */
+       STATE_WAITING_FOR_QUEUED_DATA   = 0x0e, /* Waiting for queued data transmission to be completed */
+       STATE_WAIT_FOR_128_US           = 0x0f  /* Wait for 128 us */
+
+};
+
+
+/*
+ * AES2501 Challenge Word 1 Register (CHWORD1)
+ */
+
+#define AES2501_REG_CHWORD1 0x9b
+
+#define AES2501_CHWORD1_IS_FINGER      0x01    /* If set, finger is present */
+
+
+/*
+ * AES2501 Challenge Word 2 Register (CHWORD2)
+ */
+
+#define AES2501_REG_CHWORD2 0x9c
+
+
+/*
+ * AES2501 Challenge Word 3 Register (CHWORD3)
+ */
+
+#define AES2501_REG_CHWORD3 0x9d
+
+
+/*
+ * AES2501 Challenge Word 4 Register (CHWORD4)
+ */
+
+#define AES2501_REG_CHWORD4 0x9e
+
+
+/*
+ * AES2501 Challenge Word 5 Register (CHWORD5)
+ */
+
+#define AES2501_REG_CHWORD5 0x9f
+
+
+
+
+
+/*
+ * AES2501 Test Register 1 (TREG1)
+ */
+
+#define AES2501_REG_TREG1 0xa1
+
+#define AES2501_TREG1_SBIAS_UNLCK      0x10    /* 1 = unlock the controlling of sense amp bias, 0 = sense amp bias changes */
+
+enum aes2501_sense_amp_bias {
+
+       AES2501_TREG1_SAMP_BIAS_2_UA    = 0x00, /* 2.5 uA */
+       AES2501_TREG1_SAMP_BIAS_5_UA    = 0x01, /* 5 uA */
+       AES2501_TREG1_SAMP_BIAS_8_UA    = 0x02, /* 8 uA */
+       AES2501_TREG1_SAMP_BIAS_10_UA   = 0x03  /* 10 uA */
+
+};
+
+
+
+
+/*
+ * AES2501 Auto-Calibration Offset Register (AUTOCALOFFSET)
+ */
+
+#define AES2501_REG_AUTOCALOFFSET 0xa8
+
+
+
+
+
+/*
+ * AES2501 Test Register C (TREGC)
+ */
+
+#define AES2501_REG_TREGC 0xac
+
+#define AES2501_TREGC_ENABLE   0x01    /* Enable the reading of the register in TREGD */
+
+
+/*
+ * AES2501 Test Register D (TREGD)
+ */
+
+#define AES2501_REG_TREGD 0xad
+
+
+
+
+
+/*
+ * AES2501 Low Power Oscillator On Time Register (LPONT)
+ */
+
+#define AES2501_REG_LPONT 0xb4
+
+/*
+ * This register sets the low power oscillator on time.
+ * Units are roughly equivalent to milliseconds.
+ */
+
+#define AES2501_LPONT_MIN_VALUE 0x00   /* 0 ms */
+#define AES2501_LPONT_MAX_VALUE 0x1f   /* About 16 ms */
+
+
+
+#define ENUM_REG(reg) _ ## reg = reg
+
+typedef enum _Aes2501Registers
+{
+       ENUM_REG(AES2501_REG_CTRL1),
+       ENUM_REG(AES2501_REG_CTRL2),
+       ENUM_REG(AES2501_REG_EXCITCTRL),
+       ENUM_REG(AES2501_REG_DETCTRL),
+       ENUM_REG(AES2501_REG_COLSCAN),
+       ENUM_REG(AES2501_REG_MEASDRV),
+       ENUM_REG(AES2501_REG_MEASFREQ),
+       ENUM_REG(AES2501_REG_DEMODPHASE2),
+       ENUM_REG(AES2501_REG_DEMODPHASE1),
+       ENUM_REG(AES2501_REG_CHANGAIN),
+       ENUM_REG(AES2501_REG_ADREFHI),
+       ENUM_REG(AES2501_REG_ADREFLO),
+       ENUM_REG(AES2501_REG_STRTROW),
+       ENUM_REG(AES2501_REG_ENDROW),
+       ENUM_REG(AES2501_REG_STRTCOL),
+       ENUM_REG(AES2501_REG_ENDCOL),
+       ENUM_REG(AES2501_REG_DATFMT),
+       ENUM_REG(AES2501_REG_IMAGCTRL),
+       ENUM_REG(AES2501_REG_STAT),
+       ENUM_REG(AES2501_REG_CHWORD1),
+       ENUM_REG(AES2501_REG_CHWORD2),
+       ENUM_REG(AES2501_REG_CHWORD3),
+       ENUM_REG(AES2501_REG_CHWORD4),
+       ENUM_REG(AES2501_REG_CHWORD5),
+       ENUM_REG(AES2501_REG_TREG1),
+       ENUM_REG(AES2501_REG_AUTOCALOFFSET),
+       ENUM_REG(AES2501_REG_TREGC),
+       ENUM_REG(AES2501_REG_TREGD),
+       ENUM_REG(AES2501_REG_LPONT)
+
+} Aes2501Registers;
+
+
+#define FIRST_AES2501_REG      0x80
+#define LAST_AES2501_REG       0x9f
+
+
+
+#endif /* __AES2501_REGS_H */