Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 536e0056 authored by Ravi Gummadidala's avatar Ravi Gummadidala
Browse files

msm: ipa: add offline charging support



In offline charging mode, modem is not loaded so the proxy
IPA clock vote added by IPA driver on behalf of modem is
never released and this prolongs the charge time. This commit
releases the proxy vote after rmnet_ipa driver init completes
and acquires the proxy vote before modem is loaded. These apply
ONLY when not in modem SSR.

Change-Id: I4fe7e32400402046aea9ce1663d1601ec3effb8c
Signed-off-by: default avatarRavi Gummadidala <rgummadi@codeaurora.org>
parent dca34e2b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -587,7 +587,7 @@ static void ipa_q6_clnt_svc_arrive(struct work_struct *work)
		return;
	}
	qmi_modem_init_fin = true;
	ipa_q6_init_done();
	ipa_proxy_clk_unvote();
	IPAWANDBG("complete, qmi_modem_init_fin : %d\n",
		qmi_modem_init_fin);

+17 −3
Original line number Diff line number Diff line
@@ -4589,18 +4589,32 @@ bool ipa_is_client_handle_valid(u32 clnt_hdl)
EXPORT_SYMBOL(ipa_is_client_handle_valid);

/**
 * ipa_q6_init_done() - called when q6 ipa initialization is done
 * ipa_proxy_clk_unvote() - called to remove IPA clock proxy vote
 *
 * Return value: none
 */
void ipa_q6_init_done(void)
void ipa_proxy_clk_unvote(void)
{
	if (ipa_is_ready() && ipa_ctx->q6_proxy_clk_vote_valid) {
		ipa_dec_client_disable_clks();
		ipa_ctx->q6_proxy_clk_vote_valid = false;
	}
}
EXPORT_SYMBOL(ipa_q6_init_done);
EXPORT_SYMBOL(ipa_proxy_clk_unvote);

/**
 * ipa_proxy_clk_vote() - called to add IPA clock proxy vote
 *
 * Return value: none
 */
void ipa_proxy_clk_vote(void)
{
	if (ipa_is_ready() && !ipa_ctx->q6_proxy_clk_vote_valid) {
		ipa_inc_client_enable_clks();
		ipa_ctx->q6_proxy_clk_vote_valid = true;
	}
}
EXPORT_SYMBOL(ipa_proxy_clk_vote);

/**
 * ipa_get_hw_type() - Return IPA HW version
+10 −0
Original line number Diff line number Diff line
@@ -1812,6 +1812,10 @@ static int ipa_wwan_probe(struct platform_device *pdev)
		goto config_err;
	}
	atomic_set(&is_initialized, 1);
	if (!atomic_read(&is_ssr)) {
		/* offline charging mode */
		ipa_proxy_clk_unvote();
	}
	atomic_set(&is_ssr, 0);

	pr_info("rmnet_ipa completed initialization\n");
@@ -1939,6 +1943,12 @@ static int ssr_notifier_cb(struct notifier_block *this,
			pr_info("IPA AFTER_POWERUP handling is complete\n");
			return NOTIFY_DONE;
		}
		if (SUBSYS_BEFORE_POWERUP == code) {
			pr_info("IPA received MPSS BEFORE_POWERUP\n");
			ipa_proxy_clk_vote();
			pr_info("IPA BEFORE_POWERUP handling is complete\n");
			return NOTIFY_DONE;
		}
	}
	return NOTIFY_DONE;
}
+7 −2
Original line number Diff line number Diff line
@@ -1188,7 +1188,8 @@ int ipa_get_ep_mapping(enum ipa_client_type client);

bool ipa_is_ready(void);

void ipa_q6_init_done(void);
void ipa_proxy_clk_vote(void);
void ipa_proxy_clk_unvote(void);

enum ipa_hw_type ipa_get_hw_type(void);

@@ -1772,7 +1773,11 @@ static inline bool ipa_is_ready(void)
	return false;
}

static inline void ipa_q6_init_done(void)
static inline void ipa_proxy_clk_vote(void)
{
}

static inline void ipa_proxy_clk_unvote(void)
{
}