input: touchpanel: Goodix GT915 driver cleanup
Code clean up that makes the driver more like a linux driver. Add some error recovery to make sure driver will not crash when error is occurs. Also have cleared the checkpatch errors on 4.4. This patch is propagated from 3.4 kernel 'commit c2fcdcda743f ("input: touchpanel: Goodix GT915 driver cleanup")' Change-Id: I3af425f5f0251ec576168f72a2059f85c3be4358 Signed-off-by: Bingzhe Cai <bingzhec@codeaurora.org> Signed-off-by: Sudhakar Manapati <smanap@codeaurora.org> [abinayap@codeaurora.org: Fix checkpatch errors for 4.4 kernel - check for sizeof(p_cfg_grp)/sizeof(p_cfg_grp[0]) that could be ARRAY_SIZE(p_cfg_grp) - check for sizeof(touch_key_array)/sizeof(touch_key_array[0]) that could be ARRAY_SIZE(touch_key_array) - Comparisons should place the constant on the right side of the test] Signed-off-by: Abinaya P <abinayap@codeaurora.org>
This commit is contained in:
parent
a8ac335601
commit
b1bafc4fd8
2 changed files with 1564 additions and 1540 deletions
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,6 @@
|
|||
/* drivers/input/touchscreen/gt9xx.h
|
||||
*
|
||||
* Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* 2010 - 2013 Goodix Technology.
|
||||
*
|
||||
|
@ -19,29 +21,54 @@
|
|||
#define _GOODIX_GT9XX_H_
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/string.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/debugfs.h>
|
||||
#if defined(CONFIG_HAS_EARLYSUSPEND)
|
||||
#include <linux/earlysuspend.h>
|
||||
#define GOODIX_SUSPEND_LEVEL 1
|
||||
#endif
|
||||
|
||||
struct goodix_ts_platform_data {
|
||||
int irq_gpio;
|
||||
u32 irq_gpio_flags;
|
||||
int reset_gpio;
|
||||
u32 reset_gpio_flags;
|
||||
int ldo_en_gpio;
|
||||
u32 ldo_en_gpio_flags;
|
||||
u32 family_id;
|
||||
u32 x_max;
|
||||
u32 y_max;
|
||||
u32 x_min;
|
||||
u32 y_min;
|
||||
u32 panel_minx;
|
||||
u32 panel_miny;
|
||||
u32 panel_maxx;
|
||||
u32 panel_maxy;
|
||||
bool no_force_update;
|
||||
bool i2c_pull_up;
|
||||
};
|
||||
struct goodix_ts_data {
|
||||
spinlock_t irq_lock;
|
||||
struct i2c_client *client;
|
||||
struct input_dev *input_dev;
|
||||
struct goodix_ts_platform_data *pdata;
|
||||
struct hrtimer timer;
|
||||
struct workqueue_struct *goodix_wq;
|
||||
struct work_struct work;
|
||||
#if defined(CONFIG_HAS_EARLYSUSPEND)
|
||||
struct early_suspend early_suspend;
|
||||
s32 irq_is_disable;
|
||||
#endif
|
||||
s32 irq_is_disabled;
|
||||
s32 use_irq;
|
||||
u16 abs_x_max;
|
||||
u16 abs_y_max;
|
||||
|
@ -49,6 +76,7 @@ struct goodix_ts_data {
|
|||
u8 int_trigger_type;
|
||||
u8 green_wake_mode;
|
||||
u8 chip_type;
|
||||
u8 *config_data;
|
||||
u8 enter_update;
|
||||
u8 gtp_is_suspend;
|
||||
u8 gtp_rawdiff_mode;
|
||||
|
@ -61,128 +89,121 @@ struct goodix_ts_data {
|
|||
extern u16 show_len;
|
||||
extern u16 total_len;
|
||||
|
||||
//***************************PART1:ON/OFF define*******************************
|
||||
/***************************PART1:ON/OFF define*******************************/
|
||||
#define GTP_CUSTOM_CFG 0
|
||||
#define GTP_CHANGE_X2Y 0
|
||||
#define GTP_DRIVER_SEND_CFG 1
|
||||
#define GTP_HAVE_TOUCH_KEY 0
|
||||
#define GTP_POWER_CTRL_SLEEP 0
|
||||
#define GTP_HAVE_TOUCH_KEY 1
|
||||
#define GTP_POWER_CTRL_SLEEP 1
|
||||
#define GTP_ICS_SLOT_REPORT 0
|
||||
|
||||
#define GTP_AUTO_UPDATE 1 // auto updated by .bin file as default
|
||||
#define GTP_HEADER_FW_UPDATE 0 // auto updated by head_fw_array in gt9xx_firmware.h, function together with GTP_AUTO_UPDATE
|
||||
/* auto updated by .bin file as default */
|
||||
#define GTP_AUTO_UPDATE 0
|
||||
/* auto updated by head_fw_array in gt9xx_firmware.h,
|
||||
* function together with GTP_AUTO_UPDATE
|
||||
*/
|
||||
#define GTP_HEADER_FW_UPDATE 0
|
||||
|
||||
#define GTP_CREATE_WR_NODE 1
|
||||
#define GTP_CREATE_WR_NODE 0
|
||||
#define GTP_ESD_PROTECT 0
|
||||
#define GTP_WITH_PEN 0
|
||||
|
||||
#define GTP_SLIDE_WAKEUP 0
|
||||
#define GTP_DBL_CLK_WAKEUP 0 // double-click wakeup, function together with GTP_SLIDE_WAKEUP
|
||||
/* double-click wakeup, function together with GTP_SLIDE_WAKEUP */
|
||||
#define GTP_DBL_CLK_WAKEUP 0
|
||||
|
||||
#define GTP_DEBUG_ON 1
|
||||
#define GTP_DEBUG_ARRAY_ON 0
|
||||
#define GTP_DEBUG_FUNC_ON 0
|
||||
|
||||
//*************************** PART2:TODO define **********************************
|
||||
// STEP_1(REQUIRED): Define Configuration Information Group(s)
|
||||
// Sensor_ID Map:
|
||||
/*************************** PART2:TODO define *******************************/
|
||||
/* STEP_1(REQUIRED): Define Configuration Information Group(s) */
|
||||
/* Sensor_ID Map: */
|
||||
/* sensor_opt1 sensor_opt2 Sensor_ID
|
||||
GND GND 0
|
||||
VDDIO GND 1
|
||||
NC GND 2
|
||||
GND NC/300K 3
|
||||
VDDIO NC/300K 4
|
||||
NC NC/300K 5
|
||||
* GND GND 0
|
||||
* VDDIO GND 1
|
||||
* NC GND 2
|
||||
* GND NC/300K 3
|
||||
* VDDIO NC/300K 4
|
||||
* NC NC/300K 5
|
||||
*/
|
||||
// TODO: define your own default or for Sensor_ID == 0 config here.
|
||||
// The predefined one is just a sample config, which is not suitable for your tp in most cases.
|
||||
/* Define your own default or for Sensor_ID == 0 config here */
|
||||
/* The predefined one is just a sample config,
|
||||
* which is not suitable for your tp in most cases.
|
||||
*/
|
||||
#define CTP_CFG_GROUP1 {\
|
||||
0x41,0x1C,0x02,0xC0,0x03,0x0A,0x05,0x01,0x01,0x0F,\
|
||||
0x23,0x0F,0x5F,0x41,0x03,0x05,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x00,0x0A,\
|
||||
0x28,0x00,0xB8,0x0B,0x00,0x00,0x00,0x9A,0x03,0x25,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x03,0x64,0x32,0x00,0x00,\
|
||||
0x00,0x32,0x8C,0x94,0x05,0x01,0x05,0x00,0x00,0x96,\
|
||||
0x0C,0x22,0xD8,0x0E,0x23,0x56,0x11,0x25,0xFF,0x13,\
|
||||
0x28,0xA7,0x15,0x2E,0x00,0x00,0x10,0x30,0x48,0x00,\
|
||||
0x56,0x4A,0x3A,0xFF,0xFF,0x16,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x01,0x1B,0x14,0x0D,0x19,0x00,0x00,0x01,0x00,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x00,0x1A,0x18,0x16,0x14,0x12,0x10,0x0E,0x0C,\
|
||||
0x0A,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
|
||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
|
||||
0xFF,0xFF,0x1D,0x1E,0x1F,0x20,0x22,0x24,0x28,0x29,\
|
||||
0x0C,0x0A,0x08,0x00,0x02,0x04,0x05,0x06,0x0E,0xFF,\
|
||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
|
||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
|
||||
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x01\
|
||||
0x41, 0x1C, 0x02, 0xC0, 0x03, 0x0A, 0x05, 0x01, 0x01, 0x0F,\
|
||||
0x23, 0x0F, 0x5F, 0x41, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x0A,\
|
||||
0x28, 0x00, 0xB8, 0x0B, 0x00, 0x00, 0x00, 0x9A, 0x03, 0x25,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x64, 0x32, 0x00, 0x00,\
|
||||
0x00, 0x32, 0x8C, 0x94, 0x05, 0x01, 0x05, 0x00, 0x00, 0x96,\
|
||||
0x0C, 0x22, 0xD8, 0x0E, 0x23, 0x56, 0x11, 0x25, 0xFF, 0x13,\
|
||||
0x28, 0xA7, 0x15, 0x2E, 0x00, 0x00, 0x10, 0x30, 0x48, 0x00,\
|
||||
0x56, 0x4A, 0x3A, 0xFF, 0xFF, 0x16, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x01, 0x1B, 0x14, 0x0D, 0x19, 0x00, 0x00, 0x01, 0x00,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x00, 0x1A, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0E, 0x0C,\
|
||||
0x0A, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\
|
||||
0xFF, 0xFF, 0x1D, 0x1E, 0x1F, 0x20, 0x22, 0x24, 0x28, 0x29,\
|
||||
0x0C, 0x0A, 0x08, 0x00, 0x02, 0x04, 0x05, 0x06, 0x0E, 0xFF,\
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x01\
|
||||
}
|
||||
|
||||
// TODO: define your config for Sensor_ID == 1 here, if needed
|
||||
/* Define your config for Sensor_ID == 1 here, if needed */
|
||||
#define CTP_CFG_GROUP2 {\
|
||||
}
|
||||
// TODO: define your config for Sensor_ID == 2 here, if needed
|
||||
|
||||
/* Define your config for Sensor_ID == 2 here, if needed */
|
||||
#define CTP_CFG_GROUP3 {\
|
||||
}
|
||||
|
||||
// TODO: define your config for Sensor_ID == 3 here, if needed
|
||||
/* Define your config for Sensor_ID == 3 here, if needed */
|
||||
#define CTP_CFG_GROUP4 {\
|
||||
}
|
||||
|
||||
// TODO: define your config for Sensor_ID == 4 here, if needed
|
||||
/* Define your config for Sensor_ID == 4 here, if needed */
|
||||
#define CTP_CFG_GROUP5 {\
|
||||
}
|
||||
|
||||
// TODO: define your config for Sensor_ID == 5 here, if needed
|
||||
/* Define your config for Sensor_ID == 5 here, if needed */
|
||||
#define CTP_CFG_GROUP6 {\
|
||||
}
|
||||
|
||||
// STEP_2(REQUIRED): Customize your I/O ports & I/O operations
|
||||
#define GTP_RST_PORT S5PV210_GPJ3(6)
|
||||
#define GTP_INT_PORT S5PV210_GPH1(3)
|
||||
#define GTP_INT_IRQ gpio_to_irq(GTP_INT_PORT)
|
||||
#define GTP_INT_CFG S3C_GPIO_SFN(0xF)
|
||||
#define GTP_IRQ_TAB {\
|
||||
IRQ_TYPE_EDGE_RISING,\
|
||||
IRQ_TYPE_EDGE_FALLING,\
|
||||
IRQ_TYPE_LEVEL_LOW,\
|
||||
IRQ_TYPE_LEVEL_HIGH\
|
||||
}
|
||||
|
||||
#define GTP_GPIO_AS_INPUT(pin) do{\
|
||||
gpio_direction_input(pin);\
|
||||
s3c_gpio_setpull(pin, S3C_GPIO_PULL_NONE);\
|
||||
}while(0)
|
||||
#define GTP_GPIO_AS_INT(pin) do{\
|
||||
GTP_GPIO_AS_INPUT(pin);\
|
||||
s3c_gpio_cfgpin(pin, GTP_INT_CFG);\
|
||||
}while(0)
|
||||
#define GTP_GPIO_GET_VALUE(pin) gpio_get_value(pin)
|
||||
#define GTP_GPIO_OUTPUT(pin,level) gpio_direction_output(pin,level)
|
||||
#define GTP_GPIO_REQUEST(pin, label) gpio_request(pin, label)
|
||||
#define GTP_GPIO_FREE(pin) gpio_free(pin)
|
||||
#define GTP_IRQ_TAB {IRQ_TYPE_EDGE_RISING, IRQ_TYPE_EDGE_FALLING, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH}
|
||||
|
||||
// STEP_3(optional): Specify your special config info if needed
|
||||
/* STEP_3(optional): Specify your special config info if needed */
|
||||
#define GTP_IRQ_TAB_RISING 0
|
||||
#define GTP_IRQ_TAB_FALLING 1
|
||||
#if GTP_CUSTOM_CFG
|
||||
#define GTP_MAX_HEIGHT 800
|
||||
#define GTP_MAX_WIDTH 480
|
||||
#define GTP_INT_TRIGGER 0 // 0: Rising 1: Falling
|
||||
#define GTP_MAX_HEIGHT 800
|
||||
#define GTP_MAX_WIDTH 480
|
||||
#define GTP_INT_TRIGGER GTP_IRQ_TAB_RISING
|
||||
#else
|
||||
#define GTP_MAX_HEIGHT 4096
|
||||
#define GTP_MAX_WIDTH 4096
|
||||
#define GTP_INT_TRIGGER 1
|
||||
#define GTP_MAX_HEIGHT 4096
|
||||
#define GTP_MAX_WIDTH 4096
|
||||
#define GTP_INT_TRIGGER GTP_IRQ_TAB_FALLING
|
||||
#endif
|
||||
|
||||
#define GTP_MAX_TOUCH 5
|
||||
#define GTP_ESD_CHECK_CIRCLE 2000 // jiffy: ms
|
||||
#define GTP_ESD_CHECK_CIRCLE 2000 /* jiffy: ms */
|
||||
|
||||
// STEP_4(optional): If keys are available and reported as keys, config your key info here
|
||||
#if GTP_HAVE_TOUCH_KEY
|
||||
#define GTP_KEY_TAB {KEY_MENU, KEY_HOME, KEY_BACK}
|
||||
#endif
|
||||
|
||||
//***************************PART3:OTHER define*********************************
|
||||
/***************************PART3:OTHER define*********************************/
|
||||
#define GTP_DRIVER_VERSION "V1.8<2013/06/08>"
|
||||
#define GTP_I2C_NAME "Goodix-TS"
|
||||
#define GTP_POLL_TIME 10 // jiffy: ms
|
||||
#define GTP_POLL_TIME 10 /* jiffy: ms*/
|
||||
#define GTP_ADDR_LENGTH 2
|
||||
#define GTP_CONFIG_MIN_LENGTH 186
|
||||
#define GTP_CONFIG_MAX_LENGTH 240
|
||||
|
@ -191,7 +212,7 @@ extern u16 total_len;
|
|||
#define SWITCH_OFF 0
|
||||
#define SWITCH_ON 1
|
||||
|
||||
// Registers define
|
||||
/* Registers define */
|
||||
#define GTP_READ_COOR_ADDR 0x814E
|
||||
#define GTP_REG_SLEEP 0x8040
|
||||
#define GTP_REG_SENSOR_ID 0x814A
|
||||
|
@ -201,41 +222,49 @@ extern u16 total_len;
|
|||
#define RESOLUTION_LOC 3
|
||||
#define TRIGGER_LOC 8
|
||||
|
||||
#define CFG_GROUP_LEN(p_cfg_grp) (sizeof(p_cfg_grp) / sizeof(p_cfg_grp[0]))
|
||||
// Log define
|
||||
#define GTP_INFO(fmt,arg...) printk("<<-GTP-INFO->> "fmt"\n",##arg)
|
||||
#define GTP_ERROR(fmt,arg...) printk("<<-GTP-ERROR->> "fmt"\n",##arg)
|
||||
#define GTP_DEBUG(fmt,arg...) do{\
|
||||
if(GTP_DEBUG_ON)\
|
||||
printk("<<-GTP-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\
|
||||
}while(0)
|
||||
#define GTP_DEBUG_ARRAY(array, num) do{\
|
||||
s32 i;\
|
||||
u8* a = array;\
|
||||
if(GTP_DEBUG_ARRAY_ON)\
|
||||
{\
|
||||
printk("<<-GTP-DEBUG-ARRAY->>\n");\
|
||||
for (i = 0; i < (num); i++)\
|
||||
{\
|
||||
printk("%02x ", (a)[i]);\
|
||||
if ((i + 1 ) %10 == 0)\
|
||||
{\
|
||||
printk("\n");\
|
||||
}\
|
||||
}\
|
||||
printk("\n");\
|
||||
}\
|
||||
}while(0)
|
||||
#define GTP_DEBUG_FUNC() do{\
|
||||
if(GTP_DEBUG_FUNC_ON)\
|
||||
printk("<<-GTP-FUNC->> Func:%s@Line:%d\n",__func__,__LINE__);\
|
||||
}while(0)
|
||||
#define GTP_SWAP(x, y) do{\
|
||||
/* Log define */
|
||||
#define GTP_DEBUG(fmt, arg...) do {\
|
||||
if (GTP_DEBUG_ON) {\
|
||||
pr_debug("<<-GTP-DEBUG->> [%d]"fmt"\n",\
|
||||
__LINE__, ##arg); } \
|
||||
} while (0)
|
||||
|
||||
#define GTP_DEBUG_ARRAY(array, num) do {\
|
||||
s32 i; \
|
||||
u8 *a = array; \
|
||||
if (GTP_DEBUG_ARRAY_ON) {\
|
||||
pr_debug("<<-GTP-DEBUG-ARRAY->>\n");\
|
||||
for (i = 0; i < (num); i++) { \
|
||||
pr_debug("%02x ", (a)[i]);\
|
||||
if ((i + 1) % 10 == 0) { \
|
||||
pr_debug("\n");\
|
||||
} \
|
||||
} \
|
||||
pr_debug("\n");\
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define GTP_DEBUG_FUNC() do {\
|
||||
if (GTP_DEBUG_FUNC_ON)\
|
||||
pr_debug("<<-GTP-FUNC->> Func:%s@Line:%d\n",\
|
||||
__func__, __LINE__);\
|
||||
} while (0)
|
||||
|
||||
#define GTP_SWAP(x, y) do {\
|
||||
typeof(x) z = x;\
|
||||
x = y;\
|
||||
y = z;\
|
||||
}while (0)
|
||||
} while (0)
|
||||
/*****************************End of Part III********************************/
|
||||
|
||||
//*****************************End of Part III********************************
|
||||
void gtp_esd_switch(struct i2c_client *client, int on);
|
||||
|
||||
#if GTP_CREATE_WR_NODE
|
||||
extern s32 init_wr_node(struct i2c_client *client);
|
||||
extern void uninit_wr_node(void);
|
||||
#endif
|
||||
|
||||
#if GTP_AUTO_UPDATE
|
||||
extern u8 gup_init_update_proc(struct goodix_ts_data *ts);
|
||||
#endif
|
||||
#endif /* _GOODIX_GT9XX_H_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue