From 75739c515b80cbcfb9603ba2b4dce2c27cb6c903 Mon Sep 17 00:00:00 2001 From: Martin Kepplinger Date: Fri, 14 Jan 2022 11:44:55 +0100 Subject: [PATCH] udev: add rules to reload the vcnl4000 driver on any one hks-on the light sensor is being cut off when wwan-hks, wlan-hks and camera-hks are being switched off. it's powered again when only one of these 3 hks are being switched on again - any one of them. Since I couldn't come up with a simple rule that does such an "OR" relationship, this runs a script on every HKS on-switching. That script then checks whether only 1 or 2 rfkill devices are unblocked (the wifi HKS or the camera/mic HKS each unblock 2 rfkill devices). In that case, it reloads the vcnl4000 driver to make illuminance and proximity values work again. --- debian/librem5-base-defaults.install | 3 +++ debian/librem5-base-defaults.librem5-vcnl4040.udev | 3 +++ debian/rules | 1 + default/l5-vcnl4000-reload-hks.sh | 7 +++++++ 4 files changed, 14 insertions(+) create mode 100644 debian/librem5-base-defaults.librem5-vcnl4040.udev create mode 100755 default/l5-vcnl4000-reload-hks.sh diff --git a/debian/librem5-base-defaults.install b/debian/librem5-base-defaults.install index 7cc8463..d92c4eb 100644 --- a/debian/librem5-base-defaults.install +++ b/debian/librem5-base-defaults.install @@ -59,3 +59,6 @@ default/initramfs-tools/modules.d/* usr/share/initramfs-tools/modules.d/ # smartcard configuration default/smartcard/librem5 etc/reader.conf.d/ default/smartcard/pcscd.service.d lib/systemd/system/ + +# reload the vcnl4000 driver if 2 or less rfkill devices are unblocked +default/l5-vcnl4000-reload-hks.sh usr/bin/ diff --git a/debian/librem5-base-defaults.librem5-vcnl4040.udev b/debian/librem5-base-defaults.librem5-vcnl4040.udev new file mode 100644 index 0000000..d55941e --- /dev/null +++ b/debian/librem5-base-defaults.librem5-vcnl4040.udev @@ -0,0 +1,3 @@ +ACTION=="change", SUBSYSTEM=="rfkill", ENV{RFKILL_NAME}=="camera-hks", ENV{RFKILL_STATE}=="1", RUN+="/usr/bin/l5-vcnl4000-reload-hks.sh" +ACTION=="change", SUBSYSTEM=="rfkill", ENV{RFKILL_NAME}=="wlan-hks", ENV{RFKILL_STATE}=="1", RUN+="/usr/bin/l5-vcnl4000-reload-hks.sh" +ACTION=="change", SUBSYSTEM=="rfkill", ENV{RFKILL_NAME}=="wwan-hks", ENV{RFKILL_STATE}=="1", RUN+="/usr/bin/l5-vcnl4000-reload-hks.sh" diff --git a/debian/rules b/debian/rules index 46b4aa8..0725ba4 100755 --- a/debian/rules +++ b/debian/rules @@ -9,6 +9,7 @@ override_dh_installudev: dh_installudev --name=librem5-modem --priority=85 dh_installudev --name=librem5-cameras --priority=85 dh_installudev --name=librem5-storage --priority=85 + dh_installudev --name=librem5-vcnl4040 --priority=85 override_dh_installsystemd: dh_installsystemd --no-start --name=usb_gadget diff --git a/default/l5-vcnl4000-reload-hks.sh b/default/l5-vcnl4000-reload-hks.sh new file mode 100755 index 0000000..593257c --- /dev/null +++ b/default/l5-vcnl4000-reload-hks.sh @@ -0,0 +1,7 @@ +#!/bin/bash +output=$(rfkill -n -o HARD|grep "unblocked"|wc -l) +# reload on 1 and 2 unblocked HKS because camera/mic and also wifi enables 2 +if (( $output < 3 )) ; then + echo 1-0060 > "/sys/bus/i2c/drivers/vcnl4000/unbind" + echo 1-0060 > "/sys/bus/i2c/drivers/vcnl4000/bind" +fi -- GitLab