On Mon, Oct 19, 2015 at 11:17 AM, Simon Glass <s...@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 <s...@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...@gmail.com> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot