linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiada Wang <jiada_wang@mentor.com>
To: <jikos@kernel.org>, <benjamin.tissoires@redhat.com>,
	<rydberg@bitmath.org>, <dmitry.torokhov@gmail.com>
Cc: <linux-input@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<jiada_wang@mentor.com>, <erosca@de.adit-jv.com>,
	<Andrew_Gabbasov@mentor.com>
Subject: [PATCH v4 15/48] Input: atmel_mxt_ts - allow specification of firmware file name
Date: Tue, 29 Oct 2019 16:19:37 +0900	[thread overview]
Message-ID: <20191029072010.8492-16-jiada_wang@mentor.com> (raw)
In-Reply-To: <20191029072010.8492-1-jiada_wang@mentor.com>

From: Nick Dyer <nick.dyer@itdev.co.uk>

On platforms which have multiple device instances using this driver, the
firmware may be different on each device. This patch makes the user give
the name of the firmware file when flashing.

This also prevents accidental triggering of the firmware load process.

Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk>
Acked-by: Benson Leung <bleung@chromium.org>
Acked-by: Yufeng Shen <miletus@chromium.org>
(cherry picked from ndyer/linux/for-upstream commit 76ebb7cee971cb42dfb0a3a9224403b8b09abcf1)
[gdavis: Forward port and fix conflicts.]
Signed-off-by: George G. Davis <george_davis@mentor.com>
Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
---
 drivers/input/touchscreen/atmel_mxt_ts.c | 43 ++++++++++++++++++++----
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index b28bcbb315c2..85267c958da7 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -33,8 +33,7 @@
 #include <media/videobuf2-vmalloc.h>
 #include <dt-bindings/input/atmel_mxt_ts.h>
 
-/* Firmware files */
-#define MXT_FW_NAME		"maxtouch.fw"
+/* Configuration file */
 #define MXT_CFG_NAME		"maxtouch.cfg"
 #define MXT_CFG_MAGIC		"OBP_RAW V1"
 
@@ -335,6 +334,7 @@ struct mxt_data {
 	bool use_retrigen_workaround;
 	struct regulator *reg_vdd;
 	struct regulator *reg_avdd;
+	char *fw_name;
 
 	/* Cached parameters from object table */
 	u16 T5_address;
@@ -3207,7 +3207,7 @@ static int mxt_check_firmware_format(struct device *dev,
 	return -EINVAL;
 }
 
-static int mxt_load_fw(struct device *dev, const char *fn)
+static int mxt_load_fw(struct device *dev)
 {
 	struct mxt_data *data = dev_get_drvdata(dev);
 	const struct firmware *fw = NULL;
@@ -3217,9 +3217,9 @@ static int mxt_load_fw(struct device *dev, const char *fn)
 	unsigned int frame = 0;
 	int ret;
 
-	ret = request_firmware(&fw, fn, dev);
+	ret = request_firmware(&fw, data->fw_name, dev);
 	if (ret) {
-		dev_err(dev, "Unable to open firmware %s\n", fn);
+		dev_err(dev, "Unable to open firmware %s\n", data->fw_name);
 		return ret;
 	}
 
@@ -3339,6 +3339,33 @@ static int mxt_load_fw(struct device *dev, const char *fn)
 	return ret;
 }
 
+static int mxt_update_file_name(struct device *dev, char **file_name,
+				const char *buf, size_t count)
+{
+	char *file_name_tmp;
+
+	/* Simple sanity check */
+	if (count > 64) {
+		dev_warn(dev, "File name too long\n");
+		return -EINVAL;
+	}
+
+	file_name_tmp = krealloc(*file_name, count + 1, GFP_KERNEL);
+	if (!file_name_tmp)
+		return -ENOMEM;
+
+	*file_name = file_name_tmp;
+	memcpy(*file_name, buf, count);
+
+	/* Echo into the sysfs entry may append newline at the end of buf */
+	if (buf[count - 1] == '\n')
+		(*file_name)[count - 1] = '\0';
+	else
+		(*file_name)[count] = '\0';
+
+	return 0;
+}
+
 static ssize_t mxt_update_fw_store(struct device *dev,
 					struct device_attribute *attr,
 					const char *buf, size_t count)
@@ -3346,7 +3373,11 @@ static ssize_t mxt_update_fw_store(struct device *dev,
 	struct mxt_data *data = dev_get_drvdata(dev);
 	int error;
 
-	error = mxt_load_fw(dev, MXT_FW_NAME);
+	error = mxt_update_file_name(dev, &data->fw_name, buf, count);
+	if (error)
+		return error;
+
+	error = mxt_load_fw(dev);
 	if (error) {
 		dev_err(dev, "The firmware update failed(%d)\n", error);
 		count = error;
-- 
2.17.1


  parent reply	other threads:[~2019-10-29  7:21 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-29  7:19 [PATCH v4 00/48] atmel_mxt_ts misc Jiada Wang
2019-10-29  7:19 ` [PATCH v4 01/48] Input: introduce input_mt_report_slot_inactive Jiada Wang
2019-10-29 17:13   ` Henrik Rydberg
2019-10-30 23:23     ` Dmitry Torokhov
2019-10-31  8:01       ` Henrik Rydberg
2019-11-06  5:00       ` Jiada Wang
2019-10-29  7:19 ` [PATCH v4 02/48] Input: atmel_mxt_ts - rework sysfs init/remove Jiada Wang
2019-10-29  7:19 ` [PATCH v4 03/48] Input: atmel_mxt_ts - only read messages in mxt_acquire_irq() when necessary Jiada Wang
2019-10-29  7:19 ` [PATCH v4 04/48] Input: atmel_mxt_ts - split large i2c transfers into blocks Jiada Wang
2019-10-29  7:19 ` [PATCH v4 05/48] Input: atmel_mxt_ts - output status from T48 Noise Supression Jiada Wang
2019-10-29  7:19 ` [PATCH v4 06/48] Input: atmel_mxt_ts - output status from T42 Touch Suppression Jiada Wang
2019-10-29  7:19 ` [PATCH v4 07/48] Input: atmel_mxt_ts - implement T9 vector/orientation support Jiada Wang
2019-10-29  7:19 ` [PATCH v4 08/48] Input: atmel_mxt_ts - implement T15 Key Array support Jiada Wang
2019-10-29  7:19 ` [PATCH v4 09/48] Input: atmel_mxt_ts - handle reports from T47 Stylus object Jiada Wang
2019-10-29  7:19 ` [PATCH v4 10/48] Input: atmel_mxt_ts - implement support for T107 active stylus Jiada Wang
2019-10-29  7:19 ` [PATCH v4 11/48] Input: atmel_mxt_ts - add debug for T92 gesture and T93 touch seq msgs Jiada Wang
2019-10-31  1:36   ` kbuild test robot
2019-10-29  7:19 ` [PATCH v4 12/48] Input: atmel_mxt_ts - release touch state during suspend Jiada Wang
2019-10-29  7:19 ` [PATCH v4 13/48] Input: atmel_mxt_ts - add regulator control support Jiada Wang
2019-10-29  7:19 ` [PATCH v4 14/48] Input: atmel_mxt_ts - report failures in suspend/resume Jiada Wang
2019-10-29  7:19 ` Jiada Wang [this message]
2019-10-29  7:19 ` [PATCH v4 16/48] Input: atmel_mxt_ts - handle cfg filename via pdata/sysfs Jiada Wang
2019-10-29  7:19 ` [PATCH v4 17/48] Input: atmel_mxt_ts - allow input name to be specified in platform data Jiada Wang
2019-10-29  7:19 ` [PATCH v4 18/48] Input: atmel_mxt_ts - add config checksum attribute to sysfs Jiada Wang
2019-10-29  7:19 ` [PATCH v4 19/48] Input: atmel_mxt_ts - refactor firmware flash to extract context into struct Jiada Wang
2019-10-29  7:19 ` [PATCH v4 20/48] Input: atmel_mxt_ts - refactor code to enter bootloader into separate func Jiada Wang
2019-10-29  7:19 ` [PATCH v4 21/48] Input: atmel_mxt_ts - combine bootloader version query with probe Jiada Wang
2019-10-29  7:19 ` [PATCH v4 22/48] Input: atmel_mxt_ts - improve bootloader state machine handling Jiada Wang
2019-10-29  7:19 ` [PATCH v4 23/48] Input: atmel_mxt_ts - rename bl_completion to chg_completion Jiada Wang
2019-10-29  7:19 ` [PATCH v4 24/48] Input: atmel_mxt_ts - make bootloader interrupt driven Jiada Wang
2019-10-31  5:42   ` Nathan Chancellor
2019-10-29  7:19 ` [PATCH v4 25/48] Input: atmel_mxt_ts - delay enabling IRQ when not using regulators Jiada Wang
2019-10-29  7:19 ` [PATCH v4 26/48] Input: atmel_mxt_ts - implement I2C retries Jiada Wang
2019-10-29  7:19 ` [PATCH v4 27/48] Input: atmel_mxt_ts - orientation is not present in hover Jiada Wang
2019-10-29  7:19 ` [PATCH v4 28/48] Input: atmel_mxt_ts - implement debug output for messages Jiada Wang
2019-10-29  7:19 ` [PATCH v4 29/48] Input: atmel_mxt_ts - implement improved debug message interface Jiada Wang
2019-10-29  7:19 ` [PATCH v4 30/48] Input: atmel_mxt_ts - eliminate data->raw_info_block Jiada Wang
2019-10-29  7:19 ` [PATCH v4 31/48] Input: atmel_mxt_ts - Change call-points of mxt_free_* functions Jiada Wang
2019-10-29  7:19 ` [PATCH v4 32/48] Input: atmel_mxt_ts - rely on calculated_crc rather than file config_crc Jiada Wang
2019-10-29  7:19 ` [PATCH v4 33/48] input: atmel_mxt_ts: export GPIO reset line via sysfs Jiada Wang
2019-10-29  7:19 ` [PATCH v4 34/48] input: atmel_mxt_ts: Add Missing Delay for reset handling of Atmel touch panel controller in detachable displays Jiada Wang
2019-10-29  7:19 ` [PATCH v4 35/48] Input: atmel_mxt_ts: Add support for run self-test routine Jiada Wang
2019-10-29  7:19 ` [PATCH v4 36/48] Input: atmel_mxt_ts: Limit the max bytes transferred in an i2c transaction Jiada Wang
2019-10-29  7:19 ` [PATCH v4 37/48] Input: atmel_mxt_ts: return error from mxt_process_messages_until_invalid() Jiada Wang
2019-10-29  7:20 ` [PATCH v4 38/48] Input: Atmel: improve error handling in mxt_start() Jiada Wang
2019-10-29  7:20 ` [PATCH v4 39/48] Input: Atmel: improve error handling in mxt_initialize() Jiada Wang
2019-10-29  7:20 ` [PATCH v4 40/48] Input: Atmel: improve error handling in mxt_update_cfg() Jiada Wang
2019-10-29  7:20 ` [PATCH v4 41/48] Input: Atmel: Improve error handling in mxt_initialize_input_device() Jiada Wang
2019-10-29  7:20 ` [PATCH v4 42/48] Input: Atmel: handle ReportID "0x00" while processing T5 messages Jiada Wang
2019-10-29  7:20 ` [PATCH v4 43/48] Input: Atmel: use T44 object to process " Jiada Wang
2019-10-29  7:20 ` [PATCH v4 44/48] Input: atmel_mxt_ts: use gpiod_set_value_cansleep for reset pin Jiada Wang
2019-10-29  7:20 ` [PATCH v4 45/48] input: touchscreen: atmel_mxt_ts: Added sysfs entry for touchscreen status Jiada Wang
2019-10-29  7:20 ` [PATCH v4 46/48] input: atmel_mxt_ts: added sysfs interface to update atmel T38 data Jiada Wang
2019-10-29  7:20 ` [PATCH v4 47/48] Input: atmel_mxt_ts: Implement synchronization during various operation Jiada Wang
2019-10-29  7:20 ` [PATCH v4 48/48] 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=20191029072010.8492-16-jiada_wang@mentor.com \
    --to=jiada_wang@mentor.com \
    --cc=Andrew_Gabbasov@mentor.com \
    --cc=benjamin.tissoires@redhat.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=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).