--- /dev/null
+From ncopa@alpinelinux.org Thu Oct 18 17:16:27 2018
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Thu, 18 Oct 2018 17:04:17 +0200
+Subject: HID: quirks: fix support for Apple Magic Keyboards
+To: linux stable <stable@vger.kernel.org>
+Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>, Natanael Copa <ncopa@alpinelinux.org>
+Message-ID: <20181018150417.22354-1-ncopa@alpinelinux.org>
+
+From: Natanael Copa <ncopa@alpinelinux.org>
+
+Commit b6cc0ba2cbf4 (HID: add support for Apple Magic Keyboards)
+backported support for the Magic Keyboard over Bluetooth, but did not
+add the BT_VENDOR_ID_APPLE to hid_have_special_driver[] so the hid-apple
+driver is never loaded and Fn key does not work at all.
+
+Adding BT_VENDOR_ID_APPLE to hid_have_special_driver[] is not needed
+after commit e04a0442d33b (HID: core: remove the absolute need of
+hid_have_special_driver[]), so 4.16 kernels and newer does not need it.
+
+Fixes: b6cc0ba2cbf4 (HID: add support for Apple Magic Keyboards)
+Bugzilla-id: https://bugzilla.kernel.org/show_bug.cgi?id=99881
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+
+Benjamin, thank you for your help with this.
+
+I believe this is needed for both linux-4.14.y and linux-4.9.y.
+
+ drivers/hid/hid-core.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1853,6 +1853,9 @@ static const struct hid_device_id hid_ha
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_JIS) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI) },
++ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_ANSI) },
++ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_ANSI) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
+ { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_NOTEBOOK_KEYBOARD) },
--- /dev/null
+From daa35bd95634a2a2d72d1049c93576a02711cb1a Mon Sep 17 00:00:00 2001
+From: Stephen Warren <swarren@nvidia.com>
+Date: Wed, 16 Aug 2017 14:30:10 -0600
+Subject: usb: gadget: serial: fix oops when data rx'd after close
+
+From: Stephen Warren <swarren@nvidia.com>
+
+commit daa35bd95634a2a2d72d1049c93576a02711cb1a upstream.
+
+When the gadget serial device has no associated TTY, do not pass any
+received data into the TTY layer for processing; simply drop it instead.
+This prevents the TTY layer from calling back into the gadget serial
+driver, which will then crash in e.g. gs_write_room() due to lack of
+gadget serial device to TTY association (i.e. a NULL pointer dereference).
+
+Signed-off-by: Stephen Warren <swarren@nvidia.com>
+Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
+Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/gadget/function/u_serial.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/gadget/function/u_serial.c
++++ b/drivers/usb/gadget/function/u_serial.c
+@@ -537,7 +537,7 @@ static void gs_rx_push(unsigned long _po
+ }
+
+ /* push data to (open) tty */
+- if (req->actual) {
++ if (req->actual && tty) {
+ char *packet = req->buf;
+ unsigned size = req->actual;
+ unsigned n;