ARM: imx6: register pm_power_off handler if "fsl,pmic-stby-poweroff" is set
One of the Freescale recommended sequences for power off with external PMIC is the following: ... 3. SoC is programming PMIC for power off when standby is asserted. 4. In CCM STOP mode, Standby is asserted, PMIC gates SoC supplies. See: http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6DQRM.pdf page 5083 This patch implements step 4. of this sequence. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
This commit is contained in:
Родитель
9454a0caff
Коммит
8148d21360
|
@ -618,6 +618,28 @@ static void __init imx6_pm_common_init(const struct imx6_pm_socdata
|
||||||
IMX6Q_GPR1_GINT);
|
IMX6Q_GPR1_GINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void imx6_pm_stby_poweroff(void)
|
||||||
|
{
|
||||||
|
imx6_set_lpm(STOP_POWER_OFF);
|
||||||
|
imx6q_suspend_finish(0);
|
||||||
|
|
||||||
|
mdelay(1000);
|
||||||
|
|
||||||
|
pr_emerg("Unable to poweroff system\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static int imx6_pm_stby_poweroff_probe(void)
|
||||||
|
{
|
||||||
|
if (pm_power_off) {
|
||||||
|
pr_warn("%s: pm_power_off already claimed %p %pf!\n",
|
||||||
|
__func__, pm_power_off, pm_power_off);
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
pm_power_off = imx6_pm_stby_poweroff;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void __init imx6_pm_ccm_init(const char *ccm_compat)
|
void __init imx6_pm_ccm_init(const char *ccm_compat)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
@ -634,6 +656,9 @@ void __init imx6_pm_ccm_init(const char *ccm_compat)
|
||||||
val = readl_relaxed(ccm_base + CLPCR);
|
val = readl_relaxed(ccm_base + CLPCR);
|
||||||
val &= ~BM_CLPCR_LPM;
|
val &= ~BM_CLPCR_LPM;
|
||||||
writel_relaxed(val, ccm_base + CLPCR);
|
writel_relaxed(val, ccm_base + CLPCR);
|
||||||
|
|
||||||
|
if (of_property_read_bool(np, "fsl,pmic-stby-poweroff"))
|
||||||
|
imx6_pm_stby_poweroff_probe();
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init imx6q_pm_init(void)
|
void __init imx6q_pm_init(void)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче