@@ -718,17 +718,13 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
return 0;
}
-static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address)
+static int mxt_probe_bootloader(struct mxt_data *data)
{
struct device *dev = &data->client->dev;
int error;
u8 buf[3];
bool crc_failure, extended_id;
- error = mxt_lookup_bootloader_address(data, alt_address);
- if (error)
- return error;
-
/* Check bootloader status and version information */
error = mxt_bootloader_read(data, buf, sizeof(buf));
if (error)
@@ -2930,13 +2926,25 @@ static int mxt_initialize(struct mxt_data *data)
if (!error)
break;
+ dev_info(&client->dev,
+ "info block read failed (%d), so try bootloader method\n",
+ error);
+
+ error = mxt_lookup_bootloader_address(data, false);
+ if (error) {
+ dev_info(&client->dev,
+ "Bootloader address is not specified\n");
+ return error;
+ }
/* Check bootloader state */
- error = mxt_probe_bootloader(data, false);
+ error = mxt_probe_bootloader(data);
if (error) {
dev_info(&client->dev, "Trying alternate bootloader address\n");
- error = mxt_probe_bootloader(data, true);
+ mxt_lookup_bootloader_address(data, true);
+ error = mxt_probe_bootloader(data);
if (error) {
- /* Chip is not in appmode or bootloader mode */
+ dev_err(&client->dev,
+ "Chip is not in appmode or bootloader mode\n");
return error;
}
}
@@ -2953,7 +2961,9 @@ static int mxt_initialize(struct mxt_data *data)
}
/* Attempt to exit bootloader into app mode */
- mxt_send_bootloader_cmd(data, false);
+ error = mxt_send_bootloader_cmd(data, false);
+ if (error)
+ return error;
msleep(MXT_FW_RESET_TIME);
}
@@ -3645,8 +3655,11 @@ static int mxt_enter_bootloader(struct mxt_data *data)
msleep(MXT_RESET_TIME);
+ ret = mxt_lookup_bootloader_address(data, false);
+ if (ret)
+ return ret;
/* Do not need to scan since we know family ID */
- ret = mxt_probe_bootloader(data, 0);
+ ret = mxt_probe_bootloader(data);
if (ret)
return ret;