Re: [PATCH V4] HID: HID-rmi - ignore to rmi_hid_read_block after system resumes.
flat view
From: Hans de Goede <hidden>
Date: 2022-08-15 11:12:51
Also in:
lkml
Hi, On 8/15/22 12:26, margeyang wrote:
From: Marge Yang <redacted> The interrupt GPIO will be pulled down once after RMI driver reads this command(Report ID:0x0A). It will cause "Dark resume test fail" for chromebook device. Hence, TP driver will ignore rmi_hid_read_block function once after system resumes. Signed-off-by: Marge Yang<redacted>
Thanks, patch looks good to me: Reviewed-by: Hans de Goede <redacted> Regards, Hans
quoted hunk ↗ jump to hunk
--- drivers/hid/hid-rmi.c | 14 +++++++++++++- include/linux/rmi.h | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-)diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c index 311eee599ce9..45eacb0b8dae 100644 --- a/drivers/hid/hid-rmi.c +++ b/drivers/hid/hid-rmi.c@@ -190,7 +190,7 @@ static int rmi_hid_read_block(struct rmi_transport_dev *xport, u16 addr, { struct rmi_data *data = container_of(xport, struct rmi_data, xport); struct hid_device *hdev = data->hdev; - int ret; + int ret = 0; int bytes_read; int bytes_needed; int retries;@@ -204,6 +204,13 @@ static int rmi_hid_read_block(struct rmi_transport_dev *xport, u16 addr, goto exit; } + if (xport->ignoreonce == 1) { + dev_err(&hdev->dev, + "ignoreonce (%d)\n", + xport->ignoreonce); + xport->ignoreonce = 0; + goto exit; + } for (retries = 5; retries > 0; retries--) { data->writeReport[0] = RMI_READ_ADDR_REPORT_ID; data->writeReport[1] = 0; /* old 1 byte read count */@@ -469,7 +476,12 @@ static int rmi_post_resume(struct hid_device *hdev) if (ret) return ret; + // Avoid to read rmi_hid_read_block once after system resumes. + // The interrupt will be pulled down + // after RMI Read command(Report ID:0x0A). + data->xport.ignoreonce = 1; ret = rmi_reset_attn_mode(hdev); + data->xport.ignoreonce = 0; if (ret) goto out;diff --git a/include/linux/rmi.h b/include/linux/rmi.h index ab7eea01ab42..24f63ad00970 100644 --- a/include/linux/rmi.h +++ b/include/linux/rmi.h@@ -270,6 +270,8 @@ struct rmi_transport_dev { struct rmi_device_platform_data pdata; struct input_dev *input; + + int ignoreonce; }; /**