input: Allow updating of keyboard LEDs
authorSimon Glass <sjg@chromium.org>
Wed, 11 Nov 2015 17:05:40 +0000 (10:05 -0700)
committerSimon Glass <sjg@chromium.org>
Fri, 20 Nov 2015 03:13:41 +0000 (20:13 -0700)
Add a function which returns a new keyboard LED value when the LEDs need
updating.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
drivers/input/input.c
include/input.h

index 5de8d9d005d8b5ee0709bf5eb8b9a297a594fcf8..954ecec595efc0be4a3c82d2492ed8628c0870a3 100644 (file)
@@ -275,6 +275,7 @@ static struct input_key_xlate *process_modifier(struct input_config *config,
                        if (config->flags & FLAG_SCROLL_LOCK)
                                leds |= INPUT_LED_SCROLL;
                        config->leds = leds;
+                       config->leds_changed = flip;
                }
        }
 
@@ -586,6 +587,14 @@ void input_allow_repeats(struct input_config *config, bool allow_repeats)
        config->allow_repeats = allow_repeats;
 }
 
+int input_leds_changed(struct input_config *config)
+{
+       if (config->leds_changed)
+               return config->leds;
+
+       return -1;
+}
+
 int input_add_tables(struct input_config *config, bool german)
 {
        struct kbd_entry *entry;
index c1af259e265adb646d1e86b4d0f392d2c8897f6f..ad120e47f59b5e9a6bd689cf03e8fbe72d5b2bf5 100644 (file)
@@ -43,7 +43,8 @@ struct input_config {
        /* Which modifiers are active (1 bit for each MOD_... value) */
        uchar modifiers;
        uchar flags;            /* active state keys (FLAGS_...) */
-       uchar leds;             /* active LEDS (INPUT_LED_...) */
+       uchar leds;             /* active LEDs (INPUT_LED_...) */
+       uchar leds_changed;     /* LEDs that just changed */
        uchar num_tables;       /* number of modifier tables */
        int prev_keycodes[INPUT_BUFFER_LEN];    /* keys held last time */
        int num_prev_keycodes;  /* number of prev keys */
@@ -161,6 +162,17 @@ void input_set_delays(struct input_config *config, int repeat_delay_ms,
  */
 void input_allow_repeats(struct input_config *config, bool allow_repeats);
 
+/**
+ * Check if keyboard LEDs need to be updated
+ *
+ * This can be called after input_tstc() to see if keyboard LEDs need
+ * updating.
+ *
+ * @param config       Input state
+ * @return -1 if no LEDs need updating, other value if they do
+ */
+int input_leds_changed(struct input_config *config);
+
 /**
  * Set up the key map tables
  *