diff options
author | Duson Lin <dusonlin@emc.com.tw> | 2015-03-07 23:57:54 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2015-03-08 00:11:51 -0500 |
commit | b3beed7fe83b077291aa32d1f3006c8480f6344b (patch) | |
tree | 6d45d2181ab82076b92e770243a2d68252688ae1 /drivers/input/mouse | |
parent | ceb5b6c8bee4841abac9e010c6069934d0f7c996 (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.c | 14 | ||||
-rw-r--r-- | drivers/input/mouse/elan_i2c_i2c.c | 10 |
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 | ||
1098 | err: | ||
1094 | enable_irq(data->client->irq); | 1099 | enable_irq(data->client->irq); |
1095 | 1100 | return error; | |
1096 | return 0; | ||
1097 | } | 1101 | } |
1098 | 1102 | ||
1099 | static SIMPLE_DEV_PM_OPS(elan_pm_ops, elan_suspend, elan_resume); | 1103 | static 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 | ||
123 | static int elan_i2c_initialize(struct i2c_client *client) | 131 | static int elan_i2c_initialize(struct i2c_client *client) |