From: Mathias Kresin Date: Mon, 15 Jan 2018 00:23:36 +0000 (+0100) Subject: base-files: gpio switch: check if direction can be set X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=acafbac4b33a5273e6125cf2fcdf118f70cd23ec;p=openwrt%2Fstaging%2Fblogic.git 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 --- diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 00554741669b..ed3448094875 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 32c142f11023..6b2dcdce4183 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()