Lines Matching refs:battery

24 #include <acpi/battery.h>
90 struct acpi_battery battery[MAX_SBS_BAT];
100 static int acpi_battery_get_state(struct acpi_battery *battery);
110 static inline int acpi_battery_vscale(struct acpi_battery *battery)
112 return battery_scale((battery->spec & 0x0f00) >> 8);
115 static inline int acpi_battery_ipscale(struct acpi_battery *battery)
117 return battery_scale((battery->spec & 0xf000) >> 12);
120 static inline int acpi_battery_mode(struct acpi_battery *battery)
122 return (battery->mode & 0x8000);
125 static inline int acpi_battery_scale(struct acpi_battery *battery)
127 return (acpi_battery_mode(battery) ? 10 : 1) *
128 acpi_battery_ipscale(battery);
146 static int acpi_battery_technology(struct acpi_battery *battery)
148 if (!strcasecmp("NiCd", battery->device_chemistry))
150 if (!strcasecmp("NiMH", battery->device_chemistry))
152 if (!strcasecmp("LION", battery->device_chemistry))
154 if (!strcasecmp("LiP", battery->device_chemistry))
163 struct acpi_battery *battery = to_acpi_battery(psy);
165 if ((!battery->present) && psp != POWER_SUPPLY_PROP_PRESENT)
168 acpi_battery_get_state(battery);
171 if (battery->rate_now < 0)
173 else if (battery->rate_now > 0)
179 val->intval = battery->present;
182 val->intval = acpi_battery_technology(battery);
185 val->intval = battery->cycle_count;
188 val->intval = battery->design_voltage *
189 acpi_battery_vscale(battery) * 1000;
192 val->intval = battery->voltage_now *
193 acpi_battery_vscale(battery) * 1000;
197 val->intval = abs(battery->rate_now) *
198 acpi_battery_ipscale(battery) * 1000;
199 val->intval *= (acpi_battery_mode(battery)) ?
200 (battery->voltage_now *
201 acpi_battery_vscale(battery) / 1000) : 1;
205 val->intval = abs(battery->rate_avg) *
206 acpi_battery_ipscale(battery) * 1000;
207 val->intval *= (acpi_battery_mode(battery)) ?
208 (battery->voltage_now *
209 acpi_battery_vscale(battery) / 1000) : 1;
212 val->intval = battery->state_of_charge;
216 val->intval = battery->design_capacity *
217 acpi_battery_scale(battery) * 1000;
221 val->intval = battery->full_charge_capacity *
222 acpi_battery_scale(battery) * 1000;
226 val->intval = battery->capacity_now *
227 acpi_battery_scale(battery) * 1000;
230 val->intval = battery->temp_now - 2730; // dK -> dC
233 val->strval = battery->device_name;
236 val->strval = battery->manufacturer_name;
298 u8 command; /* command for battery */
339 static int acpi_battery_get_info(struct acpi_battery *battery)
344 result = acpi_smbus_read(battery->sbs->hc,
348 (u8 *) battery +
356 static int acpi_battery_get_state(struct acpi_battery *battery)
360 if (battery->update_time &&
361 time_before(jiffies, battery->update_time +
365 result = acpi_smbus_read(battery->sbs->hc,
369 (u8 *)battery +
375 battery->update_time = jiffies;
379 static int acpi_battery_get_alarm(struct acpi_battery *battery)
381 return acpi_smbus_read(battery->sbs->hc, SMBUS_READ_WORD,
383 (u8 *)&battery->alarm_capacity);
386 static int acpi_battery_set_alarm(struct acpi_battery *battery)
388 struct acpi_sbs *sbs = battery->sbs;
389 u16 value, sel = 1 << (battery->id + 12);
410 0x01, (u8 *)&battery->alarm_capacity, 2);
445 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev));
446 acpi_battery_get_alarm(battery);
447 return sprintf(buf, "%d\n", battery->alarm_capacity *
448 acpi_battery_scale(battery) * 1000);
456 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev));
458 battery->alarm_capacity = x /
459 (1000 * acpi_battery_scale(battery));
460 if (battery->present)
461 acpi_battery_set_alarm(battery);
474 static int acpi_battery_read(struct acpi_battery *battery)
476 int result, saved_present = battery->present;
479 if (battery->sbs->manager_present) {
480 result = acpi_smbus_read(battery->sbs->hc, SMBUS_READ_WORD,
485 battery->present = state & (1 << battery->id);
486 if (!battery->present)
491 state |= 1 << (battery->id + 12);
492 acpi_smbus_write(battery->sbs->hc, SMBUS_WRITE_WORD,
495 if (battery->id == 0) {
496 battery->present = 1;
498 if (!battery->present)
503 if (saved_present != battery->present) {
504 battery->update_time = 0;
505 result = acpi_battery_get_info(battery);
507 battery->present = 0;
511 result = acpi_battery_get_state(battery);
513 battery->present = 0;
520 struct acpi_battery *battery = &sbs->battery[id];
521 struct power_supply_config psy_cfg = { .drv_data = battery, };
524 battery->id = id;
525 battery->sbs = sbs;
526 result = acpi_battery_read(battery);
530 sprintf(battery->name, ACPI_BATTERY_DIR_NAME, id);
531 battery->bat_desc.name = battery->name;
532 battery->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY;
533 if (!acpi_battery_mode(battery)) {
534 battery->bat_desc.properties = sbs_charge_battery_props;
535 battery->bat_desc.num_properties =
538 battery->bat_desc.properties = sbs_energy_battery_props;
539 battery->bat_desc.num_properties =
542 battery->bat_desc.get_property = acpi_sbs_battery_get_property;
543 battery->bat = power_supply_register(&sbs->device->dev,
544 &battery->bat_desc, &psy_cfg);
545 if (IS_ERR(battery->bat)) {
546 result = PTR_ERR(battery->bat);
547 battery->bat = NULL;
551 result = device_create_file(&battery->bat->dev, &alarm_attr);
554 battery->have_sysfs_alarm = 1;
556 pr_info("%s [%s]: Battery Slot [%s] (battery %s)\n",
558 battery->name, battery->present ? "present" : "absent");
564 struct acpi_battery *battery = &sbs->battery[id];
566 if (battery->bat) {
567 if (battery->have_sysfs_alarm)
568 device_remove_file(&battery->bat->dev, &alarm_attr);
569 power_supply_unregister(battery->bat);
620 bat = &sbs->battery[id];