From 7c0b84fe57d80b2e9cb7e3e6db732559d8395180 Mon Sep 17 00:00:00 2001
From: Sebastian Panceac <sebastian@balena.io>
Date: Mon, 4 Mar 2019 16:14:45 +0100
Subject: [PATCH] Add nanopi-air-bt package

This package contains an udev rule, an initialization script
and systemd service for the Ampak AP6212 bluetooth module
used on Nanopi Neo Air

Signed-off-by: Sebastian Panceac <sebastian@balena.io>
---
 .../nanopi-air-bt/nanopi-air-bt.bb            | 32 +++++++++++++++++++
 .../nanopi-air-bt/99-nanopi-air-bt.rules      |  1 +
 .../nanopi-air-bt/nanopi-air-bt-start         | 17 ++++++++++
 .../nanopi-air-bt/nanopi-air-bt@.service      |  9 ++++++
 4 files changed, 59 insertions(+)
 create mode 100644 layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt.bb
 create mode 100644 layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/99-nanopi-air-bt.rules
 create mode 100755 layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt-start
 create mode 100644 layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt@.service

diff --git a/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt.bb b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt.bb
new file mode 100644
index 0000000..b86c516
--- /dev/null
+++ b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Enable bluetooth on Nanopi Neo Air boards"
+
+LICENSE="Apache-2.0"
+LIC_FILES_CHKSUM = "file://${RESIN_COREBASE}/COPYING.Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+DESCRIPTION = "Package contains udev rule, systemd service and a script to init the Ampak 6212A \
+bluetooth chip for the Nanopi Neo Air board"
+
+S = "${WORKDIR}"
+
+SRC_URI = "file://99-nanopi-air-bt.rules \
+    file://nanopi-air-bt@.service \
+    file://nanopi-air-bt-start \
+"
+
+do_install() {
+    mkdir -p ${D}/usr/bin
+    mkdir -p ${D}/lib/udev/rules.d
+    install -m 0644 99-nanopi-air-bt.rules ${D}/lib/udev/rules.d
+    install -m 0744 nanopi-air-bt-start ${D}/usr/bin
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -d ${D}${systemd_unitdir}/system
+        install -m 0644 ${WORKDIR}/nanopi-air-bt@.service ${D}${systemd_unitdir}/system
+    fi
+}
+
+FILES_${PN} = " \
+  /lib/udev/rules.d/99-nanopi-air-bt.rules \
+  /lib/systemd/system/nanopi-air-bt@.service \
+  /usr/bin/nanopi-air-bt-start \
+"
diff --git a/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/99-nanopi-air-bt.rules b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/99-nanopi-air-bt.rules
new file mode 100644
index 0000000..61d7e6b
--- /dev/null
+++ b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/99-nanopi-air-bt.rules
@@ -0,0 +1 @@
+ACTION=="add", SUBSYSTEM=="tty", ATTR{iomem_base}=="0x1C28C00", TAG+="systemd", ENV{SYSTEMD_WANTS}="nanopi-air-bt@'%E{DEVNAME}'.service"
diff --git a/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt-start b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt-start
new file mode 100755
index 0000000..d1b2b5f
--- /dev/null
+++ b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt-start
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+if [ $# -lt 1 ]; then
+        echo "Interface argument missing ... /dev/ttyX"
+        exit 1
+fi
+
+echo 205 > /sys/class/gpio/export
+echo out > /sys/class/gpio/gpio205/direction
+
+# Reset BT
+echo "Resetting BT chip"
+echo 0 > /sys/class/gpio/gpio205/value
+echo 1 > /sys/class/gpio/gpio205/value
+
+/usr/bin/brcm_patchram_plus -d --patchram /lib/firmware/brcm/bcm43438a1.hcd --no2bytes --tosleep 5000 $1 > /tmp/brcm_log 2>&1
+hciattach -n $1 bcm43xx 115200 flow
diff --git a/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt@.service b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt@.service
new file mode 100644
index 0000000..40f7b29
--- /dev/null
+++ b/layers/meta-resin-allwinner/recipes-bsp/nanopi-air-bt/nanopi-air-bt/nanopi-air-bt@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Ampak AP6212A Bluetooth HCI on Nanopi Neo Air
+
+[Service]
+Type=simple
+ExecStart=/bin/bash /usr/bin/nanopi-air-bt-start %I
+
+[Install]
+WantedBy=multi-user.target