# SPDX-License-Identifier: GPL-2.0 is_consistent() { val= active_low_sysfs=`cat $GPIO_SYSFS/gpio$nr/active_low` val_sysfs=`cat $GPIO_SYSFS/gpio$nr/value` dir_sysfs=`cat $GPIO_SYSFS/gpio$nr/direction` gpio_this_debugfs=`cat $GPIO_DEBUGFS |grep "gpio-$nr" | sed "s/(.*)//g"` dir_debugfs=`echo $gpio_this_debugfs | awk '{print $2}'` val_debugfs=`echo $gpio_this_debugfs | awk '{print $3}'` if [ $val_debugfs = "lo" ]; then val=0 elif [ $val_debugfs = "hi" ]; then val=1 fi if [ $active_low_sysfs = "1" ]; then if [ $val = "0" ]; then val="1" else val="0" fi fi if [ $val_sysfs = $val ] && [ $dir_sysfs = $dir_debugfs ]; then echo -n "." else echo "test fail, exit" die fi } test_pin_logic() { nr=$1 direction=$2 active_low=$3 value=$4 echo $direction > $GPIO_SYSFS/gpio$nr/direction echo $active_low > $GPIO_SYSFS/gpio$nr/active_low if [ $direction = "out" ]; then echo $value > $GPIO_SYSFS/gpio$nr/value fi is_consistent $nr } test_one_pin() { nr=$1 echo -n "test pin<$nr>" echo $nr > $GPIO_SYSFS/export 2>/dev/null if [ X$? != X0 ]; then echo "test GPIO pin $nr failed" die fi #"Checking if the sysfs is consistent with debugfs: " is_consistent $nr #"Checking the logic of active_low: " test_pin_logic $nr out 1 1 test_pin_logic $nr out 1 0 test_pin_logic $nr out 0 1 test_pin_logic $nr out 0 0 #"Checking the logic of direction: " test_pin_logic $nr in 1 1 test_pin_logic $nr out 1 0 test_pin_logic $nr low 0 1 test_pin_logic $nr high 0 0 echo $nr > $GPIO_SYSFS/unexport echo "successful" } test_one_pin_fail() { nr=$1 echo $nr > $GPIO_SYSFS/export 2>/dev/null if [ X$? != X0 ]; then echo "test invalid pin $nr successful" else echo "test invalid pin $nr failed" echo $nr > $GPIO_SYSFS/unexport 2>/dev/null die fi } list_chip() { echo `ls -d $GPIO_DRV_SYSFS/gpiochip* 2>/dev/null` } test_chip() { chip=$1 name=`basename $chip` base=`cat $chip/base` ngpio=`cat $chip/ngpio` printf "%-10s %-5s %-5s\n" $name $base $ngpio if [ $ngpio = "0" ]; then echo "number of gpio is zero is not allowed". fi test_one_pin $base test_one_pin $(($base + $ngpio - 1)) test_one_pin $((( RANDOM % $ngpio ) + $base )) } test_chips_sysfs() { gpiochip=`list_chip $module` if [ X"$gpiochip" = X ]; then if [ X"$valid" = Xfalse ]; then echo "successful" else echo "fail" die fi else for chip in $gpiochip; do test_chip $chip done fi }