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:
parent
102feb1ddf
commit
c929ac9eb8
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue