Skip to content

Commit 503ae28

Browse files
plbossartvinodkoul
authored andcommitted
soundwire: intel: add helper to stop bus
We have three nearly identical sequences to stop the clock, let's introduce a helper to reuse the same code. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20220919175721.354679-12-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent 8d875da commit 503ae28

1 file changed

Lines changed: 41 additions & 42 deletions

File tree

drivers/soundwire/intel.c

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,6 +1391,38 @@ static int intel_start_bus_after_clock_stop(struct sdw_intel *sdw)
13911391
return 0;
13921392
}
13931393

1394+
static int intel_stop_bus(struct sdw_intel *sdw, bool clock_stop)
1395+
{
1396+
struct device *dev = sdw->cdns.dev;
1397+
struct sdw_cdns *cdns = &sdw->cdns;
1398+
bool wake_enable = false;
1399+
int ret;
1400+
1401+
if (clock_stop) {
1402+
ret = sdw_cdns_clock_stop(cdns, true);
1403+
if (ret < 0)
1404+
dev_err(dev, "%s: cannot stop clock: %d\n", __func__, ret);
1405+
else
1406+
wake_enable = true;
1407+
}
1408+
1409+
ret = sdw_cdns_enable_interrupt(cdns, false);
1410+
if (ret < 0) {
1411+
dev_err(dev, "%s: cannot disable interrupts: %d\n", __func__, ret);
1412+
return ret;
1413+
}
1414+
1415+
ret = intel_link_power_down(sdw);
1416+
if (ret) {
1417+
dev_err(dev, "%s: Link power down failed: %d\n", __func__, ret);
1418+
return ret;
1419+
}
1420+
1421+
intel_shim_wake(sdw, wake_enable);
1422+
1423+
return 0;
1424+
}
1425+
13941426
static int sdw_master_read_intel_prop(struct sdw_bus *bus)
13951427
{
13961428
struct sdw_master_prop *prop = &bus->prop;
@@ -1790,20 +1822,12 @@ static int __maybe_unused intel_suspend(struct device *dev)
17901822
return 0;
17911823
}
17921824

1793-
ret = sdw_cdns_enable_interrupt(cdns, false);
1825+
ret = intel_stop_bus(sdw, false);
17941826
if (ret < 0) {
1795-
dev_err(dev, "cannot disable interrupts on suspend\n");
1827+
dev_err(dev, "%s: cannot stop bus: %d\n", __func__, ret);
17961828
return ret;
17971829
}
17981830

1799-
ret = intel_link_power_down(sdw);
1800-
if (ret) {
1801-
dev_err(dev, "Link power down failed: %d\n", ret);
1802-
return ret;
1803-
}
1804-
1805-
intel_shim_wake(sdw, false);
1806-
18071831
return 0;
18081832
}
18091833

@@ -1824,44 +1848,19 @@ static int __maybe_unused intel_suspend_runtime(struct device *dev)
18241848
clock_stop_quirks = sdw->link_res->clock_stop_quirks;
18251849

18261850
if (clock_stop_quirks & SDW_INTEL_CLK_STOP_TEARDOWN) {
1827-
1828-
ret = sdw_cdns_enable_interrupt(cdns, false);
1851+
ret = intel_stop_bus(sdw, false);
18291852
if (ret < 0) {
1830-
dev_err(dev, "cannot disable interrupts on suspend\n");
1831-
return ret;
1832-
}
1833-
1834-
ret = intel_link_power_down(sdw);
1835-
if (ret) {
1836-
dev_err(dev, "Link power down failed: %d\n", ret);
1853+
dev_err(dev, "%s: cannot stop bus during teardown: %d\n",
1854+
__func__, ret);
18371855
return ret;
18381856
}
1839-
1840-
intel_shim_wake(sdw, false);
1841-
1842-
} else if (clock_stop_quirks & SDW_INTEL_CLK_STOP_BUS_RESET ||
1843-
!clock_stop_quirks) {
1844-
bool wake_enable = true;
1845-
1846-
ret = sdw_cdns_clock_stop(cdns, true);
1847-
if (ret < 0) {
1848-
dev_err(dev, "cannot enable clock stop on suspend\n");
1849-
wake_enable = false;
1850-
}
1851-
1852-
ret = sdw_cdns_enable_interrupt(cdns, false);
1857+
} else if (clock_stop_quirks & SDW_INTEL_CLK_STOP_BUS_RESET || !clock_stop_quirks) {
1858+
ret = intel_stop_bus(sdw, true);
18531859
if (ret < 0) {
1854-
dev_err(dev, "cannot disable interrupts on suspend\n");
1855-
return ret;
1856-
}
1857-
1858-
ret = intel_link_power_down(sdw);
1859-
if (ret) {
1860-
dev_err(dev, "Link power down failed: %d\n", ret);
1860+
dev_err(dev, "%s: cannot stop bus during clock_stop: %d\n",
1861+
__func__, ret);
18611862
return ret;
18621863
}
1863-
1864-
intel_shim_wake(sdw, wake_enable);
18651864
} else {
18661865
dev_err(dev, "%s clock_stop_quirks %x unsupported\n",
18671866
__func__, clock_stop_quirks);

0 commit comments

Comments
 (0)