diff --git a/drivers/input/touchscreen/synaptics_fw_update.c b/drivers/input/touchscreen/synaptics_fw_update.c index 5a2eda27ac500c901edb700bf65959a62b229ab6..48d5b28cfcd67965b7512c788152fe894caff5b3 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;