static ssize_t update_show(struct kobject *kobj, struct kobj_attribute *attr, char * buf) { uint8_t rdata[1] = {0}; uint8_t rdata_old[1] = {0}; int rc, retry = 0; rc = read_fw_version(ts, rdata_old); if (rc) pr_err("%s: read fw version fail\n", __func__); do { rc = firmware_update_func(ts); if (rc) goto original_fw_err; msleep(1000); rc = read_fw_version(ts, rdata); if (!rc) { return sprintf(buf, "new ver: %x\n", rdata[0]); } pr_info("%s: retry %d times\n", __func__, retry); } while (retry++ < 10); return sprintf(buf, "Firmware update fail\n"); original_fw_err: return sprintf(buf, "Original FW is wrong, ver: %x\n", rdata_old[0]); }
static ssize_t cypress_fw_update_show(struct device *device, struct device_attribute *attr, char *buf) { struct cypress_ts_data *ts = dev_get_drvdata(device); uint8_t rdata[4] = {0}; uint8_t rdata_old[4] = {0}; int rc, retry = 0; rc = read_fw_version(ts, rdata_old); if (rc) pr_err("%s: read fw version fail\n", __func__); do { if (machine_is_acer_a4()) { rc = firmware_update_func(ts, A4_PANEL); } else if (ts->user_panel) rc = firmware_update_func(ts, ts->user_panel); else { pr_info("%s: ver: %x.%x.%x\n", __func__, rdata_old[0], rdata_old[1], rdata_old[3]); if (rdata_old[0] == LGD_PANEL || rc) rc = firmware_update_func(ts, LGD_PANEL); else if (rdata_old[0] == CANDO_PALNEL) rc = firmware_update_func(ts, CANDO_PALNEL); else goto original_fw_err; } msleep(1000); rc = read_fw_version(ts, rdata); if (!rc) { return sprintf(buf, "new ver: %x.%x.%x\n", rdata[0], rdata[1], rdata[3]); } pr_info("%s: retry %d times\n", __func__, retry); } while (retry++ < 10); return sprintf(buf, "Firmware update fail\n"); original_fw_err: return sprintf(buf, "Original FW is wrong, ver: %x.%x.%x\n", rdata_old[0], rdata_old[1], rdata_old[3]); }
static void firmware_work_func(struct work_struct *work2) { struct cypress_ts_data *ts = container_of(work2, struct cypress_ts_data, work2); uint8_t rdata[4] = {0}; uint8_t rdata_old[4] = {0}; int rc; msleep(8000); rc = read_fw_version(ts, rdata_old); if (rc) pr_err("%s: read fw version fail\n", __func__); pr_info("%s: ver: %x.%x.%x\n", __func__, rdata_old[0], rdata_old[1], rdata_old[3]); if (rdata_old[0] == LGD_PANEL || rc) rc = firmware_update_func(ts, LGD_PANEL); else if (rdata_old[0] == CANDO_PALNEL) rc = firmware_update_func(ts, CANDO_PALNEL); else goto original_fw_err; if (rc) goto i2c_err; rc = read_fw_version(ts, rdata); if (rc) { pr_err("%s: read fw version fail\n", __func__); goto i2c_err; } else pr_info("old ver: %x.%x.%x, new ver: %x.%x.%x\n", rdata_old[0], rdata_old[1], rdata_old[3], rdata[0], rdata[1], rdata[3]); i2c_err: pr_info("A5 FW update fail\n"); original_fw_err: pr_info("Original FW is wrong, ver: %x.%x.%x\n", rdata_old[0], rdata_old[1], rdata_old[3]); }