Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/git/dtor/input

Pull input updates from Dmitry Torokhov:
 "A few drivers were updated with device tree bindings and others got a
  few small cleanups and fixes."

Fix trivial conflict in drivers/input/keyboard/omap-keypad.c due to
changes clashing with a whitespace cleanup.

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (28 commits)
  Input: wacom - mark Intuos5 pad as in-prox when touching buttons
  Input: synaptics - adjust threshold for treating position values as negative
  Input: hgpk - use %*ph to dump small buffer
  Input: gpio_keys_polled - fix dt pdata->nbuttons
  Input: Add KD[GS]KBDIACRUC ioctls to the compatible list
  Input: omap-keypad - fixed formatting
  Input: tegra - move platform data header
  Input: wacom - add support for EMR on Cintiq 24HD touch
  Input: s3c2410_ts - make s3c_ts_pmops const
  Input: samsung-keypad - use of_get_child_count() helper
  Input: samsung-keypad - use of_match_ptr()
  Input: uinput - fix formatting
  Input: uinput - specify exact bit sizes on userspace APIs
  Input: uinput - mark failed submission requests as free
  Input: uinput - fix race that can block nonblocking read
  Input: uinput - return -EINVAL when read buffer size is too small
  Input: uinput - take event lock when fetching events from buffer
  Input: get rid of MATCH_BIT() macro
  Input: rotary-encoder - add DT bindings
  Input: rotary-encoder - constify platform data pointers
  ...
  • Loading branch information
torvalds committed Oct 3, 2012
2 parents 06fe918 + dde3ada commit fc47912
Show file tree
Hide file tree
Showing 24 changed files with 610 additions and 287 deletions.
38 changes: 38 additions & 0 deletions Documentation/devicetree/bindings/input/gpio-keys-polled.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
Device-Tree bindings for input/gpio_keys_polled.c keyboard driver

Required properties:
- compatible = "gpio-keys-polled";
- poll-interval: Poll interval time in milliseconds

Optional properties:
- autorepeat: Boolean, Enable auto repeat feature of Linux input
subsystem.

Each button (key) is represented as a sub-node of "gpio-keys-polled":
Subnode properties:

- gpios: OF device-tree gpio specification.
- label: Descriptive name of the key.
- linux,code: Keycode to emit.

Optional subnode-properties:
- linux,input-type: Specify event type this button/key generates.
If not specified defaults to <1> == EV_KEY.
- debounce-interval: Debouncing interval time in milliseconds.
If not specified defaults to 5.
- gpio-key,wakeup: Boolean, button can wake-up the system.

Example nodes:

gpio_keys_polled {
compatible = "gpio-keys-polled";
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <100>;
autorepeat;
button@21 {
label = "GPIO Key UP";
linux,code = <103>;
gpios = <&gpio1 0 1>;
};
...
36 changes: 36 additions & 0 deletions Documentation/devicetree/bindings/input/rotary-encoder.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Rotary encoder DT bindings

Required properties:
- gpios: a spec for two GPIOs to be used

Optional properties:
- linux,axis: the input subsystem axis to map to this rotary encoder.
Defaults to 0 (ABS_X / REL_X)
- rotary-encoder,steps: Number of steps in a full turnaround of the
encoder. Only relevant for absolute axis. Defaults to 24 which is a
typical value for such devices.
- rotary-encoder,relative-axis: register a relative axis rather than an
absolute one. Relative axis will only generate +1/-1 events on the input
device, hence no steps need to be passed.
- rotary-encoder,rollover: Automatic rollove when the rotary value becomes
greater than the specified steps or smaller than 0. For absolute axis only.
- rotary-encoder,half-period: Makes the driver work on half-period mode.

See Documentation/input/rotary-encoder.txt for more information.

Example:

rotary@0 {
compatible = "rotary-encoder";
gpios = <&gpio 19 1>, <&gpio 20 0>; /* GPIO19 is inverted */
linux,axis = <0>; /* REL_X */
rotary-encoder,relative-axis;
};

rotary@1 {
compatible = "rotary-encoder";
gpios = <&gpio 21 0>, <&gpio 22 0>;
linux,axis = <1>; /* ABS_Y */
rotary-encoder,steps = <24>;
rotary-encoder,rollover;
};
2 changes: 1 addition & 1 deletion drivers/input/apm-power.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static void system_power_event(unsigned int keycode)
}

static void apmpower_event(struct input_handle *handle, unsigned int type,
unsigned int code, int value)
unsigned int code, int value)
{
/* only react on key down events */
if (value != 1)
Expand Down
4 changes: 2 additions & 2 deletions drivers/input/ff-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ int input_ff_upload(struct input_dev *dev, struct ff_effect *effect,

if (effect->id == -1) {
for (id = 0; id < ff->max_effects; id++)
if (!ff->effect_owners[id])
break;
if (!ff->effect_owners[id])
break;

if (id >= ff->max_effects) {
ret = -ENOSPC;
Expand Down
14 changes: 8 additions & 6 deletions drivers/input/ff-memless.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,14 @@ static const struct ff_envelope *get_envelope(const struct ff_effect *effect)
static const struct ff_envelope empty_envelope;

switch (effect->type) {
case FF_PERIODIC:
return &effect->u.periodic.envelope;
case FF_CONSTANT:
return &effect->u.constant.envelope;
default:
return &empty_envelope;
case FF_PERIODIC:
return &effect->u.periodic.envelope;

case FF_CONSTANT:
return &effect->u.constant.envelope;

default:
return &empty_envelope;
}
}

Expand Down
43 changes: 26 additions & 17 deletions drivers/input/input.c
Original file line number Diff line number Diff line change
Expand Up @@ -918,18 +918,10 @@ int input_set_keycode(struct input_dev *dev,
}
EXPORT_SYMBOL(input_set_keycode);

#define MATCH_BIT(bit, max) \
for (i = 0; i < BITS_TO_LONGS(max); i++) \
if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \
break; \
if (i != BITS_TO_LONGS(max)) \
continue;

static const struct input_device_id *input_match_device(struct input_handler *handler,
struct input_dev *dev)
{
const struct input_device_id *id;
int i;

for (id = handler->id_table; id->flags || id->driver_info; id++) {

Expand All @@ -949,15 +941,32 @@ static const struct input_device_id *input_match_device(struct input_handler *ha
if (id->version != dev->id.version)
continue;

MATCH_BIT(evbit, EV_MAX);
MATCH_BIT(keybit, KEY_MAX);
MATCH_BIT(relbit, REL_MAX);
MATCH_BIT(absbit, ABS_MAX);
MATCH_BIT(mscbit, MSC_MAX);
MATCH_BIT(ledbit, LED_MAX);
MATCH_BIT(sndbit, SND_MAX);
MATCH_BIT(ffbit, FF_MAX);
MATCH_BIT(swbit, SW_MAX);
if (!bitmap_subset(id->evbit, dev->evbit, EV_MAX))
continue;

if (!bitmap_subset(id->keybit, dev->keybit, KEY_MAX))
continue;

if (!bitmap_subset(id->relbit, dev->relbit, REL_MAX))
continue;

if (!bitmap_subset(id->absbit, dev->absbit, ABS_MAX))
continue;

if (!bitmap_subset(id->mscbit, dev->mscbit, MSC_MAX))
continue;

if (!bitmap_subset(id->ledbit, dev->ledbit, LED_MAX))
continue;

if (!bitmap_subset(id->sndbit, dev->sndbit, SND_MAX))
continue;

if (!bitmap_subset(id->ffbit, dev->ffbit, FF_MAX))
continue;

if (!bitmap_subset(id->swbit, dev->swbit, SW_MAX))
continue;

if (!handler->match || handler->match(handler, dev))
return id;
Expand Down
2 changes: 1 addition & 1 deletion drivers/input/joydev.c
Original file line number Diff line number Diff line change
Expand Up @@ -711,7 +711,7 @@ static long joydev_ioctl(struct file *file,

case JS_SET_ALL:
retval = copy_from_user(&joydev->glue, argp,
sizeof(joydev->glue)) ? -EFAULT: 0;
sizeof(joydev->glue)) ? -EFAULT : 0;
break;

case JS_GET_ALL:
Expand Down
Loading

0 comments on commit fc47912

Please sign in to comment.