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> SVN-Revision: 46271
This commit is contained in:
parent
227aafc4db
commit
d65916047b
3 changed files with 91 additions and 0 deletions
42
package/base-files/files/etc/init.d/gpio_switch
Executable file
42
package/base-files/files/etc/init.d/gpio_switch
Executable file
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
# Copyright (C) 2011 OpenWrt.org
|
# Copyright (C) 2011 OpenWrt.org
|
||||||
|
|
||||||
UCIDEF_LEDS_CHANGED=0
|
UCIDEF_LEDS_CHANGED=0
|
||||||
|
UCIDEF_GPIO_SWITCHES_CHANGED=0
|
||||||
|
|
||||||
ucidef_set_led_netdev() {
|
ucidef_set_led_netdev() {
|
||||||
local cfg="led_$1"
|
local cfg="led_$1"
|
||||||
|
@ -180,6 +181,29 @@ ucidef_commit_leds()
|
||||||
[ "$UCIDEF_LEDS_CHANGED" = "1" ] && uci commit system
|
[ "$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() {
|
ucidef_set_interface_loopback() {
|
||||||
uci batch <<EOF
|
uci batch <<EOF
|
||||||
set network.loopback='interface'
|
set network.loopback='interface'
|
||||||
|
|
|
@ -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
|
Loading…
Reference in a new issue