new usb patches
diff --git a/nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch b/nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch
new file mode 100644
index 0000000..a104009
--- /dev/null
+++ b/nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch
@@ -0,0 +1,140 @@
+From foo@baz Thu May 17 18:35:38 CEST 2018
+Date: Thu, 17 May 2018 18:35:38 +0200
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: [PATCH v3] NFC: pn533: don't send USB data off of the stack
+
+It's amazing that this driver ever worked, but now that x86 doesn't
+allow USB data to be sent off of the stack, it really does not work at
+all.  Fix this up by properly allocating the data for the small
+"commands" that get sent to the device off of the stack.
+
+We do this for one command by having a whole urb just for ack messages,
+as they can be submitted in interrupt context, so we can not use
+usb_bulk_msg().  But the poweron command can sleep (and does), so use
+usb_bulk_msg() for that transfer.
+
+Reported-by: Carlos Manuel Santos <cmmpsantos@gmail.com>
+Cc: Samuel Ortiz <sameo@linux.intel.com>
+Cc: Stephen Hemminger <stephen@networkplumber.org>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/nfc/pn533/usb.c |   42 ++++++++++++++++++++++++++++++------------
+ 1 file changed, 30 insertions(+), 12 deletions(-)
+
+--- a/drivers/nfc/pn533/usb.c
++++ b/drivers/nfc/pn533/usb.c
+@@ -62,6 +62,9 @@ struct pn533_usb_phy {
+ 	struct urb *out_urb;
+ 	struct urb *in_urb;
+ 
++	struct urb *ack_urb;
++	u8 *ack_buffer;
++
+ 	struct pn533 *priv;
+ };
+ 
+@@ -150,13 +153,16 @@ static int pn533_usb_send_ack(struct pn5
+ 	struct pn533_usb_phy *phy = dev->phy;
+ 	static const u8 ack[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00};
+ 	/* spec 7.1.1.3:  Preamble, SoPC (2), ACK Code (2), Postamble */
+-	int rc;
+ 
+-	phy->out_urb->transfer_buffer = (u8 *)ack;
+-	phy->out_urb->transfer_buffer_length = sizeof(ack);
+-	rc = usb_submit_urb(phy->out_urb, flags);
++	if (!phy->ack_buffer) {
++		phy->ack_buffer = kmemdup(ack, sizeof(ack), flags);
++		if (!phy->ack_buffer)
++			return -ENOMEM;
++	}
+ 
+-	return rc;
++	phy->ack_urb->transfer_buffer = phy->ack_buffer;
++	phy->ack_urb->transfer_buffer_length = sizeof(ack);
++	return usb_submit_urb(phy->ack_urb, flags);
+ }
+ 
+ static int pn533_usb_send_frame(struct pn533 *dev,
+@@ -375,26 +381,31 @@ static int pn533_acr122_poweron_rdr(stru
+ 	/* Power on th reader (CCID cmd) */
+ 	u8 cmd[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON,
+ 		      0, 0, 0, 0, 0, 0, 3, 0, 0};
++	char *buffer;
++	int transferred;
+ 	int rc;
+ 	void *cntx;
+ 	struct pn533_acr122_poweron_rdr_arg arg;
+ 
+ 	dev_dbg(&phy->udev->dev, "%s\n", __func__);
+ 
++	buffer = kmemdup(cmd, sizeof(cmd), GFP_KERNEL);
++	if (!buffer)
++		return -ENOMEM;
++
+ 	init_completion(&arg.done);
+ 	cntx = phy->in_urb->context;  /* backup context */
+ 
+ 	phy->in_urb->complete = pn533_acr122_poweron_rdr_resp;
+ 	phy->in_urb->context = &arg;
+ 
+-	phy->out_urb->transfer_buffer = cmd;
+-	phy->out_urb->transfer_buffer_length = sizeof(cmd);
+-
+ 	print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE, 16, 1,
+ 		       cmd, sizeof(cmd), false);
+ 
+-	rc = usb_submit_urb(phy->out_urb, GFP_KERNEL);
+-	if (rc) {
++	rc = usb_bulk_msg(phy->udev, phy->out_urb->pipe, buffer, sizeof(cmd),
++			  &transferred, 0);
++	kfree(buffer);
++	if (rc || (transferred != sizeof(cmd))) {
+ 		nfc_err(&phy->udev->dev,
+ 			"Reader power on cmd error %d\n", rc);
+ 		return rc;
+@@ -490,8 +501,9 @@ static int pn533_usb_probe(struct usb_in
+ 
+ 	phy->in_urb = usb_alloc_urb(0, GFP_KERNEL);
+ 	phy->out_urb = usb_alloc_urb(0, GFP_KERNEL);
++	phy->ack_urb = usb_alloc_urb(0, GFP_KERNEL);
+ 
+-	if (!phy->in_urb || !phy->out_urb)
++	if (!phy->in_urb || !phy->out_urb || !phy->ack_urb)
+ 		goto error;
+ 
+ 	usb_fill_bulk_urb(phy->in_urb, phy->udev,
+@@ -501,7 +513,9 @@ static int pn533_usb_probe(struct usb_in
+ 	usb_fill_bulk_urb(phy->out_urb, phy->udev,
+ 			  usb_sndbulkpipe(phy->udev, out_endpoint),
+ 			  NULL, 0, pn533_send_complete, phy);
+-
++	usb_fill_bulk_urb(phy->ack_urb, phy->udev,
++			  usb_sndbulkpipe(phy->udev, out_endpoint),
++			  NULL, 0, pn533_send_complete, phy);
+ 
+ 	switch (id->driver_info) {
+ 	case PN533_DEVICE_STD:
+@@ -554,6 +568,7 @@ static int pn533_usb_probe(struct usb_in
+ error:
+ 	usb_free_urb(phy->in_urb);
+ 	usb_free_urb(phy->out_urb);
++	usb_free_urb(phy->ack_urb);
+ 	usb_put_dev(phy->udev);
+ 	kfree(in_buf);
+ 
+@@ -573,10 +588,13 @@ static void pn533_usb_disconnect(struct
+ 
+ 	usb_kill_urb(phy->in_urb);
+ 	usb_kill_urb(phy->out_urb);
++	usb_kill_urb(phy->ack_urb);
+ 
+ 	kfree(phy->in_urb->transfer_buffer);
+ 	usb_free_urb(phy->in_urb);
+ 	usb_free_urb(phy->out_urb);
++	usb_free_urb(phy->ack_urb);
++	kfree(phy->ack_buffer);
+ 
+ 	nfc_info(&interface->dev, "NXP PN533 NFC device disconnected\n");
+ }
diff --git a/series b/series
index 6f437bd..9d19248 100644
--- a/series
+++ b/series
@@ -1,5 +1,8 @@
 #
 
+usb-debugfs-cleanup.patch
+usb-debugfs.patch
+nfc-pn533-don-t-send-usb-data-off-of-the-stack.patch
 usb-serial-visor-handle-potential-invalid-device-configuration.patch
 usb_DEVICE_ATTR.patch
 
diff --git a/usb-debugfs-cleanup.patch b/usb-debugfs-cleanup.patch
new file mode 100644
index 0000000..22b9033
--- /dev/null
+++ b/usb-debugfs-cleanup.patch
@@ -0,0 +1,1553 @@
+From 7b3bcbfe0aeedeec64c83cf9655273e8f42f1c54 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Tue, 29 May 2018 10:36:11 +0200
+Subject: [PATCH] usb: debugfs cleanup
+
+Fix up all of the debugfs calls, no need to check the return values at
+all.  This cleans up lots of unneeded code.
+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/chipidea/ci.h               |  2 +-
+ drivers/usb/chipidea/core.c             |  4 +-
+ drivers/usb/chipidea/debug.c            | 56 +++++-------------
+ drivers/usb/core/usb.c                  | 26 ++-------
+ drivers/usb/dwc2/debugfs.c              | 78 +++++--------------------
+ drivers/usb/dwc3/debugfs.c              | 43 ++++----------
+ drivers/usb/gadget/udc/atmel_usba_udc.c | 71 ++++------------------
+ drivers/usb/gadget/udc/atmel_usba_udc.h |  4 --
+ drivers/usb/gadget/udc/bcm63xx_udc.c    | 37 ++----------
+ drivers/usb/gadget/udc/gr_udc.c         |  7 +--
+ drivers/usb/gadget/udc/gr_udc.h         |  1 -
+ drivers/usb/gadget/udc/pxa27x_udc.c     | 43 ++------------
+ drivers/usb/gadget/udc/pxa27x_udc.h     |  3 -
+ drivers/usb/gadget/udc/renesas_usb3.c   | 18 +-----
+ drivers/usb/gadget/udc/s3c2410_udc.c    | 17 ++----
+ drivers/usb/host/ehci-dbg.c             | 30 +++-------
+ drivers/usb/host/ehci-hcd.c             |  5 --
+ drivers/usb/host/fhci-dbg.c             | 23 ++------
+ drivers/usb/host/fhci.h                 |  2 -
+ drivers/usb/host/fotg210-hcd.c          | 34 +++--------
+ drivers/usb/host/imx21-dbg.c            | 44 ++++----------
+ drivers/usb/host/isp116x-hcd.c          | 17 ++----
+ drivers/usb/host/ohci-dbg.c             | 45 +++-----------
+ drivers/usb/host/ohci-hcd.c             |  5 --
+ drivers/usb/host/ohci.h                 |  3 -
+ drivers/usb/host/uhci-hcd.c             | 15 ++---
+ drivers/usb/mon/mon_text.c              | 37 +++---------
+ drivers/usb/mtu3/mtu3_dr.c              |  4 --
+ drivers/usb/musb/musb_core.c            |  5 +-
+ drivers/usb/musb/musb_debug.h           |  5 +-
+ drivers/usb/musb/musb_debugfs.c         | 44 +++-----------
+ drivers/usb/musb/musb_dsps.c            |  9 +--
+ drivers/usb/typec/fusb302/fusb302.c     | 24 +++-----
+ drivers/usb/typec/tcpm.c                |  9 +--
+ 34 files changed, 157 insertions(+), 613 deletions(-)
+
+diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
+index 98b7cb3d0064..0bf244d50544 100644
+--- a/drivers/usb/chipidea/ci.h
++++ b/drivers/usb/chipidea/ci.h
+@@ -450,7 +450,7 @@ void hw_phymode_configure(struct ci_hdrc *ci);
+ 
+ void ci_platform_configure(struct ci_hdrc *ci);
+ 
+-int dbg_create_files(struct ci_hdrc *ci);
++void dbg_create_files(struct ci_hdrc *ci);
+ 
+ void dbg_remove_files(struct ci_hdrc *ci);
+ #endif	/* __DRIVERS_USB_CHIPIDEA_CI_H */
+diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
+index 33ae87fa3ff3..85fc6db48e44 100644
+--- a/drivers/usb/chipidea/core.c
++++ b/drivers/usb/chipidea/core.c
+@@ -1062,9 +1062,7 @@ static int ci_hdrc_probe(struct platform_device *pdev)
+ 		ci_hdrc_otg_fsm_start(ci);
+ 
+ 	device_set_wakeup_capable(&pdev->dev, true);
+-	ret = dbg_create_files(ci);
+-	if (ret)
+-		goto stop;
++	dbg_create_files(ci);
+ 
+ 	ret = sysfs_create_group(&dev->kobj, &ci_attr_group);
+ 	if (ret)
+diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
+index ce648cb3ed94..fcc91a338875 100644
+--- a/drivers/usb/chipidea/debug.c
++++ b/drivers/usb/chipidea/debug.c
+@@ -340,54 +340,28 @@ DEFINE_SHOW_ATTRIBUTE(ci_registers);
+  *
+  * This function returns an error code
+  */
+-int dbg_create_files(struct ci_hdrc *ci)
++void dbg_create_files(struct ci_hdrc *ci)
+ {
+-	struct dentry *dent;
+-
+ 	ci->debugfs = debugfs_create_dir(dev_name(ci->dev), NULL);
+-	if (!ci->debugfs)
+-		return -ENOMEM;
+-
+-	dent = debugfs_create_file("device", S_IRUGO, ci->debugfs, ci,
+-				   &ci_device_fops);
+-	if (!dent)
+-		goto err;
+-
+-	dent = debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs,
+-				   ci, &ci_port_test_fops);
+-	if (!dent)
+-		goto err;
+-
+-	dent = debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci,
+-				   &ci_qheads_fops);
+-	if (!dent)
+-		goto err;
+ 
+-	dent = debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci,
+-				   &ci_requests_fops);
+-	if (!dent)
+-		goto err;
++	debugfs_create_file("device", S_IRUGO, ci->debugfs, ci,
++			    &ci_device_fops);
++	debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs, ci,
++			    &ci_port_test_fops);
++	debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci,
++			    &ci_qheads_fops);
++	debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci,
++			    &ci_requests_fops);
+ 
+ 	if (ci_otg_is_fsm_mode(ci)) {
+-		dent = debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci,
+-					&ci_otg_fops);
+-		if (!dent)
+-			goto err;
++		debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci,
++				    &ci_otg_fops);
+ 	}
+ 
+-	dent = debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci,
+-				   &ci_role_fops);
+-	if (!dent)
+-		goto err;
+-
+-	dent = debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci,
+-				&ci_registers_fops);
+-
+-	if (dent)
+-		return 0;
+-err:
+-	debugfs_remove_recursive(ci->debugfs);
+-	return -ENOMEM;
++	debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci,
++			    &ci_role_fops);
++	debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci,
++			    &ci_registers_fops);
+ }
+ 
+ /**
+diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
+index 0adb6345ff2e..623be3174fb3 100644
+--- a/drivers/usb/core/usb.c
++++ b/drivers/usb/core/usb.c
+@@ -1167,30 +1167,16 @@ static struct notifier_block usb_bus_nb = {
+ struct dentry *usb_debug_root;
+ EXPORT_SYMBOL_GPL(usb_debug_root);
+ 
+-static struct dentry *usb_debug_devices;
+-
+-static int usb_debugfs_init(void)
++static void usb_debugfs_init(void)
+ {
+ 	usb_debug_root = debugfs_create_dir("usb", NULL);
+-	if (!usb_debug_root)
+-		return -ENOENT;
+-
+-	usb_debug_devices = debugfs_create_file("devices", 0444,
+-						usb_debug_root, NULL,
+-						&usbfs_devices_fops);
+-	if (!usb_debug_devices) {
+-		debugfs_remove(usb_debug_root);
+-		usb_debug_root = NULL;
+-		return -ENOENT;
+-	}
+-
+-	return 0;
++	debugfs_create_file("devices", 0444, usb_debug_root, NULL,
++			    &usbfs_devices_fops);
+ }
+ 
+ static void usb_debugfs_cleanup(void)
+ {
+-	debugfs_remove(usb_debug_devices);
+-	debugfs_remove(usb_debug_root);
++	debugfs_remove_recursive(usb_debug_root);
+ }
+ 
+ /*
+@@ -1205,9 +1191,7 @@ static int __init usb_init(void)
+ 	}
+ 	usb_init_pool_max();
+ 
+-	retval = usb_debugfs_init();
+-	if (retval)
+-		goto out;
++	usb_debugfs_init();
+ 
+ 	usb_acpi_register();
+ 	retval = bus_register(&usb_bus_type);
+diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c
+index 7e6618ad9f21..d0bdb7997557 100644
+--- a/drivers/usb/dwc2/debugfs.c
++++ b/drivers/usb/dwc2/debugfs.c
+@@ -294,52 +294,30 @@ DEFINE_SHOW_ATTRIBUTE(ep);
+ static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg)
+ {
+ 	struct dentry *root;
+-	struct dentry *file;
+ 	unsigned int epidx;
+ 
+ 	root = hsotg->debug_root;
+ 
+ 	/* create general state file */
+-
+-	file = debugfs_create_file("state", 0444, root, hsotg, &state_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create state\n", __func__);
+-
+-	file = debugfs_create_file("testmode", 0644, root, hsotg,
+-				   &testmode_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create testmode\n",
+-			__func__);
+-
+-	file = debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create fifo\n", __func__);
++	debugfs_create_file("state", 0444, root, hsotg, &state_fops);
++	debugfs_create_file("testmode", 0644, root, hsotg, &testmode_fops);
++	debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops);
+ 
+ 	/* Create one file for each out endpoint */
+ 	for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) {
+ 		struct dwc2_hsotg_ep *ep;
+ 
+ 		ep = hsotg->eps_out[epidx];
+-		if (ep) {
+-			file = debugfs_create_file(ep->name, 0444,
+-						   root, ep, &ep_fops);
+-			if (IS_ERR(file))
+-				dev_err(hsotg->dev, "failed to create %s debug file\n",
+-					ep->name);
+-		}
++		if (ep)
++			debugfs_create_file(ep->name, 0444, root, ep, &ep_fops);
+ 	}
+ 	/* Create one file for each in endpoint. EP0 is handled with out eps */
+ 	for (epidx = 1; epidx < hsotg->num_of_eps; epidx++) {
+ 		struct dwc2_hsotg_ep *ep;
+ 
+ 		ep = hsotg->eps_in[epidx];
+-		if (ep) {
+-			file = debugfs_create_file(ep->name, 0444,
+-						   root, ep, &ep_fops);
+-			if (IS_ERR(file))
+-				dev_err(hsotg->dev, "failed to create %s debug file\n",
+-					ep->name);
+-		}
++		if (ep)
++			debugfs_create_file(ep->name, 0444, root, ep, &ep_fops);
+ 	}
+ }
+ #else
+@@ -792,32 +770,14 @@ DEFINE_SHOW_ATTRIBUTE(dr_mode);
+ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
+ {
+ 	int			ret;
+-	struct dentry		*file;
++	struct dentry		*root;
+ 
+-	hsotg->debug_root = debugfs_create_dir(dev_name(hsotg->dev), NULL);
+-	if (!hsotg->debug_root) {
+-		ret = -ENOMEM;
+-		goto err0;
+-	}
++	root = debugfs_create_dir(dev_name(hsotg->dev), NULL);
++	hsotg->debug_root = root;
+ 
+-	file = debugfs_create_file("params", 0444,
+-				   hsotg->debug_root,
+-				   hsotg, &params_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create params\n", __func__);
+-
+-	file = debugfs_create_file("hw_params", 0444,
+-				   hsotg->debug_root,
+-				   hsotg, &hw_params_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create hw_params\n",
+-			__func__);
+-
+-	file = debugfs_create_file("dr_mode", 0444,
+-				   hsotg->debug_root,
+-				   hsotg, &dr_mode_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create dr_mode\n", __func__);
++	debugfs_create_file("params", 0444, root, hsotg, &params_fops);
++	debugfs_create_file("hw_params", 0444, root, hsotg, &hw_params_fops);
++	debugfs_create_file("dr_mode", 0444, root, hsotg, &dr_mode_fops);
+ 
+ 	/* Add gadget debugfs nodes */
+ 	dwc2_hsotg_create_debug(hsotg);
+@@ -826,24 +786,18 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
+ 								GFP_KERNEL);
+ 	if (!hsotg->regset) {
+ 		ret = -ENOMEM;
+-		goto err1;
++		goto err;
+ 	}
+ 
+ 	hsotg->regset->regs = dwc2_regs;
+ 	hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs);
+ 	hsotg->regset->base = hsotg->regs;
+ 
+-	file = debugfs_create_regset32("regdump", 0444, hsotg->debug_root,
+-				       hsotg->regset);
+-	if (!file) {
+-		ret = -ENOMEM;
+-		goto err1;
+-	}
++	debugfs_create_regset32("regdump", 0444, root, hsotg->regset);
+ 
+ 	return 0;
+-err1:
++err:
+ 	debugfs_remove_recursive(hsotg->debug_root);
+-err0:
+ 	return ret;
+ }
+ 
+diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
+index 2f07be1e1f31..df8e73ec3342 100644
+--- a/drivers/usb/dwc3/debugfs.c
++++ b/drivers/usb/dwc3/debugfs.c
+@@ -716,9 +716,6 @@ static void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep,
+ 	struct dentry		*dir;
+ 
+ 	dir = debugfs_create_dir(dep->name, parent);
+-	if (IS_ERR_OR_NULL(dir))
+-		return;
+-
+ 	dwc3_debugfs_create_endpoint_files(dep, dir);
+ }
+ 
+@@ -740,49 +737,31 @@ static void dwc3_debugfs_create_endpoint_dirs(struct dwc3 *dwc,
+ void dwc3_debugfs_init(struct dwc3 *dwc)
+ {
+ 	struct dentry		*root;
+-	struct dentry           *file;
+-
+-	root = debugfs_create_dir(dev_name(dwc->dev), NULL);
+-	if (IS_ERR_OR_NULL(root)) {
+-		if (!root)
+-			dev_err(dwc->dev, "Can't create debugfs root\n");
+-		return;
+-	}
+-	dwc->root = root;
+ 
+ 	dwc->regset = kzalloc(sizeof(*dwc->regset), GFP_KERNEL);
+-	if (!dwc->regset) {
+-		debugfs_remove_recursive(root);
++	if (!dwc->regset)
+ 		return;
+-	}
+ 
+ 	dwc->regset->regs = dwc3_regs;
+ 	dwc->regset->nregs = ARRAY_SIZE(dwc3_regs);
+ 	dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START;
+ 
+-	file = debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);
+-	if (!file)
+-		dev_dbg(dwc->dev, "Can't create debugfs regdump\n");
++	root = debugfs_create_dir(dev_name(dwc->dev), NULL);
++	dwc->root = root;
++
++	debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);
+ 
+ 	if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) {
+-		file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root,
+-				dwc, &dwc3_mode_fops);
+-		if (!file)
+-			dev_dbg(dwc->dev, "Can't create debugfs mode\n");
++		debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, dwc,
++				    &dwc3_mode_fops);
+ 	}
+ 
+ 	if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) ||
+ 			IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
+-		file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root,
+-				dwc, &dwc3_testmode_fops);
+-		if (!file)
+-			dev_dbg(dwc->dev, "Can't create debugfs testmode\n");
+-
+-		file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR,
+-				root, dwc, &dwc3_link_state_fops);
+-		if (!file)
+-			dev_dbg(dwc->dev, "Can't create debugfs link_state\n");
+-
++		debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, dwc,
++				    &dwc3_testmode_fops);
++		debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root, dwc,
++				    &dwc3_link_state_fops);
+ 		dwc3_debugfs_create_endpoint_dirs(dwc, root);
+ 	}
+ }
+diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
+index 2f586f2bda7e..a4d99bf50f2f 100644
+--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
++++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
+@@ -206,94 +206,45 @@ static void usba_ep_init_debugfs(struct usba_udc *udc,
+ 	struct dentry *ep_root;
+ 
+ 	ep_root = debugfs_create_dir(ep->ep.name, udc->debugfs_root);
+-	if (!ep_root)
+-		goto err_root;
+ 	ep->debugfs_dir = ep_root;
+ 
+-	ep->debugfs_queue = debugfs_create_file("queue", 0400, ep_root,
+-						ep, &queue_dbg_fops);
+-	if (!ep->debugfs_queue)
+-		goto err_queue;
+-
+-	if (ep->can_dma) {
+-		ep->debugfs_dma_status
+-			= debugfs_create_u32("dma_status", 0400, ep_root,
+-					&ep->last_dma_status);
+-		if (!ep->debugfs_dma_status)
+-			goto err_dma_status;
+-	}
+-	if (ep_is_control(ep)) {
+-		ep->debugfs_state
+-			= debugfs_create_u32("state", 0400, ep_root,
+-					&ep->state);
+-		if (!ep->debugfs_state)
+-			goto err_state;
+-	}
+-
+-	return;
+-
+-err_state:
++	debugfs_create_file("queue", 0400, ep_root, ep, &queue_dbg_fops);
+ 	if (ep->can_dma)
+-		debugfs_remove(ep->debugfs_dma_status);
+-err_dma_status:
+-	debugfs_remove(ep->debugfs_queue);
+-err_queue:
+-	debugfs_remove(ep_root);
+-err_root:
+-	dev_err(&ep->udc->pdev->dev,
+-		"failed to create debugfs directory for %s\n", ep->ep.name);
++		debugfs_create_u32("dma_status", 0400, ep_root,
++				   &ep->last_dma_status);
++	if (ep_is_control(ep))
++		debugfs_create_u32("state", 0400, ep_root, &ep->state);
+ }
+ 
+ static void usba_ep_cleanup_debugfs(struct usba_ep *ep)
+ {
+-	debugfs_remove(ep->debugfs_queue);
+-	debugfs_remove(ep->debugfs_dma_status);
+-	debugfs_remove(ep->debugfs_state);
+-	debugfs_remove(ep->debugfs_dir);
+-	ep->debugfs_dma_status = NULL;
+-	ep->debugfs_dir = NULL;
++	debugfs_remove_recursive(ep->debugfs_dir);
+ }
+ 
+ static void usba_init_debugfs(struct usba_udc *udc)
+ {
+-	struct dentry *root, *regs;
++	struct dentry *root;
+ 	struct resource *regs_resource;
+ 
+ 	root = debugfs_create_dir(udc->gadget.name, NULL);
+-	if (IS_ERR(root) || !root)
+-		goto err_root;
+ 	udc->debugfs_root = root;
+ 
+ 	regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM,
+ 				CTRL_IOMEM_ID);
+ 
+ 	if (regs_resource) {
+-		regs = debugfs_create_file_size("regs", 0400, root, udc,
+-						&regs_dbg_fops,
+-						resource_size(regs_resource));
+-		if (!regs)
+-			goto err_regs;
+-		udc->debugfs_regs = regs;
++		debugfs_create_file_size("regs", 0400, root, udc,
++					 &regs_dbg_fops,
++					 resource_size(regs_resource));
+ 	}
+ 
+ 	usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0));
+-
+-	return;
+-
+-err_regs:
+-	debugfs_remove(root);
+-err_root:
+-	udc->debugfs_root = NULL;
+-	dev_err(&udc->pdev->dev, "debugfs is not available\n");
+ }
+ 
+ static void usba_cleanup_debugfs(struct usba_udc *udc)
+ {
+ 	usba_ep_cleanup_debugfs(to_usba_ep(udc->gadget.ep0));
+-	debugfs_remove(udc->debugfs_regs);
+-	debugfs_remove(udc->debugfs_root);
+-	udc->debugfs_regs = NULL;
+-	udc->debugfs_root = NULL;
++	debugfs_remove_recursive(udc->debugfs_root);
+ }
+ #else
+ static inline void usba_ep_init_debugfs(struct usba_udc *udc,
+diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h
+index d7eb7cf4fd5c..030bf797cd25 100644
+--- a/drivers/usb/gadget/udc/atmel_usba_udc.h
++++ b/drivers/usb/gadget/udc/atmel_usba_udc.h
+@@ -287,9 +287,6 @@ struct usba_ep {
+ #ifdef CONFIG_USB_GADGET_DEBUG_FS
+ 	u32					last_dma_status;
+ 	struct dentry				*debugfs_dir;
+-	struct dentry				*debugfs_queue;
+-	struct dentry				*debugfs_dma_status;
+-	struct dentry				*debugfs_state;
+ #endif
+ };
+ 
+@@ -344,7 +341,6 @@ struct usba_udc {
+ 
+ #ifdef CONFIG_USB_GADGET_DEBUG_FS
+ 	struct dentry *debugfs_root;
+-	struct dentry *debugfs_regs;
+ #endif
+ 
+ 	struct regmap *pmc;
+diff --git a/drivers/usb/gadget/udc/bcm63xx_udc.c b/drivers/usb/gadget/udc/bcm63xx_udc.c
+index 3a8df8601074..c1fcc77403ea 100644
+--- a/drivers/usb/gadget/udc/bcm63xx_udc.c
++++ b/drivers/usb/gadget/udc/bcm63xx_udc.c
+@@ -288,8 +288,6 @@ struct bcm63xx_req {
+  * @ep0_reply: Pending reply from gadget driver.
+  * @ep0_request: Outstanding ep0 request.
+  * @debugfs_root: debugfs directory: /sys/kernel/debug/<DRV_MODULE_NAME>.
+- * @debugfs_usbd: debugfs file "usbd" for controller state.
+- * @debugfs_iudma: debugfs file "usbd" for IUDMA state.
+  */
+ struct bcm63xx_udc {
+ 	spinlock_t			lock;
+@@ -330,8 +328,6 @@ struct bcm63xx_udc {
+ 	struct usb_request		*ep0_request;
+ 
+ 	struct dentry			*debugfs_root;
+-	struct dentry			*debugfs_usbd;
+-	struct dentry			*debugfs_iudma;
+ };
+ 
+ static const struct usb_ep_ops bcm63xx_udc_ep_ops;
+@@ -2247,34 +2243,16 @@ DEFINE_SHOW_ATTRIBUTE(bcm63xx_iudma_dbg);
+  */
+ static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc)
+ {
+-	struct dentry *root, *usbd, *iudma;
++	struct dentry *root;
+ 
+ 	if (!IS_ENABLED(CONFIG_USB_GADGET_DEBUG_FS))
+ 		return;
+ 
+ 	root = debugfs_create_dir(udc->gadget.name, NULL);
+-	if (IS_ERR(root) || !root)
+-		goto err_root;
+-
+-	usbd = debugfs_create_file("usbd", 0400, root, udc,
+-			&bcm63xx_usbd_dbg_fops);
+-	if (!usbd)
+-		goto err_usbd;
+-	iudma = debugfs_create_file("iudma", 0400, root, udc,
+-			&bcm63xx_iudma_dbg_fops);
+-	if (!iudma)
+-		goto err_iudma;
+-
+ 	udc->debugfs_root = root;
+-	udc->debugfs_usbd = usbd;
+-	udc->debugfs_iudma = iudma;
+-	return;
+-err_iudma:
+-	debugfs_remove(usbd);
+-err_usbd:
+-	debugfs_remove(root);
+-err_root:
+-	dev_err(udc->dev, "debugfs is not available\n");
++
++	debugfs_create_file("usbd", 0400, root, udc, &bcm63xx_usbd_dbg_fops);
++	debugfs_create_file("iudma", 0400, root, udc, &bcm63xx_iudma_dbg_fops);
+ }
+ 
+ /**
+@@ -2285,12 +2263,7 @@ static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc)
+  */
+ static void bcm63xx_udc_cleanup_debugfs(struct bcm63xx_udc *udc)
+ {
+-	debugfs_remove(udc->debugfs_iudma);
+-	debugfs_remove(udc->debugfs_usbd);
+-	debugfs_remove(udc->debugfs_root);
+-	udc->debugfs_iudma = NULL;
+-	udc->debugfs_usbd = NULL;
+-	udc->debugfs_root = NULL;
++	debugfs_remove_recursive(udc->debugfs_root);
+ }
+ 
+ /***********************************************************************
+diff --git a/drivers/usb/gadget/udc/gr_udc.c b/drivers/usb/gadget/udc/gr_udc.c
+index ca83c15d8ea4..729e60e49564 100644
+--- a/drivers/usb/gadget/udc/gr_udc.c
++++ b/drivers/usb/gadget/udc/gr_udc.c
+@@ -209,15 +209,12 @@ static void gr_dfs_create(struct gr_udc *dev)
+ 	const char *name = "gr_udc_state";
+ 
+ 	dev->dfs_root = debugfs_create_dir(dev_name(dev->dev), NULL);
+-	dev->dfs_state = debugfs_create_file(name, 0444, dev->dfs_root, dev,
+-					     &gr_dfs_fops);
++	debugfs_create_file(name, 0444, dev->dfs_root, dev, &gr_dfs_fops);
+ }
+ 
+ static void gr_dfs_delete(struct gr_udc *dev)
+ {
+-	/* Handles NULL and ERR pointers internally */
+-	debugfs_remove(dev->dfs_state);
+-	debugfs_remove(dev->dfs_root);
++	debugfs_remove_recursive(dev->dfs_root);
+ }
+ 
+ #else /* !CONFIG_USB_GADGET_DEBUG_FS */
+diff --git a/drivers/usb/gadget/udc/gr_udc.h b/drivers/usb/gadget/udc/gr_udc.h
+index 3e913268c8c5..417ad2aa2cc7 100644
+--- a/drivers/usb/gadget/udc/gr_udc.h
++++ b/drivers/usb/gadget/udc/gr_udc.h
+@@ -217,7 +217,6 @@ struct gr_udc {
+ 	spinlock_t lock; /* General lock, a.k.a. "dev->lock" in comments */
+ 
+ 	struct dentry *dfs_root;
+-	struct dentry *dfs_state;
+ };
+ 
+ #define to_gr_udc(gadget)	(container_of((gadget), struct gr_udc, gadget))
+diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c
+index a58242e901df..014233252299 100644
+--- a/drivers/usb/gadget/udc/pxa27x_udc.c
++++ b/drivers/usb/gadget/udc/pxa27x_udc.c
+@@ -205,50 +205,19 @@ DEFINE_SHOW_ATTRIBUTE(eps_dbg);
+ 
+ static void pxa_init_debugfs(struct pxa_udc *udc)
+ {
+-	struct dentry *root, *state, *queues, *eps;
++	struct dentry *root;
+ 
+ 	root = debugfs_create_dir(udc->gadget.name, NULL);
+-	if (IS_ERR(root) || !root)
+-		goto err_root;
+-
+-	state = debugfs_create_file("udcstate", 0400, root, udc,
+-			&state_dbg_fops);
+-	if (!state)
+-		goto err_state;
+-	queues = debugfs_create_file("queues", 0400, root, udc,
+-			&queues_dbg_fops);
+-	if (!queues)
+-		goto err_queues;
+-	eps = debugfs_create_file("epstate", 0400, root, udc,
+-			&eps_dbg_fops);
+-	if (!eps)
+-		goto err_eps;
+-
+ 	udc->debugfs_root = root;
+-	udc->debugfs_state = state;
+-	udc->debugfs_queues = queues;
+-	udc->debugfs_eps = eps;
+-	return;
+-err_eps:
+-	debugfs_remove(eps);
+-err_queues:
+-	debugfs_remove(queues);
+-err_state:
+-	debugfs_remove(root);
+-err_root:
+-	dev_err(udc->dev, "debugfs is not available\n");
++
++	debugfs_create_file("udcstate", 0400, root, udc, &state_dbg_fops);
++	debugfs_create_file("queues", 0400, root, udc, &queues_dbg_fops);
++	debugfs_create_file("epstate", 0400, root, udc, &eps_dbg_fops);
+ }
+ 
+ static void pxa_cleanup_debugfs(struct pxa_udc *udc)
+ {
+-	debugfs_remove(udc->debugfs_eps);
+-	debugfs_remove(udc->debugfs_queues);
+-	debugfs_remove(udc->debugfs_state);
+-	debugfs_remove(udc->debugfs_root);
+-	udc->debugfs_eps = NULL;
+-	udc->debugfs_queues = NULL;
+-	udc->debugfs_state = NULL;
+-	udc->debugfs_root = NULL;
++	debugfs_remove_recursive(udc->debugfs_root);
+ }
+ 
+ #else
+diff --git a/drivers/usb/gadget/udc/pxa27x_udc.h b/drivers/usb/gadget/udc/pxa27x_udc.h
+index 1128d39a4255..13b2977399ab 100644
+--- a/drivers/usb/gadget/udc/pxa27x_udc.h
++++ b/drivers/usb/gadget/udc/pxa27x_udc.h
+@@ -476,9 +476,6 @@ struct pxa_udc {
+ #endif
+ #ifdef CONFIG_USB_GADGET_DEBUG_FS
+ 	struct dentry				*debugfs_root;
+-	struct dentry				*debugfs_state;
+-	struct dentry				*debugfs_queues;
+-	struct dentry				*debugfs_eps;
+ #endif
+ };
+ #define to_pxa(g)	(container_of((g), struct pxa_udc, gadget))
+diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
+index 5caf78bbbf7c..977ea1a02cf9 100644
+--- a/drivers/usb/gadget/udc/renesas_usb3.c
++++ b/drivers/usb/gadget/udc/renesas_usb3.c
+@@ -2391,22 +2391,10 @@ static const struct file_operations renesas_usb3_b_device_fops = {
+ static void renesas_usb3_debugfs_init(struct renesas_usb3 *usb3,
+ 				      struct device *dev)
+ {
+-	struct dentry *root, *file;
++	usb3->dentry = debugfs_create_dir(dev_name(dev), NULL);
+ 
+-	root = debugfs_create_dir(dev_name(dev), NULL);
+-	if (IS_ERR_OR_NULL(root)) {
+-		dev_info(dev, "%s: Can't create the root\n", __func__);
+-		return;
+-	}
+-
+-	file = debugfs_create_file("b_device", 0644, root, usb3,
+-				   &renesas_usb3_b_device_fops);
+-	if (!file) {
+-		dev_info(dev, "%s: Can't create debugfs mode\n", __func__);
+-		debugfs_remove_recursive(root);
+-	} else {
+-		usb3->dentry = root;
+-	}
++	debugfs_create_file("b_device", 0644, usb3->dentry, usb3,
++			    &renesas_usb3_b_device_fops);
+ }
+ 
+ /*------- platform_driver ------------------------------------------------*/
+diff --git a/drivers/usb/gadget/udc/s3c2410_udc.c b/drivers/usb/gadget/udc/s3c2410_udc.c
+index f154f49e98c8..8bf5ad7a59ad 100644
+--- a/drivers/usb/gadget/udc/s3c2410_udc.c
++++ b/drivers/usb/gadget/udc/s3c2410_udc.c
+@@ -1871,13 +1871,9 @@ static int s3c2410_udc_probe(struct platform_device *pdev)
+ 	if (retval)
+ 		goto err_add_udc;
+ 
+-	if (s3c2410_udc_debugfs_root) {
+-		udc->regs_info = debugfs_create_file("registers", S_IRUGO,
+-				s3c2410_udc_debugfs_root,
+-				udc, &s3c2410_udc_debugfs_fops);
+-		if (!udc->regs_info)
+-			dev_warn(dev, "debugfs file creation failed\n");
+-	}
++	udc->regs_info = debugfs_create_file("registers", S_IRUGO,
++					     s3c2410_udc_debugfs_root, udc,
++					     &s3c2410_udc_debugfs_fops);
+ 
+ 	dev_dbg(dev, "probe ok\n");
+ 
+@@ -1994,11 +1990,6 @@ static int __init udc_init(void)
+ 	dprintk(DEBUG_NORMAL, "%s\n", gadget_name);
+ 
+ 	s3c2410_udc_debugfs_root = debugfs_create_dir(gadget_name, NULL);
+-	if (IS_ERR(s3c2410_udc_debugfs_root)) {
+-		pr_err("%s: debugfs dir creation failed %ld\n",
+-			gadget_name, PTR_ERR(s3c2410_udc_debugfs_root));
+-		s3c2410_udc_debugfs_root = NULL;
+-	}
+ 
+ 	retval = platform_driver_register(&udc_driver_24x0);
+ 	if (retval)
+@@ -2014,7 +2005,7 @@ static int __init udc_init(void)
+ static void __exit udc_exit(void)
+ {
+ 	platform_driver_unregister(&udc_driver_24x0);
+-	debugfs_remove(s3c2410_udc_debugfs_root);
++	debugfs_remove_recursive(s3c2410_udc_debugfs_root);
+ }
+ 
+ module_init(udc_init);
+diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c
+index 3ed75aaa09d9..7619cfb06883 100644
+--- a/drivers/usb/host/ehci-dbg.c
++++ b/drivers/usb/host/ehci-dbg.c
+@@ -1028,29 +1028,15 @@ static inline void create_debug_files(struct ehci_hcd *ehci)
+ 	struct usb_bus *bus = &ehci_to_hcd(ehci)->self;
+ 
+ 	ehci->debug_dir = debugfs_create_dir(bus->bus_name, ehci_debug_root);
+-	if (!ehci->debug_dir)
+-		return;
+ 
+-	if (!debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus,
+-						&debug_async_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus,
+-						&debug_bandwidth_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus,
+-						&debug_periodic_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus,
+-						    &debug_registers_fops))
+-		goto file_error;
+-
+-	return;
+-
+-file_error:
+-	debugfs_remove_recursive(ehci->debug_dir);
++	debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_async_fops);
++	debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_bandwidth_fops);
++	debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_periodic_fops);
++	debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_registers_fops);
+ }
+ 
+ static inline void remove_debug_files(struct ehci_hcd *ehci)
+diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
+index d927adf3afcd..89c47ae5c7d3 100644
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -1311,10 +1311,6 @@ static int __init ehci_hcd_init(void)
+ 
+ #ifdef CONFIG_DYNAMIC_DEBUG
+ 	ehci_debug_root = debugfs_create_dir("ehci", usb_debug_root);
+-	if (!ehci_debug_root) {
+-		retval = -ENOENT;
+-		goto err_debug;
+-	}
+ #endif
+ 
+ #ifdef PLATFORM_DRIVER
+@@ -1361,7 +1357,6 @@ static int __init ehci_hcd_init(void)
+ #ifdef CONFIG_DYNAMIC_DEBUG
+ 	debugfs_remove(ehci_debug_root);
+ 	ehci_debug_root = NULL;
+-err_debug:
+ #endif
+ 	clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
+ 	return retval;
+diff --git a/drivers/usb/host/fhci-dbg.c b/drivers/usb/host/fhci-dbg.c
+index ebf9bb219f75..100048b3bd17 100644
+--- a/drivers/usb/host/fhci-dbg.c
++++ b/drivers/usb/host/fhci-dbg.c
+@@ -83,27 +83,14 @@ void fhci_dfs_create(struct fhci_hcd *fhci)
+ 	struct device *dev = fhci_to_hcd(fhci)->self.controller;
+ 
+ 	fhci->dfs_root = debugfs_create_dir(dev_name(dev), usb_debug_root);
+-	if (!fhci->dfs_root) {
+-		WARN_ON(1);
+-		return;
+-	}
+-
+-	fhci->dfs_regs = debugfs_create_file("regs", S_IFREG | S_IRUGO,
+-		fhci->dfs_root, fhci, &fhci_dfs_regs_fops);
+ 
+-	fhci->dfs_irq_stat = debugfs_create_file("irq_stat",
+-		S_IFREG | S_IRUGO, fhci->dfs_root, fhci,
+-		&fhci_dfs_irq_stat_fops);
+-
+-	WARN_ON(!fhci->dfs_regs || !fhci->dfs_irq_stat);
++	debugfs_create_file("regs", S_IFREG | S_IRUGO, fhci->dfs_root, fhci,
++			    &fhci_dfs_regs_fops);
++	debugfs_create_file("irq_stat", S_IFREG | S_IRUGO, fhci->dfs_root, fhci,
++			    &fhci_dfs_irq_stat_fops);
+ }
+ 
+ void fhci_dfs_destroy(struct fhci_hcd *fhci)
+ {
+-	if (!fhci->dfs_root)
+-		return;
+-
+-	debugfs_remove(fhci->dfs_irq_stat);
+-	debugfs_remove(fhci->dfs_regs);
+-	debugfs_remove(fhci->dfs_root);
++	debugfs_remove_recursive(fhci->dfs_root);
+ }
+diff --git a/drivers/usb/host/fhci.h b/drivers/usb/host/fhci.h
+index e7ec41d62410..2ce5031d866d 100644
+--- a/drivers/usb/host/fhci.h
++++ b/drivers/usb/host/fhci.h
+@@ -262,8 +262,6 @@ struct fhci_hcd {
+ #ifdef CONFIG_FHCI_DEBUG
+ 	int usb_irq_stat[13];
+ 	struct dentry *dfs_root;
+-	struct dentry *dfs_regs;
+-	struct dentry *dfs_irq_stat;
+ #endif
+ };
+ 
+diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c
+index d8abf401918a..e64eb47770c8 100644
+--- a/drivers/usb/host/fotg210-hcd.c
++++ b/drivers/usb/host/fotg210-hcd.c
+@@ -844,28 +844,16 @@ static int debug_registers_open(struct inode *inode, struct file *file)
+ static inline void create_debug_files(struct fotg210_hcd *fotg210)
+ {
+ 	struct usb_bus *bus = &fotg210_to_hcd(fotg210)->self;
++	struct dentry *root;
+ 
+-	fotg210->debug_dir = debugfs_create_dir(bus->bus_name,
+-			fotg210_debug_root);
+-	if (!fotg210->debug_dir)
+-		return;
+-
+-	if (!debugfs_create_file("async", S_IRUGO, fotg210->debug_dir, bus,
+-			&debug_async_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("periodic", S_IRUGO, fotg210->debug_dir, bus,
+-			&debug_periodic_fops))
+-		goto file_error;
++	root = debugfs_create_dir(bus->bus_name, fotg210_debug_root);
++	fotg210->debug_dir = root;
+ 
+-	if (!debugfs_create_file("registers", S_IRUGO, fotg210->debug_dir, bus,
+-			&debug_registers_fops))
+-		goto file_error;
+-
+-	return;
+-
+-file_error:
+-	debugfs_remove_recursive(fotg210->debug_dir);
++	debugfs_create_file("async", S_IRUGO, root, bus, &debug_async_fops);
++	debugfs_create_file("periodic", S_IRUGO, root, bus,
++			    &debug_periodic_fops);
++	debugfs_create_file("registers", S_IRUGO, root, bus,
++			    &debug_registers_fops);
+ }
+ 
+ static inline void remove_debug_files(struct fotg210_hcd *fotg210)
+@@ -5686,10 +5674,6 @@ static int __init fotg210_hcd_init(void)
+ 			sizeof(struct fotg210_itd));
+ 
+ 	fotg210_debug_root = debugfs_create_dir("fotg210", usb_debug_root);
+-	if (!fotg210_debug_root) {
+-		retval = -ENOENT;
+-		goto err_debug;
+-	}
+ 
+ 	retval = platform_driver_register(&fotg210_hcd_driver);
+ 	if (retval < 0)
+@@ -5699,7 +5683,7 @@ static int __init fotg210_hcd_init(void)
+ clean:
+ 	debugfs_remove(fotg210_debug_root);
+ 	fotg210_debug_root = NULL;
+-err_debug:
++
+ 	clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
+ 	return retval;
+ }
+diff --git a/drivers/usb/host/imx21-dbg.c b/drivers/usb/host/imx21-dbg.c
+index a213ed6f07b5..7fcf1d9dd7f3 100644
+--- a/drivers/usb/host/imx21-dbg.c
++++ b/drivers/usb/host/imx21-dbg.c
+@@ -417,46 +417,22 @@ DEFINE_SHOW_ATTRIBUTE(debug_isoc);
+ 
+ static void create_debug_files(struct imx21 *imx21)
+ {
+-	imx21->debug_root = debugfs_create_dir(dev_name(imx21->dev), NULL);
+-	if (!imx21->debug_root)
+-		goto failed_create_rootdir;
++	struct dentry *root;
+ 
+-	if (!debugfs_create_file("status", S_IRUGO,
+-			imx21->debug_root, imx21, &debug_status_fops))
+-		goto failed_create;
++	root = debugfs_create_dir(dev_name(imx21->dev), NULL);
++	imx21->debug_root = root;
+ 
+-	if (!debugfs_create_file("dmem", S_IRUGO,
+-			imx21->debug_root, imx21, &debug_dmem_fops))
+-		goto failed_create;
+-
+-	if (!debugfs_create_file("etd", S_IRUGO,
+-			imx21->debug_root, imx21, &debug_etd_fops))
+-		goto failed_create;
+-
+-	if (!debugfs_create_file("statistics", S_IRUGO,
+-			imx21->debug_root, imx21, &debug_statistics_fops))
+-		goto failed_create;
+-
+-	if (!debugfs_create_file("isoc", S_IRUGO,
+-			imx21->debug_root, imx21, &debug_isoc_fops))
+-		goto failed_create;
+-
+-	return;
+-
+-failed_create:
+-	debugfs_remove_recursive(imx21->debug_root);
+-
+-failed_create_rootdir:
+-	imx21->debug_root = NULL;
++	debugfs_create_file("status", S_IRUGO, root, imx21, &debug_status_fops);
++	debugfs_create_file("dmem", S_IRUGO, root, imx21, &debug_dmem_fops);
++	debugfs_create_file("etd", S_IRUGO, root, imx21, &debug_etd_fops);
++	debugfs_create_file("statistics", S_IRUGO, root, imx21,
++			    &debug_statistics_fops);
++	debugfs_create_file("isoc", S_IRUGO, root, imx21, &debug_isoc_fops);
+ }
+ 
+-
+ static void remove_debug_files(struct imx21 *imx21)
+ {
+-	if (imx21->debug_root) {
+-		debugfs_remove_recursive(imx21->debug_root);
+-		imx21->debug_root = NULL;
+-	}
++	debugfs_remove_recursive(imx21->debug_root);
+ }
+ 
+ #endif
+diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c
+index 4602ed801f0a..74da136d322a 100644
+--- a/drivers/usb/host/isp116x-hcd.c
++++ b/drivers/usb/host/isp116x-hcd.c
+@@ -1198,14 +1198,11 @@ static int isp116x_debug_show(struct seq_file *s, void *unused)
+ }
+ DEFINE_SHOW_ATTRIBUTE(isp116x_debug);
+ 
+-static int create_debug_file(struct isp116x *isp116x)
++static void create_debug_file(struct isp116x *isp116x)
+ {
+ 	isp116x->dentry = debugfs_create_file(hcd_name,
+ 					      S_IRUGO, NULL, isp116x,
+ 					      &isp116x_debug_fops);
+-	if (!isp116x->dentry)
+-		return -ENOMEM;
+-	return 0;
+ }
+ 
+ static void remove_debug_file(struct isp116x *isp116x)
+@@ -1215,8 +1212,8 @@ static void remove_debug_file(struct isp116x *isp116x)
+ 
+ #else
+ 
+-#define	create_debug_file(d)	0
+-#define	remove_debug_file(d)	do{}while(0)
++static inline void create_debug_file(struct isp116x *isp116x) { }
++static inline void remove_debug_file(struct isp116x *isp116x) { }
+ 
+ #endif				/* CONFIG_DEBUG_FS */
+ 
+@@ -1643,16 +1640,10 @@ static int isp116x_probe(struct platform_device *pdev)
+ 
+ 	device_wakeup_enable(hcd->self.controller);
+ 
+-	ret = create_debug_file(isp116x);
+-	if (ret) {
+-		ERR("Couldn't create debugfs entry\n");
+-		goto err7;
+-	}
++	create_debug_file(isp116x);
+ 
+ 	return 0;
+ 
+-      err7:
+-	usb_remove_hcd(hcd);
+       err6:
+ 	usb_put_hcd(hcd);
+       err5:
+diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c
+index ac7d4ac34b02..d3ee1f52aaab 100644
+--- a/drivers/usb/host/ohci-dbg.c
++++ b/drivers/usb/host/ohci-dbg.c
+@@ -762,50 +762,23 @@ static int debug_registers_open(struct inode *inode, struct file *file)
+ static inline void create_debug_files (struct ohci_hcd *ohci)
+ {
+ 	struct usb_bus *bus = &ohci_to_hcd(ohci)->self;
++	struct dentry *root;
+ 
+-	ohci->debug_dir = debugfs_create_dir(bus->bus_name, ohci_debug_root);
+-	if (!ohci->debug_dir)
+-		goto dir_error;
++	root = debugfs_create_dir(bus->bus_name, ohci_debug_root);
++	ohci->debug_dir = root;
+ 
+-	ohci->debug_async = debugfs_create_file("async", S_IRUGO,
+-						ohci->debug_dir, ohci,
+-						&debug_async_fops);
+-	if (!ohci->debug_async)
+-		goto async_error;
+-
+-	ohci->debug_periodic = debugfs_create_file("periodic", S_IRUGO,
+-						   ohci->debug_dir, ohci,
+-						   &debug_periodic_fops);
+-	if (!ohci->debug_periodic)
+-		goto periodic_error;
+-
+-	ohci->debug_registers = debugfs_create_file("registers", S_IRUGO,
+-						    ohci->debug_dir, ohci,
+-						    &debug_registers_fops);
+-	if (!ohci->debug_registers)
+-		goto registers_error;
++	debugfs_create_file("async", S_IRUGO, root, ohci, &debug_async_fops);
++	debugfs_create_file("periodic", S_IRUGO, root, ohci,
++			    &debug_periodic_fops);
++	debugfs_create_file("registers", S_IRUGO, root, ohci,
++			    &debug_registers_fops);
+ 
+ 	ohci_dbg (ohci, "created debug files\n");
+-	return;
+-
+-registers_error:
+-	debugfs_remove(ohci->debug_periodic);
+-periodic_error:
+-	debugfs_remove(ohci->debug_async);
+-async_error:
+-	debugfs_remove(ohci->debug_dir);
+-dir_error:
+-	ohci->debug_periodic = NULL;
+-	ohci->debug_async = NULL;
+-	ohci->debug_dir = NULL;
+ }
+ 
+ static inline void remove_debug_files (struct ohci_hcd *ohci)
+ {
+-	debugfs_remove(ohci->debug_registers);
+-	debugfs_remove(ohci->debug_periodic);
+-	debugfs_remove(ohci->debug_async);
+-	debugfs_remove(ohci->debug_dir);
++	debugfs_remove_recursive(ohci->debug_dir);
+ }
+ 
+ /*-------------------------------------------------------------------------*/
+diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
+index 4806e0f9e8d4..210181fd98d2 100644
+--- a/drivers/usb/host/ohci-hcd.c
++++ b/drivers/usb/host/ohci-hcd.c
+@@ -1258,10 +1258,6 @@ static int __init ohci_hcd_mod_init(void)
+ 	set_bit(USB_OHCI_LOADED, &usb_hcds_loaded);
+ 
+ 	ohci_debug_root = debugfs_create_dir("ohci", usb_debug_root);
+-	if (!ohci_debug_root) {
+-		retval = -ENOENT;
+-		goto error_debug;
+-	}
+ 
+ #ifdef PS3_SYSTEM_BUS_DRIVER
+ 	retval = ps3_ohci_driver_register(&PS3_SYSTEM_BUS_DRIVER);
+@@ -1318,7 +1314,6 @@ static int __init ohci_hcd_mod_init(void)
+ #endif
+ 	debugfs_remove(ohci_debug_root);
+ 	ohci_debug_root = NULL;
+- error_debug:
+ 
+ 	clear_bit(USB_OHCI_LOADED, &usb_hcds_loaded);
+ 	return retval;
+diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h
+index 508a803139dd..ef4813bfc5bf 100644
+--- a/drivers/usb/host/ohci.h
++++ b/drivers/usb/host/ohci.h
+@@ -431,9 +431,6 @@ struct ohci_hcd {
+ 	struct work_struct	nec_work;	/* Worker for NEC quirk */
+ 
+ 	struct dentry		*debug_dir;
+-	struct dentry		*debug_async;
+-	struct dentry		*debug_periodic;
+-	struct dentry		*debug_registers;
+ 
+ 	/* platform-specific data -- must come last */
+ 	unsigned long           priv[0] __aligned(sizeof(s64));
+diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
+index f9c3947577fc..6218bfe54f52 100644
+--- a/drivers/usb/host/uhci-hcd.c
++++ b/drivers/usb/host/uhci-hcd.c
+@@ -590,14 +590,10 @@ static int uhci_start(struct usb_hcd *hcd)
+ 	init_waitqueue_head(&uhci->waitqh);
+ 
+ #ifdef UHCI_DEBUG_OPS
+-	dentry = debugfs_create_file(hcd->self.bus_name,
+-			S_IFREG|S_IRUGO|S_IWUSR, uhci_debugfs_root,
+-			uhci, &uhci_debug_operations);
+-	if (!dentry) {
+-		dev_err(uhci_dev(uhci), "couldn't create uhci debugfs entry\n");
+-		return -ENOMEM;
+-	}
+-	uhci->dentry = dentry;
++	uhci->dentry = debugfs_create_file(hcd->self.bus_name,
++					   S_IFREG|S_IRUGO|S_IWUSR,
++					   uhci_debugfs_root, uhci,
++					   &uhci_debug_operations);
+ #endif
+ 
+ 	uhci->frame = dma_zalloc_coherent(uhci_dev(uhci),
+@@ -882,8 +878,6 @@ static int __init uhci_hcd_init(void)
+ 	if (!errbuf)
+ 		goto errbuf_failed;
+ 	uhci_debugfs_root = debugfs_create_dir("uhci", usb_debug_root);
+-	if (!uhci_debugfs_root)
+-		goto debug_failed;
+ #endif
+ 
+ 	uhci_up_cachep = kmem_cache_create("uhci_urb_priv",
+@@ -918,7 +912,6 @@ static int __init uhci_hcd_init(void)
+ #if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
+ 	debugfs_remove(uhci_debugfs_root);
+ 
+-debug_failed:
+ 	kfree(errbuf);
+ 
+ errbuf_failed:
+diff --git a/drivers/usb/mon/mon_text.c b/drivers/usb/mon/mon_text.c
+index 984f7e12a6a5..bc5ecd5ff565 100644
+--- a/drivers/usb/mon/mon_text.c
++++ b/drivers/usb/mon/mon_text.c
+@@ -700,7 +700,6 @@ static const struct file_operations mon_fops_text_u = {
+ 
+ int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus)
+ {
+-	struct dentry *d;
+ 	enum { NAMESZ = 10 };
+ 	char name[NAMESZ];
+ 	int busnum = ubus? ubus->busnum: 0;
+@@ -713,42 +712,32 @@ int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus)
+ 		rc = snprintf(name, NAMESZ, "%dt", busnum);
+ 		if (rc <= 0 || rc >= NAMESZ)
+ 			goto err_print_t;
+-		d = debugfs_create_file(name, 0600, mon_dir, mbus,
++		mbus->dent_t = debugfs_create_file(name, 0600, mon_dir, mbus,
+ 							     &mon_fops_text_t);
+-		if (d == NULL)
+-			goto err_create_t;
+-		mbus->dent_t = d;
+ 	}
+ 
+ 	rc = snprintf(name, NAMESZ, "%du", busnum);
+ 	if (rc <= 0 || rc >= NAMESZ)
+ 		goto err_print_u;
+-	d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_text_u);
+-	if (d == NULL)
+-		goto err_create_u;
+-	mbus->dent_u = d;
++	mbus->dent_u = debugfs_create_file(name, 0600, mon_dir, mbus,
++					   &mon_fops_text_u);
+ 
+ 	rc = snprintf(name, NAMESZ, "%ds", busnum);
+ 	if (rc <= 0 || rc >= NAMESZ)
+ 		goto err_print_s;
+-	d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_stat);
+-	if (d == NULL)
+-		goto err_create_s;
+-	mbus->dent_s = d;
++	mbus->dent_s = debugfs_create_file(name, 0600, mon_dir, mbus,
++					   &mon_fops_stat);
+ 
+ 	return 1;
+ 
+-err_create_s:
+ err_print_s:
+ 	debugfs_remove(mbus->dent_u);
+ 	mbus->dent_u = NULL;
+-err_create_u:
+ err_print_u:
+ 	if (ubus != NULL) {
+ 		debugfs_remove(mbus->dent_t);
+ 		mbus->dent_t = NULL;
+ 	}
+-err_create_t:
+ err_print_t:
+ 	return 0;
+ }
+@@ -756,8 +745,7 @@ int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus)
+ void mon_text_del(struct mon_bus *mbus)
+ {
+ 	debugfs_remove(mbus->dent_u);
+-	if (mbus->dent_t != NULL)
+-		debugfs_remove(mbus->dent_t);
++	debugfs_remove(mbus->dent_t);
+ 	debugfs_remove(mbus->dent_s);
+ }
+ 
+@@ -775,18 +763,7 @@ static void mon_text_ctor(void *mem)
+ 
+ int __init mon_text_init(void)
+ {
+-	struct dentry *mondir;
+-
+-	mondir = debugfs_create_dir("usbmon", usb_debug_root);
+-	if (IS_ERR(mondir)) {
+-		/* debugfs not available, but we can use usbmon without it */
+-		return 0;
+-	}
+-	if (mondir == NULL) {
+-		printk(KERN_NOTICE TAG ": unable to create usbmon directory\n");
+-		return -ENOMEM;
+-	}
+-	mon_dir = mondir;
++	mon_dir = debugfs_create_dir("usbmon", usb_debug_root);
+ 	return 0;
+ }
+ 
+diff --git a/drivers/usb/mtu3/mtu3_dr.c b/drivers/usb/mtu3/mtu3_dr.c
+index 8c3bbf732bc4..ac60e9c8564e 100644
+--- a/drivers/usb/mtu3/mtu3_dr.c
++++ b/drivers/usb/mtu3/mtu3_dr.c
+@@ -378,10 +378,6 @@ static void ssusb_debugfs_init(struct ssusb_mtk *ssusb)
+ 	struct dentry *root;
+ 
+ 	root = debugfs_create_dir(dev_name(ssusb->dev), usb_debug_root);
+-	if (!root) {
+-		dev_err(ssusb->dev, "create debugfs root failed\n");
+-		return;
+-	}
+ 	ssusb->dbgfs_root = root;
+ 
+ 	debugfs_create_file("mode", 0644, root, ssusb, &ssusb_mode_fops);
+diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
+index 5cc64980058b..b7d56272f9d1 100644
+--- a/drivers/usb/musb/musb_core.c
++++ b/drivers/usb/musb/musb_core.c
+@@ -2387,9 +2387,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
+ 	if (status < 0)
+ 		goto fail3;
+ 
+-	status = musb_init_debugfs(musb);
+-	if (status < 0)
+-		goto fail4;
++	musb_init_debugfs(musb);
+ 
+ 	status = sysfs_create_group(&musb->controller->kobj, &musb_attr_group);
+ 	if (status)
+@@ -2404,7 +2402,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
+ fail5:
+ 	musb_exit_debugfs(musb);
+ 
+-fail4:
+ 	musb_gadget_cleanup(musb);
+ 	musb_host_cleanup(musb);
+ 
+diff --git a/drivers/usb/musb/musb_debug.h b/drivers/usb/musb/musb_debug.h
+index 5e0f079dde21..c444a80fe1da 100644
+--- a/drivers/usb/musb/musb_debug.h
++++ b/drivers/usb/musb/musb_debug.h
+@@ -20,12 +20,11 @@
+ void musb_dbg(struct musb *musb, const char *fmt, ...);
+ 
+ #ifdef CONFIG_DEBUG_FS
+-int musb_init_debugfs(struct musb *musb);
++void musb_init_debugfs(struct musb *musb);
+ void musb_exit_debugfs(struct musb *musb);
+ #else
+-static inline int musb_init_debugfs(struct musb *musb)
++static inline void musb_init_debugfs(struct musb *musb)
+ {
+-	return 0;
+ }
+ static inline void musb_exit_debugfs(struct musb *musb)
+ {
+diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
+index e2050cac3eae..f42858e2b54c 100644
+--- a/drivers/usb/musb/musb_debugfs.c
++++ b/drivers/usb/musb/musb_debugfs.c
+@@ -321,48 +321,18 @@ static const struct file_operations musb_softconnect_fops = {
+ 	.release		= single_release,
+ };
+ 
+-int musb_init_debugfs(struct musb *musb)
++void musb_init_debugfs(struct musb *musb)
+ {
+-	struct dentry		*root;
+-	struct dentry		*file;
+-	int			ret;
++	struct dentry *root;
+ 
+ 	root = debugfs_create_dir(dev_name(musb->controller), NULL);
+-	if (!root) {
+-		ret = -ENOMEM;
+-		goto err0;
+-	}
+-
+-	file = debugfs_create_file("regdump", S_IRUGO, root, musb,
+-			&musb_regdump_fops);
+-	if (!file) {
+-		ret = -ENOMEM;
+-		goto err1;
+-	}
+-
+-	file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR,
+-			root, musb, &musb_test_mode_fops);
+-	if (!file) {
+-		ret = -ENOMEM;
+-		goto err1;
+-	}
+-
+-	file = debugfs_create_file("softconnect", S_IRUGO | S_IWUSR,
+-			root, musb, &musb_softconnect_fops);
+-	if (!file) {
+-		ret = -ENOMEM;
+-		goto err1;
+-	}
+-
+ 	musb->debugfs_root = root;
+ 
+-	return 0;
+-
+-err1:
+-	debugfs_remove_recursive(root);
+-
+-err0:
+-	return ret;
++	debugfs_create_file("regdump", S_IRUGO, root, musb, &musb_regdump_fops);
++	debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, musb,
++			    &musb_test_mode_fops);
++	debugfs_create_file("softconnect", S_IRUGO | S_IWUSR, root, musb,
++			    &musb_softconnect_fops);
+ }
+ 
+ void /* __init_or_exit */ musb_exit_debugfs(struct musb *musb)
+diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
+index cfe6bfcbeb5d..fb871eabcc10 100644
+--- a/drivers/usb/musb/musb_dsps.c
++++ b/drivers/usb/musb/musb_dsps.c
+@@ -399,24 +399,17 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
+ static int dsps_musb_dbg_init(struct musb *musb, struct dsps_glue *glue)
+ {
+ 	struct dentry *root;
+-	struct dentry *file;
+ 	char buf[128];
+ 
+ 	sprintf(buf, "%s.dsps", dev_name(musb->controller));
+ 	root = debugfs_create_dir(buf, NULL);
+-	if (!root)
+-		return -ENOMEM;
+ 	glue->dbgfs_root = root;
+ 
+ 	glue->regset.regs = dsps_musb_regs;
+ 	glue->regset.nregs = ARRAY_SIZE(dsps_musb_regs);
+ 	glue->regset.base = musb->ctrl_base;
+ 
+-	file = debugfs_create_regset32("regdump", S_IRUGO, root, &glue->regset);
+-	if (!file) {
+-		debugfs_remove_recursive(root);
+-		return -ENOMEM;
+-	}
++	debugfs_create_regset32("regdump", S_IRUGO, root, &glue->regset);
+ 	return 0;
+ }
+ 
+diff --git a/drivers/usb/typec/fusb302/fusb302.c b/drivers/usb/typec/fusb302/fusb302.c
+index 9c1eba9ea004..07b07ddf6af0 100644
+--- a/drivers/usb/typec/fusb302/fusb302.c
++++ b/drivers/usb/typec/fusb302/fusb302.c
+@@ -117,7 +117,6 @@ struct fusb302_chip {
+ 	u32 snk_pdo[PDO_MAX_OBJECTS];
+ 
+ #ifdef CONFIG_DEBUG_FS
+-	struct dentry *dentry;
+ 	/* lock for log buffer access */
+ 	struct mutex logbuffer_lock;
+ 	int logbuffer_head;
+@@ -215,33 +214,26 @@ DEFINE_SHOW_ATTRIBUTE(fusb302_debug);
+ 
+ static struct dentry *rootdir;
+ 
+-static int fusb302_debugfs_init(struct fusb302_chip *chip)
++static void fusb302_debugfs_init(struct fusb302_chip *chip)
+ {
+ 	mutex_init(&chip->logbuffer_lock);
+-	if (!rootdir) {
++	if (!rootdir)
+ 		rootdir = debugfs_create_dir("fusb302", NULL);
+-		if (!rootdir)
+-			return -ENOMEM;
+-	}
+-
+-	chip->dentry = debugfs_create_file(dev_name(chip->dev),
+-					   S_IFREG | 0444, rootdir,
+-					   chip, &fusb302_debug_fops);
+ 
+-	return 0;
++	debugfs_create_file(dev_name(chip->dev), S_IFREG | 0444, rootdir, chip,
++			    &fusb302_debug_fops);
+ }
+ 
+ static void fusb302_debugfs_exit(struct fusb302_chip *chip)
+ {
+-	debugfs_remove(chip->dentry);
+-	debugfs_remove(rootdir);
++	debugfs_remove_recursive(rootdir);
+ }
+ 
+ #else
+ 
+ static void fusb302_log(const struct fusb302_chip *chip,
+ 			const char *fmt, ...) { }
+-static int fusb302_debugfs_init(const struct fusb302_chip *chip) { return 0; }
++static void fusb302_debugfs_init(const struct fusb302_chip *chip) { }
+ static void fusb302_debugfs_exit(const struct fusb302_chip *chip) { }
+ 
+ #endif
+@@ -1773,9 +1765,7 @@ static int fusb302_probe(struct i2c_client *client,
+ 			return -EPROBE_DEFER;
+ 	}
+ 
+-	ret = fusb302_debugfs_init(chip);
+-	if (ret < 0)
+-		return ret;
++	fusb302_debugfs_init(chip);
+ 
+ 	chip->wq = create_singlethread_workqueue(dev_name(chip->dev));
+ 	if (!chip->wq) {
+diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
+index 0ccd2ce1eb59..1443b3233371 100644
+--- a/drivers/usb/typec/tcpm.c
++++ b/drivers/usb/typec/tcpm.c
+@@ -566,15 +566,12 @@ DEFINE_SHOW_ATTRIBUTE(tcpm_debug);
+ 
+ static struct dentry *rootdir;
+ 
+-static int tcpm_debugfs_init(struct tcpm_port *port)
++static void tcpm_debugfs_init(struct tcpm_port *port)
+ {
+ 	mutex_init(&port->logbuffer_lock);
+ 	/* /sys/kernel/debug/tcpm/usbcX */
+-	if (!rootdir) {
++	if (!rootdir)
+ 		rootdir = debugfs_create_dir("tcpm", NULL);
+-		if (!rootdir)
+-			return -ENOMEM;
+-	}
+ 
+ 	port->dentry = debugfs_create_file(dev_name(port->dev),
+ 					   S_IFREG | 0444, rootdir,
+@@ -595,7 +592,7 @@ static void tcpm_log(const struct tcpm_port *port, const char *fmt, ...) { }
+ __printf(2, 3)
+ static void tcpm_log_force(struct tcpm_port *port, const char *fmt, ...) { }
+ static void tcpm_log_source_caps(struct tcpm_port *port) { }
+-static int tcpm_debugfs_init(const struct tcpm_port *port) { return 0; }
++static void tcpm_debugfs_init(const struct tcpm_port *port) { return 0; }
+ static void tcpm_debugfs_exit(const struct tcpm_port *port) { }
+ 
+ #endif
+-- 
+2.17.0
+
diff --git a/usb-debugfs.patch b/usb-debugfs.patch
new file mode 100644
index 0000000..79ef25f
--- /dev/null
+++ b/usb-debugfs.patch
@@ -0,0 +1,476 @@
+---
+ drivers/usb/chipidea/ci.h    |    2 -
+ drivers/usb/chipidea/core.c  |    4 --
+ drivers/usb/chipidea/debug.c |   56 ++++++++----------------------
+ drivers/usb/core/usb.c       |   26 ++------------
+ drivers/usb/dwc2/debugfs.c   |   78 ++++++++-----------------------------------
+ drivers/usb/dwc3/debugfs.c   |   33 +++---------------
+ drivers/usb/host/ehci-dbg.c  |   30 ++++------------
+ drivers/usb/mon/mon_text.c   |   37 +++-----------------
+ 8 files changed, 60 insertions(+), 206 deletions(-)
+
+--- a/drivers/usb/chipidea/ci.h
++++ b/drivers/usb/chipidea/ci.h
+@@ -450,7 +450,7 @@ void hw_phymode_configure(struct ci_hdrc
+ 
+ void ci_platform_configure(struct ci_hdrc *ci);
+ 
+-int dbg_create_files(struct ci_hdrc *ci);
++void dbg_create_files(struct ci_hdrc *ci);
+ 
+ void dbg_remove_files(struct ci_hdrc *ci);
+ #endif	/* __DRIVERS_USB_CHIPIDEA_CI_H */
+--- a/drivers/usb/chipidea/core.c
++++ b/drivers/usb/chipidea/core.c
+@@ -1062,9 +1062,7 @@ static int ci_hdrc_probe(struct platform
+ 		ci_hdrc_otg_fsm_start(ci);
+ 
+ 	device_set_wakeup_capable(&pdev->dev, true);
+-	ret = dbg_create_files(ci);
+-	if (ret)
+-		goto stop;
++	dbg_create_files(ci);
+ 
+ 	ret = sysfs_create_group(&dev->kobj, &ci_attr_group);
+ 	if (ret)
+--- a/drivers/usb/chipidea/debug.c
++++ b/drivers/usb/chipidea/debug.c
+@@ -340,54 +340,28 @@ DEFINE_SHOW_ATTRIBUTE(ci_registers);
+  *
+  * This function returns an error code
+  */
+-int dbg_create_files(struct ci_hdrc *ci)
++void dbg_create_files(struct ci_hdrc *ci)
+ {
+-	struct dentry *dent;
+-
+ 	ci->debugfs = debugfs_create_dir(dev_name(ci->dev), NULL);
+-	if (!ci->debugfs)
+-		return -ENOMEM;
+-
+-	dent = debugfs_create_file("device", S_IRUGO, ci->debugfs, ci,
+-				   &ci_device_fops);
+-	if (!dent)
+-		goto err;
+-
+-	dent = debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs,
+-				   ci, &ci_port_test_fops);
+-	if (!dent)
+-		goto err;
+ 
+-	dent = debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci,
+-				   &ci_qheads_fops);
+-	if (!dent)
+-		goto err;
+-
+-	dent = debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci,
+-				   &ci_requests_fops);
+-	if (!dent)
+-		goto err;
++	debugfs_create_file("device", S_IRUGO, ci->debugfs, ci,
++			    &ci_device_fops);
++	debugfs_create_file("port_test", S_IRUGO | S_IWUSR, ci->debugfs, ci,
++			    &ci_port_test_fops);
++	debugfs_create_file("qheads", S_IRUGO, ci->debugfs, ci,
++			    &ci_qheads_fops);
++	debugfs_create_file("requests", S_IRUGO, ci->debugfs, ci,
++			    &ci_requests_fops);
+ 
+ 	if (ci_otg_is_fsm_mode(ci)) {
+-		dent = debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci,
+-					&ci_otg_fops);
+-		if (!dent)
+-			goto err;
++		debugfs_create_file("otg", S_IRUGO, ci->debugfs, ci,
++				    &ci_otg_fops);
+ 	}
+ 
+-	dent = debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci,
+-				   &ci_role_fops);
+-	if (!dent)
+-		goto err;
+-
+-	dent = debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci,
+-				&ci_registers_fops);
+-
+-	if (dent)
+-		return 0;
+-err:
+-	debugfs_remove_recursive(ci->debugfs);
+-	return -ENOMEM;
++	debugfs_create_file("role", S_IRUGO | S_IWUSR, ci->debugfs, ci,
++			    &ci_role_fops);
++	debugfs_create_file("registers", S_IRUGO, ci->debugfs, ci,
++			    &ci_registers_fops);
+ }
+ 
+ /**
+--- a/drivers/usb/core/usb.c
++++ b/drivers/usb/core/usb.c
+@@ -1167,30 +1167,16 @@ static struct notifier_block usb_bus_nb
+ struct dentry *usb_debug_root;
+ EXPORT_SYMBOL_GPL(usb_debug_root);
+ 
+-static struct dentry *usb_debug_devices;
+-
+-static int usb_debugfs_init(void)
++static void usb_debugfs_init(void)
+ {
+ 	usb_debug_root = debugfs_create_dir("usb", NULL);
+-	if (!usb_debug_root)
+-		return -ENOENT;
+-
+-	usb_debug_devices = debugfs_create_file("devices", 0444,
+-						usb_debug_root, NULL,
+-						&usbfs_devices_fops);
+-	if (!usb_debug_devices) {
+-		debugfs_remove(usb_debug_root);
+-		usb_debug_root = NULL;
+-		return -ENOENT;
+-	}
+-
+-	return 0;
++	debugfs_create_file("devices", 0444, usb_debug_root, NULL,
++			    &usbfs_devices_fops);
+ }
+ 
+ static void usb_debugfs_cleanup(void)
+ {
+-	debugfs_remove(usb_debug_devices);
+-	debugfs_remove(usb_debug_root);
++	debugfs_remove_recursive(usb_debug_root);
+ }
+ 
+ /*
+@@ -1205,9 +1191,7 @@ static int __init usb_init(void)
+ 	}
+ 	usb_init_pool_max();
+ 
+-	retval = usb_debugfs_init();
+-	if (retval)
+-		goto out;
++	usb_debugfs_init();
+ 
+ 	usb_acpi_register();
+ 	retval = bus_register(&usb_bus_type);
+--- a/drivers/usb/dwc2/debugfs.c
++++ b/drivers/usb/dwc2/debugfs.c
+@@ -293,52 +293,30 @@ DEFINE_SHOW_ATTRIBUTE(ep);
+ static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg)
+ {
+ 	struct dentry *root;
+-	struct dentry *file;
+ 	unsigned int epidx;
+ 
+ 	root = hsotg->debug_root;
+ 
+ 	/* create general state file */
+-
+-	file = debugfs_create_file("state", 0444, root, hsotg, &state_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create state\n", __func__);
+-
+-	file = debugfs_create_file("testmode", 0644, root, hsotg,
+-				   &testmode_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create testmode\n",
+-			__func__);
+-
+-	file = debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create fifo\n", __func__);
++	debugfs_create_file("state", 0444, root, hsotg, &state_fops);
++	debugfs_create_file("testmode", 0644, root, hsotg, &testmode_fops);
++	debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops);
+ 
+ 	/* Create one file for each out endpoint */
+ 	for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) {
+ 		struct dwc2_hsotg_ep *ep;
+ 
+ 		ep = hsotg->eps_out[epidx];
+-		if (ep) {
+-			file = debugfs_create_file(ep->name, 0444,
+-						   root, ep, &ep_fops);
+-			if (IS_ERR(file))
+-				dev_err(hsotg->dev, "failed to create %s debug file\n",
+-					ep->name);
+-		}
++		if (ep)
++			debugfs_create_file(ep->name, 0444, root, ep, &ep_fops);
+ 	}
+ 	/* Create one file for each in endpoint. EP0 is handled with out eps */
+ 	for (epidx = 1; epidx < hsotg->num_of_eps; epidx++) {
+ 		struct dwc2_hsotg_ep *ep;
+ 
+ 		ep = hsotg->eps_in[epidx];
+-		if (ep) {
+-			file = debugfs_create_file(ep->name, 0444,
+-						   root, ep, &ep_fops);
+-			if (IS_ERR(file))
+-				dev_err(hsotg->dev, "failed to create %s debug file\n",
+-					ep->name);
+-		}
++		if (ep)
++			debugfs_create_file(ep->name, 0444, root, ep, &ep_fops);
+ 	}
+ }
+ #else
+@@ -790,32 +768,14 @@ DEFINE_SHOW_ATTRIBUTE(dr_mode);
+ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
+ {
+ 	int			ret;
+-	struct dentry		*file;
++	struct dentry		*root;
+ 
+-	hsotg->debug_root = debugfs_create_dir(dev_name(hsotg->dev), NULL);
+-	if (!hsotg->debug_root) {
+-		ret = -ENOMEM;
+-		goto err0;
+-	}
++	root = debugfs_create_dir(dev_name(hsotg->dev), NULL);
++	hsotg->debug_root = root;
+ 
+-	file = debugfs_create_file("params", 0444,
+-				   hsotg->debug_root,
+-				   hsotg, &params_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create params\n", __func__);
+-
+-	file = debugfs_create_file("hw_params", 0444,
+-				   hsotg->debug_root,
+-				   hsotg, &hw_params_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create hw_params\n",
+-			__func__);
+-
+-	file = debugfs_create_file("dr_mode", 0444,
+-				   hsotg->debug_root,
+-				   hsotg, &dr_mode_fops);
+-	if (IS_ERR(file))
+-		dev_err(hsotg->dev, "%s: failed to create dr_mode\n", __func__);
++	debugfs_create_file("params", 0444, root, hsotg, &params_fops);
++	debugfs_create_file("hw_params", 0444, root, hsotg, &hw_params_fops);
++	debugfs_create_file("dr_mode", 0444, root, hsotg, &dr_mode_fops);
+ 
+ 	/* Add gadget debugfs nodes */
+ 	dwc2_hsotg_create_debug(hsotg);
+@@ -824,24 +784,18 @@ int dwc2_debugfs_init(struct dwc2_hsotg
+ 								GFP_KERNEL);
+ 	if (!hsotg->regset) {
+ 		ret = -ENOMEM;
+-		goto err1;
++		goto err;
+ 	}
+ 
+ 	hsotg->regset->regs = dwc2_regs;
+ 	hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs);
+ 	hsotg->regset->base = hsotg->regs;
+ 
+-	file = debugfs_create_regset32("regdump", 0444, hsotg->debug_root,
+-				       hsotg->regset);
+-	if (!file) {
+-		ret = -ENOMEM;
+-		goto err1;
+-	}
++	debugfs_create_regset32("regdump", 0444, root, hsotg->regset);
+ 
+ 	return 0;
+-err1:
++err:
+ 	debugfs_remove_recursive(hsotg->debug_root);
+-err0:
+ 	return ret;
+ }
+ 
+--- a/drivers/usb/dwc3/debugfs.c
++++ b/drivers/usb/dwc3/debugfs.c
+@@ -716,9 +716,6 @@ static void dwc3_debugfs_create_endpoint
+ 	struct dentry		*dir;
+ 
+ 	dir = debugfs_create_dir(dep->name, parent);
+-	if (IS_ERR_OR_NULL(dir))
+-		return;
+-
+ 	dwc3_debugfs_create_endpoint_files(dep, dir);
+ }
+ 
+@@ -740,14 +737,8 @@ static void dwc3_debugfs_create_endpoint
+ void dwc3_debugfs_init(struct dwc3 *dwc)
+ {
+ 	struct dentry		*root;
+-	struct dentry           *file;
+ 
+ 	root = debugfs_create_dir(dev_name(dwc->dev), NULL);
+-	if (IS_ERR_OR_NULL(root)) {
+-		if (!root)
+-			dev_err(dwc->dev, "Can't create debugfs root\n");
+-		return;
+-	}
+ 	dwc->root = root;
+ 
+ 	dwc->regset = kzalloc(sizeof(*dwc->regset), GFP_KERNEL);
+@@ -760,29 +751,19 @@ void dwc3_debugfs_init(struct dwc3 *dwc)
+ 	dwc->regset->nregs = ARRAY_SIZE(dwc3_regs);
+ 	dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START;
+ 
+-	file = debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);
+-	if (!file)
+-		dev_dbg(dwc->dev, "Can't create debugfs regdump\n");
++	debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);
+ 
+ 	if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) {
+-		file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root,
+-				dwc, &dwc3_mode_fops);
+-		if (!file)
+-			dev_dbg(dwc->dev, "Can't create debugfs mode\n");
++		debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, dwc,
++				    &dwc3_mode_fops);
+ 	}
+ 
+ 	if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) ||
+ 			IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
+-		file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root,
+-				dwc, &dwc3_testmode_fops);
+-		if (!file)
+-			dev_dbg(dwc->dev, "Can't create debugfs testmode\n");
+-
+-		file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR,
+-				root, dwc, &dwc3_link_state_fops);
+-		if (!file)
+-			dev_dbg(dwc->dev, "Can't create debugfs link_state\n");
+-
++		debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, dwc,
++				    &dwc3_testmode_fops);
++		debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root, dwc,
++				    &dwc3_link_state_fops);
+ 		dwc3_debugfs_create_endpoint_dirs(dwc, root);
+ 	}
+ }
+--- a/drivers/usb/host/ehci-dbg.c
++++ b/drivers/usb/host/ehci-dbg.c
+@@ -1028,29 +1028,15 @@ static inline void create_debug_files(st
+ 	struct usb_bus *bus = &ehci_to_hcd(ehci)->self;
+ 
+ 	ehci->debug_dir = debugfs_create_dir(bus->bus_name, ehci_debug_root);
+-	if (!ehci->debug_dir)
+-		return;
+ 
+-	if (!debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus,
+-						&debug_async_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus,
+-						&debug_bandwidth_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus,
+-						&debug_periodic_fops))
+-		goto file_error;
+-
+-	if (!debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus,
+-						    &debug_registers_fops))
+-		goto file_error;
+-
+-	return;
+-
+-file_error:
+-	debugfs_remove_recursive(ehci->debug_dir);
++	debugfs_create_file("async", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_async_fops);
++	debugfs_create_file("bandwidth", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_bandwidth_fops);
++	debugfs_create_file("periodic", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_periodic_fops);
++	debugfs_create_file("registers", S_IRUGO, ehci->debug_dir, bus,
++			    &debug_registers_fops);
+ }
+ 
+ static inline void remove_debug_files(struct ehci_hcd *ehci)
+--- a/drivers/usb/mon/mon_text.c
++++ b/drivers/usb/mon/mon_text.c
+@@ -700,7 +700,6 @@ static const struct file_operations mon_
+ 
+ int mon_text_add(struct mon_bus *mbus, const struct usb_bus *ubus)
+ {
+-	struct dentry *d;
+ 	enum { NAMESZ = 10 };
+ 	char name[NAMESZ];
+ 	int busnum = ubus? ubus->busnum: 0;
+@@ -713,42 +712,32 @@ int mon_text_add(struct mon_bus *mbus, c
+ 		rc = snprintf(name, NAMESZ, "%dt", busnum);
+ 		if (rc <= 0 || rc >= NAMESZ)
+ 			goto err_print_t;
+-		d = debugfs_create_file(name, 0600, mon_dir, mbus,
++		mbus->dent_t = debugfs_create_file(name, 0600, mon_dir, mbus,
+ 							     &mon_fops_text_t);
+-		if (d == NULL)
+-			goto err_create_t;
+-		mbus->dent_t = d;
+ 	}
+ 
+ 	rc = snprintf(name, NAMESZ, "%du", busnum);
+ 	if (rc <= 0 || rc >= NAMESZ)
+ 		goto err_print_u;
+-	d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_text_u);
+-	if (d == NULL)
+-		goto err_create_u;
+-	mbus->dent_u = d;
++	mbus->dent_u = debugfs_create_file(name, 0600, mon_dir, mbus,
++					   &mon_fops_text_u);
+ 
+ 	rc = snprintf(name, NAMESZ, "%ds", busnum);
+ 	if (rc <= 0 || rc >= NAMESZ)
+ 		goto err_print_s;
+-	d = debugfs_create_file(name, 0600, mon_dir, mbus, &mon_fops_stat);
+-	if (d == NULL)
+-		goto err_create_s;
+-	mbus->dent_s = d;
++	mbus->dent_s = debugfs_create_file(name, 0600, mon_dir, mbus,
++					   &mon_fops_stat);
+ 
+ 	return 1;
+ 
+-err_create_s:
+ err_print_s:
+ 	debugfs_remove(mbus->dent_u);
+ 	mbus->dent_u = NULL;
+-err_create_u:
+ err_print_u:
+ 	if (ubus != NULL) {
+ 		debugfs_remove(mbus->dent_t);
+ 		mbus->dent_t = NULL;
+ 	}
+-err_create_t:
+ err_print_t:
+ 	return 0;
+ }
+@@ -756,8 +745,7 @@ err_print_t:
+ void mon_text_del(struct mon_bus *mbus)
+ {
+ 	debugfs_remove(mbus->dent_u);
+-	if (mbus->dent_t != NULL)
+-		debugfs_remove(mbus->dent_t);
++	debugfs_remove(mbus->dent_t);
+ 	debugfs_remove(mbus->dent_s);
+ }
+ 
+@@ -775,18 +763,7 @@ static void mon_text_ctor(void *mem)
+ 
+ int __init mon_text_init(void)
+ {
+-	struct dentry *mondir;
+-
+-	mondir = debugfs_create_dir("usbmon", usb_debug_root);
+-	if (IS_ERR(mondir)) {
+-		/* debugfs not available, but we can use usbmon without it */
+-		return 0;
+-	}
+-	if (mondir == NULL) {
+-		printk(KERN_NOTICE TAG ": unable to create usbmon directory\n");
+-		return -ENOMEM;
+-	}
+-	mon_dir = mondir;
++	mon_dir = debugfs_create_dir("usbmon", usb_debug_root);
+ 	return 0;
+ }
+ 
diff --git a/usb-serial-visor-handle-potential-invalid-device-configuration.patch b/usb-serial-visor-handle-potential-invalid-device-configuration.patch
index 15f4651..c73ab62 100644
--- a/usb-serial-visor-handle-potential-invalid-device-configuration.patch
+++ b/usb-serial-visor-handle-potential-invalid-device-configuration.patch
@@ -24,11 +24,13 @@
 here as well.
 
 
-diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
-index f5373ed2cd45..8ddbecc25d89 100644
+---
+ drivers/usb/serial/visor.c |   69 ++++++++++++++++++++++-----------------------
+ 1 file changed, 35 insertions(+), 34 deletions(-)
+
 --- a/drivers/usb/serial/visor.c
 +++ b/drivers/usb/serial/visor.c
-@@ -335,47 +335,48 @@ static int palm_os_3_probe(struct usb_serial *serial,
+@@ -335,47 +335,48 @@ static int palm_os_3_probe(struct usb_se
  		goto exit;
  	}