Skip to content

Commit b8e39bc

Browse files
plbossartvinodkoul
authored andcommitted
soundwire: intel_ace2x: enable wake support
The WAKEEN and WAKESTS registers were moved to the per-link SHIM_VS area. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20230515071042.2038-18-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent f90ba30 commit b8e39bc

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

drivers/soundwire/intel_ace2x.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,41 @@ static void intel_shim_vs_init(struct sdw_intel *sdw)
3131
usleep_range(10, 15);
3232
}
3333

34+
static int intel_shim_check_wake(struct sdw_intel *sdw)
35+
{
36+
void __iomem *shim_vs;
37+
u16 wake_sts;
38+
39+
shim_vs = sdw->link_res->shim_vs;
40+
wake_sts = intel_readw(shim_vs, SDW_SHIM2_INTEL_VS_WAKESTS);
41+
42+
return wake_sts & SDW_SHIM2_INTEL_VS_WAKEEN_PWS;
43+
}
44+
45+
static void intel_shim_wake(struct sdw_intel *sdw, bool wake_enable)
46+
{
47+
void __iomem *shim_vs = sdw->link_res->shim_vs;
48+
u16 wake_en;
49+
u16 wake_sts;
50+
51+
wake_en = intel_readw(shim_vs, SDW_SHIM2_INTEL_VS_WAKEEN);
52+
53+
if (wake_enable) {
54+
/* Enable the wakeup */
55+
wake_en |= SDW_SHIM2_INTEL_VS_WAKEEN_PWE;
56+
intel_writew(shim_vs, SDW_SHIM2_INTEL_VS_WAKEEN, wake_en);
57+
} else {
58+
/* Disable the wake up interrupt */
59+
wake_en &= ~SDW_SHIM2_INTEL_VS_WAKEEN_PWE;
60+
intel_writew(shim_vs, SDW_SHIM2_INTEL_VS_WAKEEN, wake_en);
61+
62+
/* Clear wake status (W1C) */
63+
wake_sts = intel_readw(shim_vs, SDW_SHIM2_INTEL_VS_WAKESTS);
64+
wake_sts |= SDW_SHIM2_INTEL_VS_WAKEEN_PWS;
65+
intel_writew(shim_vs, SDW_SHIM2_INTEL_VS_WAKESTS, wake_sts);
66+
}
67+
}
68+
3469
static int intel_link_power_up(struct sdw_intel *sdw)
3570
{
3671
struct sdw_bus *bus = &sdw->cdns.bus;
@@ -325,6 +360,9 @@ const struct sdw_intel_hw_ops sdw_intel_lnl_hw_ops = {
325360
.link_power_up = intel_link_power_up,
326361
.link_power_down = intel_link_power_down,
327362

363+
.shim_check_wake = intel_shim_check_wake,
364+
.shim_wake = intel_shim_wake,
365+
328366
.sync_arm = intel_sync_arm,
329367
.sync_go_unlocked = intel_sync_go_unlocked,
330368
.sync_go = intel_sync_go,

0 commit comments

Comments
 (0)