diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index 2ac386e03ace..d292859b9bd4 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c @@ -1097,6 +1097,12 @@ static int qcom_scm_probe(struct platform_device *pdev) return 0; } +static void qcom_scm_shutdown(struct platform_device *pdev) +{ + qcom_scm_disable_sdi(); + qcom_scm_halt_spmi_pmic_arbiter(); +} + static const struct of_device_id qcom_scm_dt_match[] = { { .compatible = "qcom,scm-apq8064", /* FIXME: This should have .data = (void *) SCM_HAS_CORE_CLK */ @@ -1127,6 +1133,7 @@ static struct platform_driver qcom_scm_driver = { .of_match_table = qcom_scm_dt_match, }, .probe = qcom_scm_probe, + .shutdown = qcom_scm_shutdown, }; static int __init qcom_scm_init(void) diff --git a/drivers/power/reset/msm-poweroff.c b/drivers/power/reset/msm-poweroff.c index 2ed23eb4b888..8db5b7286ac3 100644 --- a/drivers/power/reset/msm-poweroff.c +++ b/drivers/power/reset/msm-poweroff.c @@ -502,8 +502,6 @@ static int do_msm_restart(struct notifier_block *unused, unsigned long action, msm_restart_prepare(cmd); - qcom_scm_disable_sdi(); - qcom_scm_halt_spmi_pmic_arbiter(); deassert_ps_hold(); msleep(10000); @@ -516,10 +514,8 @@ static void do_msm_poweroff(void) pr_notice("Powering off the SoC\n"); set_dload_mode(0); - qcom_scm_disable_sdi(); qpnp_pon_system_pwr_off(PON_POWER_OFF_SHUTDOWN); - qcom_scm_halt_spmi_pmic_arbiter(); deassert_ps_hold(); msleep(10000);