[U-Boot] [PATCH v2 16/28] input: Allow repeat filtering to be disabled

Bin Meng bmeng.cn at gmail.com
Fri Oct 23 06:16:46 CEST 2015


On Mon, Oct 19, 2015 at 11:17 AM, Simon Glass <sjg at chromium.org> wrote:
> Generally the input library handles processing of a list of scanned keys.
> Repeated keys need to be generated based on a timer in this case, since all
> that is provided is a list of keys current depressed.
>
> Keyboards which do their own scanning will resend codes when they want to
> inject a repeating key. Provide a function which tells the input library to
> accept repeating keys and not to try to second-guess the caller.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v2: None
>
>  drivers/input/input.c |  9 +++++++--
>  include/input.h       | 19 +++++++++++++++++++
>  2 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/input.c b/drivers/input/input.c
> index 530bf51..fc1c45c 100644
> --- a/drivers/input/input.c
> +++ b/drivers/input/input.c
> @@ -413,8 +413,8 @@ static int _input_send_keycodes(struct input_config *config, int keycode[],
>                  * insert another character if we later realise that we
>                  * have missed a repeat slot.
>                  */
> -               is_repeat = config->repeat_rate_ms &&
> -                       (int)get_timer(config->next_repeat_ms) >= 0;
> +               is_repeat = config->allow_repeats || (config->repeat_rate_ms &&
> +                       (int)get_timer(config->next_repeat_ms) >= 0);
>                 if (!is_repeat)
>                         return 0;
>         }
> @@ -495,6 +495,11 @@ void input_set_delays(struct input_config *config, int repeat_delay_ms,
>         config->repeat_rate_ms = repeat_rate_ms;
>  }
>
> +void input_allow_repeats(struct input_config *config, bool allow_repeats)
> +{
> +       config->allow_repeats = allow_repeats;
> +}
> +
>  int input_add_tables(struct input_config *config)
>  {
>         int ret;
> diff --git a/include/input.h b/include/input.h
> index 9942d6f..e56f500 100644
> --- a/include/input.h
> +++ b/include/input.h
> @@ -57,6 +57,7 @@ struct input_config {
>          *              unknown
>          */
>         int (*read_keys)(struct input_config *config);
> +       bool allow_repeats;             /* Don't filter out repeats */
>         unsigned int next_repeat_ms;    /* Next time we repeat a key */
>         unsigned int repeat_delay_ms;   /* Time before autorepeat starts */
>         unsigned int repeat_rate_ms;    /* Autorepeat rate in ms */
> @@ -143,6 +144,24 @@ void input_set_delays(struct input_config *config, int repeat_delay_ms,
>                int repeat_rate_ms);
>
>  /**
> + * Tell the input layer whether to allow the caller to determine repeats
> + *
> + * Generally the input library handles processing of a list of scanned keys.
> + * Repeated keys need to be generated based on a timer in this case, since all
> + * that is provided is a list of keys current depressed.
> + *
> + * Keyboards which do their own scanning will resend codes when they want to
> + * inject a repeating key. This function can be called at start-up to select
> + * this behaviour.
> + *
> + * @param config       Input state
> + * @param allow_repeats        true to repeat depressed keys every time
> + *                     input_send_keycodes() is called, false to do normal
> + *                     keyboard repeat processing with a timer.
> + */
> +void input_allow_repeats(struct input_config *config, bool allow_repeats);
> +
> +/**
>   * 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 at gmail.com>


More information about the U-Boot mailing list