Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1465046

[PATCH 11/11] Input: synaptics-rmi4 - smbus: on resume, try 3 times if init fails

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

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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