diff options
Diffstat (limited to 'drivers/input/keyboard')
-rw-r--r-- | drivers/input/keyboard/atkbd.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 904d4c9fbf22..73b530424729 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
@@ -770,6 +770,30 @@ static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra | |||
770 | return 3; | 770 | return 3; |
771 | } | 771 | } |
772 | 772 | ||
773 | static int atkbd_reset_state(struct atkbd *atkbd) | ||
774 | { | ||
775 | struct ps2dev *ps2dev = &atkbd->ps2dev; | ||
776 | unsigned char param[1]; | ||
777 | |||
778 | /* | ||
779 | * Set the LEDs to a predefined state (all off). | ||
780 | */ | ||
781 | |||
782 | param[0] = 0; | ||
783 | if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS)) | ||
784 | return -1; | ||
785 | |||
786 | /* | ||
787 | * Set autorepeat to fastest possible. | ||
788 | */ | ||
789 | |||
790 | param[0] = 0; | ||
791 | if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP)) | ||
792 | return -1; | ||
793 | |||
794 | return 0; | ||
795 | } | ||
796 | |||
773 | static int atkbd_activate(struct atkbd *atkbd) | 797 | static int atkbd_activate(struct atkbd *atkbd) |
774 | { | 798 | { |
775 | struct ps2dev *ps2dev = &atkbd->ps2dev; | 799 | struct ps2dev *ps2dev = &atkbd->ps2dev; |
@@ -1087,6 +1111,7 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv) | |||
1087 | } | 1111 | } |
1088 | 1112 | ||
1089 | atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra); | 1113 | atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra); |
1114 | atkbd_reset_state(atkbd); | ||
1090 | atkbd_activate(atkbd); | 1115 | atkbd_activate(atkbd); |
1091 | 1116 | ||
1092 | } else { | 1117 | } else { |
@@ -1267,6 +1292,7 @@ static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t coun | |||
1267 | 1292 | ||
1268 | atkbd->dev = new_dev; | 1293 | atkbd->dev = new_dev; |
1269 | atkbd->set = atkbd_select_set(atkbd, atkbd->set, value); | 1294 | atkbd->set = atkbd_select_set(atkbd, atkbd->set, value); |
1295 | atkbd_reset_state(atkbd); | ||
1270 | atkbd_activate(atkbd); | 1296 | atkbd_activate(atkbd); |
1271 | atkbd_set_keycode_table(atkbd); | 1297 | atkbd_set_keycode_table(atkbd); |
1272 | atkbd_set_device_attrs(atkbd); | 1298 | atkbd_set_device_attrs(atkbd); |