input: keyreset: Allow reset function to be overriden
Change-Id: Ibb3dda05772b2e89d7b2646689944d309cb1f74e Signed-off-by: Colin Cross <ccross@android.com>
This commit is contained in:
@@ -33,6 +33,7 @@ struct keyreset_state {
|
|||||||
int key_down;
|
int key_down;
|
||||||
int key_up;
|
int key_up;
|
||||||
int restart_disabled;
|
int restart_disabled;
|
||||||
|
int (*reset_fn)(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
int restart_requested;
|
int restart_requested;
|
||||||
@@ -88,9 +89,13 @@ static void keyreset_event(struct input_handle *handle, unsigned int type,
|
|||||||
if (restart_requested)
|
if (restart_requested)
|
||||||
panic("keyboard reset failed, %d", restart_requested);
|
panic("keyboard reset failed, %d", restart_requested);
|
||||||
pr_info("keyboard reset\n");
|
pr_info("keyboard reset\n");
|
||||||
|
if (state->reset_fn) {
|
||||||
|
restart_requested = state->reset_fn();
|
||||||
|
} else {
|
||||||
schedule_work(&restart_work);
|
schedule_work(&restart_work);
|
||||||
restart_requested = 1;
|
restart_requested = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
done:
|
done:
|
||||||
spin_unlock_irqrestore(&state->lock, flags);
|
spin_unlock_irqrestore(&state->lock, flags);
|
||||||
}
|
}
|
||||||
@@ -187,6 +192,10 @@ static int keyreset_probe(struct platform_device *pdev)
|
|||||||
__set_bit(key, state->upbit);
|
__set_bit(key, state->upbit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pdata->reset_fn)
|
||||||
|
state->reset_fn = pdata->reset_fn;
|
||||||
|
|
||||||
state->input_handler.event = keyreset_event;
|
state->input_handler.event = keyreset_event;
|
||||||
state->input_handler.connect = keyreset_connect;
|
state->input_handler.connect = keyreset_connect;
|
||||||
state->input_handler.disconnect = keyreset_disconnect;
|
state->input_handler.disconnect = keyreset_disconnect;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#define KEYRESET_NAME "keyreset"
|
#define KEYRESET_NAME "keyreset"
|
||||||
|
|
||||||
struct keyreset_platform_data {
|
struct keyreset_platform_data {
|
||||||
|
int (*reset_fn)(void);
|
||||||
int *keys_up;
|
int *keys_up;
|
||||||
int keys_down[]; /* 0 terminated */
|
int keys_down[]; /* 0 terminated */
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user