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