xref: /OK3568_Linux_fs/kernel/drivers/input/touchscreen/focaltech_touch/focaltech_common.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * FocalTech fts TouchScreen driver.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2012-2018, Focaltech Ltd. All rights reserved.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * This software is licensed under the terms of the GNU General Public
8*4882a593Smuzhiyun  * License version 2, as published by the Free Software Foundation, and
9*4882a593Smuzhiyun  * may be copied, distributed, and modified under those terms.
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful,
12*4882a593Smuzhiyun  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*4882a593Smuzhiyun  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*4882a593Smuzhiyun  * GNU General Public License for more details.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun /*****************************************************************************
18*4882a593Smuzhiyun *
19*4882a593Smuzhiyun * File Name: focaltech_common.h
20*4882a593Smuzhiyun *
21*4882a593Smuzhiyun * Author: Focaltech Driver Team
22*4882a593Smuzhiyun *
23*4882a593Smuzhiyun * Created: 2016-08-16
24*4882a593Smuzhiyun *
25*4882a593Smuzhiyun * Abstract:
26*4882a593Smuzhiyun *
27*4882a593Smuzhiyun * Reference:
28*4882a593Smuzhiyun *
29*4882a593Smuzhiyun *****************************************************************************/
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #ifndef __LINUX_FOCALTECH_COMMON_H__
32*4882a593Smuzhiyun #define __LINUX_FOCALTECH_COMMON_H__
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #include "focaltech_config.h"
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun /*****************************************************************************
37*4882a593Smuzhiyun * Macro definitions using #define
38*4882a593Smuzhiyun *****************************************************************************/
39*4882a593Smuzhiyun #define FTS_DRIVER_VERSION                  "Focaltech V3.0a 20180929"
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define BYTE_OFF_0(x)           (u8)((x) & 0xFF)
42*4882a593Smuzhiyun #define BYTE_OFF_8(x)           (u8)((x >> 8) & 0xFF)
43*4882a593Smuzhiyun #define BYTE_OFF_16(x)          (u8)((x >> 16) & 0xFF)
44*4882a593Smuzhiyun #define BYTE_OFF_24(x)          (u8)((x >> 24) & 0xFF)
45*4882a593Smuzhiyun #define FLAGBIT(x)              (0x00000001 << (x))
46*4882a593Smuzhiyun #define FLAGBITS(x, y)          ((0xFFFFFFFF >> (32 - (y) - 1)) << (x))
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define FLAG_ICSERIALS_LEN      8
49*4882a593Smuzhiyun #define FLAG_HID_BIT            10
50*4882a593Smuzhiyun #define FLAG_IDC_BIT            11
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #define IC_SERIALS              (FTS_CHIP_TYPE & FLAGBITS(0, FLAG_ICSERIALS_LEN-1))
53*4882a593Smuzhiyun #define IC_TO_SERIALS(x)        ((x) & FLAGBITS(0, FLAG_ICSERIALS_LEN-1))
54*4882a593Smuzhiyun #define FTS_CHIP_IDC            ((FTS_CHIP_TYPE & FLAGBIT(FLAG_IDC_BIT)) == FLAGBIT(FLAG_IDC_BIT))
55*4882a593Smuzhiyun #define FTS_HID_SUPPORTTED      ((FTS_CHIP_TYPE & FLAGBIT(FLAG_HID_BIT)) == FLAGBIT(FLAG_HID_BIT))
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define FTS_CHIP_TYPE_MAPPING {{0x10,0x82, 0x01, 0x80, 0x06, 0x80, 0xC6, 0x80, 0xB6}}
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define I2C_BUFFER_LENGTH_MAXINUM           256
60*4882a593Smuzhiyun #define FILE_NAME_LENGTH                    128
61*4882a593Smuzhiyun #define ENABLE                              1
62*4882a593Smuzhiyun #define DISABLE                             0
63*4882a593Smuzhiyun #define VALID                               1
64*4882a593Smuzhiyun #define INVALID                             0
65*4882a593Smuzhiyun #define FTS_CMD_START1                      0x55
66*4882a593Smuzhiyun #define FTS_CMD_START2                      0xAA
67*4882a593Smuzhiyun #define FTS_CMD_START_DELAY                 10
68*4882a593Smuzhiyun #define FTS_CMD_READ_ID                     0x90
69*4882a593Smuzhiyun #define FTS_CMD_READ_ID_LEN                 4
70*4882a593Smuzhiyun #define FTS_CMD_READ_ID_LEN_INCELL          1
71*4882a593Smuzhiyun /*register address*/
72*4882a593Smuzhiyun #define FTS_REG_INT_CNT                     0x8F
73*4882a593Smuzhiyun #define FTS_REG_FLOW_WORK_CNT               0x91
74*4882a593Smuzhiyun #define FTS_REG_WORKMODE                    0x00
75*4882a593Smuzhiyun #define FTS_REG_WORKMODE_FACTORY_VALUE      0x40
76*4882a593Smuzhiyun #define FTS_REG_WORKMODE_WORK_VALUE         0x00
77*4882a593Smuzhiyun #define FTS_REG_ESDCHECK_DISABLE            0x8D
78*4882a593Smuzhiyun #define FTS_REG_CHIP_ID                     0xA3
79*4882a593Smuzhiyun #define FTS_REG_CHIP_ID2                    0x9F
80*4882a593Smuzhiyun #define FTS_REG_POWER_MODE                  0xA5
81*4882a593Smuzhiyun #define FTS_REG_POWER_MODE_SLEEP_VALUE      0x03
82*4882a593Smuzhiyun #define FTS_REG_FW_VER                      0xA6
83*4882a593Smuzhiyun #define FTS_REG_VENDOR_ID                   0xA8
84*4882a593Smuzhiyun #define FTS_REG_LCD_BUSY_NUM                0xAB
85*4882a593Smuzhiyun #define FTS_REG_FACE_DEC_MODE_EN            0xB0
86*4882a593Smuzhiyun #define FTS_REG_FACE_DEC_MODE_STATUS        0x01
87*4882a593Smuzhiyun #define FTS_REG_IDE_PARA_VER_ID             0xB5
88*4882a593Smuzhiyun #define FTS_REG_IDE_PARA_STATUS             0xB6
89*4882a593Smuzhiyun #define FTS_REG_GLOVE_MODE_EN               0xC0
90*4882a593Smuzhiyun #define FTS_REG_COVER_MODE_EN               0xC1
91*4882a593Smuzhiyun #define FTS_REG_CHARGER_MODE_EN             0x8B
92*4882a593Smuzhiyun #define FTS_REG_GESTURE_EN                  0xD0
93*4882a593Smuzhiyun #define FTS_REG_GESTURE_OUTPUT_ADDRESS      0xD3
94*4882a593Smuzhiyun #define FTS_REG_MODULE_ID                   0xE3
95*4882a593Smuzhiyun #define FTS_REG_LIC_VER                     0xE4
96*4882a593Smuzhiyun #define FTS_REG_ESD_SATURATE                0xED
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun #define FTS_SYSFS_ECHO_ON(buf)      (buf[0] == '1')
99*4882a593Smuzhiyun #define FTS_SYSFS_ECHO_OFF(buf)     (buf[0] == '0')
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun #define kfree_safe(pbuf) do {\
102*4882a593Smuzhiyun     if (pbuf) {\
103*4882a593Smuzhiyun         kfree(pbuf);\
104*4882a593Smuzhiyun         pbuf = NULL;\
105*4882a593Smuzhiyun     }\
106*4882a593Smuzhiyun } while(0)
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /*****************************************************************************
109*4882a593Smuzhiyun *  Alternative mode (When something goes wrong, the modules may be able to solve the problem.)
110*4882a593Smuzhiyun *****************************************************************************/
111*4882a593Smuzhiyun /*
112*4882a593Smuzhiyun  * point report check
113*4882a593Smuzhiyun  * default: disable
114*4882a593Smuzhiyun  */
115*4882a593Smuzhiyun #define FTS_POINT_REPORT_CHECK_EN               0
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /*****************************************************************************
118*4882a593Smuzhiyun * Global variable or extern global variabls/functions
119*4882a593Smuzhiyun *****************************************************************************/
120*4882a593Smuzhiyun struct ft_chip_t {
121*4882a593Smuzhiyun     u64 type;
122*4882a593Smuzhiyun     u8 chip_idh;
123*4882a593Smuzhiyun     u8 chip_idl;
124*4882a593Smuzhiyun     u8 rom_idh;
125*4882a593Smuzhiyun     u8 rom_idl;
126*4882a593Smuzhiyun     u8 pb_idh;
127*4882a593Smuzhiyun     u8 pb_idl;
128*4882a593Smuzhiyun     u8 bl_idh;
129*4882a593Smuzhiyun     u8 bl_idl;
130*4882a593Smuzhiyun };
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun struct ts_ic_info {
133*4882a593Smuzhiyun     bool is_incell;
134*4882a593Smuzhiyun     bool hid_supported;
135*4882a593Smuzhiyun     struct ft_chip_t ids;
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun /*****************************************************************************
139*4882a593Smuzhiyun * DEBUG function define here
140*4882a593Smuzhiyun *****************************************************************************/
141*4882a593Smuzhiyun #if FTS_DEBUG_EN
142*4882a593Smuzhiyun #define FTS_DEBUG_LEVEL     1
143*4882a593Smuzhiyun #if (FTS_DEBUG_LEVEL == 2)
144*4882a593Smuzhiyun #define FTS_DEBUG(fmt, args...) printk("[FTS][%s]"fmt"\n", __func__, ##args)
145*4882a593Smuzhiyun #else
146*4882a593Smuzhiyun #define FTS_DEBUG(fmt, args...) printk("[FTS]"fmt"\n", ##args)
147*4882a593Smuzhiyun #endif
148*4882a593Smuzhiyun #define FTS_FUNC_ENTER() printk("[FTS]%s: Enter\n", __func__)
149*4882a593Smuzhiyun #define FTS_FUNC_EXIT()  printk("[FTS]%s: Exit(%d)\n", __func__, __LINE__)
150*4882a593Smuzhiyun #else /* #if FTS_DEBUG_EN*/
151*4882a593Smuzhiyun #define FTS_DEBUG(fmt, args...)
152*4882a593Smuzhiyun #define FTS_FUNC_ENTER()
153*4882a593Smuzhiyun #define FTS_FUNC_EXIT()
154*4882a593Smuzhiyun #endif
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define FTS_INFO(fmt, args...) printk(KERN_INFO "[FTS][Info]"fmt"\n", ##args)
157*4882a593Smuzhiyun #define FTS_ERROR(fmt, args...) printk(KERN_ERR "[FTS][Error]"fmt"\n", ##args)
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun #endif /* __LINUX_FOCALTECH_COMMON_H__ */
160