diff options
author | Mohan Pallaka <mpallaka@codeaurora.org> | 2013-06-14 17:50:10 +0530 |
---|---|---|
committer | Abinaya P <abinayap@codeaurora.org> | 2016-08-17 15:48:34 +0530 |
commit | c72652e02fc4a7ea084810d37918ae6331542ea0 (patch) | |
tree | 9ab3b92263966f18c0a4c46826fa94afbf18faa5 | |
parent | 19bdb8e2d1b5cf11f7b3838ba6bc38f3930e081c (diff) |
input: ft5x06_ts: Add debugfs entry for dump info
Add a debugfs entry to display information about controller to the user.
Also have cleared the checkpatch errors on 3.18
This patch is propagated from 3.18 kernel 'commit 71e8bfde1da8 ("input:
ft5x06_ts: Add debugfs entry for dump info")'
Change-Id: I075501fefe1984533139ecca65af92f3c0ab8b97
Signed-off-by: Mohan Pallaka <mpallaka@codeaurora.org>
Signed-off-by: Sudhakar Manapati <smanap@codeaurora.org>
-rw-r--r-- | drivers/input/touchscreen/ft5x06_ts.c | 110 |
1 files changed, 78 insertions, 32 deletions
diff --git a/drivers/input/touchscreen/ft5x06_ts.c b/drivers/input/touchscreen/ft5x06_ts.c index 2ab6b7da26b1..8e4d146186f7 100644 --- a/drivers/input/touchscreen/ft5x06_ts.c +++ b/drivers/input/touchscreen/ft5x06_ts.c @@ -169,7 +169,15 @@ #define FT_REG_CAL 0x00 #define FT_CAL_MASK 0x70 -#define FT_DEBUG_DIR_NAME "ft_debug" +#define FT_INFO_MAX_LEN 200 + +#define FT_STORE_TS_INFO(buf, id, fw_ver) \ + snprintf(buf, FT_INFO_MAX_LEN, \ + "controller\t= focaltech\n" \ + "model\t\t= 0x%x\n" \ + "fw_ver\t\t= 0x%x\n", id, fw_ver) + +#define FT_DEBUG_DIR_NAME "ts_debug" struct ts_event { u16 x[CFG_MAX_TOUCH_POINTS]; /* x coordinate */ @@ -203,6 +211,7 @@ struct ft5x06_ts_data { struct dentry *dir; u16 addr; bool suspended; + char *ts_info; #if defined(CONFIG_FB) struct notifier_block fb_notif; #elif defined(CONFIG_HAS_EARLYSUSPEND) @@ -816,6 +825,7 @@ static int ft5x06_fw_upgrade(struct device *dev, bool force) rc = -EIO; } + FT_STORE_TS_INFO(data->ts_info, data->family_id, FT_FW_FILE_VER(fw)); rel_fw: release_firmware(fw); return rc; @@ -1024,6 +1034,27 @@ static int ft5x06_debug_suspend_get(void *_data, u64 *val) DEFINE_SIMPLE_ATTRIBUTE(debug_suspend_fops, ft5x06_debug_suspend_get, ft5x06_debug_suspend_set, "%lld\n"); +static int ft5x06_debug_dump_info(struct seq_file *m, void *v) +{ + struct ft5x06_ts_data *data = m->private; + + seq_printf(m, "%s\n", data->ts_info); + + return 0; +} + +static int debugfs_dump_info_open(struct inode *inode, struct file *file) +{ + return single_open(file, ft5x06_debug_dump_info, inode->i_private); +} + +static const struct file_operations debug_dump_info_fops = { + .owner = THIS_MODULE, + .open = debugfs_dump_info_open, + .read = seq_read, + .release = single_release, +}; + #ifdef CONFIG_OF static int ft5x06_get_dt_coords(struct device *dev, char *name, struct ft5x06_ts_platform_data *pdata) @@ -1139,7 +1170,7 @@ static int ft5x06_ts_probe(struct i2c_client *client, struct ft5x06_ts_platform_data *pdata; struct ft5x06_ts_data *data; struct input_dev *input_dev; - struct dentry *dir, *temp; + struct dentry *temp; u8 reg_value; u8 reg_addr; int err; @@ -1286,28 +1317,6 @@ static int ft5x06_ts_probe(struct i2c_client *client, data->family_id = reg_value; - /* get some register information */ - reg_addr = FT_REG_FW_VER; - err = ft5x06_i2c_read(client, ®_addr, 1, ®_value, 1); - if (err < 0) - dev_err(&client->dev, "version read failed"); - - dev_info(&client->dev, "Firmware version = 0x%x\n", reg_value); - - reg_addr = FT_REG_POINT_RATE; - ft5x06_i2c_read(client, ®_addr, 1, ®_value, 1); - if (err < 0) - dev_err(&client->dev, "report rate read failed"); - - dev_dbg(&client->dev, "report rate = %dHz\n", reg_value * 10); - - reg_addr = FT_REG_THGROUP; - err = ft5x06_i2c_read(client, ®_addr, 1, ®_value, 1); - if (err < 0) - dev_err(&client->dev, "threshold read failed"); - - dev_dbg(&client->dev, "touch threshold = %d\n", reg_value * 4); - err = request_threaded_irq(client->irq, NULL, ft5x06_ts_interrupt, pdata->irqflags, client->dev.driver->name, data); @@ -1334,14 +1343,14 @@ static int ft5x06_ts_probe(struct i2c_client *client, goto free_update_fw_sys; } - dir = debugfs_create_dir(FT_DEBUG_DIR_NAME, NULL); - if (dir == NULL || IS_ERR(dir)) { - pr_err("debugfs_create_dir failed: rc=%ld\n", PTR_ERR(dir)); - err = PTR_ERR(dir); + data->dir = debugfs_create_dir(FT_DEBUG_DIR_NAME, NULL); + if (data->dir == NULL || IS_ERR(data->dir)) { + pr_err("debugfs_create_dir failed(%ld)\n", PTR_ERR(data->dir)); + err = PTR_ERR(data->dir); goto free_force_update_fw_sys; } - temp = debugfs_create_file("addr", S_IRUSR | S_IWUSR, dir, data, + temp = debugfs_create_file("addr", S_IRUSR | S_IWUSR, data->dir, data, &debug_addr_fops); if (temp == NULL || IS_ERR(temp)) { pr_err("debugfs_create_file failed: rc=%ld\n", PTR_ERR(temp)); @@ -1349,7 +1358,7 @@ static int ft5x06_ts_probe(struct i2c_client *client, goto free_debug_dir; } - temp = debugfs_create_file("data", S_IRUSR | S_IWUSR, dir, data, + temp = debugfs_create_file("data", S_IRUSR | S_IWUSR, data->dir, data, &debug_data_fops); if (temp == NULL || IS_ERR(temp)) { pr_err("debugfs_create_file failed: rc=%ld\n", PTR_ERR(temp)); @@ -1357,14 +1366,50 @@ static int ft5x06_ts_probe(struct i2c_client *client, goto free_debug_dir; } - temp = debugfs_create_file("suspend", S_IRUSR | S_IWUSR, dir, data, - &debug_suspend_fops); + temp = debugfs_create_file("suspend", S_IRUSR | S_IWUSR, data->dir, + data, &debug_suspend_fops); + if (temp == NULL || IS_ERR(temp)) { + pr_err("debugfs_create_file failed: rc=%ld\n", PTR_ERR(temp)); + err = PTR_ERR(temp); + goto free_debug_dir; + } + + temp = debugfs_create_file("dump_info", S_IRUSR | S_IWUSR, data->dir, + data, &debug_dump_info_fops); if (temp == NULL || IS_ERR(temp)) { pr_err("debugfs_create_file failed: rc=%ld\n", PTR_ERR(temp)); err = PTR_ERR(temp); goto free_debug_dir; } + data->ts_info = kzalloc(FT_INFO_MAX_LEN, GFP_KERNEL); + if (!data->ts_info) + goto free_debug_dir; + + /*get some register information */ + reg_addr = FT_REG_POINT_RATE; + ft5x06_i2c_read(client, ®_addr, 1, ®_value, 1); + if (err < 0) + dev_err(&client->dev, "report rate read failed"); + + dev_info(&client->dev, "report rate = %dHz\n", reg_value * 10); + + reg_addr = FT_REG_THGROUP; + err = ft5x06_i2c_read(client, ®_addr, 1, ®_value, 1); + if (err < 0) + dev_err(&client->dev, "threshold read failed"); + + dev_dbg(&client->dev, "touch threshold = %d\n", reg_value * 4); + + reg_addr = FT_REG_FW_VER; + err = ft5x06_i2c_read(client, ®_addr, 1, ®_value, 1); + if (err < 0) + dev_err(&client->dev, "version read failed"); + + dev_info(&client->dev, "Firmware version = 0x%x\n", reg_value); + + FT_STORE_TS_INFO(data->ts_info, data->family_id, reg_value); + #if defined(CONFIG_FB) data->fb_notif.notifier_call = fb_notifier_callback; @@ -1453,6 +1498,7 @@ static int ft5x06_ts_remove(struct i2c_client *client) ft5x06_power_init(data, false); input_unregister_device(data->input_dev); + kfree(data->ts_info); kfree(data); return 0; |