2 # SPDX-License-Identifier: GPL-2.0
4 # Copyright (c) 2022, 2024 Collabora Ltd
5 SYSFS_SUPPLIES
=/sys
/class
/power_supply
8 awk "BEGIN { print $* }";
15 PROP_PATH
="$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP"
16 TEST_NAME
="$DEVNAME".sysfs.
"$PROP"
18 if [ -z "$VALUE" ]; then
19 ktap_test_result
"$TEST_NAME" [ -f "$PROP_PATH" ]
21 ktap_test_result
"$TEST_NAME" grep -q "$VALUE" "$PROP_PATH"
25 to_human_readable_unit
() {
30 *[!0-9]* ) return ;; # Not a number
33 if [ "$UNIT" = "uA" ]; then
36 elif [ "$UNIT" = "uV" ]; then
39 elif [ "$UNIT" = "uAh" ]; then
42 elif [ "$UNIT" = "uW" ]; then
45 elif [ "$UNIT" = "uWh" ]; then
52 value_converted
=$
(calc
"$VALUE"/"$div")
53 echo "$value_converted" "$new_unit"
56 _check_sysfs_prop_available
() {
59 PROP_PATH
="$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP"
60 TEST_NAME
="$DEVNAME".sysfs.
"$PROP"
62 if [ ! -e "$PROP_PATH" ] ; then
63 ktap_test_skip
"$TEST_NAME"
67 if ! cat "$PROP_PATH" >/dev
/null
; then
68 ktap_print_msg
"Failed to read"
69 ktap_test_fail
"$TEST_NAME"
76 test_sysfs_prop_optional
() {
80 TEST_NAME
="$DEVNAME".sysfs.
"$PROP"
82 _check_sysfs_prop_available
"$PROP" ||
return
83 DATA
=$
(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP")
85 ktap_print_msg
"Reported: '$DATA' $UNIT ($(to_human_readable_unit "$DATA" "$UNIT"))"
86 ktap_test_pass
"$TEST_NAME"
89 test_sysfs_prop_optional_range
() {
95 TEST_NAME
="$DEVNAME".sysfs.
"$PROP"
97 _check_sysfs_prop_available
"$PROP" ||
return
98 DATA
=$
(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP")
100 if [ "$DATA" -lt "$MIN" ] ||
[ "$DATA" -gt "$MAX" ]; then
101 ktap_print_msg
"'$DATA' is out of range (min=$MIN, max=$MAX)"
102 ktap_test_fail
"$TEST_NAME"
104 ktap_print_msg
"Reported: '$DATA' $UNIT ($(to_human_readable_unit "$DATA" "$UNIT"))"
105 ktap_test_pass
"$TEST_NAME"
109 test_sysfs_prop_optional_list
() {
113 TEST_NAME
="$DEVNAME".sysfs.
"$PROP"
115 _check_sysfs_prop_available
"$PROP" ||
return
116 DATA
=$
(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP")
122 for item
in $LIST; do
123 if [ "$DATA" = "$item" ]; then
128 if [ "$valid" -eq 1 ]; then
129 ktap_print_msg
"Reported: '$DATA'"
130 ktap_test_pass
"$TEST_NAME"
132 ktap_print_msg
"'$DATA' is not a valid value for this property"
133 ktap_test_fail
"$TEST_NAME"
140 while read -r line
; do
141 ktap_print_msg
"$line"
145 __test_uevent_prop
() {
148 VALUE
="$3" # optional
150 UEVENT_PATH
="$SYSFS_SUPPLIES"/"$DEVNAME"/uevent
151 TEST_NAME
="$DEVNAME".uevent.
"$PROP"
153 if ! grep -q "POWER_SUPPLY_$PROP=" "$UEVENT_PATH"; then
154 if [ "$OPTIONAL" -eq 1 ]; then
155 ktap_test_skip
"$TEST_NAME"
157 ktap_print_msg
"Missing property"
158 ktap_test_fail
"$TEST_NAME"
163 if ! grep -q "POWER_SUPPLY_$PROP=$VALUE" "$UEVENT_PATH"; then
164 ktap_print_msg
"Invalid value for uevent property, dumping..."
165 dump_file
"$UEVENT_PATH"
166 ktap_test_fail
"$TEST_NAME"
168 ktap_test_pass
"$TEST_NAME"
173 __test_uevent_prop
"$1" 0 "$2"
176 test_uevent_prop_optional
() {
177 __test_uevent_prop
"$1" 1 "$2"