aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/rt5659.c31
-rw-r--r--sound/soc/codecs/rt5659.h1
-rw-r--r--sound/soc/codecs/sigmadsp-i2c.c5
-rw-r--r--sound/soc/codecs/wm5110.c1
-rw-r--r--sound/soc/codecs/wm8960.c40
-rw-r--r--sound/soc/generic/simple-card.c2
6 files changed, 41 insertions, 39 deletions
diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c
index 820d8fa62b5e..fb8ea05c0de1 100644
--- a/sound/soc/codecs/rt5659.c
+++ b/sound/soc/codecs/rt5659.c
@@ -3985,7 +3985,6 @@ static int rt5659_i2c_probe(struct i2c_client *i2c,
3985 if (rt5659 == NULL) 3985 if (rt5659 == NULL)
3986 return -ENOMEM; 3986 return -ENOMEM;
3987 3987
3988 rt5659->i2c = i2c;
3989 i2c_set_clientdata(i2c, rt5659); 3988 i2c_set_clientdata(i2c, rt5659);
3990 3989
3991 if (pdata) 3990 if (pdata)
@@ -4157,24 +4156,17 @@ static int rt5659_i2c_probe(struct i2c_client *i2c,
4157 4156
4158 INIT_DELAYED_WORK(&rt5659->jack_detect_work, rt5659_jack_detect_work); 4157 INIT_DELAYED_WORK(&rt5659->jack_detect_work, rt5659_jack_detect_work);
4159 4158
4160 if (rt5659->i2c->irq) { 4159 if (i2c->irq) {
4161 ret = request_threaded_irq(rt5659->i2c->irq, NULL, rt5659_irq, 4160 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL,
4162 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING 4161 rt5659_irq, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING
4163 | IRQF_ONESHOT, "rt5659", rt5659); 4162 | IRQF_ONESHOT, "rt5659", rt5659);
4164 if (ret) 4163 if (ret)
4165 dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret); 4164 dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret);
4166 4165
4167 } 4166 }
4168 4167
4169 ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5659, 4168 return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5659,
4170 rt5659_dai, ARRAY_SIZE(rt5659_dai)); 4169 rt5659_dai, ARRAY_SIZE(rt5659_dai));
4171
4172 if (ret) {
4173 if (rt5659->i2c->irq)
4174 free_irq(rt5659->i2c->irq, rt5659);
4175 }
4176
4177 return 0;
4178} 4170}
4179 4171
4180static int rt5659_i2c_remove(struct i2c_client *i2c) 4172static int rt5659_i2c_remove(struct i2c_client *i2c)
@@ -4191,24 +4183,29 @@ void rt5659_i2c_shutdown(struct i2c_client *client)
4191 regmap_write(rt5659->regmap, RT5659_RESET, 0); 4183 regmap_write(rt5659->regmap, RT5659_RESET, 0);
4192} 4184}
4193 4185
4186#ifdef CONFIG_OF
4194static const struct of_device_id rt5659_of_match[] = { 4187static const struct of_device_id rt5659_of_match[] = {
4195 { .compatible = "realtek,rt5658", }, 4188 { .compatible = "realtek,rt5658", },
4196 { .compatible = "realtek,rt5659", }, 4189 { .compatible = "realtek,rt5659", },
4197 {}, 4190 { },
4198}; 4191};
4192MODULE_DEVICE_TABLE(of, rt5659_of_match);
4193#endif
4199 4194
4195#ifdef CONFIG_ACPI
4200static struct acpi_device_id rt5659_acpi_match[] = { 4196static struct acpi_device_id rt5659_acpi_match[] = {
4201 { "10EC5658", 0}, 4197 { "10EC5658", 0, },
4202 { "10EC5659", 0}, 4198 { "10EC5659", 0, },
4203 { }, 4199 { },
4204}; 4200};
4205MODULE_DEVICE_TABLE(acpi, rt5659_acpi_match); 4201MODULE_DEVICE_TABLE(acpi, rt5659_acpi_match);
4202#endif
4206 4203
4207struct i2c_driver rt5659_i2c_driver = { 4204struct i2c_driver rt5659_i2c_driver = {
4208 .driver = { 4205 .driver = {
4209 .name = "rt5659", 4206 .name = "rt5659",
4210 .owner = THIS_MODULE, 4207 .owner = THIS_MODULE,
4211 .of_match_table = rt5659_of_match, 4208 .of_match_table = of_match_ptr(rt5659_of_match),
4212 .acpi_match_table = ACPI_PTR(rt5659_acpi_match), 4209 .acpi_match_table = ACPI_PTR(rt5659_acpi_match),
4213 }, 4210 },
4214 .probe = rt5659_i2c_probe, 4211 .probe = rt5659_i2c_probe,
diff --git a/sound/soc/codecs/rt5659.h b/sound/soc/codecs/rt5659.h
index 8f07ee903eaa..d31c9e5bcec8 100644
--- a/sound/soc/codecs/rt5659.h
+++ b/sound/soc/codecs/rt5659.h
@@ -1792,7 +1792,6 @@ struct rt5659_priv {
1792 struct snd_soc_codec *codec; 1792 struct snd_soc_codec *codec;
1793 struct rt5659_platform_data pdata; 1793 struct rt5659_platform_data pdata;
1794 struct regmap *regmap; 1794 struct regmap *regmap;
1795 struct i2c_client *i2c;
1796 struct gpio_desc *gpiod_ldo1_en; 1795 struct gpio_desc *gpiod_ldo1_en;
1797 struct gpio_desc *gpiod_reset; 1796 struct gpio_desc *gpiod_reset;
1798 struct snd_soc_jack *hs_jack; 1797 struct snd_soc_jack *hs_jack;
diff --git a/sound/soc/codecs/sigmadsp-i2c.c b/sound/soc/codecs/sigmadsp-i2c.c
index 21ca3a5e9f66..d374c18d4db7 100644
--- a/sound/soc/codecs/sigmadsp-i2c.c
+++ b/sound/soc/codecs/sigmadsp-i2c.c
@@ -31,7 +31,10 @@ static int sigmadsp_write_i2c(void *control_data,
31 31
32 kfree(buf); 32 kfree(buf);
33 33
34 return ret; 34 if (ret < 0)
35 return ret;
36
37 return 0;
35} 38}
36 39
37static int sigmadsp_read_i2c(void *control_data, 40static int sigmadsp_read_i2c(void *control_data,
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index 6088d30962a9..97c0f1e23886 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -2382,6 +2382,7 @@ error:
2382 2382
2383static int wm5110_remove(struct platform_device *pdev) 2383static int wm5110_remove(struct platform_device *pdev)
2384{ 2384{
2385 snd_soc_unregister_platform(&pdev->dev);
2385 snd_soc_unregister_codec(&pdev->dev); 2386 snd_soc_unregister_codec(&pdev->dev);
2386 pm_runtime_disable(&pdev->dev); 2387 pm_runtime_disable(&pdev->dev);
2387 2388
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index ff237726775a..d7f444f87460 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -240,13 +240,13 @@ SOC_DOUBLE_R("Capture Volume ZC Switch", WM8960_LINVOL, WM8960_RINVOL,
240SOC_DOUBLE_R("Capture Switch", WM8960_LINVOL, WM8960_RINVOL, 240SOC_DOUBLE_R("Capture Switch", WM8960_LINVOL, WM8960_RINVOL,
241 7, 1, 1), 241 7, 1, 1),
242 242
243SOC_SINGLE_TLV("Right Input Boost Mixer RINPUT3 Volume", 243SOC_SINGLE_TLV("Left Input Boost Mixer LINPUT3 Volume",
244 WM8960_INBMIX1, 4, 7, 0, lineinboost_tlv), 244 WM8960_INBMIX1, 4, 7, 0, lineinboost_tlv),
245SOC_SINGLE_TLV("Right Input Boost Mixer RINPUT2 Volume", 245SOC_SINGLE_TLV("Left Input Boost Mixer LINPUT2 Volume",
246 WM8960_INBMIX1, 1, 7, 0, lineinboost_tlv), 246 WM8960_INBMIX1, 1, 7, 0, lineinboost_tlv),
247SOC_SINGLE_TLV("Left Input Boost Mixer LINPUT3 Volume", 247SOC_SINGLE_TLV("Right Input Boost Mixer RINPUT3 Volume",
248 WM8960_INBMIX2, 4, 7, 0, lineinboost_tlv), 248 WM8960_INBMIX2, 4, 7, 0, lineinboost_tlv),
249SOC_SINGLE_TLV("Left Input Boost Mixer LINPUT2 Volume", 249SOC_SINGLE_TLV("Right Input Boost Mixer RINPUT2 Volume",
250 WM8960_INBMIX2, 1, 7, 0, lineinboost_tlv), 250 WM8960_INBMIX2, 1, 7, 0, lineinboost_tlv),
251SOC_SINGLE_TLV("Right Input Boost Mixer RINPUT1 Volume", 251SOC_SINGLE_TLV("Right Input Boost Mixer RINPUT1 Volume",
252 WM8960_RINPATH, 4, 3, 0, micboost_tlv), 252 WM8960_RINPATH, 4, 3, 0, micboost_tlv),
@@ -643,29 +643,31 @@ static int wm8960_configure_clocking(struct snd_soc_codec *codec)
643 return -EINVAL; 643 return -EINVAL;
644 } 644 }
645 645
646 /* check if the sysclk frequency is available. */ 646 if (wm8960->clk_id != WM8960_SYSCLK_PLL) {
647 for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) { 647 /* check if the sysclk frequency is available. */
648 if (sysclk_divs[i] == -1) 648 for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
649 continue; 649 if (sysclk_divs[i] == -1)
650 sysclk = freq_out / sysclk_divs[i]; 650 continue;
651 for (j = 0; j < ARRAY_SIZE(dac_divs); ++j) { 651 sysclk = freq_out / sysclk_divs[i];
652 if (sysclk == dac_divs[j] * lrclk) { 652 for (j = 0; j < ARRAY_SIZE(dac_divs); ++j) {
653 if (sysclk != dac_divs[j] * lrclk)
654 continue;
653 for (k = 0; k < ARRAY_SIZE(bclk_divs); ++k) 655 for (k = 0; k < ARRAY_SIZE(bclk_divs); ++k)
654 if (sysclk == bclk * bclk_divs[k] / 10) 656 if (sysclk == bclk * bclk_divs[k] / 10)
655 break; 657 break;
656 if (k != ARRAY_SIZE(bclk_divs)) 658 if (k != ARRAY_SIZE(bclk_divs))
657 break; 659 break;
658 } 660 }
661 if (j != ARRAY_SIZE(dac_divs))
662 break;
659 } 663 }
660 if (j != ARRAY_SIZE(dac_divs))
661 break;
662 }
663 664
664 if (i != ARRAY_SIZE(sysclk_divs)) { 665 if (i != ARRAY_SIZE(sysclk_divs)) {
665 goto configure_clock; 666 goto configure_clock;
666 } else if (wm8960->clk_id != WM8960_SYSCLK_AUTO) { 667 } else if (wm8960->clk_id != WM8960_SYSCLK_AUTO) {
667 dev_err(codec->dev, "failed to configure clock\n"); 668 dev_err(codec->dev, "failed to configure clock\n");
668 return -EINVAL; 669 return -EINVAL;
670 }
669 } 671 }
670 /* get a available pll out frequency and set pll */ 672 /* get a available pll out frequency and set pll */
671 for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) { 673 for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 1ded8811598e..2389ab47e25f 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -99,7 +99,7 @@ static int asoc_simple_card_hw_params(struct snd_pcm_substream *substream,
99 if (ret && ret != -ENOTSUPP) 99 if (ret && ret != -ENOTSUPP)
100 goto err; 100 goto err;
101 } 101 }
102 102 return 0;
103err: 103err:
104 return ret; 104 return ret;
105} 105}