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