base-files: gpio switch: check if direction can be set
authorMathias Kresin <dev@kresin.me>
Mon, 15 Jan 2018 00:23:36 +0000 (01:23 +0100)
committerMathias Kresin <dev@kresin.me>
Thu, 18 Jan 2018 06:22:37 +0000 (07:22 +0100)
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>
package/base-files/Makefile
package/base-files/files/etc/init.d/gpio_switch

index 00554741669bfc9bf0807c3b729693bd28ee1b4e..ed3448094875d67152ccaf9d6707f1a290a12d65 100644 (file)
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
 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/
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
index 32c142f110233b7c85472df7def2cbaeb44b5483..6b2dcdce41833f8dcbec97f0074a705b41d534f8 100755 (executable)
@@ -23,8 +23,15 @@ load_gpio_switch()
                # we need to wait a bit until the GPIO appears
                [ -d "$gpio_path" ] || sleep 1
        }
                # 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()
 }
 
 service_triggers()