diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/iio/adc/vf610_adc.c linux-libre-3.18.66-gnu/drivers/iio/adc/vf610_adc.c
--- linux-libre-3.18.65-gnu/drivers/iio/adc/vf610_adc.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/iio/adc/vf610_adc.c	2017-08-16 16:35:42.000000000 -0400
@@ -71,7 +71,7 @@
 #define VF610_ADC_ADSTS_MASK		0x300
 #define VF610_ADC_ADLPC_EN		0x80
 #define VF610_ADC_ADHSC_EN		0x400
-#define VF610_ADC_REFSEL_VALT		0x100
+#define VF610_ADC_REFSEL_VALT		0x800
 #define VF610_ADC_REFSEL_VBG		0x1000
 #define VF610_ADC_ADTRG_HARD		0x2000
 #define VF610_ADC_AVGS_8		0x4000
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/iio/light/tsl2563.c linux-libre-3.18.66-gnu/drivers/iio/light/tsl2563.c
--- linux-libre-3.18.65-gnu/drivers/iio/light/tsl2563.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/iio/light/tsl2563.c	2017-08-16 16:35:42.000000000 -0400
@@ -626,7 +626,7 @@ static irqreturn_t tsl2563_event_handler
 	struct tsl2563_chip *chip = iio_priv(dev_info);
 
 	iio_push_event(dev_info,
-		       IIO_UNMOD_EVENT_CODE(IIO_LIGHT,
+		       IIO_UNMOD_EVENT_CODE(IIO_INTENSITY,
 					    0,
 					    IIO_EV_TYPE_THRESH,
 					    IIO_EV_DIR_EITHER),
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c linux-libre-3.18.66-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c
--- linux-libre-3.18.65-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c	2017-08-16 16:35:42.000000000 -0400
@@ -200,8 +200,6 @@ static int exynos_irq_request_resources(
 
 	spin_unlock_irqrestore(&bank->slock, flags);
 
-	exynos_irq_unmask(irqd);
-
 	return 0;
 }
 
@@ -222,8 +220,6 @@ static void exynos_irq_release_resources
 	shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
 	mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
 
-	exynos_irq_mask(irqd);
-
 	spin_lock_irqsave(&bank->slock, flags);
 
 	con = readl(d->virt_base + reg_con);
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c linux-libre-3.18.66-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c
--- linux-libre-3.18.65-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c	2017-08-16 16:35:42.000000000 -0400
@@ -800,6 +800,7 @@ static const struct sunxi_desc_pin sun4i
 		  SUNXI_FUNCTION(0x2, "lcd1"),		/* D16 */
 		  SUNXI_FUNCTION(0x3, "pata"),		/* ATAD12 */
 		  SUNXI_FUNCTION(0x4, "keypad"),	/* IN6 */
+		  SUNXI_FUNCTION(0x5, "sim"),		/* DET */
 		  SUNXI_FUNCTION_IRQ(0x6, 16),		/* EINT16 */
 		  SUNXI_FUNCTION(0x7, "csi1")),		/* D16 */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17),
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/staging/iio/resolver/ad2s1210.c linux-libre-3.18.66-gnu/drivers/staging/iio/resolver/ad2s1210.c
--- linux-libre-3.18.65-gnu/drivers/staging/iio/resolver/ad2s1210.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/staging/iio/resolver/ad2s1210.c	2017-08-16 16:35:42.000000000 -0400
@@ -466,7 +466,7 @@ static int ad2s1210_read_raw(struct iio_
 			     long m)
 {
 	struct ad2s1210_state *st = iio_priv(indio_dev);
-	bool negative;
+	u16 negative;
 	int ret = 0;
 	u16 pos;
 	s16 vel;
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/core/hcd.c linux-libre-3.18.66-gnu/drivers/usb/core/hcd.c
--- linux-libre-3.18.65-gnu/drivers/usb/core/hcd.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/core/hcd.c	2017-08-16 16:35:42.000000000 -0400
@@ -2398,6 +2398,8 @@ void usb_hc_died (struct usb_hcd *hcd)
 	}
 	if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
 		hcd = hcd->shared_hcd;
+		clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
+		set_bit(HCD_FLAG_DEAD, &hcd->flags);
 		if (hcd->rh_registered) {
 			clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
 
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/core/hub.c linux-libre-3.18.66-gnu/drivers/usb/core/hub.c
--- linux-libre-3.18.65-gnu/drivers/usb/core/hub.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/core/hub.c	2017-08-16 16:35:42.000000000 -0400
@@ -4623,7 +4623,8 @@ hub_power_remaining (struct usb_hub *hub
 static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
 		u16 portchange)
 {
-	int status, i;
+	int status = -ENODEV;
+	int i;
 	unsigned unit_load;
 	struct usb_device *hdev = hub->hdev;
 	struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
@@ -4823,9 +4824,10 @@ loop:
 
 done:
 	hub_port_disable(hub, port1, 1);
-	if (hcd->driver->relinquish_port && !hub->hdev->parent)
-		hcd->driver->relinquish_port(hcd, port1);
-
+	if (hcd->driver->relinquish_port && !hub->hdev->parent) {
+		if (status != -ENOTCONN && status != -ENODEV)
+			hcd->driver->relinquish_port(hcd, port1);
+	}
 }
 
 /* Handle physical or logical connection change events.
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/core/quirks.c linux-libre-3.18.66-gnu/drivers/usb/core/quirks.c
--- linux-libre-3.18.65-gnu/drivers/usb/core/quirks.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/core/quirks.c	2017-08-16 16:35:42.000000000 -0400
@@ -143,6 +143,9 @@ static const struct usb_device_id usb_qu
 	/* appletouch */
 	{ USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },
 
+	/* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */
+	{ USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM },
+
 	/* Avision AV600U */
 	{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
 	  USB_QUIRK_STRING_FETCH_255 },
@@ -242,6 +245,7 @@ static const struct usb_device_id usb_am
 	{ USB_DEVICE(0x093a, 0x2500), .driver_info = USB_QUIRK_RESET_RESUME },
 	{ USB_DEVICE(0x093a, 0x2510), .driver_info = USB_QUIRK_RESET_RESUME },
 	{ USB_DEVICE(0x093a, 0x2521), .driver_info = USB_QUIRK_RESET_RESUME },
+	{ USB_DEVICE(0x03f0, 0x2b4a), .driver_info = USB_QUIRK_RESET_RESUME },
 
 	/* Logitech Optical Mouse M90/M100 */
 	{ USB_DEVICE(0x046d, 0xc05a), .driver_info = USB_QUIRK_RESET_RESUME },
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/host/pci-quirks.c linux-libre-3.18.66-gnu/drivers/usb/host/pci-quirks.c
--- linux-libre-3.18.65-gnu/drivers/usb/host/pci-quirks.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/host/pci-quirks.c	2017-08-16 16:35:42.000000000 -0400
@@ -89,6 +89,7 @@ enum amd_chipset_gen {
 	AMD_CHIPSET_HUDSON2,
 	AMD_CHIPSET_BOLTON,
 	AMD_CHIPSET_YANGTZE,
+	AMD_CHIPSET_TAISHAN,
 	AMD_CHIPSET_UNKNOWN,
 };
 
@@ -132,6 +133,11 @@ static int amd_chipset_sb_type_init(stru
 			pinfo->sb_type.gen = AMD_CHIPSET_SB700;
 		else if (rev >= 0x40 && rev <= 0x4f)
 			pinfo->sb_type.gen = AMD_CHIPSET_SB800;
+	}
+	pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
+					  0x145c, NULL);
+	if (pinfo->smbus_dev) {
+		pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
 	} else {
 		pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
 				PCI_DEVICE_ID_AMD_HUDSON2_SMBUS, NULL);
@@ -253,11 +259,12 @@ int usb_hcd_amd_remote_wakeup_quirk(stru
 {
 	/* Make sure amd chipset type has already been initialized */
 	usb_amd_find_chipset_info();
-	if (amd_chipset.sb_type.gen != AMD_CHIPSET_YANGTZE)
-		return 0;
-
-	dev_dbg(&pdev->dev, "QUIRK: Enable AMD remote wakeup fix\n");
-	return 1;
+	if (amd_chipset.sb_type.gen == AMD_CHIPSET_YANGTZE ||
+	    amd_chipset.sb_type.gen == AMD_CHIPSET_TAISHAN) {
+		dev_dbg(&pdev->dev, "QUIRK: Enable AMD remote wakeup fix\n");
+		return 1;
+	}
+	return 0;
 }
 EXPORT_SYMBOL_GPL(usb_hcd_amd_remote_wakeup_quirk);
 
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/musb/musb_host.c linux-libre-3.18.66-gnu/drivers/usb/musb/musb_host.c
--- linux-libre-3.18.65-gnu/drivers/usb/musb/musb_host.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/musb/musb_host.c	2017-08-16 16:35:42.000000000 -0400
@@ -1294,6 +1294,7 @@ void musb_host_tx(struct musb *musb, u8
 					| MUSB_TXCSR_TXPKTRDY);
 		}
 			return;
+		mdelay(1);
 	}
 
 done:
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/serial/cp210x.c linux-libre-3.18.66-gnu/drivers/usb/serial/cp210x.c
--- linux-libre-3.18.65-gnu/drivers/usb/serial/cp210x.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/serial/cp210x.c	2017-08-16 16:35:42.000000000 -0400
@@ -133,6 +133,7 @@ static const struct usb_device_id id_tab
 	{ USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
 	{ USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
 	{ USB_DEVICE(0x10C4, 0x8A5E) }, /* CEL EM3588 ZigBee USB Stick Long Range */
+	{ USB_DEVICE(0x10C4, 0x8B34) }, /* Qivicon ZigBee USB Radio Stick */
 	{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
 	{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
 	{ USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/serial/option.c linux-libre-3.18.66-gnu/drivers/usb/serial/option.c
--- linux-libre-3.18.65-gnu/drivers/usb/serial/option.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/serial/option.c	2017-08-16 16:35:42.000000000 -0400
@@ -2020,6 +2020,8 @@ static const struct usb_device_id option
 	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d04, 0xff) },			/* D-Link DWM-158 */
 	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e19, 0xff),			/* D-Link DWM-221 B1 */
 	  .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff),			/* D-Link DWM-222 */
+	  .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
 	{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
 	{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
 	{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */
diff -druNp --no-dereference linux-libre-3.18.65-gnu/drivers/usb/storage/unusual_uas.h linux-libre-3.18.66-gnu/drivers/usb/storage/unusual_uas.h
--- linux-libre-3.18.65-gnu/drivers/usb/storage/unusual_uas.h	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/drivers/usb/storage/unusual_uas.h	2017-08-16 16:35:42.000000000 -0400
@@ -113,9 +113,9 @@ UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x99
 /* Reported-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> */
 UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999,
 		"Initio Corporation",
-		"",
+		"INIC-3069",
 		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
-		US_FL_NO_ATA_1X),
+		US_FL_NO_ATA_1X | US_FL_IGNORE_RESIDUE),
 
 /* Reported-by: Tom Arild Naess <tanaess@gmail.com> */
 UNUSUAL_DEV(0x152d, 0x0539, 0x0000, 0x9999,
diff -druNp --no-dereference linux-libre-3.18.65-gnu/fs/fuse/file.c linux-libre-3.18.66-gnu/fs/fuse/file.c
--- linux-libre-3.18.65-gnu/fs/fuse/file.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/fs/fuse/file.c	2017-08-16 16:35:42.000000000 -0400
@@ -54,7 +54,7 @@ struct fuse_file *fuse_file_alloc(struct
 {
 	struct fuse_file *ff;
 
-	ff = kmalloc(sizeof(struct fuse_file), GFP_KERNEL);
+	ff = kzalloc(sizeof(struct fuse_file), GFP_KERNEL);
 	if (unlikely(!ff))
 		return NULL;
 
diff -druNp --no-dereference linux-libre-3.18.65-gnu/fs/nfs/Kconfig linux-libre-3.18.66-gnu/fs/nfs/Kconfig
--- linux-libre-3.18.65-gnu/fs/nfs/Kconfig	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/fs/nfs/Kconfig	2017-08-16 16:35:42.000000000 -0400
@@ -121,6 +121,7 @@ config PNFS_FILE_LAYOUT
 config PNFS_BLOCK
 	tristate
 	depends on NFS_V4_1 && BLK_DEV_DM
+	depends on 64BIT || LBDAF
 	default NFS_V4
 
 config PNFS_OBJLAYOUT
diff -druNp --no-dereference linux-libre-3.18.65-gnu/Makefile linux-libre-3.18.66-gnu/Makefile
--- linux-libre-3.18.65-gnu/Makefile	2017-08-13 12:35:53.000000000 -0400
+++ linux-libre-3.18.66-gnu/Makefile	2017-08-16 18:35:26.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 18
-SUBLEVEL = 65
+SUBLEVEL = 66
 EXTRAVERSION =-gnu
 NAME = Diseased Newt
 
diff -druNp --no-dereference linux-libre-3.18.65-gnu/mm/page_alloc.c linux-libre-3.18.66-gnu/mm/page_alloc.c
--- linux-libre-3.18.65-gnu/mm/page_alloc.c	2017-08-12 22:24:35.000000000 -0400
+++ linux-libre-3.18.66-gnu/mm/page_alloc.c	2017-08-16 16:35:42.000000000 -0400
@@ -6424,7 +6424,7 @@ int alloc_contig_range(unsigned long sta
 
 	/* Make sure the range is really isolated. */
 	if (test_pages_isolated(outer_start, end, false)) {
-		pr_info("%s: [%lx, %lx) PFNs busy\n",
+		pr_info_ratelimited("%s: [%lx, %lx) PFNs busy\n",
 			__func__, outer_start, end);
 		ret = -EBUSY;
 		goto done;
