Thread (21 messages) 21 messages, 3 authors, 2016-05-27

Re: [PATCH] driver: input :touchscreen : add Raydium I2C touch driver

From: jeffrey.lin <hidden>
Date: 2016-05-16 15:57:45
Also in: linux-input, lkml

static int raydium_i2c_do_update_firmware(struct raydium_data *ts,
				 const struct firmware *fw)
{
struct i2c_client *client = ts->client;
const void *data;
size_t data_len;
size_t len;
int page_nr;
int i;
int error;
u16 fw_checksum;

if (fw->size == 0) {
additional protect.
	if (fw->size == 0 || fw->size > RM_MAX_FW_SIZE) {
	dev_err(&client->dev, "Invalid firmware length\n");
	return -EINVAL;
}

error = raydium_i2c_check_fw_status(ts);
if (error) {
	dev_err(&client->dev, "Unable to access IC %d\n", error);
	return error;
}

if (ts->boot_mode == RAYDIUM_TS_MAIN) {
	for (i = 0; i < RM_MAX_RETRIES; i++) {
		error = raydium_i2c_enter_bl(client);
		if (!error) {
			error = raydium_i2c_check_fw_status(ts);
			if (error) {
				dev_err(&client->dev,
					"unable to access IC: %d\n",
					error);
				return error;
			}

			if (ts->boot_mode == RAYDIUM_TS_BLDR)
				break;
		}
	}

	if (ts->boot_mode == RAYDIUM_TS_MAIN) {
		dev_err(&client->dev,
			"failied to jump to boot loader: %d\n",
			error);
		return -EIO;
	}
}

error = raydium_i2c_disable_watch_dog(client);
if (error)
	return error;

error = raydium_i2c_check_path(client);
if (error)
	return error;

error = raydium_i2c_boot_trigger(client);
if (error) {
	dev_err(&client->dev, "send boot trigger fail: %d\n", error);
	return error;
}
additonal delay for safe
	msleep(RM_BOOT_DELAY_MS);
data = fw->data;
data_len = fw->size;
page_nr = 0;

while (data_len) {
	len = min_t(size_t, data_len, RM_FW_PAGE_SIZE);

	error = raydium_i2c_fw_write_page(client, page_nr++, data, len);
	if (error)
		return error;

	// XXX FIXME: we already sleep in raydium_i2c_fw_write_page(),
	// do we really need to sleep here as well?
		/*FIXME, remove delay in raydium_i2c_fw_write_page()*/
	msleep(20);

	data += len;
	data_len -= len;
}
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help