162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * HID to Linux Input mapping 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2022 José Expósito <jose.exposito89@gmail.com> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <kunit/test.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistatic void hid_test_input_set_battery_charge_status(struct kunit *test) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci struct hid_device *dev; 1362306a36Sopenharmony_ci bool handled; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci dev = kunit_kzalloc(test, sizeof(*dev), GFP_KERNEL); 1662306a36Sopenharmony_ci KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev); 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci handled = hidinput_set_battery_charge_status(dev, HID_DG_HEIGHT, 0); 1962306a36Sopenharmony_ci KUNIT_EXPECT_FALSE(test, handled); 2062306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, dev->battery_charge_status, POWER_SUPPLY_STATUS_UNKNOWN); 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci handled = hidinput_set_battery_charge_status(dev, HID_BAT_CHARGING, 0); 2362306a36Sopenharmony_ci KUNIT_EXPECT_TRUE(test, handled); 2462306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, dev->battery_charge_status, POWER_SUPPLY_STATUS_DISCHARGING); 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci handled = hidinput_set_battery_charge_status(dev, HID_BAT_CHARGING, 1); 2762306a36Sopenharmony_ci KUNIT_EXPECT_TRUE(test, handled); 2862306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, dev->battery_charge_status, POWER_SUPPLY_STATUS_CHARGING); 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistatic void hid_test_input_get_battery_property(struct kunit *test) 3262306a36Sopenharmony_ci{ 3362306a36Sopenharmony_ci struct power_supply *psy; 3462306a36Sopenharmony_ci struct hid_device *dev; 3562306a36Sopenharmony_ci union power_supply_propval val; 3662306a36Sopenharmony_ci int ret; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci dev = kunit_kzalloc(test, sizeof(*dev), GFP_KERNEL); 3962306a36Sopenharmony_ci KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev); 4062306a36Sopenharmony_ci dev->battery_avoid_query = true; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci psy = kunit_kzalloc(test, sizeof(*psy), GFP_KERNEL); 4362306a36Sopenharmony_ci KUNIT_ASSERT_NOT_ERR_OR_NULL(test, psy); 4462306a36Sopenharmony_ci psy->drv_data = dev; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci dev->battery_status = HID_BATTERY_UNKNOWN; 4762306a36Sopenharmony_ci dev->battery_charge_status = POWER_SUPPLY_STATUS_CHARGING; 4862306a36Sopenharmony_ci ret = hidinput_get_battery_property(psy, POWER_SUPPLY_PROP_STATUS, &val); 4962306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, ret, 0); 5062306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, val.intval, POWER_SUPPLY_STATUS_UNKNOWN); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci dev->battery_status = HID_BATTERY_REPORTED; 5362306a36Sopenharmony_ci dev->battery_charge_status = POWER_SUPPLY_STATUS_CHARGING; 5462306a36Sopenharmony_ci ret = hidinput_get_battery_property(psy, POWER_SUPPLY_PROP_STATUS, &val); 5562306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, ret, 0); 5662306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, val.intval, POWER_SUPPLY_STATUS_CHARGING); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci dev->battery_status = HID_BATTERY_REPORTED; 5962306a36Sopenharmony_ci dev->battery_charge_status = POWER_SUPPLY_STATUS_DISCHARGING; 6062306a36Sopenharmony_ci ret = hidinput_get_battery_property(psy, POWER_SUPPLY_PROP_STATUS, &val); 6162306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, ret, 0); 6262306a36Sopenharmony_ci KUNIT_EXPECT_EQ(test, val.intval, POWER_SUPPLY_STATUS_DISCHARGING); 6362306a36Sopenharmony_ci} 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistatic struct kunit_case hid_input_tests[] = { 6662306a36Sopenharmony_ci KUNIT_CASE(hid_test_input_set_battery_charge_status), 6762306a36Sopenharmony_ci KUNIT_CASE(hid_test_input_get_battery_property), 6862306a36Sopenharmony_ci { } 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cistatic struct kunit_suite hid_input_test_suite = { 7262306a36Sopenharmony_ci .name = "hid_input", 7362306a36Sopenharmony_ci .test_cases = hid_input_tests, 7462306a36Sopenharmony_ci}; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cikunit_test_suite(hid_input_test_suite); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciMODULE_DESCRIPTION("HID input KUnit tests"); 7962306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 8062306a36Sopenharmony_ciMODULE_AUTHOR("José Expósito <jose.exposito89@gmail.com>"); 81