sound fixes for 4.6-rc4
we've had a very calm development cycle, so far. Here are the few fixes for HD-audio and USB-audio, all of which are small and easy. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJXD2IxAAoJEGwxgFQ9KSmkckEQAJUw0T+6LGzvt91R1NUTvVc2 N5UAVWblefXL32siYFVNQ7H1PJMrCLdgMb6jBXUYvWxSPKtn37v/RAdSVC3LFTq1 V8tbmEkMZJzNECTeLH/wnj4reRjXO/hS1GibKx7ZdPGEaYWZV+T0kHkufu7s/KmC THNspUwchfgcKc4BNkVm/ateypkPbuhA/hq6jB+XwjSE46AaZYVvDwy7uIbSEJhL kODppXrOLp0qjUtU2T+vZXFghmv2d4FCt42R80KNwREQMzq1KNprP7uG64sz4hFw Er/OTuhRezBssgr2xHvqF0mFQAjSMSJDB2j3tQGOaWjWR0aDHM8KKP9qjl4iWQ9e FJ7fxmiPJqEd4Ixm+2KZXEfWk8dpF+d/6tPgi43oxz3svKwMKbS4CRANIOJvTxvQ CCZkyqeySw6RR0OSXb2wwQlv39CEnAX872JpLpwH7kWLn27q8Prxojm5SH6iFJPv fHVgDw9vZ2QWE6fN2sPZFP/4TQ39XWptt+gTFV6r2aX9OkYWv4MFGdypMxOOiG2P TnyHIczqwjz/9f8OaI2F0U+bXmFC6IaC8tTBht1abhMcqe3jfpJDWccuHX7QNDGn 6Kcwb1pfgylk2NqAf2jc+X8LPwI/mqtMRNsYu6hOedVSwuSF76xDlafhdyfS8Ygp IivXk+F+YdpX85fwVffp =PYqq -----END PGP SIGNATURE----- Merge tag 'sound-4.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "We've had a very calm development cycle, so far. Here are the few fixes for HD-audio and USB-audio, all of which are small and easy" * tag 'sound-4.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - Fix inconsistent monitor_present state until repoll ALSA: hda - Fix regression of monitor_present flag in eld proc file ALSA: usb-audio: Skip volume controls triggers hangup on Dell USB Dock ALSA: hda/realtek - Enable the ALC292 dock fixup on the Thinkpad T460s ALSA: sscape: Use correct format identifier for size_t ALSA: usb-audio: Add a quirk for Plantronics BT300 ALSA: usb-audio: Add a sample rate quirk for Phoenix Audio TMX320 ALSA: hda - Bind with i915 only when Intel graphics is present
This commit is contained in:
commit
c8c52850e6
6 changed files with 45 additions and 7 deletions
|
@ -267,6 +267,18 @@ int snd_hdac_i915_register_notifier(const struct i915_audio_component_audio_ops
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_i915_register_notifier);
|
||||
|
||||
/* check whether intel graphics is present */
|
||||
static bool i915_gfx_present(void)
|
||||
{
|
||||
static struct pci_device_id ids[] = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
|
||||
.class = PCI_BASE_CLASS_DISPLAY << 16,
|
||||
.class_mask = 0xff << 16 },
|
||||
{}
|
||||
};
|
||||
return pci_dev_present(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* snd_hdac_i915_init - Initialize i915 audio component
|
||||
* @bus: HDA core bus
|
||||
|
@ -286,6 +298,9 @@ int snd_hdac_i915_init(struct hdac_bus *bus)
|
|||
struct i915_audio_component *acomp;
|
||||
int ret;
|
||||
|
||||
if (!i915_gfx_present())
|
||||
return -ENODEV;
|
||||
|
||||
acomp = kzalloc(sizeof(*acomp), GFP_KERNEL);
|
||||
if (!acomp)
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -591,7 +591,7 @@ static int sscape_upload_microcode(struct snd_card *card, int version)
|
|||
}
|
||||
err = upload_dma_data(sscape, init_fw->data, init_fw->size);
|
||||
if (err == 0)
|
||||
snd_printk(KERN_INFO "sscape: MIDI firmware loaded %d KBs\n",
|
||||
snd_printk(KERN_INFO "sscape: MIDI firmware loaded %zu KBs\n",
|
||||
init_fw->size >> 10);
|
||||
|
||||
release_firmware(init_fw);
|
||||
|
|
|
@ -1396,7 +1396,6 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
|
|||
struct hda_codec *codec = per_pin->codec;
|
||||
struct hdmi_spec *spec = codec->spec;
|
||||
struct hdmi_eld *eld = &spec->temp_eld;
|
||||
struct hdmi_eld *pin_eld = &per_pin->sink_eld;
|
||||
hda_nid_t pin_nid = per_pin->pin_nid;
|
||||
/*
|
||||
* Always execute a GetPinSense verb here, even when called from
|
||||
|
@ -1413,15 +1412,15 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
|
|||
present = snd_hda_pin_sense(codec, pin_nid);
|
||||
|
||||
mutex_lock(&per_pin->lock);
|
||||
pin_eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE);
|
||||
if (pin_eld->monitor_present)
|
||||
eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE);
|
||||
if (eld->monitor_present)
|
||||
eld->eld_valid = !!(present & AC_PINSENSE_ELDV);
|
||||
else
|
||||
eld->eld_valid = false;
|
||||
|
||||
codec_dbg(codec,
|
||||
"HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
|
||||
codec->addr, pin_nid, pin_eld->monitor_present, eld->eld_valid);
|
||||
codec->addr, pin_nid, eld->monitor_present, eld->eld_valid);
|
||||
|
||||
if (eld->eld_valid) {
|
||||
if (spec->ops.pin_get_eld(codec, pin_nid, eld->eld_buffer,
|
||||
|
@ -1441,7 +1440,7 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
|
|||
else
|
||||
update_eld(codec, per_pin, eld);
|
||||
|
||||
ret = !repoll || !pin_eld->monitor_present || pin_eld->eld_valid;
|
||||
ret = !repoll || !eld->monitor_present || eld->eld_valid;
|
||||
|
||||
jack = snd_hda_jack_tbl_get(codec, pin_nid);
|
||||
if (jack)
|
||||
|
|
|
@ -4760,6 +4760,7 @@ enum {
|
|||
ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC280_FIXUP_HP_HEADSET_MIC,
|
||||
ALC221_FIXUP_HP_FRONT_MIC,
|
||||
ALC292_FIXUP_TPT460,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
|
@ -5409,6 +5410,12 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
{ }
|
||||
},
|
||||
},
|
||||
[ALC292_FIXUP_TPT460] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_tpt440_dock,
|
||||
.chained = true,
|
||||
.chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
|
@ -5563,7 +5570,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
|
||||
|
@ -5658,6 +5665,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
|||
{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
|
||||
{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
|
||||
{.id = ALC292_FIXUP_TPT440, .name = "tpt440"},
|
||||
{.id = ALC292_FIXUP_TPT460, .name = "tpt460"},
|
||||
{}
|
||||
};
|
||||
#define ALC225_STANDARD_PINS \
|
||||
|
|
|
@ -348,6 +348,16 @@ static struct usbmix_name_map bose_companion5_map[] = {
|
|||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
/*
|
||||
* Dell usb dock with ALC4020 codec had a firmware problem where it got
|
||||
* screwed up when zero volume is passed; just skip it as a workaround
|
||||
*/
|
||||
static const struct usbmix_name_map dell_alc4020_map[] = {
|
||||
{ 16, NULL },
|
||||
{ 19, NULL },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
/*
|
||||
* Control map entries
|
||||
*/
|
||||
|
@ -430,6 +440,10 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
|||
.id = USB_ID(0x0ccd, 0x0028),
|
||||
.map = aureon_51_2_map,
|
||||
},
|
||||
{
|
||||
.id = USB_ID(0x0bda, 0x4014),
|
||||
.map = dell_alc4020_map,
|
||||
},
|
||||
{
|
||||
.id = USB_ID(0x0dba, 0x1000),
|
||||
.map = mbox1_map,
|
||||
|
|
|
@ -1134,9 +1134,11 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
|
|||
case USB_ID(0x045E, 0x076F): /* MS Lifecam HD-6000 */
|
||||
case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
|
||||
case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */
|
||||
case USB_ID(0x047F, 0x0415): /* Plantronics BT-300 */
|
||||
case USB_ID(0x047F, 0xAA05): /* Plantronics DA45 */
|
||||
case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
|
||||
case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
|
||||
case USB_ID(0x1de7, 0x0014): /* Phoenix Audio TMX320 */
|
||||
case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue