base-files: gpio switch: check if direction can be set
[openwrt/openwrt.git] / package / base-files / files / etc / init.d / gpio_switch
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
        }
-       # 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()