From 7674c5911ba54c35954532eba1267968cc438a86 Mon Sep 17 00:00:00 2001 From: Sarada Prasanna Garnayak Date: Tue, 18 Mar 2014 16:47:16 +0530 Subject: [PATCH] input: touchscreen: change the focaltech firmware upgrade method Upgarde firmware on the touch controller when the new firmware version is geater than the current firmware version. Update the version id after successful firmware update. skip firmware update process when device is in suspend state. CRs-Fixed: 623803 Change-Id: Ic462f6483887a3654665852e58ae9891de9f5eff Signed-off-by: Sarada Prasanna Garnayak --- drivers/input/touchscreen/ft5x06_ts.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/input/touchscreen/ft5x06_ts.c b/drivers/input/touchscreen/ft5x06_ts.c index 4b8a3d4fa1d..1da84fadd75 100644 --- a/drivers/input/touchscreen/ft5x06_ts.c +++ b/drivers/input/touchscreen/ft5x06_ts.c @@ -3,7 +3,7 @@ * FocalTech ft5x06 TouchScreen driver. * * Copyright (c) 2010 Focal tech Ltd. - * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and @@ -69,7 +69,6 @@ #define FT_REG_THGROUP 0x80 #define FT_REG_ECC 0xCC #define FT_REG_RESET_FW 0x07 -#define FT_REG_FW_MAJ_VER 0xB1 #define FT_REG_FW_MIN_VER 0xB2 #define FT_REG_FW_SUB_MIN_VER 0xB3 @@ -289,7 +288,7 @@ static void ft5x06_update_fw_ver(struct ft5x06_ts_data *data) u8 reg_addr; int err; - reg_addr = FT_REG_FW_MAJ_VER; + reg_addr = FT_REG_FW_VER; err = ft5x06_i2c_read(client, ®_addr, 1, &data->fw_ver[0], 1); if (err < 0) dev_err(&client->dev, "fw major version read failed"); @@ -877,6 +876,11 @@ static int ft5x06_fw_upgrade(struct device *dev, bool force) u8 fw_file_maj, fw_file_min, fw_file_sub_min; bool fw_upgrade = false; + if (data->suspended) { + dev_info(dev, "Device is in suspend state: Exit FW upgrade\n"); + return -EBUSY; + } + rc = request_firmware(&fw, data->fw_name, dev); if (rc < 0) { dev_err(dev, "Request firmware failed - %s (%d)\n", @@ -899,17 +903,10 @@ static int ft5x06_fw_upgrade(struct device *dev, bool force) dev_info(dev, "New firmware: %d.%d.%d", fw_file_maj, fw_file_min, fw_file_sub_min); - if (force) { + if (force) + fw_upgrade = true; + else if (data->fw_ver[0] < fw_file_maj) fw_upgrade = true; - } else if (data->fw_ver[0] == fw_file_maj) { - if (data->fw_ver[1] < fw_file_min) - fw_upgrade = true; - else if (data->fw_ver[2] < fw_file_sub_min) - fw_upgrade = true; - else - dev_info(dev, "No need to upgrade\n"); - } else - dev_info(dev, "Firmware versions do not match\n"); if (!fw_upgrade) { dev_info(dev, "Exiting fw upgrade...\n");