diff options
24 files changed, 610 insertions, 287 deletions
diff --git a/Documentation/devicetree/bindings/input/gpio-keys-polled.txt b/Documentation/devicetree/bindings/input/gpio-keys-polled.txt new file mode 100644 index 000000000000..313abefa37cc --- /dev/null +++ b/Documentation/devicetree/bindings/input/gpio-keys-polled.txt | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | Device-Tree bindings for input/gpio_keys_polled.c keyboard driver | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible = "gpio-keys-polled"; | ||
| 5 | - poll-interval: Poll interval time in milliseconds | ||
| 6 | |||
| 7 | Optional properties: | ||
| 8 | - autorepeat: Boolean, Enable auto repeat feature of Linux input | ||
| 9 | subsystem. | ||
| 10 | |||
| 11 | Each button (key) is represented as a sub-node of "gpio-keys-polled": | ||
| 12 | Subnode properties: | ||
| 13 | |||
| 14 | - gpios: OF device-tree gpio specification. | ||
| 15 | - label: Descriptive name of the key. | ||
| 16 | - linux,code: Keycode to emit. | ||
| 17 | |||
| 18 | Optional subnode-properties: | ||
| 19 | - linux,input-type: Specify event type this button/key generates. | ||
| 20 | If not specified defaults to <1> == EV_KEY. | ||
| 21 | - debounce-interval: Debouncing interval time in milliseconds. | ||
| 22 | If not specified defaults to 5. | ||
| 23 | - gpio-key,wakeup: Boolean, button can wake-up the system. | ||
| 24 | |||
| 25 | Example nodes: | ||
| 26 | |||
| 27 | gpio_keys_polled { | ||
| 28 | compatible = "gpio-keys-polled"; | ||
| 29 | #address-cells = <1>; | ||
| 30 | #size-cells = <0>; | ||
| 31 | poll-interval = <100>; | ||
| 32 | autorepeat; | ||
| 33 | button@21 { | ||
| 34 | label = "GPIO Key UP"; | ||
| 35 | linux,code = <103>; | ||
| 36 | gpios = <&gpio1 0 1>; | ||
| 37 | }; | ||
| 38 | ... | ||
diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt new file mode 100644 index 000000000000..331549593ed5 --- /dev/null +++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | Rotary encoder DT bindings | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - gpios: a spec for two GPIOs to be used | ||
| 5 | |||
| 6 | Optional properties: | ||
| 7 | - linux,axis: the input subsystem axis to map to this rotary encoder. | ||
| 8 | Defaults to 0 (ABS_X / REL_X) | ||
| 9 | - rotary-encoder,steps: Number of steps in a full turnaround of the | ||
| 10 | encoder. Only relevant for absolute axis. Defaults to 24 which is a | ||
| 11 | typical value for such devices. | ||
| 12 | - rotary-encoder,relative-axis: register a relative axis rather than an | ||
| 13 | absolute one. Relative axis will only generate +1/-1 events on the input | ||
| 14 | device, hence no steps need to be passed. | ||
| 15 | - rotary-encoder,rollover: Automatic rollove when the rotary value becomes | ||
| 16 | greater than the specified steps or smaller than 0. For absolute axis only. | ||
| 17 | - rotary-encoder,half-period: Makes the driver work on half-period mode. | ||
| 18 | |||
| 19 | See Documentation/input/rotary-encoder.txt for more information. | ||
| 20 | |||
| 21 | Example: | ||
| 22 | |||
| 23 | rotary@0 { | ||
| 24 | compatible = "rotary-encoder"; | ||
| 25 | gpios = <&gpio 19 1>, <&gpio 20 0>; /* GPIO19 is inverted */ | ||
| 26 | linux,axis = <0>; /* REL_X */ | ||
| 27 | rotary-encoder,relative-axis; | ||
| 28 | }; | ||
| 29 | |||
| 30 | rotary@1 { | ||
| 31 | compatible = "rotary-encoder"; | ||
| 32 | gpios = <&gpio 21 0>, <&gpio 22 0>; | ||
| 33 | linux,axis = <1>; /* ABS_Y */ | ||
| 34 | rotary-encoder,steps = <24>; | ||
| 35 | rotary-encoder,rollover; | ||
| 36 | }; | ||
diff --git a/drivers/input/apm-power.c b/drivers/input/apm-power.c index e90ee3d30613..650177a3c858 100644 --- a/drivers/input/apm-power.c +++ b/drivers/input/apm-power.c | |||
| @@ -33,7 +33,7 @@ static void system_power_event(unsigned int keycode) | |||
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | static void apmpower_event(struct input_handle *handle, unsigned int type, | 35 | static void apmpower_event(struct input_handle *handle, unsigned int type, |
| 36 | unsigned int code, int value) | 36 | unsigned int code, int value) |
| 37 | { | 37 | { |
| 38 | /* only react on key down events */ | 38 | /* only react on key down events */ |
| 39 | if (value != 1) | 39 | if (value != 1) |
diff --git a/drivers/input/ff-core.c b/drivers/input/ff-core.c index 480eb9d9876a..f50f6dd92274 100644 --- a/drivers/input/ff-core.c +++ b/drivers/input/ff-core.c | |||
| @@ -138,8 +138,8 @@ int input_ff_upload(struct input_dev *dev, struct ff_effect *effect, | |||
| 138 | 138 | ||
| 139 | if (effect->id == -1) { | 139 | if (effect->id == -1) { |
| 140 | for (id = 0; id < ff->max_effects; id++) | 140 | for (id = 0; id < ff->max_effects; id++) |
| 141 | if (!ff->effect_owners[id]) | 141 | if (!ff->effect_owners[id]) |
| 142 | break; | 142 | break; |
| 143 | 143 | ||
| 144 | if (id >= ff->max_effects) { | 144 | if (id >= ff->max_effects) { |
| 145 | ret = -ENOSPC; | 145 | ret = -ENOSPC; |
diff --git a/drivers/input/ff-memless.c b/drivers/input/ff-memless.c index b107922514fb..74c0d8c6002a 100644 --- a/drivers/input/ff-memless.c +++ b/drivers/input/ff-memless.c | |||
| @@ -72,12 +72,14 @@ static const struct ff_envelope *get_envelope(const struct ff_effect *effect) | |||
| 72 | static const struct ff_envelope empty_envelope; | 72 | static const struct ff_envelope empty_envelope; |
| 73 | 73 | ||
| 74 | switch (effect->type) { | 74 | switch (effect->type) { |
| 75 | case FF_PERIODIC: | 75 | case FF_PERIODIC: |
| 76 | return &effect->u.periodic.envelope; | 76 | return &effect->u.periodic.envelope; |
| 77 | case FF_CONSTANT: | 77 | |
| 78 | return &effect->u.constant.envelope; | 78 | case FF_CONSTANT: |
| 79 | default: | 79 | return &effect->u.constant.envelope; |
| 80 | return &empty_envelope; | 80 | |
| 81 | default: | ||
| 82 | return &empty_envelope; | ||
| 81 | } | 83 | } |
| 82 | } | 84 | } |
| 83 | 85 | ||
diff --git a/drivers/input/input.c b/drivers/input/input.c index 5244f3d05b12..ace3f7c4226d 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
| @@ -918,18 +918,10 @@ int input_set_keycode(struct input_dev *dev, | |||
| 918 | } | 918 | } |
| 919 | EXPORT_SYMBOL(input_set_keycode); | 919 | EXPORT_SYMBOL(input_set_keycode); |
| 920 | 920 | ||
| 921 | #define MATCH_BIT(bit, max) \ | ||
| 922 | for (i = 0; i < BITS_TO_LONGS(max); i++) \ | ||
| 923 | if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \ | ||
| 924 | break; \ | ||
| 925 | if (i != BITS_TO_LONGS(max)) \ | ||
| 926 | continue; | ||
| 927 | |||
| 928 | static const struct input_device_id *input_match_device(struct input_handler *handler, | 921 | static const struct input_device_id *input_match_device(struct input_handler *handler, |
| 929 | struct input_dev *dev) | 922 | struct input_dev *dev) |
| 930 | { | 923 | { |
| 931 | const struct input_device_id *id; | 924 | const struct input_device_id *id; |
| 932 | int i; | ||
| 933 | 925 | ||
| 934 | for (id = handler->id_table; id->flags || id->driver_info; id++) { | 926 | for (id = handler->id_table; id->flags || id->driver_info; id++) { |
| 935 | |||
