136 lines
2.6 KiB
Bash
136 lines
2.6 KiB
Bash
|
|
||
|
# 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
|
||
|
}
|
||
|
|