115 lines
3.5 KiB
Bash
Executable File
115 lines
3.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Copyright (c) 2022, 2024 Collabora Ltd
|
|
#
|
|
# This test validates the power supply uAPI: namely, the files in sysfs and
|
|
# lines in uevent that expose the power supply properties.
|
|
#
|
|
# By default all power supplies available are tested. Optionally the name of a
|
|
# power supply can be passed as a parameter to test only that one instead.
|
|
DIR="$(dirname "$(readlink -f "$0")")"
|
|
|
|
. "${DIR}"/../kselftest/ktap_helpers.sh
|
|
|
|
. "${DIR}"/helpers.sh
|
|
|
|
count_tests() {
|
|
SUPPLIES=$1
|
|
|
|
# This needs to be updated every time a new test is added.
|
|
NUM_TESTS=33
|
|
|
|
total_tests=0
|
|
|
|
for i in $SUPPLIES; do
|
|
total_tests=$((total_tests + NUM_TESTS))
|
|
done
|
|
|
|
echo "$total_tests"
|
|
}
|
|
|
|
ktap_print_header
|
|
|
|
SYSFS_SUPPLIES=/sys/class/power_supply/
|
|
|
|
if [ $# -eq 0 ]; then
|
|
supplies=$(ls "$SYSFS_SUPPLIES")
|
|
else
|
|
supplies=$1
|
|
fi
|
|
|
|
ktap_set_plan "$(count_tests "$supplies")"
|
|
|
|
for DEVNAME in $supplies; do
|
|
ktap_print_msg Testing device "$DEVNAME"
|
|
|
|
if [ ! -d "$SYSFS_SUPPLIES"/"$DEVNAME" ]; then
|
|
ktap_test_fail "$DEVNAME".exists
|
|
ktap_exit_fail_msg Device does not exist
|
|
fi
|
|
|
|
ktap_test_pass "$DEVNAME".exists
|
|
|
|
test_uevent_prop NAME "$DEVNAME"
|
|
|
|
test_sysfs_prop type
|
|
SUPPLY_TYPE=$(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/type)
|
|
# This fails on kernels < 5.8 (needs 2ad3d74e3c69f)
|
|
test_uevent_prop TYPE "$SUPPLY_TYPE"
|
|
|
|
test_sysfs_prop_optional usb_type
|
|
|
|
test_sysfs_prop_optional_range online 0 2
|
|
test_sysfs_prop_optional_range present 0 1
|
|
|
|
test_sysfs_prop_optional_list status "Unknown","Charging","Discharging","Not charging","Full"
|
|
|
|
# Capacity is reported as percentage, thus any value less than 0 and
|
|
# greater than 100 are not allowed.
|
|
test_sysfs_prop_optional_range capacity 0 100 "%"
|
|
|
|
test_sysfs_prop_optional_list capacity_level "Unknown","Critical","Low","Normal","High","Full"
|
|
|
|
test_sysfs_prop_optional model_name
|
|
test_sysfs_prop_optional manufacturer
|
|
test_sysfs_prop_optional serial_number
|
|
test_sysfs_prop_optional_list technology "Unknown","NiMH","Li-ion","Li-poly","LiFe","NiCd","LiMn"
|
|
|
|
test_sysfs_prop_optional cycle_count
|
|
|
|
test_sysfs_prop_optional_list scope "Unknown","System","Device"
|
|
|
|
test_sysfs_prop_optional input_current_limit "uA"
|
|
test_sysfs_prop_optional input_voltage_limit "uV"
|
|
|
|
# Technically the power-supply class does not limit reported values.
|
|
# E.g. one could expose an RTC backup-battery, which goes below 1.5V or
|
|
# an electric vehicle battery with over 300V. But most devices do not
|
|
# have a step-up capable regulator behind the battery and operate with
|
|
# voltages considered safe to touch, so we limit the allowed range to
|
|
# 1.8V-60V to catch drivers reporting incorrectly scaled values. E.g. a
|
|
# common mistake is reporting data in mV instead of µV.
|
|
test_sysfs_prop_optional_range voltage_now 1800000 60000000 "uV"
|
|
test_sysfs_prop_optional_range voltage_min 1800000 60000000 "uV"
|
|
test_sysfs_prop_optional_range voltage_max 1800000 60000000 "uV"
|
|
test_sysfs_prop_optional_range voltage_min_design 1800000 60000000 "uV"
|
|
test_sysfs_prop_optional_range voltage_max_design 1800000 60000000 "uV"
|
|
|
|
# current based systems
|
|
test_sysfs_prop_optional current_now "uA"
|
|
test_sysfs_prop_optional current_max "uA"
|
|
test_sysfs_prop_optional charge_now "uAh"
|
|
test_sysfs_prop_optional charge_full "uAh"
|
|
test_sysfs_prop_optional charge_full_design "uAh"
|
|
|
|
# power based systems
|
|
test_sysfs_prop_optional power_now "uW"
|
|
test_sysfs_prop_optional energy_now "uWh"
|
|
test_sysfs_prop_optional energy_full "uWh"
|
|
test_sysfs_prop_optional energy_full_design "uWh"
|
|
test_sysfs_prop_optional energy_full_design "uWh"
|
|
done
|
|
|
|
ktap_finished
|