Skip to content

Commit 49c9ff4

Browse files
plbossartvinodkoul
authored andcommitted
soundwire: intel: add link power management callbacks in hw_ops
No functionality change, only add indirection for link power management helpers. Signed-off-by: Pierre-Louis Bossart <[email protected]> Reviewed-by: Rander Wang <[email protected]> Signed-off-by: Bard Liao <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]>
1 parent 3db0c5a commit 49c9ff4

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

drivers/soundwire/intel.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,6 +1434,9 @@ const struct sdw_intel_hw_ops sdw_intel_cnl_hw_ops = {
14341434
.start_bus_after_clock_stop = intel_start_bus_after_clock_stop,
14351435
.stop_bus = intel_stop_bus,
14361436

1437+
.link_power_up = intel_link_power_up,
1438+
.link_power_down = intel_link_power_down,
1439+
14371440
.pre_bank_switch = intel_pre_bank_switch,
14381441
.post_bank_switch = intel_post_bank_switch,
14391442
};
@@ -1614,7 +1617,7 @@ int intel_link_startup(struct auxiliary_device *auxdev)
16141617
bus->multi_link = multi_link;
16151618

16161619
/* Initialize shim, controller */
1617-
ret = intel_link_power_up(sdw);
1620+
ret = sdw_intel_link_power_up(sdw);
16181621
if (ret)
16191622
goto err_init;
16201623

@@ -1679,7 +1682,7 @@ int intel_link_startup(struct auxiliary_device *auxdev)
16791682
return 0;
16801683

16811684
err_power_up:
1682-
intel_link_power_down(sdw);
1685+
sdw_intel_link_power_down(sdw);
16831686
err_init:
16841687
return ret;
16851688
}
@@ -1935,7 +1938,7 @@ static int __maybe_unused intel_resume(struct device *dev)
19351938
pm_runtime_idle(dev);
19361939
}
19371940

1938-
ret = intel_link_power_up(sdw);
1941+
ret = sdw_intel_link_power_up(sdw);
19391942
if (ret) {
19401943
dev_err(dev, "%s failed: %d\n", __func__, ret);
19411944
return ret;
@@ -1950,7 +1953,7 @@ static int __maybe_unused intel_resume(struct device *dev)
19501953
ret = sdw_intel_start_bus(sdw);
19511954
if (ret < 0) {
19521955
dev_err(dev, "cannot start bus during resume\n");
1953-
intel_link_power_down(sdw);
1956+
sdw_intel_link_power_down(sdw);
19541957
return ret;
19551958
}
19561959

@@ -1989,7 +1992,7 @@ static int __maybe_unused intel_resume_runtime(struct device *dev)
19891992
clock_stop_quirks = sdw->link_res->clock_stop_quirks;
19901993

19911994
if (clock_stop_quirks & SDW_INTEL_CLK_STOP_TEARDOWN) {
1992-
ret = intel_link_power_up(sdw);
1995+
ret = sdw_intel_link_power_up(sdw);
19931996
if (ret) {
19941997
dev_err(dev, "%s: power_up failed after teardown: %d\n", __func__, ret);
19951998
return ret;
@@ -2004,13 +2007,13 @@ static int __maybe_unused intel_resume_runtime(struct device *dev)
20042007
ret = sdw_intel_start_bus(sdw);
20052008
if (ret < 0) {
20062009
dev_err(dev, "%s: cannot start bus after teardown: %d\n", __func__, ret);
2007-
intel_link_power_down(sdw);
2010+
sdw_intel_link_power_down(sdw);
20082011
return ret;
20092012
}
20102013

20112014

20122015
} else if (clock_stop_quirks & SDW_INTEL_CLK_STOP_BUS_RESET) {
2013-
ret = intel_link_power_up(sdw);
2016+
ret = sdw_intel_link_power_up(sdw);
20142017
if (ret) {
20152018
dev_err(dev, "%s: power_up failed after bus reset: %d\n", __func__, ret);
20162019
return ret;
@@ -2019,14 +2022,14 @@ static int __maybe_unused intel_resume_runtime(struct device *dev)
20192022
ret = sdw_intel_start_bus_after_reset(sdw);
20202023
if (ret < 0) {
20212024
dev_err(dev, "%s: cannot start bus after reset: %d\n", __func__, ret);
2022-
intel_link_power_down(sdw);
2025+
sdw_intel_link_power_down(sdw);
20232026
return ret;
20242027
}
20252028
} else if (!clock_stop_quirks) {
20262029

20272030
sdw_intel_check_clock_stop(sdw);
20282031

2029-
ret = intel_link_power_up(sdw);
2032+
ret = sdw_intel_link_power_up(sdw);
20302033
if (ret) {
20312034
dev_err(dev, "%s: power_up failed: %d\n", __func__, ret);
20322035
return ret;
@@ -2035,7 +2038,7 @@ static int __maybe_unused intel_resume_runtime(struct device *dev)
20352038
ret = sdw_intel_start_bus_after_clock_stop(sdw);
20362039
if (ret < 0) {
20372040
dev_err(dev, "%s: cannot start bus after clock stop: %d\n", __func__, ret);
2038-
intel_link_power_down(sdw);
2041+
sdw_intel_link_power_down(sdw);
20392042
return ret;
20402043
}
20412044
} else {

drivers/soundwire/intel.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,18 @@ static inline int sdw_intel_stop_bus(struct sdw_intel *sdw, bool clock_stop)
118118
return -ENOTSUPP;
119119
}
120120

121+
static inline int sdw_intel_link_power_up(struct sdw_intel *sdw)
122+
{
123+
if (SDW_INTEL_CHECK_OPS(sdw, link_power_up))
124+
return SDW_INTEL_OPS(sdw, link_power_up)(sdw);
125+
return -ENOTSUPP;
126+
}
127+
128+
static inline int sdw_intel_link_power_down(struct sdw_intel *sdw)
129+
{
130+
if (SDW_INTEL_CHECK_OPS(sdw, link_power_down))
131+
return SDW_INTEL_OPS(sdw, link_power_down)(sdw);
132+
return -ENOTSUPP;
133+
}
134+
121135
#endif /* __SDW_INTEL_LOCAL_H */

include/linux/soundwire/sdw_intel.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@ struct sdw_intel;
305305
* @start_bus_after_reset: start after reset
306306
* @start_bus_after_clock_stop: start after mode0 clock stop
307307
* @stop_bus: stop all bus
308+
* @link_power_up: power-up using chip-specific helpers
309+
* @link_power_down: power-down with chip-specific helpers
308310
* @pre_bank_switch: helper for bus management
309311
* @post_bank_switch: helper for bus management
310312
*/
@@ -320,6 +322,9 @@ struct sdw_intel_hw_ops {
320322
int (*start_bus_after_clock_stop)(struct sdw_intel *sdw);
321323
int (*stop_bus)(struct sdw_intel *sdw, bool clock_stop);
322324

325+
int (*link_power_up)(struct sdw_intel *sdw);
326+
int (*link_power_down)(struct sdw_intel *sdw);
327+
323328
int (*pre_bank_switch)(struct sdw_intel *sdw);
324329
int (*post_bank_switch)(struct sdw_intel *sdw);
325330
};

0 commit comments

Comments
 (0)