aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/mouse
diff options
context:
space:
mode:
authorDuson Lin <dusonlin@emc.com.tw>2015-03-07 23:57:54 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2015-03-08 00:11:51 -0500
commitb3beed7fe83b077291aa32d1f3006c8480f6344b (patch)
tree6d45d2181ab82076b92e770243a2d68252688ae1 /drivers/input/mouse
parentceb5b6c8bee4841abac9e010c6069934d0f7c996 (diff)
Input: elan_i2c - return error code when resume fails
In order to better diagnose potential issues let's return error to the upper layers when resuming the device fails and also add a few diagnostic messages. Signed-off-by: Duson Lin <dusonlin@emc.com.tw> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/mouse')
-rw-r--r--drivers/input/mouse/elan_i2c_core.c14
-rw-r--r--drivers/input/mouse/elan_i2c_i2c.c10
2 files changed, 18 insertions, 6 deletions
diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
index 7ce8bfe22d7e..b7535385fcdd 100644
--- a/drivers/input/mouse/elan_i2c_core.c
+++ b/drivers/input/mouse/elan_i2c_core.c
@@ -99,7 +99,7 @@ static int elan_enable_power(struct elan_tp_data *data)
99 error = regulator_enable(data->vcc); 99 error = regulator_enable(data->vcc);
100 if (error) { 100 if (error) {
101 dev_err(&data->client->dev, 101 dev_err(&data->client->dev,
102 "Failed to enable regulator: %d\n", error); 102 "failed to enable regulator: %d\n", error);
103 return error; 103 return error;
104 } 104 }
105 105
@@ -111,6 +111,7 @@ static int elan_enable_power(struct elan_tp_data *data)
111 msleep(30); 111 msleep(30);
112 } while (--repeat > 0); 112 } while (--repeat > 0);
113 113
114 dev_err(&data->client->dev, "failed to enable power: %d\n", error);
114 return error; 115 return error;
115} 116}
116 117
@@ -125,7 +126,7 @@ static int elan_disable_power(struct elan_tp_data *data)
125 error = regulator_disable(data->vcc); 126 error = regulator_disable(data->vcc);
126 if (error) { 127 if (error) {
127 dev_err(&data->client->dev, 128 dev_err(&data->client->dev,
128 "Failed to disable regulator: %d\n", 129 "failed to disable regulator: %d\n",
129 error); 130 error);
130 /* Attempt to power the chip back up */ 131 /* Attempt to power the chip back up */
131 data->ops->power_control(data->client, true); 132 data->ops->power_control(data->client, true);
@@ -138,6 +139,7 @@ static int elan_disable_power(struct elan_tp_data *data)
138 msleep(30); 139 msleep(30);
139 } while (--repeat > 0); 140 } while (--repeat > 0);
140 141
142 dev_err(&data->client->dev, "failed to disable power: %d\n", error);
141 return error; 143 return error;
142} 144}
143 145
@@ -1084,16 +1086,18 @@ static int __maybe_unused elan_resume(struct device *dev)
1084 } 1086 }
1085 1087
1086 error = elan_enable_power(data); 1088 error = elan_enable_power(data);
1087 if (error) 1089 if (error) {
1088 dev_err(dev, "power up when resuming failed: %d\n", error); 1090 dev_err(dev, "power up when resuming failed: %d\n", error);
1091 goto err;
1092 }
1089 1093
1090 error = elan_initialize(data); 1094 error = elan_initialize(data);
1091 if (error) 1095 if (error)
1092 dev_err(dev, "initialize when resuming failed: %d\n", error); 1096 dev_err(dev, "initialize when resuming failed: %d\n", error);
1093 1097
1098err:
1094 enable_irq(data->client->irq); 1099 enable_irq(data->client->irq);
1095 1100 return error;
1096 return 0;
1097} 1101}
1098 1102
1099static SIMPLE_DEV_PM_OPS(elan_pm_ops, elan_suspend, elan_resume); 1103static SIMPLE_DEV_PM_OPS(elan_pm_ops, elan_suspend, elan_resume);
diff --git a/drivers/input/mouse/elan_i2c_i2c.c b/drivers/input/mouse/elan_i2c_i2c.c
index 029941f861af..6cf0def6d35e 100644
--- a/drivers/input/mouse/elan_i2c_i2c.c
+++ b/drivers/input/mouse/elan_i2c_i2c.c
@@ -117,7 +117,15 @@ static int elan_i2c_write_cmd(struct i2c_client *client, u16 reg, u16 cmd)
117 int ret; 117 int ret;
118 118
119 ret = i2c_transfer(client->adapter, &msg, 1); 119 ret = i2c_transfer(client->adapter, &msg, 1);
120 return ret == 1 ? 0 : (ret < 0 ? ret : -EIO); 120 if (ret != 1) {
121 if (ret >= 0)
122 ret = -EIO;
123 dev_err(&client->dev, "writing cmd (0x%04x) failed: %d\n",
124 reg, ret);
125 return ret;
126 }
127
128 return 0;
121} 129}
122 130
123static int elan_i2c_initialize(struct i2c_client *client) 131static int elan_i2c_initialize(struct i2c_client *client)