hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/sound/soc/codecs/wm8731.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * wm8731.c -- WM8731 ALSA SoC Audio driver
34 *
....@@ -7,10 +8,6 @@
78 * Author: Richard Purdie <richard@openedhand.com>
89 *
910 * Based on wm8753.c by Liam Girdwood
10
- *
11
- * This program is free software; you can redistribute it and/or modify
12
- * it under the terms of the GNU General Public License version 2 as
13
- * published by the Free Software Foundation.
1411 */
1512
1613 #include <linux/module.h>
....@@ -339,7 +336,7 @@
339336 {
340337 struct snd_soc_component *component = dai->component;
341338 struct wm8731_priv *wm8731 = snd_soc_component_get_drvdata(component);
342
- u16 iface = snd_soc_component_read32(component, WM8731_IFACE) & 0xfff3;
339
+ u16 iface = snd_soc_component_read(component, WM8731_IFACE) & 0xfff3;
343340 int i = get_coeff(wm8731->sysclk, params_rate(params));
344341 u16 srate = (coeff_div[i].sr << 2) |
345342 (coeff_div[i].bosr << 1) | coeff_div[i].usb;
....@@ -369,10 +366,10 @@
369366 return 0;
370367 }
371368
372
-static int wm8731_mute(struct snd_soc_dai *dai, int mute)
369
+static int wm8731_mute(struct snd_soc_dai *dai, int mute, int direction)
373370 {
374371 struct snd_soc_component *component = dai->component;
375
- u16 mute_reg = snd_soc_component_read32(component, WM8731_APDIGI) & 0xfff7;
372
+ u16 mute_reg = snd_soc_component_read(component, WM8731_APDIGI) & 0xfff7;
376373
377374 if (mute)
378375 snd_soc_component_write(component, WM8731_APDIGI, mute_reg | 0x8);
....@@ -513,7 +510,7 @@
513510 }
514511
515512 /* Clear PWROFF, gate CLKOUT, everything else as-is */
516
- reg = snd_soc_component_read32(component, WM8731_PWR) & 0xff7f;
513
+ reg = snd_soc_component_read(component, WM8731_PWR) & 0xff7f;
517514 snd_soc_component_write(component, WM8731_PWR, reg | 0x0040);
518515 break;
519516 case SND_SOC_BIAS_OFF:
....@@ -549,9 +546,10 @@
549546 static const struct snd_soc_dai_ops wm8731_dai_ops = {
550547 .startup = wm8731_startup,
551548 .hw_params = wm8731_hw_params,
552
- .digital_mute = wm8731_mute,
549
+ .mute_stream = wm8731_mute,
553550 .set_sysclk = wm8731_set_dai_sysclk,
554551 .set_fmt = wm8731_set_dai_fmt,
552
+ .no_capture_mute = 1,
555553 };
556554
557555 static struct snd_soc_dai_driver wm8731_dai = {
....@@ -604,7 +602,7 @@
604602 ret = wm8731_reset(wm8731->regmap);
605603 if (ret < 0) {
606604 dev_err(dev, "Failed to issue reset: %d\n", ret);
607
- goto err_regulator_enable;
605
+ goto err;
608606 }
609607
610608 /* Clear POWEROFF, keep everything else disabled */
....@@ -621,10 +619,7 @@
621619
622620 regcache_mark_dirty(wm8731->regmap);
623621
624
-err_regulator_enable:
625
- /* Regulators will be enabled by bias management */
626
- regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
627
-
622
+err:
628623 return ret;
629624 }
630625
....@@ -768,21 +763,27 @@
768763 ret = PTR_ERR(wm8731->regmap);
769764 dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
770765 ret);
771
- return ret;
766
+ goto err_regulator_enable;
772767 }
773768
774769 ret = wm8731_hw_init(&i2c->dev, wm8731);
775770 if (ret != 0)
776
- return ret;
771
+ goto err_regulator_enable;
777772
778773 ret = devm_snd_soc_register_component(&i2c->dev,
779774 &soc_component_dev_wm8731, &wm8731_dai, 1);
780775 if (ret != 0) {
781776 dev_err(&i2c->dev, "Failed to register CODEC: %d\n", ret);
782
- return ret;
777
+ goto err_regulator_enable;
783778 }
784779
785780 return 0;
781
+
782
+err_regulator_enable:
783
+ /* Regulators will be enabled by bias management */
784
+ regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
785
+
786
+ return ret;
786787 }
787788
788789 static int wm8731_i2c_remove(struct i2c_client *client)