diff options
Diffstat (limited to 'drivers/power/test_power.c')
| -rw-r--r-- | drivers/power/test_power.c | 31 | 
1 files changed, 21 insertions, 10 deletions
diff --git a/drivers/power/test_power.c b/drivers/power/test_power.c index b99a452a4fd..0152f35dca5 100644 --- a/drivers/power/test_power.c +++ b/drivers/power/test_power.c @@ -30,6 +30,8 @@ static int battery_technology		= POWER_SUPPLY_TECHNOLOGY_LION;  static int battery_capacity		= 50;  static int battery_voltage		= 3300; +static bool module_initialized; +  static int test_power_get_ac_property(struct power_supply *psy,  				      enum power_supply_property psp,  				      union power_supply_propval *val) @@ -185,6 +187,7 @@ static int __init test_power_init(void)  		}  	} +	module_initialized = true;  	return 0;  failed:  	while (--i >= 0) @@ -209,6 +212,8 @@ static void __exit test_power_exit(void)  	for (i = 0; i < ARRAY_SIZE(test_power_supplies); i++)  		power_supply_unregister(&test_power_supplies[i]); + +	module_initialized = false;  }  module_exit(test_power_exit); @@ -221,8 +226,8 @@ struct battery_property_map {  };  static struct battery_property_map map_ac_online[] = { -	{ 0,  "on"  }, -	{ 1,  "off" }, +	{ 0,  "off"  }, +	{ 1,  "on" },  	{ -1, NULL  },  }; @@ -295,10 +300,16 @@ static const char *map_get_key(struct battery_property_map *map, int value,  	return def_key;  } +static inline void signal_power_supply_changed(struct power_supply *psy) +{ +	if (module_initialized) +		power_supply_changed(psy); +} +  static int param_set_ac_online(const char *key, const struct kernel_param *kp)  {  	ac_online = map_get_value(map_ac_online, key, ac_online); -	power_supply_changed(&test_power_supplies[0]); +	signal_power_supply_changed(&test_power_supplies[0]);  	return 0;  } @@ -311,7 +322,7 @@ static int param_get_ac_online(char *buffer, const struct kernel_param *kp)  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]); +	signal_power_supply_changed(&test_power_supplies[2]);  	return 0;  } @@ -325,7 +336,7 @@ static int param_set_battery_status(const char *key,  					const struct kernel_param *kp)  {  	battery_status = map_get_value(map_status, key, battery_status); -	power_supply_changed(&test_power_supplies[1]); +	signal_power_supply_changed(&test_power_supplies[1]);  	return 0;  } @@ -339,7 +350,7 @@ static int param_set_battery_health(const char *key,  					const struct kernel_param *kp)  {  	battery_health = map_get_value(map_health, key, battery_health); -	power_supply_changed(&test_power_supplies[1]); +	signal_power_supply_changed(&test_power_supplies[1]);  	return 0;  } @@ -353,7 +364,7 @@ static int param_set_battery_present(const char *key,  					const struct kernel_param *kp)  {  	battery_present = map_get_value(map_present, key, battery_present); -	power_supply_changed(&test_power_supplies[0]); +	signal_power_supply_changed(&test_power_supplies[0]);  	return 0;  } @@ -369,7 +380,7 @@ static int param_set_battery_technology(const char *key,  {  	battery_technology = map_get_value(map_technology, key,  						battery_technology); -	power_supply_changed(&test_power_supplies[1]); +	signal_power_supply_changed(&test_power_supplies[1]);  	return 0;  } @@ -390,7 +401,7 @@ static int param_set_battery_capacity(const char *key,  		return -EINVAL;  	battery_capacity = tmp; -	power_supply_changed(&test_power_supplies[1]); +	signal_power_supply_changed(&test_power_supplies[1]);  	return 0;  } @@ -405,7 +416,7 @@ static int param_set_battery_voltage(const char *key,  		return -EINVAL;  	battery_voltage = tmp; -	power_supply_changed(&test_power_supplies[1]); +	signal_power_supply_changed(&test_power_supplies[1]);  	return 0;  }  |