--- /dev/null
+From 023d8218ec0dfc30e11d4ec54f640e8f127d1fbe Mon Sep 17 00:00:00 2001
+From: Hyungwon Hwang <hyungwon.hwang7@gmail.com>
+Date: Wed, 13 Apr 2016 09:27:39 +0900
+Subject: ALSA: hda - Fix regression of monitor_present flag in eld proc file
+
+From: Hyungwon Hwang <hyungwon.hwang7@gmail.com>
+
+commit 023d8218ec0dfc30e11d4ec54f640e8f127d1fbe upstream.
+
+The commit [bd48128539ab: ALSA: hda - Fix forgotten HDMI
+monitor_present update] covered the missing update of monitor_present
+flag, but this caused a regression for devices without the i915 eld
+notifier. Since the old code supposed that pin_eld->monitor_present
+was updated by the caller side, the hdmi_present_sense_via_verbs()
+doesn't update the temporary eld->monitor_present but only
+pin_eld->monitor_present, which is now overridden in update_eld().
+
+The fix is to update pin_eld->monitor_present as well before calling
+update_eld().
+
+Note that this may still leave monitor_present flag in an inconsistent
+state when the driver repolls, but this is at least the old behavior.
+More proper fix will follow in the later patch.
+
+Fixes: bd48128539ab ('ALSA: hda - Fix forgotten HDMI monitor_present update')
+Signed-off-by: Hyungwon Hwang <hyungwon.hwang7@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_hdmi.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/sound/pci/hda/patch_hdmi.c
++++ b/sound/pci/hda/patch_hdmi.c
+@@ -1623,6 +1623,8 @@ static bool hdmi_present_sense_via_verbs
+
+ mutex_lock(&per_pin->lock);
+ pin_eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE);
++ eld->monitor_present = pin_eld->monitor_present;
++
+ if (pin_eld->monitor_present)
+ eld->eld_valid = !!(present & AC_PINSENSE_ELDV);
+ else
--- /dev/null
+From c636b95ec5980345674ad7960a3c67135a84b687 Mon Sep 17 00:00:00 2001
+From: Sven Eckelmann <sven@narfation.org>
+Date: Mon, 11 Apr 2016 16:55:26 +0200
+Subject: ALSA: hda/realtek - Enable the ALC292 dock fixup on the Thinkpad T460s
+
+From: Sven Eckelmann <sven@narfation.org>
+
+commit c636b95ec5980345674ad7960a3c67135a84b687 upstream.
+
+The Lenovo Thinkpad T460s requires the alc_fixup_tpt440_dock as well in
+order to get working sound output on the docking stations headphone jack.
+
+Patch tested on a Thinkpad T460s (20F9CT01WW) using a ThinkPad Ultradock
+on kernel 4.4.6.
+
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
+Tested-by: Simon Wunderlich <sw@simonwunderlich.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -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_fix
+ { }
+ },
+ },
++ [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
+ 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 alc2
+ {.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 \
--- /dev/null
+From b4203ff5464da00b7812e7b480192745b0d66bbf Mon Sep 17 00:00:00 2001
+From: Dennis Kadioglu <denk@post.com>
+Date: Wed, 6 Apr 2016 08:39:01 +0200
+Subject: ALSA: usb-audio: Add a quirk for Plantronics BT300
+
+From: Dennis Kadioglu <denk@post.com>
+
+commit b4203ff5464da00b7812e7b480192745b0d66bbf upstream.
+
+Plantronics BT300 does not support reading the sample rate which leads
+to many lines of "cannot get freq at ep 0x1". This patch adds the USB
+ID of the BT300 to quirks.c and avoids those error messages.
+
+Signed-off-by: Dennis Kadioglu <denk@post.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/quirks.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/usb/quirks.c
++++ b/sound/usb/quirks.c
+@@ -1135,6 +1135,7 @@ bool snd_usb_get_sample_rate_quirk(struc
+ 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) */
--- /dev/null
+From f03b24a851d32ca85dacab01785b24a7ee717d37 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 4 Apr 2016 11:47:50 +0200
+Subject: ALSA: usb-audio: Add a sample rate quirk for Phoenix Audio TMX320
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit f03b24a851d32ca85dacab01785b24a7ee717d37 upstream.
+
+Phoenix Audio TMX320 gives the similar error when the sample rate is
+asked:
+ usb 2-1.3: 2:1: cannot get freq at ep 0x85
+ usb 2-1.3: 1:1: cannot get freq at ep 0x2
+ ....
+
+Add the corresponding USB-device ID (1de7:0014) to
+snd_usb_get_sample_rate_quirk() list.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=110221
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/quirks.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/usb/quirks.c
++++ b/sound/usb/quirks.c
+@@ -1138,6 +1138,7 @@ bool snd_usb_get_sample_rate_quirk(struc
+ 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;
+ }
--- /dev/null
+From adcdd0d5a1cb779f6d455ae70882c19c527627a8 Mon Sep 17 00:00:00 2001
+From: Kailang Yang <kailang@realtek.com>
+Date: Tue, 12 Apr 2016 10:55:03 +0800
+Subject: ALSA: usb-audio: Skip volume controls triggers hangup on Dell USB Dock
+
+From: Kailang Yang <kailang@realtek.com>
+
+commit adcdd0d5a1cb779f6d455ae70882c19c527627a8 upstream.
+
+This is Dell usb dock audio workaround.
+It was fixed the master volume keep lower.
+
+[Some background: the patch essentially skips the controls of a couple
+ of FU volumes. Although the firmware exposes the dB and the value
+ information via the usb descriptor, changing the values (we set the
+ min volume as default) screws up the device. Although this has been
+ fixed in the newer firmware, the devices are shipped with the old
+ firmware, thus we need the workaround in the driver side. -- tiwai]
+
+Signed-off-by: Kailang Yang <kailang@realtek.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/mixer_maps.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- a/sound/usb/mixer_maps.c
++++ b/sound/usb/mixer_maps.c
+@@ -349,6 +349,16 @@ static struct usbmix_name_map bose_compa
+ };
+
+ /*
++ * 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
+ */
+
+@@ -431,6 +441,10 @@ static struct usbmix_ctl_map usbmix_ctl_
+ .map = aureon_51_2_map,
+ },
+ {
++ .id = USB_ID(0x0bda, 0x4014),
++ .map = dell_alc4020_map,
++ },
++ {
+ .id = USB_ID(0x0dba, 0x1000),
+ .map = mbox1_map,
+ },
--- /dev/null
+From 972e6a993f278b416a8ee3ec65475724fc36feb2 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Wed, 23 Mar 2016 12:17:09 -0400
+Subject: HID: usbhid: fix inconsistent reset/resume/reset-resume behavior
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 972e6a993f278b416a8ee3ec65475724fc36feb2 upstream.
+
+The usbhid driver has inconsistently duplicated code in its post-reset,
+resume, and reset-resume pathways.
+
+ reset-resume doesn't check HID_STARTED before trying to
+ restart the I/O queues.
+
+ resume fails to clear the HID_SUSPENDED flag if HID_STARTED
+ isn't set.
+
+ resume calls usbhid_restart_queues() with usbhid->lock held
+ and the others call it without holding the lock.
+
+The first item in particular causes a problem following a reset-resume
+if the driver hasn't started up its I/O. URB submission fails because
+usbhid->urbin is NULL, and this triggers an unending reset-retry loop.
+
+This patch fixes the problem by creating a new subroutine,
+hid_restart_io(), to carry out all the common activities. It also
+adds some checks that were missing in the original code:
+
+ After a reset, there's no need to clear any halted endpoints.
+
+ After a resume, if a reset is pending there's no need to
+ restart any I/O until the reset is finished.
+
+ After a resume, if the interrupt-IN endpoint is halted there's
+ no need to submit the input URB until the halt has been
+ cleared.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Daniel Fraga <fragabr@gmail.com>
+Tested-by: Daniel Fraga <fragabr@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/usbhid/hid-core.c | 73 +++++++++++++++++++++---------------------
+ 1 file changed, 37 insertions(+), 36 deletions(-)
+
+--- a/drivers/hid/usbhid/hid-core.c
++++ b/drivers/hid/usbhid/hid-core.c
+@@ -951,14 +951,6 @@ static int usbhid_output_report(struct h
+ return ret;
+ }
+
+-static void usbhid_restart_queues(struct usbhid_device *usbhid)
+-{
+- if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl))
+- usbhid_restart_out_queue(usbhid);
+- if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
+- usbhid_restart_ctrl_queue(usbhid);
+-}
+-
+ static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
+ {
+ struct usbhid_device *usbhid = hid->driver_data;
+@@ -1404,6 +1396,37 @@ static void hid_cease_io(struct usbhid_d
+ usb_kill_urb(usbhid->urbout);
+ }
+
++static void hid_restart_io(struct hid_device *hid)
++{
++ struct usbhid_device *usbhid = hid->driver_data;
++ int clear_halt = test_bit(HID_CLEAR_HALT, &usbhid->iofl);
++ int reset_pending = test_bit(HID_RESET_PENDING, &usbhid->iofl);
++
++ spin_lock_irq(&usbhid->lock);
++ clear_bit(HID_SUSPENDED, &usbhid->iofl);
++ usbhid_mark_busy(usbhid);
++
++ if (clear_halt || reset_pending)
++ schedule_work(&usbhid->reset_work);
++ usbhid->retry_delay = 0;
++ spin_unlock_irq(&usbhid->lock);
++
++ if (reset_pending || !test_bit(HID_STARTED, &usbhid->iofl))
++ return;
++
++ if (!clear_halt) {
++ if (hid_start_in(hid) < 0)
++ hid_io_error(hid);
++ }
++
++ spin_lock_irq(&usbhid->lock);
++ if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl))
++ usbhid_restart_out_queue(usbhid);
++ if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
++ usbhid_restart_ctrl_queue(usbhid);
++ spin_unlock_irq(&usbhid->lock);
++}
++
+ /* Treat USB reset pretty much the same as suspend/resume */
+ static int hid_pre_reset(struct usb_interface *intf)
+ {
+@@ -1453,14 +1476,14 @@ static int hid_post_reset(struct usb_int
+ return 1;
+ }
+
++ /* No need to do another reset or clear a halted endpoint */
+ spin_lock_irq(&usbhid->lock);
+ clear_bit(HID_RESET_PENDING, &usbhid->iofl);
++ clear_bit(HID_CLEAR_HALT, &usbhid->iofl);
+ spin_unlock_irq(&usbhid->lock);
+ hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0);
+- status = hid_start_in(hid);
+- if (status < 0)
+- hid_io_error(hid);
+- usbhid_restart_queues(usbhid);
++
++ hid_restart_io(hid);
+
+ return 0;
+ }
+@@ -1483,25 +1506,9 @@ void usbhid_put_power(struct hid_device
+ #ifdef CONFIG_PM
+ static int hid_resume_common(struct hid_device *hid, bool driver_suspended)
+ {
+- struct usbhid_device *usbhid = hid->driver_data;
+- int status;
+-
+- spin_lock_irq(&usbhid->lock);
+- clear_bit(HID_SUSPENDED, &usbhid->iofl);
+- usbhid_mark_busy(usbhid);
+-
+- if (test_bit(HID_CLEAR_HALT, &usbhid->iofl) ||
+- test_bit(HID_RESET_PENDING, &usbhid->iofl))
+- schedule_work(&usbhid->reset_work);
+- usbhid->retry_delay = 0;
+-
+- usbhid_restart_queues(usbhid);
+- spin_unlock_irq(&usbhid->lock);
+-
+- status = hid_start_in(hid);
+- if (status < 0)
+- hid_io_error(hid);
++ int status = 0;
+
++ hid_restart_io(hid);
+ if (driver_suspended && hid->driver && hid->driver->resume)
+ status = hid->driver->resume(hid);
+ return status;
+@@ -1570,12 +1577,8 @@ static int hid_suspend(struct usb_interf
+ static int hid_resume(struct usb_interface *intf)
+ {
+ struct hid_device *hid = usb_get_intfdata (intf);
+- struct usbhid_device *usbhid = hid->driver_data;
+ int status;
+
+- if (!test_bit(HID_STARTED, &usbhid->iofl))
+- return 0;
+-
+ status = hid_resume_common(hid, true);
+ dev_dbg(&intf->dev, "resume status %d\n", status);
+ return 0;
+@@ -1584,10 +1587,8 @@ static int hid_resume(struct usb_interfa
+ static int hid_reset_resume(struct usb_interface *intf)
+ {
+ struct hid_device *hid = usb_get_intfdata(intf);
+- struct usbhid_device *usbhid = hid->driver_data;
+ int status;
+
+- clear_bit(HID_SUSPENDED, &usbhid->iofl);
+ status = hid_post_reset(intf);
+ if (status >= 0 && hid->driver && hid->driver->reset_resume) {
+ int ret = hid->driver->reset_resume(hid);
--- /dev/null
+From 580549ef6b3e3fb3b958de490ca99f43a089a2cf Mon Sep 17 00:00:00 2001
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Fri, 25 Mar 2016 15:26:55 +0100
+Subject: HID: wacom: fix Bamboo ONE oops
+
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+
+commit 580549ef6b3e3fb3b958de490ca99f43a089a2cf upstream.
+
+Looks like recent changes in the Wacom driver made the Bamboo ONE crashes.
+The tablet behaves as if it was a regular Bamboo device with pen, touch
+and pad, but there is no physical pad connected to it.
+The weird part is that the pad is still sending events and given that
+there is no input node connected to it, we get anull pointer exception.
+
+Link: https://bugzilla.redhat.com/show_bug.cgi?id=1317116
+
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Acked-by: Ping Cheng <pingc@wacom.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/wacom_wac.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/drivers/hid/wacom_wac.c
++++ b/drivers/hid/wacom_wac.c
+@@ -2409,6 +2409,17 @@ void wacom_setup_device_quirks(struct wa
+ }
+
+ /*
++ * Hack for the Bamboo One:
++ * the device presents a PAD/Touch interface as most Bamboos and even
++ * sends ghosts PAD data on it. However, later, we must disable this
++ * ghost interface, and we can not detect it unless we set it here
++ * to WACOM_DEVICETYPE_PAD or WACOM_DEVICETYPE_TOUCH.
++ */
++ if (features->type == BAMBOO_PEN &&
++ features->pktlen == WACOM_PKGLEN_BBTOUCH3)
++ features->device_type |= WACOM_DEVICETYPE_PAD;
++
++ /*
+ * Raw Wacom-mode pen and touch events both come from interface
+ * 0, whose HID descriptor has an application usage of 0xFF0D
+ * (i.e., WACOM_VENDORDEFINED_PEN). We route pen packets back
arm64-replace-read_lock-to-rcu-lock-in-call_step_hook.patch
mmc-sdhci-fix-regression-setting-power-on-trats2-board.patch
mmc-sdhci-pci-add-support-and-pci-ids-for-more-broxton-host-controllers.patch
+alsa-hda-fix-regression-of-monitor_present-flag-in-eld-proc-file.patch
+alsa-hda-realtek-enable-the-alc292-dock-fixup-on-the-thinkpad-t460s.patch
+alsa-usb-audio-add-a-sample-rate-quirk-for-phoenix-audio-tmx320.patch
+alsa-usb-audio-add-a-quirk-for-plantronics-bt300.patch
+alsa-usb-audio-skip-volume-controls-triggers-hangup-on-dell-usb-dock.patch
+hid-wacom-fix-bamboo-one-oops.patch
+hid-usbhid-fix-inconsistent-reset-resume-reset-resume-behavior.patch