aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2015-04-07 11:46:23 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2015-04-07 11:46:23 -0400
commit5f63e885ac32429fc1340f5a61e1484022efc773 (patch)
treef9a21a6902e1857274775b96d561d8be17287860 /drivers/input
parentb6d2d3289f84e9c7449dff04fb959e29207acd80 (diff)
parentf22e6e847115abc3a0e2ad7bb18d243d42275af1 (diff)
Merge tag 'v4.0-rc7' into next
Sync up with Linux 4.0-rc7 to bring in ALPS changes.
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/mouse/alps.c48
-rw-r--r--drivers/input/mouse/synaptics.c7
2 files changed, 35 insertions, 20 deletions
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 1bd15ebc01f2..27bcdbc950c9 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -1154,10 +1154,28 @@ out:
1154 mutex_unlock(&alps_mutex); 1154 mutex_unlock(&alps_mutex);
1155} 1155}
1156 1156
1157static void alps_report_bare_ps2_packet(struct input_dev *dev, 1157static void alps_report_bare_ps2_packet(struct psmouse *psmouse,
1158 unsigned char packet[], 1158 unsigned char packet[],
1159 bool report_buttons) 1159 bool report_buttons)
1160{ 1160{
1161 struct alps_data *priv = psmouse->private;
1162 struct input_dev *dev;
1163
1164 /* Figure out which device to use to report the bare packet */
1165 if (priv->proto_version == ALPS_PROTO_V2 &&
1166 (priv->flags & ALPS_DUALPOINT)) {
1167 /* On V2 devices the DualPoint Stick reports bare packets */
1168 dev = priv->dev2;
1169 } else if (unlikely(IS_ERR_OR_NULL(priv->dev3))) {
1170 /* Register dev3 mouse if we received PS/2 packet first time */
1171 if (!IS_ERR(priv->dev3))
1172 psmouse_queue_work(psmouse, &priv->dev3_register_work,
1173 0);
1174 return;
1175 } else {
1176 dev = priv->dev3;
1177 }
1178
1161 if (report_buttons) 1179 if (report_buttons)
1162 alps_report_buttons(dev, NULL, 1180 alps_report_buttons(dev, NULL,
1163 packet[0] & 1, packet[0] & 2, packet[0] & 4); 1181 packet[0] & 1, packet[0] & 2, packet[0] & 4);
@@ -1232,8 +1250,8 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
1232 * de-synchronization. 1250 * de-synchronization.
1233 */ 1251 */
1234 1252
1235 alps_report_bare_ps2_packet(priv->dev2, 1253 alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3],
1236 &psmouse->packet[3], false); 1254 false);
1237 1255
1238 /* 1256 /*
1239 * Continue with the standard ALPS protocol handling, 1257 * Continue with the standard ALPS protocol handling,
@@ -1289,18 +1307,9 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
1289 * properly we only do this if the device is fully synchronized. 1307 * properly we only do this if the device is fully synchronized.
1290 */ 1308 */
1291 if (!psmouse->out_of_sync_cnt && (psmouse->packet[0] & 0xc8) == 0x08) { 1309 if (!psmouse->out_of_sync_cnt && (psmouse->packet[0] & 0xc8) == 0x08) {
1292
1293 /* Register dev3 mouse if we received PS/2 packet first time */
1294 if (unlikely(!priv->dev3))
1295 psmouse_queue_work(psmouse,
1296 &priv->dev3_register_work, 0);
1297
1298 if (psmouse->pktcnt == 3) { 1310 if (psmouse->pktcnt == 3) {
1299 /* Once dev3 mouse device is registered report data */ 1311 alps_report_bare_ps2_packet(psmouse, psmouse->packet,
1300 if (likely(!IS_ERR_OR_NULL(priv->dev3))) 1312 true);
1301 alps_report_bare_ps2_packet(priv->dev3,
1302 psmouse->packet,
1303 true);
1304 return PSMOUSE_FULL_PACKET; 1313 return PSMOUSE_FULL_PACKET;
1305 } 1314 }
1306 return PSMOUSE_GOOD_DATA; 1315 return PSMOUSE_GOOD_DATA;
@@ -2281,10 +2290,12 @@ static int alps_set_protocol(struct psmouse *psmouse,
2281 priv->set_abs_params = alps_set_abs_params_mt; 2290 priv->set_abs_params = alps_set_abs_params_mt;
2282 priv->nibble_commands = alps_v3_nibble_commands; 2291 priv->nibble_commands = alps_v3_nibble_commands;
2283 priv->addr_command = PSMOUSE_CMD_RESET_WRAP; 2292 priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
2284 priv->x_max = 1360;
2285 priv->y_max = 660;
2286 priv->x_bits = 23; 2293 priv->x_bits = 23;
2287 priv->y_bits = 12; 2294 priv->y_bits = 12;
2295
2296 if (alps_dolphin_get_device_area(psmouse, priv))
2297 return -EIO;
2298
2288 break; 2299 break;
2289 2300
2290 case ALPS_PROTO_V6: 2301 case ALPS_PROTO_V6:
@@ -2303,9 +2314,8 @@ static int alps_set_protocol(struct psmouse *psmouse,
2303 priv->set_abs_params = alps_set_abs_params_mt; 2314 priv->set_abs_params = alps_set_abs_params_mt;
2304 priv->nibble_commands = alps_v3_nibble_commands; 2315 priv->nibble_commands = alps_v3_nibble_commands;
2305 priv->addr_command = PSMOUSE_CMD_RESET_WRAP; 2316 priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
2306 2317 priv->x_max = 0xfff;
2307 if (alps_dolphin_get_device_area(psmouse, priv)) 2318 priv->y_max = 0x7ff;
2308 return -EIO;
2309 2319
2310 if (priv->fw_ver[1] != 0xba) 2320 if (priv->fw_ver[1] != 0xba)
2311 priv->flags |= ALPS_BUTTONPAD; 2321 priv->flags |= ALPS_BUTTONPAD;
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 95898333834f..630af73e98c4 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -157,6 +157,11 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
157 }, 157 },
158 { 158 {
159 (const char * const []){"LEN2006", NULL}, 159 (const char * const []){"LEN2006", NULL},
160 {2691, 2691},
161 1024, 5045, 2457, 4832
162 },
163 {
164 (const char * const []){"LEN2006", NULL},
160 {ANY_BOARD_ID, ANY_BOARD_ID}, 165 {ANY_BOARD_ID, ANY_BOARD_ID},
161 1264, 5675, 1171, 4688 166 1264, 5675, 1171, 4688
162 }, 167 },
@@ -192,7 +197,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
192 "LEN2003", 197 "LEN2003",
193 "LEN2004", /* L440 */ 198 "LEN2004", /* L440 */
194 "LEN2005", 199 "LEN2005",
195 "LEN2006", 200 "LEN2006", /* Edge E440/E540 */
196 "LEN2007", 201 "LEN2007",
197 "LEN2008", 202 "LEN2008",
198 "LEN2009", 203 "LEN2009",