コード例 #1
0
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]);
}
コード例 #2
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]);
}
コード例 #3
0
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]);
}