From: Jiada Wang <jiada_wang@mentor.com>
To: <nick@shmanahar.org>, <dmitry.torokhov@gmail.com>,
<jikos@kernel.org>, <benjamin.tissoires@redhat.com>,
<bsz@semihalf.com>, <rydberg@bitmath.org>
Cc: <linux-input@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<erosca@de.adit-jv.com>, <Andrew_Gabbasov@mentor.com>,
<jiada_wang@mentor.com>
Subject: [PATCH v9 25/55] Input: atmel_mxt_ts - refactor firmware flash to extract context into struct
Date: Wed, 25 Mar 2020 06:33:04 -0700 [thread overview]
Message-ID: <20200325133334.19346-26-jiada_wang@mentor.com> (raw)
In-Reply-To: <20200325133334.19346-1-jiada_wang@mentor.com>
From: Nick Dyer <nick.dyer@itdev.co.uk>
Refactor firmware flash to extract context into struct
Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk>
(cherry picked from ndyer/linux/for-upstream commit 1bbe20ff3dcd6612e7942c495929eae5c138ece2)
Signed-off-by: George G. Davis <george_davis@mentor.com>
[jiada: Add commit description]
Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
---
drivers/input/touchscreen/atmel_mxt_ts.c | 59 +++++++++++++++---------
1 file changed, 36 insertions(+), 23 deletions(-)
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 67931cf64629..2c4b68802bc3 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -291,6 +291,22 @@ struct mxt_cfg {
struct mxt_info info;
};
+/* Firmware frame structure */
+struct mxt_fw_frame {
+ __be16 size;
+ u8 data[];
+};
+
+/* Firmware update context */
+struct mxt_flash {
+ const struct firmware *fw;
+ struct mxt_fw_frame *frame;
+ loff_t pos;
+ size_t frame_size;
+ unsigned int count;
+ unsigned int retry;
+};
+
/* Each client has this additional data */
struct mxt_data {
struct i2c_client *client;
@@ -3244,21 +3260,17 @@ static int mxt_check_firmware_format(struct device *dev,
static int mxt_load_fw(struct device *dev)
{
struct mxt_data *data = dev_get_drvdata(dev);
- const struct firmware *fw = NULL;
- unsigned int frame_size;
- unsigned int pos = 0;
- unsigned int retry = 0;
- unsigned int frame = 0;
+ struct mxt_flash f = { 0, };
int ret;
- ret = request_firmware(&fw, data->fw_name, dev);
+ ret = request_firmware(&f.fw, data->fw_name, dev);
if (ret) {
dev_err(dev, "Unable to open firmware %s\n", data->fw_name);
return ret;
}
/* Check for incorrect enc file */
- ret = mxt_check_firmware_format(dev, fw);
+ ret = mxt_check_firmware_format(dev, f.fw);
if (ret)
goto release_firmware;
@@ -3312,41 +3324,42 @@ static int mxt_load_fw(struct device *dev)
goto disable_irq;
}
- while (pos < fw->size) {
+ while (f.pos < f.fw->size) {
+ f.frame = (struct mxt_fw_frame *)(f.fw->data + f.pos);
+
ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
if (ret)
goto disable_irq;
- frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
-
/* Take account of CRC bytes */
- frame_size += 2;
+ f.frame_size = __be16_to_cpu(f.frame->size) + 2U;
/* Write one frame to device */
- ret = mxt_bootloader_write(data, fw->data + pos, frame_size);
+ ret = mxt_bootloader_write(data, f.fw->data + f.pos,
+ f.frame_size);
if (ret)
goto disable_irq;
ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
if (ret) {
- retry++;
+ f.retry++;
/* Back off by 20ms per retry */
- msleep(retry * 20);
+ msleep(f.retry * 20);
- if (retry > 20) {
+ if (f.retry > 20) {
dev_err(dev, "Retry count exceeded\n");
goto disable_irq;
}
} else {
- retry = 0;
- pos += frame_size;
- frame++;
+ f.retry = 0;
+ f.pos += f.frame_size;
+ f.count++;
}
- if (frame % 50 == 0)
- dev_dbg(dev, "Sent %d frames, %d/%zd bytes\n",
- frame, pos, fw->size);
+ if (f.count % 50 == 0)
+ dev_dbg(dev, "Sent %u frames, %lld/%zu bytes\n",
+ f.count, f.pos, f.fw->size);
}
/* Wait for flash. */
@@ -3355,7 +3368,7 @@ static int mxt_load_fw(struct device *dev)
if (ret)
goto disable_irq;
- dev_dbg(dev, "Sent %d frames, %d bytes\n", frame, pos);
+ dev_dbg(dev, "Sent %u frames, %lld bytes\n", f.count, f.pos);
/*
* Wait for device to reset. Some bootloader versions do not assert
@@ -3369,7 +3382,7 @@ static int mxt_load_fw(struct device *dev)
disable_irq:
disable_irq(data->irq);
release_firmware:
- release_firmware(fw);
+ release_firmware(f.fw);
return ret;
}
--
2.17.1
next prev parent reply other threads:[~2020-03-25 13:35 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-25 13:32 [PATCH v9 00/55] atmel_mxt_ts misc Jiada Wang
2020-03-25 13:32 ` [PATCH v9 01/55] Input: introduce input_mt_report_slot_inactive Jiada Wang
2020-03-25 13:32 ` [PATCH v9 02/55] Input: atmel_mxt_ts - rework sysfs init/remove Jiada Wang
2020-03-25 13:32 ` [PATCH v9 03/55] Input: atmel_mxt_ts - only read messages in mxt_acquire_irq() when necessary Jiada Wang
2020-03-25 13:32 ` [PATCH v9 04/55] Input: atmel_mxt_ts - split large i2c transfers into blocks Jiada Wang
2020-03-25 13:32 ` [PATCH v9 05/55] Input: atmel_mxt_ts - output status from T48 Noise Supression Jiada Wang
2020-03-25 13:32 ` [PATCH v9 06/55] Input: atmel_mxt_ts - output status from T42 Touch Suppression Jiada Wang
2020-03-25 13:32 ` [PATCH v9 07/55] Input: atmel_mxt_ts - implement T9 vector/orientation support Jiada Wang
2020-03-25 13:32 ` [PATCH v9 08/55] Input: atmel_mxt_ts - implement T15 Key Array support Jiada Wang
2020-03-25 13:32 ` [PATCH v9 09/55] Input: atmel_mxt_ts - handle reports from T47 Stylus object Jiada Wang
2020-03-25 13:32 ` [PATCH v9 10/55] Input: atmel_mxt_ts - implement support for T107 active stylus Jiada Wang
2020-03-25 13:32 ` [PATCH v9 11/55] Input: atmel_mxt_ts - add debug for T92 gesture and T93 touch seq msgs Jiada Wang
2020-03-25 13:32 ` [PATCH v9 12/55] Input: atmel_mxt_ts - release touch state during suspend Jiada Wang
2020-03-25 13:32 ` [PATCH v9 13/55] Input: atmel_mxt_ts - add regulator control support Jiada Wang
2020-03-25 19:05 ` Dmitry Osipenko
2020-03-27 11:09 ` Wang, Jiada
2020-03-29 18:54 ` Dmitry Osipenko
2020-03-30 4:10 ` Wang, Jiada
2020-03-25 13:32 ` [PATCH v9 14/55] dt-bindings: input: atmel: add suspend mode support Jiada Wang
2020-03-25 13:32 ` [PATCH v9 15/55] Input: atmel_mxt_ts - report failures in suspend/resume Jiada Wang
2020-03-25 13:32 ` [PATCH v9 16/55] Input: atmel_mxt_ts - allow specification of firmware file name Jiada Wang
2020-03-25 13:32 ` [PATCH v9 17/55] Input: atmel_mxt_ts: Rename mxt_fw_version_show to fw_version_show Jiada Wang
2020-03-25 13:32 ` [PATCH v9 18/55] Input: atmel_mxt_ts: Rename mxt_hw_version_show to hw_version_show Jiada Wang
2020-03-25 13:32 ` [PATCH v9 19/55] Input: atmel_mxt_ts: rename mxt_update_fw_store to update_fw_store Jiada Wang
2020-03-25 13:32 ` [PATCH v9 20/55] Input: atmel_mxt_ts - handle cfg filename via pdata/sysfs Jiada Wang
2020-03-25 13:33 ` [PATCH v9 21/55] dt-bindings: input: atmel: provide name of configuration file Jiada Wang
2020-03-25 13:33 ` [PATCH v9 22/55] Input: atmel_mxt_ts - allow input name to be specified in platform data Jiada Wang
2020-03-25 13:33 ` [PATCH v9 23/55] dt-bindings: input: atmel: support to specify input name Jiada Wang
2020-03-25 13:33 ` [PATCH v9 24/55] Input: atmel_mxt_ts - add config checksum attribute to sysfs Jiada Wang
2020-03-25 13:33 ` Jiada Wang [this message]
2020-03-25 13:33 ` [PATCH v9 26/55] Input: atmel_mxt_ts - refactor code to enter bootloader into separate func Jiada Wang
2020-03-25 13:33 ` [PATCH v9 27/55] Input: atmel_mxt_ts - combine bootloader version query with probe Jiada Wang
2020-03-25 13:33 ` [PATCH v9 28/55] Input: atmel_mxt_ts - improve bootloader state machine handling Jiada Wang
2020-03-25 13:33 ` [PATCH v9 29/55] Input: atmel_mxt_ts - rename bl_completion to chg_completion Jiada Wang
2020-03-25 13:33 ` [PATCH v9 30/55] Input: atmel_mxt_ts - make bootloader interrupt driven Jiada Wang
2020-03-25 13:33 ` [PATCH v9 31/55] Input: atmel_mxt_ts - delay enabling IRQ when not using regulators Jiada Wang
2020-03-25 13:33 ` [PATCH v9 32/55] Input: atmel_mxt_ts - implement I2C retries Jiada Wang
2020-03-25 13:33 ` [PATCH v9 33/55] Input: atmel_mxt_ts - orientation is not present in hover Jiada Wang
2020-03-25 13:33 ` [PATCH v9 34/55] Input: atmel_mxt_ts - implement debug output for messages Jiada Wang
2020-03-25 13:33 ` [PATCH v9 35/55] Input: atmel_mxt_ts - implement improved debug message interface Jiada Wang
2020-03-25 13:33 ` [PATCH v9 36/55] Input: atmel_mxt_ts - eliminate data->raw_info_block Jiada Wang
2020-03-25 13:33 ` [PATCH v9 37/55] Input: atmel_mxt_ts - Change call-points of mxt_free_* functions Jiada Wang
2020-03-25 13:33 ` [PATCH v9 38/55] Input: atmel_mxt_ts - rely on calculated_crc rather than file config_crc Jiada Wang
2020-03-25 13:33 ` [PATCH v9 39/55] input: atmel_mxt_ts: export GPIO reset line via sysfs Jiada Wang
2020-03-25 13:33 ` [PATCH v9 40/55] input: atmel_mxt_ts: Add Missing Delay for reset handling of Atmel touch panel controller in detachable displays Jiada Wang
2020-03-25 13:33 ` [PATCH v9 41/55] Input: atmel_mxt_ts: Add support for run self-test routine Jiada Wang
2020-03-25 13:33 ` [PATCH v9 42/55] Input: atmel_mxt_ts: Limit the max bytes transferred in an i2c transaction Jiada Wang
2020-03-25 13:33 ` [PATCH v9 43/55] dt-bindings: input: atmel: support to set max bytes transferred Jiada Wang
2020-03-25 13:33 ` [PATCH v9 44/55] Input: atmel_mxt_ts: return error from mxt_process_messages_until_invalid() Jiada Wang
2020-03-25 13:33 ` [PATCH v9 45/55] Input: Atmel: improve error handling in mxt_start() Jiada Wang
2020-03-25 13:33 ` [PATCH v9 46/55] Input: Atmel: improve error handling in mxt_initialize() Jiada Wang
2020-03-25 13:33 ` [PATCH v9 47/55] Input: Atmel: improve error handling in mxt_update_cfg() Jiada Wang
2020-03-25 13:33 ` [PATCH v9 48/55] Input: Atmel: Improve error handling in mxt_initialize_input_device() Jiada Wang
2020-03-25 13:33 ` [PATCH v9 49/55] Input: Atmel: handle ReportID "0x00" while processing T5 messages Jiada Wang
2020-03-25 13:33 ` [PATCH v9 50/55] Input: Atmel: use T44 object to process " Jiada Wang
2020-03-25 13:33 ` [PATCH v9 51/55] Input: atmel_mxt_ts: use gpiod_set_value_cansleep for reset pin Jiada Wang
2020-03-25 13:33 ` [PATCH v9 52/55] input: touchscreen: atmel_mxt_ts: Added sysfs entry for touchscreen status Jiada Wang
2020-03-25 19:35 ` Dmitry Osipenko
2020-03-25 19:41 ` Dmitry Osipenko
2020-03-27 12:49 ` Wang, Jiada
2020-03-27 13:37 ` Dmitry Osipenko
2020-03-27 13:43 ` Dmitry Osipenko
2020-03-25 13:33 ` [PATCH v9 53/55] input: atmel_mxt_ts: added sysfs interface to update atmel T38 data Jiada Wang
2020-03-25 13:33 ` [PATCH v9 54/55] Input: atmel_mxt_ts: Implement synchronization during various operation Jiada Wang
2020-03-25 13:33 ` [PATCH v9 55/55] Input: atmel_mxt_ts - Fix compilation warning Jiada Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200325133334.19346-26-jiada_wang@mentor.com \
--to=jiada_wang@mentor.com \
--cc=Andrew_Gabbasov@mentor.com \
--cc=benjamin.tissoires@redhat.com \
--cc=bsz@semihalf.com \
--cc=dmitry.torokhov@gmail.com \
--cc=erosca@de.adit-jv.com \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nick@shmanahar.org \
--cc=rydberg@bitmath.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).