synaptics_i2c_rmi.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. /* Synaptics Register Mapped Interface (RMI4) I2C Physical Layer Driver.
  2. * Copyright (c) 2007-2012, Synaptics Incorporated
  3. *
  4. * This software is licensed under the terms of the GNU General Public
  5. * License version 2, as published by the Free Software Foundation, and
  6. * may be copied, distributed, and modified under those terms.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. */
  14. #ifndef _SYNAPTICS_RMI4_H_
  15. #define _SYNAPTICS_RMI4_H_
  16. #define SYNAPTICS_RMI4_DRIVER_VERSION "DS5 1.0"
  17. #include <linux/device.h>
  18. #include "synaptics_rmi.h"
  19. #ifdef CONFIG_HAS_EARLYSUSPEND
  20. #include <linux/earlysuspend.h>
  21. #endif
  22. /*#define dev_dbg(dev, fmt, arg...) dev_info(dev, fmt, ##arg)*/
  23. #define SYNAPTICS_DEVICE_NAME "GT-I95XX"
  24. /* DVFS feature : TOUCH BOOSTER */
  25. #define TSP_BOOSTER
  26. #ifdef TSP_BOOSTER
  27. #define DVFS_STAGE_DUAL 2
  28. #define DVFS_STAGE_SINGLE 1
  29. #define DVFS_STAGE_NONE 0
  30. #include <linux/cpufreq.h>
  31. #define TOUCH_BOOSTER_OFF_TIME 300
  32. #define TOUCH_BOOSTER_CHG_TIME 200
  33. #endif
  34. #define CONFIG_GLOVE_TOUCH
  35. //#define SECURE_TSP
  36. /* To support suface touch, firmware should support data
  37. * which is required related app ex) MT_PALM ...
  38. * Synpatics IC report those data through F51's edge swipe
  39. * fucntionality.
  40. */
  41. #define SURFACE_TOUCH
  42. #define USE_OPEN_CLOSE
  43. #ifdef USE_OPEN_CLOSE
  44. /*#define USE_OPEN_DWORK*/
  45. #endif
  46. #ifdef USE_OPEN_DWORK
  47. #define TOUCH_OPEN_DWORK_TIME 10
  48. #endif
  49. #undef TSP_INIT_COMPLETE
  50. #undef TSP_TURNOFF_AFTER_PROBE
  51. #if !defined(CONFIG_SEC_H_PROJECT) && !defined(CONFIG_SEC_JS_PROJECT) && !defined(CONFIG_MACH_JSGLTE_CHN_CMCC)
  52. /* To recovery the device from ghost touch */
  53. #define TSP_PATTERN_TRACKING_METHOD
  54. #define PATTERN_TRACKING_FOR_FULLSCREEN
  55. #endif
  56. #define SYNAPTICS_HW_RESET_TIME 80
  57. #define SYNAPTICS_REZERO_TIME 100
  58. #define SYNAPTICS_POWER_MARGIN_TIME 150
  59. #define SYNAPTICS_PRODUCT_ID_B0 "SY 01"
  60. #define SYNAPTICS_PRODUCT_ID_B0_SPAIR "S5000B"
  61. #ifdef CONFIG_MACH_JACTIVESKT
  62. #define FW_IMAGE_NAME_B0_HSYNC "tsp_synaptics/jactive/synaptics_b0_hsync.fw"
  63. #define FW_IMAGE_NAME_B0_HSYNC_FAC "tsp_synaptics/jactive/synaptics_b0_hsync_fac.fw"
  64. #define FW_IMAGE_NAME_B0_HSYNC04 "tsp_synaptics/jactive/synaptics_b0_hsync04.fw"
  65. #define FW_IMAGE_NAME_B0_HSYNC04_FAC "tsp_synaptics/jactive/synaptics_b0_hsync04_fac.fw"
  66. /* NON HYNC F/W will be removed */
  67. /* PRODUCT ID : SY 01, SY 02, S5000B */
  68. #define FW_IMAGE_NAME_B0_NON_HSYNC "tsp_synaptics/jactive/synaptics_b0_non_hsync.fw"
  69. #define FW_IMAGE_NAME_B0_NON_HSYNC_FAC "tsp_synaptics/jactive/synaptics_b0_non_hsync_fac.fw"
  70. #endif
  71. /* User firmware */
  72. #define FW_IMAGE_NAME_B0_3_4 "tsp_synaptics/synaptics_b0_3_4.fw"
  73. #define FW_IMAGE_NAME_B0_4_0 "tsp_synaptics/synaptics_b0_4_0.fw"
  74. #if defined(CONFIG_SEC_H_PROJECT) || defined(CONFIG_SEC_JS_PROJECT) || defined(CONFIG_MACH_JSGLTE_CHN_CMCC)
  75. #define FW_IMAGE_NAME_B0_4_3 "tsp_synaptics/jsglte/synaptics_b0_4_3_new.fw"
  76. #else
  77. #define FW_IMAGE_NAME_B0_4_3 "tsp_synaptics/synaptics_b0_4_3.fw"
  78. #endif
  79. #define FW_IMAGE_NAME_B0_5_1 "tsp_synaptics/jsglte/synaptics_b0_5_1.fw"
  80. /* Factory firmware */
  81. #define FAC_FWIMAGE_NAME_B0 "tsp_synaptics/jsglte/synaptics_b0_fac.fw"
  82. #define FAC_FWIMAGE_NAME_B0_5_1 "tsp_synaptics/jsglte/synaptics_b0_5_1_fac.fw"
  83. /* firmware for Melius */
  84. #define FW_IMAGE_NAME_B0_NEP_14 "tsp_synaptics/synaptics_b0_nep_14.fw"
  85. #define FW_IMAGE_NAME_B0_NEP_1F "tsp_synaptics/synaptics_b0_nep_1F.fw"
  86. #define SYNAPTICS_MAX_FW_PATH 64
  87. #define SYNAPTICS_DEFAULT_UMS_FW "/sdcard/synaptics.fw"
  88. #define DATE_OF_FIRMWARE_BIN_OFFSET 0xEF00
  89. #define IC_REVISION_BIN_OFFSET 0xEF02
  90. #define FW_VERSION_BIN_OFFSET 0xEF03
  91. #define PDT_PROPS (0X00EF)
  92. #define PDT_START (0x00E9)
  93. #define PDT_END (0x000A)
  94. #define PDT_ENTRY_SIZE (0x0006)
  95. #define PAGES_TO_SERVICE (10)
  96. #define PAGE_SELECT_LEN (2)
  97. #define SYNAPTICS_RMI4_F01 (0x01)
  98. #define SYNAPTICS_RMI4_F11 (0x11)
  99. #define SYNAPTICS_RMI4_F12 (0x12)
  100. #define SYNAPTICS_RMI4_F1A (0x1a)
  101. #define SYNAPTICS_RMI4_F34 (0x34)
  102. #define SYNAPTICS_RMI4_F51 (0x51)
  103. #define SYNAPTICS_RMI4_F54 (0x54)
  104. #define SYNAPTICS_RMI4_PRODUCT_INFO_SIZE 2
  105. #define SYNAPTICS_RMI4_DATE_CODE_SIZE 3
  106. #define SYNAPTICS_RMI4_PRODUCT_ID_SIZE 10
  107. #define SYNAPTICS_RMI4_BUILD_ID_SIZE 3
  108. #define SYNAPTICS_RMI4_PRODUCT_ID_LENGTH 10
  109. #define MAX_NUMBER_OF_BUTTONS 4
  110. #define MAX_INTR_REGISTERS 4
  111. #define MAX_NUMBER_OF_FINGERS 10
  112. #define MASK_16BIT 0xFFFF
  113. #define MASK_8BIT 0xFF
  114. #define MASK_7BIT 0x7F
  115. #define MASK_6BIT 0x3F
  116. #define MASK_5BIT 0x1F
  117. #define MASK_4BIT 0x0F
  118. #define MASK_3BIT 0x07
  119. #define MASK_2BIT 0x03
  120. #define MASK_1BIT 0x01
  121. /*
  122. * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT
  123. * @query_base_addr: base address for query registers
  124. * @cmd_base_addr: base address for command registers
  125. * @ctrl_base_addr: base address for control registers
  126. * @data_base_addr: base address for data registers
  127. * @intr_src_count: number of interrupt sources
  128. * @fn_number: function number
  129. */
  130. struct synaptics_rmi4_fn_desc {
  131. unsigned char query_base_addr;
  132. unsigned char cmd_base_addr;
  133. unsigned char ctrl_base_addr;
  134. unsigned char data_base_addr;
  135. unsigned char intr_src_count;
  136. unsigned char fn_number;
  137. };
  138. /*
  139. * synaptics_rmi4_fn_full_addr - full 16-bit base addresses
  140. * @query_base: 16-bit base address for query registers
  141. * @cmd_base: 16-bit base address for data registers
  142. * @ctrl_base: 16-bit base address for command registers
  143. * @data_base: 16-bit base address for control registers
  144. */
  145. struct synaptics_rmi4_fn_full_addr {
  146. unsigned short query_base;
  147. unsigned short cmd_base;
  148. unsigned short ctrl_base;
  149. unsigned short data_base;
  150. };
  151. /*
  152. * struct synaptics_rmi4_fn - function handler data structure
  153. * @fn_number: function number
  154. * @num_of_data_sources: number of data sources
  155. * @num_of_data_points: maximum number of fingers supported
  156. * @size_of_data_register_block: data register block size
  157. * @data1_offset: offset to data1 register from data base address
  158. * @intr_reg_num: index to associated interrupt register
  159. * @intr_mask: interrupt mask
  160. * @full_addr: full 16-bit base addresses of function registers
  161. * @link: linked list for function handlers
  162. * @data_size: size of private data
  163. * @data: pointer to private data
  164. */
  165. struct synaptics_rmi4_fn {
  166. unsigned char fn_number;
  167. unsigned char num_of_data_sources;
  168. unsigned char num_of_data_points;
  169. unsigned char size_of_data_register_block;
  170. unsigned char data1_offset;
  171. unsigned char intr_reg_num;
  172. unsigned char intr_mask;
  173. struct synaptics_rmi4_fn_full_addr full_addr;
  174. struct list_head link;
  175. int data_size;
  176. void *data;
  177. };
  178. /*
  179. * struct synaptics_rmi4_device_info - device information
  180. * @version_major: rmi protocol major version number
  181. * @version_minor: rmi protocol minor version number
  182. * @manufacturer_id: manufacturer id
  183. * @product_props: product properties information
  184. * @product_info: product info array
  185. * @date_code: device manufacture date
  186. * @tester_id: tester id array
  187. * @serial_number: device serial number
  188. * @product_id_string: device product id
  189. * @support_fn_list: linked list for function handlers
  190. */
  191. struct synaptics_rmi4_device_info {
  192. unsigned int version_major;
  193. unsigned int version_minor;
  194. unsigned char manufacturer_id;
  195. unsigned char product_props;
  196. unsigned char product_info[SYNAPTICS_RMI4_PRODUCT_INFO_SIZE];
  197. unsigned char date_code[SYNAPTICS_RMI4_DATE_CODE_SIZE];
  198. unsigned short tester_id;
  199. unsigned short serial_number;
  200. unsigned char product_id_string[SYNAPTICS_RMI4_PRODUCT_ID_SIZE + 1];
  201. unsigned char build_id[SYNAPTICS_RMI4_BUILD_ID_SIZE];
  202. struct list_head support_fn_list;
  203. };
  204. /**
  205. * struct synaptics_finger - Represents fingers.
  206. * @ state: finger status.
  207. * @ mcount: moving counter for debug.
  208. */
  209. struct synaptics_finger {
  210. unsigned char state;
  211. unsigned short mcount;
  212. };
  213. /*
  214. * struct synaptics_rmi4_data - rmi4 device instance data
  215. * @i2c_client: pointer to associated i2c client
  216. * @input_dev: pointer to associated input device
  217. * @board: constant pointer to platform data
  218. * @rmi4_mod_info: device information
  219. * @regulator: pointer to associated regulator
  220. * @rmi4_io_ctrl_mutex: mutex for i2c i/o control
  221. * @early_suspend: instance to support early suspend power management
  222. * @current_page: current page in sensor to acess
  223. * @button_0d_enabled: flag for 0d button support
  224. * @full_pm_cycle: flag for full power management cycle in early suspend stage
  225. * @num_of_intr_regs: number of interrupt registers
  226. * @f01_query_base_addr: query base address for f01
  227. * @f01_cmd_base_addr: command base address for f01
  228. * @f01_ctrl_base_addr: control base address for f01
  229. * @f01_data_base_addr: data base address for f01
  230. * @irq: attention interrupt
  231. * @sensor_max_x: sensor maximum x value
  232. * @sensor_max_y: sensor maximum y value
  233. * @irq_enabled: flag for indicating interrupt enable status
  234. * @touch_stopped: flag to stop interrupt thread processing
  235. * @fingers_on_2d: flag to indicate presence of fingers in 2d area
  236. * @sensor_sleep: flag to indicate sleep state of sensor
  237. * @wait: wait queue for touch data polling in interrupt thread
  238. * @i2c_read: pointer to i2c read function
  239. * @i2c_write: pointer to i2c write function
  240. * @irq_enable: pointer to irq enable function
  241. */
  242. struct synaptics_rmi4_data {
  243. struct i2c_client *i2c_client;
  244. struct input_dev *input_dev;
  245. struct synaptics_rmi4_platform_data *board;
  246. struct synaptics_rmi4_power_data *pwrdata;
  247. struct synaptics_rmi4_device_info rmi4_mod_info;
  248. struct regulator *regulator;
  249. struct mutex rmi4_reset_mutex;
  250. struct mutex rmi4_io_ctrl_mutex;
  251. struct mutex rmi4_reflash_mutex;
  252. struct timer_list f51_finger_timer;
  253. #ifdef CONFIG_HAS_EARLYSUSPEND
  254. struct early_suspend early_suspend;
  255. #endif
  256. unsigned char *firmware_image;
  257. struct completion init_done;
  258. struct synaptics_finger finger[MAX_NUMBER_OF_FINGERS];
  259. unsigned char current_page;
  260. unsigned char button_0d_enabled;
  261. unsigned char full_pm_cycle;
  262. unsigned char num_of_rx;
  263. unsigned char num_of_tx;
  264. unsigned char num_of_node;
  265. unsigned char num_of_fingers;
  266. unsigned char max_touch_width;
  267. unsigned char intr_mask[MAX_INTR_REGISTERS];
  268. unsigned short num_of_intr_regs;
  269. unsigned short f01_query_base_addr;
  270. unsigned short f01_cmd_base_addr;
  271. unsigned short f01_ctrl_base_addr;
  272. unsigned short f01_data_base_addr;
  273. int irq;
  274. int sensor_max_x;
  275. int sensor_max_y;
  276. int touch_threshold;
  277. int gloved_sensitivity;
  278. int ta_status;
  279. bool flash_prog_mode;
  280. bool irq_enabled;
  281. bool touch_stopped;
  282. bool fingers_on_2d;
  283. bool f51_finger;
  284. bool sensor_sleep;
  285. bool stay_awake;
  286. bool staying_awake;
  287. bool tsp_probe;
  288. int ic_revision_of_ic; /* revision of reading from IC */
  289. int fw_version_of_ic; /* firmware version of IC */
  290. int ic_revision_of_bin; /* revision of reading from binary */
  291. int fw_version_of_bin; /* firmware version of binary */
  292. int fw_release_date_of_ic; /* Config release data from IC */
  293. int panel_revision; /* Octa panel revision */
  294. bool doing_reflash;
  295. int rebootcount;
  296. #ifdef TSP_PATTERN_TRACKING_METHOD
  297. int ftouch_reboot;
  298. #endif
  299. struct regulator *vcc_en;
  300. #ifdef CONFIG_SEC_TSP_FACTORY
  301. int bootmode;
  302. #endif
  303. #ifdef TSP_BOOSTER
  304. struct delayed_work work_dvfs_off;
  305. struct delayed_work work_dvfs_chg;
  306. struct mutex dvfs_lock;
  307. bool dvfs_lock_status;
  308. int dvfs_old_stauts;
  309. int dvfs_boost_mode;
  310. int dvfs_freq;
  311. #endif
  312. bool hover_status_in_normal_mode;
  313. #ifdef CONFIG_GLOVE_TOUCH
  314. unsigned char glove_mode_feature;
  315. unsigned char glove_mode_enables;
  316. unsigned short glove_mode_enables_addr;
  317. bool fast_glove_state;
  318. bool touchkey_glove_mode_status;
  319. #endif
  320. #ifdef USE_OPEN_DWORK
  321. struct delayed_work open_work;
  322. #endif
  323. struct delayed_work rezero_work;
  324. #ifdef TSP_PATTERN_TRACKING_METHOD
  325. struct delayed_work reboot_work;
  326. #endif
  327. struct mutex rmi4_device_mutex;
  328. #ifdef SYNAPTICS_RMI_INFORM_CHARGER
  329. void (*register_cb)(struct synaptics_rmi_callbacks *);
  330. struct synaptics_rmi_callbacks callbacks;
  331. #endif
  332. int (*i2c_read)(struct synaptics_rmi4_data *pdata, unsigned short addr,
  333. unsigned char *data, unsigned short length);
  334. int (*i2c_write)(struct synaptics_rmi4_data *pdata, unsigned short addr,
  335. unsigned char *data, unsigned short length);
  336. int (*irq_enable)(struct synaptics_rmi4_data *rmi4_data, bool enable);
  337. int (*reset_device)(struct synaptics_rmi4_data *rmi4_data);
  338. int (*stop_device)(struct synaptics_rmi4_data *rmi4_data);
  339. int (*start_device)(struct synaptics_rmi4_data *rmi4_data);
  340. };
  341. enum exp_fn {
  342. RMI_DEV = 0,
  343. RMI_F54,
  344. RMI_FW_UPDATER,
  345. RMI_LAST,
  346. };
  347. struct synaptics_rmi4_exp_fn_ptr {
  348. int (*read)(struct synaptics_rmi4_data *rmi4_data, unsigned short addr,
  349. unsigned char *data, unsigned short length);
  350. int (*write)(struct synaptics_rmi4_data *rmi4_data, unsigned short addr,
  351. unsigned char *data, unsigned short length);
  352. int (*enable)(struct synaptics_rmi4_data *rmi4_data, bool enable);
  353. };
  354. #ifdef SECURE_TSP
  355. static int secure_mode_status; /* global define for debugging */
  356. #endif
  357. int synaptics_rmi4_new_function(enum exp_fn fn_type,
  358. int (*func_init)(struct synaptics_rmi4_data *rmi4_data),
  359. void (*func_remove)(struct synaptics_rmi4_data *rmi4_data),
  360. void (*func_attn)(struct synaptics_rmi4_data *rmi4_data,
  361. unsigned char intr_mask));
  362. int rmidev_module_register(void);
  363. int rmi4_f54_module_register(void);
  364. int synaptics_rmi4_f54_set_control(struct synaptics_rmi4_data *rmi4_data);
  365. int rmi4_fw_update_module_register(void);
  366. int synaptics_fw_updater(unsigned char *fw_data);
  367. int synaptics_rmi4_fw_update_on_probe(struct synaptics_rmi4_data *rmi4_data);
  368. int synaptics_rmi4_proximity_enables(unsigned char enables);
  369. int synaptics_rmi4_glove_mode_enables(struct synaptics_rmi4_data *rmi4_data);
  370. int synaptics_proximity_no_sleep_set(bool enables);
  371. extern struct class *sec_class;
  372. static inline ssize_t synaptics_rmi4_show_error(struct device *dev,
  373. struct device_attribute *attr, char *buf)
  374. {
  375. dev_warn(dev, "%s Attempted to read from write-only attribute %s\n",
  376. __func__, attr->attr.name);
  377. return -EPERM;
  378. }
  379. static inline ssize_t synaptics_rmi4_store_error(struct device *dev,
  380. struct device_attribute *attr, const char *buf, size_t count)
  381. {
  382. dev_warn(dev, "%s Attempted to write to read-only attribute %s\n",
  383. __func__, attr->attr.name);
  384. return -EPERM;
  385. }
  386. static inline void batohs(unsigned short *dest, unsigned char *src)
  387. {
  388. *dest = src[1] * 0x100 + src[0];
  389. }
  390. static inline void hstoba(unsigned char *dest, unsigned short src)
  391. {
  392. dest[0] = src % 0x100;
  393. dest[1] = src / 0x100;
  394. }
  395. #endif