summaryrefslogtreecommitdiffstats
path: root/drivers/input/specialkeys.c
blob: a3f2bf4e4f48418143d587713d1497b36e39f854 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2019 Ahmad Fatoum, Pengutronix

#include <common.h>
#include <restart.h>
#include <poweroff.h>
#include <init.h>
#include <input/input.h>
#include <dt-bindings/input/linux-event-codes.h>

static void input_specialkeys_notify(struct input_notifier *in,
				     struct input_event *ev)
{
	switch (ev->code) {
	case KEY_RESTART:
		pr_info("Triggering reset due to special key.\n");
		restart_machine();
		break;

	case KEY_POWER:
		pr_info("Triggering poweroff due to special key.\n");
		poweroff_machine();
		break;
	}

	pr_debug("ignoring code: %d\n", ev->code);
}

static struct input_notifier notifier;

static int input_specialkeys_init(void)
{
	notifier.notify = input_specialkeys_notify;
	return input_register_notfier(&notifier);
}
late_initcall(input_specialkeys_init);