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
This commit is contained in:
commit
ba6271ea63
@ -14066,6 +14066,13 @@ static struct hda_verb alc662_auto_init_verbs[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* additional verbs for ALC663 */
|
||||||
|
static struct hda_verb alc663_auto_init_verbs[] = {
|
||||||
|
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||||
|
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
static struct hda_verb alc663_m51va_init_verbs[] = {
|
static struct hda_verb alc663_m51va_init_verbs[] = {
|
||||||
{0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
|
{0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
|
||||||
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
{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,
|
|||||||
if (!pin)
|
if (!pin)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (pin == 0x17) {
|
||||||
|
/* ALC663 has a mono output pin on 0x17 */
|
||||||
|
sprintf(name, "%s Playback Switch", pfx);
|
||||||
|
err = add_control(spec, ALC_CTL_WIDGET_MUTE, name,
|
||||||
|
HDA_COMPOSE_AMP_VAL(pin, 2, 0, HDA_OUTPUT));
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
if (alc880_is_fixed_pin(pin)) {
|
if (alc880_is_fixed_pin(pin)) {
|
||||||
nid = alc880_idx_to_dac(alc880_fixed_pin_idx(pin));
|
nid = alc880_idx_to_dac(alc880_fixed_pin_idx(pin));
|
||||||
/* printk("DAC nid=%x\n",nid); */
|
/* printk("DAC nid=%x\n",nid); */
|
||||||
@ -14764,6 +14779,14 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
|
|||||||
spec->input_mux = &spec->private_imux;
|
spec->input_mux = &spec->private_imux;
|
||||||
|
|
||||||
spec->init_verbs[spec->num_init_verbs++] = alc662_auto_init_verbs;
|
spec->init_verbs[spec->num_init_verbs++] = alc662_auto_init_verbs;
|
||||||
|
if (codec->vendor_id == 0x10ec0663)
|
||||||
|
spec->init_verbs[spec->num_init_verbs++] =
|
||||||
|
alc663_auto_init_verbs;
|
||||||
|
|
||||||
|
err = alc_auto_add_mic_boost(codec);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
spec->mixers[spec->num_mixers] = alc662_capture_mixer;
|
spec->mixers[spec->num_mixers] = alc662_capture_mixer;
|
||||||
spec->num_mixers++;
|
spec->num_mixers++;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -560,8 +560,9 @@ static struct hda_verb dell_eq_core_init[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct hda_verb dell_m6_core_init[] = {
|
static struct hda_verb dell_m6_core_init[] = {
|
||||||
/* set master volume and direct control */
|
/* set master volume to max value without distortion
|
||||||
{ 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
|
* and direct control */
|
||||||
|
{ 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xec},
|
||||||
/* setup audio connections */
|
/* setup audio connections */
|
||||||
{ 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00},
|
{ 0x0d, AC_VERB_SET_CONNECT_SEL, 0x00},
|
||||||
{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
|
{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
#include <sound/pcm.h>
|
#include <sound/pcm.h>
|
||||||
#include <sound/initval.h>
|
#include <sound/initval.h>
|
||||||
@ -81,7 +82,6 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream)
|
|||||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||||
struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
|
struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
|
||||||
|
|
||||||
clk_i2s = clk_get(NULL, "I2SCLK");
|
|
||||||
if (IS_ERR(clk_i2s))
|
if (IS_ERR(clk_i2s))
|
||||||
return PTR_ERR(clk_i2s);
|
return PTR_ERR(clk_i2s);
|
||||||
|
|
||||||
@ -152,6 +152,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
|
|||||||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx);
|
pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx);
|
||||||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm);
|
pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm);
|
||||||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk);
|
pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk);
|
||||||
|
BUG_ON(IS_ERR(clk_i2s));
|
||||||
clk_enable(clk_i2s);
|
clk_enable(clk_i2s);
|
||||||
pxa_i2s_wait();
|
pxa_i2s_wait();
|
||||||
|
|
||||||
@ -317,6 +318,43 @@ struct snd_soc_dai pxa_i2s_dai = {
|
|||||||
|
|
||||||
EXPORT_SYMBOL_GPL(pxa_i2s_dai);
|
EXPORT_SYMBOL_GPL(pxa_i2s_dai);
|
||||||
|
|
||||||
|
static int pxa2xx_i2s_probe(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
clk_i2s = clk_get(&dev->dev, "I2SCLK");
|
||||||
|
return IS_ERR(clk_i2s) ? PTR_ERR(clk_i2s) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __devexit pxa2xx_i2s_remove(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
clk_put(clk_i2s);
|
||||||
|
clk_i2s = ERR_PTR(-ENOENT);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_driver pxa2xx_i2s_driver = {
|
||||||
|
.probe = pxa2xx_i2s_probe,
|
||||||
|
.remove = __devexit_p(pxa2xx_i2s_remove),
|
||||||
|
|
||||||
|
.driver = {
|
||||||
|
.name = "pxa2xx-i2s",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init pxa2xx_i2s_init(void)
|
||||||
|
{
|
||||||
|
clk_i2s = ERR_PTR(-ENOENT);
|
||||||
|
return platform_driver_register(&pxa2xx_i2s_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit pxa2xx_i2s_exit(void)
|
||||||
|
{
|
||||||
|
platform_driver_unregister(&pxa2xx_i2s_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(pxa2xx_i2s_init);
|
||||||
|
module_exit(pxa2xx_i2s_exit);
|
||||||
|
|
||||||
/* Module information */
|
/* Module information */
|
||||||
MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
|
MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
|
||||||
MODULE_DESCRIPTION("pxa2xx I2S SoC Interface");
|
MODULE_DESCRIPTION("pxa2xx I2S SoC Interface");
|
||||||
|
Loading…
Reference in New Issue
Block a user