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