1*4882a593Smuzhiyun 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyunis_consistent() 4*4882a593Smuzhiyun{ 5*4882a593Smuzhiyun val= 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun active_low_sysfs=`cat $GPIO_SYSFS/gpio$nr/active_low` 8*4882a593Smuzhiyun val_sysfs=`cat $GPIO_SYSFS/gpio$nr/value` 9*4882a593Smuzhiyun dir_sysfs=`cat $GPIO_SYSFS/gpio$nr/direction` 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun gpio_this_debugfs=`cat $GPIO_DEBUGFS |grep "gpio-$nr" | sed "s/(.*)//g"` 12*4882a593Smuzhiyun dir_debugfs=`echo $gpio_this_debugfs | awk '{print $2}'` 13*4882a593Smuzhiyun val_debugfs=`echo $gpio_this_debugfs | awk '{print $3}'` 14*4882a593Smuzhiyun if [ $val_debugfs = "lo" ]; then 15*4882a593Smuzhiyun val=0 16*4882a593Smuzhiyun elif [ $val_debugfs = "hi" ]; then 17*4882a593Smuzhiyun val=1 18*4882a593Smuzhiyun fi 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun if [ $active_low_sysfs = "1" ]; then 21*4882a593Smuzhiyun if [ $val = "0" ]; then 22*4882a593Smuzhiyun val="1" 23*4882a593Smuzhiyun else 24*4882a593Smuzhiyun val="0" 25*4882a593Smuzhiyun fi 26*4882a593Smuzhiyun fi 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun if [ $val_sysfs = $val ] && [ $dir_sysfs = $dir_debugfs ]; then 29*4882a593Smuzhiyun echo -n "." 30*4882a593Smuzhiyun else 31*4882a593Smuzhiyun echo "test fail, exit" 32*4882a593Smuzhiyun die 33*4882a593Smuzhiyun fi 34*4882a593Smuzhiyun} 35*4882a593Smuzhiyun 36*4882a593Smuzhiyuntest_pin_logic() 37*4882a593Smuzhiyun{ 38*4882a593Smuzhiyun nr=$1 39*4882a593Smuzhiyun direction=$2 40*4882a593Smuzhiyun active_low=$3 41*4882a593Smuzhiyun value=$4 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun echo $direction > $GPIO_SYSFS/gpio$nr/direction 44*4882a593Smuzhiyun echo $active_low > $GPIO_SYSFS/gpio$nr/active_low 45*4882a593Smuzhiyun if [ $direction = "out" ]; then 46*4882a593Smuzhiyun echo $value > $GPIO_SYSFS/gpio$nr/value 47*4882a593Smuzhiyun fi 48*4882a593Smuzhiyun is_consistent $nr 49*4882a593Smuzhiyun} 50*4882a593Smuzhiyun 51*4882a593Smuzhiyuntest_one_pin() 52*4882a593Smuzhiyun{ 53*4882a593Smuzhiyun nr=$1 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun echo -n "test pin<$nr>" 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun echo $nr > $GPIO_SYSFS/export 2>/dev/null 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun if [ X$? != X0 ]; then 60*4882a593Smuzhiyun echo "test GPIO pin $nr failed" 61*4882a593Smuzhiyun die 62*4882a593Smuzhiyun fi 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #"Checking if the sysfs is consistent with debugfs: " 65*4882a593Smuzhiyun is_consistent $nr 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #"Checking the logic of active_low: " 68*4882a593Smuzhiyun test_pin_logic $nr out 1 1 69*4882a593Smuzhiyun test_pin_logic $nr out 1 0 70*4882a593Smuzhiyun test_pin_logic $nr out 0 1 71*4882a593Smuzhiyun test_pin_logic $nr out 0 0 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #"Checking the logic of direction: " 74*4882a593Smuzhiyun test_pin_logic $nr in 1 1 75*4882a593Smuzhiyun test_pin_logic $nr out 1 0 76*4882a593Smuzhiyun test_pin_logic $nr low 0 1 77*4882a593Smuzhiyun test_pin_logic $nr high 0 0 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun echo $nr > $GPIO_SYSFS/unexport 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun echo "successful" 82*4882a593Smuzhiyun} 83*4882a593Smuzhiyun 84*4882a593Smuzhiyuntest_one_pin_fail() 85*4882a593Smuzhiyun{ 86*4882a593Smuzhiyun nr=$1 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun echo $nr > $GPIO_SYSFS/export 2>/dev/null 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun if [ X$? != X0 ]; then 91*4882a593Smuzhiyun echo "test invalid pin $nr successful" 92*4882a593Smuzhiyun else 93*4882a593Smuzhiyun echo "test invalid pin $nr failed" 94*4882a593Smuzhiyun echo $nr > $GPIO_SYSFS/unexport 2>/dev/null 95*4882a593Smuzhiyun die 96*4882a593Smuzhiyun fi 97*4882a593Smuzhiyun} 98*4882a593Smuzhiyun 99*4882a593Smuzhiyunlist_chip() 100*4882a593Smuzhiyun{ 101*4882a593Smuzhiyun echo `ls -d $GPIO_DRV_SYSFS/gpiochip* 2>/dev/null` 102*4882a593Smuzhiyun} 103*4882a593Smuzhiyun 104*4882a593Smuzhiyuntest_chip() 105*4882a593Smuzhiyun{ 106*4882a593Smuzhiyun chip=$1 107*4882a593Smuzhiyun name=`basename $chip` 108*4882a593Smuzhiyun base=`cat $chip/base` 109*4882a593Smuzhiyun ngpio=`cat $chip/ngpio` 110*4882a593Smuzhiyun printf "%-10s %-5s %-5s\n" $name $base $ngpio 111*4882a593Smuzhiyun if [ $ngpio = "0" ]; then 112*4882a593Smuzhiyun echo "number of gpio is zero is not allowed". 113*4882a593Smuzhiyun fi 114*4882a593Smuzhiyun test_one_pin $base 115*4882a593Smuzhiyun test_one_pin $(($base + $ngpio - 1)) 116*4882a593Smuzhiyun test_one_pin $((( RANDOM % $ngpio ) + $base )) 117*4882a593Smuzhiyun} 118*4882a593Smuzhiyun 119*4882a593Smuzhiyuntest_chips_sysfs() 120*4882a593Smuzhiyun{ 121*4882a593Smuzhiyun gpiochip=`list_chip $module` 122*4882a593Smuzhiyun if [ X"$gpiochip" = X ]; then 123*4882a593Smuzhiyun if [ X"$valid" = Xfalse ]; then 124*4882a593Smuzhiyun echo "successful" 125*4882a593Smuzhiyun else 126*4882a593Smuzhiyun echo "fail" 127*4882a593Smuzhiyun die 128*4882a593Smuzhiyun fi 129*4882a593Smuzhiyun else 130*4882a593Smuzhiyun for chip in $gpiochip; do 131*4882a593Smuzhiyun test_chip $chip 132*4882a593Smuzhiyun done 133*4882a593Smuzhiyun fi 134*4882a593Smuzhiyun} 135*4882a593Smuzhiyun 136