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