+++ /dev/null
-/*\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