From: Simon Glass <sjg@chromium.org>
Date: Wed, 11 Nov 2015 17:05:40 +0000 (-0700)
Subject: input: Allow updating of keyboard LEDs
X-Git-Tag: v2025.01-rc5-pxa1908~11121
X-Git-Url: http://git.dujemihanovic.xyz/img/html/index.html?a=commitdiff_plain;h=3b5f6f5001d0f3dfde98ccc6b9350fe74dac41f8;p=u-boot.git

input: Allow updating of keyboard LEDs

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>
---

diff --git a/drivers/input/input.c b/drivers/input/input.c
index 5de8d9d005..954ecec595 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -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;
diff --git a/include/input.h b/include/input.h
index c1af259e26..ad120e47f5 100644
--- a/include/input.h
+++ b/include/input.h
@@ -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
  *