synaptics_i2c_rmi.h 15 KB

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