forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/sound/soc/codecs/wm5110.c
....@@ -1,13 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * wm5110.c -- WM5110 ALSA SoC Audio driver
34 *
45 * Copyright 2012 Wolfson Microelectronics plc
56 *
67 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License version 2 as
10
- * published by the Free Software Foundation.
118 */
129
1310 #include <linux/module.h>
....@@ -211,7 +208,9 @@
211208
212209 v = (v & ARIZONA_SYSCLK_FREQ_MASK) >> ARIZONA_SYSCLK_FREQ_SHIFT;
213210
214
- return wm_adsp2_early_event(w, kcontrol, event, v);
211
+ wm_adsp2_set_dspclk(w, v);
212
+
213
+ return wm_adsp_early_event(w, kcontrol, event);
215214 }
216215
217216 static const struct reg_sequence wm5110_no_dre_left_enable[] = {
....@@ -291,7 +290,7 @@
291290 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
292291 struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
293292 struct arizona *arizona = priv->arizona;
294
- unsigned int val = snd_soc_component_read32(component, ARIZONA_DRE_ENABLE);
293
+ unsigned int val = snd_soc_component_read(component, ARIZONA_DRE_ENABLE);
295294 const struct reg_sequence *wseq;
296295 int nregs;
297296
....@@ -327,7 +326,7 @@
327326 {
328327 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
329328 struct arizona_priv *priv = snd_soc_component_get_drvdata(component);
330
- unsigned int val = snd_soc_component_read32(component, ARIZONA_DRE_ENABLE);
329
+ unsigned int val = snd_soc_component_read(component, ARIZONA_DRE_ENABLE);
331330
332331 switch (w->shift) {
333332 case ARIZONA_OUT1L_ENA_SHIFT:
....@@ -414,6 +413,7 @@
414413 unsigned int rnew = (!!ucontrol->value.integer.value[1]) << mc->rshift;
415414 unsigned int lold, rold;
416415 unsigned int lena, rena;
416
+ bool change = false;
417417 int ret;
418418
419419 snd_soc_dapm_mutex_lock(dapm);
....@@ -441,8 +441,8 @@
441441 goto err;
442442 }
443443
444
- ret = regmap_update_bits(arizona->regmap, ARIZONA_DRE_ENABLE,
445
- mask, lnew | rnew);
444
+ ret = regmap_update_bits_check(arizona->regmap, ARIZONA_DRE_ENABLE,
445
+ mask, lnew | rnew, &change);
446446 if (ret) {
447447 dev_err(arizona->dev, "Failed to set DRE: %d\n", ret);
448448 goto err;
....@@ -454,6 +454,9 @@
454454
455455 if (!rnew && rold)
456456 wm5110_clear_pga_volume(arizona, mc->rshift);
457
+
458
+ if (change)
459
+ ret = 1;
457460
458461 err:
459462 snd_soc_dapm_mutex_unlock(dapm);
....@@ -525,7 +528,7 @@
525528 wm5110->in_post_pending++;
526529 return 0;
527530 case SND_SOC_DAPM_PRE_PMU:
528
- wm5110->in_pga_cache[w->shift] = snd_soc_component_read32(component, reg);
531
+ wm5110->in_pga_cache[w->shift] = snd_soc_component_read(component, reg);
529532
530533 snd_soc_component_update_bits(component, reg, mask,
531534 0x40 << ARIZONA_IN1L_PGA_VOL_SHIFT);
....@@ -1348,122 +1351,122 @@
13481351
13491352 SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0,
13501353 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX1_ENA_SHIFT, 0),
1351
-SND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 0,
1354
+SND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 1,
13521355 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX2_ENA_SHIFT, 0),
1353
-SND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 0,
1356
+SND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 2,
13541357 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX3_ENA_SHIFT, 0),
1355
-SND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 0,
1358
+SND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 3,
13561359 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX4_ENA_SHIFT, 0),
1357
-SND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 0,
1360
+SND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 4,
13581361 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX5_ENA_SHIFT, 0),
1359
-SND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 0,
1362
+SND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 5,
13601363 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX6_ENA_SHIFT, 0),
1361
-SND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 0,
1364
+SND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 6,
13621365 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX7_ENA_SHIFT, 0),
1363
-SND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 0,
1366
+SND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 7,
13641367 ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX8_ENA_SHIFT, 0),
13651368
13661369 SND_SOC_DAPM_AIF_IN("AIF1RX1", NULL, 0,
13671370 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX1_ENA_SHIFT, 0),
1368
-SND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 0,
1371
+SND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 1,
13691372 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX2_ENA_SHIFT, 0),
1370
-SND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 0,
1373
+SND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 2,
13711374 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX3_ENA_SHIFT, 0),
1372
-SND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 0,
1375
+SND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 3,
13731376 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX4_ENA_SHIFT, 0),
1374
-SND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 0,
1377
+SND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 4,
13751378 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX5_ENA_SHIFT, 0),
1376
-SND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 0,
1379
+SND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 5,
13771380 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX6_ENA_SHIFT, 0),
1378
-SND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 0,
1381
+SND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 6,
13791382 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX7_ENA_SHIFT, 0),
1380
-SND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 0,
1383
+SND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 7,
13811384 ARIZONA_AIF1_RX_ENABLES, ARIZONA_AIF1RX8_ENA_SHIFT, 0),
13821385
13831386 SND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0,
13841387 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX1_ENA_SHIFT, 0),
1385
-SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 0,
1388
+SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 1,
13861389 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX2_ENA_SHIFT, 0),
1387
-SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 0,
1390
+SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 2,
13881391 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX3_ENA_SHIFT, 0),
1389
-SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 0,
1392
+SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 3,
13901393 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX4_ENA_SHIFT, 0),
1391
-SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 0,
1394
+SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 4,
13921395 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX5_ENA_SHIFT, 0),
1393
-SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 0,
1396
+SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 5,
13941397 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX6_ENA_SHIFT, 0),
13951398
13961399 SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0,
13971400 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX1_ENA_SHIFT, 0),
1398
-SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0,
1401
+SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 1,
13991402 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0),
1400
-SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 0,
1403
+SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 2,
14011404 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX3_ENA_SHIFT, 0),
1402
-SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 0,
1405
+SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 3,
14031406 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX4_ENA_SHIFT, 0),
1404
-SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 0,
1407
+SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 4,
14051408 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX5_ENA_SHIFT, 0),
1406
-SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 0,
1409
+SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 5,
14071410 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX6_ENA_SHIFT, 0),
14081411
14091412 SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0,
14101413 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14111414 ARIZONA_SLIMRX1_ENA_SHIFT, 0),
1412
-SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 0,
1415
+SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 1,
14131416 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14141417 ARIZONA_SLIMRX2_ENA_SHIFT, 0),
1415
-SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 0,
1418
+SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 2,
14161419 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14171420 ARIZONA_SLIMRX3_ENA_SHIFT, 0),
1418
-SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 0,
1421
+SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 3,
14191422 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14201423 ARIZONA_SLIMRX4_ENA_SHIFT, 0),
1421
-SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 0,
1424
+SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 4,
14221425 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14231426 ARIZONA_SLIMRX5_ENA_SHIFT, 0),
1424
-SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 0,
1427
+SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 5,
14251428 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14261429 ARIZONA_SLIMRX6_ENA_SHIFT, 0),
1427
-SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 0,
1430
+SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 6,
14281431 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14291432 ARIZONA_SLIMRX7_ENA_SHIFT, 0),
1430
-SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 0,
1433
+SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 7,
14311434 ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
14321435 ARIZONA_SLIMRX8_ENA_SHIFT, 0),
14331436
14341437 SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,
14351438 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14361439 ARIZONA_SLIMTX1_ENA_SHIFT, 0),
1437
-SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 0,
1440
+SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 1,
14381441 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14391442 ARIZONA_SLIMTX2_ENA_SHIFT, 0),
1440
-SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 0,
1443
+SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 2,
14411444 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14421445 ARIZONA_SLIMTX3_ENA_SHIFT, 0),
1443
-SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 0,
1446
+SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 3,
14441447 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14451448 ARIZONA_SLIMTX4_ENA_SHIFT, 0),
1446
-SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 0,
1449
+SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 4,
14471450 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14481451 ARIZONA_SLIMTX5_ENA_SHIFT, 0),
1449
-SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 0,
1452
+SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 5,
14501453 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14511454 ARIZONA_SLIMTX6_ENA_SHIFT, 0),
1452
-SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 0,
1455
+SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 6,
14531456 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14541457 ARIZONA_SLIMTX7_ENA_SHIFT, 0),
1455
-SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 0,
1458
+SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 7,
14561459 ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
14571460 ARIZONA_SLIMTX8_ENA_SHIFT, 0),
14581461
14591462 SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0,
14601463 ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX1_ENA_SHIFT, 0),
1461
-SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 0,
1464
+SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 1,
14621465 ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX2_ENA_SHIFT, 0),
14631466
14641467 SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,
14651468 ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX1_ENA_SHIFT, 0),
1466
-SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0,
1469
+SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 1,
14671470 ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0),
14681471
14691472 SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
....@@ -2238,22 +2241,22 @@
22382241 },
22392242 };
22402243
2241
-static int wm5110_open(struct snd_compr_stream *stream)
2244
+static int wm5110_open(struct snd_soc_component *component,
2245
+ struct snd_compr_stream *stream)
22422246 {
22432247 struct snd_soc_pcm_runtime *rtd = stream->private_data;
2244
- struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
22452248 struct wm5110_priv *priv = snd_soc_component_get_drvdata(component);
22462249 struct arizona *arizona = priv->core.arizona;
22472250 int n_adsp;
22482251
2249
- if (strcmp(rtd->codec_dai->name, "wm5110-dsp-voicectrl") == 0) {
2252
+ if (strcmp(asoc_rtd_to_codec(rtd, 0)->name, "wm5110-dsp-voicectrl") == 0) {
22502253 n_adsp = 2;
2251
- } else if (strcmp(rtd->codec_dai->name, "wm5110-dsp-trace") == 0) {
2254
+ } else if (strcmp(asoc_rtd_to_codec(rtd, 0)->name, "wm5110-dsp-trace") == 0) {
22522255 n_adsp = 0;
22532256 } else {
22542257 dev_err(arizona->dev,
22552258 "No suitable compressed stream for DAI '%s'\n",
2256
- rtd->codec_dai->name);
2259
+ asoc_rtd_to_codec(rtd, 0)->name);
22572260 return -EINVAL;
22582261 }
22592262
....@@ -2356,7 +2359,7 @@
23562359 ARIZONA_DAC_DIGITAL_VOLUME_6R,
23572360 };
23582361
2359
-static struct snd_compr_ops wm5110_compr_ops = {
2362
+static struct snd_compress_ops wm5110_compress_ops = {
23602363 .open = wm5110_open,
23612364 .free = wm_adsp_compr_free,
23622365 .set_params = wm_adsp_compr_set_params,
....@@ -2372,7 +2375,7 @@
23722375 .set_sysclk = arizona_set_sysclk,
23732376 .set_pll = wm5110_set_fll,
23742377 .name = DRV_NAME,
2375
- .compr_ops = &wm5110_compr_ops,
2378
+ .compress_ops = &wm5110_compress_ops,
23762379 .controls = wm5110_snd_controls,
23772380 .num_controls = ARRAY_SIZE(wm5110_snd_controls),
23782381 .dapm_widgets = wm5110_dapm_widgets,