Battery Characteristics

The devicetree battery node provides static battery characteristics.
In smart batteries, these are typically stored in non-volatile memory
on a fuel gauge chip. The battery node should be used where there is
no appropriate non-volatile memory, or it is unprogrammed/incorrect.

Upstream dts files should not include battery nodes, unless the battery
represented cannot easily be replaced in the system by one of a
different type. This prevents unpredictable, potentially harmful,
behavior should a replacement that changes the battery type occur
without a corresponding update to the dtb.

Required Properties:
 - compatible: Must be "simple-battery"

Optional Properties:
 - voltage-min-design-microvolt: drained battery voltage
 - voltage-max-design-microvolt: fully charged battery voltage
 - energy-full-design-microwatt-hours: battery design energy
 - charge-full-design-microamp-hours: battery design capacity
 - precharge-current-microamp: current for pre-charge phase
 - charge-term-current-microamp: current for charge termination phase
 - constant-charge-current-max-microamp: maximum constant input current
 - constant-charge-voltage-max-microvolt: maximum constant input voltage
 - factory-internal-resistance-micro-ohms: battery factory internal resistance
 - ocv-capacity-table-0: An array providing the open circuit voltage (OCV)
   of the battery and corresponding battery capacity percent, which is used
   to look up battery capacity according to current OCV value. And the open
   circuit voltage unit is microvolt.
 - ocv-capacity-table-1: Same as ocv-capacity-table-0
 ......
 - ocv-capacity-table-n: Same as ocv-capacity-table-0
 - ocv-capacity-celsius: An array containing the temperature in degree Celsius,
   for each of the battery capacity lookup table. The first temperature value
   specifies the OCV table 0, and the second temperature value specifies the
   OCV table 1, and so on.

Battery properties are named, where possible, for the corresponding
elements in enum power_supply_property, defined in
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/power_supply.h

Batteries must be referenced by chargers and/or fuel-gauges
using a phandle. The phandle's property should be named
"monitored-battery".

Example:

	bat: battery {
		compatible = "simple-battery";
		voltage-min-design-microvolt = <3200000>;
		voltage-max-design-microvolt = <4200000>;
		energy-full-design-microwatt-hours = <5290000>;
		charge-full-design-microamp-hours = <1430000>;
		precharge-current-microamp = <256000>;
		charge-term-current-microamp = <128000>;
		constant-charge-current-max-microamp = <900000>;
		constant-charge-voltage-max-microvolt = <4200000>;
		factory-internal-resistance-micro-ohms = <250000>;
		ocv-capacity-celsius = <(-10) 0 10>;
		ocv-capacity-table-0 = <4185000 100>, <4113000 95>, <4066000 90>, ...;
		ocv-capacity-table-1 = <4200000 100>, <4185000 95>, <4113000 90>, ...;
		ocv-capacity-table-2 = <4250000 100>, <4200000 95>, <4185000 90>, ...;
	};

	charger: charger@11 {
		....
		monitored-battery = <&bat>;
		...
	};

	fuel_gauge: fuel-gauge@22 {
		....
		monitored-battery = <&bat>;
		...
	};
