blob: efd64cd90878e1bf3b10d0cf089675079cd7af29 [file] [log] [blame]
QPNP SMB Battery Charger
QPNP SMB Charger is a single-cell switching mode battery charger. It can charge
the battery and power the system via the USB and AC adapter input.
The QPNP SMB Charger interfaces via the SPMI bus.
There are six different peripherals adding the following functionality.
Each of these peripherals are implemented as subnodes in the example at the
end of this file.
- qcom,chgr: Supports charging control and status
reporting.
- qcom,bat-if: Battery status reporting such as presence,
temperature reporting and voltage collapse
protection.
- qcom,usb-chgpth: USB charge path detection and input current
limiting configuration.
- qcom,dc-chgpth: DC charge path detection and input current
limiting configuration.
- qcom,chg-misc: Miscellaneous features such as watchdog timers
and SYSOK pin control
- qcom,chg-otg: OTG configuration control.
Parent node required properties:
- compatible: Must be "qcom,qpnp-smbcharger"
- #address-cells: Must be <1>
- #size-cells: Must be <1>
- qcom,pmic-revid: Should specify the phandle of PMIC
revid module. This is used to identify
the PMIC subtype.
Sub node required properties:
- reg: The SPMI address for this peripheral
- interrupts: Specifies the interrupt associated with the peripheral.
- interrupt-names: Specifies the interrupt names for the peripheral. Every
available interrupt needs to have an associated name
with it to indentify its purpose.
The following lists each subnode and their corresponding
required interrupt names:
qcom,chgr:
- chg-tcc-thr: Triggers on charge completion.
- chg-taper-thr: Triggers on the taper charge
transtion.
- chg-inhibit: Notifies on battery voltage
being too high to resume
charging.
- chg-p2f-thr: Triggers on transitioning from
precharge to fastcharge.
- chg-rechg-thr: Triggers on battery voltage
falling below the resume
threshold.
qcom,bat-if:
- batt-hot: Triggers on battery temperature
hitting the hot threshold.
Charging stops.
- batt-warm: Triggers on battery temperature
hitting the warm threshold.
Charging current is reduced.
- batt-cool: Triggers on battery temperature
hitting the cool threshold.
Charging current is reduced
- batt-cold: Triggers on battery temperature
hitting the cold threshold.
Charging stops.
- batt-missing: Battery missing status
interrupt.
- batt-low: Triggers on battery voltage
falling across a low threshold.
qcom,usb-chgpth:
- usbin-uv: USB input voltage falls below a
valid threshold.
- usbin-src-det: USB automatic source detection
finishes.
qcom,dc-chgpth:
- dcin-uv: DC input voltage falls below a
valid threshold.
qcom,chgr-misc:
- wdog-timeout-mins: Charger watchdog timer
interrupt.
- temp-shutdown: Triggers when charger goes
overtemp and causes a shutdown.
- power-ok: Triggers when the charger
switcher turns on or off.
Regulator Subnodes:
- qcom,smbcharger-boost-otg A subnode for a regulator device that turns on
the charger boost for OTG operation.
- qcom,smbcharger-external-otg A subnode for a regulator device that switches
off charging and the USB input charge path
in order to allow an external regulator to
operate. This can be used in place of the
qcom,smbcharger-boost-otg if an external boost
is available.
Regulator Sub node required properties:
- regulator-name A name string for the regulator in question
Optional Properties:
- qcom,battery-psy-name The name of the main battery power supply that
the charger will register. Failing to define
this property will default the name to
"battery".
- qcom,bms-psy-name The psy name to use for reporting battery
capacity. If left unspecified the capacity uses
a preprogrammed default value of 50.
- qcom,float-voltage-mv Float Voltage in mV - the maximum voltage up
to which the battery is charged. Supported
range 3600mV to 4500mV
- qcom,float-voltage-comp Specifies the JEITA float voltage compensation.
Value ranges from 0 to 63.
- qcom,fastchg-current-ma Specifies the fast charge current in mA. Supported
range is from 300mA to 3000mA.
- qcom,fastchg-current-comp Specifies the fast charge current compensation in
mA. Supported values are 250, 700, 900 and 1200mA.
- qcom,charging-timeout-mins Maximum duration in minutes that a single
charge cycle may last. Supported values are:
0, 192, 384, 768, and 1536. A value of 0
means that no charge cycle timeout is used and
charging can continue indefinitely.
- qcom,precharging-timeout-mins Maximum duration in minutes that a single
precharge cycle may last. Supported values
are: 0, 24, 48, 96, 192. A value of 0 means
that no precharge cycle timeout is used and
charging can continue indefinitely. Note that
the qcom,charging-timeout-mins property must
be specified in order for this to take effect.
- qcom,dc-psy-type The type of charger connected to the DC path.
Can be "Mains", "Wireless" or "Wipower"
- qcom,dc-psy-ma The current in mA dc path can support. Must be
specified if dc-psy-type is specified. Valid
range 300mA to 2000mA.
- qcom,dcin-vadc The phandle to pmi8994 voltage adc. The ADC is
used to get notifications when the DCIN voltage
crosses a programmed min/max threshold. This is
used to make configurations for optimized power
draw for Wipower.
- qcom,wipower-div2-ilim-map
- qcom,wipower-pt-ilim-map
- qcom,wipower-default-ilim-map
Array of 5 elements to indicate the voltage ranges and their corresponding
current limits. The 5 elements with index [0..4] are:
[0] => voltage_low in uV
[1] => voltage_high in uV
[2] => current limit for pass through in mA
[3] => current limit for div2 mode dcin low voltage in mA
[4] => current limit for div2 mode dcin high voltage in mA
The div2 and pt tables indicate the current limits
to use when Wipower is operating in divide_by_2 mode
and pass through mode respectively.
The default table is used when the voltage ranges
are beyond the ones specified in the mapping table.
Note that if dcin-vadc or any of these mapping
tables are not specified, dynamic dcin input
is disabled.
- qcom,charging-disabled Set this if charging should be disabled in the
build by default.
- qcom,resume-delta-mv Specifies the minimum voltage drop in
millivolts below the float voltage that is
required in order to initiate a new charging
cycle. Supported values are: 50, 100, 200 and
300mV.
- qcom,chg-inhibit-en Boolean that indicates whether the charge inhibit
feature needs to be enabled. If this is not set,
charge inhibit feature is disabled by default.
- qcom,chg-inhibit-fg Indicates if the recharge threshold source has
to be Fuel gauge ADC. If this is not set, it
will be analog sensor by default.
- qcom,bmd-algo-disabled Indicates if the battery missing detection
algorithm is disabled. If this node is present
SMB uses the THERM pin for battery missing
detection.
- qcom,charge-unknown-battery Boolean that indicates whether an unknown
battery without a matching profile will be
charged. If this is not set, if the fuel gauge
does not recognize the battery based on its
battery ID, the charger will not start
charging.
- qcom,bmd-pin-src A string that indicates the source pin for the
battery missind detection. This can be either:
- "bpd_none"
battery is considered always present
- "bpd_id"
battery id pin is used
- "bpd_thm"
battery therm pin is used
- "bpd_thm_id"
both pins are used (battery is
considered missing if either pin is
floating).
- qcom,iterm-ma Specifies the termination current to indicate
end-of-charge. Possible values in mA:
50, 100, 150, 200, 250, 300, 500, 600.
- qcom,iterm-disabled Disables the termination current feature. This
is a boolean property.
- otg-parent-supply A phandle to an external boost regulator for
OTG if it exists.
- qcom,thermal-mitigation: Array of input current limit values for
different system thermal mitigation levels.
This should be a flat array that denotates the
maximum charge current in mA for each thermal
level.
- qcom,rparasitics-uohm: The parasitic resistance of the board following
the line from the battery connectors through
vph_power. This is used to calculate maximum
available current of the battery.
- qcom,vled-max-uv: The maximum input voltage of the flash leds.
This is used to calculate maximum available
current of the battery.
- qcom,autoadjust-vfloat A boolean property that when set, makes the
driver automatically readjust vfloat using the
fuel gauge ADC readings to make charging more
accurate.
- qcom,jeita-temp-hard-limit property when present will enable or disable
the jeita temperature hard limit based on the
value 1 or 0. Specify 0 if the jeita temp hard
limit needs to be disabled. If it is not present,
jeita temperature hard limit will be based on what
the bootloader had set earlier.
- qcom,low-volt-dcin: A boolean property which upon set will enable the
AICL deglitch configuration dynamically. This needs
to be set if the DCIN supply is going to be less
than or equal to 5V.
- qcom,force-aicl-rerun: A boolean property which upon set will enable the
AICL rerun by default along with the deglitch time
configured to long interval (20 ms). Also, specifying
this property will not adjust the AICL deglitch time
dynamically for handling the battery over-voltage
oscillations when the charger is headroom limited.
- qcom,aicl-rerun-period-s If force-aicl-rerun is on, this property dictates
how often aicl is reran in seconds. Possible values
are 45, 90, 180, and 360.
- qcom,ibat-ocp-threshold-ua Maximum current before the battery will trigger
overcurrent protection. Use the recommended
battery pack value minus some margin.
- qcom,soft-vfloat-comp-disabled Set this property when the battery is
powered via external source and could
go above the float voltage.
- qcom,parallel-usb-min-current-ma Minimum current drawn by the primary
charger before enabling the parallel
charger if one exists. Do not define
this property if no parallel chargers
exist.
- qcom,parallel-usb-9v-min-current-ma Minimum current drawn by the primary
charger before enabling the parallel
charger if one exists. This property
applies only for 9V chargers.
- qcom,parallel-allowed-lowering-ma Acceptable current drop from the initial limit
to keep parallel charger activated. If the
charger current reduces beyond this threshold
parallel charger is disabled. Must be specified
if parallel charger is used.
- qcom,parallel-main-chg-fcc-percent Percentage of the fast charge current allotted to the
main charger when parallel charging is enabled and
operational. If this property is not defined, the
driver defaults to a 50%/50% split between the main
and parallel charger.
- qcom,parallel-main-chg-icl-percent Percentage of the input current allotted to the
main charger when parallel charging is enabled and
operational. If this property is not defined, the
driver defaults to a 60%/40% split between the main
and parallel charger.
- qcom,battery-data Points to the phandle of node which
contains the battery-profiles supported
by the charger/FG.
- qcom,chg-led-support A bool property to support the charger led feature.
- qcom,chg-led-sw-controls A bool property to allow the software to control
the charger led without a valid charger.
- qcom,skip-usb-notification A boolean property to be used when usb gets present
and type from other means. Especially true on
liquid hardware, where usb presence is detected based on GPIO.
- qcom,skip-usb-suspend-for-fake-battery A boolean property to skip
suspending USB path for fake
battery.
- qcom,vchg_sns-vadc Phandle of the VADC node.
- qcom,vchg-adc-channel-id The ADC channel to which the VCHG is routed.
Example:
qcom,qpnp-smbcharger {
compatible = "qcom,qpnp-smbcharger";
#address-cells = <1>;
#size-cells = <1>;
qcom,iterm-ma = <100>;
qcom,float-voltage-mv = <4200>;
qcom,resume-delta-mv = <100>;
qcom,bmd-pin-src = "bpd_thm_id";
qcom,dc-psy-type = "Mains";
qcom,dc-psy-ma = <1500>;
qcom,bms-psy-name = "bms";
qcom,battery-psy-name = "battery";
qcom,thermal-mitigation = <1500 700 600 325>;
qcom,vchg_sns-vadc = <&pmi8950_vadc>;
qcom,vchg-adc-channel-id = <3>;
qcom,chgr@1000 {
reg = <0x1000 0x100>;
interrupts = <0x2 0x10 0x0>,
<0x2 0x10 0x1>,
<0x2 0x10 0x2>,
<0x2 0x10 0x3>,
<0x2 0x10 0x4>,
<0x2 0x10 0x5>,
<0x2 0x10 0x6>,
<0x2 0x10 0x7>;
interrupt-names = "chg-error",
"chg-inhibit",
"chg-prechg-sft",
"chg-complete-chg-sft",
"chg-p2f-thr",
"chg-rechg-thr",
"chg-taper-thr",
"chg-tcc-thr";
};
qcom,otg@1100 {
reg = <0x1100 0x100>;
};
qcom,bat-if@1200 {
reg = <0x1200 0x100>;
interrupts = <0x2 0x12 0x0>,
<0x2 0x12 0x1>,
<0x2 0x12 0x2>,
<0x2 0x12 0x3>,
<0x2 0x12 0x4>,
<0x2 0x12 0x5>,
<0x2 0x12 0x6>,
<0x2 0x12 0x7>;
interrupt-names = "batt-hot",
"batt-warm",
"batt-cold",
"batt-cool",
"batt-ov",
"batt-low",
"batt-missing",
"batt-term-missing";
};
qcom,usb-chgpth@1300 {
reg = <0x1300 0x100>;
interrupts = <0x2 0x13 0x0>,
<0x2 0x13 0x1>,
<0x2 0x13 0x2>,
<0x2 0x13 0x3>,
<0x2 0x13 0x4>,
<0x2 0x13 0x5>,
<0x2 0x13 0x6>;
interrupt-names = "usbin-uv",
"usbin-ov",
"usbin-src-det",
"otg-fail",
"otg-oc",
"aicl-done",
"usbid-change";
};
qcom,dc-chgpth@1400 {
reg = <0x1400 0x100>;
interrupts = <0x2 0x14 0x0>,
<0x2 0x14 0x1>;
interrupt-names = "dcin-uv",
"dcin-ov";
};
qcom,chgr-misc@1600 {
reg = <0x1600 0x100>;
interrupts = <0x2 0x16 0x0>,
<0x2 0x16 0x1>,
<0x2 0x16 0x2>,
<0x2 0x16 0x3>,
<0x2 0x16 0x4>,
<0x2 0x16 0x5>;
interrupt-names = "power-ok",
"temp-shutdown",
"wdog-timeout",
"flash-fail",
"otst2",
"otst3";
};
};