提交 f2ac6cb9 编写于 作者: N Nick Dyer 提交者: Dmitry Torokhov

Input: atmel_mxt_ts - add check for incorrect firmware file format

Atmel supplies firmware files in ASCII HEX format (.enc) which must be
converted before they can be loaded by kernel driver. Try to detect
the error and print a friendly error message rather than feeding junk
to the bootloader.
Signed-off-by: NNick Dyer <nick.dyer@itdev.co.uk>
Acked-by: NBenson Leung <bleung@chromium.org>
Acked-by: NYufeng Shen <miletus@chromium.org>
Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
上级 f477c758
...@@ -1185,6 +1185,30 @@ static ssize_t mxt_object_show(struct device *dev, ...@@ -1185,6 +1185,30 @@ static ssize_t mxt_object_show(struct device *dev,
return error ?: count; return error ?: count;
} }
static int mxt_check_firmware_format(struct device *dev,
const struct firmware *fw)
{
unsigned int pos = 0;
char c;
while (pos < fw->size) {
c = *(fw->data + pos);
if (c < '0' || (c > '9' && c < 'A') || c > 'F')
return 0;
pos++;
}
/*
* To convert file try:
* xxd -r -p mXTXXX__APP_VX-X-XX.enc > maxtouch.fw
*/
dev_err(dev, "Aborting: firmware file must be in binary format\n");
return -EINVAL;
}
static int mxt_load_fw(struct device *dev, const char *fn) static int mxt_load_fw(struct device *dev, const char *fn)
{ {
struct mxt_data *data = dev_get_drvdata(dev); struct mxt_data *data = dev_get_drvdata(dev);
...@@ -1201,6 +1225,11 @@ static int mxt_load_fw(struct device *dev, const char *fn) ...@@ -1201,6 +1225,11 @@ static int mxt_load_fw(struct device *dev, const char *fn)
return ret; return ret;
} }
/* Check for incorrect enc file */
ret = mxt_check_firmware_format(dev, fw);
if (ret)
goto release_firmware;
ret = mxt_lookup_bootloader_address(data); ret = mxt_lookup_bootloader_address(data);
if (ret) if (ret)
goto release_firmware; goto release_firmware;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册