aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2018-12-18 21:48:59 -0500
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2018-12-19 03:06:37 +0000
commitf1d90e941910c50b7ea1e9b8a6119d31c308e67d (patch)
tree2fd6c3247f8ff4ac985f6dac6e4fa53d54881f06
parent4091efd9ed80566bf9e3cbba6a414431462a4c27 (diff)
Add udev rules and scripts for demo platform configuration
Add recipes for udev rules and associated scripts provided by Jan-Simon Möller to: 1) Support USB attached I2C devices for RTC and HVAC LED support. The RTC support loads and configures the required rtc-ds1307 driver, and sets the time from the RTC clock. The HVAC LED support configures the LED device names for use by the HVAC binding. 2) Detect Fiberdyne MOST attached amp and install the required 4A HAL. The new demo-i2c-udev-conf and demo-most-udev-conf recipes are added to DEMO_PLATFORM_CONF variable in packagegroup-agl-demo-platform to have them added to the agl-demo-platform image. Since they use udev rules to detect the corresponding hardware, this should be safe for all platforms. Change-Id: I9dc78b8e63418079d14e1d1e2a832840a0c97ea8 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-rw-r--r--recipes-core/udev/demo-i2c-udev-conf/99-agl-led-rtc.rules20
-rwxr-xr-xrecipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite.sh22
-rw-r--r--recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite@.service8
-rw-r--r--recipes-core/udev/demo-i2c-udev-conf/hvac.json.in7
-rwxr-xr-xrecipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach.sh11
-rw-r--r--recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach@.service4
-rw-r--r--recipes-core/udev/demo-i2c-udev-conf_1.0.bb35
-rw-r--r--recipes-core/udev/demo-most-udev-conf/99-agl-fibredyne-amp.rules8
-rw-r--r--recipes-core/udev/demo-most-udev-conf/enable-agl-demo-hal.sh7
-rw-r--r--recipes-core/udev/demo-most-udev-conf_1.0.bb19
-rwxr-xr-xrecipes-platform/packagegroups/packagegroup-agl-demo-platform.bb14
11 files changed, 152 insertions, 3 deletions
diff --git a/recipes-core/udev/demo-i2c-udev-conf/99-agl-led-rtc.rules b/recipes-core/udev/demo-i2c-udev-conf/99-agl-led-rtc.rules
new file mode 100644
index 00000000..34fa0678
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf/99-agl-led-rtc.rules
@@ -0,0 +1,20 @@
+# skip instantiation of rtc in this processing
+ACTION=="add", SUBSYSTEM=="i2c", DRIVER=="rtc-ds1307", GOTO="hwclock_end"
+
+# load the required drivers (if not already present) - your job to make sure they are there !
+ACTION=="add", ENV{DEVTYPE}=="usb_interface", ENV{DRIVER}=="i2c-tiny-usb", RUN+="/usr/bin/logger 'Loading leds-blinkm'", RUN+="/sbin/modprobe leds-blinkm"
+ACTION=="add", ENV{DEVTYPE}=="usb_interface", ENV{DRIVER}=="i2c-tiny-usb", RUN+="/usr/bin/logger 'Loading rtc driver'", RUN+="/sbin/modprobe rtc-ds1307"
+
+# %k is the blinkm i2c device e.g. 6-0009
+ACTION=="add", ENV{DRIVER}=="blinkm", SUBSYSTEM=="i2c", RUN+="/usr/bin/logger 'the blinkm device is %k'", TAG+="systemd", ENV{SYSTEMD_WANTS}="hvac-json-in-rewrite@%k.service", GOTO="very_end"
+# FIXME: We do not exclude the blinkm on the next lines, yet. The rule is too broad, but that is all we know already. Above is actually later in time.
+# For now this is not critical as the rtc init will just fail and we're done.
+
+# %k is the i2c bus e.g. i2c-6
+ACTION=="add", SUBSYSTEM=="i2c", ATTRS{idProduct}=="c631", TAG+="systemd", ENV{SYSTEMD_WANTS}="rtc-i2c-attach@%k.service"
+
+# GOTO EXIT
+LABEL="hwclock_end"
+ACTION=="add", SUBSYSTEM=="rtc", RUN+="/bin/sleep 1", RUN+="/sbin/hwclock -f /dev/%k --hctosys --utc", TAG+="systemd"
+
+LABEL="very_end"
diff --git a/recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite.sh b/recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite.sh
new file mode 100755
index 00000000..55576601
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# (C) 2018 Jan-Simon Möller, dl9pf@gmx.de, jsmoeller@linuxfoundation.org
+# License: Apache License 2.0
+
+#set -x
+set -e
+
+if [ $1 ] ; then
+ # The device is always 0009 -> 9 . Only change is the i2c IF .
+ LED=`echo $1 | sed -e "s#0009#9#g"`
+ if [ $? -eq 0 ] ; then
+ echo "$LED"
+ sed -e "s#@DEVICE@#$LED#" /etc/hvac.json.in > /etc/hvac.json
+ else
+ echo "Invalid argument"
+ exit 1
+ fi
+else
+ echo "Need argument"
+ exit 1
+fi \ No newline at end of file
diff --git a/recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite@.service b/recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite@.service
new file mode 100644
index 00000000..2fb09959
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf/hvac-json-in-rewrite@.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=AGL hvac LED write /etc/hvac.json
+#Before= todo: add dependency of hvac service ?
+
+[Service]
+Type=oneshot
+ExecStartPre=/usr/bin/logger '#hvac i2c device has been attached - %i'
+ExecStart=/usr/sbin/hvac-json-in-rewrite.sh %i
diff --git a/recipes-core/udev/demo-i2c-udev-conf/hvac.json.in b/recipes-core/udev/demo-i2c-udev-conf/hvac.json.in
new file mode 100644
index 00000000..01541a60
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf/hvac.json.in
@@ -0,0 +1,7 @@
+{
+ "ledtemp": {
+ "red": "/sys/class/leds/blinkm-@DEVICE@-red/brightness",
+ "green": "/sys/class/leds/blinkm-@DEVICE@-green/brightness",
+ "blue": "/sys/class/leds/blinkm-@DEVICE@-blue/brightness"
+ }
+}
diff --git a/recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach.sh b/recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach.sh
new file mode 100755
index 00000000..b45d83aa
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# ds1307
+echo "ds1307 0x68" > /sys/class/i2c-dev/$1/device/new_device
+
+#ds3231
+#echo "ds1307 0x57" > /sys/class/i2c-dev/$1/device/new_device
+
+#pcf85063
+#echo "pcf85063 0x51" > /sys/class/i2c-dev/$1/device/new_device
+
diff --git a/recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach@.service b/recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach@.service
new file mode 100644
index 00000000..8788a25d
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf/rtc-i2c-attach@.service
@@ -0,0 +1,4 @@
+[Service]
+Type=oneshot
+ExecStartPre=/bin/echo '#i2c rtc device has been attached'
+ExecStart=/usr/sbin/rtc-i2c-attach.sh %i
diff --git a/recipes-core/udev/demo-i2c-udev-conf_1.0.bb b/recipes-core/udev/demo-i2c-udev-conf_1.0.bb
new file mode 100644
index 00000000..04101cf3
--- /dev/null
+++ b/recipes-core/udev/demo-i2c-udev-conf_1.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "USB attached I2C demo hardware udev configuration"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://hvac-json-in-rewrite.sh \
+ file://rtc-i2c-attach.sh \
+ file://hvac-json-in-rewrite@.service \
+ file://rtc-i2c-attach@.service \
+ file://99-agl-led-rtc.rules \
+ file://hvac.json.in \
+"
+
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/hvac.json.in ${D}${sysconfdir}
+
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/hvac-json-in-rewrite.sh ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/rtc-i2c-attach.sh ${D}${sbindir}
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/hvac-json-in-rewrite@.service ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/rtc-i2c-attach@.service ${D}${systemd_system_unitdir}
+
+ install -d ${D}${sysconfdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/99-agl-led-rtc.rules ${D}${sysconfdir}/udev/rules.d/
+ fi
+}
+
+FILES_${PN} += "${systemd_unitdir}"
+
+RDEPENDS_${PN} += "bash"
diff --git a/recipes-core/udev/demo-most-udev-conf/99-agl-fibredyne-amp.rules b/recipes-core/udev/demo-most-udev-conf/99-agl-fibredyne-amp.rules
new file mode 100644
index 00000000..5385a6a7
--- /dev/null
+++ b/recipes-core/udev/demo-most-udev-conf/99-agl-fibredyne-amp.rules
@@ -0,0 +1,8 @@
+# Smallest rule, we might get more specific
+ACTION=="add", SUBSYSTEM=="sound", ENV{ID_VENDOR}=="Microchip-SMSC", ENV{ID_MODEL}=="OS8*", RUN+="/usr/sbin/enable-agl-demo-hal.sh"
+#, ENV{ID_MODEL}=="OS81210"
+#, ENV{ID_SERIAL}=="Microchip-SMSC_OS81210_0200-0000000C"
+#, ENV{ID_SERIAL}=="Microchip-SMSC_OS81210_0200-0000000C-02"
+# Microchip-SMSC_OS81118_0000-0000004C
+# Note: this will not work for a SOTA filesystem !!
+
diff --git a/recipes-core/udev/demo-most-udev-conf/enable-agl-demo-hal.sh b/recipes-core/udev/demo-most-udev-conf/enable-agl-demo-hal.sh
new file mode 100644
index 00000000..dd0fa231
--- /dev/null
+++ b/recipes-core/udev/demo-most-udev-conf/enable-agl-demo-hal.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+rm -f /usr/libexec/agl/4a-hal/etc/*.json || true
+
+cp /usr/libexec/agl/4a-hal/etc.available/hal-4a-greenbox.json /usr/libexec/agl/4a-hal/etc/
+
+
diff --git a/recipes-core/udev/demo-most-udev-conf_1.0.bb b/recipes-core/udev/demo-most-udev-conf_1.0.bb
new file mode 100644
index 00000000..ab71f96b
--- /dev/null
+++ b/recipes-core/udev/demo-most-udev-conf_1.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "MOST demo hardware udev configuration"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://99-agl-fibredyne-amp.rules \
+ file://enable-agl-demo-hal.sh \
+"
+
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/enable-agl-demo-hal.sh ${D}${sbindir}
+
+ install -d ${D}${sysconfdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/99-agl-fibredyne-amp.rules ${D}${sysconfdir}/udev/rules.d/
+}
+
+RDEPENDS_${PN} += "bash"
diff --git a/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb b/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
index d7dddb7d..1552558f 100755
--- a/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
+++ b/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
@@ -66,10 +66,18 @@ DEMO_MAPS_LOCALE ?= "uk"
DEMO_PRELOAD = "${@bb.utils.contains("DISTRO_FEATURES", "agl-demo-preload", " navigation-maps-${DEMO_MAPS_LOCALE} poiapp-api-key", "",d)}"
# Hook for demo platform configuration
-# ATM, only used to disable btwilink module on M3ULCB + Kingfisher by default,
-# setting DEMO_ENABLE_BTWILINK to "true" in local.conf / site.conf re-enables.
+# ATM used for:
+# 1) Adding udev configuration and scripts for supporting USB attached
+# I2C devices for RTC and HVAC LED support.
+# 2) Adding udev configuration and script for detecting Fiberdyne MOST
+# attached amp and installing the required 4A HAL.
+# 3) Disabling btwilink module on M3ULCB + Kingfisher by default. To
+# re-enable, set DEMO_ENABLE_BTWILINK to "true" in local.conf/site.conf.
DEMO_ENABLE_BTWILINK ?= ""
-DEMO_PLATFORM_CONF = ""
+DEMO_PLATFORM_CONF = " \
+ demo-i2c-udev-conf \
+ demo-most-udev-conf \
+"
DEMO_PLATFORM_CONF_append_m3ulcb = "${@bb.utils.contains("DEMO_ENABLE_BTWILINK", "true", "", " btwilink-disable-conf", d)}"
RDEPENDS_${PN}_append = " \