diff mbox

[U-Boot,v3,04/12] input: Allow updating of keyboard LEDs

Message ID 1447261548-14304-5-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass Nov. 11, 2015, 5:05 p.m. UTC
Add a function which returns a new keyboard LED value when the LEDs need
updating.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3: None
Changes in v2: None

 drivers/input/input.c |  9 +++++++++
 include/input.h       | 14 +++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

Comments

Bin Meng Nov. 12, 2015, 1:50 p.m. UTC | #1
On Thu, Nov 12, 2015 at 1:05 AM, Simon Glass <sjg@chromium.org> wrote:
> Add a function which returns a new keyboard LED value when the LEDs need
> updating.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes in v3: None
> Changes in v2: None
>
>  drivers/input/input.c |  9 +++++++++
>  include/input.h       | 14 +++++++++++++-
>  2 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/input/input.c b/drivers/input/input.c
> index a8a15c9..bf1acdc 100644
> --- a/drivers/input/input.c
> +++ b/drivers/input/input.c
> @@ -276,6 +276,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;
>                 }
>         }
>
> @@ -587,6 +588,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 c1af259..ad120e4 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 */
> @@ -162,6 +163,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
>   *
>   * This must be called after input_init() or keycode decoding will not work.
> --

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Simon Glass Nov. 14, 2015, 2:04 a.m. UTC | #2
Applied to u-boot-dm.
diff mbox

Patch

diff --git a/drivers/input/input.c b/drivers/input/input.c
index a8a15c9..bf1acdc 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -276,6 +276,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;
 		}
 	}
 
@@ -587,6 +588,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 c1af259..ad120e4 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 */
@@ -162,6 +163,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
  *
  * This must be called after input_init() or keycode decoding will not work.