From: Jiada Wang <jiada_wang@mentor.com>
To: <jikos@kernel.org>, <benjamin.tissoires@redhat.com>,
<rydberg@bitmath.org>, <dmitry.torokhov@gmail.com>,
<nick@shmanahar.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 v6 12/48] Input: atmel_mxt_ts - release touch state during suspend
Date: Fri, 22 Nov 2019 17:23:26 +0900 [thread overview]
Message-ID: <20191122082402.18173-13-jiada_wang@mentor.com> (raw)
In-Reply-To: <20191122082402.18173-1-jiada_wang@mentor.com>
From: Nick Dyer <nick.dyer@itdev.co.uk>
If fingers are down as the MXT chip goes into suspend it does not send a
lift message. In addition, it may not complete its final measurement cycle
immediately, which means touch messages may be received by the interrupt
handler after mxt_stop() has completed.
So:
- disable irq during suspend
- flush any messages created after suspend
- tell app layer that slots were released at suspend
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 26794433086dbc7dea18d2f6a1c8d61ab25bcfda)
[gdavis: Resolve forward port conflicts due to applying upstream
commit 96a938aa214e ("Input: atmel_mxt_ts - remove platform
data support").]
Signed-off-by: George G. Davis <george_davis@mentor.com>
[gdavis: Squash fix from Dirk Behme:
- Input: atmel_mxt_ts - remove superfluous data->suspended]
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
Notes:
- Squash fix from Dirk Behme:
+ Input: atmel_mxt_ts - remove superfluous data->suspended
data->suspended is already set to false in mxt_load_fw(), so it's not
needed here.
Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
---
drivers/input/touchscreen/atmel_mxt_ts.c | 52 ++++++++++++++++++++++--
1 file changed, 49 insertions(+), 3 deletions(-)
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 1498342c3d98..cc4f0b5a0ae6 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -372,6 +372,9 @@ struct mxt_data {
unsigned int t19_num_keys;
enum mxt_suspend_mode suspend_mode;
+
+ /* Indicates whether device is in suspend */
+ bool suspended;
};
struct mxt_vb2_buffer {
@@ -1151,10 +1154,10 @@ static int mxt_proc_message(struct mxt_data *data, u8 *message)
mxt_proc_t42_messages(data, message);
} else if (report_id == data->T48_reportid) {
mxt_proc_t48_messages(data, message);
- } else if (!data->input_dev) {
+ } else if (!data->input_dev || data->suspended) {
/*
- * Do not report events if input device
- * is not yet registered.
+ * Do not report events if input device is not
+ * yet registered or returning from suspend
*/
mxt_dump_message(data, message);
} else if (report_id >= data->T9_reportid_min &&
@@ -3135,6 +3138,11 @@ static int mxt_load_fw(struct device *dev, const char *fn)
if (ret)
goto release_firmware;
+ if (data->suspended) {
+ enable_irq(data->irq);
+ data->suspended = false;
+ }
+
if (!data->in_bootloader) {
/* Change to the bootloader mode */
data->in_bootloader = true;
@@ -3306,8 +3314,27 @@ static void mxt_sysfs_remove(struct mxt_data *data)
sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
}
+static void mxt_reset_slots(struct mxt_data *data)
+{
+ struct input_dev *input_dev = data->input_dev;
+ int id;
+
+ if (!input_dev)
+ return;
+
+ for (id = 0; id < data->num_touchids; id++) {
+ input_mt_slot(input_dev, id);
+ input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
+ }
+
+ mxt_input_sync(data);
+}
+
static void mxt_start(struct mxt_data *data)
{
+ if (!data->suspended || data->in_bootloader)
+ return;
+
switch (data->suspend_mode) {
case MXT_SUSPEND_T9_CTRL:
mxt_soft_reset(data);
@@ -3320,16 +3347,29 @@ static void mxt_start(struct mxt_data *data)
case MXT_SUSPEND_DEEP_SLEEP:
default:
+ /*
+ * Discard any touch messages still in message buffer
+ * from before chip went to sleep
+ */
+ mxt_process_messages_until_invalid(data);
+
mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
/* Recalibrate since chip has been in deep sleep */
mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false);
+
+ mxt_acquire_irq(data);
break;
}
+
+ data->suspended = false;
}
static void mxt_stop(struct mxt_data *data)
{
+ if (data->suspended || data->in_bootloader)
+ return;
+
switch (data->suspend_mode) {
case MXT_SUSPEND_T9_CTRL:
/* Touch disable */
@@ -3339,9 +3379,15 @@ static void mxt_stop(struct mxt_data *data)
case MXT_SUSPEND_DEEP_SLEEP:
default:
+ disable_irq(data->irq);
+
mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP);
+
+ mxt_reset_slots(data);
break;
}
+
+ data->suspended = true;
}
static int mxt_input_open(struct input_dev *dev)
--
2.17.1
next prev parent reply other threads:[~2019-11-22 8:24 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-22 8:23 [PATCH v6 00/48] atmel_mxt_ts misc Jiada Wang
2019-11-22 8:23 ` [PATCH v6 01/48] Input: introduce input_mt_report_slot_inactive Jiada Wang
2019-11-22 8:23 ` [PATCH v6 02/48] Input: atmel_mxt_ts - rework sysfs init/remove Jiada Wang
2019-11-22 8:23 ` [PATCH v6 03/48] Input: atmel_mxt_ts - only read messages in mxt_acquire_irq() when necessary Jiada Wang
2019-11-22 8:23 ` [PATCH v6 04/48] Input: atmel_mxt_ts - split large i2c transfers into blocks Jiada Wang
2019-11-22 8:23 ` [PATCH v6 05/48] Input: atmel_mxt_ts - output status from T48 Noise Supression Jiada Wang
2019-11-22 8:23 ` [PATCH v6 06/48] Input: atmel_mxt_ts - output status from T42 Touch Suppression Jiada Wang
2019-11-22 8:23 ` [PATCH v6 07/48] Input: atmel_mxt_ts - implement T9 vector/orientation support Jiada Wang
2019-11-22 8:23 ` [PATCH v6 08/48] Input: atmel_mxt_ts - implement T15 Key Array support Jiada Wang
2019-11-22 8:23 ` [PATCH v6 09/48] Input: atmel_mxt_ts - handle reports from T47 Stylus object Jiada Wang
2019-11-22 8:23 ` [PATCH v6 10/48] Input: atmel_mxt_ts - implement support for T107 active stylus Jiada Wang
2019-11-22 8:23 ` [PATCH v6 11/48] Input: atmel_mxt_ts - add debug for T92 gesture and T93 touch seq msgs Jiada Wang
2019-11-22 8:23 ` Jiada Wang [this message]
2019-11-22 8:23 ` [PATCH v6 13/48] Input: atmel_mxt_ts - add regulator control support Jiada Wang
2019-11-22 8:23 ` [PATCH v6 14/48] Input: atmel_mxt_ts - report failures in suspend/resume Jiada Wang
2019-11-22 8:23 ` [PATCH v6 15/48] Input: atmel_mxt_ts - allow specification of firmware file name Jiada Wang
2019-11-22 8:23 ` [PATCH v6 16/48] Input: atmel_mxt_ts - handle cfg filename via pdata/sysfs Jiada Wang
2019-11-22 8:23 ` [PATCH v6 17/48] Input: atmel_mxt_ts - allow input name to be specified in platform data Jiada Wang
2019-11-22 8:23 ` [PATCH v6 18/48] Input: atmel_mxt_ts - add config checksum attribute to sysfs Jiada Wang
2019-11-22 8:23 ` [PATCH v6 19/48] Input: atmel_mxt_ts - refactor firmware flash to extract context into struct Jiada Wang
2019-11-22 8:23 ` [PATCH v6 20/48] Input: atmel_mxt_ts - refactor code to enter bootloader into separate func Jiada Wang
2019-11-22 8:23 ` [PATCH v6 21/48] Input: atmel_mxt_ts - combine bootloader version query with probe Jiada Wang
2019-11-22 8:23 ` [PATCH v6 22/48] Input: atmel_mxt_ts - improve bootloader state machine handling Jiada Wang
2019-11-22 8:23 ` [PATCH v6 23/48] Input: atmel_mxt_ts - rename bl_completion to chg_completion Jiada Wang
2019-11-22 8:23 ` [PATCH v6 24/48] Input: atmel_mxt_ts - make bootloader interrupt driven Jiada Wang
2020-01-27 17:41 ` Bartosz Szczepanek
2020-01-29 11:52 ` Wang, Jiada (ESD)
2020-02-12 8:39 ` Wang, Jiada
2019-11-22 8:23 ` [PATCH v6 25/48] Input: atmel_mxt_ts - delay enabling IRQ when not using regulators Jiada Wang
2019-11-22 8:23 ` [PATCH v6 26/48] Input: atmel_mxt_ts - implement I2C retries Jiada Wang
2019-11-22 8:23 ` [PATCH v6 27/48] Input: atmel_mxt_ts - orientation is not present in hover Jiada Wang
2019-11-22 8:23 ` [PATCH v6 28/48] Input: atmel_mxt_ts - implement debug output for messages Jiada Wang
2019-11-22 8:23 ` [PATCH v6 29/48] Input: atmel_mxt_ts - implement improved debug message interface Jiada Wang
2019-11-22 8:23 ` [PATCH v6 30/48] Input: atmel_mxt_ts - eliminate data->raw_info_block Jiada Wang
2019-11-22 8:23 ` [PATCH v6 31/48] Input: atmel_mxt_ts - Change call-points of mxt_free_* functions Jiada Wang
2019-11-22 8:23 ` [PATCH v6 32/48] Input: atmel_mxt_ts - rely on calculated_crc rather than file config_crc Jiada Wang
2019-11-22 8:23 ` [PATCH v6 33/48] input: atmel_mxt_ts: export GPIO reset line via sysfs Jiada Wang
2019-11-22 8:23 ` [PATCH v6 34/48] input: atmel_mxt_ts: Add Missing Delay for reset handling of Atmel touch panel controller in detachable displays Jiada Wang
2019-11-22 8:23 ` [PATCH v6 35/48] Input: atmel_mxt_ts: Add support for run self-test routine Jiada Wang
2019-11-22 8:23 ` [PATCH v6 36/48] Input: atmel_mxt_ts: Limit the max bytes transferred in an i2c transaction Jiada Wang
2019-11-22 8:23 ` [PATCH v6 37/48] Input: atmel_mxt_ts: return error from mxt_process_messages_until_invalid() Jiada Wang
2019-11-22 8:23 ` [PATCH v6 38/48] Input: Atmel: improve error handling in mxt_start() Jiada Wang
2019-11-22 8:23 ` [PATCH v6 39/48] Input: Atmel: improve error handling in mxt_initialize() Jiada Wang
2019-11-22 8:23 ` [PATCH v6 40/48] Input: Atmel: improve error handling in mxt_update_cfg() Jiada Wang
2019-11-22 8:23 ` [PATCH v6 41/48] Input: Atmel: Improve error handling in mxt_initialize_input_device() Jiada Wang
2019-11-22 8:23 ` [PATCH v6 42/48] Input: Atmel: handle ReportID "0x00" while processing T5 messages Jiada Wang
2019-11-22 8:23 ` [PATCH v6 43/48] Input: Atmel: use T44 object to process " Jiada Wang
2019-11-22 8:23 ` [PATCH v6 44/48] Input: atmel_mxt_ts: use gpiod_set_value_cansleep for reset pin Jiada Wang
2019-11-22 8:23 ` [PATCH v6 45/48] input: touchscreen: atmel_mxt_ts: Added sysfs entry for touchscreen status Jiada Wang
2019-11-22 8:24 ` [PATCH v6 46/48] input: atmel_mxt_ts: added sysfs interface to update atmel T38 data Jiada Wang
2019-11-22 8:24 ` [PATCH v6 47/48] Input: atmel_mxt_ts: Implement synchronization during various operation Jiada Wang
2019-11-22 8:24 ` [PATCH v6 48/48] Input: atmel_mxt_ts - Fix compilation warning Jiada Wang
2020-01-10 12:04 ` [PATCH v6 00/48] atmel_mxt_ts misc 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=20191122082402.18173-13-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=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).