aboutsummaryrefslogtreecommitdiffstats
path: root/package/base-files/files/etc/init.d/gpio_switch
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2015-07-08 14:25:52 +0000
committerJohn Crispin <blogic@openwrt.org>2015-07-08 14:25:52 +0000
commited55318df19155dd36c30bb1761b1137b8c46fb4 (patch)
treecf0973a2b76fa768fc989b7a4daab3e66f1019e5 /package/base-files/files/etc/init.d/gpio_switch
parentb9f4b02c2846e3dffbce80f9aa7bb930694889b0 (diff)
downloadmaster-187ad058-ed55318df19155dd36c30bb1761b1137b8c46fb4.tar.gz
master-187ad058-ed55318df19155dd36c30bb1761b1137b8c46fb4.tar.bz2
master-187ad058-ed55318df19155dd36c30bb1761b1137b8c46fb4.zip
base-files: implemented basic GPIO control
Internal GPIO pins are used for PoE passthrough setups in multi-port routers. This patch implemnets control over this hardware feature for Ubiquiti Nanostations and TP-Link CPE510. Signed-off-by: Lars Kruse <lists@sumpfralle.de> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@46271 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/base-files/files/etc/init.d/gpio_switch')
-rwxr-xr-xpackage/base-files/files/etc/init.d/gpio_switch42
1 files changed, 42 insertions, 0 deletions
diff --git a/package/base-files/files/etc/init.d/gpio_switch b/package/base-files/files/etc/init.d/gpio_switch
new file mode 100755
index 0000000000..1f1b44b212
--- /dev/null
+++ b/package/base-files/files/etc/init.d/gpio_switch
@@ -0,0 +1,42 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2015 OpenWrt.org
+
+START=98
+STOP=10
+USE_PROCD=1
+
+
+load_gpio_switch()
+{
+ local name
+ local gpio_pin
+ local value
+
+ config_get gpio_pin "$1" gpio_pin
+ 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
+ echo out >"$gpio_path/direction"
+ }
+ # write 0 or 1 to the "value" field
+ { [ "$value" = "0" ] && echo "0" || echo "1"; } >"$gpio_path/value"
+}
+
+service_triggers()
+{
+ procd_add_reload_trigger "system"
+}
+
+start_service()
+{
+ [ -e /sys/class/gpio/ ] && {
+ config_load system
+ config_foreach load_gpio_switch gpio_switch
+ }
+}