| /* drivers/input/touchscreen/raydium_wt030/raydium_driver.h |
| * |
| * Raydium TouchScreen driver. |
| * |
| * Copyright (c) 2010 Raydium tech Ltd. |
| * |
| * This software is licensed under the terms of the GNU General Public |
| * License version 2, as published by the Free Software Foundation, and |
| * may be copied, distributed, and modified under those terms. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| |
| #ifndef __LINUX_RAYDIUM_H |
| #define __LINUX_RAYDIUM_H |
| #define RAYDIUM_NAME "raydium_ts" |
| #define COORDS_ARR_SIZE 4 |
| #define I2C_VTG_MIN_UV 1650000 |
| #define I2C_VTG_MAX_UV 1950000 |
| #define VDD_VTG_MIN_UV 1650000 |
| #define VDD_VTG_MAX_UV 1950000 |
| #define RAD_MAIN_VERSION 0x01 |
| #define RAD_MINOR_VERSION 0x07 |
| #define RAD_CUSTOMER_VERSION 0x0100 |
| |
| #if defined(CONFIG_TOUCHSCREEN_RAYDIUM_CHIPSET) |
| /* IC timing control arguments */ |
| #define RAYDIUM_POWERON_DELAY_USEC 500 |
| #define RAYDIUM_RESET_INTERVAL_MSEC 5 |
| #define RAYDIUM_RESET_RESTORE_USEC 200 |
| #define RAYDIUM_RESET_DELAY_MSEC 100 |
| |
| /* I2C bus slave address(ID) */ |
| #define RAYDIUM_I2C_EID (0x5A) |
| #define RAYDIUM_I2C_NID (0x39) |
| |
| /* I2C R/W configuration literal */ |
| #define RAYDIUM_I2C_WRITE I2C_SMBUS_WRITE |
| #define RAYDIUM_I2C_READ I2C_SMBUS_READ |
| #define SYN_I2C_RETRY_TIMES 2 |
| #define MAX_WRITE_PACKET_SIZE 64 |
| #define MAX_READ_PACKET_SIZE 64 |
| |
| /* PDA address and bit definition*/ |
| #define RAD_READ_FT_DATA_CMD 0x2000019C |
| /* 1byte, disable:0x00 ; enable:0x20*/ |
| #define RAD_GESTURE_STATE_CMD 0x200005F4 |
| #define RAD_GESTURE_DISABLE 0x00 |
| #define RAD_GESTURE_ENABLE 0x20 |
| /* 4bytes, [0]:ready ; [1]:type ; [2]:direction*/ |
| #define RAD_GESTURE_RESULT_CMD 0x200005F0 |
| #define RAD_CHK_I2C_CMD 0x500009BC |
| #define RAD_PDA2_CTRL_CMD 0x50000628 |
| #define RAD_ENABLE_PDA2 0x04 |
| #define RAD_ENABLE_SI2 0x02 |
| |
| /* PDA literal */ |
| #define MASK_8BIT 0xFF |
| #define RAD_I2C_PDA_ADDRESS_LENGTH 4 |
| #define PDA_MODE 1 |
| #define PDA2_MODE 2 |
| #define RAD_I2C_PDA_MODE_DISABLE 0x00 |
| #define RAD_I2C_PDA_MODE_ENABLE 0x80 |
| /* Using byte mode due to data might be not word-aligment */ |
| #define RAD_I2C_PDA_MODE_WORD_MODE 0x40 |
| #define RAD_I2C_PDA_2_MODE_DISABLE 0x20 |
| #define RAD_PALM_DISABLE 0x00 |
| #define RAD_PALM_ENABLE 0x01 |
| #define RAD_WAKE_UP 0x02 |
| #define RAYDIUM_TEST_FW 0x80 |
| #define RAYDIUM_TEST_PARA 0x40 |
| #define RAYDIUM_BOOTLOADER 0x20 |
| #define RAYDIUM_FIRMWARE 0x10 |
| #define RAYDIUM_PARA 0x08 |
| #define RAYDIUM_COMP 0x04 |
| #define RAYDIUM_BASELINE 0x02 |
| #define RAYDIUM_INIT 0x01 |
| #define FAIL 0 |
| #define ERROR -1 |
| #define SUCCESS 1 |
| #define DISABLE 0 |
| #define ENABLE 1 |
| |
| /* PDA2 setting */ |
| /* Page 0 ~ Page A */ |
| #define MAX_PAGE_AMOUNT 11 |
| |
| /* PDA2 address and setting definition*/ |
| #define RAYDIUM_PDA2_TCH_RPT_STATUS_ADDR 0x00 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_TCH_RPT_ADDR 0x01 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_HOST_CMD_ADDR 0x02 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_PALM_AREA_ADDR 0x03 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_GESTURE_RPT_ADDR 0x04 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_PALM_STATUS_ADDR 0x05 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_FW_VERSION_ADDR 0x06 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_PANEL_VERSION_ADDR 0x07 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_DISPLAY_INFO_ADDR 0x08 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_PDA_CFG_ADDR 0x09 /* only in Page 0 */ |
| #define RAYDIUM_PDA2_RAWDATA_ADDR 0x0B /* only in Page 0 */ |
| /* Page 0 ~ Page 9 will be directed to Page 0 */ |
| #define RAYDIUM_PDA2_PAGE_ADDR 0x0A |
| #define RAYDIUM_PDA2_PAGE_0 0x00 |
| /* temporary switch to PDA once */ |
| #define RAYDIUM_PDA2_ENABLE_PDA 0x0A |
| /* permanently switch to PDA mode */ |
| #define RAYDIUM_PDA2_2_PDA (MAX_PAGE_AMOUNT + 2) |
| |
| /* Raydium host cmd */ |
| #define RAYDIUM_HOST_CMD_NO_OP 0x00 |
| #define RAYDIUM_HOST_CMD_PWR_SLEEP 0x30 |
| #define RAYDIUM_HOST_CMD_DISPLAY_MODE 0x33 |
| #define RAYDIUM_HOST_CMD_CALIBRATION 0x5C |
| #define RAYDIUM_HOST_CMD_TP_MODE 0x60 |
| #define RAYDIUM_HOST_CMD_FT_MODE 0x61 |
| |
| /* PDA2 literal */ |
| /* entry byte + target page byte */ |
| #define RAYDIUM_I2C_PDA2_PAGE_LENGTH 2 |
| |
| |
| /* Touch report */ |
| #define MAX_TOUCH_NUM 2 |
| #define MAX_REPORT_PACKET_SIZE 35 |
| #define MAX_TCH_STATUS_PACKET_SIZE 4 |
| #define PRESS_MAX 0xFFFF |
| #define WIDTH_MAX 0xFFFF |
| #define BYTE_SHIFT 8 |
| |
| /* FW update literal */ |
| #define RAYDIUM_FW_BIN_PATH_LENGTH 256 |
| |
| #define RAD_BOOT_1X_SIZE 0x800 |
| #define RAD_INIT_1X_SIZE 0x200 |
| #define RAD_FW_1X_SIZE 0x5000 |
| #define RAD_PARA_1X_SIZE 0xE4 |
| #define RAD_TESTFW_1X_SIZE 0x5600 |
| |
| #define RAD_BOOT_2X_SIZE 0x800 |
| #define RAD_INIT_2X_SIZE 0x200 |
| #define RAD_FW_2X_SIZE 0x6200 |
| #define RAD_PARA_2X_SIZE 0x15C |
| #define RAD_TESTFW_2X_SIZE (RAD_FW_2X_SIZE + RAD_PARA_2X_SIZE + 4) |
| |
| #define RAD_CMD_UPDATE_BIN 0x80 |
| #define RAD_CMD_UPDATE_END 0x81 |
| #define RAD_CMD_BURN_FINISH 0x82 |
| |
| /* FT APK literal */ |
| #define RAD_HOST_CMD_POS 0x00 |
| #define RAD_FT_CMD_POS 0x01 |
| #define RAD_FT_CMD_LENGTH 0x02 |
| |
| /* FT APK data type */ |
| #define RAYDIUM_FT_UPDATE 0x01 |
| |
| /*Raydium system flag*/ |
| #define INT_FLAG 0x01 |
| #define ENG_MODE 0x02 |
| |
| /* define display mode */ |
| #define ACTIVE_MODE 0x00 |
| #define AMBIENT_MODE 0x01 |
| #define SLEEP_MODE 0x02 |
| |
| #define RAD_20 0x2209 |
| |
| /* Enable sysfs */ |
| #define CONFIG_RM_SYSFS_DEBUG |
| |
| /* Gesture switch */ |
| #define GESTURE_EN |
| |
| /* Enable FW update */ |
| /* #define FW_UPDATE_EN */ |
| /* #define FW_MAPPING_EN */ |
| #define HOST_NOTIFY_EN |
| #define MSM_NEW_VER |
| |
| /* enable ESD */ |
| /* #define ESD_SOLUTION_EN */ |
| /* #define ENABLE_DUMP_DATA */ |
| /* #define ENABLE_FLASHLOG_BACKUP */ |
| #ifdef ENABLE_DUMP_DATA |
| #define DATA_MAP_5_5 0 |
| #endif |
| |
| |
| |
| #define PINCTRL_STATE_ACTIVE "pmx_ts_active" |
| #define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" |
| #define PINCTRL_STATE_RELEASE "pmx_ts_release" |
| |
| #if defined(CONFIG_TOUCHSCREEN_RM_TS_SELFTEST) |
| #define RAD_SELFTEST |
| #endif |
| |
| struct raydium_ts_data { |
| unsigned int irq; |
| unsigned int irq_gpio; |
| unsigned int rst_gpio; |
| unsigned int x_max; |
| unsigned int y_max; |
| #ifdef FILTER_POINTS |
| unsigned int x_pos[2]; |
| unsigned int y_pos[2]; |
| unsigned int last_x_pos[2]; |
| unsigned int last_y_pos[2]; |
| #else |
| unsigned int x_pos[2]; |
| unsigned int y_pos[2]; |
| #endif |
| unsigned int pressure; |
| unsigned int is_suspend; |
| unsigned int is_sleep; |
| #ifdef GESTURE_EN |
| unsigned int is_palm; |
| #endif |
| unsigned char u8_max_touchs; |
| |
| struct i2c_client *client; |
| struct input_dev *input_dev; |
| struct mutex lock; |
| struct work_struct work; |
| struct workqueue_struct *workqueue; |
| struct irq_desc *irq_desc; |
| bool irq_enabled; |
| bool irq_wake; |
| |
| #if defined(CONFIG_FB) |
| struct notifier_block fb_notif; |
| int blank; |
| #elif defined(CONFIG_HAS_EARLYSUSPEND) |
| struct early_suspend early_suspend; |
| #endif /*end of CONFIG_FB*/ |
| |
| struct regulator *vdd; |
| struct regulator *vcc_i2c; |
| unsigned int fw_version; |
| unsigned short id; |
| char *vcc_name; |
| #ifdef MSM_NEW_VER |
| struct pinctrl *ts_pinctrl; |
| struct pinctrl_state *pinctrl_state_active; |
| struct pinctrl_state *pinctrl_state_suspend; |
| struct pinctrl_state *pinctrl_state_release; |
| #endif /*end of MSM_NEW_VER*/ |
| |
| #ifdef ENABLE_DUMP_DATA |
| struct delayed_work dump_work; |
| |
| #endif /*end of ENABLE_DUMP_DATA*/ |
| |
| }; |
| struct raydium_platform_data { |
| char *vdd_name; |
| int irq_gpio_number; |
| int reset_gpio_number; |
| int x_max; |
| int y_max; |
| }; |
| |
| struct raydium_ts_platform_data { |
| char *name; |
| u32 irqflags; |
| u32 irq_gpio; |
| u32 irq_gpio_flags; |
| u32 reset_gpio; |
| u32 reset_gpio_flags; |
| u32 x_max; |
| u32 y_max; |
| u32 x_min; |
| u32 y_min; |
| u32 hard_rst_dly; |
| u32 soft_rst_dly; |
| u32 num_max_touches; |
| u32 fw_id; |
| }; |
| |
| /* TODO: Using struct+memcpy instead of array+offset*/ |
| enum raydium_pt_report_status { |
| POS_SEQ = 0,/*1:touch, 0:no touch*/ |
| POS_PT_AMOUNT, |
| POS_GES_STATUS, |
| POS_FW_STATE, |
| }; |
| |
| enum raydium_pt_report_idx { |
| POS_PT_ID = 0, |
| POS_X_L, |
| POS_X_H, |
| POS_Y_L, |
| POS_Y_H, |
| POS_PRESSURE_L, |
| POS_PRESSURE_H, |
| POS_WX_L, |
| POS_WX_H, |
| POS_WY_L, |
| POS_WY_H, |
| LEN_PT = 11 |
| }; |
| |
| extern int raydium_read_touchdata(unsigned char *tp_status, unsigned char *buf); |
| extern unsigned char raydium_mem_table_setting(void); |
| extern int wait_fw_state(struct i2c_client *client, unsigned int u32_addr, |
| unsigned int u32_state, unsigned long u32_delay_us, |
| unsigned short u16_retry); |
| extern int wait_irq_state(struct i2c_client *client, |
| unsigned int u32_retry_time, |
| unsigned int u32_delay_us); |
| extern void raydium_irq_control(bool enable); |
| |
| extern int raydium_i2c_mode_control(struct i2c_client *client, |
| unsigned char u8_mode); |
| extern int raydium_i2c_pda_read(struct i2c_client *client, |
| unsigned int u32_addr, unsigned char *u8_r_data, |
| unsigned short u16_length); |
| extern int raydium_i2c_pda_write(struct i2c_client *client, |
| unsigned int u32_addr, unsigned char *u8_w_data, |
| unsigned short u16_length); |
| extern int raydium_i2c_pda2_read(struct i2c_client *client, |
| unsigned char u8_addr, |
| unsigned char *u8_r_data, |
| unsigned short u16_length); |
| extern int raydium_i2c_pda2_write(struct i2c_client *client, |
| unsigned char u8_addr, |
| unsigned char *u8_w_data, |
| unsigned short u16_length); |
| extern int raydium_i2c_pda2_set_page(struct i2c_client *client, |
| unsigned int is_suspend, |
| unsigned char u8_page); |
| extern unsigned char raydium_selftest_stop_mcu(struct i2c_client *client); |
| extern int raydium_burn_comp(struct i2c_client *client); |
| extern int raydium_burn_fw(struct i2c_client *client); |
| extern int raydium_fw_upgrade_with_bin_file(struct i2c_client *client, |
| char *arguments, |
| size_t count, |
| struct device *dev); |
| extern int raydium_load_test_fw(struct i2c_client *client); |
| extern int raydium_fw_update_check(unsigned short u16_i2c_data); |
| extern int raydium_i2c_pda_set_address(unsigned int u32_address, |
| unsigned char u8_mode); |
| extern unsigned char raydium_mem_table_init(unsigned short u16_id); |
| extern unsigned char raydium_id_init(unsigned char u8_type); |
| |
| #ifdef RAD_SELFTEST |
| extern int raydium_do_selftest(void); |
| #endif |
| int raydium_esd_check(void); |
| |
| extern struct attribute *raydium_attributes[]; |
| |
| extern unsigned char g_u8_raydium_flag; |
| extern unsigned char g_u8_addr; |
| extern unsigned char g_u8_i2c_mode; |
| extern unsigned char g_u8_upgrade_type; |
| extern unsigned char g_u8_raw_data_type; |
| extern unsigned int g_u32_raw_data_len; /* 72 bytes*/ |
| extern unsigned int g_u32_length; |
| extern unsigned long g_u32_addr; |
| extern unsigned char *g_rad_fw_image, *g_rad_init_image; |
| extern unsigned char *g_rad_boot_image, *g_rad_para_image; |
| extern unsigned char *g_rad_testfw_image, *g_rad_testpara_image; |
| extern unsigned char g_u8_table_setting, g_u8_table_init; |
| extern unsigned int g_u32_driver_version; |
| extern unsigned char g_u8_resetflag; |
| extern struct raydium_ts_data *g_raydium_ts; |
| |
| #endif |
| #endif /*__LINUX_RAYDIUM_H*/ |
| |
| MODULE_AUTHOR("Raydium"); |
| MODULE_DESCRIPTION("Raydium TouchScreen driver"); |
| MODULE_LICENSE("GPL"); |
| |