Home | History | Annotate | Download | only in gpio
      1 
      2 is_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 
     35 test_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 
     50 test_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 
     83 test_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 
     98 list_chip()
     99 {
    100 	echo `ls -d $GPIO_DRV_SYSFS/gpiochip* 2>/dev/null`
    101 }
    102 
    103 test_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 
    118 test_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