Input: exc3000 - fix firmware version query for device in bootloader

If the device is stuck in bootloader (maybe due to blank or corrupted
application firmware) it won't answer a query for the firmware version.
Fall back to returning the bootloader version in that case.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Link: https://lore.kernel.org/r/20210125182527.1225245-4-l.stach@pengutronix.de
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Lucas Stach 2021-03-07 21:40:01 -08:00 committed by Dmitry Torokhov
parent 102feb1ddf
commit c929ac9eb8
1 changed files with 14 additions and 0 deletions

View File

@ -263,6 +263,20 @@ static ssize_t fw_version_show(struct device *dev,
u8 response[EXC3000_LEN_FRAME];
int ret;
/* query bootloader info */
ret = exc3000_vendor_data_request(data,
(u8[]){0x39, 0x02}, 2, response, 1);
if (ret < 0)
return ret;
/*
* If the bootloader version is non-zero then the device is in
* bootloader mode and won't answer a query for the application FW
* version, so we just use the bootloader version info.
*/
if (response[2] || response[3])
return sprintf(buf, "%d.%d\n", response[2], response[3]);
ret = exc3000_vendor_data_request(data, (u8[]){'D'}, 1, response, 1);
if (ret < 0)
return ret;