]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
power: reset: system-pmic: add support to power off via soc specific
authorLaxman Dewangan <ldewangan@nvidia.com>
Fri, 6 Nov 2015 14:20:59 +0000 (19:50 +0530)
committermobile promotions <svcmobile_promotions@nvidia.com>
Tue, 10 Nov 2015 23:32:35 +0000 (15:32 -0800)
Add support to call the SoC specific power off calls when registerd
pm_power_off is not able to power off the system.

On this case, SoC provides the power off handler to do system power
off.

bug 200146310

Change-Id: I8a98825c33e05631c879028a651f510a895b6c3d
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/829084

drivers/power/reset/system-pmic.c
include/linux/power/reset/system-pmic.h

index 8236d56c69912592c48facb84aee48bbd539ccf1..07e874b28b748492b34028e2ad0fc57e7e2976d9 100644 (file)
@@ -40,6 +40,9 @@ struct system_pmic_dev {
 
 static struct system_pmic_dev *system_pmic_dev;
 
+void (*soc_specific_power_off)(void);
+EXPORT_SYMBOL(soc_specific_power_off);
+
 static void system_pmic_power_reset(void)
 {
        system_pmic_dev->ops->power_reset(system_pmic_dev->pmic_drv_data);
@@ -62,6 +65,12 @@ static void system_pmic_power_off(void)
                        system_pmic_dev->power_on_data[i]);
        }
        system_pmic_dev->ops->power_off(system_pmic_dev->pmic_drv_data);
+       if (soc_specific_power_off) {
+               dev_err(system_pmic_dev->pmic_dev,
+                       "SoC specific power off sequence\n");
+               soc_specific_power_off();
+       }
+
        dev_err(system_pmic_dev->pmic_dev,
                "System PMIC is not able to power off system\n");
        while (1);
index d09817ea9e4bfa53c078f6a25106b1c34e34ee4b..6032c8ccc2ed158c65bb84f5d8223727e07005e9 100644 (file)
@@ -48,6 +48,8 @@ struct system_pmic_ops {
        void (*power_off)(void *pmic_data);
 };
 
+extern void (*soc_specific_power_off)(void);
+
 extern struct system_pmic_dev *system_pmic_register(struct device *dev,
        struct system_pmic_ops *ops, struct system_pmic_config *config,
        void *drv_data);