Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: "A new driver for slidebar on Ideapad laptops and a bunch of assorted driver fixes" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (32 commits) Input: add SYN_MAX and SYN_CNT constants Input: max11801_ts - convert to devm Input: egalax-ts - fix typo and improve text Input: MAINTAINERS - change maintainer for cyttsp driver Input: cyttsp4 - kill 'defined but not used' compiler warnings Input: add driver for slidebar on Lenovo IdeaPad laptops Input: omap-keypad - set up irq type from DT Input: omap-keypad - enable wakeup capability for keypad. Input: omap-keypad - clear interrupts on open Input: omap-keypad - convert to threaded IRQ Input: omap-keypad - use bitfiled instead of hardcoded values Input: cyttsp4 - remove useless NULL test from cyttsp4_watchdog_timer() Input: wacom - fix error return code in wacom_probe() Input: as5011 - fix error return code in as5011_probe() Input: keyboard, serio - simplify use of devm_ioremap_resource Input: tegra-kbc - simplify use of devm_ioremap_resource Input: htcpen - fix incorrect placement of __initdata Input: qt1070 - add power management ops Input: wistron_btns - add MODULE_DEVICE_TABLE Input: wistron_btns - mark the Medion MD96500 keymap as tested ...
This commit is contained in:
@@ -45,6 +45,7 @@
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/irq_regs.h>
|
||||
@@ -681,6 +682,40 @@ static void sysrq_detect_reset_sequence(struct sysrq_state *state,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static void sysrq_of_get_keyreset_config(void)
|
||||
{
|
||||
u32 key;
|
||||
struct device_node *np;
|
||||
struct property *prop;
|
||||
const __be32 *p;
|
||||
|
||||
np = of_find_node_by_path("/chosen/linux,sysrq-reset-seq");
|
||||
if (!np) {
|
||||
pr_debug("No sysrq node found");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Reset in case a __weak definition was present */
|
||||
sysrq_reset_seq_len = 0;
|
||||
|
||||
of_property_for_each_u32(np, "keyset", prop, p, key) {
|
||||
if (key == KEY_RESERVED || key > KEY_MAX ||
|
||||
sysrq_reset_seq_len == SYSRQ_KEY_RESET_MAX)
|
||||
break;
|
||||
|
||||
sysrq_reset_seq[sysrq_reset_seq_len++] = (unsigned short)key;
|
||||
}
|
||||
|
||||
/* Get reset timeout if any. */
|
||||
of_property_read_u32(np, "timeout-ms", &sysrq_reset_downtime_ms);
|
||||
}
|
||||
#else
|
||||
static void sysrq_of_get_keyreset_config(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static void sysrq_reinject_alt_sysrq(struct work_struct *work)
|
||||
{
|
||||
struct sysrq_state *sysrq =
|
||||
@@ -914,6 +949,7 @@ static inline void sysrq_register_handler(void)
|
||||
int error;
|
||||
int i;
|
||||
|
||||
/* First check if a __weak interface was instantiated. */
|
||||
for (i = 0; i < ARRAY_SIZE(sysrq_reset_seq); i++) {
|
||||
key = platform_sysrq_reset_seq[i];
|
||||
if (key == KEY_RESERVED || key > KEY_MAX)
|
||||
@@ -922,6 +958,12 @@ static inline void sysrq_register_handler(void)
|
||||
sysrq_reset_seq[sysrq_reset_seq_len++] = key;
|
||||
}
|
||||
|
||||
/*
|
||||
* DT configuration takes precedence over anything that would
|
||||
* have been defined via the __weak interface.
|
||||
*/
|
||||
sysrq_of_get_keyreset_config();
|
||||
|
||||
error = input_register_handler(&sysrq_handler);
|
||||
if (error)
|
||||
pr_err("Failed to register input handler, error %d", error);
|
||||
|
Reference in New Issue
Block a user