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

Commit 632f326c authored by Rishabh Bhatnagar's avatar Rishabh Bhatnagar
Browse files

esoc: Use qpnp-power-on apis to reset modem



In recent targets a PON device can reset the attached modem chip via
its primary pmic using SPMI. Integrate apis to do a warm reset for
modem making sure we are still backwards comaptible.

Change-Id: I29e797d9c5162c397e38a2fa73182eb63dbe36e5
Signed-off-by: default avatarRishabh Bhatnagar <rishabhb@codeaurora.org>
parent ecd3033c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -978,6 +978,7 @@
		qcom,support-shutdown;
		qcom,pil-force-shutdown;
		qcom,esoc-skip-restart-for-mdm-crash;
		qcom,esoc-spmi-soft-reset;
		pinctrl-names = "default", "mdm_active", "mdm_suspend";
		pinctrl-0 = <&ap2mdm_pon_reset_default>;
		pinctrl-1 = <&ap2mdm_active &mdm2ap_active>;
+16 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2014-2015, 2017-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2014-2015, 2017-2019, The Linux Foundation. All rights reserved.
 */

#include "esoc-mdm.h"
#include <linux/input/qpnp-power-on.h>

/* This function can be called from atomic context. */
static int mdm9x55_toggle_soft_reset(struct mdm_ctrl *mdm, bool atomic)
@@ -73,9 +74,23 @@ static int sdx50m_toggle_soft_reset(struct mdm_ctrl *mdm, bool atomic)
/* This function can be called from atomic context. */
static int sdx55m_toggle_soft_reset(struct mdm_ctrl *mdm, bool atomic)
{
	struct device_node *node = mdm->dev->of_node;
	int rc;
	int soft_reset_direction_assert = 0,
	    soft_reset_direction_de_assert = 1;

	if (of_property_read_bool(node, "qcom,esoc-spmi-soft-reset")) {
		esoc_mdm_log("Doing a Warm reset using SPMI\n");
		rc = qpnp_pon_modem_pwr_off(PON_POWER_OFF_WARM_RESET);
		if (rc) {
			dev_err(mdm->dev, "SPMI warm reset failed\n");
			esoc_mdm_log("SPMI warm reset failed\n");
			return rc;
		}
		esoc_mdm_log("Warm reset done using SPMI\n");
		return 0;
	}

	if (mdm->soft_reset_inverted) {
		soft_reset_direction_assert = 1;
		soft_reset_direction_de_assert = 0;