mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 22:25:03 +00:00
test_power: Add support for USB AC source
Usually a device has both AC plug and UDC plug usable for charging. Provide both AC sources. Signed-off-by: Dmitry Eremin-Solenikov <dmitry_eremin@mentor.com> Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
This commit is contained in:
parent
ecb7a8ebdc
commit
7384737588
1 changed files with 46 additions and 2 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/vermagic.h>
|
#include <linux/vermagic.h>
|
||||||
|
|
||||||
static int ac_online = 1;
|
static int ac_online = 1;
|
||||||
|
static int usb_online = 1;
|
||||||
static int battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
|
static int battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
|
||||||
static int battery_health = POWER_SUPPLY_HEALTH_GOOD;
|
static int battery_health = POWER_SUPPLY_HEALTH_GOOD;
|
||||||
static int battery_present = 1; /* true */
|
static int battery_present = 1; /* true */
|
||||||
|
@ -42,6 +43,20 @@ static int test_power_get_ac_property(struct power_supply *psy,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int test_power_get_usb_property(struct power_supply *psy,
|
||||||
|
enum power_supply_property psp,
|
||||||
|
union power_supply_propval *val)
|
||||||
|
{
|
||||||
|
switch (psp) {
|
||||||
|
case POWER_SUPPLY_PROP_ONLINE:
|
||||||
|
val->intval = usb_online;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int test_power_get_battery_property(struct power_supply *psy,
|
static int test_power_get_battery_property(struct power_supply *psy,
|
||||||
enum power_supply_property psp,
|
enum power_supply_property psp,
|
||||||
union power_supply_propval *val)
|
union power_supply_propval *val)
|
||||||
|
@ -135,6 +150,14 @@ static struct power_supply test_power_supplies[] = {
|
||||||
.properties = test_power_battery_props,
|
.properties = test_power_battery_props,
|
||||||
.num_properties = ARRAY_SIZE(test_power_battery_props),
|
.num_properties = ARRAY_SIZE(test_power_battery_props),
|
||||||
.get_property = test_power_get_battery_property,
|
.get_property = test_power_get_battery_property,
|
||||||
|
}, {
|
||||||
|
.name = "test_usb",
|
||||||
|
.type = POWER_SUPPLY_TYPE_USB,
|
||||||
|
.supplied_to = test_power_ac_supplied_to,
|
||||||
|
.num_supplicants = ARRAY_SIZE(test_power_ac_supplied_to),
|
||||||
|
.properties = test_power_ac_props,
|
||||||
|
.num_properties = ARRAY_SIZE(test_power_ac_props),
|
||||||
|
.get_property = test_power_get_usb_property,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -167,6 +190,7 @@ static void __exit test_power_exit(void)
|
||||||
|
|
||||||
/* Let's see how we handle changes... */
|
/* Let's see how we handle changes... */
|
||||||
ac_online = 0;
|
ac_online = 0;
|
||||||
|
usb_online = 0;
|
||||||
battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
|
battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
|
||||||
for (i = 0; i < ARRAY_SIZE(test_power_supplies); i++)
|
for (i = 0; i < ARRAY_SIZE(test_power_supplies); i++)
|
||||||
power_supply_changed(&test_power_supplies[i]);
|
power_supply_changed(&test_power_supplies[i]);
|
||||||
|
@ -275,6 +299,19 @@ static int param_get_ac_online(char *buffer, const struct kernel_param *kp)
|
||||||
return strlen(buffer);
|
return strlen(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int param_set_usb_online(const char *key, const struct kernel_param *kp)
|
||||||
|
{
|
||||||
|
usb_online = map_get_value(map_ac_online, key, usb_online);
|
||||||
|
power_supply_changed(&test_power_supplies[2]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int param_get_usb_online(char *buffer, const struct kernel_param *kp)
|
||||||
|
{
|
||||||
|
strcpy(buffer, map_get_key(map_ac_online, usb_online, "unknown"));
|
||||||
|
return strlen(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
static int param_set_battery_status(const char *key,
|
static int param_set_battery_status(const char *key,
|
||||||
const struct kernel_param *kp)
|
const struct kernel_param *kp)
|
||||||
{
|
{
|
||||||
|
@ -350,13 +387,16 @@ static int param_set_battery_capacity(const char *key,
|
||||||
|
|
||||||
#define param_get_battery_capacity param_get_int
|
#define param_get_battery_capacity param_get_int
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static struct kernel_param_ops param_ops_ac_online = {
|
static struct kernel_param_ops param_ops_ac_online = {
|
||||||
.set = param_set_ac_online,
|
.set = param_set_ac_online,
|
||||||
.get = param_get_ac_online,
|
.get = param_get_ac_online,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct kernel_param_ops param_ops_usb_online = {
|
||||||
|
.set = param_set_usb_online,
|
||||||
|
.get = param_get_usb_online,
|
||||||
|
};
|
||||||
|
|
||||||
static struct kernel_param_ops param_ops_battery_status = {
|
static struct kernel_param_ops param_ops_battery_status = {
|
||||||
.set = param_set_battery_status,
|
.set = param_set_battery_status,
|
||||||
.get = param_get_battery_status,
|
.get = param_get_battery_status,
|
||||||
|
@ -384,6 +424,7 @@ static struct kernel_param_ops param_ops_battery_capacity = {
|
||||||
|
|
||||||
|
|
||||||
#define param_check_ac_online(name, p) __param_check(name, p, void);
|
#define param_check_ac_online(name, p) __param_check(name, p, void);
|
||||||
|
#define param_check_usb_online(name, p) __param_check(name, p, void);
|
||||||
#define param_check_battery_status(name, p) __param_check(name, p, void);
|
#define param_check_battery_status(name, p) __param_check(name, p, void);
|
||||||
#define param_check_battery_present(name, p) __param_check(name, p, void);
|
#define param_check_battery_present(name, p) __param_check(name, p, void);
|
||||||
#define param_check_battery_technology(name, p) __param_check(name, p, void);
|
#define param_check_battery_technology(name, p) __param_check(name, p, void);
|
||||||
|
@ -394,6 +435,9 @@ static struct kernel_param_ops param_ops_battery_capacity = {
|
||||||
module_param(ac_online, ac_online, 0644);
|
module_param(ac_online, ac_online, 0644);
|
||||||
MODULE_PARM_DESC(ac_online, "AC charging state <on|off>");
|
MODULE_PARM_DESC(ac_online, "AC charging state <on|off>");
|
||||||
|
|
||||||
|
module_param(usb_online, usb_online, 0644);
|
||||||
|
MODULE_PARM_DESC(usb_online, "USB charging state <on|off>");
|
||||||
|
|
||||||
module_param(battery_status, battery_status, 0644);
|
module_param(battery_status, battery_status, 0644);
|
||||||
MODULE_PARM_DESC(battery_status,
|
MODULE_PARM_DESC(battery_status,
|
||||||
"battery status <charging|discharging|not-charging|full>");
|
"battery status <charging|discharging|not-charging|full>");
|
||||||
|
|
Loading…
Reference in a new issue