aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-09-02 14:05:42 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-09-02 14:05:42 -0400
commitba6271ea6324decab4c47c4a55de95188d930792 (patch)
tree8204be655e6e9fbd672a6526828b98af66501c3f
parent99039e1352fa451bd46e2c020dc78bcaf2a159d9 (diff)
parentee979a143cfd999adea8a9e272649a3cd9ec84bc (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: ALSA: hda - Add mic-boost controls to ALC662/663 auto configuration ALSA: hda - Fix ALC663 auto-probe ALSA: ASoC: fix pxa2xx-i2s clk_get call ALSA: hda: Distortion fix for dell_m6_core_init
-rw-r--r--sound/pci/hda/patch_realtek.c23
-rw-r--r--sound/pci/hda/patch_sigmatel.c5
-rw-r--r--sound/soc/pxa/pxa2xx-i2s.c40
3 files changed, 65 insertions, 3 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index d6ec9eef2910..66025161bd69 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -14066,6 +14066,13 @@ static struct hda_verb alc662_auto_init_verbs[] = {
14066 { } 14066 { }
14067}; 14067};
14068 14068
14069/* additional verbs for ALC663 */
14070static struct hda_verb alc663_auto_init_verbs[] = {
14071 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
14072 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
14073 { }
14074};
14075
14069static struct hda_verb alc663_m51va_init_verbs[] = { 14076static struct hda_verb alc663_m51va_init_verbs[] = {
14070 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 14077 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
14071 {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 14078 {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
@@ -14594,6 +14601,14 @@ static int alc662_auto_create_extra_out(struct alc_spec *spec, hda_nid_t pin,
14594 if (!pin) 14601 if (!pin)
14595 return 0; 14602 return 0;
14596 14603
14604 if (pin == 0x17) {
14605 /* ALC663 has a mono output pin on 0x17 */
14606 sprintf(name, "%s Playback Switch", pfx);
14607 err = add_control(spec, ALC_CTL_WIDGET_MUTE, name,
14608 HDA_COMPOSE_AMP_VAL(pin, 2, 0, HDA_OUTPUT));
14609 return err;
14610 }
14611
14597 if (alc880_is_fixed_pin(pin)) { 14612 if (alc880_is_fixed_pin(pin)) {
14598 nid = alc880_idx_to_dac(alc880_fixed_pin_idx(pin)); 14613 nid = alc880_idx_to_dac(alc880_fixed_pin_idx(pin));
14599 /* printk("DAC nid=%x\n",nid); */ 14614 /* printk("DAC nid=%x\n",nid); */
@@ -14764,6 +14779,14 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
14764 spec->input_mux = &spec->private_imux; 14779 spec->input_mux = &spec->private_imux;
14765 14780
14766 spec->init_verbs[spec->num_init_verbs++] = alc662_auto_init_verbs; 14781 spec->init_verbs[spec->num_init_verbs++] = alc662_auto_init_verbs;
14782 if (codec->vendor_id == 0x10ec0663)
14783 spec->init_verbs[spec->num_init_verbs++] =
14784 alc663_auto_init_verbs;
14785
14786 err = alc_auto_add_mic_boost(codec);
14787 if (err < 0)
14788 return err;
14789
14767 spec->mixers[spec->num_mixers] = alc662_capture_mixer; 14790 spec->mixers[spec->num_mixers] = alc662_capture_mixer;
14768 spec->num_mixers++; 14791 spec->num_mixers++;
14769 return 1; 14792 return 1;
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 7fdafcb0015d..ad994fcab725 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -560,8 +560,9 @@ static struct hda_verb dell_eq_core_init[] = {
560}; 560};
561 561
562static struct hda_verb dell_m6_core_init[] = { 562static struct hda_verb dell_m6_core_init[] = {
563 /* set master volume and direct control */ 563 /* set master volume to max value without distortion
564 { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, 564 * and direct control */
565 { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xec},
565 /* setup audio connections */ 566 /* setup audio connections */
566 { 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00}, 567 { 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00},
567 { 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01}, 568 { 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c
index 8548818eea08..c796b1882776 100644
--- a/sound/soc/pxa/pxa2xx-i2s.c
+++ b/sound/soc/pxa/pxa2xx-i2s.c
@@ -16,6 +16,7 @@
16#include <linux/device.h> 16#include <linux/device.h>
17#include <linux/delay.h> 17#include <linux/delay.h>
18#include <linux/clk.h> 18#include <linux/clk.h>
19#include <linux/platform_device.h>
19#include <sound/core.h> 20#include <sound/core.h>
20#include <sound/pcm.h> 21#include <sound/pcm.h>
21#include <sound/initval.h> 22#include <sound/initval.h>
@@ -81,7 +82,6 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream)
81 struct snd_soc_pcm_runtime *rtd = substream->private_data; 82 struct snd_soc_pcm_runtime *rtd = substream->private_data;
82 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 83 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
83 84
84 clk_i2s = clk_get(NULL, "I2SCLK");
85 if (IS_ERR(clk_i2s)) 85 if (IS_ERR(clk_i2s))
86 return PTR_ERR(clk_i2s); 86 return PTR_ERR(clk_i2s);
87 87
@@ -152,6 +152,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
152 pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx); 152 pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx);
153 pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm); 153 pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm);
154 pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk); 154 pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk);
155 BUG_ON(IS_ERR(clk_i2s));
155 clk_enable(clk_i2s); 156 clk_enable(clk_i2s);
156 pxa_i2s_wait(); 157 pxa_i2s_wait();
157 158
@@ -317,6 +318,43 @@ struct snd_soc_dai pxa_i2s_dai = {
317 318
318EXPORT_SYMBOL_GPL(pxa_i2s_dai); 319EXPORT_SYMBOL_GPL(pxa_i2s_dai);
319 320
321static int pxa2xx_i2s_probe(struct platform_device *dev)
322{
323 clk_i2s = clk_get(&dev->dev, "I2SCLK");
324 return IS_ERR(clk_i2s) ? PTR_ERR(clk_i2s) : 0;
325}
326
327static int __devexit pxa2xx_i2s_remove(struct platform_device *dev)
328{
329 clk_put(clk_i2s);
330 clk_i2s = ERR_PTR(-ENOENT);
331 return 0;
332}
333
334static struct platform_driver pxa2xx_i2s_driver = {
335 .probe = pxa2xx_i2s_probe,
336 .remove = __devexit_p(pxa2xx_i2s_remove),
337
338 .driver = {
339 .name = "pxa2xx-i2s",
340 .owner = THIS_MODULE,
341 },
342};
343
344static int __init pxa2xx_i2s_init(void)
345{
346 clk_i2s = ERR_PTR(-ENOENT);
347 return platform_driver_register(&pxa2xx_i2s_driver);
348}
349
350static void __exit pxa2xx_i2s_exit(void)
351{
352 platform_driver_unregister(&pxa2xx_i2s_driver);
353}
354
355module_init(pxa2xx_i2s_init);
356module_exit(pxa2xx_i2s_exit);
357
320/* Module information */ 358/* Module information */
321MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com"); 359MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
322MODULE_DESCRIPTION("pxa2xx I2S SoC Interface"); 360MODULE_DESCRIPTION("pxa2xx I2S SoC Interface");