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