aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Kresin <dev@kresin.me>2018-01-15 01:23:36 +0100
committerMathias Kresin <dev@kresin.me>2018-01-18 07:22:37 +0100
commitacafbac4b33a5273e6125cf2fcdf118f70cd23ec (patch)
treecd45a0547b83d3901cfe317025c3e31fb8dbcfa3
parentf476c9a7458f9a1da876df02cce065f9cdeedd87 (diff)
downloadupstream-acafbac4b33a5273e6125cf2fcdf118f70cd23ec.tar.gz
upstream-acafbac4b33a5273e6125cf2fcdf118f70cd23ec.tar.bz2
upstream-acafbac4b33a5273e6125cf2fcdf118f70cd23ec.zip
base-files: gpio switch: check if direction can be set
Obviously not all GPIO controller allow to change the direction. The issue is around since the beginning of the script but only due to the recent changes error messages are more visible. Add a check if a change of the direction is supported by the GPIO controller and fallback to setting only the value if not. Fixes: FS#1271 Signed-off-by: Mathias Kresin <dev@kresin.me>
-rw-r--r--package/base-files/Makefile2
-rwxr-xr-xpackage/base-files/files/etc/init.d/gpio_switch11
2 files changed, 10 insertions, 3 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 0055474166..ed34480948 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
include $(INCLUDE_DIR)/feeds.mk
PKG_NAME:=base-files
-PKG_RELEASE:=183
+PKG_RELEASE:=184
PKG_FLAGS:=nonshared
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
diff --git a/package/base-files/files/etc/init.d/gpio_switch b/package/base-files/files/etc/init.d/gpio_switch
index 32c142f110..6b2dcdce41 100755
--- a/package/base-files/files/etc/init.d/gpio_switch
+++ b/package/base-files/files/etc/init.d/gpio_switch
@@ -23,8 +23,15 @@ load_gpio_switch()
# we need to wait a bit until the GPIO appears
[ -d "$gpio_path" ] || sleep 1
}
- # set the pin to output with high or low pin value
- { [ "$value" = "0" ] && echo "low" || echo "high"; } >"$gpio_path/direction"
+
+ # direction attribute only exists if the kernel supports changing the
+ # direction of a GPIO
+ if [ -e "${gpio_path}/direction" ]; then
+ # set the pin to output with high or low pin value
+ { [ "$value" = "0" ] && echo "low" || echo "high"; } >"$gpio_path/direction"
+ else
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } >"$gpio_path/value"
+ fi
}
service_triggers()