mirror of
https://github.com/agherzan/meta-raspberrypi.git
synced 2025-12-06 06:19:11 +00:00
recipes-bsp: Add support for gpio-shutdown
- Feature is enabled with ENABLE_GPIO_SHUTDOWN variable - Include the gpio-shutdown overlay - If using SysV init include the additional keymap and inittab entries to bind the KEY_POWER event - Systemd init does not require any additional bindings Signed-off-by: Otto Esko <otto.esko@gmail.com>
This commit is contained in:
committed by
Andrei Gherzan
parent
58cc662539
commit
bf2d2eae4e
@@ -34,6 +34,8 @@ ENABLE_UART ??= ""
|
||||
|
||||
WM8960="${@bb.utils.contains("MACHINE_FEATURES", "wm8960", "1", "0", d)}"
|
||||
|
||||
GPIO_SHUTDOWN_PIN ??= ""
|
||||
|
||||
inherit deploy nopackages
|
||||
|
||||
do_deploy() {
|
||||
@@ -253,6 +255,22 @@ do_deploy() {
|
||||
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=25" >>$CONFIG
|
||||
fi
|
||||
|
||||
|
||||
if [ "${ENABLE_GPIO_SHUTDOWN}" = "1" ]; then
|
||||
if ([ "${ENABLE_I2C}" = "1" ] || [ "${PITFT}" = "1" ]) && [ -z "${GPIO_SHUTDOWN_PIN}" ]; then
|
||||
# By default GPIO shutdown uses the same pin as the (master) I2C SCL.
|
||||
# If I2C is configured and an alternative pin is not configured for
|
||||
# gpio-shutdown, there is a configuration conflict.
|
||||
bbfatal "I2C and gpio-shutdown are both enabled and using the same pins!"
|
||||
fi
|
||||
echo "# Enable gpio-shutdown" >> $CONFIG
|
||||
if [ -z "${GPIO_SHUTDOWN_PIN}" ]; then
|
||||
echo "dtoverlay=gpio-shutdown" >> $CONFIG
|
||||
else
|
||||
echo "dtoverlay=gpio-shutdown,gpio_pin=${GPIO_SHUTDOWN_PIN}" >> $CONFIG
|
||||
fi
|
||||
fi
|
||||
|
||||
# Append extra config if the user has provided any
|
||||
printf "${RPI_EXTRA_CONFIG}\n" >> $CONFIG
|
||||
|
||||
|
||||
2
recipes-bsp/gpio-shutdown/files/bind_gpio_shutdown.tab
Normal file
2
recipes-bsp/gpio-shutdown/files/bind_gpio_shutdown.tab
Normal file
@@ -0,0 +1,2 @@
|
||||
# Action on special keypress (Key Power)
|
||||
kb::kbrequest:/sbin/shutdown -t1 -a -h -P now
|
||||
13
recipes-bsp/gpio-shutdown/files/gpio-shutdown-keymap.sh
Normal file
13
recipes-bsp/gpio-shutdown/files/gpio-shutdown-keymap.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
##
|
||||
# Bind the gpio-shutdown keycode as Keyboard signal and load it to the
|
||||
# keymap during startup.
|
||||
##
|
||||
case "$1" in
|
||||
start)
|
||||
# Inject the gpio keycode to keymap
|
||||
echo "keycode 116 = KeyboardSignal" | loadkeys
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
31
recipes-bsp/gpio-shutdown/gpio-shutdown.bb
Normal file
31
recipes-bsp/gpio-shutdown/gpio-shutdown.bb
Normal file
@@ -0,0 +1,31 @@
|
||||
SUMMARY = "GPIO shutdown bindings for SysV init"
|
||||
LICENSE = "GPLv2"
|
||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
|
||||
|
||||
SRC_URI = "file://bind_gpio_shutdown.tab \
|
||||
file://gpio-shutdown-keymap.sh \
|
||||
"
|
||||
|
||||
inherit update-rc.d
|
||||
|
||||
INITSCRIPT_NAME = "gpio-shutdown-keymap.sh"
|
||||
# Run only once during startup
|
||||
INITSCRIPT_PARAMS = "start 99 S ."
|
||||
|
||||
do_install() {
|
||||
# The files are only needed if using SysV init.
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
|
||||
install -d ${D}${sysconfdir} \
|
||||
${D}${sysconfdir}/inittab.d \
|
||||
${D}${sysconfdir}/init.d
|
||||
|
||||
install -m 0755 ${WORKDIR}/gpio-shutdown-keymap.sh ${D}${sysconfdir}/init.d/
|
||||
install -m 0755 ${WORKDIR}/bind_gpio_shutdown.tab ${D}${sysconfdir}/inittab.d/
|
||||
elif ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
||||
# Systemd init does not require any configuration.
|
||||
# Note: cannot have an empty branch, hence the redundant dir install.
|
||||
install -d ${D}${sysconfdir}
|
||||
else
|
||||
bbwarn "Not using sysvinit or systemd. The gpio-shutdown may require additional configuration."
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user