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

Merge tag 'asoc-fix-v6.19-merge-window' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus

ASoC: Fixes for v6.19

A small pile of fixes that came in during the merge window, it's all
fairly standard device specific stuff.

+82 -38
+4 -1
Documentation/devicetree/bindings/sound/cirrus,cs42xx8.yaml
··· 9 9 maintainers: 10 10 - patches@opensource.cirrus.com 11 11 12 + allOf: 13 + - $ref: dai-common.yaml# 14 + 12 15 properties: 13 16 compatible: 14 17 enum: ··· 66 63 - VLC-supply 67 64 - VLS-supply 68 65 69 - additionalProperties: false 66 + unevaluatedProperties: false 70 67 71 68 examples: 72 69 - |
+2
sound/soc/amd/acp/acp-i2s.c
··· 157 157 158 158 spin_lock_irq(&chip->acp_lock); 159 159 list_for_each_entry(stream, &chip->stream_list, list) { 160 + if (dai->id != stream->dai_id) 161 + continue; 160 162 switch (chip->acp_rev) { 161 163 case ACP_RN_PCI_ID: 162 164 case ACP_RMB_PCI_ID:
+24 -6
sound/soc/amd/acp/acp-legacy-common.c
··· 219 219 SP_PB_FIFO_ADDR_OFFSET; 220 220 reg_fifo_addr = ACP_I2S_TX_FIFOADDR(chip); 221 221 reg_fifo_size = ACP_I2S_TX_FIFOSIZE(chip); 222 - phy_addr = I2S_SP_TX_MEM_WINDOW_START + stream->reg_offset; 222 + if (chip->acp_rev >= ACP70_PCI_ID) 223 + phy_addr = ACP7x_I2S_SP_TX_MEM_WINDOW_START; 224 + else 225 + phy_addr = I2S_SP_TX_MEM_WINDOW_START + stream->reg_offset; 223 226 writel(phy_addr, chip->base + ACP_I2S_TX_RINGBUFADDR(chip)); 224 227 } else { 225 228 reg_dma_size = ACP_I2S_RX_DMA_SIZE(chip); ··· 230 227 SP_CAPT_FIFO_ADDR_OFFSET; 231 228 reg_fifo_addr = ACP_I2S_RX_FIFOADDR(chip); 232 229 reg_fifo_size = ACP_I2S_RX_FIFOSIZE(chip); 233 - phy_addr = I2S_SP_RX_MEM_WINDOW_START + stream->reg_offset; 230 + if (chip->acp_rev >= ACP70_PCI_ID) 231 + phy_addr = ACP7x_I2S_SP_RX_MEM_WINDOW_START; 232 + else 233 + phy_addr = I2S_SP_RX_MEM_WINDOW_START + stream->reg_offset; 234 234 writel(phy_addr, chip->base + ACP_I2S_RX_RINGBUFADDR(chip)); 235 235 } 236 236 break; ··· 244 238 BT_PB_FIFO_ADDR_OFFSET; 245 239 reg_fifo_addr = ACP_BT_TX_FIFOADDR(chip); 246 240 reg_fifo_size = ACP_BT_TX_FIFOSIZE(chip); 247 - phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset; 241 + if (chip->acp_rev >= ACP70_PCI_ID) 242 + phy_addr = ACP7x_I2S_BT_TX_MEM_WINDOW_START; 243 + else 244 + phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset; 248 245 writel(phy_addr, chip->base + ACP_BT_TX_RINGBUFADDR(chip)); 249 246 } else { 250 247 reg_dma_size = ACP_BT_RX_DMA_SIZE(chip); ··· 255 246 BT_CAPT_FIFO_ADDR_OFFSET; 256 247 reg_fifo_addr = ACP_BT_RX_FIFOADDR(chip); 257 248 reg_fifo_size = ACP_BT_RX_FIFOSIZE(chip); 258 - phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset; 249 + if (chip->acp_rev >= ACP70_PCI_ID) 250 + phy_addr = ACP7x_I2S_BT_RX_MEM_WINDOW_START; 251 + else 252 + phy_addr = I2S_BT_RX_MEM_WINDOW_START + stream->reg_offset; 259 253 writel(phy_addr, chip->base + ACP_BT_RX_RINGBUFADDR(chip)); 260 254 } 261 255 break; ··· 269 257 HS_PB_FIFO_ADDR_OFFSET; 270 258 reg_fifo_addr = ACP_HS_TX_FIFOADDR; 271 259 reg_fifo_size = ACP_HS_TX_FIFOSIZE; 272 - phy_addr = I2S_HS_TX_MEM_WINDOW_START + stream->reg_offset; 260 + if (chip->acp_rev >= ACP70_PCI_ID) 261 + phy_addr = ACP7x_I2S_HS_TX_MEM_WINDOW_START; 262 + else 263 + phy_addr = I2S_HS_TX_MEM_WINDOW_START + stream->reg_offset; 273 264 writel(phy_addr, chip->base + ACP_HS_TX_RINGBUFADDR); 274 265 } else { 275 266 reg_dma_size = ACP_HS_RX_DMA_SIZE; ··· 280 265 HS_CAPT_FIFO_ADDR_OFFSET; 281 266 reg_fifo_addr = ACP_HS_RX_FIFOADDR; 282 267 reg_fifo_size = ACP_HS_RX_FIFOSIZE; 283 - phy_addr = I2S_HS_RX_MEM_WINDOW_START + stream->reg_offset; 268 + if (chip->acp_rev >= ACP70_PCI_ID) 269 + phy_addr = ACP7x_I2S_HS_RX_MEM_WINDOW_START; 270 + else 271 + phy_addr = I2S_HS_RX_MEM_WINDOW_START + stream->reg_offset; 284 272 writel(phy_addr, chip->base + ACP_HS_RX_RINGBUFADDR); 285 273 } 286 274 break;
+3 -1
sound/soc/bcm/bcm63xx-pcm-whistler.c
··· 358 358 359 359 i2s_priv = dev_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0)->dev); 360 360 361 - of_dma_configure(pcm->card->dev, pcm->card->dev->of_node, 1); 361 + ret = of_dma_configure(pcm->card->dev, pcm->card->dev->of_node, 1); 362 + if (ret) 363 + return ret; 362 364 363 365 ret = dma_coerce_mask_and_coherent(pcm->card->dev, DMA_BIT_MASK(32)); 364 366 if (ret)
+1 -2
sound/soc/codecs/Kconfig
··· 777 777 config SND_SOC_CROS_EC_CODEC 778 778 tristate "codec driver for ChromeOS EC" 779 779 depends on CROS_EC 780 - select CRYPTO 781 780 select CRYPTO_LIB_SHA256 782 781 help 783 782 If you say yes here you will get support for the ··· 917 918 config SND_SOC_CS35L56_CAL_SET_CTRL 918 919 bool "CS35L56 ALSA control to restore factory calibration" 919 920 default N 920 - select SND_SOC_CS35L56_CAL_SYSFS_COMMON 921 + select SND_SOC_CS35L56_CAL_DEBUGFS_COMMON 921 922 help 922 923 Allow restoring factory calibration data through an ALSA 923 924 control. This is only needed on platforms without UEFI or
+9 -1
sound/soc/codecs/ak4458.c
··· 671 671 regcache_cache_only(ak4458->regmap, false); 672 672 regcache_mark_dirty(ak4458->regmap); 673 673 674 - return regcache_sync(ak4458->regmap); 674 + ret = regcache_sync(ak4458->regmap); 675 + if (ret) 676 + goto err; 677 + 678 + return 0; 679 + err: 680 + regcache_cache_only(ak4458->regmap, true); 681 + regulator_bulk_disable(ARRAY_SIZE(ak4458->supplies), ak4458->supplies); 682 + return ret; 675 683 } 676 684 677 685 static const struct snd_soc_component_driver soc_codec_dev_ak4458 = {
+9 -1
sound/soc/codecs/ak5558.c
··· 372 372 regcache_cache_only(ak5558->regmap, false); 373 373 regcache_mark_dirty(ak5558->regmap); 374 374 375 - return regcache_sync(ak5558->regmap); 375 + ret = regcache_sync(ak5558->regmap); 376 + if (ret) 377 + goto err; 378 + 379 + return 0; 380 + err: 381 + regcache_cache_only(ak5558->regmap, true); 382 + regulator_bulk_disable(ARRAY_SIZE(ak5558->supplies), ak5558->supplies); 383 + return ret; 376 384 } 377 385 378 386 static const struct dev_pm_ops ak5558_pm = {
+17 -12
sound/soc/codecs/cs-amp-lib.c
··· 7 7 8 8 #include <asm/byteorder.h> 9 9 #include <kunit/static_stub.h> 10 - #include <linux/cleanup.h> 11 10 #include <linux/debugfs.h> 12 11 #include <linux/dev_printk.h> 13 12 #include <linux/efi.h> ··· 309 310 efi_guid_t **guid, 310 311 u32 *attr) 311 312 { 312 - struct cirrus_amp_efi_data *efi_data __free(kfree) = NULL; 313 + struct cirrus_amp_efi_data *efi_data; 313 314 unsigned long data_size = 0; 315 + u8 *data; 314 316 efi_status_t status; 315 317 int i, ret; 316 318 ··· 339 339 } 340 340 341 341 /* Get variable contents into buffer */ 342 - efi_data = kmalloc(data_size, GFP_KERNEL); 343 - if (!efi_data) 342 + data = kmalloc(data_size, GFP_KERNEL); 343 + if (!data) 344 344 return ERR_PTR(-ENOMEM); 345 345 346 346 status = cs_amp_get_efi_variable(cs_amp_lib_cal_efivars[i].name, 347 347 cs_amp_lib_cal_efivars[i].guid, 348 - attr, &data_size, efi_data); 348 + attr, &data_size, data); 349 349 if (status != EFI_SUCCESS) { 350 350 ret = -EINVAL; 351 351 goto err; 352 352 } 353 353 354 + efi_data = (struct cirrus_amp_efi_data *)data; 354 355 dev_dbg(dev, "Calibration: Size=%d, Amp Count=%d\n", efi_data->size, efi_data->count); 355 356 356 357 if ((efi_data->count > 128) || ··· 365 364 if (efi_data->size == 0) 366 365 efi_data->size = data_size; 367 366 368 - return_ptr(efi_data); 367 + return efi_data; 369 368 370 369 err: 370 + kfree(data); 371 371 dev_err(dev, "Failed to read calibration data from EFI: %d\n", ret); 372 372 373 373 return ERR_PTR(ret); ··· 391 389 static int _cs_amp_get_efi_calibration_data(struct device *dev, u64 target_uid, int amp_index, 392 390 struct cirrus_amp_cal_data *out_data) 393 391 { 394 - struct cirrus_amp_efi_data *efi_data __free(kfree) = NULL; 392 + struct cirrus_amp_efi_data *efi_data; 395 393 struct cirrus_amp_cal_data *cal = NULL; 396 - int i; 394 + int i, ret; 397 395 398 396 efi_data = cs_amp_get_cal_efi_buffer(dev, NULL, NULL, NULL); 399 397 if (IS_ERR(efi_data)) ··· 434 432 dev_warn(dev, "Calibration entry %d does not match silicon ID", amp_index); 435 433 } 436 434 437 - if (!cal) { 435 + if (cal) { 436 + memcpy(out_data, cal, sizeof(*out_data)); 437 + ret = 0; 438 + } else { 438 439 dev_warn(dev, "No calibration for silicon ID %#llx\n", target_uid); 439 - return -ENOENT; 440 + ret = -ENOENT; 440 441 } 441 442 442 - memcpy(out_data, cal, sizeof(*out_data)); 443 + kfree(efi_data); 443 444 444 - return 0; 445 + return ret; 445 446 } 446 447 447 448 static int _cs_amp_set_efi_calibration_data(struct device *dev, int amp_index, int num_amps,
+4 -3
sound/soc/codecs/cs35l41.c
··· 1188 1188 } 1189 1189 } 1190 1190 1191 - err: 1192 1191 if (sub) { 1193 1192 cs35l41->dsp.system_name = sub; 1194 1193 dev_info(cs35l41->dev, "Subsystem ID: %s\n", cs35l41->dsp.system_name); 1195 - } else 1196 - dev_warn(cs35l41->dev, "Subsystem ID not found\n"); 1194 + return 0; 1195 + } 1197 1196 1197 + err: 1198 + dev_warn(cs35l41->dev, "Subsystem ID not found\n"); 1198 1199 return ret; 1199 1200 } 1200 1201
+2 -2
sound/soc/codecs/nau8325.c
··· 386 386 const struct nau8325_srate_attr **srate_table, 387 387 int *n1_sel, int *mult_sel, int *n2_sel) 388 388 { 389 - int i, j, mclk, mclk_max, ratio, ratio_sel, n2_max; 389 + int i, j, mclk, ratio; 390 + int mclk_max = 0, ratio_sel = 0, n2_max = 0; 390 391 391 392 if (!nau8325->mclk || !nau8325->fs) 392 393 goto proc_err; ··· 409 408 } 410 409 411 410 /* Get MCLK_SRC through 1/N, Multiplier, and then 1/N2. */ 412 - mclk_max = 0; 413 411 for (i = 0; i < ARRAY_SIZE(mclk_n1_div); i++) { 414 412 for (j = 0; j < ARRAY_SIZE(mclk_n3_mult); j++) { 415 413 mclk = nau8325->mclk << mclk_n3_mult[j].param;
+2 -2
sound/soc/codecs/wcd937x.c
··· 2866 2866 dev_err(dev, "Couldn't parse phandle to qcom,rx-device!\n"); 2867 2867 return -ENODEV; 2868 2868 } 2869 - of_node_get(wcd937x->rxnode); 2869 + 2870 2870 component_match_add_release(dev, matchptr, component_release_of, 2871 2871 component_compare_of, wcd937x->rxnode); 2872 2872 ··· 2875 2875 dev_err(dev, "Couldn't parse phandle to qcom,tx-device\n"); 2876 2876 return -ENODEV; 2877 2877 } 2878 - of_node_get(wcd937x->txnode); 2878 + 2879 2879 component_match_add_release(dev, matchptr, component_release_of, 2880 2880 component_compare_of, wcd937x->txnode); 2881 2881
+1 -2
sound/soc/codecs/wcd938x.c
··· 3464 3464 return -ENODEV; 3465 3465 } 3466 3466 3467 - of_node_get(wcd938x->rxnode); 3468 3467 component_match_add_release(dev, matchptr, component_release_of, 3469 3468 component_compare_of, wcd938x->rxnode); 3470 3469 ··· 3472 3473 dev_err(dev, "%s: Tx-device node not defined\n", __func__); 3473 3474 return -ENODEV; 3474 3475 } 3475 - of_node_get(wcd938x->txnode); 3476 + 3476 3477 component_match_add_release(dev, matchptr, component_release_of, 3477 3478 component_compare_of, wcd938x->txnode); 3478 3479 return 0;
+1 -2
sound/soc/codecs/wcd939x.c
··· 3526 3526 return -ENODEV; 3527 3527 } 3528 3528 3529 - of_node_get(wcd939x->rxnode); 3530 3529 component_match_add_release(dev, matchptr, component_release_of, 3531 3530 component_compare_of, wcd939x->rxnode); 3532 3531 ··· 3534 3535 dev_err(dev, "%s: Tx-device node not defined\n", __func__); 3535 3536 return -ENODEV; 3536 3537 } 3537 - of_node_get(wcd939x->txnode); 3538 + 3538 3539 component_match_add_release(dev, matchptr, component_release_of, 3539 3540 component_compare_of, wcd939x->txnode); 3540 3541 return 0;
+2 -2
sound/soc/qcom/qdsp6/q6afe.c
··· 947 947 struct q6afe_port *p; 948 948 struct q6afe_port *ret = NULL; 949 949 950 - guard(spinlock)(&afe->port_list_lock); 950 + guard(spinlock_irqsave)(&afe->port_list_lock); 951 951 list_for_each_entry(p, &afe->port_list, node) 952 952 if (p->token == token) { 953 953 ret = p; ··· 1807 1807 port->cfg_type = cfg_type; 1808 1808 kref_init(&port->refcount); 1809 1809 1810 - guard(spinlock)(&afe->port_list_lock); 1810 + guard(spinlock_irqsave)(&afe->port_list_lock); 1811 1811 list_add_tail(&port->node, &afe->port_list); 1812 1812 1813 1813 return port;
+1 -1
sound/soc/rockchip/rockchip_pdm.c
··· 580 580 if (!pdm) 581 581 return -ENOMEM; 582 582 583 - pdm->version = (enum rk_pdm_version)device_get_match_data(&pdev->dev); 583 + pdm->version = (unsigned long)device_get_match_data(&pdev->dev); 584 584 if (pdm->version == RK_PDM_RK3308) { 585 585 pdm->reset = devm_reset_control_get(&pdev->dev, "pdm-m"); 586 586 if (IS_ERR(pdm->reset))