diff options
author | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2015-12-06 17:07:15 +0100 |
---|---|---|
committer | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2015-12-06 17:07:15 +0100 |
commit | 68ee93f3d058ff58f994d08be00d3aad9ec20970 (patch) | |
tree | 5fb2d14340332062e416246c5759adcaa64a2340 /drivers/input/touchscreen/synaptics_fw_updater.c | |
parent | 17021fd920fb5bc97a8c81a20b208c5b38f1b0e8 (diff) | |
parent | b99374450c03bf5081b88995d91d34fb9b2fd040 (diff) | |
download | kernel_samsung_smdk4412-68ee93f3d058ff58f994d08be00d3aad9ec20970.zip kernel_samsung_smdk4412-68ee93f3d058ff58f994d08be00d3aad9ec20970.tar.gz kernel_samsung_smdk4412-68ee93f3d058ff58f994d08be00d3aad9ec20970.tar.bz2 |
Merge branch 'master' of fossencdi.org:kernel_samsung_smdk4412
Diffstat (limited to 'drivers/input/touchscreen/synaptics_fw_updater.c')
-rw-r--r-- | drivers/input/touchscreen/synaptics_fw_updater.c | 91 |
1 files changed, 69 insertions, 22 deletions
diff --git a/drivers/input/touchscreen/synaptics_fw_updater.c b/drivers/input/touchscreen/synaptics_fw_updater.c index 1a15fdc..2b8293f 100644 --- a/drivers/input/touchscreen/synaptics_fw_updater.c +++ b/drivers/input/touchscreen/synaptics_fw_updater.c @@ -399,39 +399,79 @@ int synaptics_fw_updater(struct synaptics_drv_data *data, u8 *fw_data) { struct synaptics_ts_fw_block *fw; int irq = gpio_to_irq(data->gpio); - bool update = true; + bool update = false; fw = kzalloc(sizeof(struct synaptics_ts_fw_block), GFP_KERNEL); data->fw = fw; if (NULL == fw_data) { - u8 *buf, *fw_version; - buf = kzalloc(4, GFP_KERNEL); - fw_version = kzalloc(4, GFP_KERNEL); + u8 buf[5] = {0, }; +#if defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S7301_KEYS) + if (data->pdata->support_extend_button) { + fw->fw_data = (u8 *)rmi_fw_button; + + /* set firmware data */ + data->firm_version[0] = rmi_fw_button[0xb100]; + data->firm_version[1] = rmi_fw_button[0xb101]; + data->firm_version[2] = rmi_fw_button[0xb102]; + data->firm_version[3] = rmi_fw_button[0xb103]; + data->firm_version[4] = '\0'; + + strncpy(data->firm_config, rmi_config_ver_button, + sizeof(data->firm_config)); + } else { + fw->fw_data = (u8 *)rmi_fw; + + data->firm_version[0] = rmi_fw[0xb100]; + data->firm_version[1] = rmi_fw[0xb101]; + data->firm_version[2] = rmi_fw[0xb102]; + data->firm_version[3] = rmi_fw[0xb103]; + data->firm_version[4] = '\0'; + + strncpy(data->firm_config, rmi_config_ver, + sizeof(data->firm_config)); + } +#else fw->fw_data = (u8 *)rmi_fw; - strncpy(fw_version, &rmi_fw[0xb100], - sizeof(fw_version)); - strncpy(data->firm_version, fw_version, - sizeof(data->firm_version)); + + data->firm_version[0] = rmi_fw[0xb100]; + data->firm_version[1] = rmi_fw[0xb101]; + data->firm_version[2] = rmi_fw[0xb102]; + data->firm_version[3] = rmi_fw[0xb103]; + data->firm_version[4] = '\0'; + strncpy(data->firm_config, rmi_config_ver, sizeof(data->firm_config)); - synaptics_ts_read_block(data, +#endif + if (synaptics_ts_read_block(data, data->f34.control_base_addr, - buf, 4); - - printk(KERN_DEBUG "[TSP] IC FW. : [%s], new FW. : [%s]\n", - buf, fw_version); - - if (strncmp((char *)fw_version, (char *)buf, 4) == 0) - update = false; - - kfree(buf); - kfree(fw_version); - - } else + buf, 4) > 0) + printk(KERN_DEBUG "[TSP] block read success!\n"); + else + printk(KERN_DEBUG "[TSP] block read failed!\n"); + + printk(KERN_DEBUG "[TSP] IC FW. : [%c%c%.2d%.2d00], new FW. : [%c%c%.2d%.2d00]\n", + buf[0],buf[1],buf[2],buf[3], + data->firm_version[0],data->firm_version[1], + data->firm_version[2],data->firm_version[3]); + + /* update firm > tsp */ + /* + if (strcmp(data->firm_version, buf) > 0) { + printk(KERN_DEBUG "[TSP] update!\n"); + update = true; + } + */ + /* update if firm != tsp */ + if (strncmp(data->firm_version, buf, 4) != 0) + update = true; + } else { fw->fw_data = fw_data; - + update = true; + } + if (update) { + printk(KERN_DEBUG "[TSP] tsp update!!\n"); disable_irq(irq); wake_lock(&data->wakelock); synaptics_fw_initialize(data); @@ -463,6 +503,13 @@ int synaptics_fw_updater(struct synaptics_drv_data *data, u8 *fw_data) void forced_fw_update(struct synaptics_drv_data *data) { +#if defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S7301_KEYS) + if (data->pdata->support_extend_button) + synaptics_fw_updater(data, (u8 *)rmi_fw_button); + else + synaptics_fw_updater(data, (u8 *)rmi_fw); +#else synaptics_fw_updater(data, (u8 *)rmi_fw); +#endif } |