Skip to content

Commit e37ac35

Browse files
plbossartbardliao
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>
1 parent 7f92d72 commit e37ac35

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
return0;
13921392
}
13931393

1394+
staticintintel_stop_bus(structsdw_intel*sdw, boolclock_stop)
1395+
{
1396+
structdevice*dev=sdw->cdns.dev;
1397+
structsdw_cdns*cdns=&sdw->cdns;
1398+
boolwake_enable= false;
1399+
intret;
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+
returnret;
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+
returnret;
1419+
}
1420+
1421+
intel_shim_wake(sdw, wake_enable);
1422+
1423+
return0;
1424+
}
1425+
13941426
staticintsdw_master_read_intel_prop(structsdw_bus*bus)
13951427
{
13961428
structsdw_master_prop*prop=&bus->prop;
@@ -1792,20 +1824,12 @@ static int __maybe_unused intel_suspend(struct device *dev)
17921824
return0;
17931825
}
17941826

1795-
ret=sdw_cdns_enable_interrupt(cdns, false);
1827+
ret=intel_stop_bus(sdw, false);
17961828
if (ret<0) {
1797-
dev_err(dev, "cannot disable interrupts on suspend\n");
1829+
dev_err(dev, "%s: cannot stop bus: %d\n", __func__, ret);
17981830
returnret;
17991831
}
18001832

1801-
ret=intel_link_power_down(sdw);
1802-
if (ret) {
1803-
dev_err(dev, "Link power down failed: %d\n", ret);
1804-
returnret;
1805-
}
1806-
1807-
intel_shim_wake(sdw, false);
1808-
18091833
return0;
18101834
}
18111835

@@ -1826,44 +1850,19 @@ static int __maybe_unused intel_suspend_runtime(struct device *dev)
18261850
clock_stop_quirks=sdw->link_res->clock_stop_quirks;
18271851

18281852
if (clock_stop_quirks&SDW_INTEL_CLK_STOP_TEARDOWN) {
1829-
1830-
ret=sdw_cdns_enable_interrupt(cdns, false);
1853+
ret=intel_stop_bus(sdw, false);
18311854
if (ret<0) {
1832-
dev_err(dev, "cannot disable interrupts on suspend\n");
1833-
returnret;
1834-
}
1835-
1836-
ret=intel_link_power_down(sdw);
1837-
if (ret) {
1838-
dev_err(dev, "Link power down failed: %d\n", ret);
1855+
dev_err(dev, "%s: cannot stop bus during teardown: %d\n",
1856+
__func__, ret);
18391857
returnret;
18401858
}
1841-
1842-
intel_shim_wake(sdw, false);
1843-
1844-
} elseif (clock_stop_quirks&SDW_INTEL_CLK_STOP_BUS_RESET||
1845-
!clock_stop_quirks) {
1846-
boolwake_enable= true;
1847-
1848-
ret=sdw_cdns_clock_stop(cdns, true);
1849-
if (ret<0) {
1850-
dev_err(dev, "cannot enable clock stop on suspend\n");
1851-
wake_enable= false;
1852-
}
1853-
1854-
ret=sdw_cdns_enable_interrupt(cdns, false);
1859+
} elseif (clock_stop_quirks&SDW_INTEL_CLK_STOP_BUS_RESET|| !clock_stop_quirks) {
1860+
ret=intel_stop_bus(sdw, true);
18551861
if (ret<0) {
1856-
dev_err(dev, "cannot disable interrupts on suspend\n");
1857-
returnret;
1858-
}
1859-
1860-
ret=intel_link_power_down(sdw);
1861-
if (ret) {
1862-
dev_err(dev, "Link power down failed: %d\n", ret);
1862+
dev_err(dev, "%s: cannot stop bus during clock_stop: %d\n",
1863+
__func__, ret);
18631864
returnret;
18641865
}
1865-
1866-
intel_shim_wake(sdw, wake_enable);
18671866
} else {
18681867
dev_err(dev, "%s clock_stop_quirks %x unsupported\n",
18691868
__func__, clock_stop_quirks);

0 commit comments

Comments
 (0)