diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-10 18:08:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-10 18:08:02 -0400 |
commit | 04f2b9765f1e80337314e03c4adde695fe2f0403 (patch) | |
tree | bde948d37c22eaf5e200dd9675543ea2b2e059c2 /drivers/input/keyboard | |
parent | 9895850b23886e030cd1e7241d5529a57e969c3d (diff) | |
parent | 5fc0d36c00e6a2d0a9f2a0a815cff5b9a13b080d (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: xpad - add USB-ID for PL-3601 Xbox 360 pad
Input: cy8ctmg100_ts - signedness bug
Input: elantech - report position also with 3 fingers
Input: elantech - discard the first 2 positions on some firmwares
Input: adxl34x - do not mark device as disabled on startup
Input: gpio_keys - add hooks to enable/disable device
Input: evdev - rearrange ioctl handling
Input: dynamically allocate ABS information
Input: switch to input_abs_*() access functions
Input: add static inline accessors for ABS properties
Diffstat (limited to 'drivers/input/keyboard')
-rw-r--r-- | drivers/input/keyboard/gpio_keys.c | 22 | ||||
-rw-r--r-- | drivers/input/keyboard/hil_kbd.c | 21 |
2 files changed, 34 insertions, 9 deletions
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index a9fd147f2ba7..6069abe31e42 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c | |||
@@ -39,6 +39,8 @@ struct gpio_keys_drvdata { | |||
39 | struct input_dev *input; | 39 | struct input_dev *input; |
40 | struct mutex disable_lock; | 40 | struct mutex disable_lock; |
41 | unsigned int n_buttons; | 41 | unsigned int n_buttons; |
42 | int (*enable)(struct device *dev); | ||
43 | void (*disable)(struct device *dev); | ||
42 | struct gpio_button_data data[0]; | 44 | struct gpio_button_data data[0]; |
43 | }; | 45 | }; |
44 | 46 | ||
@@ -423,6 +425,21 @@ fail2: | |||
423 | return error; | 425 | return error; |
424 | } | 426 | } |
425 | 427 | ||
428 | static int gpio_keys_open(struct input_dev *input) | ||
429 | { | ||
430 | struct gpio_keys_drvdata *ddata = input_get_drvdata(input); | ||
431 | |||
432 | return ddata->enable ? ddata->enable(input->dev.parent) : 0; | ||
433 | } | ||
434 | |||
435 | static void gpio_keys_close(struct input_dev *input) | ||
436 | { | ||
437 | struct gpio_keys_drvdata *ddata = input_get_drvdata(input); | ||
438 | |||
439 | if (ddata->disable) | ||
440 | ddata->disable(input->dev.parent); | ||
441 | } | ||
442 | |||
426 | static int __devinit gpio_keys_probe(struct platform_device *pdev) | 443 | static int __devinit gpio_keys_probe(struct platform_device *pdev) |
427 | { | 444 | { |
428 | struct gpio_keys_platform_data *pdata = pdev->dev.platform_data; | 445 | struct gpio_keys_platform_data *pdata = pdev->dev.platform_data; |
@@ -444,13 +461,18 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev) | |||
444 | 461 | ||
445 | ddata->input = input; | 462 | ddata->input = input; |
446 | ddata->n_buttons = pdata->nbuttons; | 463 | ddata->n_buttons = pdata->nbuttons; |
464 | ddata->enable = pdata->enable; | ||
465 | ddata->disable = pdata->disable; | ||
447 | mutex_init(&ddata->disable_lock); | 466 | mutex_init(&ddata->disable_lock); |
448 | 467 | ||
449 | platform_set_drvdata(pdev, ddata); | 468 | platform_set_drvdata(pdev, ddata); |
469 | input_set_drvdata(input, ddata); | ||
450 | 470 | ||
451 | input->name = pdev->name; | 471 | input->name = pdev->name; |
452 | input->phys = "gpio-keys/input0"; | 472 | input->phys = "gpio-keys/input0"; |
453 | input->dev.parent = &pdev->dev; | 473 | input->dev.parent = &pdev->dev; |
474 | input->open = gpio_keys_open; | ||
475 | input->close = gpio_keys_close; | ||
454 | 476 | ||
455 | input->id.bustype = BUS_HOST; | 477 | input->id.bustype = BUS_HOST; |
456 | input->id.vendor = 0x0001; | 478 | input->id.vendor = 0x0001; |
diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c index c83f4b2ec7d3..ddd5afd301d4 100644 --- a/drivers/input/keyboard/hil_kbd.c +++ b/drivers/input/keyboard/hil_kbd.c | |||
@@ -232,15 +232,16 @@ static void hil_dev_handle_ptr_events(struct hil_dev *ptr) | |||
232 | if (absdev) { | 232 | if (absdev) { |
233 | val = lo + (hi << 8); | 233 | val = lo + (hi << 8); |
234 | #ifdef TABLET_AUTOADJUST | 234 | #ifdef TABLET_AUTOADJUST |
235 | if (val < dev->absmin[ABS_X + i]) | 235 | if (val < input_abs_min(dev, ABS_X + i)) |
236 | dev->absmin[ABS_X + i] = val; | 236 | input_abs_set_min(dev, ABS_X + i, val); |
237 | if (val > dev->absmax[ABS_X + i]) | 237 | if (val > input_abs_max(dev, ABS_X + i)) |
238 | dev->absmax[ABS_X + i] = val; | 238 | XXinput_abs_set_max(dev, ABS_X + i, val); |
239 | #endif | 239 | #endif |
240 | if (i%3) val = dev->absmax[ABS_X + i] - val; | 240 | if (i % 3) |
241 | val = input_abs_max(dev, ABS_X + i) - val; | ||
241 | input_report_abs(dev, ABS_X + i, val); | 242 | input_report_abs(dev, ABS_X + i, val); |
242 | } else { | 243 | } else { |
243 | val = (int) (((int8_t)lo) | ((int8_t)hi << 8)); | 244 | val = (int) (((int8_t) lo) | ((int8_t) hi << 8)); |
244 | if (i % 3) | 245 | if (i % 3) |
245 | val *= -1; | 246 | val *= -1; |
246 | input_report_rel(dev, REL_X + i, val); | 247 | input_report_rel(dev, REL_X + i, val); |
@@ -387,9 +388,11 @@ static void hil_dev_pointer_setup(struct hil_dev *ptr) | |||
387 | 388 | ||
388 | #ifdef TABLET_AUTOADJUST | 389 | #ifdef TABLET_AUTOADJUST |
389 | for (i = 0; i < ABS_MAX; i++) { | 390 | for (i = 0; i < ABS_MAX; i++) { |
390 | int diff = input_dev->absmax[ABS_X + i] / 10; | 391 | int diff = input_abs_max(input_dev, ABS_X + i) / 10; |
391 | input_dev->absmin[ABS_X + i] += diff; | 392 | input_abs_set_min(input_dev, ABS_X + i, |
392 | input_dev->absmax[ABS_X + i] -= diff; | 393 | input_abs_min(input_dev, ABS_X + i) + diff) |
394 | XXinput_abs_set_max(input_dev, ABS_X + i, | ||
395 | input_abs_max(input_dev, ABS_X + i) - diff) | ||
393 | } | 396 | } |
394 | #endif | 397 | #endif |
395 | 398 | ||