24
24
#include <linux/mutex.h>
25
25
#include <linux/rcupdate.h>
26
26
#include "input-compat.h"
27
+ #include "input-core-private.h"
27
28
#include "input-poller.h"
28
29
29
30
MODULE_AUTHOR (
"Vojtech Pavlik <[email protected] >" );
@@ -142,6 +143,8 @@ static void input_pass_values(struct input_dev *dev,
142
143
struct input_handle * handle ;
143
144
struct input_value * v ;
144
145
146
+ lockdep_assert_held (& dev -> event_lock );
147
+
145
148
if (!count )
146
149
return ;
147
150
@@ -384,8 +387,8 @@ static void input_event_dispose(struct input_dev *dev, int disposition,
384
387
}
385
388
}
386
389
387
- static void input_handle_event (struct input_dev * dev ,
388
- unsigned int type , unsigned int code , int value )
390
+ void input_handle_event (struct input_dev * dev ,
391
+ unsigned int type , unsigned int code , int value )
389
392
{
390
393
int disposition ;
391
394
@@ -722,20 +725,21 @@ EXPORT_SYMBOL(input_close_device);
722
725
* Simulate keyup events for all keys that are marked as pressed.
723
726
* The function must be called with dev->event_lock held.
724
727
*/
725
- static void input_dev_release_keys (struct input_dev * dev )
728
+ static bool input_dev_release_keys (struct input_dev * dev )
726
729
{
727
730
bool need_sync = false;
728
731
int code ;
729
732
733
+ lockdep_assert_held (& dev -> event_lock );
734
+
730
735
if (is_event_supported (EV_KEY , dev -> evbit , EV_MAX )) {
731
736
for_each_set_bit (code , dev -> key , KEY_CNT ) {
732
737
input_handle_event (dev , EV_KEY , code , 0 );
733
738
need_sync = true;
734
739
}
735
-
736
- if (need_sync )
737
- input_handle_event (dev , EV_SYN , SYN_REPORT , 1 );
738
740
}
741
+
742
+ return need_sync ;
739
743
}
740
744
741
745
/*
@@ -762,7 +766,8 @@ static void input_disconnect_device(struct input_dev *dev)
762
766
* generate events even after we done here but they will not
763
767
* reach any handlers.
764
768
*/
765
- input_dev_release_keys (dev );
769
+ if (input_dev_release_keys (dev ))
770
+ input_handle_event (dev , EV_SYN , SYN_REPORT , 1 );
766
771
767
772
list_for_each_entry (handle , & dev -> h_list , d_node )
768
773
handle -> open = 0 ;
@@ -1757,7 +1762,8 @@ void input_reset_device(struct input_dev *dev)
1757
1762
spin_lock_irqsave (& dev -> event_lock , flags );
1758
1763
1759
1764
input_dev_toggle (dev , true);
1760
- input_dev_release_keys (dev );
1765
+ if (input_dev_release_keys (dev ))
1766
+ input_handle_event (dev , EV_SYN , SYN_REPORT , 1 );
1761
1767
1762
1768
spin_unlock_irqrestore (& dev -> event_lock , flags );
1763
1769
mutex_unlock (& dev -> mutex );
@@ -1779,7 +1785,9 @@ static int input_inhibit_device(struct input_dev *dev)
1779
1785
}
1780
1786
1781
1787
spin_lock_irq (& dev -> event_lock );
1788
+ input_mt_release_slots (dev );
1782
1789
input_dev_release_keys (dev );
1790
+ input_handle_event (dev , EV_SYN , SYN_REPORT , 1 );
1783
1791
input_dev_toggle (dev , false);
1784
1792
spin_unlock_irq (& dev -> event_lock );
1785
1793
@@ -1830,7 +1838,8 @@ static int input_dev_suspend(struct device *dev)
1830
1838
* Keys that are pressed now are unlikely to be
1831
1839
* still pressed when we resume.
1832
1840
*/
1833
- input_dev_release_keys (input_dev );
1841
+ if (input_dev_release_keys (input_dev ))
1842
+ input_handle_event (input_dev , EV_SYN , SYN_REPORT , 1 );
1834
1843
1835
1844
/* Turn off LEDs and sounds, if any are active. */
1836
1845
input_dev_toggle (input_dev , false);
@@ -1864,7 +1873,8 @@ static int input_dev_freeze(struct device *dev)
1864
1873
* Keys that are pressed now are unlikely to be
1865
1874
* still pressed when we resume.
1866
1875
*/
1867
- input_dev_release_keys (input_dev );
1876
+ if (input_dev_release_keys (input_dev ))
1877
+ input_handle_event (input_dev , EV_SYN , SYN_REPORT , 1 );
1868
1878
1869
1879
spin_unlock_irq (& input_dev -> event_lock );
1870
1880
0 commit comments