Merge "input: touchscreen: remove data pointer from driver structure"

This commit is contained in:
Linux Build Service Account 2017-03-09 10:13:31 -08:00 committed by Gerrit - the friendly Code Review server
commit 9c1ecc8488

View file

@ -27,7 +27,7 @@
#include <linux/debugfs.h> #include <linux/debugfs.h>
#define DATA_LENGTH_UINT 512 #define DATA_LENGTH_UINT 512
#define CMD_HEAD_LENGTH (sizeof(struct st_cmd_head) - sizeof(u8 *)) #define CMD_HEAD_LENGTH (sizeof(struct st_cmd_head))
static char procname[20] = {0}; static char procname[20] = {0};
struct st_cmd_head { struct st_cmd_head {
@ -44,10 +44,10 @@ struct st_cmd_head {
u8 addr_len; /* address length */ u8 addr_len; /* address length */
u8 addr[2]; /* address */ u8 addr[2]; /* address */
u8 res[3]; /* reserved */ u8 res[3]; /* reserved */
u8 *data; /* data pointer */
} __packed; } __packed;
static struct st_cmd_head cmd_head; static struct st_cmd_head cmd_head;
static u8 *cmd_data;
static struct i2c_client *gt_client; static struct i2c_client *gt_client;
@ -191,7 +191,7 @@ static void unregister_i2c_func(void)
void uninit_wr_node(void) void uninit_wr_node(void)
{ {
cmd_head.data = NULL; cmd_data = NULL;
unregister_i2c_func(); unregister_i2c_func();
proc_remove(goodix_proc_entry); proc_remove(goodix_proc_entry);
} }
@ -308,7 +308,6 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
s32 ret = 0; s32 ret = 0;
u8 *dataptr = NULL;
mutex_lock(&lock); mutex_lock(&lock);
ret = copy_from_user(&cmd_head, userbuf, CMD_HEAD_LENGTH); ret = copy_from_user(&cmd_head, userbuf, CMD_HEAD_LENGTH);
@ -340,7 +339,7 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
} }
if (cmd_head.wr == GTP_RW_WRITE) { if (cmd_head.wr == GTP_RW_WRITE) {
ret = copy_from_user(&cmd_head.data[GTP_ADDR_LENGTH], ret = copy_from_user(&cmd_data[GTP_ADDR_LENGTH],
&userbuf[CMD_HEAD_LENGTH], cmd_head.data_len); &userbuf[CMD_HEAD_LENGTH], cmd_head.data_len);
if (ret) { if (ret) {
dev_err(&gt_client->dev, "copy_from_user failed"); dev_err(&gt_client->dev, "copy_from_user failed");
@ -348,7 +347,7 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
goto exit; goto exit;
} }
memcpy(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len], memcpy(&cmd_data[GTP_ADDR_LENGTH - cmd_head.addr_len],
cmd_head.addr, cmd_head.addr_len); cmd_head.addr, cmd_head.addr_len);
if (cmd_head.flag == GTP_NEED_FLAG) { if (cmd_head.flag == GTP_NEED_FLAG) {
@ -361,7 +360,7 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
/* Need interrupt! */ /* Need interrupt! */
} }
if (tool_i2c_write( if (tool_i2c_write(
&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len], &cmd_data[GTP_ADDR_LENGTH - cmd_head.addr_len],
cmd_head.data_len + cmd_head.addr_len) <= 0) { cmd_head.data_len + cmd_head.addr_len) <= 0) {
dev_err(&gt_client->dev, "Write data failed"); dev_err(&gt_client->dev, "Write data failed");
ret = -EIO; ret = -EIO;
@ -374,7 +373,7 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
ret = cmd_head.data_len + CMD_HEAD_LENGTH; ret = cmd_head.data_len + CMD_HEAD_LENGTH;
goto exit; goto exit;
} else if (cmd_head.wr == GTP_RW_WRITE_IC_TYPE) { /* Write ic type */ } else if (cmd_head.wr == GTP_RW_WRITE_IC_TYPE) { /* Write ic type */
ret = copy_from_user(&cmd_head.data[0], ret = copy_from_user(&cmd_data[0],
&userbuf[CMD_HEAD_LENGTH], &userbuf[CMD_HEAD_LENGTH],
cmd_head.data_len); cmd_head.data_len);
if (ret) { if (ret) {
@ -390,7 +389,7 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
ret = -EINVAL; ret = -EINVAL;
goto exit; goto exit;
} }
memcpy(ic_type, cmd_head.data, cmd_head.data_len); memcpy(ic_type, cmd_data, cmd_head.data_len);
register_i2c_func(); register_i2c_func();
@ -418,13 +417,13 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
} else if (cmd_head.wr == GTP_RW_CHECK_RAWDIFF_MODE) { } else if (cmd_head.wr == GTP_RW_CHECK_RAWDIFF_MODE) {
struct goodix_ts_data *ts = i2c_get_clientdata(gt_client); struct goodix_ts_data *ts = i2c_get_clientdata(gt_client);
ret = copy_from_user(&cmd_head.data[GTP_ADDR_LENGTH], ret = copy_from_user(&cmd_data[GTP_ADDR_LENGTH],
&userbuf[CMD_HEAD_LENGTH], cmd_head.data_len); &userbuf[CMD_HEAD_LENGTH], cmd_head.data_len);
if (ret) { if (ret) {
dev_err(&gt_client->dev, "copy_from_user failed"); dev_err(&gt_client->dev, "copy_from_user failed");
goto exit; goto exit;
} }
if (cmd_head.data[GTP_ADDR_LENGTH]) { if (cmd_data[GTP_ADDR_LENGTH]) {
pr_debug("gtp enter rawdiff\n"); pr_debug("gtp enter rawdiff\n");
ts->gtp_rawdiff_mode = true; ts->gtp_rawdiff_mode = true;
} else { } else {
@ -452,11 +451,11 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
ret = -EINVAL; ret = -EINVAL;
goto exit; goto exit;
} }
memset(cmd_head.data, 0, cmd_head.data_len + 1); memset(cmd_data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &userbuf[CMD_HEAD_LENGTH], memcpy(cmd_data, &userbuf[CMD_HEAD_LENGTH],
cmd_head.data_len); cmd_head.data_len);
if (gup_update_proc((void *)cmd_head.data) == FAIL) { if (gup_update_proc((void *)cmd_data) == FAIL) {
ret = -EBUSY; ret = -EBUSY;
goto exit; goto exit;
} }
@ -464,10 +463,8 @@ static ssize_t goodix_tool_write(struct file *filp, const char __user *userbuf,
ret = CMD_HEAD_LENGTH; ret = CMD_HEAD_LENGTH;
exit: exit:
dataptr = cmd_head.data;
memset(&cmd_head, 0, sizeof(cmd_head)); memset(&cmd_head, 0, sizeof(cmd_head));
cmd_head.wr = 0xFF; cmd_head.wr = 0xFF;
cmd_head.data = dataptr;
mutex_unlock(&lock); mutex_unlock(&lock);
return ret; return ret;
@ -507,10 +504,10 @@ static ssize_t goodix_tool_read(struct file *file, char __user *user_buf,
/* Need interrupt! */ /* Need interrupt! */
} }
memcpy(cmd_head.data, cmd_head.addr, cmd_head.addr_len); memcpy(cmd_data, cmd_head.addr, cmd_head.addr_len);
pr_debug("[CMD HEAD DATA] ADDR:0x%02x%02x.\n", cmd_head.data[0], pr_debug("[CMD HEAD DATA] ADDR:0x%02x%02x.\n", cmd_data[0],
cmd_head.data[1]); cmd_data[1]);
pr_debug("[CMD HEAD ADDR] ADDR:0x%02x%02x.\n", cmd_head.addr[0], pr_debug("[CMD HEAD ADDR] ADDR:0x%02x%02x.\n", cmd_head.addr[0],
cmd_head.addr[1]); cmd_head.addr[1]);
@ -527,13 +524,13 @@ static ssize_t goodix_tool_read(struct file *file, char __user *user_buf,
if (data_len > count) if (data_len > count)
data_len = count; data_len = count;
if (tool_i2c_read(cmd_head.data, data_len) <= 0) { if (tool_i2c_read(cmd_data, data_len) <= 0) {
dev_err(&gt_client->dev, "Read data failed\n"); dev_err(&gt_client->dev, "Read data failed\n");
ret = -EIO; ret = -EIO;
goto exit; goto exit;
} }
ret = simple_read_from_buffer(user_buf, count, ppos, ret = simple_read_from_buffer(user_buf, count, ppos,
&cmd_head.data[GTP_ADDR_LENGTH], data_len); &cmd_data[GTP_ADDR_LENGTH], data_len);
break; break;
case GTP_RW_FILL_INFO: case GTP_RW_FILL_INFO:
ret = fill_update_info(user_buf, count, ppos); ret = fill_update_info(user_buf, count, ppos);
@ -568,13 +565,13 @@ s32 init_wr_node(struct i2c_client *client)
gt_client = client; gt_client = client;
memset(&cmd_head, 0, sizeof(cmd_head)); memset(&cmd_head, 0, sizeof(cmd_head));
cmd_head.data = NULL; cmd_data = NULL;
i = GTP_I2C_RETRY_5; i = GTP_I2C_RETRY_5;
while ((!cmd_head.data) && i) { while ((!cmd_data) && i) {
cmd_head.data = devm_kzalloc(&client->dev, cmd_data = devm_kzalloc(&client->dev,
i * DATA_LENGTH_UINT, GFP_KERNEL); i * DATA_LENGTH_UINT, GFP_KERNEL);
if (cmd_head.data) if (cmd_data)
break; break;
i--; i--;
} }