Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'soundwire-6.16-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire

Pull soundwire fixes from Vinod Koul:
"This contains a couple of amd driver fixes to handle alerts when the
link is down and the cmd status register clears up.

Also a revert of the qualcomm driver channel map support due to a
regression"

* tag 'soundwire-6.16-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire:
soundwire: Revert "soundwire: qcom: Add set_channel_map api support"
soundwire: amd: fix for clearing command status register
soundwire: amd: fix for handling slave alerts after link is down

+3 -27
+3 -1
drivers/soundwire/amd_manager.c
··· 238 238 239 239 if (sts & AMD_SDW_IMM_RES_VALID) { 240 240 dev_err(amd_manager->dev, "SDW%x manager is in bad state\n", amd_manager->instance); 241 - writel(0x00, amd_manager->mmio + ACP_SW_IMM_CMD_STS); 241 + writel(AMD_SDW_IMM_RES_VALID, amd_manager->mmio + ACP_SW_IMM_CMD_STS); 242 242 } 243 243 writel(upper_data, amd_manager->mmio + ACP_SW_IMM_CMD_UPPER_WORD); 244 244 writel(lower_data, amd_manager->mmio + ACP_SW_IMM_CMD_LOWER_QWORD); ··· 1209 1209 } 1210 1210 1211 1211 if (amd_manager->power_mode_mask & AMD_SDW_CLK_STOP_MODE) { 1212 + cancel_work_sync(&amd_manager->amd_sdw_work); 1212 1213 amd_sdw_wake_enable(amd_manager, false); 1213 1214 if (amd_manager->acp_rev >= ACP70_PCI_REV_ID) { 1214 1215 ret = amd_sdw_host_wake_enable(amd_manager, false); ··· 1220 1219 if (ret) 1221 1220 return ret; 1222 1221 } else if (amd_manager->power_mode_mask & AMD_SDW_POWER_OFF_MODE) { 1222 + cancel_work_sync(&amd_manager->amd_sdw_work); 1223 1223 amd_sdw_wake_enable(amd_manager, false); 1224 1224 if (amd_manager->acp_rev >= ACP70_PCI_REV_ID) { 1225 1225 ret = amd_sdw_host_wake_enable(amd_manager, false);
-26
drivers/soundwire/qcom.c
··· 156 156 u8 word_length; 157 157 u8 blk_group_count; 158 158 u8 lane_control; 159 - u8 ch_mask; 160 159 }; 161 160 162 161 /* ··· 1048 1049 { 1049 1050 u32 reg = SWRM_DP_PORT_CTRL_BANK(enable_ch->port_num, bank); 1050 1051 struct qcom_swrm_ctrl *ctrl = to_qcom_sdw(bus); 1051 - struct qcom_swrm_port_config *pcfg; 1052 1052 u32 val; 1053 1053 1054 - pcfg = &ctrl->pconfig[enable_ch->port_num]; 1055 1054 ctrl->reg_read(ctrl, reg, &val); 1056 - if (pcfg->ch_mask != SWR_INVALID_PARAM && pcfg->ch_mask != 0) 1057 - enable_ch->ch_mask = pcfg->ch_mask; 1058 1055 1059 1056 if (enable_ch->enable) 1060 1057 val |= (enable_ch->ch_mask << SWRM_DP_PORT_CTRL_EN_CHAN_SHFT); ··· 1270 1275 return ctrl->sruntime[dai->id]; 1271 1276 } 1272 1277 1273 - static int qcom_swrm_set_channel_map(struct snd_soc_dai *dai, 1274 - unsigned int tx_num, const unsigned int *tx_slot, 1275 - unsigned int rx_num, const unsigned int *rx_slot) 1276 - { 1277 - struct qcom_swrm_ctrl *ctrl = dev_get_drvdata(dai->dev); 1278 - int i; 1279 - 1280 - if (tx_slot) { 1281 - for (i = 0; i < tx_num; i++) 1282 - ctrl->pconfig[i].ch_mask = tx_slot[i]; 1283 - } 1284 - 1285 - if (rx_slot) { 1286 - for (i = 0; i < rx_num; i++) 1287 - ctrl->pconfig[i].ch_mask = rx_slot[i]; 1288 - } 1289 - 1290 - return 0; 1291 - } 1292 - 1293 1278 static int qcom_swrm_startup(struct snd_pcm_substream *substream, 1294 1279 struct snd_soc_dai *dai) 1295 1280 { ··· 1306 1331 .shutdown = qcom_swrm_shutdown, 1307 1332 .set_stream = qcom_swrm_set_sdw_stream, 1308 1333 .get_stream = qcom_swrm_get_sdw_stream, 1309 - .set_channel_map = qcom_swrm_set_channel_map, 1310 1334 }; 1311 1335 1312 1336 static const struct snd_soc_component_driver qcom_swrm_dai_component = {