static struct display_plugin *disp_plgn;
static struct battery_plugin *battery_plgn;
-static void uevent_power_handler(struct udev_device *dev);
-static const struct uevent_handler uh = {
- .subsystem = POWER_SUBSYSTEM,
- .uevent_func = uevent_power_handler,
-};
-
static struct battery_status battery;
struct battery_status old_battery;
static int noti_id;
int battery_pm_change_internal(int pid, int s_bits);
static int delayed_init_done(void *data);
static void update_health(enum battery_noti_status status);
-static bool battery_dev_available = false;
static int load_uevent(struct parse_result *result, void *user_data);
static int event_handler_state_changed(void *data);
static void power_supply_exit(void *data);
battery.misc = atoi(env_value);
}
-static void check_online_type(const char *env_value)
-{
- if (env_value == NULL)
- return;
- battery.charger_connected = atoi(env_value);
-}
-
-static void check_present_status(const char *env_value)
-{
- if (env_value == NULL) {
- battery.present = PRESENT_NORMAL;
- return;
- }
- battery.present = atoi(env_value);
-}
-
-static void check_capacity_status(const char *env_value)
-{
- if (env_value == NULL)
- return;
- battery.capacity = atoi(env_value);
-}
-
-static void check_temperature_status(const char *env_value)
-{
- if (env_value == NULL)
- return;
- battery.temperature = atoi(env_value) / 10;
-}
-
static void process_power_supply(void *data)
{
bool broadcasted = true;
}
}
-static void uevent_power_handler(struct udev_device *dev)
-{
- struct udev_list_entry *list_entry;
- const char *env_name;
- const char *env_value;
- bool matched = false;
- int ret_val;
-
- udev_list_entry_foreach(list_entry,
- udev_device_get_properties_list_entry(dev)) {
- env_name = udev_list_entry_get_name(list_entry);
- if (!env_name)
- continue;
-
- if (!strncmp(env_name, CHARGE_NAME, sizeof(CHARGE_NAME))) {
- env_value = udev_list_entry_get_value(list_entry);
- if (!env_value)
- continue;
- if (!strncmp(env_value, BATTERY_NAME,
- sizeof(BATTERY_NAME))) {
- matched = true;
- break;
- }
- }
- }
-
- if (!matched)
- return;
-
- env_value = udev_device_get_property_value(dev, CHARGE_STATUS);
- check_charging_status(env_value);
- env_value = udev_device_get_property_value(dev, CHARGE_ONLINE);
- check_online_type(env_value);
- env_value = udev_device_get_property_value(dev, CHARGE_HEALTH);
- check_health_status(env_value);
- env_value = udev_device_get_property_value(dev, CHARGE_MISC_EVENT);
- check_misc_status(env_value);
- env_value = udev_device_get_property_value(dev, CHARGE_PRESENT);
- check_present_status(env_value);
- env_value = udev_device_get_property_value(dev, CAPACITY);
- check_capacity_status(env_value);
- env_value = udev_device_get_property_value(dev, TEMPERATURE);
- check_temperature_status(env_value);
-
- /* The uevent property or HAL API for charger_type is not supported. Therefore,
- * use pseudo value for the online_type according to charger connectivity. */
- if (battery.charger_connected == 0)
- battery.online_type = CHARGER_TYPE_NONE;
- else if (battery.charger_connected == 1)
- battery.online_type = CHARGER_TYPE_USB;
-
- battery_initialized = true;
-
- ret_val = delayed_init_done(NULL);
- if (ret_val) {
- if (battery.charger_connected == 1)
- power_supply_noti(DEVICE_NOTI_BATT_CHARGE, DEVICE_NOTI_ON);
- else
- power_supply_noti(DEVICE_NOTI_BATT_CHARGE, DEVICE_NOTI_OFF);
- }
-
- process_power_supply(&battery.capacity);
-}
-
static int battery_state(struct battery_info *info)
{
static struct battery_status prev_status;
{
int retval;
- if (!battery_dev_available)
- return G_SOURCE_REMOVE;
-
retval = hal_device_battery_get_current_state(battery_changed, NULL);
if (retval == -ENODEV) {
CRITICAL_LOG_E("There is no battery detected. Disable the battery module.");
_D("C(%d) S(%s) H(%s) O(%d) P(%d) SRC(%s) Vol(%d %d) Cur(%d %d) T(%d)",
info.capacity, info.status, info.health, info.online, info.present, info.power_source, info.voltage_now, info.voltage_average, info.current_now, info.current_average, info.temperature);
- if (battery_dev_available)
- battery_changed(&info, NULL);
+ battery_changed(&info, NULL);
out:
g_free(type_str);
goto out;
ret = hal_device_battery_get_current_state(battery_get_info, &info);
- if (battery_dev_available && (ret != -ENODEV)) {
+ if (ret != -ENODEV) {
if (ret < 0)
_E("Failed to get battery info: %d", ret);
int ret_val, r;
- if (battery_dev_available)
- return 0;
-
ret_val = hal_device_battery_get_backend();
if (ret_val < 0) {
_E("There is no HAL for battery.");
- battery_dev_available = false;
if (access(POWER_PATH, R_OK) == 0)
return 0; /* Just power_supply uevent is used */
}
_I("Battery device structure load success.");
- battery_dev_available = true;
return 0;
out:
static void add_power_supply_handler(void)
{
- int ret_val;
-
- if (battery_dev_available) {
- hal_device_battery_register_changed_event(battery_changed, NULL);
- hal_device_battery_get_current_state(battery_changed, NULL);
- } else {
- ret_val = config_parse(POWER_SUPPLY_UEVENT, load_uevent, &battery);
- if (ret_val < 0)
- _E("Failed to load %s, %d Use default value!", POWER_SUPPLY_UEVENT, ret_val);
-
- /* register power subsystem */
- register_kernel_uevent_control(&uh);
- }
+ hal_device_battery_register_changed_event(battery_changed, NULL);
+ hal_device_battery_get_current_state(battery_changed, NULL);
}
static void remove_power_supply_handler(void)
{
- if (battery_dev_available)
- hal_device_battery_unregister_changed_event(battery_changed);
- else
- unregister_kernel_uevent_control(&uh);
+ hal_device_battery_unregister_changed_event(battery_changed);
}
static int event_handler_state_changed(void *data)
event_handler_state_changed((void *)&state);
battery_ops_exit(NULL);
- battery_dev_available = false;
}
static const struct device_ops power_supply_ops = {