162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# Copyright (C) 2021 Bartosz Golaszewski <brgl@bgdev.pl> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ciBASE_DIR=`dirname $0` 662306a36Sopenharmony_ciCONFIGFS_DIR="/sys/kernel/config/gpio-sim" 762306a36Sopenharmony_ciMODULE="gpio-sim" 862306a36Sopenharmony_ci 962306a36Sopenharmony_cifail() { 1062306a36Sopenharmony_ci echo "$*" >&2 1162306a36Sopenharmony_ci echo "GPIO $MODULE test FAIL" 1262306a36Sopenharmony_ci exit 1 1362306a36Sopenharmony_ci} 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciskip() { 1662306a36Sopenharmony_ci echo "$*" >&2 1762306a36Sopenharmony_ci echo "GPIO $MODULE test SKIP" 1862306a36Sopenharmony_ci exit 4 1962306a36Sopenharmony_ci} 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciremove_chip() { 2262306a36Sopenharmony_ci local CHIP=$1 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci for FILE in $CONFIGFS_DIR/$CHIP/*; do 2562306a36Sopenharmony_ci BANK=`basename $FILE` 2662306a36Sopenharmony_ci if [ "$BANK" = "live" -o "$BANK" = "dev_name" ]; then 2762306a36Sopenharmony_ci continue 2862306a36Sopenharmony_ci fi 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci LINES=`ls $CONFIGFS_DIR/$CHIP/$BANK/ | grep -E ^line` 3162306a36Sopenharmony_ci if [ "$?" = 0 ]; then 3262306a36Sopenharmony_ci for LINE in $LINES; do 3362306a36Sopenharmony_ci if [ -e $CONFIGFS_DIR/$CHIP/$BANK/$LINE/hog ]; then 3462306a36Sopenharmony_ci rmdir $CONFIGFS_DIR/$CHIP/$BANK/$LINE/hog || \ 3562306a36Sopenharmony_ci fail "Unable to remove the hog" 3662306a36Sopenharmony_ci fi 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci rmdir $CONFIGFS_DIR/$CHIP/$BANK/$LINE || \ 3962306a36Sopenharmony_ci fail "Unable to remove the line" 4062306a36Sopenharmony_ci done 4162306a36Sopenharmony_ci fi 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci rmdir $CONFIGFS_DIR/$CHIP/$BANK 4462306a36Sopenharmony_ci done 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci rmdir $CONFIGFS_DIR/$CHIP || fail "Unable to remove the chip" 4762306a36Sopenharmony_ci} 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciconfigfs_cleanup() { 5062306a36Sopenharmony_ci for CHIP in `ls $CONFIGFS_DIR/`; do 5162306a36Sopenharmony_ci remove_chip $CHIP 5262306a36Sopenharmony_ci done 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cicreate_chip() { 5662306a36Sopenharmony_ci local CHIP=$1 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci mkdir $CONFIGFS_DIR/$CHIP 5962306a36Sopenharmony_ci} 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cicreate_bank() { 6262306a36Sopenharmony_ci local CHIP=$1 6362306a36Sopenharmony_ci local BANK=$2 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci mkdir $CONFIGFS_DIR/$CHIP/$BANK 6662306a36Sopenharmony_ci} 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciset_label() { 6962306a36Sopenharmony_ci local CHIP=$1 7062306a36Sopenharmony_ci local BANK=$2 7162306a36Sopenharmony_ci local LABEL=$3 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci echo $LABEL > $CONFIGFS_DIR/$CHIP/$BANK/label || fail "Unable to set the chip label" 7462306a36Sopenharmony_ci} 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciset_num_lines() { 7762306a36Sopenharmony_ci local CHIP=$1 7862306a36Sopenharmony_ci local BANK=$2 7962306a36Sopenharmony_ci local NUM_LINES=$3 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci echo $NUM_LINES > $CONFIGFS_DIR/$CHIP/$BANK/num_lines || \ 8262306a36Sopenharmony_ci fail "Unable to set the number of lines" 8362306a36Sopenharmony_ci} 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciset_line_name() { 8662306a36Sopenharmony_ci local CHIP=$1 8762306a36Sopenharmony_ci local BANK=$2 8862306a36Sopenharmony_ci local OFFSET=$3 8962306a36Sopenharmony_ci local NAME=$4 9062306a36Sopenharmony_ci local LINE_DIR=$CONFIGFS_DIR/$CHIP/$BANK/line$OFFSET 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci test -d $LINE_DIR || mkdir $LINE_DIR 9362306a36Sopenharmony_ci echo $NAME > $LINE_DIR/name || fail "Unable to set the line name" 9462306a36Sopenharmony_ci} 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_cienable_chip() { 9762306a36Sopenharmony_ci local CHIP=$1 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci echo 1 > $CONFIGFS_DIR/$CHIP/live || fail "Unable to enable the chip" 10062306a36Sopenharmony_ci} 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cidisable_chip() { 10362306a36Sopenharmony_ci local CHIP=$1 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci echo 0 > $CONFIGFS_DIR/$CHIP/live || fail "Unable to disable the chip" 10662306a36Sopenharmony_ci} 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ciconfigfs_chip_name() { 10962306a36Sopenharmony_ci local CHIP=$1 11062306a36Sopenharmony_ci local BANK=$2 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci cat $CONFIGFS_DIR/$CHIP/$BANK/chip_name 2> /dev/null || \ 11362306a36Sopenharmony_ci fail "unable to read the chip name from configfs" 11462306a36Sopenharmony_ci} 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ciconfigfs_dev_name() { 11762306a36Sopenharmony_ci local CHIP=$1 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci cat $CONFIGFS_DIR/$CHIP/dev_name 2> /dev/null || \ 12062306a36Sopenharmony_ci fail "unable to read the device name from configfs" 12162306a36Sopenharmony_ci} 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ciget_chip_num_lines() { 12462306a36Sopenharmony_ci local CHIP=$1 12562306a36Sopenharmony_ci local BANK=$2 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci $BASE_DIR/gpio-chip-info /dev/`configfs_chip_name $CHIP $BANK` num-lines || \ 12862306a36Sopenharmony_ci fail "unable to read the number of lines from the character device" 12962306a36Sopenharmony_ci} 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ciget_chip_label() { 13262306a36Sopenharmony_ci local CHIP=$1 13362306a36Sopenharmony_ci local BANK=$2 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci $BASE_DIR/gpio-chip-info /dev/`configfs_chip_name $CHIP $BANK` label || \ 13662306a36Sopenharmony_ci fail "unable to read the chip label from the character device" 13762306a36Sopenharmony_ci} 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ciget_line_name() { 14062306a36Sopenharmony_ci local CHIP=$1 14162306a36Sopenharmony_ci local BANK=$2 14262306a36Sopenharmony_ci local OFFSET=$3 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci $BASE_DIR/gpio-line-name /dev/`configfs_chip_name $CHIP $BANK` $OFFSET || \ 14562306a36Sopenharmony_ci fail "unable to read the line name from the character device" 14662306a36Sopenharmony_ci} 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_cisysfs_set_pull() { 14962306a36Sopenharmony_ci local DEV=$1 15062306a36Sopenharmony_ci local BANK=$2 15162306a36Sopenharmony_ci local OFFSET=$3 15262306a36Sopenharmony_ci local PULL=$4 15362306a36Sopenharmony_ci local DEVNAME=`configfs_dev_name $DEV` 15462306a36Sopenharmony_ci local CHIPNAME=`configfs_chip_name $DEV $BANK` 15562306a36Sopenharmony_ci local SYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/pull" 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci echo $PULL > $SYSFS_PATH || fail "Unable to set line pull in sysfs" 15862306a36Sopenharmony_ci} 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci# Load the gpio-sim module. This will pull in configfs if needed too. 16162306a36Sopenharmony_cimodprobe gpio-sim || skip "unable to load the gpio-sim module" 16262306a36Sopenharmony_ci# Make sure configfs is mounted at /sys/kernel/config. Wait a bit if needed. 16362306a36Sopenharmony_cifor IDX in `seq 5`; do 16462306a36Sopenharmony_ci if [ "$IDX" -eq "5" ]; then 16562306a36Sopenharmony_ci skip "configfs not mounted at /sys/kernel/config" 16662306a36Sopenharmony_ci fi 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci mountpoint -q /sys/kernel/config && break 16962306a36Sopenharmony_ci sleep 0.1 17062306a36Sopenharmony_cidone 17162306a36Sopenharmony_ci# If the module was already loaded: remove all previous chips 17262306a36Sopenharmony_ciconfigfs_cleanup 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_citrap "exit 1" SIGTERM SIGINT 17562306a36Sopenharmony_citrap configfs_cleanup EXIT 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ciecho "1. chip_name and dev_name attributes" 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ciecho "1.1. Chip name is communicated to user" 18062306a36Sopenharmony_cicreate_chip chip 18162306a36Sopenharmony_cicreate_bank chip bank 18262306a36Sopenharmony_cienable_chip chip 18362306a36Sopenharmony_citest -n `cat $CONFIGFS_DIR/chip/bank/chip_name` || fail "chip_name doesn't work" 18462306a36Sopenharmony_ciremove_chip chip 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ciecho "1.2. chip_name returns 'none' if the chip is still pending" 18762306a36Sopenharmony_cicreate_chip chip 18862306a36Sopenharmony_cicreate_bank chip bank 18962306a36Sopenharmony_citest "`cat $CONFIGFS_DIR/chip/bank/chip_name`" = "none" || \ 19062306a36Sopenharmony_ci fail "chip_name doesn't return 'none' for a pending chip" 19162306a36Sopenharmony_ciremove_chip chip 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ciecho "1.3. Device name is communicated to user" 19462306a36Sopenharmony_cicreate_chip chip 19562306a36Sopenharmony_cicreate_bank chip bank 19662306a36Sopenharmony_cienable_chip chip 19762306a36Sopenharmony_citest -n `cat $CONFIGFS_DIR/chip/dev_name` || fail "dev_name doesn't work" 19862306a36Sopenharmony_ciremove_chip chip 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ciecho "2. Creating and configuring simulated chips" 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ciecho "2.1. Default number of lines is 1" 20362306a36Sopenharmony_cicreate_chip chip 20462306a36Sopenharmony_cicreate_bank chip bank 20562306a36Sopenharmony_cienable_chip chip 20662306a36Sopenharmony_citest "`get_chip_num_lines chip bank`" = "1" || fail "default number of lines is not 1" 20762306a36Sopenharmony_ciremove_chip chip 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ciecho "2.2. Number of lines can be specified" 21062306a36Sopenharmony_cicreate_chip chip 21162306a36Sopenharmony_cicreate_bank chip bank 21262306a36Sopenharmony_ciset_num_lines chip bank 16 21362306a36Sopenharmony_cienable_chip chip 21462306a36Sopenharmony_citest "`get_chip_num_lines chip bank`" = "16" || fail "number of lines is not 16" 21562306a36Sopenharmony_ciremove_chip chip 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ciecho "2.3. Label can be set" 21862306a36Sopenharmony_cicreate_chip chip 21962306a36Sopenharmony_cicreate_bank chip bank 22062306a36Sopenharmony_ciset_label chip bank foobar 22162306a36Sopenharmony_cienable_chip chip 22262306a36Sopenharmony_citest "`get_chip_label chip bank`" = "foobar" || fail "label is incorrect" 22362306a36Sopenharmony_ciremove_chip chip 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ciecho "2.4. Label can be left empty" 22662306a36Sopenharmony_cicreate_chip chip 22762306a36Sopenharmony_cicreate_bank chip bank 22862306a36Sopenharmony_cienable_chip chip 22962306a36Sopenharmony_citest -z "`cat $CONFIGFS_DIR/chip/bank/label`" || fail "label is not empty" 23062306a36Sopenharmony_ciremove_chip chip 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciecho "2.5. Line names can be configured" 23362306a36Sopenharmony_cicreate_chip chip 23462306a36Sopenharmony_cicreate_bank chip bank 23562306a36Sopenharmony_ciset_num_lines chip bank 16 23662306a36Sopenharmony_ciset_line_name chip bank 0 foo 23762306a36Sopenharmony_ciset_line_name chip bank 2 bar 23862306a36Sopenharmony_cienable_chip chip 23962306a36Sopenharmony_citest "`get_line_name chip bank 0`" = "foo" || fail "line name is incorrect" 24062306a36Sopenharmony_citest "`get_line_name chip bank 2`" = "bar" || fail "line name is incorrect" 24162306a36Sopenharmony_ciremove_chip chip 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ciecho "2.6. Line config can remain unused if offset is greater than number of lines" 24462306a36Sopenharmony_cicreate_chip chip 24562306a36Sopenharmony_cicreate_bank chip bank 24662306a36Sopenharmony_ciset_num_lines chip bank 2 24762306a36Sopenharmony_ciset_line_name chip bank 5 foobar 24862306a36Sopenharmony_cienable_chip chip 24962306a36Sopenharmony_citest "`get_line_name chip bank 0`" = "" || fail "line name is incorrect" 25062306a36Sopenharmony_citest "`get_line_name chip bank 1`" = "" || fail "line name is incorrect" 25162306a36Sopenharmony_ciremove_chip chip 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_ciecho "2.7. Line configfs directory names are sanitized" 25462306a36Sopenharmony_cicreate_chip chip 25562306a36Sopenharmony_cicreate_bank chip bank 25662306a36Sopenharmony_cimkdir $CONFIGFS_DIR/chip/bank/line12foobar 2> /dev/null && \ 25762306a36Sopenharmony_ci fail "invalid configfs line name accepted" 25862306a36Sopenharmony_cimkdir $CONFIGFS_DIR/chip/bank/line_no_offset 2> /dev/null && \ 25962306a36Sopenharmony_ci fail "invalid configfs line name accepted" 26062306a36Sopenharmony_ciremove_chip chip 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ciecho "2.8. Multiple chips can be created" 26362306a36Sopenharmony_ciCHIPS="chip0 chip1 chip2" 26462306a36Sopenharmony_cifor CHIP in $CHIPS; do 26562306a36Sopenharmony_ci create_chip $CHIP 26662306a36Sopenharmony_ci create_bank $CHIP bank 26762306a36Sopenharmony_ci enable_chip $CHIP 26862306a36Sopenharmony_cidone 26962306a36Sopenharmony_cifor CHIP in $CHIPS; do 27062306a36Sopenharmony_ci remove_chip $CHIP 27162306a36Sopenharmony_cidone 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ciecho "2.9. Can't modify settings when chip is live" 27462306a36Sopenharmony_cicreate_chip chip 27562306a36Sopenharmony_cicreate_bank chip bank 27662306a36Sopenharmony_cienable_chip chip 27762306a36Sopenharmony_ciecho foobar > $CONFIGFS_DIR/chip/bank/label 2> /dev/null && \ 27862306a36Sopenharmony_ci fail "Setting label of a live chip should fail" 27962306a36Sopenharmony_ciecho 8 > $CONFIGFS_DIR/chip/bank/num_lines 2> /dev/null && \ 28062306a36Sopenharmony_ci fail "Setting number of lines of a live chip should fail" 28162306a36Sopenharmony_ciremove_chip chip 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ciecho "2.10. Can't create line items when chip is live" 28462306a36Sopenharmony_cicreate_chip chip 28562306a36Sopenharmony_cicreate_bank chip bank 28662306a36Sopenharmony_cienable_chip chip 28762306a36Sopenharmony_cimkdir $CONFIGFS_DIR/chip/bank/line0 2> /dev/null && fail "Creating line item should fail" 28862306a36Sopenharmony_ciremove_chip chip 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ciecho "2.11. Probe errors are propagated to user-space" 29162306a36Sopenharmony_cicreate_chip chip 29262306a36Sopenharmony_cicreate_bank chip bank 29362306a36Sopenharmony_ciset_num_lines chip bank 99999 29462306a36Sopenharmony_ciecho 1 > $CONFIGFS_DIR/chip/live 2> /dev/null && fail "Probe error was not propagated" 29562306a36Sopenharmony_ciremove_chip chip 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ciecho "2.12. Cannot enable a chip without any GPIO banks" 29862306a36Sopenharmony_cicreate_chip chip 29962306a36Sopenharmony_ciecho 1 > $CONFIGFS_DIR/chip/live 2> /dev/null && fail "Chip enabled without any GPIO banks" 30062306a36Sopenharmony_ciremove_chip chip 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ciecho "2.13. Duplicate chip labels are not allowed" 30362306a36Sopenharmony_cicreate_chip chip 30462306a36Sopenharmony_cicreate_bank chip bank0 30562306a36Sopenharmony_ciset_label chip bank0 foobar 30662306a36Sopenharmony_cicreate_bank chip bank1 30762306a36Sopenharmony_ciset_label chip bank1 foobar 30862306a36Sopenharmony_ciecho 1 > $CONFIGFS_DIR/chip/live 2> /dev/null && fail "Duplicate chip labels were not rejected" 30962306a36Sopenharmony_ciremove_chip chip 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ciecho "2.14. Lines can be hogged" 31262306a36Sopenharmony_cicreate_chip chip 31362306a36Sopenharmony_cicreate_bank chip bank 31462306a36Sopenharmony_ciset_num_lines chip bank 8 31562306a36Sopenharmony_cimkdir -p $CONFIGFS_DIR/chip/bank/line4/hog 31662306a36Sopenharmony_cienable_chip chip 31762306a36Sopenharmony_ci$BASE_DIR/gpio-mockup-cdev -s 1 /dev/`configfs_chip_name chip bank` 4 2> /dev/null && \ 31862306a36Sopenharmony_ci fail "Setting the value of a hogged line shouldn't succeed" 31962306a36Sopenharmony_ciremove_chip chip 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_ciecho "3. Controlling simulated chips" 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ciecho "3.1. Pull can be set over sysfs" 32462306a36Sopenharmony_cicreate_chip chip 32562306a36Sopenharmony_cicreate_bank chip bank 32662306a36Sopenharmony_ciset_num_lines chip bank 8 32762306a36Sopenharmony_cienable_chip chip 32862306a36Sopenharmony_cisysfs_set_pull chip bank 0 pull-up 32962306a36Sopenharmony_ci$BASE_DIR/gpio-mockup-cdev /dev/`configfs_chip_name chip bank` 0 33062306a36Sopenharmony_citest "$?" = "1" || fail "pull set incorrectly" 33162306a36Sopenharmony_cisysfs_set_pull chip bank 0 pull-down 33262306a36Sopenharmony_ci$BASE_DIR/gpio-mockup-cdev /dev/`configfs_chip_name chip bank` 1 33362306a36Sopenharmony_citest "$?" = "0" || fail "pull set incorrectly" 33462306a36Sopenharmony_ciremove_chip chip 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ciecho "3.2. Pull can be read from sysfs" 33762306a36Sopenharmony_cicreate_chip chip 33862306a36Sopenharmony_cicreate_bank chip bank 33962306a36Sopenharmony_ciset_num_lines chip bank 8 34062306a36Sopenharmony_cienable_chip chip 34162306a36Sopenharmony_ciDEVNAME=`configfs_dev_name chip` 34262306a36Sopenharmony_ciCHIPNAME=`configfs_chip_name chip bank` 34362306a36Sopenharmony_ciSYSFS_PATH=/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/pull 34462306a36Sopenharmony_citest `cat $SYSFS_PATH` = "pull-down" || fail "reading the pull failed" 34562306a36Sopenharmony_cisysfs_set_pull chip bank 0 pull-up 34662306a36Sopenharmony_citest `cat $SYSFS_PATH` = "pull-up" || fail "reading the pull failed" 34762306a36Sopenharmony_ciremove_chip chip 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ciecho "3.3. Incorrect input in sysfs is rejected" 35062306a36Sopenharmony_cicreate_chip chip 35162306a36Sopenharmony_cicreate_bank chip bank 35262306a36Sopenharmony_ciset_num_lines chip bank 8 35362306a36Sopenharmony_cienable_chip chip 35462306a36Sopenharmony_ciDEVNAME=`configfs_dev_name chip` 35562306a36Sopenharmony_ciCHIPNAME=`configfs_chip_name chip bank` 35662306a36Sopenharmony_ciSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/pull" 35762306a36Sopenharmony_ciecho foobar > $SYSFS_PATH 2> /dev/null && fail "invalid input not detected" 35862306a36Sopenharmony_ciremove_chip chip 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ciecho "3.4. Can't write to value" 36162306a36Sopenharmony_cicreate_chip chip 36262306a36Sopenharmony_cicreate_bank chip bank 36362306a36Sopenharmony_cienable_chip chip 36462306a36Sopenharmony_ciDEVNAME=`configfs_dev_name chip` 36562306a36Sopenharmony_ciCHIPNAME=`configfs_chip_name chip bank` 36662306a36Sopenharmony_ciSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/value" 36762306a36Sopenharmony_ciecho 1 > $SYSFS_PATH 2> /dev/null && fail "writing to 'value' succeeded unexpectedly" 36862306a36Sopenharmony_ciremove_chip chip 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ciecho "4. Simulated GPIO chips are functional" 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ciecho "4.1. Values can be read from sysfs" 37362306a36Sopenharmony_cicreate_chip chip 37462306a36Sopenharmony_cicreate_bank chip bank 37562306a36Sopenharmony_ciset_num_lines chip bank 8 37662306a36Sopenharmony_cienable_chip chip 37762306a36Sopenharmony_ciDEVNAME=`configfs_dev_name chip` 37862306a36Sopenharmony_ciCHIPNAME=`configfs_chip_name chip bank` 37962306a36Sopenharmony_ciSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/value" 38062306a36Sopenharmony_citest `cat $SYSFS_PATH` = "0" || fail "incorrect value read from sysfs" 38162306a36Sopenharmony_ci$BASE_DIR/gpio-mockup-cdev -s 1 /dev/`configfs_chip_name chip bank` 0 & 38262306a36Sopenharmony_cisleep 0.1 # FIXME Any better way? 38362306a36Sopenharmony_citest `cat $SYSFS_PATH` = "1" || fail "incorrect value read from sysfs" 38462306a36Sopenharmony_cikill $! 38562306a36Sopenharmony_ciremove_chip chip 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ciecho "4.2. Bias settings work correctly" 38862306a36Sopenharmony_cicreate_chip chip 38962306a36Sopenharmony_cicreate_bank chip bank 39062306a36Sopenharmony_ciset_num_lines chip bank 8 39162306a36Sopenharmony_cienable_chip chip 39262306a36Sopenharmony_ciDEVNAME=`configfs_dev_name chip` 39362306a36Sopenharmony_ciCHIPNAME=`configfs_chip_name chip bank` 39462306a36Sopenharmony_ciSYSFS_PATH="/sys/devices/platform/$DEVNAME/$CHIPNAME/sim_gpio0/value" 39562306a36Sopenharmony_ci$BASE_DIR/gpio-mockup-cdev -b pull-up /dev/`configfs_chip_name chip bank` 0 39662306a36Sopenharmony_citest `cat $SYSFS_PATH` = "1" || fail "bias setting does not work" 39762306a36Sopenharmony_ciremove_chip chip 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ciecho "GPIO $MODULE test PASS" 400