Author: blogic
Date: 2015-07-08 16:25:52 +0200 (Wed, 08 Jul 2015)
New Revision: 46271

Added:
   trunk/package/base-files/files/etc/init.d/gpio_switch
   trunk/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
Modified:
   trunk/package/base-files/files/lib/functions/uci-defaults.sh
Log:
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 <[email protected]>

Added: trunk/package/base-files/files/etc/init.d/gpio_switch
===================================================================
--- trunk/package/base-files/files/etc/init.d/gpio_switch                       
        (rev 0)
+++ trunk/package/base-files/files/etc/init.d/gpio_switch       2015-07-08 
14:25:52 UTC (rev 46271)
@@ -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
+       }
+}


Property changes on: trunk/package/base-files/files/etc/init.d/gpio_switch
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/package/base-files/files/lib/functions/uci-defaults.sh
===================================================================
--- trunk/package/base-files/files/lib/functions/uci-defaults.sh        
2015-07-08 14:25:45 UTC (rev 46270)
+++ trunk/package/base-files/files/lib/functions/uci-defaults.sh        
2015-07-08 14:25:52 UTC (rev 46271)
@@ -2,6 +2,7 @@
 # Copyright (C) 2011 OpenWrt.org
 
 UCIDEF_LEDS_CHANGED=0
+UCIDEF_GPIO_SWITCHES_CHANGED=0
 
 ucidef_set_led_netdev() {
        local cfg="led_$1"
@@ -180,6 +181,29 @@
        [ "$UCIDEF_LEDS_CHANGED" = "1" ] && uci commit system
 }
 
+ucidef_set_gpio_switch() {
+       local cfg="gpio_switch_$1"
+       local name="$2"
+       local gpio_pin="$3"
+       # use "0" as default value
+       local default="${4:-0}"
+
+       uci -q get "system.$cfg" && return 0
+
+       uci batch <<EOF
+set system.$cfg='gpio_switch'
+set system.$cfg.name='$name'
+set system.$cfg.gpio_pin='$gpio_pin'
+set system.$cfg.value='$default'
+EOF
+       UCIDEF_GPIO_SWITCHES_CHANGED=1
+}
+
+ucidef_commit_gpio_switches()
+{
+       [ "$UCIDEF_GPIO_SWITCHES_CHANGED" = "1" ] && uci commit system
+}
+
 ucidef_set_interface_loopback() {
        uci batch <<EOF
 set network.loopback='interface'

Added: trunk/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
===================================================================
--- trunk/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches      
                        (rev 0)
+++ trunk/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches      
2015-07-08 14:25:52 UTC (rev 46271)
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+
+. /lib/functions/uci-defaults.sh
+. /lib/ar71xx.sh
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+nanostation-m)
+       ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
+       ;;
+nanostation-m-xw)
+       ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "8"
+       ;;
+cpe510)
+       ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "20"
+       ;;
+esac
+
+ucidef_commit_gpio_switches
+
+exit 0
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to