diff --git a/src/linux/up-device-supply-battery.c b/src/linux/up-device-supply-battery.c index 456f692..c2f47ae 100644 --- a/src/linux/up-device-supply-battery.c +++ b/src/linux/up-device-supply-battery.c @@ -160,16 +160,17 @@ up_device_supply_battery_refresh (UpDevice *device, info.voltage_design = up_device_supply_battery_get_design_voltage (self, native); info.charge_cycles = g_udev_device_get_sysfs_attr_as_int_uncached (native, "cycle_count"); - info.units = UP_BATTERY_UNIT_ENERGY; - info.energy.full = g_udev_device_get_sysfs_attr_as_double_uncached (native, "energy_full") / 1000000.0; - info.energy.design = g_udev_device_get_sysfs_attr_as_double_uncached (native, "energy_full_design") / 1000000.0; - - /* Assume we couldn't read anything if energy.full is extremely small */ - if (info.energy.full < 0.01) { + if (g_udev_device_has_sysfs_attr (native, "energy_full") && + g_udev_device_has_sysfs_attr (native, "energy_full_design")) { + info.units = UP_BATTERY_UNIT_ENERGY; + info.energy.full = g_udev_device_get_sysfs_attr_as_double_uncached (native, "energy_full") / 1000000.0; + info.energy.design = g_udev_device_get_sysfs_attr_as_double_uncached (native, "energy_full_design") / 1000000.0; + } else { info.units = UP_BATTERY_UNIT_CHARGE; info.energy.full = g_udev_device_get_sysfs_attr_as_double_uncached (native, "charge_full") / 1000000.0; info.energy.design = g_udev_device_get_sysfs_attr_as_double_uncached (native, "charge_full_design") / 1000000.0; } + info.technology = up_convert_device_technology (get_sysfs_attr_uncached (native, "technology")); /* NOTE: We used to warn about full > design, but really that is prefectly fine to happen. */