aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/input/event-codes.txt13
-rw-r--r--drivers/hid/wacom_wac.c28
-rw-r--r--drivers/input/input.c6
-rw-r--r--drivers/input/keyboard/st-keyscan.c2
-rw-r--r--drivers/input/misc/sirfsoc-onkey.c2
-rw-r--r--drivers/input/mouse/synaptics.c5
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h7
-rw-r--r--drivers/input/touchscreen/ti_am335x_tsc.c5
8 files changed, 41 insertions, 27 deletions
diff --git a/Documentation/input/event-codes.txt b/Documentation/input/event-codes.txt
index f1ea2c69648d..c587a966413e 100644
--- a/Documentation/input/event-codes.txt
+++ b/Documentation/input/event-codes.txt
@@ -281,6 +281,19 @@ gestures can normally be extracted from it.
281If INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT 281If INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT
282device. 282device.
283 283
284INPUT_PROP_TOPBUTTONPAD:
285-----------------------
286Some laptops, most notably the Lenovo *40 series provide a trackstick
287device but do not have physical buttons associated with the trackstick
288device. Instead, the top area of the touchpad is marked to show
289visual/haptic areas for left, middle, right buttons intended to be used
290with the trackstick.
291
292If INPUT_PROP_TOPBUTTONPAD is set, userspace should emulate buttons
293accordingly. This property does not affect kernel behavior.
294The kernel does not provide button emulation for such devices but treats
295them as any other INPUT_PROP_BUTTONPAD device.
296
284Guidelines: 297Guidelines:
285========== 298==========
286The guidelines below ensure proper single-touch and multi-finger functionality. 299The guidelines below ensure proper single-touch and multi-finger functionality.
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index d4a2d533a444..aa6a08eb7ad6 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -1325,9 +1325,9 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
1325 * a=(pi*r^2)/C. 1325 * a=(pi*r^2)/C.
1326 */ 1326 */
1327 int a = data[5]; 1327 int a = data[5];
1328 int x_res = input_abs_get_res(input, ABS_X); 1328 int x_res = input_abs_get_res(input, ABS_MT_POSITION_X);
1329 int y_res = input_abs_get_res(input, ABS_Y); 1329 int y_res = input_abs_get_res(input, ABS_MT_POSITION_Y);
1330 width = 2 * int_sqrt(a * WACOM_CONTACT_AREA_SCALE); 1330 width = 2 * int_sqrt(a * WACOM_CONTACT_AREA_SCALE);
1331 height = width * y_res / x_res; 1331 height = width * y_res / x_res;
1332 } 1332 }
1333 1333
@@ -1715,7 +1715,7 @@ static void wacom_abs_set_axis(struct input_dev *input_dev,
1715 input_abs_set_res(input_dev, ABS_X, features->x_resolution); 1715 input_abs_set_res(input_dev, ABS_X, features->x_resolution);
1716 input_abs_set_res(input_dev, ABS_Y, features->y_resolution); 1716 input_abs_set_res(input_dev, ABS_Y, features->y_resolution);
1717 } else { 1717 } else {
1718 if (features->touch_max <= 2) { 1718 if (features->touch_max == 1) {
1719 input_set_abs_params(input_dev, ABS_X, 0, 1719 input_set_abs_params(input_dev, ABS_X, 0,
1720 features->x_max, features->x_fuzz, 0); 1720 features->x_max, features->x_fuzz, 0);
1721 input_set_abs_params(input_dev, ABS_Y, 0, 1721 input_set_abs_params(input_dev, ABS_Y, 0,
@@ -1886,14 +1886,8 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
1886 case MTTPC: 1886 case MTTPC:
1887 case MTTPC_B: 1887 case MTTPC_B:
1888 case TABLETPC2FG: 1888 case TABLETPC2FG:
1889 if (features->device_type == BTN_TOOL_FINGER) { 1889 if (features->device_type == BTN_TOOL_FINGER && features->touch_max > 1)
1890 unsigned int flags = INPUT_MT_DIRECT; 1890 input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_DIRECT);
1891
1892 if (wacom_wac->features.type == TABLETPC2FG)
1893 flags = 0;
1894
1895 input_mt_init_slots(input_dev, features->touch_max, flags);
1896 }
1897 /* fall through */ 1891 /* fall through */
1898 1892
1899 case TABLETPC: 1893 case TABLETPC:
@@ -1944,10 +1938,6 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
1944 if (features->device_type == BTN_TOOL_FINGER) { 1938 if (features->device_type == BTN_TOOL_FINGER) {
1945 1939
1946 if (features->touch_max) { 1940 if (features->touch_max) {
1947 /* touch interface */
1948 unsigned int flags = INPUT_MT_POINTER;
1949
1950 __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
1951 if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) { 1941 if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
1952 input_set_abs_params(input_dev, 1942 input_set_abs_params(input_dev,
1953 ABS_MT_TOUCH_MAJOR, 1943 ABS_MT_TOUCH_MAJOR,
@@ -1955,12 +1945,8 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
1955 input_set_abs_params(input_dev, 1945 input_set_abs_params(input_dev,
1956 ABS_MT_TOUCH_MINOR, 1946 ABS_MT_TOUCH_MINOR,
1957 0, features->y_max, 0, 0); 1947 0, features->y_max, 0, 0);
1958 } else {
1959 __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
1960 __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
1961 flags = 0;
1962 } 1948 }
1963 input_mt_init_slots(input_dev, features->touch_max, flags); 1949 input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_POINTER);
1964 } else { 1950 } else {
1965 /* buttons/keys only interface */ 1951 /* buttons/keys only interface */
1966 __clear_bit(ABS_X, input_dev->absbit); 1952 __clear_bit(ABS_X, input_dev->absbit);
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 1c4c0db05550..29ca0bb4f561 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -257,9 +257,10 @@ static int input_handle_abs_event(struct input_dev *dev,
257} 257}
258 258
259static int input_get_disposition(struct input_dev *dev, 259static int input_get_disposition(struct input_dev *dev,
260 unsigned int type, unsigned int code, int value) 260 unsigned int type, unsigned int code, int *pval)
261{ 261{
262 int disposition = INPUT_IGNORE_EVENT; 262 int disposition = INPUT_IGNORE_EVENT;
263 int value = *pval;
263 264
264 switch (type) { 265 switch (type) {
265 266
@@ -357,6 +358,7 @@ static int input_get_disposition(struct input_dev *dev,
357 break; 358 break;
358 } 359 }
359 360
361 *pval = value;
360 return disposition; 362 return disposition;
361} 363}
362 364
@@ -365,7 +367,7 @@ static void input_handle_event(struct input_dev *dev,
365{ 367{
366 int disposition; 368 int disposition;
367 369
368 disposition = input_get_disposition(dev, type, code, value); 370 disposition = input_get_disposition(dev, type, code, &value);
369 371
370 if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event) 372 if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event)
371 dev->event(dev, type, code, value); 373 dev->event(dev, type, code, value);
diff --git a/drivers/input/keyboard/st-keyscan.c b/drivers/input/keyboard/st-keyscan.c
index 758b48731415..de7be4f03d91 100644
--- a/drivers/input/keyboard/st-keyscan.c
+++ b/drivers/input/keyboard/st-keyscan.c
@@ -215,6 +215,7 @@ static int keyscan_probe(struct platform_device *pdev)
215 return 0; 215 return 0;
216} 216}
217 217
218#ifdef CONFIG_PM_SLEEP
218static int keyscan_suspend(struct device *dev) 219static int keyscan_suspend(struct device *dev)
219{ 220{
220 struct platform_device *pdev = to_platform_device(dev); 221 struct platform_device *pdev = to_platform_device(dev);
@@ -249,6 +250,7 @@ static int keyscan_resume(struct device *dev)
249 mutex_unlock(&input->mutex); 250 mutex_unlock(&input->mutex);
250 return retval; 251 return retval;
251} 252}
253#endif
252 254
253static SIMPLE_DEV_PM_OPS(keyscan_dev_pm_ops, keyscan_suspend, keyscan_resume); 255static SIMPLE_DEV_PM_OPS(keyscan_dev_pm_ops, keyscan_suspend, keyscan_resume);
254 256
diff --git a/drivers/input/misc/sirfsoc-onkey.c b/drivers/input/misc/sirfsoc-onkey.c
index e4104f9b2e6d..fed5102e1802 100644
--- a/drivers/input/misc/sirfsoc-onkey.c
+++ b/drivers/input/misc/sirfsoc-onkey.c
@@ -213,7 +213,7 @@ static struct platform_driver sirfsoc_pwrc_driver = {
213 213
214module_platform_driver(sirfsoc_pwrc_driver); 214module_platform_driver(sirfsoc_pwrc_driver);
215 215
216MODULE_LICENSE("GPLv2"); 216MODULE_LICENSE("GPL v2");
217MODULE_AUTHOR("Binghua Duan <Binghua.Duan@csr.com>, Xianglong Du <Xianglong.Du@csr.com>"); 217MODULE_AUTHOR("Binghua Duan <Binghua.Duan@csr.com>, Xianglong Du <Xianglong.Du@csr.com>");
218MODULE_DESCRIPTION("CSR Prima2 PWRC Driver"); 218MODULE_DESCRIPTION("CSR Prima2 PWRC Driver");
219MODULE_ALIAS("platform:sirfsoc-pwrc"); 219MODULE_ALIAS("platform:sirfsoc-pwrc");
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index ec772d962f06..ef9e0b8a9aa7 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -132,7 +132,8 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
132 1232, 5710, 1156, 4696 132 1232, 5710, 1156, 4696
133 }, 133 },
134 { 134 {
135 (const char * const []){"LEN0034", "LEN0036", "LEN2004", NULL}, 135 (const char * const []){"LEN0034", "LEN0036", "LEN2002",
136 "LEN2004", NULL},
136 1024, 5112, 2024, 4832 137 1024, 5112, 2024, 4832
137 }, 138 },
138 { 139 {
@@ -168,7 +169,7 @@ static const char * const topbuttonpad_pnp_ids[] = {
168 "LEN0049", 169 "LEN0049",
169 "LEN2000", 170 "LEN2000",
170 "LEN2001", /* Edge E431 */ 171 "LEN2001", /* Edge E431 */
171 "LEN2002", 172 "LEN2002", /* Edge E531 */
172 "LEN2003", 173 "LEN2003",
173 "LEN2004", /* L440 */ 174 "LEN2004", /* L440 */
174 "LEN2005", 175 "LEN2005",
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 381b20d4c561..136b7b204f56 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -402,6 +402,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
402 }, 402 },
403 }, 403 },
404 { 404 {
405 /* Acer Aspire 5710 */
406 .matches = {
407 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
408 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"),
409 },
410 },
411 {
405 /* Gericom Bellagio */ 412 /* Gericom Bellagio */
406 .matches = { 413 .matches = {
407 DMI_MATCH(DMI_SYS_VENDOR, "Gericom"), 414 DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index 4e793a17361f..2ce649520fe0 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -359,9 +359,12 @@ static int titsc_parse_dt(struct platform_device *pdev,
359 */ 359 */
360 err = of_property_read_u32(node, "ti,coordinate-readouts", 360 err = of_property_read_u32(node, "ti,coordinate-readouts",
361 &ts_dev->coordinate_readouts); 361 &ts_dev->coordinate_readouts);
362 if (err < 0) 362 if (err < 0) {
363 dev_warn(&pdev->dev, "please use 'ti,coordinate-readouts' instead\n");
363 err = of_property_read_u32(node, "ti,coordiante-readouts", 364 err = of_property_read_u32(node, "ti,coordiante-readouts",
364 &ts_dev->coordinate_readouts); 365 &ts_dev->coordinate_readouts);
366 }
367
365 if (err < 0) 368 if (err < 0)
366 return err; 369 return err;
367 370