Commit 21b73ffc authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'usb-6.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
 "Here are some small USB fixes for 6.7-rc5 to resolve some reported
  issues. Included in here are:

   - usb gadget f_hid, and uevent fix

   - xhci driver revert to resolve a much-reported issue

   - typec driver fix

  All of these have been in linux-next with no reported issues"

* tag 'usb-6.7-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  usb: gadget: f_hid: fix report descriptor allocation
  Revert "xhci: Loosen RPM as default policy to cover for AMD xHC 1.1"
  usb: typec: class: fix typec_altmode_put_partner to put plugs
  USB: gadget: core: adjust uevent timing on gadget unbind
parents 0b526090 61890dc2
...@@ -92,6 +92,7 @@ static void hidg_release(struct device *dev) ...@@ -92,6 +92,7 @@ static void hidg_release(struct device *dev)
{ {
struct f_hidg *hidg = container_of(dev, struct f_hidg, dev); struct f_hidg *hidg = container_of(dev, struct f_hidg, dev);
kfree(hidg->report_desc);
kfree(hidg->set_report_buf); kfree(hidg->set_report_buf);
kfree(hidg); kfree(hidg);
} }
...@@ -1287,9 +1288,9 @@ static struct usb_function *hidg_alloc(struct usb_function_instance *fi) ...@@ -1287,9 +1288,9 @@ static struct usb_function *hidg_alloc(struct usb_function_instance *fi)
hidg->report_length = opts->report_length; hidg->report_length = opts->report_length;
hidg->report_desc_length = opts->report_desc_length; hidg->report_desc_length = opts->report_desc_length;
if (opts->report_desc) { if (opts->report_desc) {
hidg->report_desc = devm_kmemdup(&hidg->dev, opts->report_desc, hidg->report_desc = kmemdup(opts->report_desc,
opts->report_desc_length, opts->report_desc_length,
GFP_KERNEL); GFP_KERNEL);
if (!hidg->report_desc) { if (!hidg->report_desc) {
ret = -ENOMEM; ret = -ENOMEM;
goto err_put_device; goto err_put_device;
......
...@@ -1646,8 +1646,6 @@ static void gadget_unbind_driver(struct device *dev) ...@@ -1646,8 +1646,6 @@ static void gadget_unbind_driver(struct device *dev)
dev_dbg(&udc->dev, "unbinding gadget driver [%s]\n", driver->function); dev_dbg(&udc->dev, "unbinding gadget driver [%s]\n", driver->function);
kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
udc->allow_connect = false; udc->allow_connect = false;
cancel_work_sync(&udc->vbus_work); cancel_work_sync(&udc->vbus_work);
mutex_lock(&udc->connect_lock); mutex_lock(&udc->connect_lock);
...@@ -1667,6 +1665,8 @@ static void gadget_unbind_driver(struct device *dev) ...@@ -1667,6 +1665,8 @@ static void gadget_unbind_driver(struct device *dev)
driver->is_bound = false; driver->is_bound = false;
udc->driver = NULL; udc->driver = NULL;
mutex_unlock(&udc_lock); mutex_unlock(&udc_lock);
kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
......
...@@ -535,8 +535,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) ...@@ -535,8 +535,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
/* xHC spec requires PCI devices to support D3hot and D3cold */ /* xHC spec requires PCI devices to support D3hot and D3cold */
if (xhci->hci_version >= 0x120) if (xhci->hci_version >= 0x120)
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW; xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
else if (pdev->vendor == PCI_VENDOR_ID_AMD && xhci->hci_version >= 0x110)
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
if (xhci->quirks & XHCI_RESET_ON_RESUME) if (xhci->quirks & XHCI_RESET_ON_RESUME)
xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
......
...@@ -267,7 +267,7 @@ static void typec_altmode_put_partner(struct altmode *altmode) ...@@ -267,7 +267,7 @@ static void typec_altmode_put_partner(struct altmode *altmode)
if (!partner) if (!partner)
return; return;
adev = &partner->adev; adev = &altmode->adev;
if (is_typec_plug(adev->dev.parent)) { if (is_typec_plug(adev->dev.parent)) {
struct typec_plug *plug = to_typec_plug(adev->dev.parent); struct typec_plug *plug = to_typec_plug(adev->dev.parent);
...@@ -497,7 +497,8 @@ static void typec_altmode_release(struct device *dev) ...@@ -497,7 +497,8 @@ static void typec_altmode_release(struct device *dev)
{ {
struct altmode *alt = to_altmode(to_typec_altmode(dev)); struct altmode *alt = to_altmode(to_typec_altmode(dev));
typec_altmode_put_partner(alt); if (!is_typec_port(dev->parent))
typec_altmode_put_partner(alt);
altmode_id_remove(alt->adev.dev.parent, alt->id); altmode_id_remove(alt->adev.dev.parent, alt->id);
kfree(alt); kfree(alt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment