add interrupt definitions
[librfid] / src / rc632.h
1 /* Register definitions for Philips CL RC632 RFID Reader IC
2  *
3  * (C) 2005 Harald Welte <laforge@gnumonks.org>
4  *
5  * Licensed under GNU General Public License, Version 2
6  */
7
8 enum rc632_registers {
9         RC632_REG_PAGE0                 = 0x00,
10         RC632_REG_COMMAND               = 0x01,
11         RC632_REG_FIFO_DATA             = 0x02,
12         RC632_REG_PRIMARY_STATUS        = 0x03,
13         RC632_REG_FIFO_LENGTH           = 0x04,
14         RC632_REG_SECONDARY_STATUS      = 0x05,
15         RC632_REG_INTERRUPT_EN          = 0x06,
16         RC632_REG_INTERRUPT_RQ          = 0x07,
17
18         RC632_REG_PAGE1                 = 0x08,
19         RC632_REG_CONTROL               = 0x09,
20         RC632_REG_ERROR_FLAG            = 0x0a,
21         RC632_REG_COLL_POS              = 0x0b,
22         RC632_REG_TIMER_VALUE           = 0x0c,
23         RC632_REG_CRC_RESULT_LSB        = 0x0d,
24         RC632_REG_CRC_RESULT_MSB        = 0x0e,
25         RC632_REG_BIT_FRAMING           = 0x0f,
26
27         RC632_REG_PAGE2                 = 0x10,
28         RC632_REG_TX_CONTROL            = 0x11,
29         RC632_REG_CW_CONDUCTANCE        = 0x12,
30         RC632_REG_MOD_CONDUCTANCE       = 0x13,
31         RC632_REG_CODER_CONTROL         = 0x14,
32         RC632_REG_MOD_WIDTH             = 0x15,
33         RC632_REG_MOD_WIDTH_SOF         = 0x16,
34         RC632_REG_TYPE_B_FRAMING        = 0x17,
35
36         RC632_REG_PAGE3                 = 0x18,
37         RC632_REG_RX_CONTROL1           = 0x19,
38         RC632_REG_DECODER_CONTROL       = 0x1a,
39         RC632_REG_BIT_PHASE             = 0x1b,
40         RC632_REG_RX_THRESHOLD          = 0x1c,
41         RC632_REG_BPSK_DEM_CONTROL      = 0x1d,
42         RC632_REG_RX_CONTROL2           = 0x1e,
43         RC632_REG_CLOCK_Q_CONTROL       = 0x1f,
44
45         RC632_REG_PAGE4                 = 0x20,
46         RC632_REG_RX_WAIT               = 0x21,
47         RC632_REG_CHANNEL_REDUNDANCY    = 0x22,
48         RC632_REG_CRC_PRESET_LSB        = 0x23,
49         RC632_REG_CRC_PRESET_MSB        = 0x24,
50         RC632_REG_TIME_SLOT_PERIOD      = 0x25,
51         RC632_REG_MFOUT_SELECT          = 0x26,
52         RC632_REG_PRESET_27             = 0x27,
53
54         RC632_REG_PAGE5                 = 0x28,
55         RC632_REG_FIFO_LEVEL            = 0x29,
56         RC632_REG_TIMER_CLOCK           = 0x2a,
57         RC632_REG_TIMER_CONTROL         = 0x2b,
58         RC632_REG_TIMER_RELOAD          = 0x2c,
59         RC632_REG_IRQ_PIN_CONFIG        = 0x2d,
60         RC632_REG_PRESET_2E             = 0x2e,
61         RC632_REG_PRESET_2F             = 0x2f,
62
63         RC632_REG_PAGE6                 = 0x30,
64
65         RC632_REG_PAGE7                 = 0x38,
66         RC632_REG_TEST_ANA_SELECT       = 0x3a,
67         RC632_REG_TEST_DIGI_SELECT      = 0x3d,
68 };
69
70 enum rc632_reg_command {
71         RC632_CMD_IDLE                  = 0x00,
72         RC632_CMD_WRITE_E2              = 0x01,
73         RC632_CMD_READ_E2               = 0x03,
74         RC632_CMD_LOAD_CONFIG           = 0x07,
75         RC632_CMD_LOAD_KEY_E2           = 0x0b,
76         RC632_CMD_AUTHENT1              = 0x0c,
77         RC632_CMD_CALC_CRC              = 0x12,
78         RC632_CMD_AUTHENT2              = 0x14,
79         RC632_CMD_RECEIVE               = 0x16,
80         RC632_CMD_LOAD_KEY              = 0x19,
81         RC632_CMD_TRANSMIT              = 0x1a,
82         RC632_CMD_TRANSCEIVE            = 0x1e,
83         RC632_CMD_STARTUP               = 0x3f,
84 };
85
86 enum rc632_reg_interrupt {
87         RC632_INT_LOALERT               = 0x01,
88         RC632_INT_HIALERT               = 0x02,
89         RC632_INT_IDLE                  = 0x04,
90         RC632_INT_RX                    = 0x08,
91         RC632_INT_TX                    = 0x10,
92         RC632_INT_TIMER                 = 0x20,
93         RC632_INT_SET                   = 0x80,
94 };
95
96 enum rc632_reg_control {
97         RC632_CONTROL_CRYPTO1_ON        = 0x08,
98         RC632_CONTROL_POWERDOWN         = 0x10,
99 };
100
101 enum rc632_reg_error_flag {
102         RC632_ERR_FLAG_COL_ERR          = 0x01,
103         RC632_ERR_FLAG_PARITY_ERR       = 0x02,
104         RC632_ERR_FLAG_FRAMING_ERR      = 0x04,
105         RC632_ERR_FLAG_CRC_ERR          = 0x08,
106         RC632_ERR_FLAG_FIFO_OVERFLOW    = 0x10,
107         RC632_ERR_FLAG_ACCESS_ERR       = 0x20,
108         RC632_ERR_FLAG_KEY_ERR          = 0x40,
109 };
110
111 enum rc632_reg_tx_control {
112         RC632_TXCTRL_TX1_RF_EN          = 0x01,
113         RC632_TXCTRL_TX2_RF_EN          = 0x02,
114         RC632_TXCTRL_TX2_CW             = 0x04,
115         RC632_TXCTRL_TX2_INV            = 0x08,
116         RC632_TXCTRL_FORCE_100_ASK      = 0x10,
117
118         RC632_TXCTRL_MOD_SRC_LOW        = 0x00,
119         RC632_TXCTRL_MOD_SRC_HIGH       = 0x20,
120         RC632_TXCTRL_MOD_SRC_INT        = 0x40,
121         RC632_TXCTRL_MOD_SRC_MFIN       = 0x60,
122 };
123
124 enum rc632_reg_coder_control {
125         RC632_CDRCTRL_TXCD_NRZ          = 0x00,
126         RC632_CDRCTRL_TXCD_14443A       = 0x01,
127         RC632_CDRCTRL_TXCD_ICODE_STD    = 0x04,
128
129 #define RC632_CDRCTRL_RATE_MASK         0x38
130         RC632_CDRCTRL_RATE_848K         = 0x00,
131         RC632_CDRCTRL_RATE_424K         = 0x08,
132         RC632_CDRCTRL_RATE_212K         = 0x10,
133         RC632_CDRCTRL_RATE_106K         = 0x18,
134         RC632_CDRCTRL_RATE_14443B       = 0x20,
135         RC632_CDRCTRL_RATE_15693        = 0x28,
136         RC632_CDRCTRL_RATE_ICODE_FAST   = 0x30,
137 };
138
139 enum rc632_erg_type_b_framing {
140         RC632_TBFRAMING_SOF_10L_2H      = 0x00,
141         RC632_TBFRAMING_SOF_10L_3H      = 0x01,
142         RC632_TBFRAMING_SOF_11L_2H      = 0x02,
143         RC632_TBFRAMING_SOF_11L_3H      = 0x03,
144
145         RC632_TBFRAMING_EOF_10          = 0x00,
146         RC632_TBFRAMING_EOF_11          = 0x20,
147
148         RC632_TBFRAMING_NO_TX_SOF       = 0x80,
149         RC632_TBFRAMING_NO_TX_EOF       = 0x40,
150 };
151 #define RC632_TBFRAMING_SPACE_SHIFT     2
152 #define RC632_TBFRAMING_SPACE_MASK      7
153
154 enum rc632_reg_rx_control1 {
155         RC632_RXCTRL1_GAIN_20DB         = 0x00,
156         RC632_RXCTRL1_GAIN_24DB         = 0x01,
157         RC632_RXCTRL1_GAIN_31DB         = 0x02,
158         RC632_RXCTRL1_GAIN_35DB         = 0x03,
159
160         RC632_RXCTRL1_LP_OFF            = 0x04,
161         RC632_RXCTRL1_ISO15693          = 0x08,
162         RC632_RXCTRL1_ISO14443          = 0x10,
163
164 #define RC632_RXCTRL1_SUBCP_MASK        0xe0
165         RC632_RXCTRL1_SUBCP_1           = 0x00,
166         RC632_RXCTRL1_SUBCP_2           = 0x20,
167         RC632_RXCTRL1_SUBCP_4           = 0x40,
168         RC632_RXCTRL1_SUBCP_8           = 0x60,
169         RC632_RXCTRL1_SUBCP_16          = 0x80,
170 };
171
172 enum rc632_reg_decoder_control {
173         RC632_DECCTRL_MANCHESTER        = 0x00,
174         RC632_DECCTRL_BPSK              = 0x01,
175
176         RC632_DECCTRL_RX_INVERT         = 0x04,
177
178         RC632_DECCTRL_RXFR_ICODE        = 0x00,
179         RC632_DECCTRL_RXFR_14443A       = 0x08,
180         RC632_DECCTRL_RXFR_15693        = 0x10,
181         RC632_DECCTRL_RXFR_14443B       = 0x18,
182
183         RC632_DECCTRL_ZEROAFTERCOL      = 0x20,
184
185         RC632_DECCTRL_RX_MULTIPLE       = 0x40,
186 };
187
188 enum rc632_reg_bpsk_dem_control {
189         RC632_BPSKD_TAUB_SHIFT          = 0x00,
190         RC632_BPSKD_TAUB_MASK           = 0x03,
191         
192         RC632_BPSKD_TAUD_SHIFT          = 0x02,
193         RC632_BPSKD_TAUD_MASK           = 0x03,
194
195         RC632_BPSKD_FILTER_AMP_DETECT   = 0x10,
196         RC632_BPSKD_NO_RX_EOF           = 0x20,
197         RC632_BPSKD_NO_RX_EGT           = 0x40,
198         RC632_BPSKD_NO_RX_SOF           = 0x80,
199 };
200
201 enum rc632_reg_rx_control2 {
202         RC632_RXCTRL2_DECSRC_LOW        = 0x00,
203         RC632_RXCTRL2_DECSRC_INT        = 0x01,
204         RC632_RXCTRL2_DECSRC_SUBC_MFIN  = 0x10,
205         RC632_RXCTRL2_DECSRC_BASE_MFIN  = 0x11,
206
207         RC632_RXCTRL2_AUTO_PD           = 0x40,
208         RC632_RXCTRL2_CLK_I             = 0x80,
209         RC632_RXCTRL2_CLK_Q             = 0x00,
210 };
211
212 enum rc632_reg_channel_redundancy {
213         RC632_CR_PARITY_ENABLE          = 0x01,
214         RC632_CR_PARITY_ODD             = 0x02,
215         RC632_CR_TX_CRC_ENABLE          = 0x04,
216         RC632_CR_RX_CRC_ENABLE          = 0x08,
217         RC632_CR_CRC8                   = 0x10,
218         RC632_CR_CRC3309                = 0x20,
219 };
220
221