[OpenWrt-Devel] [PATCH] implemented basic GPIO control
John Crispin
blogic at openwrt.org
Tue Jul 7 06:54:17 EDT 2015
Hi Lars,
patch subject is missing the "base-files: " prefix. please fix and
resend. rest of the patch looks fine.
John
On 01/07/2015 02:49, Lars Kruse wrote:
> 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 at sumpfralle.de>
> ---
> package/base-files/files/etc/init.d/gpio_switch | 42 ++++++++++++++++++++++
> .../base-files/files/lib/functions/uci-defaults.sh | 24 +++++++++++++
> .../base-files/etc/uci-defaults/01_gpio-switches | 25 +++++++++++++
> 3 files changed, 91 insertions(+)
> create mode 100755 package/base-files/files/etc/init.d/gpio_switch
> create mode 100644 target/linux/ar71xx/base-files/etc/uci-defaults/01_gpio-switches
>
> 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
>
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list