aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package/base-files/Makefile2
-rwxr-xr-xpackage/base-files/files/etc/init.d/gpio_switch42
-rwxr-xr-xpackage/base-files/files/lib/functions/uci-defaults.sh2
3 files changed, 32 insertions, 14 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 5bf783d0e8..84fbcacdfc 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:=222
+PKG_RELEASE:=223
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 6b2dcdce41..24d790b065 100755
--- a/package/base-files/files/etc/init.d/gpio_switch
+++ b/package/base-files/files/etc/init.d/gpio_switch
@@ -16,21 +16,39 @@ load_gpio_switch()
config_get name "$1" name
config_get value "$1" value 0
- local gpio_path="/sys/class/gpio/gpio${gpio_pin}"
- # export GPIO pin for access
- [ -d "$gpio_path" ] || {
- echo "$gpio_pin" >/sys/class/gpio/export
- # we need to wait a bit until the GPIO appears
- [ -d "$gpio_path" ] || sleep 1
+ [ -z "$gpio_pin" ] && {
+ echo >&2 "Skipping gpio_switch '$name' due to missing gpio_pin"
+ return 1
}
- # 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"
+ local gpio_path
+ if [ -n "$(echo "$gpio_pin" | grep -E "^[0-9]+$")" ]; then
+ gpio_path="/sys/class/gpio/gpio${gpio_pin}"
+
+ # export GPIO pin for access
+ [ -d "$gpio_path" ] || {
+ echo "$gpio_pin" >/sys/class/gpio/export
+ # we need to wait a bit until the GPIO appears
+ [ -d "$gpio_path" ] || sleep 1
+ }
+
+ # 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
else
- { [ "$value" = "0" ] && echo "0" || echo "1"; } >"$gpio_path/value"
+ gpio_path="/sys/class/gpio/${gpio_pin}"
+
+ [ -d "$gpio_path" ] && {
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } \
+ >"$gpio_path/value"
+ }
fi
}
diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
index e551e8fd57..12b900031d 100755
--- a/package/base-files/files/lib/functions/uci-defaults.sh
+++ b/package/base-files/files/lib/functions/uci-defaults.sh
@@ -573,7 +573,7 @@ ucidef_add_gpio_switch() {
json_select_object gpioswitch
json_select_object "$cfg"
json_add_string name "$name"
- json_add_int pin "$pin"
+ json_add_string pin "$pin"
json_add_int default "$default"
json_select ..
json_select ..