Update the parallel algorithm for ICL change request.
Following steps are performed for every ICL change:
- disable parallel charger using ICL_CHANGE_VOTER
- update the new ICL and re-run AICL.
- re-enable parallel charger by removing vote of
ICL_CHANGE_VOTER.
While at it, update the 'smblib_get_prop_usb_online'
function to use voter library's locked API to get
the usb_icl_vote, this fixes the lockup that happens
when charging is enabled/disabled from usb_icl_votable's
callback function.
CRs-Fixed: 2014572
Change-Id: I7deb6a50d67471ab1aa5e1db6fff880574b4bafb
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Make battery library to directly update the split current
of the main charger via power_supply framework's set_property
API using CURRENT_MAX property. ICL_REDUCTION property
is no longer required.
Note that we are not doing initial ICL vote for USBIN USBIN,
instead when time comes to split aicl, we will read the input
current limit and if nothing is set, check what the hw determined
as the max limit and use that.
For a PD charger case where the apsd result will be unknown,
the current limit is expected to be set by the time aicl settled is
called. The 30 second delaying of parallel enabling, should give
PD engine ample time to set the current limits.
While at it clean up the way settled current change is tracked. Create
a variable that specifically indicates the total settled current seen
last time settled current was adjusted. This makes compare to an updated
settled current value easy.
CRs-Fixed: 2014572
Change-Id: I040b65e6380f2c12350ea44bf32e6981ff126f18
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Add support for HW_CURRENT_MAX property which returns maximum
input current that can be set for an adapter. This property will
be specifically used by parallel charger to cast an initial ICL
vote.
CRs-Fixed: 2014572
Change-Id: I49e80e6b25f40791d9035bc1567fdf881914b1e8
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Move usb_icl_votable creation and it's callback in the
battery.c file, in preparation for an upcoming change where
usb_icl_votable callback will be able to
disable parallel charger when a low input current
request is set.
The new callback uses CURRENT_MAX property to be set on main
psy to set the ICL limit of primary charger.
The limit setting code in main charger path where the votable
call resides currently relies a lot on client being present or not.
Since the votable is being moved away, it won't have information
about the client. So use the current parameter of INT_MAX to
indicate no clients present.
Also it could be that main psy is not instantiated by the time first
icl vote comes in. Ensure that we rerun_election on usb_icl_votable
the instant main psy is seen.
CRs-Fixed: 2014572
Change-Id: Ie449af086ed9218b40ea83158b69e8f8e73edda3
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
The charger driver ensures that parallel charging remains
disabled as long as AICL is below threshole (1400mA) using
it's software voting mechanism(USBIN_I_VOTER), thus disable
hardware's autonomous control of input current based parallel
charging.
CRs-Fixed: 2014572
Change-Id: Ie991e0c1d16d63b6def6fb3379019114d20d60f7
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Currently, the driver enables parallel charger as soon
as a favorable charger is seen. This causes many, unnecessary
splits of AICL results as AICL runs for the first time. Besides
the detection logic could further update charger type and rerun
AICL.
Its best to simply delay enabling parallel charger for 30 seconds.
This ensures that type detection and its AICL run to completion and
parallel charging starts with a stable AICL result.
To realize this
- implement a workqueue which will be scheduled/cancelled 30 seconds
later when vbus plugin interrupt happens.
- The workqueue signifies that 30 seconds have elapsed and parallel
charging should be enabled by PL_DELAY_VOTER.
- remove PL_DELAY_HDVP_VOTER since PL_DELAY_VOTER will
ensure parallel gets enabled after 30 seconds of insertion.
- unvote from PL_DELAY_VOTER only when the typeC removal event happens.
A PR_SWAP during a sink session will keep the PL_DELAY_VOTER's vote
enabled, we expect CHG_STATE_VOTER to disable parallel since device will
be supplying VBUS and not charging the battery. This also means that
when another PR_SWAP happens and the device starts operating in sink mode
again, PL_DELAY_VOTER's vote will remain enabled and parallel charging
would begin when other conditions become favorable. IOW PL_DELAY_VOTER
tracks 30 second after physical insertion and remains unaffected by
PR_SWAPs.
CRs-Fixed: 2014572
Change-Id: Ibe10768e61c6d2661bc8946f7f6b9be06f0c28e6
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
The current code enables parallel charging if a high voltage
charger is seen (QC or PD) or a high current charger is seen.
This means that parallel charger could remain enabled when PD
transitions its voltage even though it has reduced the current
to 500mA. It is desirable to disable parallel charging during
such voltage transition.
So prepare for this change by first ensuring that only a QC
charger votes for USBIN_V_VOTER. The PD charger, even while
operating at higher voltages will need to depend on USBIN_I_VOTER,
just like a simple DCP charger, to enable parallel charger.
CRs-Fixed: 2014572
Change-Id: I03dfcff44b30b06918ebf176043873fb141f485f
Signed-off-by: Ashay Jaiswal <ashayj@codeaurora.org>
ESR pulse qualification threshold and measurement current should
get set properly without which ESR pulses can fire frequently
causing frequent wakeups. Add support to configure them. Use the
default values as per the hardware recommendation.
Change-Id: I160b2171c46df483c7fa4da2ce23009d99c6dcff
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
The current check for linkdown does not suffice if the default
value of that register is 0xffffffff. PCIe bus driver needs to
also read the device/vendor ID of the client to confirm if it
is really a linkdown. Update the mask method to be compatible
with 64-bit architecture.
Change-Id: Ibe51dff50ff010260a750d73498333ee830fca2c
Signed-off-by: Tony Truong <truong@codeaurora.org>
When Stage 1 SMMU is enabled, the QGIC doorbell address needs to
be mapped or else there will be a translation fault when an endpoint
tries to trigger an interrupt via MSI. PCIe host driver will map
this address on behalf of the client.
Change-Id: I7fdbe62daeb5dbecc459e4d9bc7832785f5b9fb7
Signed-off-by: Tony Truong <truong@codeaurora.org>
PCIe clients and endpoints have different boot
sequence. Expand the boot options in PCIe bus
driver to meet their requirements.
Change-Id: Ia244fd402b784e511eefb550d9814d3b708879fd
Signed-off-by: Tony Truong <truong@codeaurora.org>
pfk_ext4_deinit() is called from init code and we throw away
__exit marked code when modules are built-in. Remove the __exit
markings here so that we can always call this function even from
__init code. Similarly for pfk_ecryptfs_deinit().
Change-Id: I80a3304d84cdf18772879efe6c4a955d873b89c4
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Currently, we configure battery profile parameters during bootup
and they're not configured again during battery hotswap. Fix
this by configuring those parameters after getting it from the
device tree.
Change-Id: I43c5c9cdc6dfc12751ae0a67faee59aacf4326dc
Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
Update the teardown sequence for PCIe MSI to support
multiple endpoints.
Change-Id: I1fbdb840bf3677e30d4d27a50503c5cc70ece272
Signed-off-by: Tony Truong <truong@codeaurora.org>
Add support for 7 channel mapping in asm to support
7 channel playback.
CRs-Fixed: 1114041
Change-Id: I0daf306d4495d3966406d05fc6328b2956a2d11f
Signed-off-by: Rohit Kumar <rohitkr@codeaurora.org>
The battery thermistor channel is unused in parallel charge applications
since the primary charger disables the parallel charger when hard JEITA
limits are reached.
In standalone applications the battery thermistor channel is used since
it is required for JEITA.
The hardware defaults take care of both of these applications hence
mask the register writes to enable only the die temperature, and
connector thermistor hardware conversion triggers. This will ensure the
battery thermistor hardware conversion trigger is left to the hardware
default.
Change-Id: Iea2fc779562436dfae3bd41c944d5727366006b2
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
Runtime PM reference count is being increased in mmc_claim_host() and
is decreased in mmc_release_host(). This reference count is kept
during the complete cycle of a claim -> release host.
Same need to be done even in mmc_try_claim_host() as well. Increase
the runtime PM reference count by invoking pm_runtime_get_sync() from
mmc_try_claim_host() upon first successful claim.
Without this change the runtime PM reference count goes for a toss
since count is not getting incremented in mmc_try_claim_host() but is
getting decremented in mmc_release_host().
Change-Id: I77836875b4700a4bf3dbde2bf1abdf2ad36c4cac
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>