/************************************************************************ * Name: fts_fwupgradeapp_store * Brief: upgrade from app.bin * Input: device, device attribute, char buf, char count * Output: no * Return: char count ***********************************************************************/ static ssize_t fts_fwupgradeapp_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char fwname[128]; struct i2c_client *client = container_of(dev, struct i2c_client, dev); memset(fwname, 0, sizeof(fwname)); sprintf(fwname, "%s", buf); fwname[count-1] = '\0'; mutex_lock(&fts_input_dev->mutex); disable_irq(client->irq); #if GTP_ESD_PROTECT apk_debug_flag = 1; #endif fts_ctpm_fw_upgrade_with_app_file(client, fwname); #if GTP_ESD_PROTECT apk_debug_flag = 0; #endif enable_irq(client->irq); mutex_unlock(&fts_input_dev->mutex); return count; }
/*upgrade from app.bin*/ static ssize_t ft6x06_fwupgradeapp_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char fwname[128]; struct i2c_client *client = container_of(dev, struct i2c_client, dev); memset(fwname, 0, sizeof(fwname)); snprintf(fwname, sizeof(fwname), "%s", buf); fwname[count - 1] = '\0'; mutex_lock(&g_device_mutex); disable_irq(client->irq); fts_ctpm_fw_upgrade_with_app_file(client, fwname); enable_irq(client->irq); mutex_unlock(&g_device_mutex); return count; }
/************************************************************************ * Name: fts_debug_write * Brief:interface of write proc * Input: file point, data buf, data len, no use * Output: no * Return: data len ***********************************************************************/ static ssize_t fts_debug_write(struct file *filp, const char __user *buff, size_t count, loff_t *ppos) { unsigned char writebuf[WRITE_BUF_SIZE]; int buflen = count; int writelen = 0; int ret = 0; if (copy_from_user(&writebuf, buff, buflen)) { dev_err(&fts_i2c_client->dev, "%s:copy from user error\n", __func__); return -EFAULT; } proc_operate_mode = writebuf[0]; switch (proc_operate_mode) { case PROC_UPGRADE: { char upgrade_file_path[128]; memset(upgrade_file_path, 0, sizeof(upgrade_file_path)); sprintf(upgrade_file_path, "%s", writebuf + 1); upgrade_file_path[buflen-1] = '\0'; FTS_DBG("%s\n", upgrade_file_path); disable_irq(fts_i2c_client->irq); #if GTP_ESD_PROTECT apk_debug_flag = 1; #endif ret = fts_ctpm_fw_upgrade_with_app_file(fts_i2c_client, upgrade_file_path); #if GTP_ESD_PROTECT apk_debug_flag = 0; #endif enable_irq(fts_i2c_client->irq); if (ret < 0) { dev_err(&fts_i2c_client->dev, "%s:upgrade failed.\n", __func__); return ret; } } break; case PROC_READ_REGISTER: writelen = 1; ret = fts_i2c_write(fts_i2c_client, writebuf + 1, writelen); if (ret < 0) { dev_err(&fts_i2c_client->dev, "%s:write iic error\n", __func__); return ret; } break; case PROC_WRITE_REGISTER: writelen = 2; ret = fts_i2c_write(fts_i2c_client, writebuf + 1, writelen); if (ret < 0) { dev_err(&fts_i2c_client->dev, "%s:write iic error\n", __func__); return ret; } break; case PROC_AUTOCLB: FTS_DBG("%s: autoclb\n", __func__); fts_ctpm_auto_clb(fts_i2c_client); break; case PROC_READ_DATA: case PROC_WRITE_DATA: writelen = count - 1; ret = fts_i2c_write(fts_i2c_client, writebuf + 1, writelen); if (ret < 0) { dev_err(&fts_i2c_client->dev, "%s:write iic error\n", __func__); return ret; } break; default: break; } return count; }