Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e57a66aa authored by Nick Dyer's avatar Nick Dyer Committed by Dmitry Torokhov
Browse files

Input: atmel_mxt_ts - read and report bootloader version

parent f28a842d
Loading
Loading
Loading
Loading
+26 −0
Original line number Original line Diff line number Diff line
@@ -198,6 +198,8 @@
#define MXT_FRAME_CRC_PASS	0x04
#define MXT_FRAME_CRC_PASS	0x04
#define MXT_APP_CRC_FAIL	0x40	/* valid 7 8 bit only */
#define MXT_APP_CRC_FAIL	0x40	/* valid 7 8 bit only */
#define MXT_BOOT_STATUS_MASK	0x3f
#define MXT_BOOT_STATUS_MASK	0x3f
#define MXT_BOOT_EXTENDED_ID	(1 << 5)
#define MXT_BOOT_ID_MASK	0x1f


/* Touch status */
/* Touch status */
#define MXT_UNGRIP		(1 << 0)
#define MXT_UNGRIP		(1 << 0)
@@ -446,6 +448,27 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data)
	return 0;
	return 0;
}
}


static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
{
	struct device *dev = &data->client->dev;
	u8 buf[3];

	if (val & MXT_BOOT_EXTENDED_ID) {
		if (mxt_bootloader_read(data, &buf[0], 3) != 0) {
			dev_err(dev, "%s: i2c failure\n", __func__);
			return -EIO;
		}

		dev_dbg(dev, "Bootloader ID:%d Version:%d\n", buf[1], buf[2]);

		return buf[0];
	} else {
		dev_dbg(dev, "Bootloader ID:%d\n", val & MXT_BOOT_ID_MASK);

		return val;
	}
}

static int mxt_check_bootloader(struct mxt_data *data, unsigned int state)
static int mxt_check_bootloader(struct mxt_data *data, unsigned int state)
{
{
	struct device *dev = &data->client->dev;
	struct device *dev = &data->client->dev;
@@ -478,6 +501,9 @@ static int mxt_check_bootloader(struct mxt_data *data, unsigned int state)
	if (ret)
	if (ret)
		return ret;
		return ret;


	if (state == MXT_WAITING_BOOTLOAD_CMD)
		val = mxt_get_bootloader_version(data, val);

	switch (state) {
	switch (state) {
	case MXT_WAITING_BOOTLOAD_CMD:
	case MXT_WAITING_BOOTLOAD_CMD:
	case MXT_WAITING_FRAME_DATA:
	case MXT_WAITING_FRAME_DATA: