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

Merge tag 'sound-4.0' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "Here are fixes gathered for 4.0-final; one FireFire endian fix, two
  USB-audio quirks, and three HD-audio quirks.

  All relatively small and device-specific fixes, should be pretty safe
  to apply"

* tag 'sound-4.0' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: usb - Creative USB X-Fi Pro SB1095 volume knob support
  ALSA: hda - Fix headphone pin config for Lifebook T731
  ALSA: bebob: fix to processing in big-endian machine for sending cue
  ALSA: hda/realtek - Make more stable to get pin sense for ALC283
  ALSA: usb-audio: don't try to get Benchmark DAC1 sample rate
  ALSA: hda/realtek - Support Dell headset mode for ALC256
...@@ -96,10 +96,10 @@ int snd_bebob_maudio_load_firmware(struct fw_unit *unit) ...@@ -96,10 +96,10 @@ int snd_bebob_maudio_load_firmware(struct fw_unit *unit)
struct fw_device *device = fw_parent_device(unit); struct fw_device *device = fw_parent_device(unit);
int err, rcode; int err, rcode;
u64 date; u64 date;
__be32 cues[3] = { __le32 cues[3] = {
MAUDIO_BOOTLOADER_CUE1, cpu_to_le32(MAUDIO_BOOTLOADER_CUE1),
MAUDIO_BOOTLOADER_CUE2, cpu_to_le32(MAUDIO_BOOTLOADER_CUE2),
MAUDIO_BOOTLOADER_CUE3 cpu_to_le32(MAUDIO_BOOTLOADER_CUE3)
}; };
/* check date of software used to build */ /* check date of software used to build */
......
...@@ -2912,6 +2912,8 @@ static void alc283_init(struct hda_codec *codec) ...@@ -2912,6 +2912,8 @@ static void alc283_init(struct hda_codec *codec)
if (!hp_pin) if (!hp_pin)
return; return;
msleep(30);
hp_pin_sense = snd_hda_jack_detect(codec, hp_pin); hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
/* Index 0x43 Direct Drive HP AMP LPM Control 1 */ /* Index 0x43 Direct Drive HP AMP LPM Control 1 */
...@@ -3607,6 +3609,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec) ...@@ -3607,6 +3609,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0233: case 0x10ec0233:
...@@ -3662,6 +3665,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin, ...@@ -3662,6 +3665,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_write_coef_idx(codec, 0x45, 0xc489); alc_write_coef_idx(codec, 0x45, 0xc489);
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0); snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
...@@ -3731,6 +3735,7 @@ static void alc_headset_mode_default(struct hda_codec *codec) ...@@ -3731,6 +3735,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0233: case 0x10ec0233:
...@@ -3785,6 +3790,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec) ...@@ -3785,6 +3790,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0233: case 0x10ec0233:
...@@ -3839,6 +3845,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec) ...@@ -3839,6 +3845,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
break; break;
case 0x10ec0233: case 0x10ec0233:
...@@ -3884,6 +3891,7 @@ static void alc_determine_headset_type(struct hda_codec *codec) ...@@ -3884,6 +3891,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
switch (codec->vendor_id) { switch (codec->vendor_id) {
case 0x10ec0255: case 0x10ec0255:
case 0x10ec0256:
alc_process_coef_fw(codec, coef0255); alc_process_coef_fw(codec, coef0255);
msleep(300); msleep(300);
val = alc_read_coef_idx(codec, 0x46); val = alc_read_coef_idx(codec, 0x46);
...@@ -4364,6 +4372,7 @@ enum { ...@@ -4364,6 +4372,7 @@ enum {
ALC269_FIXUP_QUANTA_MUTE, ALC269_FIXUP_QUANTA_MUTE,
ALC269_FIXUP_LIFEBOOK, ALC269_FIXUP_LIFEBOOK,
ALC269_FIXUP_LIFEBOOK_EXTMIC, ALC269_FIXUP_LIFEBOOK_EXTMIC,
ALC269_FIXUP_LIFEBOOK_HP_PIN,
ALC269_FIXUP_AMIC, ALC269_FIXUP_AMIC,
ALC269_FIXUP_DMIC, ALC269_FIXUP_DMIC,
ALC269VB_FIXUP_AMIC, ALC269VB_FIXUP_AMIC,
...@@ -4517,6 +4526,13 @@ static const struct hda_fixup alc269_fixups[] = { ...@@ -4517,6 +4526,13 @@ static const struct hda_fixup alc269_fixups[] = {
{ } { }
}, },
}, },
[ALC269_FIXUP_LIFEBOOK_HP_PIN] = {
.type = HDA_FIXUP_PINS,
.v.pins = (const struct hda_pintbl[]) {
{ 0x21, 0x0221102f }, /* HP out */
{ }
},
},
[ALC269_FIXUP_AMIC] = { [ALC269_FIXUP_AMIC] = {
.type = HDA_FIXUP_PINS, .type = HDA_FIXUP_PINS,
.v.pins = (const struct hda_pintbl[]) { .v.pins = (const struct hda_pintbl[]) {
...@@ -5010,6 +5026,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { ...@@ -5010,6 +5026,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX), SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK), SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC), SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC), SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC), SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
...@@ -5217,6 +5234,16 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { ...@@ -5217,6 +5234,16 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
{0x17, 0x40000000}, {0x17, 0x40000000},
{0x1d, 0x40700001}, {0x1d, 0x40700001},
{0x21, 0x02211050}), {0x21, 0x02211050}),
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
{0x12, 0x90a60140},
{0x13, 0x40000000},
{0x14, 0x90170110},
{0x19, 0x411111f0},
{0x1a, 0x411111f0},
{0x1b, 0x411111f0},
{0x1d, 0x40700001},
{0x1e, 0x411111f0},
{0x21, 0x02211020}),
SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4, SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
{0x12, 0x90a60130}, {0x12, 0x90a60130},
{0x13, 0x40000000}, {0x13, 0x40000000},
......
...@@ -192,6 +192,7 @@ static const struct rc_config { ...@@ -192,6 +192,7 @@ static const struct rc_config {
{ USB_ID(0x041e, 0x3040), 2, 2, 6, 6, 2, 0x6e91 }, /* Live! 24-bit */ { USB_ID(0x041e, 0x3040), 2, 2, 6, 6, 2, 0x6e91 }, /* Live! 24-bit */
{ USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */ { USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */
{ USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */ { USB_ID(0x041e, 0x30df), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
{ USB_ID(0x041e, 0x3237), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 Pro */
{ USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */ { USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
}; };
......
...@@ -1113,8 +1113,13 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs, ...@@ -1113,8 +1113,13 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip) bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
{ {
/* MS Lifecam HD-5000 doesn't support reading the sample rate. */ /* devices which do not support reading the sample rate. */
return chip->usb_id == USB_ID(0x045E, 0x076D); switch (chip->usb_id) {
case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
return true;
}
return false;
} }
/* Marantz/Denon USB DACs need a vendor cmd to switch /* Marantz/Denon USB DACs need a vendor cmd to switch
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册