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

Commit 45eab650 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

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

parents ed38f483 632f326c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ Optional driver parameters:
		management boot options. The default value is 203 milliseconds.
- qcom,esoc-skip-restart-for-mdm-crash: Boolean. If set, the esoc framework would skip the warm
		reboot phase during the momem crash.
- qcom,esoc-spmi-soft-reset: Boolean. If set, esoc framework will use qpnp apis to reset the
		external modem chip instead of toggling gpios.

Example:
	mdm0: qcom,mdm0 {
+1 −0
Original line number Diff line number Diff line
@@ -983,6 +983,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;