linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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>
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 v11 51/56] Input: Atmel: use T44 object to process T5 messages
Date: Thu, 7 May 2020 22:56:51 -0700	[thread overview]
Message-ID: <20200508055656.96389-52-jiada_wang@mentor.com> (raw)
In-Reply-To: <20200508055656.96389-1-jiada_wang@mentor.com>

From: Deepak Das <deepak_das@mentor.com>

T44 object returns the count of valid T5 messages in the buffer. According
to atmel, this count should be the main criteria to read the number of T5
messages.

Following is the statement from atmel confirming the same :-
"For the readout of messages we recommend to stop after the last message
is read out from the buffer. One way to identify the amount of new messages
is to read T44. The other way is to monitor the /CHG line which indicates
independent of mode 0 or mode 1 if there are still data in the buffer.
0xFF indicates that there is no message pending anymore, but it is not
recommended to use this as the main criteria to control the
data transfer."

This commit modifies the logic to readout the T5 messages on the basis
of T44 object.

Signed-off-by: Deepak Das <deepak_das@mentor.com>
Signed-off-by: Sanjeev Chugh <sanjeev_chugh@mentor.com>
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 | 55 +++++++++++++++---------
 1 file changed, 35 insertions(+), 20 deletions(-)

diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 103881911acc..d134a8b9b3ca 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -1488,7 +1488,7 @@ static u8 mxt_max_msg_read_count(struct mxt_data *data, u8 max_T5_msg_count)
 	return min(T5_msg_count_limit, max_T5_msg_count);
 }
 
-static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
+static int mxt_process_messages_t44(struct mxt_data *data)
 {
 	struct device *dev = &data->client->dev;
 	int ret;
@@ -1501,7 +1501,7 @@ static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
 		data->T5_msg_size + 1, data->msg_buf);
 	if (ret) {
 		dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret);
-		return IRQ_NONE;
+		return ret;
 	}
 
 	T5_msg_count = data->msg_buf[0];
@@ -1511,7 +1511,7 @@ static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
 	 * Mode 0. It results in unnecessary I2C operations but it is benign.
 	 */
 	if (!T5_msg_count)
-		return IRQ_NONE;
+		return processed_valid;
 
 	if (T5_msg_count > data->max_reportid) {
 		dev_warn(dev, "T44 count %d exceeded max report id\n",
@@ -1523,12 +1523,14 @@ static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
 	ret = mxt_proc_message(data, data->msg_buf + 1);
 	if (ret < 0) {
 		dev_warn(dev, "Unexpected invalid message\n");
-		return IRQ_NONE;
+		return ret;
 	}
 
 	total_pending = T5_msg_count - 1;
-	if (!total_pending)
+	if (!total_pending) {
+		processed_valid = 1;
 		goto end;
+	}
 
 	/* Process remaining messages if necessary */
 	T5_msg_count = mxt_max_msg_read_count(data, total_pending);
@@ -1552,7 +1554,7 @@ static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
 		data->update_input = false;
 	}
 
-	return IRQ_HANDLED;
+	return processed_valid;
 }
 
 static int mxt_process_messages_until_invalid(struct mxt_data *data)
@@ -1582,7 +1584,7 @@ static int mxt_process_messages_until_invalid(struct mxt_data *data)
 	return -EBUSY;
 }
 
-static irqreturn_t mxt_process_messages(struct mxt_data *data)
+static int mxt_process_messages(struct mxt_data *data)
 {
 	int total_handled, num_handled;
 	u8 count = data->last_message_count;
@@ -1593,7 +1595,7 @@ static irqreturn_t mxt_process_messages(struct mxt_data *data)
 	/* include final invalid message */
 	total_handled = mxt_read_and_process_messages(data, count + 1);
 	if (total_handled < 0)
-		return IRQ_NONE;
+		return total_handled;
 	/* if there were invalid messages, then we are done */
 	else if (total_handled <= count)
 		goto update_count;
@@ -1602,7 +1604,7 @@ static irqreturn_t mxt_process_messages(struct mxt_data *data)
 	do {
 		num_handled = mxt_read_and_process_messages(data, 2);
 		if (num_handled < 0)
-			return IRQ_NONE;
+			return num_handled;
 
 		total_handled += num_handled;
 
@@ -1618,12 +1620,13 @@ static irqreturn_t mxt_process_messages(struct mxt_data *data)
 		data->update_input = false;
 	}
 
-	return IRQ_HANDLED;
+	return total_handled;
 }
 
 static irqreturn_t mxt_interrupt(int irq, void *dev_id)
 {
 	struct mxt_data *data = dev_id;
+	int ret;
 
 	if (data->in_bootloader) {
 		complete(&data->chg_completion);
@@ -1631,17 +1634,22 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id)
 		if (data->flash)
 			cancel_delayed_work_sync(&data->flash->work);
 
-		return IRQ_RETVAL(mxt_check_bootloader(data));
+		ret = mxt_check_bootloader(data);
+		return IRQ_RETVAL(ret);
 	}
 
 	if (!data->object_table)
 		return IRQ_HANDLED;
 
-	if (data->T44_address) {
-		return mxt_process_messages_t44(data);
-	} else {
-		return mxt_process_messages(data);
-	}
+	if (data->T44_address)
+		ret = mxt_process_messages_t44(data);
+	else
+		ret = mxt_process_messages(data);
+
+	if (ret <= 0)
+		return IRQ_NONE;
+	else
+		return IRQ_HANDLED;
 }
 
 static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
@@ -1763,8 +1771,11 @@ static int mxt_acquire_irq(struct mxt_data *data)
 	enable_irq(data->irq);
 
 	if (data->use_retrigen_workaround) {
-		error = mxt_process_messages_until_invalid(data);
-		if (error)
+		if (data->T44_address)
+			error = mxt_process_messages_t44(data);
+		else
+			error = mxt_process_messages_until_invalid(data);
+		if (error < 0)
 			return error;
 	}
 
@@ -4019,8 +4030,12 @@ static int mxt_start(struct mxt_data *data)
 		 * Discard any touch messages still in message buffer
 		 * from before chip went to sleep
 		 */
-		ret = mxt_process_messages_until_invalid(data);
-		if (ret)
+
+		if (data->T44_address)
+			ret = mxt_process_messages_t44(data);
+		else
+			ret = mxt_process_messages_until_invalid(data);
+		if (ret < 0)
 			break;
 
 		ret = mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
-- 
2.17.1


  parent reply	other threads:[~2020-05-08  6:00 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-08  5:56 [PATCH v11 00/56] atmel_mxt_ts misc Jiada Wang
2020-05-08  5:56 ` [PATCH v11 01/56] Input: introduce input_mt_report_slot_inactive Jiada Wang
2020-05-08  5:56 ` [PATCH v11 02/56] Input: atmel_mxt_ts - rework sysfs init/remove Jiada Wang
2020-05-08  5:56 ` [PATCH v11 03/56] Input: atmel_mxt_ts - only read messages in mxt_acquire_irq() when necessary Jiada Wang
2020-05-08  5:56 ` [PATCH v11 04/56] Input: atmel_mxt_ts - split large i2c transfers into blocks Jiada Wang
2020-05-11 22:19   ` Dmitry Torokhov
2020-06-30 14:33     ` Wang, Jiada
2020-05-08  5:56 ` [PATCH v11 05/56] Input: atmel_mxt_ts - output status from T48 Noise Supression Jiada Wang
2020-05-11 22:23   ` Dmitry Torokhov
2020-06-30 14:34     ` Wang, Jiada
2020-05-08  5:56 ` [PATCH v11 06/56] Input: atmel_mxt_ts - output status from T42 Touch Suppression Jiada Wang
2020-05-08  5:56 ` [PATCH v11 07/56] Input: atmel_mxt_ts - implement T9 vector/orientation support Jiada Wang
2020-05-11 22:53   ` Dmitry Torokhov
2020-06-30 14:35     ` Wang, Jiada
2020-05-08  5:56 ` [PATCH v11 08/56] Input: atmel_mxt_ts - implement T15 Key Array support Jiada Wang
2020-05-12  2:35   ` Dmitry Torokhov
2020-05-08  5:56 ` [PATCH v11 09/56] Input: atmel_mxt_ts - handle reports from T47 Stylus object Jiada Wang
2020-05-08  5:56 ` [PATCH v11 10/56] Input: atmel_mxt_ts - implement support for T107 active stylus Jiada Wang
2020-05-08  5:56 ` [PATCH v11 11/56] Input: atmel_mxt_ts - add debug for T92 gesture and T93 touch seq msgs Jiada Wang
2020-05-08  5:56 ` [PATCH v11 12/56] Input: atmel_mxt_ts - release touch state during suspend Jiada Wang
2020-05-08  5:56 ` [PATCH v11 13/56] dt-bindings: input: atmel: add suspend mode support Jiada Wang
2020-05-08  5:56 ` [PATCH v11 14/56] Input: atmel_mxt_ts - add regulator control support Jiada Wang
2020-05-08  5:56 ` [PATCH v11 15/56] Input: atmel_mxt_ts - report failures in suspend/resume Jiada Wang
2020-05-08  5:56 ` [PATCH v11 16/56] Input: atmel_mxt_ts - allow specification of firmware file name Jiada Wang
2020-05-08  5:56 ` [PATCH v11 17/56] Input: atmel_mxt_ts: Rename mxt_fw_version_show to fw_version_show Jiada Wang
2020-05-08  5:56 ` [PATCH v11 18/56] Input: atmel_mxt_ts: Rename mxt_hw_version_show to hw_version_show Jiada Wang
2020-05-08  5:56 ` [PATCH v11 19/56] Input: atmel_mxt_ts: rename mxt_update_fw_store to update_fw_store Jiada Wang
2020-05-08  5:56 ` [PATCH v11 20/56] Input: atmel_mxt_ts - handle cfg filename via pdata/sysfs Jiada Wang
2020-05-08  5:56 ` [PATCH v11 21/56] Input: atmel_mxt_ts - check data->input_dev is not null in mxt_input_sync() Jiada Wang
2020-05-08  5:56 ` [PATCH v11 22/56] dt-bindings: input: atmel: provide name of configuration file Jiada Wang
2020-05-08  5:56 ` [PATCH v11 23/56] Input: atmel_mxt_ts - allow input name to be specified in platform data Jiada Wang
2020-05-08  5:56 ` [PATCH v11 24/56] dt-bindings: input: atmel: support to specify input name Jiada Wang
2020-05-08  5:56 ` [PATCH v11 25/56] Input: atmel_mxt_ts - add config checksum attribute to sysfs Jiada Wang
2020-05-08  5:56 ` [PATCH v11 26/56] Input: atmel_mxt_ts - rename mxt_object_show to object_show Jiada Wang
2020-05-08  5:56 ` [PATCH v11 27/56] Input: atmel_mxt_ts - refactor firmware flash to extract context into struct Jiada Wang
2020-05-08  5:56 ` [PATCH v11 28/56] Input: atmel_mxt_ts - refactor code to enter bootloader into separate func Jiada Wang
2020-05-08  5:56 ` [PATCH v11 29/56] Input: atmel_mxt_ts - combine bootloader version query with probe Jiada Wang
2020-05-08  5:56 ` [PATCH v11 30/56] Input: atmel_mxt_ts - improve bootloader state machine handling Jiada Wang
2020-05-08  5:56 ` [PATCH v11 31/56] Input: atmel_mxt_ts - rename bl_completion to chg_completion Jiada Wang
2020-05-08  5:56 ` [PATCH v11 32/56] Input: atmel_mxt_ts - make bootloader interrupt driven Jiada Wang
2020-05-08  5:56 ` [PATCH v11 33/56] Input: atmel_mxt_ts - delay enabling IRQ when not using regulators Jiada Wang
2020-05-11  1:05   ` Dmitry Osipenko
2020-05-11  2:05     ` Wang, Jiada
2020-05-11 23:13       ` Dmitry Osipenko
2020-05-13  5:07         ` Wang, Jiada
2020-05-14  4:53           ` Dmitry Osipenko
2020-05-17  3:32             ` Wang, Jiada
2020-05-17 13:08               ` Dmitry Osipenko
2020-05-17 13:26                 ` Dmitry Osipenko
2020-05-25 14:51                   ` Wang, Jiada
2020-05-26 17:36                     ` Dmitry Osipenko
2020-05-08  5:56 ` [PATCH v11 34/56] Input: atmel_mxt_ts - implement I2C retries Jiada Wang
2020-05-08  5:56 ` [PATCH v11 35/56] Input: atmel_mxt_ts - orientation is not present in hover Jiada Wang
2020-05-08  5:56 ` [PATCH v11 36/56] Input: atmel_mxt_ts - implement debug output for messages Jiada Wang
2020-05-08  5:56 ` [PATCH v11 37/56] Input: atmel_mxt_ts - implement improved debug message interface Jiada Wang
2020-05-08  5:56 ` [PATCH v11 38/56] Input: atmel_mxt_ts - eliminate data->raw_info_block Jiada Wang
2020-05-08  5:56 ` [PATCH v11 39/56] Input: atmel_mxt_ts - Change call-points of mxt_free_* functions Jiada Wang
2020-05-08  5:56 ` [PATCH v11 40/56] Input: atmel_mxt_ts - rely on calculated_crc rather than file config_crc Jiada Wang
2020-05-08  5:56 ` [PATCH v11 41/56] input: atmel_mxt_ts: export GPIO reset line via sysfs Jiada Wang
2020-05-08  5:56 ` [PATCH v11 42/56] input: atmel_mxt_ts: Add Missing Delay for reset handling of Atmel touch panel controller in detachable displays Jiada Wang
2020-05-08  5:56 ` [PATCH v11 43/56] Input: atmel_mxt_ts: Add support for run self-test routine Jiada Wang
2020-05-08  5:56 ` [PATCH v11 44/56] Input: atmel_mxt_ts: Limit the max bytes transferred in an i2c transaction Jiada Wang
2020-05-08  5:56 ` [PATCH v11 45/56] Input: atmel_mxt_ts: return error from mxt_process_messages_until_invalid() Jiada Wang
2020-05-08  5:56 ` [PATCH v11 46/56] Input: Atmel: improve error handling in mxt_start() Jiada Wang
2020-05-08  5:56 ` [PATCH v11 47/56] Input: Atmel: improve error handling in mxt_initialize() Jiada Wang
2020-05-08  5:56 ` [PATCH v11 48/56] Input: Atmel: improve error handling in mxt_update_cfg() Jiada Wang
2020-05-08  5:56 ` [PATCH v11 49/56] Input: Atmel: Improve error handling in mxt_initialize_input_device() Jiada Wang
2020-05-08  5:56 ` [PATCH v11 50/56] Input: Atmel: handle ReportID "0x00" while processing T5 messages Jiada Wang
2020-05-08  5:56 ` Jiada Wang [this message]
2020-05-08  5:56 ` [PATCH v11 52/56] Input: atmel_mxt_ts: use gpiod_set_value_cansleep for reset pin Jiada Wang
2020-05-08  5:56 ` [PATCH v11 53/56] input: touchscreen: atmel_mxt_ts: Added sysfs entry for touchscreen status Jiada Wang
2020-05-08  5:56 ` [PATCH v11 54/56] input: atmel_mxt_ts: added sysfs interface to update atmel T38 data Jiada Wang
2020-05-10 12:03   ` kbuild test robot
2020-05-08  5:56 ` [PATCH v11 55/56] input: atmel_mxt_ts: don't disable IRQ before remove of mxt_fw_attr_group Jiada Wang
2020-05-08  5:56 ` [PATCH v11 56/56] Input: atmel_mxt_ts - Fix compilation warning Jiada Wang
2020-05-24 21:28 ` [PATCH v11 00/56] atmel_mxt_ts misc Pavel Machek
2020-05-27  6:43 ` Dmitry Torokhov
2020-06-25 13:50   ` Wang, Jiada
2020-07-08 13:05     ` Wang, Jiada
2020-07-17  7:21       ` Wang, Jiada

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=20200508055656.96389-52-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 \
    /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).