add bcm432x drivers
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rk2818 / include / mach / spi_fpga.h
1 /*\r
2 defines of FPGA chip ICE65L08's register \r
3 */\r
4 \r
5 #ifndef SPI_UART_H\r
6 #define SPI_UART_H\r
7 #include <linux/circ_buf.h>\r
8 #include <linux/miscdevice.h>\r
9 \r
10 #define SPI_FPGA_INT_PIN RK2818_PIN_PA4\r
11 #define SPI_DPRAM_BUSY_PIN RK2818_PIN_PA2\r
12 #define SPI_FPGA_STANDBY_PIN RK2818_PIN_PH7\r
13 \r
14 #define SPI_FPGA_TEST_DEBUG     0\r
15 #if SPI_FPGA_TEST_DEBUG\r
16 #define SPI_FPGA_TEST_DEBUG_PIN RK2818_PIN_PE0\r
17 extern int spi_test_wrong_handle(void);\r
18 #endif\r
19 \r
20 struct uart_icount {\r
21         __u32   cts;\r
22         __u32   dsr;\r
23         __u32   rng;\r
24         __u32   dcd;\r
25         __u32   rx;\r
26         __u32   tx;\r
27         __u32   frame;\r
28         __u32   overrun;\r
29         __u32   parity;\r
30         __u32   brk;\r
31 };\r
32 \r
33 struct spi_uart\r
34 {\r
35         struct workqueue_struct         *spi_uart_workqueue;\r
36         struct work_struct spi_uart_work;       \r
37         struct timer_list       uart_timer;\r
38         struct tty_struct       *tty;\r
39         struct kref             kref;\r
40         struct mutex            open_lock;\r
41         struct task_struct      *in_spi_uart_irq;       \r
42         struct circ_buf         xmit;\r
43         struct uart_icount      icount;\r
44         spinlock_t              write_lock;\r
45         spinlock_t              irq_lock;\r
46         unsigned int            index;\r
47         unsigned int            opened;\r
48         unsigned int            regs_offset;\r
49         unsigned int            uartclk;\r
50         unsigned int            mctrl;\r
51         unsigned int            read_status_mask;\r
52         unsigned int            ignore_status_mask;\r
53         unsigned char           x_char;\r
54         unsigned char       ier;\r
55         unsigned char       lcr;\r
56 \r
57 };\r
58 \r
59 struct spi_gpio\r
60 {\r
61         struct workqueue_struct         *spi_gpio_workqueue;\r
62         struct work_struct      spi_gpio_work;\r
63         struct timer_list       gpio_timer;\r
64 \r
65 };\r
66 struct spi_i2c_data\r
67 {\r
68         struct i2c_adapter     adapter;\r
69         struct i2c_client         *client;\r
70         struct spi_fpga_port   *port;\r
71         unsigned int                 speed;     \r
72         unsigned int                 mode;\r
73         unsigned int                    msg_idx;\r
74         unsigned int                    msg_num;\r
75 };\r
76 struct spi_i2c\r
77 {\r
78         struct workqueue_struct         *spi_i2c_workqueue;\r
79         struct work_struct      spi_i2c_work;\r
80         struct timer_list i2c_timer;\r
81         struct i2c_adapter *adapter;\r
82         struct i2c_client  *client;\r
83         spinlock_t i2c_lock ; \r
84         unsigned char interrupt;\r
85         unsigned char i2c_data_width[2];\r
86         unsigned int  speed[2];\r
87 };\r
88 \r
89 struct spi_dpram\r
90 {\r
91         struct workqueue_struct         *spi_dpram_workqueue;\r
92         struct work_struct      spi_dpram_work; \r
93         struct workqueue_struct         *spi_dpram_busy_workqueue;\r
94         struct work_struct      spi_dpram_busy_work;\r
95         struct timer_list       dpram_timer;\r
96         unsigned char           *prx;\r
97         unsigned char           *ptx;\r
98         unsigned int            rec_len;\r
99         unsigned int            send_len;\r
100         unsigned int            max_rec_len;\r
101         unsigned int            max_send_len;\r
102         volatile int            apwrite_en;\r
103         unsigned short int  dpram_addr;\r
104         struct semaphore        rec_sem;  \r
105         struct semaphore        send_sem; \r
106         wait_queue_head_t       recq, sendq;\r
107         struct miscdevice       miscdev;\r
108 \r
109         int (*write_dpram)(struct spi_dpram *, unsigned short int addr, unsigned char *buf, unsigned int len);\r
110         int (*read_dpram)(struct spi_dpram *, unsigned short int addr, unsigned char *buf, unsigned int len);\r
111         int (*write_ptr)(struct spi_dpram *, unsigned short int addr, unsigned int size);\r
112         int (*read_ptr)(struct spi_dpram *, unsigned short int addr);\r
113         int (*write_mailbox)(struct spi_dpram *, unsigned int mailbox);\r
114         int (*read_mailbox)(struct spi_dpram *);\r
115 \r
116 };\r
117 \r
118 struct spi_fpga_port {\r
119         const char *name;\r
120         struct spi_device       *spi;\r
121         struct mutex            spi_lock;\r
122         struct workqueue_struct         *fpga_irq_workqueue;\r
123         struct work_struct      fpga_irq_work;  \r
124         struct timer_list       fpga_timer;\r
125         /*spi2uart*/\r
126 #ifdef CONFIG_SPI_UART\r
127         struct spi_uart uart;\r
128 #endif\r
129         /*spi2gpio*/\r
130 #ifdef CONFIG_SPI_GPIO\r
131         struct spi_gpio gpio;\r
132 #endif\r
133         /*spi2i2c*/\r
134 #ifdef CONFIG_SPI_I2C\r
135         struct spi_i2c i2c;\r
136 #endif\r
137         /*spi2dpram*/\r
138 #ifdef CONFIG_SPI_DPRAM\r
139         struct spi_dpram dpram;\r
140 #endif\r
141 \r
142 };\r
143 \r
144 \r
145 #define ICE_CC72                0\r
146 #define ICE_CC196               1\r
147 #define FPGA_TYPE               ICE_CC196\r
148 #define SEL_UART                0\r
149 #define SEL_GPIO                1\r
150 #define SEL_I2C                 2\r
151 #define SEL_DPRAM               3\r
152 #define READ_TOP_INT    4\r
153 \r
154 /* CMD */\r
155 #define ICE_SEL_UART                    (SEL_UART<<6)\r
156 #define ICE_SEL_GPIO                    (SEL_GPIO<<6)\r
157 #define ICE_SEL_I2C                     (SEL_I2C<<6)\r
158 #define ICE_SEL_DPRAM                   (SEL_DPRAM<<6)\r
159 \r
160 #define ICE_SEL_WRITE                   (~(1<<5))\r
161 #define ICE_SEL_READ                    (1<<5)\r
162 \r
163 #define ICE_SEL_UART_CH(ch)     ((ch&0x03)<<3)\r
164 #define ICE_SEL_READ_INT_TYPE   (3<<3)\r
165 \r
166 /*read int type*/\r
167 #define ICE_INT_TYPE_UART0              (~(1<<0))\r
168 #define ICE_INT_TYPE_UART1              (~(1<<1))\r
169 #define ICE_INT_TYPE_UART2              (~(1<<2))\r
170 #define ICE_INT_TYPE_I2C2               (~(1<<3))\r
171 #define ICE_INT_TYPE_I2C3               (~(1<<4))\r
172 #define ICE_INT_TYPE_GPIO               (~(1<<5))\r
173 #define ICE_INT_TYPE_DPRAM              (~(1<<6))\r
174 \r
175 #define ICE_INT_I2C_ACK                 (~(1<<0))\r
176 #define ICE_INT_I2C_READ                (~(1<<1))\r
177 #define ICE_INT_I2C_WRITE               (~(1<<2))\r
178 \r
179 /*spi to uart*/\r
180 #define ICE_RXFIFO_FULL                 (1<<8)\r
181 #define ICE_RXFIFO_NOT_FULL             (~(1<<8))\r
182 #define ICE_RXFIFO_EMPTY                (1<<9)\r
183 #define ICE_RXFIFO_NOT_EMPTY    (~(1<<9))\r
184 #define ICE_TXFIFO_FULL                 (1<<10)\r
185 #define ICE_TXFIFO_NOT_FULL             (~(1<<10))\r
186 #define ICE_TXFIFO_EMPTY                (1<<11)\r
187 #define ICE_TXFIFO_NOT_EMPTY    (~(1<<11))\r
188 \r
189 \r
190 /*spi to gpio*/\r
191 #define ICE_SEL_GPIO0                           (0X00<<3)       //INT/GPIO0\r
192 #define ICE_SEL_GPIO1                           (0X02<<2)       //GPIO1\r
193 #define ICE_SEL_GPIO2                           (0X03<<2)\r
194 #define ICE_SEL_GPIO3                           (0X04<<2)\r
195 #define ICE_SEL_GPIO4                           (0X05<<2)\r
196 #define ICE_SEL_GPIO5                           (0X06<<2)\r
197 \r
198 #define ICE_SEL_GPIO0_TYPE                      (0X00)\r
199 #define ICE_SEL_GPIO0_DIR                       (0X01)\r
200 #define ICE_SEL_GPIO0_DATA                      (0X02)\r
201 #define ICE_SEL_GPIO0_INT_EN            (0X03)\r
202 #define ICE_SEL_GPIO0_INT_TRI           (0X04)\r
203 #define ICE_SEL_GPIO0_INT_STATE         (0X05)\r
204 \r
205 #define ICE_SEL_GPIO_DIR                        (0X01)\r
206 #define ICE_SEL_GPIO_DATA                       (0X02)\r
207 \r
208 /*spi to i2c*/\r
209 \r
210 typedef enum I2C_ch\r
211 {\r
212         I2C_CH0,\r
213         I2C_CH1,\r
214         I2C_CH2,\r
215         I2C_CH3 \r
216 }eI2C_ch_t;\r
217 typedef enum eI2CReadMode\r
218 {\r
219         I2C_NORMAL,\r
220         I2C_NO_REG,\r
221         I2C_NO_STOP\r
222 }eI2ReadMode_t;\r
223 \r
224 #define ICE_SEL_I2C_START            (0<<0)\r
225 #define ICE_SEL_I2C_STOP              (1<<0)\r
226 #define ICE_SEL_I2C_RESTART        (2<<0)\r
227 #define ICE_SEL_I2C_TRANS           (3<<0)\r
228 #define ICE_SEL_I2C_SMASK       (~(3<<0))\r
229 #define ICE_SEL_I2C_CH2               (0<<2)\r
230 #define ICE_SEL_I2C_CH3               (1<<2)\r
231 #define ICE_SEL_I2C_DEFMODE      (0<<3)\r
232 #define ICE_SEL_I2C_FIFO              (1<<3)\r
233 #define ICE_SEL_I2C_SPEED            (2<<3)\r
234 #define ICE_SEL_I2C_INT                 (3<<3)\r
235 #define ICE_SEL_I2C_MMASK       (~(3<<3))\r
236 \r
237 #define ICE_I2C_SLAVE_WRITE           (0<<0)\r
238 #define ICE_I2C_SLAVE_READ             (1<<0)\r
239 \r
240 \r
241 \r
242 #define ICE_SEL_I2C_W8BIT           (0<<2)\r
243 #define ICE_SEL_I2C_W16BIT              (1<<2)\r
244 #define ICE_SEL_I2C_DWIDTH      (2<<2)\r
245 \r
246 #define ICE_I2C_AD_ACK              (~(1<<0))\r
247 #define ICE_I2C_WRITE_ACK        (~(1<<1))\r
248 #define ICE_I2C_READ_ACK             (~(1<<2))\r
249 \r
250 #define ICE_SEL_I2C_CH2_8BIT          (0<<2)\r
251 #define ICE_SEL_I2C_CH2_16BIT        (1<<2)\r
252 #define ICE_SEL_I2C_CH2_MIX           (2<<2)\r
253 \r
254 #define ICE_SEL_I2C_CH3_8BIT         (4<<2)\r
255 #define ICE_SEL_I2C_CH3_16BIT       (5<<2)\r
256 #define ICE_SEL_I2C_CH3_MIX          (6<<2)\r
257 #define ICE_SEL_I2C_RD_A               (7<<2)\r
258 #define ICE_SEL_I2C_MASK               (7<<2)\r
259 #define ICE_SEL_I2C_ACK3               (1<<1)\r
260 #define ICE_SEL_I2C_ACK2               (0<<1)\r
261 \r
262 #define INT_I2C_WRITE_ACK               (2)\r
263 #define INT_I2C_WRITE_NACK        (3)\r
264 #define INT_I2C_READ_ACK               (4)      \r
265 #define INT_I2C_READ_NACK          (5)\r
266 #define INT_I2C_WRITE_MASK        (~(1<<1))\r
267 #define INT_I2C_READ_MASK        (~(1<<2))\r
268 \r
269 #define ICE_SET_10K_I2C_SPEED         (0x01)\r
270 #define ICE_SET_100K_I2C_SPEED        (0x02)     \r
271 #define ICE_SET_200K_I2C_SPEED        (0x04)\r
272 #define ICE_SET_300K_I2C_SPEED        (0x08)\r
273 #define ICE_SET_400K_I2C_SPEED        (0x10)\r
274 \r
275 \r
276 /*spi to dpram*/\r
277 #define ICE_SEL_DPRAM_NOMAL             (~(1<<5))\r
278 #define ICE_SEL_DPRAM_SEM               (1<<5)\r
279 #define ICE_SEL_DPRAM_READ              (~(1<<4))\r
280 #define ICE_SEL_DPRAM_WRITE             (1<<4)\r
281 #define ICE_SEL_DPRAM_BL1               (0)\r
282 #define ICE_SEL_DPRAM_BL32              (1)\r
283 #define ICE_SEL_DPRAM_BL64              (2)\r
284 #define ICE_SEL_DPRAM_BL128             (3)\r
285 #define ICE_SEL_DPRAM_FULL              (4)\r
286 \r
287 #define ICE_SEL_SEM_WRITE               (0x7F)\r
288 #define ICE_SEL_SEM_READ                (0xBF)\r
289 #define ICE_SEL_SEM_WRRD                (0x3F)\r
290 \r
291 typedef         void (*pSpiFunc)(void); //¶¨Ò庯ÊýÖ¸Õë, ÓÃÓÚµ÷Óþø¶ÔµØÖ·\r
292 typedef         void (*pSpiFuncIntr)(int,void *);\r
293 typedef struct\r
294 {\r
295         pSpiFuncIntr gpio_vector;\r
296         void *gpio_devid;\r
297 }SPI_GPIO_PDATA;\r
298 \r
299 \r
300 typedef enum eSpiGpioTypeSel\r
301 {\r
302         SPI_GPIO0_IS_GPIO = 0,\r
303         SPI_GPIO0_IS_INT,\r
304 }eSpiGpioTypeSel_t;\r
305 \r
306 \r
307 \r
308 typedef enum eSpiGpioPinInt\r
309 {\r
310         SPI_GPIO_INT_DISABLE = 0,\r
311         SPI_GPIO_INT_ENABLE,\r
312 }eSpiGpioPinInt_t;\r
313 \r
314 \r
315 typedef enum eSpiGpioIntType \r
316 {\r
317         SPI_GPIO_EDGE_FALLING = 0,\r
318         SPI_GPIO_EDGE_RISING,\r
319 }eSpiGpioIntType_t;\r
320 \r
321 typedef enum eSpiGpioPinDirection\r
322 {\r
323         SPI_GPIO_IN = 0,\r
324         SPI_GPIO_OUT,\r
325         SPI_GPIO_DIR_ERR,\r
326 }eSpiGpioPinDirection_t;\r
327 \r
328 \r
329 typedef enum eSpiGpioPinLevel\r
330 {\r
331         SPI_GPIO_LOW = 0,\r
332         SPI_GPIO_HIGH,\r
333         SPI_GPIO_LEVEL_ERR,\r
334 }eSpiGpioPinLevel_t;\r
335 \r
336 #if (FPGA_TYPE == ICE_CC72)\r
337 typedef enum eSpiGpioPinNum\r
338 {\r
339         SPI_GPIO_P0_00 = 0,     //GPIO0[0]\r
340         SPI_GPIO_P0_01,\r
341         SPI_GPIO_P0_02,\r
342         SPI_GPIO_P0_03,\r
343         SPI_GPIO_P0_04,\r
344         SPI_GPIO_P0_05, \r
345         \r
346         SPI_GPIO_P2_00,         \r
347         SPI_GPIO_P2_01,\r
348         SPI_GPIO_P2_02,\r
349         SPI_GPIO_P2_03,\r
350         SPI_GPIO_P2_04,\r
351         SPI_GPIO_P2_05,\r
352         SPI_GPIO_P2_06,\r
353         SPI_GPIO_P2_07,\r
354         SPI_GPIO_P2_08, \r
355         SPI_GPIO_P2_09 = 15,    //GPIO0[15],the last interrupt/gpio pin \r
356         \r
357         SPI_GPIO_P3_00 = 16,    //GPIO1[0]\r
358         SPI_GPIO_P3_01,\r
359         SPI_GPIO_P3_02,\r
360         SPI_GPIO_P3_03,\r
361         SPI_GPIO_P3_04,\r
362         SPI_GPIO_P3_05,\r
363         SPI_GPIO_P3_06,\r
364         SPI_GPIO_P3_07,\r
365         SPI_GPIO_P3_08,\r
366         SPI_GPIO_P3_09,\r
367         SPI_GPIO_P0_06 = 26,    \r
368         SPI_GPIO_I2C3_SCL,\r
369         SPI_GPIO_I2C3_SDA,\r
370         SPI_GPIO_I2C4_SCL,\r
371         SPI_GPIO_I2C4_SDA,\r
372         \r
373 }eSpiGpioPinNum_t;\r
374 \r
375 #elif (FPGA_TYPE == ICE_CC196)\r
376 \r
377 typedef enum eSpiGpioPinNum\r
378 {\r
379         //GPIO0/INT\r
380         SPI_GPIO_P6_00 = 0,     //HS_DET input  \r
381         SPI_GPIO_P6_01,\r
382         SPI_GPIO_P6_02,\r
383         SPI_GPIO_P6_03,\r
384         SPI_GPIO_P6_04,         //CM3605_POUT_L_INT input\r
385         SPI_GPIO_P6_05,         \r
386         SPI_GPIO_P6_06,         //CHG_OK input\r
387         SPI_GPIO_P6_07,         //HP_HOOK input\r
388         SPI_GPIO_P6_08,\r
389         SPI_GPIO_P6_09,\r
390         SPI_GPIO_P6_10,         //DEFSEL input  \r
391         SPI_GPIO_P6_11,         //FLASH_WP_INT input\r
392         SPI_GPIO_P6_12,         //LOW_BATT_INT input\r
393         SPI_GPIO_P6_13,         //DC_DET input\r
394         SPI_GPIO_P3_08,         \r
395         SPI_GPIO_P3_09 = 15,\r
396 \r
397         //GPIO1\r
398         SPI_GPIO_P1_00 = 16,    //LCD_ON output\r
399         SPI_GPIO_P1_01,         //LCD_PWR_CTRL output\r
400         SPI_GPIO_P1_02,         //SD_POW_ON output\r
401         SPI_GPIO_P1_03,         //WL_RST_N/WIFI_EN output\r
402         SPI_GPIO_P1_04,         //HARDO,input\r
403         SPI_GPIO_P1_05,         //SENSOR_PWDN output\r
404         SPI_GPIO_P1_06,         //BT_PWR_EN output\r
405         SPI_GPIO_P1_07,         //BT_RST output\r
406         SPI_GPIO_P1_08,         //BT_WAKE_B output\r
407         SPI_GPIO_P1_09,         //LCD_DISP_ON output\r
408         SPI_GPIO_P1_10,         //WM_PWR_EN output\r
409         SPI_GPIO_P1_11,         //HARD1,input\r
410         SPI_GPIO_P1_12,         //VIB_MOTO output\r
411         SPI_GPIO_P1_13,         //KEYLED_EN output\r
412         SPI_GPIO_P1_14,         //CAM_RST output\r
413         SPI_GPIO_P1_15 = 31,    //WL_WAKE_B output\r
414 \r
415         //GPIO2\r
416         SPI_GPIO_P2_00 = 32,    //Y+YD input\r
417         SPI_GPIO_P2_01,         //Y-YU input\r
418         SPI_GPIO_P2_02,         //AP_TD_UNDIFED input\r
419         SPI_GPIO_P2_03,         //AP_PW_EN_TD output\r
420         SPI_GPIO_P2_04,         //AP_RESET_TD output\r
421         SPI_GPIO_P2_05,         //AP_SHUTDOWN_TD_PMU output\r
422         SPI_GPIO_P2_06,         //AP_RESET_CMMB output\r
423         SPI_GPIO_P2_07,         //AP_CHECK_TD_STATUS input\r
424         SPI_GPIO_P2_08,         //CHARGE_CURRENT_SEL output\r
425         SPI_GPIO_P2_09,         //AP_PWD_CMMB output\r
426         SPI_GPIO_P2_10,         //X-XL input\r
427         SPI_GPIO_P2_11,         //X+XR input\r
428         SPI_GPIO_P2_12,         //LCD_RESET output\r
429         SPI_GPIO_P2_13,         //USB_PWR_EN output\r
430         SPI_GPIO_P2_14,         //WL_HOST_WAKE_B output\r
431         SPI_GPIO_P2_15 = 47,    //TOUCH_SCREEN_RST output\r
432 \r
433         //GPIO3\r
434         SPI_GPIO_P0_00 = 48,    //\r
435         SPI_GPIO_P0_01,\r
436         SPI_GPIO_P0_02,\r
437         SPI_GPIO_P0_03,\r
438         SPI_GPIO_P0_04,\r
439         SPI_GPIO_P0_05,\r
440         SPI_GPIO_P0_06,\r
441         SPI_GPIO_P0_07,\r
442         SPI_GPIO_P0_08,\r
443         SPI_GPIO_P0_09,         //FPGAС°å¸ÃÒý½ÅδÒý³ö C5\r
444         SPI_GPIO_P0_10,\r
445         SPI_GPIO_P0_11,\r
446         SPI_GPIO_P0_12,\r
447         SPI_GPIO_P0_13,\r
448         SPI_GPIO_P0_14,\r
449         SPI_GPIO_P0_15 = 63,\r
450 \r
451         //GPIO4\r
452         SPI_GPIO_P4_00 = 64,    \r
453         SPI_GPIO_P4_01, \r
454         SPI_GPIO_P4_02,\r
455         SPI_GPIO_P4_03,\r
456         SPI_GPIO_P4_04,\r
457         SPI_GPIO_P4_05,\r
458         SPI_GPIO_P4_06,         //CHARGER_INT_END input\r
459         SPI_GPIO_P4_07,         //CM3605_PWD output\r
460         SPI_GPIO_P3_00,         \r
461         SPI_GPIO_P3_01,\r
462         SPI_GPIO_P3_02,\r
463         SPI_GPIO_P3_03,\r
464         SPI_GPIO_P3_04,\r
465         SPI_GPIO_P3_05,\r
466         SPI_GPIO_P3_06,\r
467         SPI_GPIO_P3_07 = 79,    \r
468 \r
469         //GPIO5\r
470         SPI_GPIO_P4_08 = 80,    //CM3605_PS_SHUTDOWN\r
471         SPI_GPIO_P0_TXD2,               //temp\r
472 \r
473 }eSpiGpioPinNum_t;\r
474 \r
475 #endif\r
476 \r
477 \r
478 typedef enum eSpiGpioPinIntIsr\r
479 {\r
480         SPI_GPIO_IS_INT = 0,\r
481         SPI_GPIO_NO_INT,\r
482 }eSpiGpioPinIntIsr_t;\r
483 \r
484 extern struct spi_fpga_port *pFpgaPort;\r
485 extern unsigned int spi_in(struct spi_fpga_port *port, int reg, int type);\r
486 extern void spi_out(struct spi_fpga_port *port, int reg, int value, int type);\r
487 \r
488 #if defined(CONFIG_SPI_UART)\r
489 extern void spi_uart_handle_irq(struct spi_device *spi);\r
490 extern int spi_uart_register(struct spi_fpga_port *port);\r
491 extern int spi_uart_unregister(struct spi_fpga_port *port);\r
492 #endif\r
493 #if defined(CONFIG_SPI_GPIO)\r
494 extern int spi_gpio_int_sel(eSpiGpioPinNum_t PinNum,eSpiGpioTypeSel_t type);\r
495 extern int spi_gpio_set_pindirection(eSpiGpioPinNum_t PinNum,eSpiGpioPinDirection_t direction);\r
496 extern int spi_gpio_set_pinlevel(eSpiGpioPinNum_t PinNum, eSpiGpioPinLevel_t PinLevel);\r
497 extern eSpiGpioPinLevel_t spi_gpio_get_pinlevel(eSpiGpioPinNum_t PinNum);\r
498 extern int spi_gpio_enable_int(eSpiGpioPinNum_t PinNum);\r
499 extern int spi_gpio_disable_int(eSpiGpioPinNum_t PinNum);\r
500 extern int spi_gpio_set_int_trigger(eSpiGpioPinNum_t PinNum,eSpiGpioIntType_t IntType);\r
501 extern int spi_gpio_read_iir(void);\r
502 extern int spi_request_gpio_irq(eSpiGpioPinNum_t PinNum, pSpiFunc Routine, eSpiGpioIntType_t IntType,void *dev_id);\r
503 extern int spi_free_gpio_irq(eSpiGpioPinNum_t PinNum);\r
504 extern int spi_gpio_handle_irq(struct spi_device *spi);\r
505 extern int spi_gpio_init(void);\r
506 extern void spi_gpio_irq_setup(void);\r
507 extern int spi_gpio_register(struct spi_fpga_port *port);\r
508 extern int spi_gpio_unregister(struct spi_fpga_port *port);\r
509 #endif\r
510 #if defined(CONFIG_SPI_I2C)\r
511 extern int spi_i2c_handle_irq(struct spi_fpga_port *port,unsigned char channel);\r
512 extern int spi_i2c_register(struct spi_fpga_port *port,int num);\r
513 extern int spi_i2c_unregister(struct spi_fpga_port *port);\r
514 #endif\r
515 #if defined(CONFIG_SPI_DPRAM)\r
516 extern int spi_dpram_handle_irq(struct spi_device *spi);\r
517 extern int spi_dpram_register(struct spi_fpga_port *port);\r
518 extern int spi_dpram_unregister(struct spi_fpga_port *port);\r
519 #endif\r
520 \r
521 #endif\r