[systemd-devel] GPIO Reset Button
Koen Kooi
koen at dominion.thruhere.net
Sat Nov 17 05:20:18 PST 2012
Op 10 nov. 2012, om 01:17 heeft Lennart Poettering <lennart at poettering.net> het volgende geschreven:
> On Fri, 02.11.12 09:56, Pawel Pastuszak (pawelpastuszak at gmail.com) wrote:
>
>> Hi all,
>>
>> I was wondering if there is an way to attach an GPIO line to reboot the
>> system. I am currently working on an Embedded device that has an GPIO line
>> which needs to act as an reboot button this GPIO comes up as an
>> /sys/class/gpio/gpio103/ which i want to have it trigger when it switches
>> state to low and do an system soft reboot. Does systemd allow any
>> functionally like this?
>
> No. We only look for input devices marked with the "power-switch"
> tag.
>
> The kernel can create input devices for GPIO lines
> (CONFIG_KEYBOARD_GPIO), IIRC? Maybe that's useful to achieve this?
It should be a matter of:
static struct gpio_keys_button my_awesome_gpio_keys[] = {
{
.code = KEY_POWER,
.gpio = GPIO_TO_PIN(1, 16),
.active_low = true,
.desc = "left",
.type = EV_KEY,
.wakeup = 1,
},
};
static struct gpio_keys_platform_data my_awesome_gpio_key_info = {
.buttons = my_awesome_gpio_keys,
.nbuttons = ARRAY_SIZE(my_awesome_gpio_keys),
};
static struct platform_device my_awesome_keys = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &my_awesome_gpio_key_info,
},
};
Or with devicetree:
gpio_keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&bone_lcd3_cape_keys_00A0_pins>; // add a pinctrl section about if needed, otherwise delete these 2 lines
#address-cells = <1>;
#size-cells = <0>;
button at 1 {
debounce_interval = <50>;
linux,code = <105>; // replace with proper KEY_POWER code
label = "left";
gpios = <&gpio2 16 0x0>;
gpio-key,wakeup;
autorepeat;
};
};
That will give you a native evdev device that emits KEY_POWER when you toggle the GPIO.
regards,
Koen
More information about the systemd-devel
mailing list