Merge git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/alsa-fix-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/alsa-fix-2.6: [ALSA] intel8x0 - Add quirk for Compaq Deskpro EN [ALSA] hda-codec - Adapt eeepc p701 mixer for virtual master control [ALSA] sound: ice1712: unused structs [ALSA] ASoC: Fix WM9712 mixer_event DAPM widget function type [ALSA] ASoC: Fix DAPM widget function types in pxa machine drivers [ALSA] hda-codec - Fix mixer names of realtek codecs to adapt mater controls [ALSA] intel8x0 - Add quirk for Acer Travelmate 2310 [ALSA] hda_intel - Add model quirk for Albatron KI690-AM2 motherboard [ALSA] oxygen: add owner field [ALSA] hda-codec - Add Fujitsu Lifebook E8410 to quirk table [ALSA] hda-codec - Fix AD1988 capture elements [ALSA] sb8: fix SB 1.0 capture DMA programming [ALSA] usb-audio: add workaround for broken E-Mu frequency feedback [ALSA] ASoC: Fix TLV320AIC3X PLL divider table for 64 kHz rate [ALSA] hda-codec - Fix Master volume on HP dv8000
This commit is contained in:
Коммит
c0f4133b8f
|
@ -277,7 +277,7 @@ static int snd_sb8_capture_prepare(struct snd_pcm_substream *substream)
|
|||
} else {
|
||||
snd_sbdsp_command(chip, 256 - runtime->rate_den);
|
||||
}
|
||||
if (chip->capture_format != SB_DSP_OUTPUT) {
|
||||
if (chip->capture_format != SB_DSP_INPUT) {
|
||||
count--;
|
||||
snd_sbdsp_command(chip, SB_DSP_BLOCK_SIZE);
|
||||
snd_sbdsp_command(chip, count & 0xff);
|
||||
|
|
|
@ -1778,9 +1778,9 @@ static hda_nid_t ad1988_capsrc_nids[3] = {
|
|||
static struct hda_input_mux ad1988_6stack_capture_source = {
|
||||
.num_items = 5,
|
||||
.items = {
|
||||
{ "Front Mic", 0x0 },
|
||||
{ "Line", 0x1 },
|
||||
{ "Mic", 0x4 },
|
||||
{ "Front Mic", 0x1 }, /* port-B */
|
||||
{ "Line", 0x2 }, /* port-C */
|
||||
{ "Mic", 0x4 }, /* port-E */
|
||||
{ "CD", 0x5 },
|
||||
{ "Mix", 0x9 },
|
||||
},
|
||||
|
@ -1789,7 +1789,7 @@ static struct hda_input_mux ad1988_6stack_capture_source = {
|
|||
static struct hda_input_mux ad1988_laptop_capture_source = {
|
||||
.num_items = 3,
|
||||
.items = {
|
||||
{ "Mic/Line", 0x0 },
|
||||
{ "Mic/Line", 0x1 }, /* port-B */
|
||||
{ "CD", 0x5 },
|
||||
{ "Mix", 0x9 },
|
||||
},
|
||||
|
|
|
@ -1230,6 +1230,11 @@ static struct hda_verb cxt5047_toshiba_init_verbs[] = {
|
|||
static struct hda_verb cxt5047_hp_init_verbs[] = {
|
||||
/* pin sensing on HP jack */
|
||||
{0x13, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | CONEXANT_HP_EVENT},
|
||||
/* 0x13 is actually shared by both HP and speaker;
|
||||
* setting the connection to 0 (=0x19) makes the master volume control
|
||||
* working mysteriouslly...
|
||||
*/
|
||||
{0x13, AC_VERB_SET_CONNECT_SEL, 0x0},
|
||||
/* Record selector: Ext Mic */
|
||||
{0x12, AC_VERB_SET_CONNECT_SEL,0x03},
|
||||
{0x19, AC_VERB_SET_AMP_GAIN_MUTE,
|
||||
|
|
|
@ -3973,8 +3973,8 @@ static struct snd_kcontrol_new alc260_fujitsu_mixer[] = {
|
|||
ALC_PIN_MODE("Mic/Line Jack Mode", 0x12, ALC_PIN_DIR_IN),
|
||||
HDA_CODEC_VOLUME("Beep Playback Volume", 0x07, 0x05, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Beep Playback Switch", 0x07, 0x05, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Internal Speaker Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Internal Speaker Playback Switch", 0x09, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Speaker Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Speaker Playback Switch", 0x09, 2, HDA_INPUT),
|
||||
{ } /* end */
|
||||
};
|
||||
|
||||
|
@ -4005,9 +4005,9 @@ static struct snd_kcontrol_new alc260_acer_mixer[] = {
|
|||
HDA_CODEC_VOLUME("Master Playback Volume", 0x08, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Master Playback Switch", 0x08, 2, HDA_INPUT),
|
||||
ALC_PIN_MODE("Headphone Jack Mode", 0x0f, ALC_PIN_DIR_INOUT),
|
||||
HDA_CODEC_VOLUME_MONO("Mono Speaker Playback Volume", 0x0a, 1, 0x0,
|
||||
HDA_CODEC_VOLUME_MONO("Speaker Playback Volume", 0x0a, 1, 0x0,
|
||||
HDA_OUTPUT),
|
||||
HDA_BIND_MUTE_MONO("Mono Speaker Playback Switch", 0x0a, 1, 2,
|
||||
HDA_BIND_MUTE_MONO("Speaker Playback Switch", 0x0a, 1, 2,
|
||||
HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("CD Playback Volume", 0x07, 0x04, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("CD Playback Switch", 0x07, 0x04, HDA_INPUT),
|
||||
|
@ -7639,6 +7639,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3bfd, "Lenovo NB0763", ALC883_LENOVO_NB0763),
|
||||
SND_PCI_QUIRK(0x17c0, 0x4071, "MEDION MD2", ALC883_MEDION_MD2),
|
||||
SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG),
|
||||
SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66),
|
||||
SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch),
|
||||
{}
|
||||
|
@ -8102,7 +8103,7 @@ static struct snd_kcontrol_new alc262_base_mixer[] = {
|
|||
HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT),
|
||||
/* HDA_CODEC_VOLUME("PC Beep Playback Volume", 0x0b, 0x05, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("PC Beelp Playback Switch", 0x0b, 0x05, HDA_INPUT), */
|
||||
HDA_CODEC_MUTE("PC Beep Playback Switch", 0x0b, 0x05, HDA_INPUT), */
|
||||
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
|
||||
|
@ -8124,7 +8125,7 @@ static struct snd_kcontrol_new alc262_hippo1_mixer[] = {
|
|||
HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT),
|
||||
/* HDA_CODEC_VOLUME("PC Beep Playback Volume", 0x0b, 0x05, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("PC Beelp Playback Switch", 0x0b, 0x05, HDA_INPUT), */
|
||||
HDA_CODEC_MUTE("PC Beep Playback Switch", 0x0b, 0x05, HDA_INPUT), */
|
||||
/*HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT),*/
|
||||
HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||
{ } /* end */
|
||||
|
@ -9238,6 +9239,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x104d, 0x900e, "Sony ASSAMD", ALC262_SONY_ASSAMD),
|
||||
SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", ALC262_SONY_ASSAMD),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU),
|
||||
SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU),
|
||||
SND_PCI_QUIRK(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA),
|
||||
SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8),
|
||||
SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31),
|
||||
|
@ -12993,8 +12995,8 @@ static struct snd_kcontrol_new alc662_lenovo_101e_mixer[] = {
|
|||
static struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = {
|
||||
HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
|
||||
|
||||
HDA_CODEC_VOLUME("LineOut Playback Volume", 0x02, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("LineOut Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_VOLUME("Line-Out Playback Volume", 0x02, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Line-Out Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||
|
||||
HDA_CODEC_VOLUME("e-Mic Boost", 0x18, 0, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("e-Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
|
||||
|
@ -13007,8 +13009,8 @@ static struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = {
|
|||
};
|
||||
|
||||
static struct snd_kcontrol_new alc662_eeepc_ep20_mixer[] = {
|
||||
HDA_CODEC_VOLUME("LineOut Playback Volume", 0x02, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("LineOut Playback Switch", 0x14, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_VOLUME("Line-Out Playback Volume", 0x02, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_MUTE("Line-Out Playback Switch", 0x14, 0x0, HDA_OUTPUT),
|
||||
HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE("Surround Playback Switch", 0x03, 2, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT),
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
struct phase28_spec {
|
||||
unsigned short master[2];
|
||||
unsigned short vol[8];
|
||||
} phase28;
|
||||
};
|
||||
|
||||
/* WM8770 registers */
|
||||
#define WM_DAC_ATTEN 0x00 /* DAC1-8 analog attenuation */
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
struct revo51_spec {
|
||||
struct snd_i2c_device *dev;
|
||||
struct snd_pt2258 *pt2258;
|
||||
} revo51;
|
||||
};
|
||||
|
||||
static void revo_i2s_mclk_changed(struct snd_ice1712 *ice)
|
||||
{
|
||||
|
|
|
@ -1708,6 +1708,12 @@ static struct ac97_pcm ac97_pcm_defs[] __devinitdata = {
|
|||
};
|
||||
|
||||
static struct ac97_quirk ac97_quirks[] __devinitdata = {
|
||||
{
|
||||
.subvendor = 0x0e11,
|
||||
.subdevice = 0x000e,
|
||||
.name = "Compaq Deskpro EN", /* AD1885 */
|
||||
.type = AC97_TUNE_HP_ONLY
|
||||
},
|
||||
{
|
||||
.subvendor = 0x0e11,
|
||||
.subdevice = 0x008a,
|
||||
|
@ -1738,6 +1744,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
|
|||
.name = "IBM NetVista A30p", /* AD1981B */
|
||||
.type = AC97_TUNE_HP_ONLY
|
||||
},
|
||||
{
|
||||
.subvendor = 0x1025,
|
||||
.subdevice = 0x0082,
|
||||
.name = "Acer Travelmate 2310",
|
||||
.type = AC97_TUNE_HP_ONLY
|
||||
},
|
||||
{
|
||||
.subvendor = 0x1025,
|
||||
.subdevice = 0x0083,
|
||||
|
|
|
@ -150,6 +150,7 @@ static const struct oxygen_model model_hifier = {
|
|||
.shortname = "C-Media CMI8787",
|
||||
.longname = "C-Media Oxygen HD Audio",
|
||||
.chip = "CMI8788",
|
||||
.owner = THIS_MODULE,
|
||||
.init = hifier_init,
|
||||
.control_filter = hifier_control_filter,
|
||||
.mixer_init = hifier_mixer_init,
|
||||
|
|
|
@ -389,6 +389,7 @@ static const struct oxygen_model model_xonar = {
|
|||
.shortname = "Asus AV200",
|
||||
.longname = "Asus Virtuoso 200",
|
||||
.chip = "AV200",
|
||||
.owner = THIS_MODULE,
|
||||
.init = xonar_init,
|
||||
.control_filter = xonar_control_filter,
|
||||
.mixer_init = xonar_mixer_init,
|
||||
|
|
|
@ -681,8 +681,8 @@ static const struct aic3x_rate_divs aic3x_divs[] = {
|
|||
{22579200, 48000, 48000, 0x0, 8, 7075},
|
||||
{33868800, 48000, 48000, 0x0, 5, 8049},
|
||||
/* 64k */
|
||||
{22579200, 96000, 96000, 0x1, 8, 7075},
|
||||
{33868800, 96000, 96000, 0x1, 5, 8049},
|
||||
{22579200, 64000, 96000, 0x1, 8, 7075},
|
||||
{33868800, 64000, 96000, 0x1, 5, 8049},
|
||||
/* 88.2k */
|
||||
{22579200, 88200, 88200, 0x0, 8, 0},
|
||||
{33868800, 88200, 88200, 0x0, 5, 3333},
|
||||
|
|
|
@ -176,7 +176,8 @@ static int wm9712_add_controls(struct snd_soc_codec *codec)
|
|||
* the codec only has a single control that is shared by both channels.
|
||||
* This makes it impossible to determine the audio path.
|
||||
*/
|
||||
static int mixer_event (struct snd_soc_dapm_widget *w, int event)
|
||||
static int mixer_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *k, int event)
|
||||
{
|
||||
u16 l, r, beep, line, phone, mic, pcm, aux;
|
||||
|
||||
|
|
|
@ -215,7 +215,8 @@ static int corgi_set_spk(struct snd_kcontrol *kcontrol,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
|
||||
static int corgi_amp_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *k, int event)
|
||||
{
|
||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
||||
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
|
||||
|
@ -225,7 +226,8 @@ static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int corgi_mic_event(struct snd_soc_dapm_widget *w, int event)
|
||||
static int corgi_mic_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *k, int event)
|
||||
{
|
||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
||||
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
|
||||
|
|
|
@ -196,7 +196,8 @@ static int poodle_set_spk(struct snd_kcontrol *kcontrol,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int poodle_amp_event(struct snd_soc_dapm_widget *w, int event)
|
||||
static int poodle_amp_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *k, int event)
|
||||
{
|
||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
||||
locomo_gpio_write(&poodle_locomo_device.dev,
|
||||
|
|
|
@ -215,7 +215,8 @@ static int spitz_set_spk(struct snd_kcontrol *kcontrol,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int spitz_mic_bias(struct snd_soc_dapm_widget *w, int event)
|
||||
static int spitz_mic_bias(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *k, int event)
|
||||
{
|
||||
if (machine_is_borzoi() || machine_is_spitz()) {
|
||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
||||
|
|
|
@ -135,7 +135,8 @@ static int tosa_set_spk(struct snd_kcontrol *kcontrol,
|
|||
}
|
||||
|
||||
/* tosa dapm event handlers */
|
||||
static int tosa_hp_event(struct snd_soc_dapm_widget *w, int event)
|
||||
static int tosa_hp_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *k, int event)
|
||||
{
|
||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
||||
set_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_L_MUTE);
|
||||
|
|
|
@ -479,6 +479,33 @@ static int retire_playback_sync_urb_hs(struct snd_usb_substream *subs,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* process after E-Mu 0202/0404 high speed playback sync complete
|
||||
*
|
||||
* These devices return the number of samples per packet instead of the number
|
||||
* of samples per microframe.
|
||||
*/
|
||||
static int retire_playback_sync_urb_hs_emu(struct snd_usb_substream *subs,
|
||||
struct snd_pcm_runtime *runtime,
|
||||
struct urb *urb)
|
||||
{
|
||||
unsigned int f;
|
||||
unsigned long flags;
|
||||
|
||||
if (urb->iso_frame_desc[0].status == 0 &&
|
||||
urb->iso_frame_desc[0].actual_length == 4) {
|
||||
f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff;
|
||||
f >>= subs->datainterval;
|
||||
if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
|
||||
spin_lock_irqsave(&subs->lock, flags);
|
||||
subs->freqm = f;
|
||||
spin_unlock_irqrestore(&subs->lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* determine the number of frames in the next packet */
|
||||
static int snd_usb_audio_next_packet_size(struct snd_usb_substream *subs)
|
||||
{
|
||||
|
@ -2219,10 +2246,17 @@ static void init_substream(struct snd_usb_stream *as, int stream, struct audiofo
|
|||
subs->stream = as;
|
||||
subs->direction = stream;
|
||||
subs->dev = as->chip->dev;
|
||||
if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
|
||||
if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL) {
|
||||
subs->ops = audio_urb_ops[stream];
|
||||
else
|
||||
} else {
|
||||
subs->ops = audio_urb_ops_high_speed[stream];
|
||||
switch (as->chip->usb_id) {
|
||||
case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */
|
||||
case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */
|
||||
subs->ops.retire_sync = retire_playback_sync_urb_hs_emu;
|
||||
break;
|
||||
}
|
||||
}
|
||||
snd_pcm_set_ops(as->pcm, stream,
|
||||
stream == SNDRV_PCM_STREAM_PLAYBACK ?
|
||||
&snd_usb_playback_ops : &snd_usb_capture_ops);
|
||||
|
|
Загрузка…
Ссылка в новой задаче