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