From: Colin Cross Date: Fri, 7 Jan 2011 22:52:56 +0000 (-0800) Subject: input: keyreset: Allow reset function to be overriden X-Git-Tag: firefly_0821_release~9833^2~5^2~44 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=77fc4228f72d803cace13cfec6a4076b38601bd5;p=firefly-linux-kernel-4.4.55.git input: keyreset: Allow reset function to be overriden Change-Id: Ibb3dda05772b2e89d7b2646689944d309cb1f74e Signed-off-by: Colin Cross --- diff --git a/drivers/input/keyreset.c b/drivers/input/keyreset.c index b51350602fc3..a5091ac19bbe 100644 --- a/drivers/input/keyreset.c +++ b/drivers/input/keyreset.c @@ -33,6 +33,7 @@ struct keyreset_state { int key_down; int key_up; int restart_disabled; + int (*reset_fn)(void); }; int restart_requested; @@ -88,8 +89,12 @@ static void keyreset_event(struct input_handle *handle, unsigned int type, if (restart_requested) panic("keyboard reset failed, %d", restart_requested); pr_info("keyboard reset\n"); - schedule_work(&restart_work); - restart_requested = 1; + if (state->reset_fn) { + restart_requested = state->reset_fn(); + } else { + schedule_work(&restart_work); + restart_requested = 1; + } } done: spin_unlock_irqrestore(&state->lock, flags); @@ -187,6 +192,10 @@ static int keyreset_probe(struct platform_device *pdev) __set_bit(key, state->upbit); } } + + if (pdata->reset_fn) + state->reset_fn = pdata->reset_fn; + state->input_handler.event = keyreset_event; state->input_handler.connect = keyreset_connect; state->input_handler.disconnect = keyreset_disconnect; diff --git a/include/linux/keyreset.h b/include/linux/keyreset.h index 50c4b952b8f7..a2ac49e5b684 100644 --- a/include/linux/keyreset.h +++ b/include/linux/keyreset.h @@ -20,6 +20,7 @@ #define KEYRESET_NAME "keyreset" struct keyreset_platform_data { + int (*reset_fn)(void); int *keys_up; int keys_down[]; /* 0 terminated */ };