Skip to content

Commit 8a5c3ef

Browse files
committed
Merge tag 'soundwire-6.9-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire
Pull soundwire fix from Vinod Koul: - Single AMD driver fix for wake interrupt handling in clockstop mode * tag 'soundwire-6.9-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire: soundwire: amd: fix for wake interrupt handling for clockstop mode
2 parents 6fba14a + 63dc588 commit 8a5c3ef

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

drivers/soundwire/amd_manager.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,19 @@ static void amd_sdw_set_frameshape(struct amd_sdw_manager *amd_manager)
130130
writel(frame_size, amd_manager->mmio + ACP_SW_FRAMESIZE);
131131
}
132132

133+
static void amd_sdw_wake_enable(struct amd_sdw_manager *amd_manager, bool enable)
134+
{
135+
u32 wake_ctrl;
136+
137+
wake_ctrl = readl(amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_MASK_8TO11);
138+
if (enable)
139+
wake_ctrl |= AMD_SDW_WAKE_INTR_MASK;
140+
else
141+
wake_ctrl &= ~AMD_SDW_WAKE_INTR_MASK;
142+
143+
writel(wake_ctrl, amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_MASK_8TO11);
144+
}
145+
133146
static void amd_sdw_ctl_word_prep(u32 *lower_word, u32 *upper_word, struct sdw_msg *msg,
134147
int cmd_offset)
135148
{
@@ -1095,6 +1108,7 @@ static int __maybe_unused amd_suspend(struct device *dev)
10951108
}
10961109

10971110
if (amd_manager->power_mode_mask & AMD_SDW_CLK_STOP_MODE) {
1111+
amd_sdw_wake_enable(amd_manager, false);
10981112
return amd_sdw_clock_stop(amd_manager);
10991113
} else if (amd_manager->power_mode_mask & AMD_SDW_POWER_OFF_MODE) {
11001114
/*
@@ -1121,6 +1135,7 @@ static int __maybe_unused amd_suspend_runtime(struct device *dev)
11211135
return 0;
11221136
}
11231137
if (amd_manager->power_mode_mask & AMD_SDW_CLK_STOP_MODE) {
1138+
amd_sdw_wake_enable(amd_manager, true);
11241139
return amd_sdw_clock_stop(amd_manager);
11251140
} else if (amd_manager->power_mode_mask & AMD_SDW_POWER_OFF_MODE) {
11261141
ret = amd_sdw_clock_stop(amd_manager);

drivers/soundwire/amd_manager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@
152152
#define AMD_SDW0_EXT_INTR_MASK 0x200000
153153
#define AMD_SDW1_EXT_INTR_MASK 4
154154
#define AMD_SDW_IRQ_MASK_0TO7 0x77777777
155-
#define AMD_SDW_IRQ_MASK_8TO11 0x000d7777
155+
#define AMD_SDW_IRQ_MASK_8TO11 0x000c7777
156156
#define AMD_SDW_IRQ_ERROR_MASK 0xff
157157
#define AMD_SDW_MAX_FREQ_NUM 1
158158
#define AMD_SDW0_MAX_TX_PORTS 3
@@ -190,6 +190,7 @@
190190
#define AMD_SDW_CLK_RESUME_REQ 2
191191
#define AMD_SDW_CLK_RESUME_DONE 3
192192
#define AMD_SDW_WAKE_STAT_MASK BIT(16)
193+
#define AMD_SDW_WAKE_INTR_MASK BIT(16)
193194

194195
static u32 amd_sdw_freq_tbl[AMD_SDW_MAX_FREQ_NUM] = {
195196
AMD_SDW_DEFAULT_CLK_FREQ,

0 commit comments

Comments
 (0)