[openwrt/openwrt] base-files: gpio switch: check if direction can be set

LEDE Commits lede-commits at lists.infradead.org
Wed Jan 17 22:30:55 PST 2018


mkresin pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/acafbac4b33a5273e6125cf2fcdf118f70cd23ec

commit acafbac4b33a5273e6125cf2fcdf118f70cd23ec
Author: Mathias Kresin <dev at kresin.me>
AuthorDate: Mon Jan 15 01:23:36 2018 +0100

    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 at kresin.me>
---
 package/base-files/Makefile                     |  2 +-
 package/base-files/files/etc/init.d/gpio_switch | 11 +++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 0055474..ed34480 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 32c142f..6b2dcdc 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()



More information about the lede-commits mailing list