diff options
-rw-r--r-- | Documentation/input/event-codes.txt | 13 | ||||
-rw-r--r-- | drivers/hid/wacom_wac.c | 28 | ||||
-rw-r--r-- | drivers/input/input.c | 6 | ||||
-rw-r--r-- | drivers/input/keyboard/st-keyscan.c | 2 | ||||
-rw-r--r-- | drivers/input/misc/sirfsoc-onkey.c | 2 | ||||
-rw-r--r-- | drivers/input/mouse/synaptics.c | 5 | ||||
-rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 7 | ||||
-rw-r--r-- | drivers/input/touchscreen/ti_am335x_tsc.c | 5 |
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. | |||
281 | If INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT | 281 | If INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT |
282 | device. | 282 | device. |
283 | 283 | ||
284 | INPUT_PROP_TOPBUTTONPAD: | ||
285 | ----------------------- | ||
286 | Some laptops, most notably the Lenovo *40 series provide a trackstick | ||
287 | device but do not have physical buttons associated with the trackstick | ||
288 | device. Instead, the top area of the touchpad is marked to show | ||
289 | visual/haptic areas for left, middle, right buttons intended to be used | ||
290 | with the trackstick. | ||
291 | |||
292 | If INPUT_PROP_TOPBUTTONPAD is set, userspace should emulate buttons | ||
293 | accordingly. This property does not affect kernel behavior. | ||
294 | The kernel does not provide button emulation for such devices but treats | ||
295 | them as any other INPUT_PROP_BUTTONPAD device. | ||
296 | |||
284 | Guidelines: | 297 | Guidelines: |
285 | ========== | 298 | ========== |
286 | The guidelines below ensure proper single-touch and multi-finger functionality. | 299 | The 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 | ||
259 | static int input_get_disposition(struct input_dev *dev, | 259 | static 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 | ||
218 | static int keyscan_suspend(struct device *dev) | 219 | static 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 | ||
253 | static SIMPLE_DEV_PM_OPS(keyscan_dev_pm_ops, keyscan_suspend, keyscan_resume); | 255 | static 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 | ||
214 | module_platform_driver(sirfsoc_pwrc_driver); | 214 | module_platform_driver(sirfsoc_pwrc_driver); |
215 | 215 | ||
216 | MODULE_LICENSE("GPLv2"); | 216 | MODULE_LICENSE("GPL v2"); |
217 | MODULE_AUTHOR("Binghua Duan <Binghua.Duan@csr.com>, Xianglong Du <Xianglong.Du@csr.com>"); | 217 | MODULE_AUTHOR("Binghua Duan <Binghua.Duan@csr.com>, Xianglong Du <Xianglong.Du@csr.com>"); |
218 | MODULE_DESCRIPTION("CSR Prima2 PWRC Driver"); | 218 | MODULE_DESCRIPTION("CSR Prima2 PWRC Driver"); |
219 | MODULE_ALIAS("platform:sirfsoc-pwrc"); | 219 | MODULE_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 | ||