@@ -1608,22 +1608,26 @@ static int tegra_i2c_probe(struct platform_device *pdev)
1608
1608
}
1609
1609
1610
1610
pm_runtime_enable (& pdev -> dev );
1611
- if (!pm_runtime_enabled (& pdev -> dev ))
1611
+ if (!pm_runtime_enabled (& pdev -> dev )) {
1612
1612
ret = tegra_i2c_runtime_resume (& pdev -> dev );
1613
- else
1613
+ if (ret < 0 ) {
1614
+ dev_err (& pdev -> dev , "runtime resume failed\n" );
1615
+ goto unprepare_div_clk ;
1616
+ }
1617
+ } else {
1614
1618
ret = pm_runtime_get_sync (i2c_dev -> dev );
1615
-
1616
- if ( ret < 0 ) {
1617
- dev_err ( & pdev -> dev , "runtime resume failed\n" ) ;
1618
- goto unprepare_div_clk ;
1619
+ if ( ret < 0 ) {
1620
+ dev_err ( & pdev -> dev , "runtime resume failed\n" );
1621
+ goto disable_rpm ;
1622
+ }
1619
1623
}
1620
1624
1621
1625
if (i2c_dev -> is_multimaster_mode ) {
1622
1626
ret = clk_enable (i2c_dev -> div_clk );
1623
1627
if (ret < 0 ) {
1624
1628
dev_err (i2c_dev -> dev , "div_clk enable failed %d\n" ,
1625
1629
ret );
1626
- goto disable_rpm ;
1630
+ goto put_rpm ;
1627
1631
}
1628
1632
}
1629
1633
@@ -1671,11 +1675,16 @@ static int tegra_i2c_probe(struct platform_device *pdev)
1671
1675
if (i2c_dev -> is_multimaster_mode )
1672
1676
clk_disable (i2c_dev -> div_clk );
1673
1677
1674
- disable_rpm :
1675
- pm_runtime_disable (& pdev -> dev );
1676
- if (!pm_runtime_status_suspended (& pdev -> dev ))
1678
+ put_rpm :
1679
+ if (pm_runtime_enabled (& pdev -> dev ))
1680
+ pm_runtime_put_sync (& pdev -> dev );
1681
+ else
1677
1682
tegra_i2c_runtime_suspend (& pdev -> dev );
1678
1683
1684
+ disable_rpm :
1685
+ if (pm_runtime_enabled (& pdev -> dev ))
1686
+ pm_runtime_disable (& pdev -> dev );
1687
+
1679
1688
unprepare_div_clk :
1680
1689
clk_unprepare (i2c_dev -> div_clk );
1681
1690
@@ -1710,9 +1719,14 @@ static int tegra_i2c_remove(struct platform_device *pdev)
1710
1719
static int __maybe_unused tegra_i2c_suspend (struct device * dev )
1711
1720
{
1712
1721
struct tegra_i2c_dev * i2c_dev = dev_get_drvdata (dev );
1722
+ int err ;
1713
1723
1714
1724
i2c_mark_adapter_suspended (& i2c_dev -> adapter );
1715
1725
1726
+ err = pm_runtime_force_suspend (dev );
1727
+ if (err < 0 )
1728
+ return err ;
1729
+
1716
1730
return 0 ;
1717
1731
}
1718
1732
@@ -1733,6 +1747,10 @@ static int __maybe_unused tegra_i2c_resume(struct device *dev)
1733
1747
if (err )
1734
1748
return err ;
1735
1749
1750
+ err = pm_runtime_force_resume (dev );
1751
+ if (err < 0 )
1752
+ return err ;
1753
+
1736
1754
i2c_mark_adapter_resumed (& i2c_dev -> adapter );
1737
1755
1738
1756
return 0 ;
0 commit comments