@@ -544,16 +544,6 @@ static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
disable_irq(client->irq);
- if (!tsdata->raw_buffer) {
- tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y *
- sizeof(u16);
- tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
- if (!tsdata->raw_buffer) {
- error = -ENOMEM;
- goto err_out;
- }
- }
-
/* mode register is 0x3c when in the work mode */
error = edt_ft5x06_register_write(tsdata, WORK_REGISTER_OPMODE, 0x03);
if (error) {
@@ -581,8 +571,6 @@ static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
return 0;
err_out:
- kfree(tsdata->raw_buffer);
- tsdata->raw_buffer = NULL;
tsdata->factory_mode = false;
enable_irq(client->irq);
@@ -622,9 +610,6 @@ static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
return -EIO;
}
- kfree(tsdata->raw_buffer);
- tsdata->raw_buffer = NULL;
-
/* restore parameters */
edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold,
tsdata->threshold);
@@ -697,7 +682,7 @@ static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
mutex_lock(&tsdata->mutex);
- if (!tsdata->factory_mode || !tsdata->raw_buffer) {
+ if (!tsdata->factory_mode) {
error = -EIO;
goto out;
}
@@ -774,6 +759,12 @@ edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
debugfs_create_file("mode", S_IRUSR | S_IWUSR,
tsdata->debug_dir, tsdata, &debugfs_mode_fops);
+
+ tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y * sizeof(u16);
+ tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
+ if (!tsdata->raw_buffer)
+ return;
+
debugfs_create_file("raw_data", S_IRUSR,
tsdata->debug_dir, tsdata, &debugfs_raw_data_fops);
}
There is no need to allocate buffer each time we switch modes. First of all, the code is protected by checking the factory_mode state. The size of the buffer is static and can't be changed after ->probe() anyway. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/input/touchscreen/edt-ft5x06.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-)