@@ -174,44 +174,6 @@ static void input_pass_values(struct input_dev *dev,
174
174
}
175
175
}
176
176
177
- static void input_pass_event (struct input_dev * dev ,
178
- unsigned int type , unsigned int code , int value )
179
- {
180
- struct input_value vals [] = { { type , code , value } };
181
-
182
- input_pass_values (dev , vals , ARRAY_SIZE (vals ));
183
- }
184
-
185
- /*
186
- * Generate software autorepeat event. Note that we take
187
- * dev->event_lock here to avoid racing with input_event
188
- * which may cause keys get "stuck".
189
- */
190
- static void input_repeat_key (struct timer_list * t )
191
- {
192
- struct input_dev * dev = from_timer (dev , t , timer );
193
- unsigned long flags ;
194
-
195
- spin_lock_irqsave (& dev -> event_lock , flags );
196
-
197
- if (test_bit (dev -> repeat_key , dev -> key ) &&
198
- is_event_supported (dev -> repeat_key , dev -> keybit , KEY_MAX )) {
199
- struct input_value vals [] = {
200
- { EV_KEY , dev -> repeat_key , 2 },
201
- input_value_sync
202
- };
203
-
204
- input_set_timestamp (dev , ktime_get ());
205
- input_pass_values (dev , vals , ARRAY_SIZE (vals ));
206
-
207
- if (dev -> rep [REP_PERIOD ])
208
- mod_timer (& dev -> timer , jiffies +
209
- msecs_to_jiffies (dev -> rep [REP_PERIOD ]));
210
- }
211
-
212
- spin_unlock_irqrestore (& dev -> event_lock , flags );
213
- }
214
-
215
177
#define INPUT_IGNORE_EVENT 0
216
178
#define INPUT_PASS_TO_HANDLERS 1
217
179
#define INPUT_PASS_TO_DEVICE 2
@@ -275,6 +237,10 @@ static int input_get_disposition(struct input_dev *dev,
275
237
int disposition = INPUT_IGNORE_EVENT ;
276
238
int value = * pval ;
277
239
240
+ /* filter-out events from inhibited devices */
241
+ if (dev -> inhibited )
242
+ return INPUT_IGNORE_EVENT ;
243
+
278
244
switch (type ) {
279
245
280
246
case EV_SYN :
@@ -375,19 +341,9 @@ static int input_get_disposition(struct input_dev *dev,
375
341
return disposition ;
376
342
}
377
343
378
- static void input_handle_event (struct input_dev * dev ,
379
- unsigned int type , unsigned int code , int value )
344
+ static void input_event_dispose (struct input_dev * dev , int disposition ,
345
+ unsigned int type , unsigned int code , int value )
380
346
{
381
- int disposition ;
382
-
383
- /* filter-out events from inhibited devices */
384
- if (dev -> inhibited )
385
- return ;
386
-
387
- disposition = input_get_disposition (dev , type , code , & value );
388
- if (disposition != INPUT_IGNORE_EVENT && type != EV_SYN )
389
- add_input_randomness (type , code , value );
390
-
391
347
if ((disposition & INPUT_PASS_TO_DEVICE ) && dev -> event )
392
348
dev -> event (dev , type , code , value );
393
349
@@ -426,7 +382,22 @@ static void input_handle_event(struct input_dev *dev,
426
382
input_pass_values (dev , dev -> vals , dev -> num_vals );
427
383
dev -> num_vals = 0 ;
428
384
}
385
+ }
386
+
387
+ static void input_handle_event (struct input_dev * dev ,
388
+ unsigned int type , unsigned int code , int value )
389
+ {
390
+ int disposition ;
391
+
392
+ lockdep_assert_held (& dev -> event_lock );
393
+
394
+ disposition = input_get_disposition (dev , type , code , & value );
395
+ if (disposition != INPUT_IGNORE_EVENT ) {
396
+ if (type != EV_SYN )
397
+ add_input_randomness (type , code , value );
429
398
399
+ input_event_dispose (dev , disposition , type , code , value );
400
+ }
430
401
}
431
402
432
403
/**
@@ -613,7 +584,7 @@ static void __input_release_device(struct input_handle *handle)
613
584
lockdep_is_held (& dev -> mutex ));
614
585
if (grabber == handle ) {
615
586
rcu_assign_pointer (dev -> grab , NULL );
616
- /* Make sure input_pass_event () notices that grab is gone */
587
+ /* Make sure input_pass_values () notices that grab is gone */
617
588
synchronize_rcu ();
618
589
619
590
list_for_each_entry (handle , & dev -> h_list , d_node )
@@ -736,7 +707,7 @@ void input_close_device(struct input_handle *handle)
736
707
737
708
if (!-- handle -> open ) {
738
709
/*
739
- * synchronize_rcu() makes sure that input_pass_event ()
710
+ * synchronize_rcu() makes sure that input_pass_values ()
740
711
* completed and that no more input events are delivered
741
712
* through this handle
742
713
*/
@@ -758,14 +729,12 @@ static void input_dev_release_keys(struct input_dev *dev)
758
729
759
730
if (is_event_supported (EV_KEY , dev -> evbit , EV_MAX )) {
760
731
for_each_set_bit (code , dev -> key , KEY_CNT ) {
761
- input_pass_event (dev , EV_KEY , code , 0 );
732
+ input_handle_event (dev , EV_KEY , code , 0 );
762
733
need_sync = true;
763
734
}
764
735
765
736
if (need_sync )
766
- input_pass_event (dev , EV_SYN , SYN_REPORT , 1 );
767
-
768
- memset (dev -> key , 0 , sizeof (dev -> key ));
737
+ input_handle_event (dev , EV_SYN , SYN_REPORT , 1 );
769
738
}
770
739
}
771
740
@@ -1004,12 +973,16 @@ int input_set_keycode(struct input_dev *dev,
1004
973
} else if (test_bit (EV_KEY , dev -> evbit ) &&
1005
974
!is_event_supported (old_keycode , dev -> keybit , KEY_MAX ) &&
1006
975
__test_and_clear_bit (old_keycode , dev -> key )) {
1007
- struct input_value vals [] = {
1008
- { EV_KEY , old_keycode , 0 },
1009
- input_value_sync
1010
- };
1011
-
1012
- input_pass_values (dev , vals , ARRAY_SIZE (vals ));
976
+ /*
977
+ * We have to use input_event_dispose() here directly instead
978
+ * of input_handle_event() because the key we want to release
979
+ * here is considered no longer supported by the device and
980
+ * input_handle_event() will ignore it.
981
+ */
982
+ input_event_dispose (dev , INPUT_PASS_TO_HANDLERS ,
983
+ EV_KEY , old_keycode , 0 );
984
+ input_event_dispose (dev , INPUT_PASS_TO_HANDLERS | INPUT_FLUSH ,
985
+ EV_SYN , SYN_REPORT , 1 );
1013
986
}
1014
987
1015
988
out :
@@ -2259,6 +2232,34 @@ static void devm_input_device_unregister(struct device *dev, void *res)
2259
2232
__input_unregister_device (input );
2260
2233
}
2261
2234
2235
+ /*
2236
+ * Generate software autorepeat event. Note that we take
2237
+ * dev->event_lock here to avoid racing with input_event
2238
+ * which may cause keys get "stuck".
2239
+ */
2240
+ static void input_repeat_key (struct timer_list * t )
2241
+ {
2242
+ struct input_dev * dev = from_timer (dev , t , timer );
2243
+ unsigned long flags ;
2244
+
2245
+ spin_lock_irqsave (& dev -> event_lock , flags );
2246
+
2247
+ if (!dev -> inhibited &&
2248
+ test_bit (dev -> repeat_key , dev -> key ) &&
2249
+ is_event_supported (dev -> repeat_key , dev -> keybit , KEY_MAX )) {
2250
+
2251
+ input_set_timestamp (dev , ktime_get ());
2252
+ input_handle_event (dev , EV_KEY , dev -> repeat_key , 2 );
2253
+ input_handle_event (dev , EV_SYN , SYN_REPORT , 1 );
2254
+
2255
+ if (dev -> rep [REP_PERIOD ])
2256
+ mod_timer (& dev -> timer , jiffies +
2257
+ msecs_to_jiffies (dev -> rep [REP_PERIOD ]));
2258
+ }
2259
+
2260
+ spin_unlock_irqrestore (& dev -> event_lock , flags );
2261
+ }
2262
+
2262
2263
/**
2263
2264
* input_enable_softrepeat - enable software autorepeat
2264
2265
* @dev: input device
0 commit comments