mirror of
git://git.yoctoproject.org/meta-raspberrypi.git
synced 2025-07-19 21:09:03 +02: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:
parent
58cc662539
commit
bf2d2eae4e
|
@ -23,6 +23,7 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
|
||||||
overlays/gpio-ir-tx.dtbo \
|
overlays/gpio-ir-tx.dtbo \
|
||||||
overlays/gpio-key.dtbo \
|
overlays/gpio-key.dtbo \
|
||||||
overlays/gpio-poweroff.dtbo \
|
overlays/gpio-poweroff.dtbo \
|
||||||
|
overlays/gpio-shutdown.dtbo \
|
||||||
overlays/hifiberry-amp.dtbo \
|
overlays/hifiberry-amp.dtbo \
|
||||||
overlays/hifiberry-dac.dtbo \
|
overlays/hifiberry-dac.dtbo \
|
||||||
overlays/hifiberry-dacplus.dtbo \
|
overlays/hifiberry-dacplus.dtbo \
|
||||||
|
@ -97,6 +98,7 @@ MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
|
||||||
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules udev-rules-rpi"
|
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules udev-rules-rpi"
|
||||||
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_I2C', '1', 'kernel-module-i2c-dev kernel-module-i2c-bcm2708', '', d)}"
|
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_I2C', '1', 'kernel-module-i2c-dev kernel-module-i2c-bcm2708', '', d)}"
|
||||||
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_IR', '1', 'kernel-module-gpio-ir kernel-module-gpio-ir-tx', '', d)}"
|
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_IR', '1', 'kernel-module-gpio-ir kernel-module-gpio-ir-tx', '', d)}"
|
||||||
|
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_GPIO_SHUTDOWN', '1', 'gpio-shutdown kernel-module-gpio-keys', '', d)}"
|
||||||
|
|
||||||
SERIAL_CONSOLES_CHECK ??= "${SERIAL_CONSOLES}"
|
SERIAL_CONSOLES_CHECK ??= "${SERIAL_CONSOLES}"
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,8 @@ ENABLE_UART ??= ""
|
||||||
|
|
||||||
WM8960="${@bb.utils.contains("MACHINE_FEATURES", "wm8960", "1", "0", d)}"
|
WM8960="${@bb.utils.contains("MACHINE_FEATURES", "wm8960", "1", "0", d)}"
|
||||||
|
|
||||||
|
GPIO_SHUTDOWN_PIN ??= ""
|
||||||
|
|
||||||
inherit deploy nopackages
|
inherit deploy nopackages
|
||||||
|
|
||||||
do_deploy() {
|
do_deploy() {
|
||||||
|
@ -253,6 +255,22 @@ do_deploy() {
|
||||||
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=25" >>$CONFIG
|
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=25" >>$CONFIG
|
||||||
fi
|
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
|
# Append extra config if the user has provided any
|
||||||
printf "${RPI_EXTRA_CONFIG}\n" >> $CONFIG
|
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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user