diff --git a/recipes-connectivity/wifi/wifi-suspend.bb b/recipes-connectivity/wifi/wifi-suspend.bb new file mode 100644 index 0000000..8036c06 --- /dev/null +++ b/recipes-connectivity/wifi/wifi-suspend.bb @@ -0,0 +1,28 @@ +# Copyright (C) 2018, STMicroelectronics - All Rights Reserved + +DESCRIPTION = "Systemd service to suspend/resume correctly the wifi" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" + +SRC_URI = " \ + file://wifi_brcmfmac_driver.sh \ + file://wifi-brcmfmac-sleep.service \ + " + +inherit systemd +SYSTEMD_PACKAGES += "${PN}" +SYSTEMD_SERVICE_${PN} = "wifi-brcmfmac-sleep.service" + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/wifi_brcmfmac_driver.sh ${D}${bindir}/ + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system/ + + install -m 0644 ${WORKDIR}/wifi-brcmfmac-sleep.service ${D}${systemd_unitdir}/system/ + fi +} + +ALLOW_EMPTY_${PN} = "1" + diff --git a/recipes-connectivity/wifi/wifi-suspend/wifi-brcmfmac-sleep.service b/recipes-connectivity/wifi/wifi-suspend/wifi-brcmfmac-sleep.service new file mode 100644 index 0000000..5b029bb --- /dev/null +++ b/recipes-connectivity/wifi/wifi-suspend/wifi-brcmfmac-sleep.service @@ -0,0 +1,13 @@ +[Unit] +Description=Wifi brcmfmac sleep hook +Before=sleep.target +StopWhenUnneeded=yes + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=-/usr/bin/wifi_brcmfmac_driver.sh unbind +ExecStop=-/usr/bin/wifi_brcmfmac_driver.sh bind + +[Install] +WantedBy=sleep.target diff --git a/recipes-connectivity/wifi/wifi-suspend/wifi_brcmfmac_driver.sh b/recipes-connectivity/wifi/wifi-suspend/wifi_brcmfmac_driver.sh new file mode 100755 index 0000000..f3d303c --- /dev/null +++ b/recipes-connectivity/wifi/wifi-suspend/wifi_brcmfmac_driver.sh @@ -0,0 +1,29 @@ +#!/bin/sh +SDMMC_PATH=/sys/bus/amba/drivers/mmci-pl18x + +if [ -d $SDMMC_PATH ]; +then + + if [ ! -d /sys/bus/sdio/drivers/brcmfmac ]; + then + exit 1; + fi + +case $1 in +bind) + echo "bind driver brcmfmac/sdmmc"; + echo "bind driver brcmfmac/sdmmc" > /dev/kmsg + echo 58007000.sdmmc > $SDMMC_PATH/bind + ;; +unbind) + echo "unbind driver brcmfmac/sdmmc"; + echo "unbind driver brcmfmac/sdmmc" > /dev/kmsg + echo 58007000.sdmmc > $SDMMC_PATH/unbind + ;; +*) + echo "$0 [bind|unbind]" + echo "Bind/Unbind wifi driver brcmfmac." + ;; +esac + +fi