Procházet zdrojové kódy

Backport GPIO control support

Backport of rr46271 and r46922.

Based-on-patch-by: Julian Kornberger <jk+github@digineo.de>
Matthias Schiffer před 8 roky
rodič
revize
01878f4bbc

+ 133 - 0
patches/openwrt/0015-base-files-implemented-basic-GPIO-control.patch

@@ -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

+ 32 - 0
patches/openwrt/0016-ar71xx-assign-proper-GPIO-pin-for-Ubiquiti-Nanostation-models.patch

@@ -0,0 +1,32 @@
+From: Matthias Schiffer <mschiffer@universe-factory.net>
+Date: Mon, 7 Mar 2016 06:07:59 +0100
+Subject: ar71xx: assign proper GPIO pin for Ubiquiti Nanostation models
+
+The GPIO pins for "POE passthrough" of Ubiquiti Nanostation models are the
+following:
+* Ubiquiti Nanostation M XM: Pin 8
+* Ubiquiti Nanostation M XW: Pin 2
+
+The previous definition of the pins was mixed up between XM and XW model.
+
+Signed-off-by: Lars Kruse <lists@sumpfralle.de>
+
+Backport of r46922
+
+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
+index 81d3982..b41f275 100644
+--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
++++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
+@@ -10,10 +10,10 @@ board=$(ar71xx_board_name)
+ 
+ case "$board" in
+ nanostation-m)
+-	ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
++	ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "8"
+ 	;;
+ nanostation-m-xw)
+-	ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "8"
++	ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "2"
+ 	;;
+ cpe510)
+ 	ucidef_set_gpio_switch "poe_passthrough" "PoE Passthrough" "20"