Lines Matching refs:battery
161 static inline int acpi_battery_present(struct acpi_battery *battery) in acpi_battery_present() argument
163 return battery->device->status.battery_present; in acpi_battery_present()
166 static int acpi_battery_technology(struct acpi_battery *battery) in acpi_battery_technology() argument
168 if (!strcasecmp("NiCd", battery->type)) in acpi_battery_technology()
170 if (!strcasecmp("NiMH", battery->type)) in acpi_battery_technology()
172 if (!strcasecmp("LION", battery->type)) in acpi_battery_technology()
174 if (!strncasecmp("LI-ION", battery->type, 6)) in acpi_battery_technology()
176 if (!strcasecmp("LiP", battery->type)) in acpi_battery_technology()
181 static int acpi_battery_get_state(struct acpi_battery *battery);
183 static int acpi_battery_is_charged(struct acpi_battery *battery) in acpi_battery_is_charged() argument
186 if (battery->state != 0) in acpi_battery_is_charged()
190 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN || in acpi_battery_is_charged()
191 battery->capacity_now == 0) in acpi_battery_is_charged()
195 if (battery->full_charge_capacity == battery->capacity_now) in acpi_battery_is_charged()
199 if (battery->design_capacity == battery->capacity_now) in acpi_battery_is_charged()
206 static bool acpi_battery_is_degraded(struct acpi_battery *battery) in acpi_battery_is_degraded() argument
208 return battery->full_charge_capacity && battery->design_capacity && in acpi_battery_is_degraded()
209 battery->full_charge_capacity < battery->design_capacity; in acpi_battery_is_degraded()
212 static int acpi_battery_handle_discharging(struct acpi_battery *battery) in acpi_battery_handle_discharging() argument
220 battery->rate_now == 0) in acpi_battery_handle_discharging()
231 struct acpi_battery *battery = to_acpi_battery(psy); in acpi_battery_get_property() local
233 if (acpi_battery_present(battery)) { in acpi_battery_get_property()
235 acpi_battery_get_state(battery); in acpi_battery_get_property()
240 if (battery->state & ACPI_BATTERY_STATE_DISCHARGING) in acpi_battery_get_property()
241 val->intval = acpi_battery_handle_discharging(battery); in acpi_battery_get_property()
242 else if (battery->state & ACPI_BATTERY_STATE_CHARGING) in acpi_battery_get_property()
244 else if (acpi_battery_is_charged(battery)) in acpi_battery_get_property()
250 val->intval = acpi_battery_present(battery); in acpi_battery_get_property()
253 val->intval = acpi_battery_technology(battery); in acpi_battery_get_property()
256 val->intval = battery->cycle_count; in acpi_battery_get_property()
259 if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_get_property()
262 val->intval = battery->design_voltage * 1000; in acpi_battery_get_property()
265 if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_get_property()
268 val->intval = battery->voltage_now * 1000; in acpi_battery_get_property()
272 if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_get_property()
275 val->intval = battery->rate_now * 1000; in acpi_battery_get_property()
279 if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_get_property()
282 val->intval = battery->design_capacity * 1000; in acpi_battery_get_property()
286 if (battery->full_charge_capacity == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_get_property()
289 val->intval = battery->full_charge_capacity * 1000; in acpi_battery_get_property()
293 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_get_property()
296 val->intval = battery->capacity_now * 1000; in acpi_battery_get_property()
299 if (battery->capacity_now && battery->full_charge_capacity) in acpi_battery_get_property()
300 val->intval = battery->capacity_now * 100/ in acpi_battery_get_property()
301 battery->full_charge_capacity; in acpi_battery_get_property()
306 if (battery->state & ACPI_BATTERY_STATE_CRITICAL) in acpi_battery_get_property()
308 else if (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) && in acpi_battery_get_property()
309 (battery->capacity_now <= battery->alarm)) in acpi_battery_get_property()
311 else if (acpi_battery_is_charged(battery)) in acpi_battery_get_property()
317 val->strval = battery->model_number; in acpi_battery_get_property()
320 val->strval = battery->oem_info; in acpi_battery_get_property()
323 val->strval = battery->serial_number; in acpi_battery_get_property()
435 static int extract_package(struct acpi_battery *battery, in extract_package() argument
448 u8 *ptr = (u8 *)battery + offsets[i].offset; in extract_package()
459 int *x = (int *)((u8 *)battery + offsets[i].offset); in extract_package()
467 static int acpi_battery_get_status(struct acpi_battery *battery) in acpi_battery_get_status() argument
469 if (acpi_bus_get_status(battery->device)) { in acpi_battery_get_status()
478 struct acpi_battery *battery, in extract_battery_info() argument
484 result = extract_package(battery, buffer->pointer, in extract_battery_info()
488 result = extract_package(battery, buffer->pointer, in extract_battery_info()
492 result = extract_package(battery, buffer->pointer, in extract_battery_info()
494 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) in extract_battery_info()
495 battery->full_charge_capacity = battery->design_capacity; in extract_battery_info()
496 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) && in extract_battery_info()
497 battery->power_unit && battery->design_voltage) { in extract_battery_info()
498 battery->design_capacity = battery->design_capacity * in extract_battery_info()
499 10000 / battery->design_voltage; in extract_battery_info()
500 battery->full_charge_capacity = battery->full_charge_capacity * in extract_battery_info()
501 10000 / battery->design_voltage; in extract_battery_info()
502 battery->design_capacity_warning = in extract_battery_info()
503 battery->design_capacity_warning * in extract_battery_info()
504 10000 / battery->design_voltage; in extract_battery_info()
511 if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags) && in extract_battery_info()
512 battery->capacity_now > battery->full_charge_capacity) in extract_battery_info()
513 battery->capacity_now = battery->full_charge_capacity; in extract_battery_info()
518 static int acpi_battery_get_info(struct acpi_battery *battery) in acpi_battery_get_info() argument
520 const int xinfo = test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); in acpi_battery_get_info()
524 if (!acpi_battery_present(battery)) in acpi_battery_get_info()
532 mutex_lock(&battery->lock); in acpi_battery_get_info()
533 status = acpi_evaluate_object(battery->device->handle, in acpi_battery_get_info()
536 mutex_unlock(&battery->lock); in acpi_battery_get_info()
543 battery, in acpi_battery_get_info()
557 static int acpi_battery_get_state(struct acpi_battery *battery) in acpi_battery_get_state() argument
563 if (!acpi_battery_present(battery)) in acpi_battery_get_state()
566 if (battery->update_time && in acpi_battery_get_state()
567 time_before(jiffies, battery->update_time + in acpi_battery_get_state()
571 mutex_lock(&battery->lock); in acpi_battery_get_state()
572 status = acpi_evaluate_object(battery->device->handle, "_BST", in acpi_battery_get_state()
574 mutex_unlock(&battery->lock); in acpi_battery_get_state()
581 result = extract_package(battery, buffer.pointer, in acpi_battery_get_state()
583 battery->update_time = jiffies; in acpi_battery_get_state()
590 if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA && in acpi_battery_get_state()
591 battery->rate_now != ACPI_BATTERY_VALUE_UNKNOWN && in acpi_battery_get_state()
592 (s16)(battery->rate_now) < 0) { in acpi_battery_get_state()
593 battery->rate_now = abs((s16)battery->rate_now); in acpi_battery_get_state()
597 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags) in acpi_battery_get_state()
598 && battery->capacity_now >= 0 && battery->capacity_now <= 100) in acpi_battery_get_state()
599 battery->capacity_now = (battery->capacity_now * in acpi_battery_get_state()
600 battery->full_charge_capacity) / 100; in acpi_battery_get_state()
601 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) && in acpi_battery_get_state()
602 battery->power_unit && battery->design_voltage) { in acpi_battery_get_state()
603 battery->capacity_now = battery->capacity_now * in acpi_battery_get_state()
604 10000 / battery->design_voltage; in acpi_battery_get_state()
606 if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags) && in acpi_battery_get_state()
607 battery->capacity_now > battery->full_charge_capacity) in acpi_battery_get_state()
608 battery->capacity_now = battery->full_charge_capacity; in acpi_battery_get_state()
613 static int acpi_battery_set_alarm(struct acpi_battery *battery) in acpi_battery_set_alarm() argument
617 if (!acpi_battery_present(battery) || in acpi_battery_set_alarm()
618 !test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags)) in acpi_battery_set_alarm()
621 mutex_lock(&battery->lock); in acpi_battery_set_alarm()
622 status = acpi_execute_simple_method(battery->device->handle, "_BTP", in acpi_battery_set_alarm()
623 battery->alarm); in acpi_battery_set_alarm()
624 mutex_unlock(&battery->lock); in acpi_battery_set_alarm()
629 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Alarm set to %d\n", battery->alarm)); in acpi_battery_set_alarm()
633 static int acpi_battery_init_alarm(struct acpi_battery *battery) in acpi_battery_init_alarm() argument
636 if (!acpi_has_method(battery->device->handle, "_BTP")) { in acpi_battery_init_alarm()
637 clear_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags); in acpi_battery_init_alarm()
640 set_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags); in acpi_battery_init_alarm()
641 if (!battery->alarm) in acpi_battery_init_alarm()
642 battery->alarm = battery->design_capacity_warning; in acpi_battery_init_alarm()
643 return acpi_battery_set_alarm(battery); in acpi_battery_init_alarm()
650 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); in acpi_battery_alarm_show() local
651 return sprintf(buf, "%d\n", battery->alarm * 1000); in acpi_battery_alarm_show()
659 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); in acpi_battery_alarm_store() local
661 battery->alarm = x/1000; in acpi_battery_alarm_store()
662 if (acpi_battery_present(battery)) in acpi_battery_alarm_store()
663 acpi_battery_set_alarm(battery); in acpi_battery_alarm_store()
688 struct acpi_battery *battery; in __battery_hook_unregister() local
695 list_for_each_entry(battery, &acpi_battery_list, list) { in __battery_hook_unregister()
696 hook->remove_battery(battery->bat); in __battery_hook_unregister()
712 struct acpi_battery *battery; in battery_hook_register() local
723 list_for_each_entry(battery, &acpi_battery_list, list) { in battery_hook_register()
724 if (hook->add_battery(battery->bat)) { in battery_hook_register()
747 static void battery_hook_add_battery(struct acpi_battery *battery) in battery_hook_add_battery() argument
752 INIT_LIST_HEAD(&battery->list); in battery_hook_add_battery()
753 list_add(&battery->list, &acpi_battery_list); in battery_hook_add_battery()
762 if (hook_node->add_battery(battery->bat)) { in battery_hook_add_battery()
775 static void battery_hook_remove_battery(struct acpi_battery *battery) in battery_hook_remove_battery() argument
785 hook->remove_battery(battery->bat); in battery_hook_remove_battery()
788 list_del(&battery->list); in battery_hook_remove_battery()
807 static int sysfs_add_battery(struct acpi_battery *battery) in sysfs_add_battery() argument
809 struct power_supply_config psy_cfg = { .drv_data = battery, }; in sysfs_add_battery()
811 if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) { in sysfs_add_battery()
812 battery->bat_desc.properties = charge_battery_props; in sysfs_add_battery()
813 battery->bat_desc.num_properties = in sysfs_add_battery()
815 } else if (battery->full_charge_capacity == 0) { in sysfs_add_battery()
816 battery->bat_desc.properties = in sysfs_add_battery()
818 battery->bat_desc.num_properties = in sysfs_add_battery()
821 battery->bat_desc.properties = energy_battery_props; in sysfs_add_battery()
822 battery->bat_desc.num_properties = in sysfs_add_battery()
826 battery->bat_desc.name = acpi_device_bid(battery->device); in sysfs_add_battery()
827 battery->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY; in sysfs_add_battery()
828 battery->bat_desc.get_property = acpi_battery_get_property; in sysfs_add_battery()
830 battery->bat = power_supply_register_no_ws(&battery->device->dev, in sysfs_add_battery()
831 &battery->bat_desc, &psy_cfg); in sysfs_add_battery()
833 if (IS_ERR(battery->bat)) { in sysfs_add_battery()
834 int result = PTR_ERR(battery->bat); in sysfs_add_battery()
836 battery->bat = NULL; in sysfs_add_battery()
839 battery_hook_add_battery(battery); in sysfs_add_battery()
840 return device_create_file(&battery->bat->dev, &alarm_attr); in sysfs_add_battery()
843 static void sysfs_remove_battery(struct acpi_battery *battery) in sysfs_remove_battery() argument
845 mutex_lock(&battery->sysfs_lock); in sysfs_remove_battery()
846 if (!battery->bat) { in sysfs_remove_battery()
847 mutex_unlock(&battery->sysfs_lock); in sysfs_remove_battery()
850 battery_hook_remove_battery(battery); in sysfs_remove_battery()
851 device_remove_file(&battery->bat->dev, &alarm_attr); in sysfs_remove_battery()
852 power_supply_unregister(battery->bat); in sysfs_remove_battery()
853 battery->bat = NULL; in sysfs_remove_battery()
854 mutex_unlock(&battery->sysfs_lock); in sysfs_remove_battery()
859 struct acpi_battery *battery = (struct acpi_battery *)private; in find_battery() local
867 if (battery->design_capacity * battery->design_voltage / 1000 in find_battery()
869 battery->design_capacity * 10 == dmi_capacity) in find_battery()
871 &battery->flags); in find_battery()
887 static void acpi_battery_quirks(struct acpi_battery *battery) in acpi_battery_quirks() argument
889 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) in acpi_battery_quirks()
892 if (battery->full_charge_capacity == 100 && in acpi_battery_quirks()
893 battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN && in acpi_battery_quirks()
894 battery->capacity_now >= 0 && battery->capacity_now <= 100) { in acpi_battery_quirks()
895 set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags); in acpi_battery_quirks()
896 battery->full_charge_capacity = battery->design_capacity; in acpi_battery_quirks()
897 battery->capacity_now = (battery->capacity_now * in acpi_battery_quirks()
898 battery->full_charge_capacity) / 100; in acpi_battery_quirks()
901 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags)) in acpi_battery_quirks()
904 if (battery->power_unit && dmi_name_in_vendors("LENOVO")) { in acpi_battery_quirks()
908 dmi_walk(find_battery, battery); in acpi_battery_quirks()
910 &battery->flags) && in acpi_battery_quirks()
911 battery->design_voltage) { in acpi_battery_quirks()
912 battery->design_capacity = in acpi_battery_quirks()
913 battery->design_capacity * in acpi_battery_quirks()
914 10000 / battery->design_voltage; in acpi_battery_quirks()
915 battery->full_charge_capacity = in acpi_battery_quirks()
916 battery->full_charge_capacity * in acpi_battery_quirks()
917 10000 / battery->design_voltage; in acpi_battery_quirks()
918 battery->design_capacity_warning = in acpi_battery_quirks()
919 battery->design_capacity_warning * in acpi_battery_quirks()
920 10000 / battery->design_voltage; in acpi_battery_quirks()
921 battery->capacity_now = battery->capacity_now * in acpi_battery_quirks()
922 10000 / battery->design_voltage; in acpi_battery_quirks()
927 if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags)) in acpi_battery_quirks()
930 if (acpi_battery_is_degraded(battery) && in acpi_battery_quirks()
931 battery->capacity_now > battery->full_charge_capacity) { in acpi_battery_quirks()
932 set_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags); in acpi_battery_quirks()
933 battery->capacity_now = battery->full_charge_capacity; in acpi_battery_quirks()
937 static int acpi_battery_update(struct acpi_battery *battery, bool resume) in acpi_battery_update() argument
939 int result = acpi_battery_get_status(battery); in acpi_battery_update()
944 if (!acpi_battery_present(battery)) { in acpi_battery_update()
945 sysfs_remove_battery(battery); in acpi_battery_update()
946 battery->update_time = 0; in acpi_battery_update()
953 if (!battery->update_time) { in acpi_battery_update()
954 result = acpi_battery_get_info(battery); in acpi_battery_update()
957 acpi_battery_init_alarm(battery); in acpi_battery_update()
960 result = acpi_battery_get_state(battery); in acpi_battery_update()
963 acpi_battery_quirks(battery); in acpi_battery_update()
965 if (!battery->bat) { in acpi_battery_update()
966 result = sysfs_add_battery(battery); in acpi_battery_update()
975 if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) || in acpi_battery_update()
976 (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) && in acpi_battery_update()
977 (battery->capacity_now <= battery->alarm))) in acpi_battery_update()
978 acpi_pm_wakeup_event(&battery->device->dev); in acpi_battery_update()
983 static void acpi_battery_refresh(struct acpi_battery *battery) in acpi_battery_refresh() argument
987 if (!battery->bat) in acpi_battery_refresh()
990 power_unit = battery->power_unit; in acpi_battery_refresh()
992 acpi_battery_get_info(battery); in acpi_battery_refresh()
994 if (power_unit == battery->power_unit) in acpi_battery_refresh()
998 sysfs_remove_battery(battery); in acpi_battery_refresh()
999 sysfs_add_battery(battery); in acpi_battery_refresh()
1009 static const char *acpi_battery_units(const struct acpi_battery *battery) in acpi_battery_units() argument
1011 return (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) ? in acpi_battery_units()
1017 struct acpi_battery *battery = seq->private; in acpi_battery_info_proc_show() local
1018 int result = acpi_battery_update(battery, false); in acpi_battery_info_proc_show()
1024 acpi_battery_present(battery) ? "yes" : "no"); in acpi_battery_info_proc_show()
1025 if (!acpi_battery_present(battery)) in acpi_battery_info_proc_show()
1027 if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_info_proc_show()
1031 battery->design_capacity, in acpi_battery_info_proc_show()
1032 acpi_battery_units(battery)); in acpi_battery_info_proc_show()
1034 if (battery->full_charge_capacity == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_info_proc_show()
1038 battery->full_charge_capacity, in acpi_battery_info_proc_show()
1039 acpi_battery_units(battery)); in acpi_battery_info_proc_show()
1042 battery->technology ? "" : "non-"); in acpi_battery_info_proc_show()
1044 if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_info_proc_show()
1048 battery->design_voltage); in acpi_battery_info_proc_show()
1050 battery->design_capacity_warning, in acpi_battery_info_proc_show()
1051 acpi_battery_units(battery)); in acpi_battery_info_proc_show()
1053 battery->design_capacity_low, in acpi_battery_info_proc_show()
1054 acpi_battery_units(battery)); in acpi_battery_info_proc_show()
1055 seq_printf(seq, "cycle count: %i\n", battery->cycle_count); in acpi_battery_info_proc_show()
1057 battery->capacity_granularity_1, in acpi_battery_info_proc_show()
1058 acpi_battery_units(battery)); in acpi_battery_info_proc_show()
1060 battery->capacity_granularity_2, in acpi_battery_info_proc_show()
1061 acpi_battery_units(battery)); in acpi_battery_info_proc_show()
1062 seq_printf(seq, "model number: %s\n", battery->model_number); in acpi_battery_info_proc_show()
1063 seq_printf(seq, "serial number: %s\n", battery->serial_number); in acpi_battery_info_proc_show()
1064 seq_printf(seq, "battery type: %s\n", battery->type); in acpi_battery_info_proc_show()
1065 seq_printf(seq, "OEM info: %s\n", battery->oem_info); in acpi_battery_info_proc_show()
1074 struct acpi_battery *battery = seq->private; in acpi_battery_state_proc_show() local
1075 int result = acpi_battery_update(battery, false); in acpi_battery_state_proc_show()
1081 acpi_battery_present(battery) ? "yes" : "no"); in acpi_battery_state_proc_show()
1082 if (!acpi_battery_present(battery)) in acpi_battery_state_proc_show()
1086 (battery->state & 0x04) ? "critical" : "ok"); in acpi_battery_state_proc_show()
1087 if ((battery->state & 0x01) && (battery->state & 0x02)) in acpi_battery_state_proc_show()
1090 else if (battery->state & 0x01) in acpi_battery_state_proc_show()
1092 else if (battery->state & 0x02) in acpi_battery_state_proc_show()
1097 if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_state_proc_show()
1101 battery->rate_now, acpi_battery_units(battery)); in acpi_battery_state_proc_show()
1103 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_state_proc_show()
1107 battery->capacity_now, acpi_battery_units(battery)); in acpi_battery_state_proc_show()
1108 if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN) in acpi_battery_state_proc_show()
1112 battery->voltage_now); in acpi_battery_state_proc_show()
1122 struct acpi_battery *battery = seq->private; in acpi_battery_alarm_proc_show() local
1123 int result = acpi_battery_update(battery, false); in acpi_battery_alarm_proc_show()
1128 if (!acpi_battery_present(battery)) { in acpi_battery_alarm_proc_show()
1133 if (battery->alarm) { in acpi_battery_alarm_proc_show()
1134 seq_printf(seq, "%u %sh\n", battery->alarm, in acpi_battery_alarm_proc_show()
1135 acpi_battery_units(battery)); in acpi_battery_alarm_proc_show()
1152 struct acpi_battery *battery = m->private; in acpi_battery_write_alarm() local
1154 if (!battery || (count > sizeof(alarm_string) - 1)) in acpi_battery_write_alarm()
1156 if (!acpi_battery_present(battery)) { in acpi_battery_write_alarm()
1165 if (kstrtoint(alarm_string, 0, &battery->alarm)) { in acpi_battery_write_alarm()
1169 result = acpi_battery_set_alarm(battery); in acpi_battery_write_alarm()
1229 struct acpi_battery *battery = acpi_driver_data(device); in acpi_battery_notify() local
1232 if (!battery) in acpi_battery_notify()
1234 old = battery->bat; in acpi_battery_notify()
1244 acpi_battery_refresh(battery); in acpi_battery_notify()
1245 acpi_battery_update(battery, false); in acpi_battery_notify()
1248 acpi_battery_present(battery)); in acpi_battery_notify()
1249 acpi_notifier_call_chain(device, event, acpi_battery_present(battery)); in acpi_battery_notify()
1251 if (old && battery->bat) in acpi_battery_notify()
1252 power_supply_changed(battery->bat); in acpi_battery_notify()
1258 struct acpi_battery *battery = container_of(nb, struct acpi_battery, in battery_notify() local
1265 if (!acpi_battery_present(battery)) in battery_notify()
1268 if (battery->bat) { in battery_notify()
1269 acpi_battery_refresh(battery); in battery_notify()
1271 result = acpi_battery_get_info(battery); in battery_notify()
1275 result = sysfs_add_battery(battery); in battery_notify()
1280 acpi_battery_init_alarm(battery); in battery_notify()
1281 acpi_battery_get_state(battery); in battery_notify()
1371 static int acpi_battery_update_retry(struct acpi_battery *battery) in acpi_battery_update_retry() argument
1376 ret = acpi_battery_update(battery, false); in acpi_battery_update_retry()
1388 struct acpi_battery *battery = NULL; in acpi_battery_add() local
1396 battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL); in acpi_battery_add()
1397 if (!battery) in acpi_battery_add()
1399 battery->device = device; in acpi_battery_add()
1402 device->driver_data = battery; in acpi_battery_add()
1403 mutex_init(&battery->lock); in acpi_battery_add()
1404 mutex_init(&battery->sysfs_lock); in acpi_battery_add()
1405 if (acpi_has_method(battery->device->handle, "_BIX")) in acpi_battery_add()
1406 set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); in acpi_battery_add()
1408 result = acpi_battery_update_retry(battery); in acpi_battery_add()
1424 battery->pm_nb.notifier_call = battery_notify; in acpi_battery_add()
1425 register_pm_notifier(&battery->pm_nb); in acpi_battery_add()
1432 sysfs_remove_battery(battery); in acpi_battery_add()
1433 mutex_destroy(&battery->lock); in acpi_battery_add()
1434 mutex_destroy(&battery->sysfs_lock); in acpi_battery_add()
1435 kfree(battery); in acpi_battery_add()
1441 struct acpi_battery *battery = NULL; in acpi_battery_remove() local
1446 battery = acpi_driver_data(device); in acpi_battery_remove()
1447 unregister_pm_notifier(&battery->pm_nb); in acpi_battery_remove()
1451 sysfs_remove_battery(battery); in acpi_battery_remove()
1452 mutex_destroy(&battery->lock); in acpi_battery_remove()
1453 mutex_destroy(&battery->sysfs_lock); in acpi_battery_remove()
1454 kfree(battery); in acpi_battery_remove()
1462 struct acpi_battery *battery; in acpi_battery_resume() local
1467 battery = acpi_driver_data(to_acpi_device(dev)); in acpi_battery_resume()
1468 if (!battery) in acpi_battery_resume()
1471 battery->update_time = 0; in acpi_battery_resume()
1472 acpi_battery_update(battery, true); in acpi_battery_resume()