PM / devfreq: exynos-bus: Suspend all devices on system shutdown
authorMarek Szyprowski <m.szyprowski@samsung.com>
Thu, 21 Mar 2019 09:01:10 +0000 (10:01 +0100)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Tue, 16 Apr 2019 00:29:18 +0000 (09:29 +0900)
Force all Exynos buses to safe operation points before doing the system
reboot operation. There are board on which some aggressive power saving
operation points are behind the capabilities of the bootloader to properly
reset the hardware and boot the board. This way one can avoid board crash
early after reboot.

This fixes reboot issue on OdroidU3 board both with eMMC and SD boot.

Reported-by: Markus Reichl <m.reichl@fivetechno.de>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
drivers/devfreq/exynos-bus.c

index c25658b265988b4fdd2a3f4304fdbfab83b7b9f3..486cc5b422f1d5076fd804179a12f81d5510070a 100644 (file)
@@ -514,6 +514,13 @@ err:
        return ret;
 }
 
+static void exynos_bus_shutdown(struct platform_device *pdev)
+{
+       struct exynos_bus *bus = dev_get_drvdata(&pdev->dev);
+
+       devfreq_suspend_device(bus->devfreq);
+}
+
 #ifdef CONFIG_PM_SLEEP
 static int exynos_bus_resume(struct device *dev)
 {
@@ -556,6 +563,7 @@ MODULE_DEVICE_TABLE(of, exynos_bus_of_match);
 
 static struct platform_driver exynos_bus_platdrv = {
        .probe          = exynos_bus_probe,
+       .shutdown       = exynos_bus_shutdown,
        .driver = {
                .name   = "exynos-bus",
                .pm     = &exynos_bus_pm,