From 8213276874f4e5a58d77e8078611fe20655d2b4d Mon Sep 17 00:00:00 2001
From: Devin Kim <dojip.kim@lge.com>
Date: Mon, 3 Nov 2014 17:33:07 -0800
Subject: [PATCH] touch: synaptics: Use a sysfs for touch fw update on boot

Do check the touch firmware update after system is mounted. If system is
not mounted like recovery, it would block the touch operation until
request_firmware() timedouts.

Change-Id: Ifc5fa151ac9d554d9fe2e1c04a190c56de64c138
Signed-off-by: Devin Kim <dojip.kim@lge.com>
---
 .../input/touchscreen/synaptics_fw_update.c   | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/drivers/input/touchscreen/synaptics_fw_update.c b/drivers/input/touchscreen/synaptics_fw_update.c
index 5a2eda27ac50..48d5b28cfcd6 100644
--- a/drivers/input/touchscreen/synaptics_fw_update.c
+++ b/drivers/input/touchscreen/synaptics_fw_update.c
@@ -1876,6 +1876,20 @@ exit:
 	return retval;
 }
 
+static ssize_t fwu_sysfs_check_fw_store(struct device *dev,
+		struct device_attribute *attr, const char *buf, size_t count)
+{
+	unsigned int input = 0;
+
+	if (sscanf(buf, "%u", &input) != 1)
+		return -EINVAL;
+
+	if (input)
+		queue_delayed_work(fwu->fwu_workqueue, &fwu->fwu_work, 0);
+
+	return count;
+}
+
 static ssize_t fwu_sysfs_write_config_store(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t count)
 {
@@ -2114,6 +2128,9 @@ static struct device_attribute attrs[] = {
 	__ATTR(update_fw, S_IWUSR | S_IWGRP,
 			NULL,
 			fwu_sysfs_do_reflash_store),
+	__ATTR(check_fw, S_IWUSR | S_IWGRP,
+			NULL,
+			fwu_sysfs_check_fw_store),
 	__ATTR(writeconfig, S_IWUSR | S_IWGRP,
 			NULL,
 			fwu_sysfs_write_config_store),
@@ -2289,9 +2306,6 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data)
 #ifdef INSIDE_FIRMWARE_UPDATE
 	fwu->fwu_workqueue = create_singlethread_workqueue("fwu_workqueue");
 	INIT_DELAYED_WORK(&fwu->fwu_work, synaptics_rmi4_fwu_work);
-	queue_delayed_work(fwu->fwu_workqueue,
-			&fwu->fwu_work,
-			msecs_to_jiffies(1000));
 #endif
 
 	return 0;
-- 
GitLab