diff options
Diffstat (limited to 'meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper')
3 files changed, 87 insertions, 0 deletions
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service new file mode 100644 index 000000000..f8eda0cba --- /dev/null +++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service @@ -0,0 +1,9 @@ +[Unit] +Description=Bluetooth HCI UART support +Requires=dev-ttymxc2.device +After=dev-ttymxc2.device +Before=bluetooth.service + +[Service] +Type=forking +ExecStart=/usr/sbin/hci-uart-helper.sh diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh new file mode 100644 index 000000000..e1aa31c06 --- /dev/null +++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Script to attach HCI UART devices on i.MX8MQ EVK/EVKB +# +# NOTE: +# For the most part errors are ignored and the script returns +# 0/success so BlueZ will still be started if the script is somehow +# run on a board without the expected hardware. However, if the +# various probing succeeds and hciattach is run, the script returns +# the resulting exit code if hciattach fails. + +COMPAT=/sys/firmware/devicetree/base/compatible +HCITTY=/dev/ttymxc2 +PCIDEV=/sys/bus/pci/devices/0000:01:00.0 + +if [ ! \( -f "$COMPAT" -a -c "$HCITTY" \) ]; then + exit 0 +fi + +found=false +for c in `cat $COMPAT | tr '\0' ' '`; do + echo "c = $c" + if echo $c | grep -q '^fsl,imx8mq-evk$'; then + found=true + break + fi +done +if ! $found; then + echo "i.MX8MQ EVK not found!" + exit 0 +fi + +if [ -f "$PCIDEV/vendor" -a -f "$PCIDEV/device" ]; then + vendor=`cat $PCIDEV/vendor` + device=`cat $PCIDEV/device` +fi + +rc=0 +if [ "$vendor" = "0x14e4" -a "$device" = "0x43ec" ]; then + # Broadcom 5436 on EVKB + hciattach $HCITTY bcm43xx + rc=$? +elif [ "$vendor" = "0x168c" -a "$device" = "0x003e" ]; then + # Qualcomm (nee Atheros) 6174 on EVK + hciattach $HCITTY qualcomm + rc=$? +fi +exit $rc diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb new file mode 100644 index 000000000..e497a4a21 --- /dev/null +++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb @@ -0,0 +1,30 @@ +SUMMARY = "Helper for enabling UART connected HCI Bluetooth devices" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" + +inherit systemd allarch + +SRC_URI = "file://hci-uart-helper.service \ + file://hci-uart-helper.sh \ +" + +COMPATIBLE_MACHINE = "imx8mqevk" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install() { + # Install helper script + install -d ${D}${sbindir} + install -m 0755 ${WORKDIR}/hci-uart-helper.sh ${D}${sbindir}/ + + # Install systemd unit + install -d ${D}${systemd_system_unitdir}/ + install -m 0644 ${WORKDIR}/hci-uart-helper.service ${D}${systemd_system_unitdir}/ + install -d ${D}${systemd_system_unitdir}/bluetooth.service.wants + ln -s ../hci-uart-helper.service ${D}${systemd_system_unitdir}/bluetooth.service.wants/ +} + +FILES_${PN} += "${systemd_system_unitdir}" + +RDEPENDS_${PN} += "bluez5" |