提交 c0f4133b 编写于 作者: L Linus Torvalds

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
...@@ -277,7 +277,7 @@ static int snd_sb8_capture_prepare(struct snd_pcm_substream *substream) ...@@ -277,7 +277,7 @@ static int snd_sb8_capture_prepare(struct snd_pcm_substream *substream)
} else { } else {
snd_sbdsp_command(chip, 256 - runtime->rate_den); snd_sbdsp_command(chip, 256 - runtime->rate_den);
} }
if (chip->capture_format != SB_DSP_OUTPUT) { if (chip->capture_format != SB_DSP_INPUT) {
count--; count--;
snd_sbdsp_command(chip, SB_DSP_BLOCK_SIZE); snd_sbdsp_command(chip, SB_DSP_BLOCK_SIZE);
snd_sbdsp_command(chip, count & 0xff); snd_sbdsp_command(chip, count & 0xff);
......
...@@ -1778,9 +1778,9 @@ static hda_nid_t ad1988_capsrc_nids[3] = { ...@@ -1778,9 +1778,9 @@ static hda_nid_t ad1988_capsrc_nids[3] = {
static struct hda_input_mux ad1988_6stack_capture_source = { static struct hda_input_mux ad1988_6stack_capture_source = {
.num_items = 5, .num_items = 5,
.items = { .items = {
{ "Front Mic", 0x0 }, { "Front Mic", 0x1 }, /* port-B */
{ "Line", 0x1 }, { "Line", 0x2 }, /* port-C */
{ "Mic", 0x4 }, { "Mic", 0x4 }, /* port-E */
{ "CD", 0x5 }, { "CD", 0x5 },
{ "Mix", 0x9 }, { "Mix", 0x9 },
}, },
...@@ -1789,7 +1789,7 @@ static struct hda_input_mux ad1988_6stack_capture_source = { ...@@ -1789,7 +1789,7 @@ static struct hda_input_mux ad1988_6stack_capture_source = {
static struct hda_input_mux ad1988_laptop_capture_source = { static struct hda_input_mux ad1988_laptop_capture_source = {
.num_items = 3, .num_items = 3,
.items = { .items = {
{ "Mic/Line", 0x0 }, { "Mic/Line", 0x1 }, /* port-B */
{ "CD", 0x5 }, { "CD", 0x5 },
{ "Mix", 0x9 }, { "Mix", 0x9 },
}, },
......
...@@ -1230,6 +1230,11 @@ static struct hda_verb cxt5047_toshiba_init_verbs[] = { ...@@ -1230,6 +1230,11 @@ static struct hda_verb cxt5047_toshiba_init_verbs[] = {
static struct hda_verb cxt5047_hp_init_verbs[] = { static struct hda_verb cxt5047_hp_init_verbs[] = {
/* pin sensing on HP jack */ /* pin sensing on HP jack */
{0x13, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | CONEXANT_HP_EVENT}, {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 */ /* Record selector: Ext Mic */
{0x12, AC_VERB_SET_CONNECT_SEL,0x03}, {0x12, AC_VERB_SET_CONNECT_SEL,0x03},
{0x19, AC_VERB_SET_AMP_GAIN_MUTE, {0x19, AC_VERB_SET_AMP_GAIN_MUTE,
......
...@@ -3973,8 +3973,8 @@ static struct snd_kcontrol_new alc260_fujitsu_mixer[] = { ...@@ -3973,8 +3973,8 @@ static struct snd_kcontrol_new alc260_fujitsu_mixer[] = {
ALC_PIN_MODE("Mic/Line Jack Mode", 0x12, ALC_PIN_DIR_IN), ALC_PIN_MODE("Mic/Line Jack Mode", 0x12, ALC_PIN_DIR_IN),
HDA_CODEC_VOLUME("Beep Playback Volume", 0x07, 0x05, HDA_INPUT), HDA_CODEC_VOLUME("Beep Playback Volume", 0x07, 0x05, HDA_INPUT),
HDA_CODEC_MUTE("Beep Playback Switch", 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_CODEC_VOLUME("Speaker Playback Volume", 0x09, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Internal Speaker Playback Switch", 0x09, 2, HDA_INPUT), HDA_BIND_MUTE("Speaker Playback Switch", 0x09, 2, HDA_INPUT),
{ } /* end */ { } /* end */
}; };
...@@ -4005,9 +4005,9 @@ static struct snd_kcontrol_new alc260_acer_mixer[] = { ...@@ -4005,9 +4005,9 @@ static struct snd_kcontrol_new alc260_acer_mixer[] = {
HDA_CODEC_VOLUME("Master Playback Volume", 0x08, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("Master Playback Volume", 0x08, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Master Playback Switch", 0x08, 2, HDA_INPUT), HDA_BIND_MUTE("Master Playback Switch", 0x08, 2, HDA_INPUT),
ALC_PIN_MODE("Headphone Jack Mode", 0x0f, ALC_PIN_DIR_INOUT), 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_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_INPUT),
HDA_CODEC_VOLUME("CD Playback Volume", 0x07, 0x04, HDA_INPUT), HDA_CODEC_VOLUME("CD Playback Volume", 0x07, 0x04, HDA_INPUT),
HDA_CODEC_MUTE("CD Playback Switch", 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[] = { ...@@ -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, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763),
SND_PCI_QUIRK(0x17aa, 0x3bfd, "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(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(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66),
SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch), SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch),
{} {}
...@@ -8102,7 +8103,7 @@ static struct snd_kcontrol_new alc262_base_mixer[] = { ...@@ -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_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT),
HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, 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_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_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 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), HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
...@@ -8124,7 +8125,7 @@ static struct snd_kcontrol_new alc262_hippo1_mixer[] = { ...@@ -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_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT),
HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, 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_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_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT),*/
HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
{ } /* end */ { } /* end */
...@@ -9238,6 +9239,7 @@ static struct snd_pci_quirk alc262_cfg_tbl[] = { ...@@ -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, 0x900e, "Sony ASSAMD", ALC262_SONY_ASSAMD),
SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", 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, 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(0x144d, 0xc032, "Samsung Q1 Ultra", ALC262_ULTRA),
SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8), SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8),
SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31), SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31),
...@@ -12993,8 +12995,8 @@ static struct snd_kcontrol_new alc662_lenovo_101e_mixer[] = { ...@@ -12993,8 +12995,8 @@ static struct snd_kcontrol_new alc662_lenovo_101e_mixer[] = {
static struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = { static struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = {
HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
HDA_CODEC_VOLUME("LineOut Playback Volume", 0x02, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("Line-Out Playback Volume", 0x02, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("LineOut Playback Switch", 0x1b, 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 Boost", 0x18, 0, HDA_INPUT),
HDA_CODEC_VOLUME("e-Mic Playback Volume", 0x0b, 0x0, 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[] = { ...@@ -13007,8 +13009,8 @@ static struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = {
}; };
static struct snd_kcontrol_new alc662_eeepc_ep20_mixer[] = { static struct snd_kcontrol_new alc662_eeepc_ep20_mixer[] = {
HDA_CODEC_VOLUME("LineOut Playback Volume", 0x02, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("Line-Out Playback Volume", 0x02, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("LineOut Playback Switch", 0x14, 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_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Surround Playback Switch", 0x03, 2, HDA_INPUT), HDA_BIND_MUTE("Surround Playback Switch", 0x03, 2, HDA_INPUT),
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT),
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
struct phase28_spec { struct phase28_spec {
unsigned short master[2]; unsigned short master[2];
unsigned short vol[8]; unsigned short vol[8];
} phase28; };
/* WM8770 registers */ /* WM8770 registers */
#define WM_DAC_ATTEN 0x00 /* DAC1-8 analog attenuation */ #define WM_DAC_ATTEN 0x00 /* DAC1-8 analog attenuation */
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
struct revo51_spec { struct revo51_spec {
struct snd_i2c_device *dev; struct snd_i2c_device *dev;
struct snd_pt2258 *pt2258; struct snd_pt2258 *pt2258;
} revo51; };
static void revo_i2s_mclk_changed(struct snd_ice1712 *ice) static void revo_i2s_mclk_changed(struct snd_ice1712 *ice)
{ {
......
...@@ -1708,6 +1708,12 @@ static struct ac97_pcm ac97_pcm_defs[] __devinitdata = { ...@@ -1708,6 +1708,12 @@ static struct ac97_pcm ac97_pcm_defs[] __devinitdata = {
}; };
static struct ac97_quirk ac97_quirks[] __devinitdata = { static struct ac97_quirk ac97_quirks[] __devinitdata = {
{
.subvendor = 0x0e11,
.subdevice = 0x000e,
.name = "Compaq Deskpro EN", /* AD1885 */
.type = AC97_TUNE_HP_ONLY
},
{ {
.subvendor = 0x0e11, .subvendor = 0x0e11,
.subdevice = 0x008a, .subdevice = 0x008a,
...@@ -1738,6 +1744,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = { ...@@ -1738,6 +1744,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
.name = "IBM NetVista A30p", /* AD1981B */ .name = "IBM NetVista A30p", /* AD1981B */
.type = AC97_TUNE_HP_ONLY .type = AC97_TUNE_HP_ONLY
}, },
{
.subvendor = 0x1025,
.subdevice = 0x0082,
.name = "Acer Travelmate 2310",
.type = AC97_TUNE_HP_ONLY
},
{ {
.subvendor = 0x1025, .subvendor = 0x1025,
.subdevice = 0x0083, .subdevice = 0x0083,
......
...@@ -150,6 +150,7 @@ static const struct oxygen_model model_hifier = { ...@@ -150,6 +150,7 @@ static const struct oxygen_model model_hifier = {
.shortname = "C-Media CMI8787", .shortname = "C-Media CMI8787",
.longname = "C-Media Oxygen HD Audio", .longname = "C-Media Oxygen HD Audio",
.chip = "CMI8788", .chip = "CMI8788",
.owner = THIS_MODULE,
.init = hifier_init, .init = hifier_init,
.control_filter = hifier_control_filter, .control_filter = hifier_control_filter,
.mixer_init = hifier_mixer_init, .mixer_init = hifier_mixer_init,
......
...@@ -389,6 +389,7 @@ static const struct oxygen_model model_xonar = { ...@@ -389,6 +389,7 @@ static const struct oxygen_model model_xonar = {
.shortname = "Asus AV200", .shortname = "Asus AV200",
.longname = "Asus Virtuoso 200", .longname = "Asus Virtuoso 200",
.chip = "AV200", .chip = "AV200",
.owner = THIS_MODULE,
.init = xonar_init, .init = xonar_init,
.control_filter = xonar_control_filter, .control_filter = xonar_control_filter,
.mixer_init = xonar_mixer_init, .mixer_init = xonar_mixer_init,
......
...@@ -681,8 +681,8 @@ static const struct aic3x_rate_divs aic3x_divs[] = { ...@@ -681,8 +681,8 @@ static const struct aic3x_rate_divs aic3x_divs[] = {
{22579200, 48000, 48000, 0x0, 8, 7075}, {22579200, 48000, 48000, 0x0, 8, 7075},
{33868800, 48000, 48000, 0x0, 5, 8049}, {33868800, 48000, 48000, 0x0, 5, 8049},
/* 64k */ /* 64k */
{22579200, 96000, 96000, 0x1, 8, 7075}, {22579200, 64000, 96000, 0x1, 8, 7075},
{33868800, 96000, 96000, 0x1, 5, 8049}, {33868800, 64000, 96000, 0x1, 5, 8049},
/* 88.2k */ /* 88.2k */
{22579200, 88200, 88200, 0x0, 8, 0}, {22579200, 88200, 88200, 0x0, 8, 0},
{33868800, 88200, 88200, 0x0, 5, 3333}, {33868800, 88200, 88200, 0x0, 5, 3333},
......
...@@ -176,7 +176,8 @@ static int wm9712_add_controls(struct snd_soc_codec *codec) ...@@ -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. * the codec only has a single control that is shared by both channels.
* This makes it impossible to determine the audio path. * 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; u16 l, r, beep, line, phone, mic, pcm, aux;
......
...@@ -215,7 +215,8 @@ static int corgi_set_spk(struct snd_kcontrol *kcontrol, ...@@ -215,7 +215,8 @@ static int corgi_set_spk(struct snd_kcontrol *kcontrol,
return 1; 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)) if (SND_SOC_DAPM_EVENT_ON(event))
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON); 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) ...@@ -225,7 +226,8 @@ static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
return 0; 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)) if (SND_SOC_DAPM_EVENT_ON(event))
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS); set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
......
...@@ -196,7 +196,8 @@ static int poodle_set_spk(struct snd_kcontrol *kcontrol, ...@@ -196,7 +196,8 @@ static int poodle_set_spk(struct snd_kcontrol *kcontrol,
return 1; 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)) if (SND_SOC_DAPM_EVENT_ON(event))
locomo_gpio_write(&poodle_locomo_device.dev, locomo_gpio_write(&poodle_locomo_device.dev,
......
...@@ -215,7 +215,8 @@ static int spitz_set_spk(struct snd_kcontrol *kcontrol, ...@@ -215,7 +215,8 @@ static int spitz_set_spk(struct snd_kcontrol *kcontrol,
return 1; 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 (machine_is_borzoi() || machine_is_spitz()) {
if (SND_SOC_DAPM_EVENT_ON(event)) if (SND_SOC_DAPM_EVENT_ON(event))
......
...@@ -135,7 +135,8 @@ static int tosa_set_spk(struct snd_kcontrol *kcontrol, ...@@ -135,7 +135,8 @@ static int tosa_set_spk(struct snd_kcontrol *kcontrol,
} }
/* tosa dapm event handlers */ /* 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)) if (SND_SOC_DAPM_EVENT_ON(event))
set_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_L_MUTE); 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, ...@@ -479,6 +479,33 @@ static int retire_playback_sync_urb_hs(struct snd_usb_substream *subs,
return 0; 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 */ /* determine the number of frames in the next packet */
static int snd_usb_audio_next_packet_size(struct snd_usb_substream *subs) 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 ...@@ -2219,10 +2246,17 @@ static void init_substream(struct snd_usb_stream *as, int stream, struct audiofo
subs->stream = as; subs->stream = as;
subs->direction = stream; subs->direction = stream;
subs->dev = as->chip->dev; 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]; subs->ops = audio_urb_ops[stream];
else } else {
subs->ops = audio_urb_ops_high_speed[stream]; 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, snd_pcm_set_ops(as->pcm, stream,
stream == SNDRV_PCM_STREAM_PLAYBACK ? stream == SNDRV_PCM_STREAM_PLAYBACK ?
&snd_usb_playback_ops : &snd_usb_capture_ops); &snd_usb_playback_ops : &snd_usb_capture_ops);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册