From dc0907622901c992d8565881bc5cd61054a26ae9 Mon Sep 17 00:00:00 2001
From: Devin Kim <dojip.kim@lge.com>
Date: Thu, 3 Jul 2014 09:45:01 -0700
Subject: [PATCH] touch: synaptics: Check build information for firmware

Update the firmware only if both ids for package and revision match.

Change-Id: Ie2cdfa4d5be52e68cc9a552a77e2c85f61e413a7
Signed-off-by: Devin Kim <dojip.kim@lge.com>
---
 drivers/input/touchscreen/synaptics_fw_update.c | 11 +++++------
 drivers/input/touchscreen/synaptics_i2c_rmi4.c  |  3 +++
 drivers/input/touchscreen/synaptics_i2c_rmi4.h  |  2 ++
 include/linux/input/synaptics_dsx.h             |  2 ++
 4 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/input/touchscreen/synaptics_fw_update.c b/drivers/input/touchscreen/synaptics_fw_update.c
index 9fc3d6791e2c..1163f217eac7 100644
--- a/drivers/input/touchscreen/synaptics_fw_update.c
+++ b/drivers/input/touchscreen/synaptics_fw_update.c
@@ -350,12 +350,11 @@ static void parse_header(void)
 	memcpy(img->product_info, data->product_info,
 		sizeof(data->product_info));
 
-#ifdef CHECK_BUILD_INFO
-	img->is_contain_build_info =
-		(data->options_firmware_id == (1 << OPTION_BUILD_INFO));
-#else
-	img->is_contain_build_info = 0;
-#endif
+	if (fwu->rmi4_data->check_build)
+		img->is_contain_build_info =
+			(data->options_firmware_id == (1 << OPTION_BUILD_INFO));
+	else
+		img->is_contain_build_info = 0;
 
 	if (img->is_contain_build_info) {
 		img->package_id = (data->pkg_id_msb << 8) |
diff --git a/drivers/input/touchscreen/synaptics_i2c_rmi4.c b/drivers/input/touchscreen/synaptics_i2c_rmi4.c
index 5063de71123a..a5d9789bc75f 100644
--- a/drivers/input/touchscreen/synaptics_i2c_rmi4.c
+++ b/drivers/input/touchscreen/synaptics_i2c_rmi4.c
@@ -1679,6 +1679,8 @@ static int synaptics_rmi4_parse_dt(struct device *dev,
 	rmi4_pdata->do_lockdown = of_property_read_bool(np,
 			"synaptics,do-lockdown");
 	rmi4_pdata->wakeup = of_property_read_bool(np, "synaptics,wakeup");
+	rmi4_pdata->check_build = of_property_read_bool(np,
+			"synaptics,check-build");
 
 	rc = synaptics_rmi4_get_dt_coords(dev, "synaptics,display-coords",
 				rmi4_pdata);
@@ -3292,6 +3294,7 @@ static int synaptics_rmi4_probe(struct i2c_client *client,
 	rmi4_data->irq_enabled = false;
 	rmi4_data->fw_updating = false;
 	rmi4_data->suspended = false;
+	rmi4_data->check_build = rmi4_data->board->check_build;
 
 	rmi4_data->i2c_read = synaptics_rmi4_i2c_read;
 	rmi4_data->i2c_write = synaptics_rmi4_i2c_write;
diff --git a/drivers/input/touchscreen/synaptics_i2c_rmi4.h b/drivers/input/touchscreen/synaptics_i2c_rmi4.h
index 9ebfdfdb8ae1..5a6077b933cb 100644
--- a/drivers/input/touchscreen/synaptics_i2c_rmi4.h
+++ b/drivers/input/touchscreen/synaptics_i2c_rmi4.h
@@ -198,6 +198,7 @@ struct synaptics_rmi4_device_info {
  * @flip_x: set to TRUE if desired to flip direction on x-axis
  * @flip_y: set to TRUE if desired to flip direction on y-axis
  * @fw_updating: firmware is updating flag
+ * @check_build: check the build information for firmware
  * @sensor_sleep: flag to indicate sleep state of sensor
  * @wait: wait queue for touch data polling in interrupt thread
  * @i2c_read: pointer to i2c read function
@@ -255,6 +256,7 @@ struct synaptics_rmi4_data {
 	wait_queue_head_t wait;
 	bool stay_awake;
 	bool staying_awake;
+	bool check_build;
 	int (*i2c_read)(struct synaptics_rmi4_data *pdata, unsigned short addr,
 			unsigned char *data, unsigned short length);
 	int (*i2c_write)(struct synaptics_rmi4_data *pdata, unsigned short addr,
diff --git a/include/linux/input/synaptics_dsx.h b/include/linux/input/synaptics_dsx.h
index 25947a1c7882..76df6e52acd7 100644
--- a/include/linux/input/synaptics_dsx.h
+++ b/include/linux/input/synaptics_dsx.h
@@ -37,6 +37,7 @@ struct synaptics_rmi4_capacitance_button_map {
  * @y_flip: y flip flag
  * @i2c_pull_up: pull up i2c bus with regulator
  * @power_down_enable: enable complete regulator shutdown in suspend
+ * @check_build: check the build information for firmware
  * @irq_gpio: attention interrupt gpio
  * @irq_flags: flags used by the irq
  * @reset_flags: flags used by reset line
@@ -65,6 +66,7 @@ struct synaptics_rmi4_platform_data {
 	bool wakeup;
 	bool disable_gpios;
 	bool do_lockdown;
+	bool check_build;
 	unsigned irq_gpio;
 	u32 irq_flags;
 	u32 reset_flags;
-- 
GitLab