| |
| # 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 |
| } |
| |