162306a36Sopenharmony_ci 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci# Overrides functions in gpio-mockup.sh to test using the GPIO SYSFS uAPI 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciSYSFS=`grep -w sysfs /proc/mounts | cut -f2 -d' '` 762306a36Sopenharmony_ci[ -d "$SYSFS" ] || skip "sysfs is not mounted" 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciGPIO_SYSFS="${SYSFS}/class/gpio" 1062306a36Sopenharmony_ci[ -d "$GPIO_SYSFS" ] || skip "CONFIG_GPIO_SYSFS is not selected" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciPLATFORM_SYSFS=$SYSFS/devices/platform 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cisysfs_nr= 1562306a36Sopenharmony_cisysfs_ldir= 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci# determine the sysfs GPIO number given the $chip and $offset 1862306a36Sopenharmony_ci# e.g. gpiochip1:32 1962306a36Sopenharmony_cifind_sysfs_nr() 2062306a36Sopenharmony_ci{ 2162306a36Sopenharmony_ci # e.g. /sys/devices/platform/gpio-mockup.1/gpiochip1 2262306a36Sopenharmony_ci local platform=$(find $PLATFORM_SYSFS -mindepth 2 -maxdepth 2 -type d -name $chip) 2362306a36Sopenharmony_ci [ "$platform" ] || fail "can't find platform of $chip" 2462306a36Sopenharmony_ci # e.g. /sys/devices/platform/gpio-mockup.1/gpio/gpiochip508/base 2562306a36Sopenharmony_ci local base=$(find ${platform%/*}/gpio/ -mindepth 2 -maxdepth 2 -type f -name base) 2662306a36Sopenharmony_ci [ "$base" ] || fail "can't find base of $chip" 2762306a36Sopenharmony_ci sysfs_nr=$(($(< "$base") + $offset)) 2862306a36Sopenharmony_ci sysfs_ldir="$GPIO_SYSFS/gpio$sysfs_nr" 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ciacquire_line() 3262306a36Sopenharmony_ci{ 3362306a36Sopenharmony_ci [ "$sysfs_nr" ] && return 3462306a36Sopenharmony_ci find_sysfs_nr 3562306a36Sopenharmony_ci echo "$sysfs_nr" > "$GPIO_SYSFS/export" 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci# The helpers being overridden... 3962306a36Sopenharmony_ciget_line() 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci [ -e "$sysfs_ldir/value" ] && echo $(< "$sysfs_ldir/value") 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ciset_line() 4562306a36Sopenharmony_ci{ 4662306a36Sopenharmony_ci acquire_line 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci for option in $*; do 4962306a36Sopenharmony_ci case $option in 5062306a36Sopenharmony_ci active-high) 5162306a36Sopenharmony_ci echo 0 > "$sysfs_ldir/active_low" 5262306a36Sopenharmony_ci ;; 5362306a36Sopenharmony_ci active-low) 5462306a36Sopenharmony_ci echo 1 > "$sysfs_ldir/active_low" 5562306a36Sopenharmony_ci ;; 5662306a36Sopenharmony_ci input) 5762306a36Sopenharmony_ci echo "in" > "$sysfs_ldir/direction" 5862306a36Sopenharmony_ci ;; 5962306a36Sopenharmony_ci 0) 6062306a36Sopenharmony_ci echo "out" > "$sysfs_ldir/direction" 6162306a36Sopenharmony_ci echo 0 > "$sysfs_ldir/value" 6262306a36Sopenharmony_ci ;; 6362306a36Sopenharmony_ci 1) 6462306a36Sopenharmony_ci echo "out" > "$sysfs_ldir/direction" 6562306a36Sopenharmony_ci echo 1 > "$sysfs_ldir/value" 6662306a36Sopenharmony_ci ;; 6762306a36Sopenharmony_ci esac 6862306a36Sopenharmony_ci done 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cirelease_line() 7262306a36Sopenharmony_ci{ 7362306a36Sopenharmony_ci [ "$sysfs_nr" ] || return 0 7462306a36Sopenharmony_ci echo "$sysfs_nr" > "$GPIO_SYSFS/unexport" 7562306a36Sopenharmony_ci sysfs_nr= 7662306a36Sopenharmony_ci sysfs_ldir= 7762306a36Sopenharmony_ci} 78