#!/bin/sh

# Workaround script for toggling SFP TX enable on Ten64 boards
# This will be needed until phylink support is implemented.

# This script currently assumes you keep the default interface mappings
# https://ten64doc.traverse.com.au/network/dpaa2config/#the-default-configuration-eth-dpl-all

grep -q "traverse,ten64" "/proc/device-tree/compatible" || exit 0

if [ ! -z "${WICKED_INTERFACE_NAME}" ] && [ $# -eq 2 ]; then
	IFACE="${WICKED_INTERFACE_NAME}"
	PHASE=$1
fi

I2C_EXPANDER_GPIO_BASEFILE=$(find "/sys/bus/i2c/devices/0-0076/gpio" -name base)

I2C_EXPANDER_GPIO_BASE=$(cat "${I2C_EXPANDER_GPIO_BASEFILE}")

if [ "${IFACE}" = "eth8" ]; then
  TXENABLE_GPIO=$(($I2C_EXPANDER_GPIO_BASE+1))
elif [ "${IFACE}" = "eth9" ]; then
  TXENABLE_GPIO=$(($I2C_EXPANDER_GPIO_BASE+5))
else
  # Not required
  exit 0
fi

TXENABLE_GPIO_PATH="/sys/class/gpio/gpio${TXENABLE_GPIO}"

if [ ! -d "${TXENABLE_GPIO_PATH}" ]; then
  echo "${TXENABLE_GPIO}" > "/sys/class/gpio/export"
  echo "out" > "${TXENABLE_GPIO_PATH}/direction"
fi

case "${PHASE}" in
  pre-up)
    echo "0" > "${TXENABLE_GPIO_PATH}/value"
    ;;
  post-down)
    echo "1" > "${TXENABLE_GPIO_PATH}/value"
    ;;
  default)
    ;;
esac
