[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