aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2012-01-11 09:30:53 -0500
committerTakashi Iwai <tiwai@suse.de>2012-01-11 09:30:53 -0500
commitd6b24507972341e5babdca8e25448325c9137232 (patch)
treeadce394113344a2ebff8ad61c2cec4a8ea10689b /sound/soc
parent7a748e4318909e680b3900e3b97ea42a92724c68 (diff)
parente48b46ba169181dc88ea48e31dcb4afcf8778397 (diff)
Merge branch 'for-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc into topic/asoc
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/codecs/cx20442.c48
-rw-r--r--sound/soc/codecs/twl6040.c23
-rw-r--r--sound/soc/codecs/twl6040.h1
-rw-r--r--sound/soc/omap/am3517evm.c1
-rw-r--r--sound/soc/omap/ams-delta.c9
-rw-r--r--sound/soc/omap/igep0020.c1
-rw-r--r--sound/soc/omap/n810.c1
-rw-r--r--sound/soc/omap/omap3evm.c1
-rw-r--r--sound/soc/omap/omap3pandora.c1
-rw-r--r--sound/soc/omap/omap4-hdmi-card.c1
-rw-r--r--sound/soc/omap/osk5912.c1
-rw-r--r--sound/soc/omap/overo.c1
-rw-r--r--sound/soc/omap/rx51.c1
-rw-r--r--sound/soc/omap/sdp3430.c1
-rw-r--r--sound/soc/omap/sdp4430.c1
-rw-r--r--sound/soc/omap/zoom2.c1
16 files changed, 86 insertions, 7 deletions
diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c
index ae55e31bfc72..d5fd00a64748 100644
--- a/sound/soc/codecs/cx20442.c
+++ b/sound/soc/codecs/cx20442.c
@@ -16,6 +16,7 @@
16#include <linux/tty.h> 16#include <linux/tty.h>
17#include <linux/slab.h> 17#include <linux/slab.h>
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/regulator/consumer.h>
19 20
20#include <sound/core.h> 21#include <sound/core.h>
21#include <sound/initval.h> 22#include <sound/initval.h>
@@ -25,8 +26,8 @@
25 26
26 27
27struct cx20442_priv { 28struct cx20442_priv {
28 enum snd_soc_control_type control_type;
29 void *control_data; 29 void *control_data;
30 struct regulator *por;
30}; 31};
31 32
32#define CX20442_PM 0x0 33#define CX20442_PM 0x0
@@ -324,6 +325,38 @@ static struct snd_soc_dai_driver cx20442_dai = {
324 }, 325 },
325}; 326};
326 327
328static int cx20442_set_bias_level(struct snd_soc_codec *codec,
329 enum snd_soc_bias_level level)
330{
331 struct cx20442_priv *cx20442 = snd_soc_codec_get_drvdata(codec);
332 int err = 0;
333
334 switch (level) {
335 case SND_SOC_BIAS_PREPARE:
336 if (codec->dapm.bias_level != SND_SOC_BIAS_STANDBY)
337 break;
338 if (IS_ERR(cx20442->por))
339 err = PTR_ERR(cx20442->por);
340 else
341 err = regulator_enable(cx20442->por);
342 break;
343 case SND_SOC_BIAS_STANDBY:
344 if (codec->dapm.bias_level != SND_SOC_BIAS_PREPARE)
345 break;
346 if (IS_ERR(cx20442->por))
347 err = PTR_ERR(cx20442->por);
348 else
349 err = regulator_disable(cx20442->por);
350 break;
351 default:
352 break;
353 }
354 if (!err)
355 codec->dapm.bias_level = level;
356
357 return err;
358}
359
327static int cx20442_codec_probe(struct snd_soc_codec *codec) 360static int cx20442_codec_probe(struct snd_soc_codec *codec)
328{ 361{
329 struct cx20442_priv *cx20442; 362 struct cx20442_priv *cx20442;
@@ -331,9 +364,13 @@ static int cx20442_codec_probe(struct snd_soc_codec *codec)
331 cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL); 364 cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL);
332 if (cx20442 == NULL) 365 if (cx20442 == NULL)
333 return -ENOMEM; 366 return -ENOMEM;
334 snd_soc_codec_set_drvdata(codec, cx20442);
335 367
368 cx20442->por = regulator_get(codec->dev, "POR");
369 if (IS_ERR(cx20442->por))
370 dev_warn(codec->dev, "failed to get the regulator");
336 cx20442->control_data = NULL; 371 cx20442->control_data = NULL;
372
373 snd_soc_codec_set_drvdata(codec, cx20442);
337 codec->hw_write = NULL; 374 codec->hw_write = NULL;
338 codec->card->pop_time = 0; 375 codec->card->pop_time = 0;
339 376
@@ -350,6 +387,12 @@ static int cx20442_codec_remove(struct snd_soc_codec *codec)
350 tty_hangup(tty); 387 tty_hangup(tty);
351 } 388 }
352 389
390 if (!IS_ERR(cx20442->por)) {
391 /* should be already in STANDBY, hence disabled */
392 regulator_put(cx20442->por);
393 }
394
395 snd_soc_codec_set_drvdata(codec, NULL);
353 kfree(cx20442); 396 kfree(cx20442);
354 return 0; 397 return 0;
355} 398}
@@ -359,6 +402,7 @@ static const u8 cx20442_reg;
359static struct snd_soc_codec_driver cx20442_codec_dev = { 402static struct snd_soc_codec_driver cx20442_codec_dev = {
360 .probe = cx20442_codec_probe, 403 .probe = cx20442_codec_probe,
361 .remove = cx20442_codec_remove, 404 .remove = cx20442_codec_remove,
405 .set_bias_level = cx20442_set_bias_level,
362 .reg_cache_default = &cx20442_reg, 406 .reg_cache_default = &cx20442_reg,
363 .reg_cache_size = 1, 407 .reg_cache_size = 1,
364 .reg_word_size = sizeof(u8), 408 .reg_word_size = sizeof(u8),
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 3376e6fad2a2..5b9c79b6f65e 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -33,6 +33,7 @@
33#include <sound/pcm.h> 33#include <sound/pcm.h>
34#include <sound/pcm_params.h> 34#include <sound/pcm_params.h>
35#include <sound/soc.h> 35#include <sound/soc.h>
36#include <sound/soc-dapm.h>
36#include <sound/initval.h> 37#include <sound/initval.h>
37#include <sound/tlv.h> 38#include <sound/tlv.h>
38 39
@@ -1012,6 +1013,28 @@ static int twl6040_pll_put_enum(struct snd_kcontrol *kcontrol,
1012 return 0; 1013 return 0;
1013} 1014}
1014 1015
1016int twl6040_get_dl1_gain(struct snd_soc_codec *codec)
1017{
1018 struct snd_soc_dapm_context *dapm = &codec->dapm;
1019
1020 if (snd_soc_dapm_get_pin_status(dapm, "EP"))
1021 return -1; /* -1dB */
1022
1023 if (snd_soc_dapm_get_pin_status(dapm, "HSOR") ||
1024 snd_soc_dapm_get_pin_status(dapm, "HSOL")) {
1025
1026 u8 val = snd_soc_read(codec, TWL6040_REG_HSLCTL);
1027 if (val & TWL6040_HSDACMODE)
1028 /* HSDACL in LP mode */
1029 return -8; /* -8dB */
1030 else
1031 /* HSDACL in HP mode */
1032 return -1; /* -1dB */
1033 }
1034 return 0; /* 0dB */
1035}
1036EXPORT_SYMBOL_GPL(twl6040_get_dl1_gain);
1037
1015int twl6040_get_clk_id(struct snd_soc_codec *codec) 1038int twl6040_get_clk_id(struct snd_soc_codec *codec)
1016{ 1039{
1017 struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec); 1040 struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
diff --git a/sound/soc/codecs/twl6040.h b/sound/soc/codecs/twl6040.h
index a83277bdb851..ef273f1fac2f 100644
--- a/sound/soc/codecs/twl6040.h
+++ b/sound/soc/codecs/twl6040.h
@@ -34,6 +34,7 @@ enum twl6040_trim {
34#define TWL6040_HSF_TRIM_LEFT(x) (x & 0x0f) 34#define TWL6040_HSF_TRIM_LEFT(x) (x & 0x0f)
35#define TWL6040_HSF_TRIM_RIGHT(x) ((x >> 4) & 0x0f) 35#define TWL6040_HSF_TRIM_RIGHT(x) ((x >> 4) & 0x0f)
36 36
37int twl6040_get_dl1_gain(struct snd_soc_codec *codec);
37void twl6040_hs_jack_detect(struct snd_soc_codec *codec, 38void twl6040_hs_jack_detect(struct snd_soc_codec *codec,
38 struct snd_soc_jack *jack, int report); 39 struct snd_soc_jack *jack, int report);
39int twl6040_get_clk_id(struct snd_soc_codec *codec); 40int twl6040_get_clk_id(struct snd_soc_codec *codec);
diff --git a/sound/soc/omap/am3517evm.c b/sound/soc/omap/am3517evm.c
index c1cd4a0cbe9e..add4866d7e67 100644
--- a/sound/soc/omap/am3517evm.c
+++ b/sound/soc/omap/am3517evm.c
@@ -107,6 +107,7 @@ static struct snd_soc_dai_link am3517evm_dai = {
107/* Audio machine driver */ 107/* Audio machine driver */
108static struct snd_soc_card snd_soc_am3517evm = { 108static struct snd_soc_card snd_soc_am3517evm = {
109 .name = "am3517evm", 109 .name = "am3517evm",
110 .owner = THIS_MODULE,
110 .dai_link = &am3517evm_dai, 111 .dai_link = &am3517evm_dai,
111 .num_links = 1, 112 .num_links = 1,
112 113
diff --git a/sound/soc/omap/ams-delta.c b/sound/soc/omap/ams-delta.c
index a04a4338fdac..a67f4370bc9f 100644
--- a/sound/soc/omap/ams-delta.c
+++ b/sound/soc/omap/ams-delta.c
@@ -431,22 +431,20 @@ static int ams_delta_set_bias_level(struct snd_soc_card *card,
431 struct snd_soc_dapm_context *dapm, 431 struct snd_soc_dapm_context *dapm,
432 enum snd_soc_bias_level level) 432 enum snd_soc_bias_level level)
433{ 433{
434 struct snd_soc_codec *codec = card->rtd->codec;
435
436 switch (level) { 434 switch (level) {
437 case SND_SOC_BIAS_ON: 435 case SND_SOC_BIAS_ON:
438 case SND_SOC_BIAS_PREPARE: 436 case SND_SOC_BIAS_PREPARE:
439 case SND_SOC_BIAS_STANDBY: 437 case SND_SOC_BIAS_STANDBY:
440 if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) 438 if (card->dapm.bias_level == SND_SOC_BIAS_OFF)
441 ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, 439 ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET,
442 AMS_DELTA_LATCH2_MODEM_NRESET); 440 AMS_DELTA_LATCH2_MODEM_NRESET);
443 break; 441 break;
444 case SND_SOC_BIAS_OFF: 442 case SND_SOC_BIAS_OFF:
445 if (codec->dapm.bias_level != SND_SOC_BIAS_OFF) 443 if (card->dapm.bias_level != SND_SOC_BIAS_OFF)
446 ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET, 444 ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET,
447 0); 445 0);
448 } 446 }
449 codec->dapm.bias_level = level; 447 card->dapm.bias_level = level;
450 448
451 return 0; 449 return 0;
452} 450}
@@ -597,6 +595,7 @@ static struct snd_soc_dai_link ams_delta_dai_link = {
597/* Audio card driver */ 595/* Audio card driver */
598static struct snd_soc_card ams_delta_audio_card = { 596static struct snd_soc_card ams_delta_audio_card = {
599 .name = "AMS_DELTA", 597 .name = "AMS_DELTA",
598 .owner = THIS_MODULE,
600 .dai_link = &ams_delta_dai_link, 599 .dai_link = &ams_delta_dai_link,
601 .num_links = 1, 600 .num_links = 1,
602 .set_bias_level = ams_delta_set_bias_level, 601 .set_bias_level = ams_delta_set_bias_level,
diff --git a/sound/soc/omap/igep0020.c b/sound/soc/omap/igep0020.c
index 591fbf8f7cd9..ccae58a1339c 100644
--- a/sound/soc/omap/igep0020.c
+++ b/sound/soc/omap/igep0020.c
@@ -72,6 +72,7 @@ static struct snd_soc_dai_link igep2_dai = {
72/* Audio machine driver */ 72/* Audio machine driver */
73static struct snd_soc_card snd_soc_card_igep2 = { 73static struct snd_soc_card snd_soc_card_igep2 = {
74 .name = "igep2", 74 .name = "igep2",
75 .owner = THIS_MODULE,
75 .dai_link = &igep2_dai, 76 .dai_link = &igep2_dai,
76 .num_links = 1, 77 .num_links = 1,
77}; 78};
diff --git a/sound/soc/omap/n810.c b/sound/soc/omap/n810.c
index fc6209b3f20c..597be412f1e4 100644
--- a/sound/soc/omap/n810.c
+++ b/sound/soc/omap/n810.c
@@ -289,6 +289,7 @@ static struct snd_soc_dai_link n810_dai = {
289/* Audio machine driver */ 289/* Audio machine driver */
290static struct snd_soc_card snd_soc_n810 = { 290static struct snd_soc_card snd_soc_n810 = {
291 .name = "N810", 291 .name = "N810",
292 .owner = THIS_MODULE,
292 .dai_link = &n810_dai, 293 .dai_link = &n810_dai,
293 .num_links = 1, 294 .num_links = 1,
294 295
diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c
index 68578959e4aa..071fcb09b8b2 100644
--- a/sound/soc/omap/omap3evm.c
+++ b/sound/soc/omap/omap3evm.c
@@ -70,6 +70,7 @@ static struct snd_soc_dai_link omap3evm_dai = {
70/* Audio machine driver */ 70/* Audio machine driver */
71static struct snd_soc_card snd_soc_omap3evm = { 71static struct snd_soc_card snd_soc_omap3evm = {
72 .name = "omap3evm", 72 .name = "omap3evm",
73 .owner = THIS_MODULE,
73 .dai_link = &omap3evm_dai, 74 .dai_link = &omap3evm_dai,
74 .num_links = 1, 75 .num_links = 1,
75}; 76};
diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c
index 7605c37c91e7..07794bd10952 100644
--- a/sound/soc/omap/omap3pandora.c
+++ b/sound/soc/omap/omap3pandora.c
@@ -233,6 +233,7 @@ static struct snd_soc_dai_link omap3pandora_dai[] = {
233/* SoC card */ 233/* SoC card */
234static struct snd_soc_card snd_soc_card_omap3pandora = { 234static struct snd_soc_card snd_soc_card_omap3pandora = {
235 .name = "omap3pandora", 235 .name = "omap3pandora",
236 .owner = THIS_MODULE,
236 .dai_link = omap3pandora_dai, 237 .dai_link = omap3pandora_dai,
237 .num_links = ARRAY_SIZE(omap3pandora_dai), 238 .num_links = ARRAY_SIZE(omap3pandora_dai),
238}; 239};
diff --git a/sound/soc/omap/omap4-hdmi-card.c b/sound/soc/omap/omap4-hdmi-card.c
index 52d471c1eeed..28d689b2714d 100644
--- a/sound/soc/omap/omap4-hdmi-card.c
+++ b/sound/soc/omap/omap4-hdmi-card.c
@@ -74,6 +74,7 @@ static struct snd_soc_dai_link omap4_hdmi_dai = {
74 74
75static struct snd_soc_card snd_soc_omap4_hdmi = { 75static struct snd_soc_card snd_soc_omap4_hdmi = {
76 .name = "OMAP4HDMI", 76 .name = "OMAP4HDMI",
77 .owner = THIS_MODULE,
77 .dai_link = &omap4_hdmi_dai, 78 .dai_link = &omap4_hdmi_dai,
78 .num_links = 1, 79 .num_links = 1,
79}; 80};
diff --git a/sound/soc/omap/osk5912.c b/sound/soc/omap/osk5912.c
index 351ec9db384d..d859b597e7ec 100644
--- a/sound/soc/omap/osk5912.c
+++ b/sound/soc/omap/osk5912.c
@@ -108,6 +108,7 @@ static struct snd_soc_dai_link osk_dai = {
108/* Audio machine driver */ 108/* Audio machine driver */
109static struct snd_soc_card snd_soc_card_osk = { 109static struct snd_soc_card snd_soc_card_osk = {
110 .name = "OSK5912", 110 .name = "OSK5912",
111 .owner = THIS_MODULE,
111 .dai_link = &osk_dai, 112 .dai_link = &osk_dai,
112 .num_links = 1, 113 .num_links = 1,
113 114
diff --git a/sound/soc/omap/overo.c b/sound/soc/omap/overo.c
index c3550aeee533..2ee889c50256 100644
--- a/sound/soc/omap/overo.c
+++ b/sound/soc/omap/overo.c
@@ -72,6 +72,7 @@ static struct snd_soc_dai_link overo_dai = {
72/* Audio machine driver */ 72/* Audio machine driver */
73static struct snd_soc_card snd_soc_card_overo = { 73static struct snd_soc_card snd_soc_card_overo = {
74 .name = "overo", 74 .name = "overo",
75 .owner = THIS_MODULE,
75 .dai_link = &overo_dai, 76 .dai_link = &overo_dai,
76 .num_links = 1, 77 .num_links = 1,
77}; 78};
diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
index ad16db536320..fada6ef43eea 100644
--- a/sound/soc/omap/rx51.c
+++ b/sound/soc/omap/rx51.c
@@ -383,6 +383,7 @@ static struct snd_soc_codec_conf rx51_codec_conf[] = {
383/* Audio card */ 383/* Audio card */
384static struct snd_soc_card rx51_sound_card = { 384static struct snd_soc_card rx51_sound_card = {
385 .name = "RX-51", 385 .name = "RX-51",
386 .owner = THIS_MODULE,
386 .dai_link = rx51_dai, 387 .dai_link = rx51_dai,
387 .num_links = ARRAY_SIZE(rx51_dai), 388 .num_links = ARRAY_SIZE(rx51_dai),
388 .aux_dev = rx51_aux_dev, 389 .aux_dev = rx51_aux_dev,
diff --git a/sound/soc/omap/sdp3430.c b/sound/soc/omap/sdp3430.c
index e8fbf8efdbb8..2c850662ea7e 100644
--- a/sound/soc/omap/sdp3430.c
+++ b/sound/soc/omap/sdp3430.c
@@ -213,6 +213,7 @@ static struct snd_soc_dai_link sdp3430_dai[] = {
213/* Audio machine driver */ 213/* Audio machine driver */
214static struct snd_soc_card snd_soc_sdp3430 = { 214static struct snd_soc_card snd_soc_sdp3430 = {
215 .name = "SDP3430", 215 .name = "SDP3430",
216 .owner = THIS_MODULE,
216 .dai_link = sdp3430_dai, 217 .dai_link = sdp3430_dai,
217 .num_links = ARRAY_SIZE(sdp3430_dai), 218 .num_links = ARRAY_SIZE(sdp3430_dai),
218 219
diff --git a/sound/soc/omap/sdp4430.c b/sound/soc/omap/sdp4430.c
index 2735fa03b74b..175ba9a04edf 100644
--- a/sound/soc/omap/sdp4430.c
+++ b/sound/soc/omap/sdp4430.c
@@ -226,6 +226,7 @@ static struct snd_soc_dai_link sdp4430_dai[] = {
226/* Audio machine driver */ 226/* Audio machine driver */
227static struct snd_soc_card snd_soc_sdp4430 = { 227static struct snd_soc_card snd_soc_sdp4430 = {
228 .name = "SDP4430", 228 .name = "SDP4430",
229 .owner = THIS_MODULE,
229 .dai_link = sdp4430_dai, 230 .dai_link = sdp4430_dai,
230 .num_links = ARRAY_SIZE(sdp4430_dai), 231 .num_links = ARRAY_SIZE(sdp4430_dai),
231 232
diff --git a/sound/soc/omap/zoom2.c b/sound/soc/omap/zoom2.c
index 7641a7fa8f97..981616d61f67 100644
--- a/sound/soc/omap/zoom2.c
+++ b/sound/soc/omap/zoom2.c
@@ -157,6 +157,7 @@ static struct snd_soc_dai_link zoom2_dai[] = {
157/* Audio machine driver */ 157/* Audio machine driver */
158static struct snd_soc_card snd_soc_zoom2 = { 158static struct snd_soc_card snd_soc_zoom2 = {
159 .name = "Zoom2", 159 .name = "Zoom2",
160 .owner = THIS_MODULE,
160 .dai_link = zoom2_dai, 161 .dai_link = zoom2_dai,
161 .num_links = ARRAY_SIZE(zoom2_dai), 162 .num_links = ARRAY_SIZE(zoom2_dai),
162 163