| Commit message (Collapse) | Author | Age |
| ... | |
| | |/ / /
|/| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When the CC state change IRQ fires on USB removal the debounce done
status may still be high, and the removal cleanup will not be called.
Use the UFP/DFP status bits to determine whether the CC lines are
present or not instead.
While at it cache the CC state so it doesn't have to be derived
everywhere it is needed. The status bits are already cached, so there
should be no functional difference.
Change-Id: Ifb89c78a032ae9d38fbc8c281518698941e131c2
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
In the callback to change the usb icl, the current code waits to
rerun AICL. These waits were to ensure that AICL completes and we
can restore parallel charger once done.
However, these waits are unnecessary since we invoke code to
enable USBIN_I_VOTER for parallel charger in a workqueue. Moreover,
these wait causes compliance failures. Remove those waits.
Change-Id: Id2e3ca87e111aa415c47683a2cc365a9bece7ffb
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
During a power_role swap, the CC lines get disconnected for a bit.
This causes the charger driver to prematurely declare a disconnection
and it resets back to disconnected state.
Update the code to distinguish a disconnect caused during PR_SWAP vs
a real disconnect.
Avoid
- resetting the CC line to HW control
- switching DRP mode
- enabling the crude sensor workaround
- enabling APSD
during a discconnet caused by PR_SWAP
Note that PR_SWAP setting/unsetting needs to done regardless of the
connected state of the CC line. When PR_SWAP is notified to be
completed and the CC lines are still seen disconnected call the real
disconnect code.
While at it Vconn can be disabled too in the real disconnect code path.
Change-Id: I97ab7ee343c5b2bcf25797e6acbb1de37f5ba00a
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The driver could leave SDP's current draw to a higher value
once its removed. This is because the code to reset the
current limit needs the type to be SDP to reset it which is
not going to be the case after removal.
So reset SDPs current limit back to 100mA in the code path
for non-SDP chargers.
Change-Id: Idfb9df1b72a17f1db63265b85f6546cbb77c4018
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |\ \ \ \ |
|
| | | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
ICL recovery mechanism is used by user space daemon
to recover from adapter collapse during voltage increment
event by reducing the USB ICL. There could be a situation
where nobody votes on usb_icl_votable and this could lead
to a negative ICL value.
Fix this by reading "HW_CURRENT_MAX" property to get ICL in
situations where usb_icl_votable is not voted by any client,
this ensures ICL reduction will always vote a valid ICL.
CRs-Fixed: 2048330
Change-Id: I8e53a945530c1685aaaba0537d16ac5fb11858df
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| |\ \ \ \ |
|
| | |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Current AICL re-run design for PM660 uses AICL restart mechanism
which starts AICL algorithm from Min ICL value to the configure ICL
value one step (25mA) at a time, this adds considerable amount of
delay for algorithm to reach a settled ICL value. Fix this by using
PMI8998 based AICL re-run design.
Change-Id: I84f612c275fa0d9785a6688a56c9da90df1b86d4
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| |\ \ \ \
| | |/ /
| |/| | |
|
| | | |/
| |/|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Based on the hardware recommendation, update the default empty
voltage from 2.8 V to 2.85 V. This is to prevent undervolting
in low temperatures (e.g. -20 C) when battery voltage drops below
2.8 V but the battery SOC may not reach 0% as the charger is
configured to issue GP_FAULT2 when battery voltage goes below
2.8 V. This helps in shutting down graciously.
Change-Id: Ifc68b825541c09d985d890ee7200ff8e0af2ba0f
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
|
| |\ \ \
| |_|/
|/| | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
VCONN is supplied by USBIN on MTP8998 which causes removal issues when
PMI8998 is in source mode and VCONN is enabled. The workaround is
to ensure VCONN is disabled when OTG is disabled which has implications
on PD power role swap when PMI8998 is sourcing VCONN.
The reference schematic has been updated to address this issue therefore
the workaround should be removed.
Change-Id: Ibe2309f3618d840340bd083cca0df8a8644dd9c8
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Currently the read of battery's voltage_max property (FV) and battery's
current_max property (FCC) returns the value of DEFAULT_VOTER voter.
But such a voter doesn't exist on battery's voltage_max property. Fix it
by returning the value voted by BATT_PROFILE_VOTER.
Change-Id: I2dac98f2ce9a423d5045788dbe120591f10c5a9e
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | |/
|/|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently main charger ends up voting to disable parallel(USBIN_I_VOTER)
if the settled current is less than 1.4Amps. It could be that the
parallel path is drawing some current and the draw is higher than
1.4Amps.
Move this disabling to battery, where the parallel charger's input current
is taken in to consideration.
Also while voting to disable, make sure that the main's input is limited.
If there is more room for ICL to increase that means more power could be
drawn from the charger and so we must keep the parallel charging enabled.
If the ICL ceiling itself if 1.4Amps then disable parallel charging,
because even if ICL has room to increase it wont cross 1.4Amps.
The main's input limited state is set while AICL steps up - this
ensures that we keep parallel disabled while AICL is running and settled
is less than 1.4Amps.
When the charger is removed, the main's input limited status is unset,
however we want to keep the parallel charger disabled. In such situations
the main's settled current is 0mA - use this to vote for disabling
parallel charging.
For any ICL change vote request:
Disable parallel using USBIN_I_VOTER if requested current is less than
1.4Amps and to un-vote (i.e. when ICL vote is higher than 1.4Amps) rely
on event from AICL done or status_change delayed work.
Note that USBIN_I_VOTER is effective only for non-QC chargers. For QC
chargers USBIN_V_VOTER continues to keep charging enabled since parallel
need not be disabled is a lower current is requested with a QC charger.
Change-Id: I61d7cd161a87de2904470b2d870058a0fe199116
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When the USB_ID line is pulled low for a very short time there is a
possibility that the SW misses rising edge(removal) event. This may
lead to the state where charger is stuck in the boost-mode forever.
Fix this my adding a SW based glitch logic which checks for the
USB_ID after a SW debounce time and then notifies its presence/removal to
the USB driver.
CRs-Fixed: 2044958
Change-Id: I31974f7d68b435bbef329278cedbd726ada02e3f
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| |/
|
|
|
|
|
|
|
|
|
| |
Even with proper ESR pulse qualification threshold and ESR pulse
amplitude, ESR pulses are still seen occasionally on devices
that use battery with debug battery id. Disable ESR pulldown when
debug battery id is found. This helps saving power by stopping
ESR pulses.
Change-Id: I2b9588ec39a2268123d94c06517b0dbb43d66fc7
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
| |
This reverts commit 566b44214cc08786375ac8266ee387e431413078 (smb138x:
introduce support for smb1355).
This is not required since smb1355 support is moved to its own driver.
Change-Id: Ibad8595c09a865e273adb6f30d6a75f931220131
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
| |
This reverts commit 0f0e36134d8a1082f099d543a122cd10d777beda ("smb138x:
use chg src bit to disable parallel charger)
This is not required, since smb1355 support is moved to its own driver.
Change-Id: I1bd454030d29195f03be132d167ec8294169b9d5
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
| |
Support faking input current limited state. This is very helpful
in testing/debugging the software based vbus changing algorithms.
Change-Id: I7cf548c94397ee680c9d65343c49ec7b16873e88
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add POWER_SUPPLY_PROP_REAL_TYPE property for usb_psy to present its real
charger type. POWER_SUPPLY_PROP_TYPE in usb_psy is always set to
POWER_SUPPLY_TYPE_USB_PD for healthd to recognize it as an AC charger.
Also add usb_port_psy with POWER_SUPPLY_TYPE_USB type is added for healthd
to recognize it as an USB host. Their ONLINE properties will be updated
according to the VBUS status, type-c mode and real charger type.
With this type being set statically, update the usb phy and pd policy
engine code to look at real type.
Change-Id: I90aa69325cc82b09dfb513c0eeecbc61e092a57f
Signed-off-by: Fenglin Wu <fenglinw@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
| |
Currently the code simply enforces Qnovo's current and voltage bypassing
other voters. This is not desired. Make Qnovo vote via the FCC and FV
votables. The only other vote it should skip is the votes coming from
battery profile.
Change-Id: I5c794ea209a8ea2a61d834e2f619d7ccfd02fed9
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
| |
Fix the cleanup path of probe failure to make sure
all the resources get released in proper order.
Change-Id: Ie482c9856569ea708a8fa186049ab778a8e5be12
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The code flow between battery.c and smblib.c could end up with
stale references in smblib. This is when if pl_init fails for
some reason after creating the votables, while smblib obtains
references to them, those references become invalid.
Fix this by calling pl_init early in smb2 driver's probe such that if
it fails smb2 driver exits early.
Also change the name of pl_(de)init() functions to more appropriate
name - qcom_batt_(de)init().
Change-Id: I58f79d26e6cc8524e792a23185ff6fc8cfdffa75
Signed-off-by: Harry Yang <harryy@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
smb1355 doesn't have any facility to suspend input. One has to
disable charging using the chg_en command bit.
So, when parallel charging needs to be disabled, configure
the charger to ignore the chg_en input pin and instead use the
command register. The command register is always programmed to
disable charging.
When parallel charging needs to be enabled, configure it to
follow the chg_en input pin.
This will work for both smb1355 and smb1381 parallel chargers.
Change-Id: I50294f40927641c2e0a7c7e4e7d263592086d3a9
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Currently when we are in hard reset, the driver requests to remove
the float of D+/D- when VBUS drops and once VBUS is back, it requests
to float D+/D- again. This behaviour ends up stomping over D+/D- lines
leading to noncompliance with PD spec.
Fix it by ensuring we only run the CC2 workaround while VBUS dips
in hard reset.
Change-Id: I2bb9364b890b3a227dd3ea3e0a34a415b600e21a
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently main power supply reports the value of the input current limit
set on the usb path. This is incorrect, it should report its own
share. When parallel is disabled, it will end up reporting a value
close to current limit, rounded by 25mA steps.
Note that it should report INT_MAX when there is no limit set on
the ICL - the case for hvdcp chargers.
CRs-Fixed: 2037898
Change-Id: I9859f3d759644a08c6f762e929c471a41b1cdf8f
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |\ |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Charger type gets updated in 'smblib_update_usb_type' function
and this should only be called after completion of APSD.
Update the calling sites of 'smblib_update_usb_type' to use
'smblib_get_apsd_result' instead of 'smblib_update_usb_type'.
This ensures charger type doesn't get updated inadvertently.
CRs-Fixed: 2038837
Change-Id: Iaa380c8f02bb71ad0f4367c16ec39d86d825dfa2
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| |/
|
|
|
|
|
|
|
|
|
|
| |
Currently, FG driver configures ESR FCC manually when charging is
enabled and parallel charging is enabled. However, when Qnovo is
enabled, it needs to be configured even when parallel charging is
not enabled. This makes sure that the ESR pulses don't cause any
overshoot when FCC is high already and thus help reducing VLIM
errors seen on Qnovo.
Change-Id: Iabe9e7ea785534d673978f081d20584de1480559
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
|
| |\ |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The register BATTERY_CHARGER_STATUS continues to show charging state
(like FULLON or TAPER mode) in cases where charging was paused due
to input OV. Look at BATTERY_CHARGER_STATUS_7_REG to determine if
charging was paused.
This fix modifies previous similar change for JEITA hard condition but
continue to cover the case.
Change-Id: Ibc5f4f5e85651708b656f06814008b0c319db02d
Signed-off-by: Harry Yang <harryy@codeaurora.org>
|
| |\ \ |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Currently a legacy cable is always assumed which causes decreased
performance from non-legacy HVDCP adapters with 10k ohm Rp.
Fix this by disabling and re-enabling Type-C to rerun the legacy cable
detection.
Moreover, the legacy cable IRQs are not used and cause unnecessary
type-c-change IRQs to fire. Disable them.
CRs-Fixed: 2020132
Change-Id: I57fc3762251ead028298f01b06d66f52fd119c6b
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Currently the USB Type-C status is retrieved from the hardware in real
time. The Type-C change IRQ should trigger on every change of the Type-C
status, therefore it is not necessary to read the status registers
multiple times if a Type-C change IRQ has not triggered. Furthermore,
workarounds which force UFP/DFP mode, or disable Type-C altogether could
mislead the software into thinking a removal has happened.
Cache all of the USB Type-C status registers upon receiving a USB Type-C
change IRQ, and use the cached status where appropriate.
CRs-Fixed: 2020132
Change-Id: I99f2ff29633207898ae803672162db0c3cec80dc
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
During USB removal a lot of cleanup happens; votables are reset, flags
are cleared, etc. After the cleanup is finished there is a chance that
USB power supply consumers may set properties before getting the USB
removal notification. This can lead to many problems where ICL limits
are set based on the previous insertion, or APSD is disabled due to a
late setting of PD_ACTIVE.
Introduce a lock which prevents USB power supply consumers from setting
properties when USB has been removed. This lock will ensure that the
next insertion starts with a clean slate.
CRs-Fixed: 2020132
Change-Id: I05a4145289b6097e41afc30aa09782722fa03fb6
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Currently it is expected upon USB removal that consumers will receive a
notification that USB has been removed and will cleanup after
themselves. Unfortunately this makes it very difficult to keep track of
all of the necessary cleanup steps upon removal.
Also, in preparation of not allowing consumers to set properties after a
USB removal has happened it is now the responsibility of the charger
driver to cleanup on their behalf.
Moreover, since we don't have a separate removal/insertion interrupt,
the removal/insertion code may run even if the typeC cable is not
physically inserted/removed. Fix it by tracking a typec_present flag.
CRs-Fixed: 2020132
Change-Id: Ia514abaa4e12f72daec17fd1e95f3c51cc38a15f
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |\| | |
|
| | |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently the CC2 removal workaround starts whenever PD issues a hard
reset. When PD issues a hard reset it is not guaranteed that VBUS will
fall since the source may not even be PD capable.
The CC2 removal workaround should only run during the time that VBUS is
low and CC is debounced.
Fix this by scheduling the CC2 removal workaround when VBUS falls and CC
is debounced, and cancel the workaround when either VBUS rises, or the
removal detection is successful.
CRs-Fixed: 2020132
Change-Id: I6475d37911d90805ed8b3bb4b3a26a9f7557ebd6
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
|
| |\ \ |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Stop qnovo charging in case of all errors except CV mode, which
allows ptrain to continue. The rest errors include JEITA soft and
hard conditions, battery overvoltage, battery missing, safety
timer expired, switcher disabled and charger disabled.
Change-Id: I010853983d018e20235a91762b0d4f9a916c0ede
Signed-off-by: Harry Yang <harryy@codeaurora.org>
|
| | |/
|/|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
FCC and Float voltage is configured by battery driver using
power_supply framework (main_psy), re-run FCC/FV election once
main_psy is available to ensure FCC/Float voltage is configured
and reflected on hardware.
While at it, add check for valid "pl_psy" before using it.
CRs-fixed: 2028082
Change-Id: I2f5dc174eacf325ba27186b07c89bb7d438f061b
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In case of very slow insertion of SDP/DCP there is a possibility
that D+/D- makes contact while APSD is in progress. This will
result in an incorrect type detection.
Fix this by doing a APSD rerun after charger-type detection is
complete.
CRs-Fixed: 2032590
Change-Id: I0037b90f29dbe65a2cdb2771d5caceff77862f03
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| |\ \ |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
In the shutdown hook, driver forces adapter to 5V but
there is a possibility that the source change IRQ triggers
and moves back the adapter to 9V.
To avoid this and any race between the irq's and shutdown path,
disable all irqs as the first step in shutdown path.
CRs-Fixed: 2032575
Change-Id: I0d8f59a73b6631e9bf6f5d64dd215c239e7772fe
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Add a device tree property to override the minimum and maximum
charger buck/boost switching frequency.
Change-Id: I6b827157c23a389edf2daa412e6825b6ce07a886
Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org>
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
On PM660 the charger buck/boost frequency is configured in
the same register. Present ordering of the sink/source
removal function call causes incorrect charger frequency
configuration.
Fix this by first calling sink_removal and then source_insertion
function. Also, configure the buck frequency to the initial
5V USB value during source insertion.
Change-Id: I0d436f7e0843f2ddaa3d09db05cec403d03b6893
Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org>
|
| |\ \ \ |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Add support to configure base termination current which is the
upper boundary at which fuel gauge will signal an end of charge
to the charger during discharging.
Change-Id: Ied2f89fc8e132161d55a9bfbcca6738fef164b20
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When the battery temperature goes below -10 C, SOC may get stuck
to 100%. This is due to the SOC full loop adjusting down with
very high battery impedance. To mitigate this, SOC full loop has
to be frozen. Add support for it by adjusting ki_coeff_full_soc
dynamically based on battery temperature.
Change-Id: I6218568712b025bc4427770bf86d142d50f40c7b
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
|
| |\ \ \ \ |
|