Skip to content

Commit 7338856

Browse files
committed
Merge tag 'asoc-fix-v6.15-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v6.15 A set of small fixes, quirks and device ID additions that came in since -rc1, none of them super stand out. There's also a change to Srini's email address in MAINTAINERS.
2 parents b5458fc + e6c4618 commit 7338856

File tree

18 files changed

+277
-84
lines changed

18 files changed

+277
-84
lines changed

.mailmap

+2
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,8 @@ Simon Wunderlich <[email protected]> <[email protected]>
685685
686686
687687
Sricharan Ramabadhran <[email protected]> <[email protected]>
688+
Srinivas Kandagatla <[email protected]> <[email protected]>
689+
Srinivas Kandagatla <[email protected]> <[email protected]>
688690
689691
690692

MAINTAINERS

+4-4
Original file line numberDiff line numberDiff line change
@@ -17368,7 +17368,7 @@ T: git git://git.infradead.org/nvme.git
1736817368
F: drivers/nvme/target/
1736917369

1737017370
NVMEM FRAMEWORK
17371-
M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
17371+
M: Srinivas Kandagatla <srini@kernel.org>
1737217372
S: Maintained
1737317373
T: git git://git.kernel.org/pub/scm/linux/kernel/git/srini/nvmem.git
1737417374
F: Documentation/ABI/stable/sysfs-bus-nvmem
@@ -19573,7 +19573,7 @@ S: Supported
1957319573
F: drivers/crypto/intel/qat/
1957419574

1957519575
QCOM AUDIO (ASoC) DRIVERS
19576-
M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
19576+
M: Srinivas Kandagatla <srini@kernel.org>
1957719577
1957819578
1957919579
S: Supported
@@ -19873,7 +19873,7 @@ F: Documentation/devicetree/bindings/net/qcom,ethqos.yaml
1987319873
F: drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
1987419874

1987519875
QUALCOMM FASTRPC DRIVER
19876-
M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
19876+
M: Srinivas Kandagatla <srini@kernel.org>
1987719877
M: Amol Maheshwari <[email protected]>
1987819878
1987919879
@@ -21921,7 +21921,7 @@ S: Maintained
2192121921
F: drivers/media/rc/serial_ir.c
2192221922

2192321923
SERIAL LOW-POWER INTER-CHIP MEDIA BUS (SLIMbus)
21924-
M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
21924+
M: Srinivas Kandagatla <srini@kernel.org>
2192521925
2192621926
S: Maintained
2192721927
F: Documentation/devicetree/bindings/slimbus/

drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c

-30
Original file line numberDiff line numberDiff line change
@@ -461,36 +461,6 @@ unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *pri
461461
}
462462
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_alg_base_in_words, "FW_CS_DSP_KUNIT_TEST_UTILS");
463463

464-
/**
465-
* cs_dsp_mock_xm_header_get_fw_version_from_regmap() - Firmware version.
466-
*
467-
* @priv: Pointer to struct cs_dsp_test.
468-
*
469-
* Return: Firmware version word value.
470-
*/
471-
unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv)
472-
{
473-
unsigned int xm = cs_dsp_mock_base_addr_for_mem(priv, WMFW_ADSP2_XM);
474-
union {
475-
struct wmfw_id_hdr adsp2;
476-
struct wmfw_v3_id_hdr halo;
477-
} hdr;
478-
479-
switch (priv->dsp->type) {
480-
case WMFW_ADSP2:
481-
regmap_raw_read(priv->dsp->regmap, xm, &hdr.adsp2, sizeof(hdr.adsp2));
482-
return be32_to_cpu(hdr.adsp2.ver);
483-
case WMFW_HALO:
484-
regmap_raw_read(priv->dsp->regmap, xm, &hdr.halo, sizeof(hdr.halo));
485-
return be32_to_cpu(hdr.halo.ver);
486-
default:
487-
KUNIT_FAIL(priv->test, NULL);
488-
return 0;
489-
}
490-
}
491-
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_fw_version_from_regmap,
492-
"FW_CS_DSP_KUNIT_TEST_UTILS");
493-
494464
/**
495465
* cs_dsp_mock_xm_header_get_fw_version() - Firmware version.
496466
*

drivers/firmware/cirrus/test/cs_dsp_test_bin.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2198,7 +2198,7 @@ static int cs_dsp_bin_test_common_init(struct kunit *test, struct cs_dsp *dsp)
21982198

21992199
priv->local->bin_builder =
22002200
cs_dsp_mock_bin_init(priv, 1,
2201-
cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));
2201+
cs_dsp_mock_xm_header_get_fw_version(xm_hdr));
22022202
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->local->bin_builder);
22032203

22042204
/* We must provide a dummy wmfw to load */

drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *ds
451451

452452
local->bin_builder =
453453
cs_dsp_mock_bin_init(priv, 1,
454-
cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));
454+
cs_dsp_mock_xm_header_get_fw_version(local->xm_header));
455455
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, local->bin_builder);
456456

457457
/* Init cs_dsp */

include/linux/firmware/cirrus/cs_dsp_test_utils.h

-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ unsigned int cs_dsp_mock_num_dsp_words_to_num_packed_regs(unsigned int num_dsp_w
104104
unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *priv,
105105
unsigned int alg_id,
106106
int mem_type);
107-
unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv);
108107
unsigned int cs_dsp_mock_xm_header_get_fw_version(struct cs_dsp_mock_xm_header *header);
109108
void cs_dsp_mock_xm_header_drop_from_regmap_cache(struct cs_dsp_test *priv);
110109
int cs_dsp_mock_xm_header_write_to_regmap(struct cs_dsp_mock_xm_header *header);

sound/soc/codecs/aw88081.c

+10
Original file line numberDiff line numberDiff line change
@@ -1295,9 +1295,19 @@ static int aw88081_i2c_probe(struct i2c_client *i2c)
12951295
aw88081_dai, ARRAY_SIZE(aw88081_dai));
12961296
}
12971297

1298+
#if defined(CONFIG_OF)
1299+
static const struct of_device_id aw88081_of_match[] = {
1300+
{ .compatible = "awinic,aw88081" },
1301+
{ .compatible = "awinic,aw88083" },
1302+
{ }
1303+
};
1304+
MODULE_DEVICE_TABLE(of, aw88081_of_match);
1305+
#endif
1306+
12981307
static struct i2c_driver aw88081_i2c_driver = {
12991308
.driver = {
13001309
.name = AW88081_I2C_NAME,
1310+
.of_match_table = of_match_ptr(aw88081_of_match),
13011311
},
13021312
.probe = aw88081_i2c_probe,
13031313
.id_table = aw88081_i2c_id,

sound/soc/codecs/cs42l43-jack.c

+3
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,9 @@ static void cs42l43_clear_jack(struct cs42l43_codec *priv)
702702
CS42L43_PGA_WIDESWING_MODE_EN_MASK, 0);
703703
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CTRL,
704704
CS42L43_JACK_STEREO_CONFIG_MASK, 0);
705+
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CLAMP_CTRL,
706+
CS42L43_SMIC_HPAMP_CLAMP_DIS_FRC_MASK,
707+
CS42L43_SMIC_HPAMP_CLAMP_DIS_FRC_MASK);
705708
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
706709
CS42L43_HSDET_MODE_MASK | CS42L43_HSDET_MANUAL_MODE_MASK,
707710
0x2 << CS42L43_HSDET_MODE_SHIFT);

sound/soc/codecs/hdmi-codec.c

+19-3
Original file line numberDiff line numberDiff line change
@@ -842,12 +842,28 @@ static void print_eld_info(struct snd_info_entry *entry,
842842
static int hdmi_dai_proc_new(struct hdmi_codec_priv *hcp,
843843
struct snd_soc_dai *dai)
844844
{
845+
struct snd_soc_component *component = dai->component;
846+
struct snd_soc_card *card = component->card;
847+
struct snd_soc_dai *d;
848+
struct snd_soc_pcm_runtime *rtd;
845849
struct snd_info_entry *entry;
846850
char name[32];
847-
int err;
851+
int err, i, id = 0;
848852

849-
snprintf(name, sizeof(name), "eld#%d", dai->id);
850-
err = snd_card_proc_new(dai->component->card->snd_card, name, &entry);
853+
/*
854+
* To avoid duplicate proc entry, find its rtd and use rtd->id
855+
* instead of dai->id
856+
*/
857+
for_each_card_rtds(card, rtd) {
858+
for_each_rtd_dais(rtd, i, d)
859+
if (d == dai) {
860+
id = rtd->id;
861+
goto found;
862+
}
863+
}
864+
found:
865+
snprintf(name, sizeof(name), "eld#%d", id);
866+
err = snd_card_proc_new(card->snd_card, name, &entry);
851867
if (err < 0)
852868
return err;
853869

sound/soc/codecs/lpass-wsa-macro.c

+84-33
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@
6363
#define CDC_WSA_TX_SPKR_PROT_CLK_DISABLE 0
6464
#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_MASK GENMASK(3, 0)
6565
#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K 0
66+
#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_16K 1
67+
#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_24K 2
68+
#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_32K 3
69+
#define CDC_WSA_TX_SPKR_PROT_PCM_RATE_48K 4
6670
#define CDC_WSA_TX0_SPKR_PROT_PATH_CFG0 (0x0248)
6771
#define CDC_WSA_TX1_SPKR_PROT_PATH_CTL (0x0264)
6872
#define CDC_WSA_TX1_SPKR_PROT_PATH_CFG0 (0x0268)
@@ -407,6 +411,7 @@ struct wsa_macro {
407411
int ear_spkr_gain;
408412
int spkr_gain_offset;
409413
int spkr_mode;
414+
u32 pcm_rate_vi;
410415
int is_softclip_on[WSA_MACRO_SOFTCLIP_MAX];
411416
int softclip_clk_users[WSA_MACRO_SOFTCLIP_MAX];
412417
struct regmap *regmap;
@@ -1280,6 +1285,7 @@ static int wsa_macro_hw_params(struct snd_pcm_substream *substream,
12801285
struct snd_soc_dai *dai)
12811286
{
12821287
struct snd_soc_component *component = dai->component;
1288+
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
12831289
int ret;
12841290

12851291
switch (substream->stream) {
@@ -1291,6 +1297,11 @@ static int wsa_macro_hw_params(struct snd_pcm_substream *substream,
12911297
__func__, params_rate(params));
12921298
return ret;
12931299
}
1300+
break;
1301+
case SNDRV_PCM_STREAM_CAPTURE:
1302+
if (dai->id == WSA_MACRO_AIF_VI)
1303+
wsa->pcm_rate_vi = params_rate(params);
1304+
12941305
break;
12951306
default:
12961307
break;
@@ -1448,35 +1459,11 @@ static void wsa_macro_mclk_enable(struct wsa_macro *wsa, bool mclk_enable)
14481459
}
14491460
}
14501461

1451-
static int wsa_macro_mclk_event(struct snd_soc_dapm_widget *w,
1452-
struct snd_kcontrol *kcontrol, int event)
1462+
static void wsa_macro_enable_disable_vi_sense(struct snd_soc_component *component, bool enable,
1463+
u32 tx_reg0, u32 tx_reg1, u32 val)
14531464
{
1454-
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1455-
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
1456-
1457-
wsa_macro_mclk_enable(wsa, event == SND_SOC_DAPM_PRE_PMU);
1458-
return 0;
1459-
}
1460-
1461-
static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
1462-
struct snd_kcontrol *kcontrol,
1463-
int event)
1464-
{
1465-
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1466-
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
1467-
u32 tx_reg0, tx_reg1;
1468-
1469-
if (test_bit(WSA_MACRO_TX0, &wsa->active_ch_mask[WSA_MACRO_AIF_VI])) {
1470-
tx_reg0 = CDC_WSA_TX0_SPKR_PROT_PATH_CTL;
1471-
tx_reg1 = CDC_WSA_TX1_SPKR_PROT_PATH_CTL;
1472-
} else if (test_bit(WSA_MACRO_TX1, &wsa->active_ch_mask[WSA_MACRO_AIF_VI])) {
1473-
tx_reg0 = CDC_WSA_TX2_SPKR_PROT_PATH_CTL;
1474-
tx_reg1 = CDC_WSA_TX3_SPKR_PROT_PATH_CTL;
1475-
}
1476-
1477-
switch (event) {
1478-
case SND_SOC_DAPM_POST_PMU:
1479-
/* Enable V&I sensing */
1465+
if (enable) {
1466+
/* Enable V&I sensing */
14801467
snd_soc_component_update_bits(component, tx_reg0,
14811468
CDC_WSA_TX_SPKR_PROT_RESET_MASK,
14821469
CDC_WSA_TX_SPKR_PROT_RESET);
@@ -1485,10 +1472,10 @@ static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
14851472
CDC_WSA_TX_SPKR_PROT_RESET);
14861473
snd_soc_component_update_bits(component, tx_reg0,
14871474
CDC_WSA_TX_SPKR_PROT_PCM_RATE_MASK,
1488-
CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K);
1475+
val);
14891476
snd_soc_component_update_bits(component, tx_reg1,
14901477
CDC_WSA_TX_SPKR_PROT_PCM_RATE_MASK,
1491-
CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K);
1478+
val);
14921479
snd_soc_component_update_bits(component, tx_reg0,
14931480
CDC_WSA_TX_SPKR_PROT_CLK_EN_MASK,
14941481
CDC_WSA_TX_SPKR_PROT_CLK_ENABLE);
@@ -1501,9 +1488,7 @@ static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
15011488
snd_soc_component_update_bits(component, tx_reg1,
15021489
CDC_WSA_TX_SPKR_PROT_RESET_MASK,
15031490
CDC_WSA_TX_SPKR_PROT_NO_RESET);
1504-
break;
1505-
case SND_SOC_DAPM_POST_PMD:
1506-
/* Disable V&I sensing */
1491+
} else {
15071492
snd_soc_component_update_bits(component, tx_reg0,
15081493
CDC_WSA_TX_SPKR_PROT_RESET_MASK,
15091494
CDC_WSA_TX_SPKR_PROT_RESET);
@@ -1516,6 +1501,72 @@ static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
15161501
snd_soc_component_update_bits(component, tx_reg1,
15171502
CDC_WSA_TX_SPKR_PROT_CLK_EN_MASK,
15181503
CDC_WSA_TX_SPKR_PROT_CLK_DISABLE);
1504+
}
1505+
}
1506+
1507+
static void wsa_macro_enable_disable_vi_feedback(struct snd_soc_component *component,
1508+
bool enable, u32 rate)
1509+
{
1510+
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
1511+
1512+
if (test_bit(WSA_MACRO_TX0, &wsa->active_ch_mask[WSA_MACRO_AIF_VI]))
1513+
wsa_macro_enable_disable_vi_sense(component, enable,
1514+
CDC_WSA_TX0_SPKR_PROT_PATH_CTL,
1515+
CDC_WSA_TX1_SPKR_PROT_PATH_CTL, rate);
1516+
1517+
if (test_bit(WSA_MACRO_TX1, &wsa->active_ch_mask[WSA_MACRO_AIF_VI]))
1518+
wsa_macro_enable_disable_vi_sense(component, enable,
1519+
CDC_WSA_TX2_SPKR_PROT_PATH_CTL,
1520+
CDC_WSA_TX3_SPKR_PROT_PATH_CTL, rate);
1521+
}
1522+
1523+
static int wsa_macro_mclk_event(struct snd_soc_dapm_widget *w,
1524+
struct snd_kcontrol *kcontrol, int event)
1525+
{
1526+
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1527+
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
1528+
1529+
wsa_macro_mclk_enable(wsa, event == SND_SOC_DAPM_PRE_PMU);
1530+
return 0;
1531+
}
1532+
1533+
static int wsa_macro_enable_vi_feedback(struct snd_soc_dapm_widget *w,
1534+
struct snd_kcontrol *kcontrol,
1535+
int event)
1536+
{
1537+
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1538+
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
1539+
u32 rate_val;
1540+
1541+
switch (wsa->pcm_rate_vi) {
1542+
case 8000:
1543+
rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K;
1544+
break;
1545+
case 16000:
1546+
rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_16K;
1547+
break;
1548+
case 24000:
1549+
rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_24K;
1550+
break;
1551+
case 32000:
1552+
rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_32K;
1553+
break;
1554+
case 48000:
1555+
rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_48K;
1556+
break;
1557+
default:
1558+
rate_val = CDC_WSA_TX_SPKR_PROT_PCM_RATE_8K;
1559+
break;
1560+
}
1561+
1562+
switch (event) {
1563+
case SND_SOC_DAPM_POST_PMU:
1564+
/* Enable V&I sensing */
1565+
wsa_macro_enable_disable_vi_feedback(component, true, rate_val);
1566+
break;
1567+
case SND_SOC_DAPM_POST_PMD:
1568+
/* Disable V&I sensing */
1569+
wsa_macro_enable_disable_vi_feedback(component, false, rate_val);
15191570
break;
15201571
}
15211572

sound/soc/dwc/dwc-i2s.c

+6-7
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,10 @@ static void i2s_start(struct dw_i2s_dev *dev,
199199
else
200200
i2s_write_reg(dev->i2s_base, IRER, 1);
201201

202-
/* I2S needs to enable IRQ to make a handshake with DMAC on the JH7110 SoC */
203-
if (dev->use_pio || dev->is_jh7110)
204-
i2s_enable_irqs(dev, substream->stream, config->chan_nr);
205-
else
202+
if (!(dev->use_pio || dev->is_jh7110))
206203
i2s_enable_dma(dev, substream->stream);
207204

205+
i2s_enable_irqs(dev, substream->stream, config->chan_nr);
208206
i2s_write_reg(dev->i2s_base, CER, 1);
209207
}
210208

@@ -218,11 +216,12 @@ static void i2s_stop(struct dw_i2s_dev *dev,
218216
else
219217
i2s_write_reg(dev->i2s_base, IRER, 0);
220218

221-
if (dev->use_pio || dev->is_jh7110)
222-
i2s_disable_irqs(dev, substream->stream, 8);
223-
else
219+
if (!(dev->use_pio || dev->is_jh7110))
224220
i2s_disable_dma(dev, substream->stream);
225221

222+
i2s_disable_irqs(dev, substream->stream, 8);
223+
224+
226225
if (!dev->active) {
227226
i2s_write_reg(dev->i2s_base, CER, 0);
228227
i2s_write_reg(dev->i2s_base, IER, 0);

0 commit comments

Comments
 (0)