11
11
#include <linux/of_platform.h>
12
12
#include <linux/pinctrl/consumer.h>
13
13
#include <linux/platform_device.h>
14
+ #include <linux/pm_runtime.h>
14
15
#include <linux/regmap.h>
15
16
#include <linux/reset.h>
16
17
@@ -1649,6 +1650,7 @@ static int stm32_fmc2_ebi_probe(struct platform_device *pdev)
1649
1650
return - ENOMEM ;
1650
1651
1651
1652
ebi -> dev = dev ;
1653
+ platform_set_drvdata (pdev , ebi );
1652
1654
1653
1655
ebi -> data = of_device_get_match_data (dev );
1654
1656
if (!ebi -> data )
@@ -1666,10 +1668,14 @@ static int stm32_fmc2_ebi_probe(struct platform_device *pdev)
1666
1668
if (PTR_ERR (rstc ) == - EPROBE_DEFER )
1667
1669
return - EPROBE_DEFER ;
1668
1670
1669
- ret = clk_prepare_enable ( ebi -> clk );
1671
+ ret = devm_pm_runtime_enable ( dev );
1670
1672
if (ret )
1671
1673
return ret ;
1672
1674
1675
+ ret = pm_runtime_resume_and_get (dev );
1676
+ if (ret < 0 )
1677
+ return ret ;
1678
+
1673
1679
if (!IS_ERR (rstc )) {
1674
1680
reset_control_assert (rstc );
1675
1681
reset_control_deassert (rstc );
@@ -1705,16 +1711,14 @@ static int stm32_fmc2_ebi_probe(struct platform_device *pdev)
1705
1711
if (ret )
1706
1712
goto err_release ;
1707
1713
1708
- platform_set_drvdata (pdev , ebi );
1709
-
1710
1714
return 0 ;
1711
1715
1712
1716
err_release :
1713
1717
stm32_fmc2_ebi_disable_banks (ebi );
1714
1718
stm32_fmc2_ebi_disable (ebi );
1715
1719
if (ebi -> data -> put_sems )
1716
1720
ebi -> data -> put_sems (ebi );
1717
- clk_disable_unprepare ( ebi -> clk );
1721
+ pm_runtime_put_sync_suspend ( dev );
1718
1722
1719
1723
return ret ;
1720
1724
}
@@ -1728,7 +1732,23 @@ static void stm32_fmc2_ebi_remove(struct platform_device *pdev)
1728
1732
stm32_fmc2_ebi_disable (ebi );
1729
1733
if (ebi -> data -> put_sems )
1730
1734
ebi -> data -> put_sems (ebi );
1735
+ pm_runtime_put_sync_suspend (& pdev -> dev );
1736
+ }
1737
+
1738
+ static int __maybe_unused stm32_fmc2_ebi_runtime_suspend (struct device * dev )
1739
+ {
1740
+ struct stm32_fmc2_ebi * ebi = dev_get_drvdata (dev );
1741
+
1731
1742
clk_disable_unprepare (ebi -> clk );
1743
+
1744
+ return 0 ;
1745
+ }
1746
+
1747
+ static int __maybe_unused stm32_fmc2_ebi_runtime_resume (struct device * dev )
1748
+ {
1749
+ struct stm32_fmc2_ebi * ebi = dev_get_drvdata (dev );
1750
+
1751
+ return clk_prepare_enable (ebi -> clk );
1732
1752
}
1733
1753
1734
1754
static int __maybe_unused stm32_fmc2_ebi_suspend (struct device * dev )
@@ -1738,7 +1758,7 @@ static int __maybe_unused stm32_fmc2_ebi_suspend(struct device *dev)
1738
1758
stm32_fmc2_ebi_disable (ebi );
1739
1759
if (ebi -> data -> put_sems )
1740
1760
ebi -> data -> put_sems (ebi );
1741
- clk_disable_unprepare ( ebi -> clk );
1761
+ pm_runtime_put_sync_suspend ( dev );
1742
1762
pinctrl_pm_select_sleep_state (dev );
1743
1763
1744
1764
return 0 ;
@@ -1751,8 +1771,8 @@ static int __maybe_unused stm32_fmc2_ebi_resume(struct device *dev)
1751
1771
1752
1772
pinctrl_pm_select_default_state (dev );
1753
1773
1754
- ret = clk_prepare_enable ( ebi -> clk );
1755
- if (ret )
1774
+ ret = pm_runtime_resume_and_get ( dev );
1775
+ if (ret < 0 )
1756
1776
return ret ;
1757
1777
1758
1778
if (ebi -> data -> get_sems )
@@ -1763,8 +1783,11 @@ static int __maybe_unused stm32_fmc2_ebi_resume(struct device *dev)
1763
1783
return 0 ;
1764
1784
}
1765
1785
1766
- static SIMPLE_DEV_PM_OPS (stm32_fmc2_ebi_pm_ops , stm32_fmc2_ebi_suspend ,
1767
- stm32_fmc2_ebi_resume ) ;
1786
+ static const struct dev_pm_ops stm32_fmc2_ebi_pm_ops = {
1787
+ SET_RUNTIME_PM_OPS (stm32_fmc2_ebi_runtime_suspend ,
1788
+ stm32_fmc2_ebi_runtime_resume , NULL )
1789
+ SET_SYSTEM_SLEEP_PM_OPS (stm32_fmc2_ebi_suspend , stm32_fmc2_ebi_resume )
1790
+ };
1768
1791
1769
1792
static const struct stm32_fmc2_ebi_data stm32_fmc2_ebi_mp1_data = {
1770
1793
.child_props = stm32_fmc2_child_props ,
0 commit comments