Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input fixes from Dmitry Torokhov.

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: atmel_mxt_ts - use mxt_acquire_irq in mxt_soft_reset
Input: zforce_ts - fix dual touch recognition
Input: twl6040-vibra - fix atomic schedule panic

+24 -24
+8 -8
drivers/input/misc/twl6040-vibra.c
··· 181 181 { 182 182 struct vibra_info *info = container_of(work, 183 183 struct vibra_info, play_work); 184 + int ret; 185 + 186 + /* Do not allow effect, while the routing is set to use audio */ 187 + ret = twl6040_get_vibralr_status(info->twl6040); 188 + if (ret & TWL6040_VIBSEL) { 189 + dev_info(info->dev, "Vibra is configured for audio\n"); 190 + return; 191 + } 184 192 185 193 mutex_lock(&info->mutex); 186 194 ··· 207 199 struct ff_effect *effect) 208 200 { 209 201 struct vibra_info *info = input_get_drvdata(input); 210 - int ret; 211 - 212 - /* Do not allow effect, while the routing is set to use audio */ 213 - ret = twl6040_get_vibralr_status(info->twl6040); 214 - if (ret & TWL6040_VIBSEL) { 215 - dev_info(&input->dev, "Vibra is configured for audio\n"); 216 - return -EBUSY; 217 - } 218 202 219 203 info->weak_speed = effect->u.rumble.weak_magnitude; 220 204 info->strong_speed = effect->u.rumble.strong_magnitude;
+14 -14
drivers/input/touchscreen/atmel_mxt_ts.c
··· 1093 1093 return 0; 1094 1094 } 1095 1095 1096 + static int mxt_acquire_irq(struct mxt_data *data) 1097 + { 1098 + int error; 1099 + 1100 + enable_irq(data->irq); 1101 + 1102 + error = mxt_process_messages_until_invalid(data); 1103 + if (error) 1104 + return error; 1105 + 1106 + return 0; 1107 + } 1108 + 1096 1109 static int mxt_soft_reset(struct mxt_data *data) 1097 1110 { 1098 1111 struct device *dev = &data->client->dev; ··· 1124 1111 /* Ignore CHG line for 100ms after reset */ 1125 1112 msleep(100); 1126 1113 1127 - enable_irq(data->irq); 1114 + mxt_acquire_irq(data); 1128 1115 1129 1116 ret = mxt_wait_for_completion(data, &data->reset_completion, 1130 1117 MXT_RESET_TIMEOUT); ··· 1477 1464 release_mem: 1478 1465 kfree(config_mem); 1479 1466 return ret; 1480 - } 1481 - 1482 - static int mxt_acquire_irq(struct mxt_data *data) 1483 - { 1484 - int error; 1485 - 1486 - enable_irq(data->irq); 1487 - 1488 - error = mxt_process_messages_until_invalid(data); 1489 - if (error) 1490 - return error; 1491 - 1492 - return 0; 1493 1467 } 1494 1468 1495 1469 static int mxt_get_info(struct mxt_data *data)
+2 -2
drivers/input/touchscreen/zforce_ts.c
··· 370 370 point.coord_x = point.coord_y = 0; 371 371 } 372 372 373 - point.state = payload[9 * i + 5] & 0x03; 374 - point.id = (payload[9 * i + 5] & 0xfc) >> 2; 373 + point.state = payload[9 * i + 5] & 0x0f; 374 + point.id = (payload[9 * i + 5] & 0xf0) >> 4; 375 375 376 376 /* determine touch major, minor and orientation */ 377 377 point.area_major = max(payload[9 * i + 6],