Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1465046
| From | Benjamin Tissoires <benjamin.tissoires@redhat.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 11/11] Input: synaptics-rmi4 - smbus: on resume, try 3 times if init fails |
| Date | 2016-08-18 11:40 +0200 |
| Message-ID | <s7rXP-6j1-7@gated-at.bofh.it> (permalink) |
| References | <s7rO9-6fy-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
In some rare cases, we can't retrieve the SMBus version and so we fail
binding the touchpad back. Instead of leaving a touchpad dead, try again
to reinitialize it.
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
---
drivers/input/rmi4/rmi_smbus.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/drivers/input/rmi4/rmi_smbus.c b/drivers/input/rmi4/rmi_smbus.c
index 023dbd5..a8e4af6 100644
--- a/drivers/input/rmi4/rmi_smbus.c
+++ b/drivers/input/rmi4/rmi_smbus.c
@@ -265,10 +265,29 @@ static int rmi_smb_reset(struct rmi_transport_dev *xport, u16 reset_addr)
{
struct rmi_smb_xport *rmi_smb =
container_of(xport, struct rmi_smb_xport, xport);
+ struct i2c_client *client = rmi_smb->client;
+ struct rmi_device_platform_data *pdata;
+ int tries, ret;
rmi_smb_clear_state(rmi_smb);
- return rmi_smb_enable_smbus_mode(rmi_smb);
+ for (tries = 3; tries > 0; tries--) {
+ ret = rmi_smb_enable_smbus_mode(rmi_smb);
+ if (!ret)
+ break;
+
+ /* we failed enabling SMBus, try again later */
+ msleep(500);
+ }
+
+ if (ret < 0) {
+ dev_warn(&client->dev,
+ "failed to enable SMBus mode, giving up.\n");
+ pdata = dev_get_platdata(&rmi_smb->client->dev);
+ rmi_transport_enable(pdata, false);
+ }
+
+ return ret;
}
static const struct rmi_transport_ops rmi_smb_ops = {
--
2.5.5
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/11] Synaptics RMI4 over SMBus Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:30 +0200
[PATCH 02/11] Input: serio - store the pt_buttons in the struct serio directly Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:30 +0200
[PATCH 01/11] Input: synaptics-rmi4 - add SMBus support Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:30 +0200
[PATCH 06/11] Input: synaptics-rmi4 - Add rmi_find_function() Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:40 +0200
[PATCH 05/11] Input: synaptics-rmi4 - f03: grab data passed by transport device Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:40 +0200
[PATCH 11/11] Input: synaptics-rmi4 - smbus: on resume, try 3 times if init fails Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:40 +0200
[PATCH 08/11] Input: synaptics - allocate a Synaptics Intertouch device Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:40 +0200
[PATCH 09/11] Input: synaptics-rmi4 - add rmi_platform Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:40 +0200
Re: [PATCH 09/11] Input: synaptics-rmi4 - add rmi_platform kbuild test robot <lkp@intel.com> - 2016-08-24 04:50 +0200
[PATCH] Input: fix semicolon.cocci warnings kbuild test robot <lkp@intel.com> - 2016-08-24 04:50 +0200
[PATCH 04/11] Input: synaptics-rmi4 - add support for F03 Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:50 +0200
[PATCH 03/11] Input: synaptics-rmi4 - have only one struct platform data Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:50 +0200
[PATCH 10/11] Input: synaptics-rmi4 - smbus: call psmouse_deactivate before binding/resume Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:50 +0200
[PATCH 07/11] Input: synaptics-rmi4 - f30/f03: Forward mechanical buttons on buttonpads to PS/2 guest Benjamin Tissoires <benjamin.tissoires@redhat.com> - 2016-08-18 11:50 +0200
csiph-web