fpga driver update
authorroot <root@lw-desktop.(none)>
Mon, 26 Jul 2010 08:50:30 +0000 (16:50 +0800)
committerroot <root@lw-desktop.(none)>
Mon, 26 Jul 2010 08:50:30 +0000 (16:50 +0800)
arch/arm/mach-rk2818/include/mach/spi_fpga.h [new file with mode: 0644]

diff --git a/arch/arm/mach-rk2818/include/mach/spi_fpga.h b/arch/arm/mach-rk2818/include/mach/spi_fpga.h
new file mode 100644 (file)
index 0000000..cd889b9
--- /dev/null
@@ -0,0 +1,514 @@
+/*\r
+defines of FPGA chip ICE65L08's register \r
+*/\r
+\r
+#ifndef SPI_UART_H\r
+#define SPI_UART_H\r
+\r
+#define SPI_FPGA_INT_PIN RK2818_PIN_PA4\r
+#define SPI_DPRAM_BUSY_PIN RK2818_PIN_PA2\r
+#define SPI_FPGA_STANDBY_PIN RK2818_PIN_PH7\r
+\r
+#define SPI_FPGA_TEST_DEBUG    0\r
+#if SPI_FPGA_TEST_DEBUG\r
+#define SPI_FPGA_TEST_DEBUG_PIN RK2818_PIN_PE0\r
+extern int spi_test_wrong_handle(void);\r
+#endif\r
+\r
+struct uart_icount {\r
+       __u32   cts;\r
+       __u32   dsr;\r
+       __u32   rng;\r
+       __u32   dcd;\r
+       __u32   rx;\r
+       __u32   tx;\r
+       __u32   frame;\r
+       __u32   overrun;\r
+       __u32   parity;\r
+       __u32   brk;\r
+};\r
+\r
+struct spi_uart\r
+{\r
+       struct workqueue_struct         *spi_uart_workqueue;\r
+       struct work_struct spi_uart_work;       \r
+       struct timer_list       uart_timer;\r
+       struct tty_struct       *tty;\r
+       struct kref             kref;\r
+       struct mutex            open_lock;\r
+       struct task_struct      *in_spi_uart_irq;       \r
+       struct circ_buf         xmit;\r
+       struct uart_icount      icount;\r
+       spinlock_t              write_lock;\r
+       spinlock_t              irq_lock;\r
+       unsigned int            index;\r
+       unsigned int            opened;\r
+       unsigned int            regs_offset;\r
+       unsigned int            uartclk;\r
+       unsigned int            mctrl;\r
+       unsigned int            read_status_mask;\r
+       unsigned int            ignore_status_mask;\r
+       unsigned char           x_char;\r
+       unsigned char       ier;\r
+       unsigned char       lcr;\r
+\r
+};\r
+\r
+struct spi_gpio\r
+{\r
+       struct workqueue_struct         *spi_gpio_workqueue;\r
+       struct work_struct      spi_gpio_work;\r
+       struct timer_list       gpio_timer;\r
+\r
+};\r
+\r
+struct spi_i2c\r
+{\r
+       struct workqueue_struct         *spi_i2c_workqueue;\r
+       struct work_struct      spi_i2c_work;\r
+       struct timer_list i2c_timer;\r
+       struct i2c_adapter *adapter;\r
+       struct i2c_client  *client;\r
+       spinlock_t i2c_lock ; \r
+       unsigned char interrupt;\r
+       unsigned char i2c_data_width[2];\r
+       unsigned int  speed[2];\r
+};\r
+\r
+struct spi_dpram\r
+{\r
+       struct workqueue_struct         *spi_dpram_workqueue;\r
+       struct work_struct      spi_dpram_work; \r
+       struct workqueue_struct         *spi_dpram_busy_workqueue;\r
+       struct work_struct      spi_dpram_busy_work;\r
+       struct timer_list       dpram_timer;\r
+       unsigned char           *prx;\r
+       unsigned char           *ptx;\r
+       unsigned int            rec_len;\r
+       unsigned int            send_len;\r
+       unsigned int            max_rec_len;\r
+       unsigned int            max_send_len;\r
+       volatile int            apwrite_en;\r
+       unsigned short int  dpram_addr;\r
+       struct semaphore        rec_sem;  \r
+       struct semaphore        send_sem; \r
+       wait_queue_head_t       recq, sendq;\r
+       struct miscdevice       miscdev;\r
+\r
+       int (*write_dpram)(struct spi_dpram *, unsigned short int addr, unsigned char *buf, unsigned int len);\r
+       int (*read_dpram)(struct spi_dpram *, unsigned short int addr, unsigned char *buf, unsigned int len);\r
+       int (*write_ptr)(struct spi_dpram *, unsigned short int addr, unsigned int size);\r
+       int (*read_ptr)(struct spi_dpram *, unsigned short int addr);\r
+       int (*write_mailbox)(struct spi_dpram *, unsigned int mailbox);\r
+       int (*read_mailbox)(struct spi_dpram *);\r
+\r
+};\r
+\r
+struct spi_fpga_port {\r
+       const char *name;\r
+       struct spi_device       *spi;\r
+       struct mutex            spi_lock;\r
+       struct workqueue_struct         *fpga_irq_workqueue;\r
+       struct work_struct      fpga_irq_work;  \r
+       struct timer_list       fpga_timer;\r
+       /*spi2uart*/\r
+#ifdef CONFIG_SPI_UART\r
+       struct spi_uart uart;\r
+#endif\r
+       /*spi2gpio*/\r
+#ifdef CONFIG_SPI_GPIO\r
+       struct spi_gpio gpio;\r
+#endif\r
+       /*spi2i2c*/\r
+#ifdef CONFIG_SPI_I2C\r
+       struct spi_i2c i2c;\r
+#endif\r
+       /*spi2dpram*/\r
+#ifdef CONFIG_SPI_DPRAM\r
+       struct spi_dpram dpram;\r
+#endif\r
+\r
+};\r
+\r
+\r
+#define ICE_CC72               0\r
+#define ICE_CC196              1\r
+#define FPGA_TYPE              ICE_CC196\r
+#define SEL_UART               0\r
+#define SEL_GPIO               1\r
+#define SEL_I2C                        2\r
+#define SEL_DPRAM              3\r
+#define READ_TOP_INT   4\r
+\r
+/* CMD */\r
+#define ICE_SEL_UART                   (SEL_UART<<6)\r
+#define ICE_SEL_GPIO                   (SEL_GPIO<<6)\r
+#define ICE_SEL_I2C                    (SEL_I2C<<6)\r
+#define ICE_SEL_DPRAM                  (SEL_DPRAM<<6)\r
+\r
+#define ICE_SEL_WRITE                  (~(1<<5))\r
+#define ICE_SEL_READ                   (1<<5)\r
+\r
+#define ICE_SEL_UART_CH(ch)    ((ch&0x03)<<3)\r
+#define ICE_SEL_READ_INT_TYPE  (3<<3)\r
+\r
+/*read int type*/\r
+#define ICE_INT_TYPE_UART0             (~(1<<0))\r
+#define ICE_INT_TYPE_UART1             (~(1<<1))\r
+#define ICE_INT_TYPE_UART2             (~(1<<2))\r
+#define ICE_INT_TYPE_I2C2              (~(1<<3))\r
+#define ICE_INT_TYPE_I2C3              (~(1<<4))\r
+#define ICE_INT_TYPE_GPIO              (~(1<<5))\r
+#define ICE_INT_TYPE_DPRAM             (~(1<<6))\r
+\r
+#define ICE_INT_I2C_ACK                        (~(1<<0))\r
+#define ICE_INT_I2C_READ               (~(1<<1))\r
+#define ICE_INT_I2C_WRITE              (~(1<<2))\r
+\r
+/*spi to uart*/\r
+#define        ICE_RXFIFO_FULL                 (1<<8)\r
+#define        ICE_RXFIFO_NOT_FULL             (~(1<<8))\r
+#define        ICE_RXFIFO_EMPTY                (1<<9)\r
+#define        ICE_RXFIFO_NOT_EMPTY    (~(1<<9))\r
+#define        ICE_TXFIFO_FULL                 (1<<10)\r
+#define        ICE_TXFIFO_NOT_FULL             (~(1<<10))\r
+#define        ICE_TXFIFO_EMPTY                (1<<11)\r
+#define        ICE_TXFIFO_NOT_EMPTY    (~(1<<11))\r
+\r
+\r
+/*spi to gpio*/\r
+#define        ICE_SEL_GPIO0                           (0X00<<3)       //INT/GPIO0\r
+#define        ICE_SEL_GPIO1                           (0X02<<2)       //GPIO1\r
+#define        ICE_SEL_GPIO2                           (0X03<<2)\r
+#define        ICE_SEL_GPIO3                           (0X04<<2)\r
+#define        ICE_SEL_GPIO4                           (0X05<<2)\r
+#define        ICE_SEL_GPIO5                           (0X06<<2)\r
+\r
+#define ICE_SEL_GPIO0_TYPE                     (0X00)\r
+#define ICE_SEL_GPIO0_DIR                      (0X01)\r
+#define ICE_SEL_GPIO0_DATA                     (0X02)\r
+#define ICE_SEL_GPIO0_INT_EN           (0X03)\r
+#define ICE_SEL_GPIO0_INT_TRI          (0X04)\r
+#define ICE_SEL_GPIO0_INT_STATE                (0X05)\r
+\r
+#define        ICE_SEL_GPIO_DIR                        (0X01)\r
+#define        ICE_SEL_GPIO_DATA                       (0X02)\r
+\r
+/*spi to i2c*/\r
+\r
+typedef enum I2C_ch\r
+{\r
+       I2C_CH0,\r
+       I2C_CH1,\r
+       I2C_CH2,\r
+       I2C_CH3 \r
+}eI2C_ch_t;\r
+typedef enum eI2CReadMode\r
+{\r
+       I2C_NORMAL,\r
+       I2C_NOREG\r
+}eI2ReadMode_t;\r
+\r
+typedef enum eI2RegType\r
+{\r
+       I2C_8_BIT,\r
+       I2C_16_BIT\r
+}eI2RegType_t;\r
+\r
+#define ICE_SEL_I2C_START            (0<<0)\r
+#define ICE_SEL_I2C_STOP              (1<<0)\r
+#define ICE_SEL_I2C_RESTART        (2<<0)\r
+#define ICE_SEL_I2C_TRANS           (3<<0)\r
+#define ICE_SEL_I2C_SMASK      (~(3<<0))\r
+#define ICE_SEL_I2C_CH2               (0<<2)\r
+#define ICE_SEL_I2C_CH3               (1<<2)\r
+#define ICE_SEL_I2C_DEFMODE      (0<<3)\r
+#define ICE_SEL_I2C_FIFO              (1<<3)\r
+#define ICE_SEL_I2C_SPEED            (2<<3)\r
+#define ICE_SEL_I2C_INT                 (3<<3)\r
+#define ICE_SEL_I2C_MMASK      (~(3<<3))\r
+\r
+#define ICE_I2C_SLAVE_WRITE           (0<<0)\r
+#define ICE_I2C_SLAVE_READ             (1<<0)\r
+\r
+\r
+\r
+#define ICE_SEL_I2C_W8BIT           (0<<2)\r
+#define ICE_SEL_I2C_W16BIT             (1<<2)\r
+#define ICE_SEL_I2C_DWIDTH     (2<<2)\r
+\r
+#define ICE_I2C_AD_ACK              (~(1<<0))\r
+#define ICE_I2C_WRITE_ACK        (~(1<<1))\r
+#define ICE_I2C_READ_ACK            (~(1<<2))\r
+\r
+#define ICE_SEL_I2C_CH2_8BIT          (0<<2)\r
+#define ICE_SEL_I2C_CH2_16BIT        (1<<2)\r
+#define ICE_SEL_I2C_CH2_MIX           (2<<2)\r
+\r
+#define ICE_SEL_I2C_CH3_8BIT         (4<<2)\r
+#define ICE_SEL_I2C_CH3_16BIT       (5<<2)\r
+#define ICE_SEL_I2C_CH3_MIX          (6<<2)\r
+#define ICE_SEL_I2C_RD_A               (7<<2)\r
+#define ICE_SEL_I2C_MASK               (7<<2)\r
+#define ICE_SEL_I2C_ACK3               (1<<1)\r
+#define ICE_SEL_I2C_ACK2               (0<<1)\r
+\r
+#define INT_I2C_WRITE_ACK              (2)\r
+#define INT_I2C_WRITE_NACK        (3)\r
+#define INT_I2C_READ_ACK              (4)      \r
+#define INT_I2C_READ_NACK          (5)\r
+#define INT_I2C_WRITE_MASK        (~(1<<1))\r
+#define INT_I2C_READ_MASK        (~(1<<2))\r
+\r
+#define ICE_SET_10K_I2C_SPEED         (0x01)\r
+#define ICE_SET_100K_I2C_SPEED        (0x02)     \r
+#define ICE_SET_200K_I2C_SPEED        (0x04)\r
+#define ICE_SET_300K_I2C_SPEED        (0x08)\r
+#define ICE_SET_400K_I2C_SPEED        (0x10)\r
+\r
+\r
+/*spi to dpram*/\r
+#define ICE_SEL_DPRAM_NOMAL            (~(1<<5))\r
+#define        ICE_SEL_DPRAM_SEM               (1<<5)\r
+#define        ICE_SEL_DPRAM_READ              (~(1<<4))\r
+#define        ICE_SEL_DPRAM_WRITE             (1<<4)\r
+#define ICE_SEL_DPRAM_BL1              (0)\r
+#define ICE_SEL_DPRAM_BL32             (1)\r
+#define ICE_SEL_DPRAM_BL64             (2)\r
+#define ICE_SEL_DPRAM_BL128            (3)\r
+#define ICE_SEL_DPRAM_FULL             (4)\r
+\r
+#define ICE_SEL_SEM_WRITE              (0x7F)\r
+#define ICE_SEL_SEM_READ               (0xBF)\r
+#define ICE_SEL_SEM_WRRD               (0x3F)\r
+\r
+typedef        void (*pSpiFunc)(void); //¶¨Ò庯ÊýÖ¸Õë, ÓÃÓÚµ÷Óþø¶ÔµØÖ·\r
+typedef        void (*pSpiFuncIntr)(int,void *);\r
+typedef struct\r
+{\r
+       pSpiFuncIntr gpio_vector;\r
+       void *gpio_devid;\r
+}SPI_GPIO_PDATA;\r
+\r
+\r
+typedef enum eSpiGpioTypeSel\r
+{\r
+       SPI_GPIO0_IS_GPIO = 0,\r
+       SPI_GPIO0_IS_INT,\r
+}eSpiGpioTypeSel_t;\r
+\r
+\r
+\r
+typedef enum eSpiGpioPinInt\r
+{\r
+       SPI_GPIO_INT_DISABLE = 0,\r
+       SPI_GPIO_INT_ENABLE,\r
+}eSpiGpioPinInt_t;\r
+\r
+\r
+typedef enum eSpiGpioIntType \r
+{\r
+       SPI_GPIO_EDGE_FALLING = 0,\r
+       SPI_GPIO_EDGE_RISING,\r
+}eSpiGpioIntType_t;\r
+\r
+typedef enum eSpiGpioPinDirection\r
+{\r
+       SPI_GPIO_IN = 0,\r
+       SPI_GPIO_OUT,\r
+       SPI_GPIO_DIR_ERR,\r
+}eSpiGpioPinDirection_t;\r
+\r
+\r
+typedef enum eSpiGpioPinLevel\r
+{\r
+       SPI_GPIO_LOW = 0,\r
+       SPI_GPIO_HIGH,\r
+       SPI_GPIO_LEVEL_ERR,\r
+}eSpiGpioPinLevel_t;\r
+\r
+#if (FPGA_TYPE == ICE_CC72)\r
+typedef enum eSpiGpioPinNum\r
+{\r
+       SPI_GPIO_P0_00 = 0,     //GPIO0[0]\r
+       SPI_GPIO_P0_01,\r
+       SPI_GPIO_P0_02,\r
+       SPI_GPIO_P0_03,\r
+       SPI_GPIO_P0_04,\r
+       SPI_GPIO_P0_05, \r
+       \r
+       SPI_GPIO_P2_00,         \r
+       SPI_GPIO_P2_01,\r
+       SPI_GPIO_P2_02,\r
+       SPI_GPIO_P2_03,\r
+       SPI_GPIO_P2_04,\r
+       SPI_GPIO_P2_05,\r
+       SPI_GPIO_P2_06,\r
+       SPI_GPIO_P2_07,\r
+       SPI_GPIO_P2_08, \r
+       SPI_GPIO_P2_09 = 15,    //GPIO0[15],the last interrupt/gpio pin \r
+       \r
+       SPI_GPIO_P3_00 = 16,    //GPIO1[0]\r
+       SPI_GPIO_P3_01,\r
+       SPI_GPIO_P3_02,\r
+       SPI_GPIO_P3_03,\r
+       SPI_GPIO_P3_04,\r
+       SPI_GPIO_P3_05,\r
+       SPI_GPIO_P3_06,\r
+       SPI_GPIO_P3_07,\r
+       SPI_GPIO_P3_08,\r
+       SPI_GPIO_P3_09,\r
+       SPI_GPIO_P0_06 = 26,    \r
+       SPI_GPIO_I2C3_SCL,\r
+       SPI_GPIO_I2C3_SDA,\r
+       SPI_GPIO_I2C4_SCL,\r
+       SPI_GPIO_I2C4_SDA,\r
+       \r
+}eSpiGpioPinNum_t;\r
+\r
+#elif (FPGA_TYPE == ICE_CC196)\r
+\r
+typedef enum eSpiGpioPinNum\r
+{\r
+       //GPIO0/INT\r
+       SPI_GPIO_P6_00 = 0,     //HS_DET input  \r
+       SPI_GPIO_P6_01,\r
+       SPI_GPIO_P6_02,\r
+       SPI_GPIO_P6_03,\r
+       SPI_GPIO_P6_04,         //CM3605_POUT_L_INT input\r
+       SPI_GPIO_P6_05,         \r
+       SPI_GPIO_P6_06,         //CHG_OK input\r
+       SPI_GPIO_P6_07,         //HP_HOOK input\r
+       SPI_GPIO_P6_08,\r
+       SPI_GPIO_P6_09,\r
+       SPI_GPIO_P6_10,         //DEFSEL input  \r
+       SPI_GPIO_P6_11,         //FLASH_WP_INT input\r
+       SPI_GPIO_P6_12,         //LOW_BATT_INT input\r
+       SPI_GPIO_P6_13,         //DC_DET input\r
+       SPI_GPIO_P3_08,         \r
+       SPI_GPIO_P3_09 = 15,\r
+\r
+       //GPIO1\r
+       SPI_GPIO_P1_00 = 16,    //LCD_ON output\r
+       SPI_GPIO_P1_01,         //LCD_PWR_CTRL output\r
+       SPI_GPIO_P1_02,         //SD_POW_ON output\r
+       SPI_GPIO_P1_03,         //WL_RST_N/WIFI_EN output\r
+       SPI_GPIO_P1_04,         //HARDO,input\r
+       SPI_GPIO_P1_05,         //SENSOR_PWDN output\r
+       SPI_GPIO_P1_06,         //BT_PWR_EN output\r
+       SPI_GPIO_P1_07,         //BT_RST output\r
+       SPI_GPIO_P1_08,         //BT_WAKE_B output\r
+       SPI_GPIO_P1_09,         //LCD_DISP_ON output\r
+       SPI_GPIO_P1_10,         //WM_PWR_EN output\r
+       SPI_GPIO_P1_11,         //HARD1,input\r
+       SPI_GPIO_P1_12,         //VIB_MOTO output\r
+       SPI_GPIO_P1_13,         //KEYLED_EN output\r
+       SPI_GPIO_P1_14,         //CAM_RST output\r
+       SPI_GPIO_P1_15 = 31,    //WL_WAKE_B output\r
+\r
+       //GPIO2\r
+       SPI_GPIO_P2_00 = 32,    //Y+YD input\r
+       SPI_GPIO_P2_01,         //Y-YU input\r
+       SPI_GPIO_P2_02,         //AP_TD_UNDIFED input\r
+       SPI_GPIO_P2_03,         //AP_PW_EN_TD output\r
+       SPI_GPIO_P2_04,         //AP_RESET_TD output\r
+       SPI_GPIO_P2_05,         //AP_SHUTDOWN_TD_PMU output\r
+       SPI_GPIO_P2_06,         //AP_RESET_CMMB output\r
+       SPI_GPIO_P2_07,         //AP_CHECK_TD_STATUS input\r
+       SPI_GPIO_P2_08,         //CHARGE_CURRENT_SEL output\r
+       SPI_GPIO_P2_09,         //AP_PWD_CMMB output\r
+       SPI_GPIO_P2_10,         //X-XL input\r
+       SPI_GPIO_P2_11,         //X+XR input\r
+       SPI_GPIO_P2_12,         //LCD_RESET output\r
+       SPI_GPIO_P2_13,         //USB_PWR_EN output\r
+       SPI_GPIO_P2_14,         //WL_HOST_WAKE_B output\r
+       SPI_GPIO_P2_15 = 47,    //TOUCH_SCREEN_RST output\r
+\r
+       //GPIO3\r
+       SPI_GPIO_P0_00 = 48,    //\r
+       SPI_GPIO_P0_01,\r
+       SPI_GPIO_P0_02,\r
+       SPI_GPIO_P0_03,\r
+       SPI_GPIO_P0_04,\r
+       SPI_GPIO_P0_05,\r
+       SPI_GPIO_P0_06,\r
+       SPI_GPIO_P0_07,\r
+       SPI_GPIO_P0_08,\r
+       SPI_GPIO_P0_09,         //FPGAС°å¸ÃÒý½ÅδÒý³ö C5\r
+       SPI_GPIO_P0_10,\r
+       SPI_GPIO_P0_11,\r
+       SPI_GPIO_P0_12,\r
+       SPI_GPIO_P0_13,\r
+       SPI_GPIO_P0_14,\r
+       SPI_GPIO_P0_15 = 63,\r
+\r
+       //GPIO4\r
+       SPI_GPIO_P4_00 = 64,    \r
+       SPI_GPIO_P4_01, \r
+       SPI_GPIO_P4_02,\r
+       SPI_GPIO_P4_03,\r
+       SPI_GPIO_P4_04,\r
+       SPI_GPIO_P4_05,\r
+       SPI_GPIO_P4_06,         //CHARGER_INT_END input\r
+       SPI_GPIO_P4_07,         //CM3605_PWD output\r
+       SPI_GPIO_P3_00,         \r
+       SPI_GPIO_P3_01,\r
+       SPI_GPIO_P3_02,\r
+       SPI_GPIO_P3_03,\r
+       SPI_GPIO_P3_04,\r
+       SPI_GPIO_P3_05,\r
+       SPI_GPIO_P3_06,\r
+       SPI_GPIO_P3_07 = 79,    \r
+\r
+       //GPIO5\r
+       SPI_GPIO_P4_08 = 80,    //CM3605_PS_SHUTDOWN\r
+       SPI_GPIO_P0_TXD2,               //temp\r
+\r
+}eSpiGpioPinNum_t;\r
+\r
+#endif\r
+\r
+\r
+typedef enum eSpiGpioPinIntIsr\r
+{\r
+       SPI_GPIO_IS_INT = 0,\r
+       SPI_GPIO_NO_INT,\r
+}eSpiGpioPinIntIsr_t;\r
+\r
+extern struct spi_fpga_port *pFpgaPort;\r
+extern unsigned int spi_in(struct spi_fpga_port *port, int reg, int type);\r
+extern void spi_out(struct spi_fpga_port *port, int reg, int value, int type);\r
+\r
+#if defined(CONFIG_SPI_UART)\r
+extern void spi_uart_handle_irq(struct spi_device *spi);\r
+extern int spi_uart_register(struct spi_fpga_port *port);\r
+extern int spi_uart_unregister(struct spi_fpga_port *port);\r
+#endif\r
+#if defined(CONFIG_SPI_GPIO)\r
+extern int spi_gpio_int_sel(eSpiGpioPinNum_t PinNum,eSpiGpioTypeSel_t type);\r
+extern int spi_gpio_set_pindirection(eSpiGpioPinNum_t PinNum,eSpiGpioPinDirection_t direction);\r
+extern int spi_gpio_set_pinlevel(eSpiGpioPinNum_t PinNum, eSpiGpioPinLevel_t PinLevel);\r
+extern eSpiGpioPinLevel_t spi_gpio_get_pinlevel(eSpiGpioPinNum_t PinNum);\r
+extern int spi_gpio_enable_int(eSpiGpioPinNum_t PinNum);\r
+extern int spi_gpio_disable_int(eSpiGpioPinNum_t PinNum);\r
+extern int spi_gpio_set_int_trigger(eSpiGpioPinNum_t PinNum,eSpiGpioIntType_t IntType);\r
+extern int spi_gpio_read_iir(void);\r
+extern int spi_request_gpio_irq(eSpiGpioPinNum_t PinNum, pSpiFunc Routine, eSpiGpioIntType_t IntType,void *dev_id);\r
+extern int spi_free_gpio_irq(eSpiGpioPinNum_t PinNum);\r
+extern int spi_gpio_handle_irq(struct spi_device *spi);\r
+extern int spi_gpio_init(void);\r
+extern int spi_gpio_register(struct spi_fpga_port *port);\r
+extern int spi_gpio_unregister(struct spi_fpga_port *port);\r
+#endif\r
+#if defined(CONFIG_SPI_I2C)\r
+extern int spi_i2c_handle_irq(struct spi_fpga_port *port,unsigned char channel);\r
+extern int spi_i2c_register(struct spi_fpga_port *port,int num);\r
+extern int spi_i2c_unregister(struct spi_fpga_port *port);\r
+#endif\r
+#if defined(CONFIG_SPI_DPRAM)\r
+extern int spi_dpram_handle_irq(struct spi_device *spi);\r
+extern int spi_dpram_register(struct spi_fpga_port *port);\r
+extern int spi_dpram_unregister(struct spi_fpga_port *port);\r
+#endif\r
+\r
+#endif\r