|
@@ -0,0 +1,133 @@
|
|
|
+From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
|
+Date: Mon, 7 Mar 2016 06:07:21 +0100
|
|
|
+Subject: 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>
|
|
|
+
|
|
|
+Backport of r46271
|
|
|
+
|
|
|
+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 0000000..1f1b44b
|
|
|
+--- /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
|
|
|
++ }
|
|
|
++}
|
|
|
+diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
|
|
|
+index 5a8809d..6577ecd 100644
|
|
|
+--- a/package/base-files/files/lib/functions/uci-defaults.sh
|
|
|
++++ b/package/base-files/files/lib/functions/uci-defaults.sh
|
|
|
+@@ -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_commit_leds()
|
|
|
+ [ "$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'
|
|
|
+diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
|
|
+new file mode 100644
|
|
|
+index 0000000..81d3982
|
|
|
+--- /dev/null
|
|
|
++++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
|
|
|
+@@ -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
|