1*053f45beSAndroid Build Coastguard Worker#!/bin/sh 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker# Copyright (C) 2021 Bartosz Golaszewski <[email protected]> 4*053f45beSAndroid Build Coastguard Worker 5*053f45beSAndroid Build Coastguard WorkerBASE_DIR=`dirname $0` 6*053f45beSAndroid Build Coastguard WorkerCONFIGFS_DIR="/sys/kernel/config/gpio-sim" 7*053f45beSAndroid Build Coastguard WorkerMODULE="gpio-sim" 8*053f45beSAndroid Build Coastguard Worker 9*053f45beSAndroid Build Coastguard Workerfail() { 10*053f45beSAndroid Build Coastguard Worker echo "$*" >&2 11*053f45beSAndroid Build Coastguard Worker echo "GPIO $MODULE test FAIL" 12*053f45beSAndroid Build Coastguard Worker exit 1 13*053f45beSAndroid Build Coastguard Worker} 14*053f45beSAndroid Build Coastguard Worker 15*053f45beSAndroid Build Coastguard Workerskip() { 16*053f45beSAndroid Build Coastguard Worker echo "$*" >&2 17*053f45beSAndroid Build Coastguard Worker echo "GPIO $MODULE test SKIP" 18*053f45beSAndroid Build Coastguard Worker exit 4 19*053f45beSAndroid Build Coastguard Worker} 20*053f45beSAndroid Build Coastguard Worker 21*053f45beSAndroid Build Coastguard Workerremove_chip() { 22*053f45beSAndroid Build Coastguard Worker local CHIP=$1 23*053f45beSAndroid Build Coastguard Worker 24*053f45beSAndroid Build Coastguard Worker for FILE in $CONFIGFS_DIR/$CHIP/*; do 25*053f45beSAndroid Build Coastguard Worker BANK=`basename $FILE` 26*053f45beSAndroid Build Coastguard Worker if [ "$BANK" = "live" -o "$BANK" = "dev_name" ]; then 27*053f45beSAndroid Build Coastguard Worker continue 28*053f45beSAndroid Build Coastguard Worker fi 29*053f45beSAndroid Build Coastguard Worker 30*053f45beSAndroid Build Coastguard Worker LINES=`ls $CONFIGFS_DIR/$CHIP/$BANK/ | egrep ^line` 31*053f45beSAndroid Build Coastguard Worker if [ "$?" = 0 ]; then 32*053f45beSAndroid Build Coastguard Worker for LINE in $LINES; do 33*053f45beSAndroid Build Coastguard Worker if [ -e $CONFIGFS_DIR/$CHIP/$BANK/$LINE/hog ]; then 34*053f45beSAndroid Build Coastguard Worker rmdir $CONFIGFS_DIR/$CHIP/$BANK/$LINE/hog || \ 35*053f45beSAndroid Build Coastguard Worker fail "Unable to remove the hog" 36*053f45beSAndroid Build Coastguard Worker fi 37*053f45beSAndroid Build Coastguard Worker 38*053f45beSAndroid Build Coastguard Worker rmdir $CONFIGFS_DIR/$CHIP/$BANK/$LINE || \ 39*053f45beSAndroid Build Coastguard Worker fail "Unable to remove the line" 40*053f45beSAndroid Build Coastguard Worker done 41*053f45beSAndroid Build Coastguard Worker fi 42*053f45beSAndroid Build Coastguard Worker 43*053f45beSAndroid Build Coastguard Worker rmdir $CONFIGFS_DIR/$CHIP/$BANK 44*053f45beSAndroid Build Coastguard Worker done 45*053f45beSAndroid Build Coastguard Worker 46*053f45beSAndroid Build Coastguard Worker rmdir $CONFIGFS_DIR/$CHIP || fail "Unable to remove the chip" 47*053f45beSAndroid Build Coastguard Worker} 48*053f45beSAndroid Build Coastguard Worker 49*053f45beSAndroid Build Coastguard Workerconfigfs_cleanup() { 50*053f45beSAndroid Build Coastguard Worker for CHIP in `ls $CONFIGFS_DIR/`; do 51*053f45beSAndroid Build Coastguard Worker remove_chip $CHIP 52*053f45beSAndroid Build Coastguard Worker done 53*053f45beSAndroid Build Coastguard Worker} 54*053f45beSAndroid Build Coastguard Worker 55*053f45beSAndroid Build Coastguard Workercreate_chip() { 56*053f45beSAndroid Build Coastguard Worker local CHIP=$1 57*053f45beSAndroid Build Coastguard Worker 58*053f45beSAndroid Build Coastguard Worker mkdir $CONFIGFS_DIR/$CHIP 59*053f45beSAndroid Build Coastguard Worker} 60*053f45beSAndroid Build Coastguard Worker 61*053f45beSAndroid Build Coastguard Workercreate_bank() { 62*053f45beSAndroid Build Coastguard Worker local CHIP=$1 63*053f45beSAndroid Build Coastguard Worker local BANK=$2 64*053f45beSAndroid Build Coastguard Worker 65*053f45beSAndroid Build Coastguard Worker mkdir $CONFIGFS_DIR/$CHIP/$BANK 66*053f45beSAndroid Build Coastguard Worker} 67*053f45beSAndroid Build Coastguard Worker 68*053f45beSAndroid Build Coastguard Workerset_label() { 69*053f45beSAndroid Build Coastguard Worker local CHIP=$1 70*053f45beSAndroid Build Coastguard Worker local BANK=$2 71*053f45beSAndroid Build Coastguard Worker local LABEL=$3 72*053f45beSAndroid Build Coastguard Worker 73*053f45beSAndroid Build Coastguard Worker echo $LABEL > $CONFIGFS_DIR/$CHIP/$BANK/label || fail "Unable to set the chip label" 74*053f45beSAndroid Build Coastguard Worker} 75*053f45beSAndroid Build Coastguard Worker 76*053f45beSAndroid Build Coastguard Workerset_num_lines() { 77*053f45beSAndroid Build Coastguard Worker local CHIP=$1 78*053f45beSAndroid Build Coastguard Worker local BANK=$2 79*053f45beSAndroid Build Coastguard Worker local NUM_LINES=$3 80*053f45beSAndroid Build Coastguard Worker 81*053f45beSAndroid Build Coastguard Worker echo $NUM_LINES > $CONFIGFS_DIR/$CHIP/$BANK/num_lines || \ 82*053f45beSAndroid Build Coastguard Worker fail "Unable to set the number of lines" 83*053f45beSAndroid Build Coastguard Worker} 84*053f45beSAndroid Build Coastguard Worker 85*053f45beSAndroid Build Coastguard Workerset_line_name() { 86*053f45beSAndroid Build Coastguard Worker local CHIP=$1 87*053f45beSAndroid Build Coastguard Worker local BANK=$2 88*053f45beSAndroid Build Coastguard Worker local OFFSET=$3 89*053f45beSAndroid Build Coastguard Worker local NAME=$4 90*053f45beSAndroid Build Coastguard Worker local LINE_DIR=$CONFIGFS_DIR/$CHIP/$BANK/line$OFFSET 91*053f45beSAndroid Build Coastguard Worker 92*053f45beSAndroid Build Coastguard Worker test -d $LINE_DIR || mkdir $LINE_DIR 93*053f45beSAndroid Build Coastguard Worker echo $NAME > $LINE_DIR/name || fail "Unable to set the line name" 94*053f45beSAndroid Build Coastguard Worker} 95*053f45beSAndroid Build Coastguard Worker 96*053f45beSAndroid Build Coastguard Workerenable_chip() { 97*053f45beSAndroid Build Coastguard Worker local CHIP=$1 98*053f45beSAndroid Build Coastguard Worker 99*053f45beSAndroid Build Coastguard Worker echo 1 > $CONFIGFS_DIR/$CHIP/live || fail "Unable to enable the chip" 100*053f45beSAndroid Build Coastguard Worker} 101*053f45beSAndroid Build Coastguard Worker 102*053f45beSAndroid Build Coastguard Workerdisable_chip() { 103*053f45beSAndroid Build Coastguard Worker local CHIP=$1 104*053f45beSAndroid Build Coastguard Worker 105*053f45beSAndroid Build Coastguard Worker echo 0 > $CONFIGFS_DIR/$CHIP/live || fail "Unable to disable the chip" 106*053f45beSAndroid Build Coastguard Worker} 107*053f45beSAndroid Build Coastguard Worker 108*053f45beSAndroid Build Coastguard Workerconfigfs_chip_name() { 109*053f45beSAndroid Build Coastguard Worker local CHIP=$1 110*053f45beSAndroid Build Coastguard Worker local BANK=$2 111*053f45beSAndroid Build Coastguard Worker 112*053f45beSAndroid Build Coastguard Worker cat $CONFIGFS_DIR/$CHIP/$BANK/chip_name 2> /dev/null || \ 113*053f45beSAndroid Build Coastguard Worker fail "unable to read the chip name from configfs" 114*053f45beSAndroid Build Coastguard Worker} 115*053f45beSAndroid Build Coastguard Worker 116*053f45beSAndroid Build Coastguard Workerconfigfs_dev_name() { 117*053f45beSAndroid Build Coastguard Worker local CHIP=$1 118*053f45beSAndroid Build Coastguard Worker 119*053f45beSAndroid Build Coastguard Worker cat $CONFIGFS_DIR/$CHIP/dev_name 2> /dev/null || \ 120*053f45beSAndroid Build Coastguard Worker fail "unable to read the device name from configfs" 121*053f45beSAndroid Build Coastguard Worker} 122*053f45beSAndroid Build Coastguard Worker 123*053f45beSAndroid Build Coastguard Workerget_chip_num_lines() { 124*053f45beSAndroid Build Coastguard Worker local CHIP=$1 125*053f45beSAndroid Build Coastguard Worker local BANK=$2 126*053f45beSAndroid Build Coastguard Worker 127*053f45beSAndroid Build Coastguard Worker $BASE_DIR/gpio-chip-info /dev/`configfs_chip_name $CHIP $BANK` num-lines || \ 128*053f45beSAndroid Build Coastguard Worker fail "unable to read the number of lines from the character device" 129*053f45beSAndroid Build Coastguard Worker} 130*053f45beSAndroid Build Coastguard Worker 131*053f45beSAndroid Build Coastguard Workerget_chip_label() { 132*053f45beSAndroid Build Coastguard Worker local CHIP=$1 133*053f45beSAndroid Build Coastguard Worker local BANK=$2 134*053f45beSAndroid Build Coastguard Worker 135*053f45beSAndroid Build Coastguard Worker $BASE_DIR/gpio-chip-info /dev/`configfs_chip_name $CHIP $BANK` label || \ 136*053f45beSAndroid Build Coastguard Worker fail "unable to read the chip label from the character device" 137*053f45beSAndroid Build Coastguard Worker} 138*053f45beSAndroid Build Coastguard Worker 139*053f45beSAndroid Build Coastguard Workerget_line_name() { 140*053f45beSAndroid Build Coastguard Worker local CHIP=$1 141*053f45beSAndroid Build Coastguard Worker local BANK=$2 142*053f45beSAndroid Build Coastguard Worker local OFFSET=$3 143*053f45beSAndroid Build Coastguard Worker 144*053f45beSAndroid Build Coastguard Worker $BASE_DIR/gpio-line-name /dev/`configfs_chip_name $CHIP $BANK` $OFFSET || \ 145*053f45beSAndroid Build Coastguard Worker fail "unable to read the line name from the character device" 146*053f45beSAndroid Build Coastguard Worker} 147*053f45beSAndroid Build Coastguard Worker 148*053f45beSAndroid Build Coastguard Workersysfs_set_pull() { 149*053f45beSAndroid Build Coastguard Worker local DEV=$1 150*053f45beSAndroid Build Coastguard Worker local BANK=$2 151*053f45beSAndroid Build Coastguard Worker local OFFSET=$3 152*053f45beSAndroid Build Coastguard Worker local PULL=$4 153*053f45beSAndroid Build Coastguard Worker local DEVNAME=`configfs_dev_name $DEV` 154*053f45beSAndroid Build Coastguard Worker local CHIPNAME=`configfs_chip_name $DEV $BANK` 155*053f45beSAndroid Build Coastguard Worker local SYSFSPATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/pull" 156*053f45beSAndroid Build Coastguard Worker 157*053f45beSAndroid Build Coastguard Worker echo $PULL > $SYSFSPATH || fail "Unable to set line pull in sysfs" 158*053f45beSAndroid Build Coastguard Worker} 159*053f45beSAndroid Build Coastguard Worker 160*053f45beSAndroid Build Coastguard Worker# Load the gpio-sim module. This will pull in configfs if needed too. 161*053f45beSAndroid Build Coastguard Workermodprobe gpio-sim || skip "unable to load the gpio-sim module" 162*053f45beSAndroid Build Coastguard Worker# Make sure configfs is mounted at /sys/kernel/config. Wait a bit if needed. 163*053f45beSAndroid Build Coastguard Workerfor IDX in `seq 5`; do 164*053f45beSAndroid Build Coastguard Worker if [ "$IDX" -eq "5" ]; then 165*053f45beSAndroid Build Coastguard Worker skip "configfs not mounted at /sys/kernel/config" 166*053f45beSAndroid Build Coastguard Worker fi 167*053f45beSAndroid Build Coastguard Worker 168*053f45beSAndroid Build Coastguard Worker mountpoint -q /sys/kernel/config && break 169*053f45beSAndroid Build Coastguard Worker sleep 0.1 170*053f45beSAndroid Build Coastguard Workerdone 171*053f45beSAndroid Build Coastguard Worker# If the module was already loaded: remove all previous chips 172*053f45beSAndroid Build Coastguard Workerconfigfs_cleanup 173*053f45beSAndroid Build Coastguard Worker 174*053f45beSAndroid Build Coastguard Workertrap "exit 1" SIGTERM SIGINT 175*053f45beSAndroid Build Coastguard Workertrap configfs_cleanup EXIT 176*053f45beSAndroid Build Coastguard Worker 177*053f45beSAndroid Build Coastguard Workerecho "1. chip_name and dev_name attributes" 178*053f45beSAndroid Build Coastguard Worker 179*053f45beSAndroid Build Coastguard Workerecho "1.1. Chip name is communicated to user" 180*053f45beSAndroid Build Coastguard Workercreate_chip chip 181*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 182*053f45beSAndroid Build Coastguard Workerenable_chip chip 183*053f45beSAndroid Build Coastguard Workertest -n `cat $CONFIGFS_DIR/chip/bank/chip_name` || fail "chip_name doesn't work" 184*053f45beSAndroid Build Coastguard Workerremove_chip chip 185*053f45beSAndroid Build Coastguard Worker 186*053f45beSAndroid Build Coastguard Workerecho "1.2. chip_name returns 'none' if the chip is still pending" 187*053f45beSAndroid Build Coastguard Workercreate_chip chip 188*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 189*053f45beSAndroid Build Coastguard Workertest "`cat $CONFIGFS_DIR/chip/bank/chip_name`" = "none" || \ 190*053f45beSAndroid Build Coastguard Worker fail "chip_name doesn't return 'none' for a pending chip" 191*053f45beSAndroid Build Coastguard Workerremove_chip chip 192*053f45beSAndroid Build Coastguard Worker 193*053f45beSAndroid Build Coastguard Workerecho "1.3. Device name is communicated to user" 194*053f45beSAndroid Build Coastguard Workercreate_chip chip 195*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 196*053f45beSAndroid Build Coastguard Workerenable_chip chip 197*053f45beSAndroid Build Coastguard Workertest -n `cat $CONFIGFS_DIR/chip/dev_name` || fail "dev_name doesn't work" 198*053f45beSAndroid Build Coastguard Workerremove_chip chip 199*053f45beSAndroid Build Coastguard Worker 200*053f45beSAndroid Build Coastguard Workerecho "2. Creating and configuring simulated chips" 201*053f45beSAndroid Build Coastguard Worker 202*053f45beSAndroid Build Coastguard Workerecho "2.1. Default number of lines is 1" 203*053f45beSAndroid Build Coastguard Workercreate_chip chip 204*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 205*053f45beSAndroid Build Coastguard Workerenable_chip chip 206*053f45beSAndroid Build Coastguard Workertest "`get_chip_num_lines chip bank`" = "1" || fail "default number of lines is not 1" 207*053f45beSAndroid Build Coastguard Workerremove_chip chip 208*053f45beSAndroid Build Coastguard Worker 209*053f45beSAndroid Build Coastguard Workerecho "2.2. Number of lines can be specified" 210*053f45beSAndroid Build Coastguard Workercreate_chip chip 211*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 212*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 16 213*053f45beSAndroid Build Coastguard Workerenable_chip chip 214*053f45beSAndroid Build Coastguard Workertest "`get_chip_num_lines chip bank`" = "16" || fail "number of lines is not 16" 215*053f45beSAndroid Build Coastguard Workerremove_chip chip 216*053f45beSAndroid Build Coastguard Worker 217*053f45beSAndroid Build Coastguard Workerecho "2.3. Label can be set" 218*053f45beSAndroid Build Coastguard Workercreate_chip chip 219*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 220*053f45beSAndroid Build Coastguard Workerset_label chip bank foobar 221*053f45beSAndroid Build Coastguard Workerenable_chip chip 222*053f45beSAndroid Build Coastguard Workertest "`get_chip_label chip bank`" = "foobar" || fail "label is incorrect" 223*053f45beSAndroid Build Coastguard Workerremove_chip chip 224*053f45beSAndroid Build Coastguard Worker 225*053f45beSAndroid Build Coastguard Workerecho "2.4. Label can be left empty" 226*053f45beSAndroid Build Coastguard Workercreate_chip chip 227*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 228*053f45beSAndroid Build Coastguard Workerenable_chip chip 229*053f45beSAndroid Build Coastguard Workertest -z "`cat $CONFIGFS_DIR/chip/bank/label`" || fail "label is not empty" 230*053f45beSAndroid Build Coastguard Workerremove_chip chip 231*053f45beSAndroid Build Coastguard Worker 232*053f45beSAndroid Build Coastguard Workerecho "2.5. Line names can be configured" 233*053f45beSAndroid Build Coastguard Workercreate_chip chip 234*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 235*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 16 236*053f45beSAndroid Build Coastguard Workerset_line_name chip bank 0 foo 237*053f45beSAndroid Build Coastguard Workerset_line_name chip bank 2 bar 238*053f45beSAndroid Build Coastguard Workerenable_chip chip 239*053f45beSAndroid Build Coastguard Workertest "`get_line_name chip bank 0`" = "foo" || fail "line name is incorrect" 240*053f45beSAndroid Build Coastguard Workertest "`get_line_name chip bank 2`" = "bar" || fail "line name is incorrect" 241*053f45beSAndroid Build Coastguard Workerremove_chip chip 242*053f45beSAndroid Build Coastguard Worker 243*053f45beSAndroid Build Coastguard Workerecho "2.6. Line config can remain unused if offset is greater than number of lines" 244*053f45beSAndroid Build Coastguard Workercreate_chip chip 245*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 246*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 2 247*053f45beSAndroid Build Coastguard Workerset_line_name chip bank 5 foobar 248*053f45beSAndroid Build Coastguard Workerenable_chip chip 249*053f45beSAndroid Build Coastguard Workertest "`get_line_name chip bank 0`" = "" || fail "line name is incorrect" 250*053f45beSAndroid Build Coastguard Workertest "`get_line_name chip bank 1`" = "" || fail "line name is incorrect" 251*053f45beSAndroid Build Coastguard Workerremove_chip chip 252*053f45beSAndroid Build Coastguard Worker 253*053f45beSAndroid Build Coastguard Workerecho "2.7. Line configfs directory names are sanitized" 254*053f45beSAndroid Build Coastguard Workercreate_chip chip 255*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 256*053f45beSAndroid Build Coastguard Workermkdir $CONFIGFS_DIR/chip/bank/line12foobar 2> /dev/null && \ 257*053f45beSAndroid Build Coastguard Worker fail "invalid configfs line name accepted" 258*053f45beSAndroid Build Coastguard Workermkdir $CONFIGFS_DIR/chip/bank/line_no_offset 2> /dev/null && \ 259*053f45beSAndroid Build Coastguard Worker fail "invalid configfs line name accepted" 260*053f45beSAndroid Build Coastguard Workerremove_chip chip 261*053f45beSAndroid Build Coastguard Worker 262*053f45beSAndroid Build Coastguard Workerecho "2.8. Multiple chips can be created" 263*053f45beSAndroid Build Coastguard WorkerCHIPS="chip0 chip1 chip2" 264*053f45beSAndroid Build Coastguard Workerfor CHIP in $CHIPS; do 265*053f45beSAndroid Build Coastguard Worker create_chip $CHIP 266*053f45beSAndroid Build Coastguard Worker create_bank $CHIP bank 267*053f45beSAndroid Build Coastguard Worker enable_chip $CHIP 268*053f45beSAndroid Build Coastguard Workerdone 269*053f45beSAndroid Build Coastguard Workerfor CHIP in $CHIPS; do 270*053f45beSAndroid Build Coastguard Worker remove_chip $CHIP 271*053f45beSAndroid Build Coastguard Workerdone 272*053f45beSAndroid Build Coastguard Worker 273*053f45beSAndroid Build Coastguard Workerecho "2.9. Can't modify settings when chip is live" 274*053f45beSAndroid Build Coastguard Workercreate_chip chip 275*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 276*053f45beSAndroid Build Coastguard Workerenable_chip chip 277*053f45beSAndroid Build Coastguard Workerecho foobar > $CONFIGFS_DIR/chip/bank/label 2> /dev/null && \ 278*053f45beSAndroid Build Coastguard Worker fail "Setting label of a live chip should fail" 279*053f45beSAndroid Build Coastguard Workerecho 8 > $CONFIGFS_DIR/chip/bank/num_lines 2> /dev/null && \ 280*053f45beSAndroid Build Coastguard Worker fail "Setting number of lines of a live chip should fail" 281*053f45beSAndroid Build Coastguard Workerremove_chip chip 282*053f45beSAndroid Build Coastguard Worker 283*053f45beSAndroid Build Coastguard Workerecho "2.10. Can't create line items when chip is live" 284*053f45beSAndroid Build Coastguard Workercreate_chip chip 285*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 286*053f45beSAndroid Build Coastguard Workerenable_chip chip 287*053f45beSAndroid Build Coastguard Workermkdir $CONFIGFS_DIR/chip/bank/line0 2> /dev/null && fail "Creating line item should fail" 288*053f45beSAndroid Build Coastguard Workerremove_chip chip 289*053f45beSAndroid Build Coastguard Worker 290*053f45beSAndroid Build Coastguard Workerecho "2.11. Probe errors are propagated to user-space" 291*053f45beSAndroid Build Coastguard Workercreate_chip chip 292*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 293*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 99999 294*053f45beSAndroid Build Coastguard Workerecho 1 > $CONFIGFS_DIR/chip/live 2> /dev/null && fail "Probe error was not propagated" 295*053f45beSAndroid Build Coastguard Workerremove_chip chip 296*053f45beSAndroid Build Coastguard Worker 297*053f45beSAndroid Build Coastguard Workerecho "2.12. Cannot enable a chip without any GPIO banks" 298*053f45beSAndroid Build Coastguard Workercreate_chip chip 299*053f45beSAndroid Build Coastguard Workerecho 1 > $CONFIGFS_DIR/chip/live 2> /dev/null && fail "Chip enabled without any GPIO banks" 300*053f45beSAndroid Build Coastguard Workerremove_chip chip 301*053f45beSAndroid Build Coastguard Worker 302*053f45beSAndroid Build Coastguard Workerecho "2.13. Duplicate chip labels are not allowed" 303*053f45beSAndroid Build Coastguard Workercreate_chip chip 304*053f45beSAndroid Build Coastguard Workercreate_bank chip bank0 305*053f45beSAndroid Build Coastguard Workerset_label chip bank0 foobar 306*053f45beSAndroid Build Coastguard Workercreate_bank chip bank1 307*053f45beSAndroid Build Coastguard Workerset_label chip bank1 foobar 308*053f45beSAndroid Build Coastguard Workerecho 1 > $CONFIGFS_DIR/chip/live 2> /dev/null && fail "Duplicate chip labels were not rejected" 309*053f45beSAndroid Build Coastguard Workerremove_chip chip 310*053f45beSAndroid Build Coastguard Worker 311*053f45beSAndroid Build Coastguard Workerecho "2.14. Lines can be hogged" 312*053f45beSAndroid Build Coastguard Workercreate_chip chip 313*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 314*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 8 315*053f45beSAndroid Build Coastguard Workermkdir -p $CONFIGFS_DIR/chip/bank/line4/hog 316*053f45beSAndroid Build Coastguard Workerenable_chip chip 317*053f45beSAndroid Build Coastguard Worker$BASE_DIR/gpio-mockup-cdev -s 1 /dev/`configfs_chip_name chip bank` 4 2> /dev/null && \ 318*053f45beSAndroid Build Coastguard Worker fail "Setting the value of a hogged line shouldn't succeed" 319*053f45beSAndroid Build Coastguard Workerremove_chip chip 320*053f45beSAndroid Build Coastguard Worker 321*053f45beSAndroid Build Coastguard Workerecho "3. Controlling simulated chips" 322*053f45beSAndroid Build Coastguard Worker 323*053f45beSAndroid Build Coastguard Workerecho "3.1. Pull can be set over sysfs" 324*053f45beSAndroid Build Coastguard Workercreate_chip chip 325*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 326*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 8 327*053f45beSAndroid Build Coastguard Workerenable_chip chip 328*053f45beSAndroid Build Coastguard Workersysfs_set_pull chip bank 0 pull-up 329*053f45beSAndroid Build Coastguard Worker$BASE_DIR/gpio-mockup-cdev /dev/`configfs_chip_name chip bank` 0 330*053f45beSAndroid Build Coastguard Workertest "$?" = "1" || fail "pull set incorrectly" 331*053f45beSAndroid Build Coastguard Workersysfs_set_pull chip bank 0 pull-down 332*053f45beSAndroid Build Coastguard Worker$BASE_DIR/gpio-mockup-cdev /dev/`configfs_chip_name chip bank` 1 333*053f45beSAndroid Build Coastguard Workertest "$?" = "0" || fail "pull set incorrectly" 334*053f45beSAndroid Build Coastguard Workerremove_chip chip 335*053f45beSAndroid Build Coastguard Worker 336*053f45beSAndroid Build Coastguard Workerecho "3.2. Pull can be read from sysfs" 337*053f45beSAndroid Build Coastguard Workercreate_chip chip 338*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 339*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 8 340*053f45beSAndroid Build Coastguard Workerenable_chip chip 341*053f45beSAndroid Build Coastguard WorkerDEVNAME=`configfs_dev_name chip` 342*053f45beSAndroid Build Coastguard WorkerCHIPNAME=`configfs_chip_name chip bank` 343*053f45beSAndroid Build Coastguard WorkerSYSFS_PATH=/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/pull 344*053f45beSAndroid Build Coastguard Workertest `cat $SYSFS_PATH` = "pull-down" || fail "reading the pull failed" 345*053f45beSAndroid Build Coastguard Workersysfs_set_pull chip bank 0 pull-up 346*053f45beSAndroid Build Coastguard Workertest `cat $SYSFS_PATH` = "pull-up" || fail "reading the pull failed" 347*053f45beSAndroid Build Coastguard Workerremove_chip chip 348*053f45beSAndroid Build Coastguard Worker 349*053f45beSAndroid Build Coastguard Workerecho "3.3. Incorrect input in sysfs is rejected" 350*053f45beSAndroid Build Coastguard Workercreate_chip chip 351*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 352*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 8 353*053f45beSAndroid Build Coastguard Workerenable_chip chip 354*053f45beSAndroid Build Coastguard WorkerDEVNAME=`configfs_dev_name chip` 355*053f45beSAndroid Build Coastguard WorkerCHIPNAME=`configfs_chip_name chip bank` 356*053f45beSAndroid Build Coastguard WorkerSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/pull" 357*053f45beSAndroid Build Coastguard Workerecho foobar > $SYSFS_PATH 2> /dev/null && fail "invalid input not detected" 358*053f45beSAndroid Build Coastguard Workerremove_chip chip 359*053f45beSAndroid Build Coastguard Worker 360*053f45beSAndroid Build Coastguard Workerecho "3.4. Can't write to value" 361*053f45beSAndroid Build Coastguard Workercreate_chip chip 362*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 363*053f45beSAndroid Build Coastguard Workerenable_chip chip 364*053f45beSAndroid Build Coastguard WorkerDEVNAME=`configfs_dev_name chip` 365*053f45beSAndroid Build Coastguard WorkerCHIPNAME=`configfs_chip_name chip bank` 366*053f45beSAndroid Build Coastguard WorkerSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/value" 367*053f45beSAndroid Build Coastguard Workerecho 1 > $SYSFS_PATH 2> /dev/null && fail "writing to 'value' succeeded unexpectedly" 368*053f45beSAndroid Build Coastguard Workerremove_chip chip 369*053f45beSAndroid Build Coastguard Worker 370*053f45beSAndroid Build Coastguard Workerecho "4. Simulated GPIO chips are functional" 371*053f45beSAndroid Build Coastguard Worker 372*053f45beSAndroid Build Coastguard Workerecho "4.1. Values can be read from sysfs" 373*053f45beSAndroid Build Coastguard Workercreate_chip chip 374*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 375*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 8 376*053f45beSAndroid Build Coastguard Workerenable_chip chip 377*053f45beSAndroid Build Coastguard WorkerDEVNAME=`configfs_dev_name chip` 378*053f45beSAndroid Build Coastguard WorkerCHIPNAME=`configfs_chip_name chip bank` 379*053f45beSAndroid Build Coastguard WorkerSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/value" 380*053f45beSAndroid Build Coastguard Workertest `cat $SYSFS_PATH` = "0" || fail "incorrect value read from sysfs" 381*053f45beSAndroid Build Coastguard Worker$BASE_DIR/gpio-mockup-cdev -s 1 /dev/`configfs_chip_name chip bank` 0 & 382*053f45beSAndroid Build Coastguard Workersleep 0.1 # FIXME Any better way? 383*053f45beSAndroid Build Coastguard Workertest `cat $SYSFS_PATH` = "1" || fail "incorrect value read from sysfs" 384*053f45beSAndroid Build Coastguard Workerkill $! 385*053f45beSAndroid Build Coastguard Workerremove_chip chip 386*053f45beSAndroid Build Coastguard Worker 387*053f45beSAndroid Build Coastguard Workerecho "4.2. Bias settings work correctly" 388*053f45beSAndroid Build Coastguard Workercreate_chip chip 389*053f45beSAndroid Build Coastguard Workercreate_bank chip bank 390*053f45beSAndroid Build Coastguard Workerset_num_lines chip bank 8 391*053f45beSAndroid Build Coastguard Workerenable_chip chip 392*053f45beSAndroid Build Coastguard Worker$BASE_DIR/gpio-mockup-cdev -b pull-up /dev/`configfs_chip_name chip bank` 0 393*053f45beSAndroid Build Coastguard Workertest `cat $SYSFS_PATH` = "1" || fail "bias setting does not work" 394*053f45beSAndroid Build Coastguard Workerremove_chip chip 395*053f45beSAndroid Build Coastguard Worker 396*053f45beSAndroid Build Coastguard Workerecho "GPIO $MODULE test PASS" 397