aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBin Meng2015-11-12 05:33:02 -0800
committerSimon Glass2015-11-19 20:13:41 -0700
commitcd810918fd638df4e91f232ec889896c6155440a (patch)
tree2e20db88ed9c5f73a863154c1470d548e4e08ee9
parent533c81a94988362fe7379bebd13ee0f701b38454 (diff)
input: Call keyboard's update_leds() method when the LEDs change
We should request keyboard to turn on/off its LED when detecting any changes on the LEDs. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org> Minor changes to allow this to build without CONFIG_DM_KEYBOARD: Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/input/input.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 575f4b66f0a..e02e2643c9f 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -8,9 +8,13 @@
*/
#include <common.h>
+#include <dm.h>
#include <errno.h>
#include <stdio_dev.h>
#include <input.h>
+#ifdef CONFIG_DM_KEYBOARD
+#include <keyboard.h>
+#endif
#include <linux/input.h>
enum {
@@ -235,6 +239,10 @@ int input_getc(struct input_config *config)
static struct input_key_xlate *process_modifier(struct input_config *config,
int key, int release)
{
+#ifdef CONFIG_DM_KEYBOARD
+ struct udevice *dev = config->dev;
+ struct keyboard_ops *ops = keyboard_get_ops(dev);
+#endif
struct input_key_xlate *table;
int i;
@@ -276,6 +284,13 @@ static struct input_key_xlate *process_modifier(struct input_config *config,
leds |= INPUT_LED_SCROLL;
config->leds = leds;
config->leds_changed = flip;
+
+#ifdef CONFIG_DM_KEYBOARD
+ if (ops->update_leds) {
+ if (ops->update_leds(dev, config->leds))
+ debug("Update keyboard's LED failed\n");
+ }
+#endif
}
}