xref: /openbmc/openbmc/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions (revision 176a0992cdc8b0a11a376ceb479e2b7fb03f2dc5)
1#!/bin/bash
2
3get_gpio()
4{
5    local NET_NAME=$1
6    local RET_VAL
7
8    mapfile -t -d " " GPIO_INFO < <(gpiofind "$NET_NAME")
9    if [ "${#GPIO_INFO[@]}" -ne 2 ]; then
10        echo "get_gpio: can not find gpio, $NET_NAME" >&2
11        return 1
12    fi
13    for _ in {1..10}
14    do
15        if ! RET_VAL=$(gpioget "${GPIO_INFO[0]}" "${GPIO_INFO[1]%$'\n'}") ; then
16            usleep 10000
17            continue
18        else
19            echo "${RET_VAL}"
20            return 0
21        fi
22    done
23
24    echo "get_gpio: get ${NET_NAME} failed" >&2
25    return 1
26}
27
28set_gpio()
29{
30    local NET_NAME=$1
31    local OUT_VAL=$2
32    mapfile -t -d " " GPIO_INFO < <(gpiofind "$NET_NAME")
33    if [ "${#GPIO_INFO[@]}" -ne 2 ]; then
34        echo "set_gpio: can not find gpio, $NET_NAME"
35        return 1
36    fi
37
38    echo -n "set_gpio: set $NET_NAME = $OUT_VAL"
39    if ! gpioset "${GPIO_INFO[0]}" "${GPIO_INFO[1]%$'\n'}"="$OUT_VAL"; then
40        echo " failed"
41        return 1
42    fi
43
44    echo " success"
45    return 0
46}
47
48bind_i2c_device()
49{
50    local DRIVER_NAME="$1"
51    local DEV_BUS_ADDR="$2"
52    local DRIVER_DIR_PATH="/sys/bus/i2c/drivers/${DRIVER_NAME}"
53    local DRIVER_BIND_PATH="${DRIVER_DIR_PATH}/bind"
54    local MAX_RETRIES=1
55    local RETRY=0
56
57    if [ -n "$3" ]; then
58        MAX_RETRIES="$3"
59    fi
60
61    if [ -L "${DRIVER_DIR_PATH}/${DEV_BUS_ADDR}" ]; then
62        return 0
63    fi
64
65    while [ "$RETRY" -lt "$MAX_RETRIES" ]
66    do
67        if echo "${DEV_BUS_ADDR}" > "${DRIVER_BIND_PATH}"; then
68            echo "bind_i2c_device: $DRIVER_NAME, $DEV_BUS_ADDR successful"
69            return 0
70        fi
71
72        RETRY=$((RETRY + 1))
73        echo "bind_i2c_device: $DRIVER_NAME, $DEV_BUS_ADDR failed"
74        usleep 50000
75    done
76
77    return 1
78}
79
80if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
81    CMD=$1
82    shift
83    case "$CMD" in
84        get_gpio)
85            get_gpio "$@"
86            ;;
87        set_gpio)
88            set_gpio "$@"
89            ;;
90        bind_i2c_device)
91            bind_i2c_device "$@"
92            ;;
93        *)
94            echo "Usage: $0 {get_gpio|set_gpio|bind_i2c_device} args..."
95            exit 1
96            ;;
97    esac
98fi
99