Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4942093e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
  USB: revert portions of "UNUSUAL_DEV: Sync up some reported devices from Ubuntu"
  usb: Remove broken optimisation in OHCI IRQ handler
  USB: at91_udc: correct hanging while disconnecting usb cable
  USB: use IRQF_DISABLED for HCD interrupt handlers
  USB: fix locking loop by avoiding flush_scheduled_work
  usb.h: fix kernel-doc warning
  USB: option: Bind to the correct interface of the Huawei E220
  USB: cp2101: new device id
  usb-storage: Fix devices that cannot handle 32k transfers
  USB: sierra: fix product id
parents 07232b97 e70e7690
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -125,7 +125,7 @@ int usb_hcd_pci_probe (struct pci_dev *dev, const struct pci_device_id *id)


	pci_set_master (dev);
	pci_set_master (dev);


	retval = usb_add_hcd (hcd, dev->irq, IRQF_SHARED);
	retval = usb_add_hcd(hcd, dev->irq, IRQF_DISABLED | IRQF_SHARED);
	if (retval != 0)
	if (retval != 0)
		goto err4;
		goto err4;
	return retval;
	return retval;
+3 −3
Original line number Original line Diff line number Diff line
@@ -522,9 +522,9 @@ static void hub_quiesce(struct usb_hub *hub)
	/* (blocking) stop khubd and related activity */
	/* (blocking) stop khubd and related activity */
	usb_kill_urb(hub->urb);
	usb_kill_urb(hub->urb);
	if (hub->has_indicators)
	if (hub->has_indicators)
		cancel_delayed_work(&hub->leds);
		cancel_delayed_work_sync(&hub->leds);
	if (hub->has_indicators || hub->tt.hub)
	if (hub->tt.hub)
		flush_scheduled_work();
		cancel_work_sync(&hub->tt.kevent);
}
}


static void hub_activate(struct usb_hub *hub)
static void hub_activate(struct usb_hub *hub)
+2 −0
Original line number Original line Diff line number Diff line
@@ -887,6 +887,7 @@ static void pullup(struct at91_udc *udc, int is_on)


	if (is_on) {
	if (is_on) {
		clk_on(udc);
		clk_on(udc);
		at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
		at91_udp_write(udc, AT91_UDP_TXVC, 0);
		at91_udp_write(udc, AT91_UDP_TXVC, 0);
		if (cpu_is_at91rm9200())
		if (cpu_is_at91rm9200())
			at91_set_gpio_value(udc->board.pullup_pin, 1);
			at91_set_gpio_value(udc->board.pullup_pin, 1);
@@ -904,6 +905,7 @@ static void pullup(struct at91_udc *udc, int is_on)
		}
		}
	} else {
	} else {
		stop_activity(udc);
		stop_activity(udc);
		at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
		at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
		at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
		if (cpu_is_at91rm9200())
		if (cpu_is_at91rm9200())
			at91_set_gpio_value(udc->board.pullup_pin, 0);
			at91_set_gpio_value(udc->board.pullup_pin, 0);
+1 −1
Original line number Original line Diff line number Diff line
@@ -122,7 +122,7 @@ int usb_hcd_fsl_probe(const struct hc_driver *driver,
	temp = in_le32(hcd->regs + 0x1a8);
	temp = in_le32(hcd->regs + 0x1a8);
	out_le32(hcd->regs + 0x1a8, temp | 0x3);
	out_le32(hcd->regs + 0x1a8, temp | 0x3);


	retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
	retval = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED);
	if (retval != 0)
	if (retval != 0)
		goto err4;
		goto err4;
	return retval;
	return retval;
+13 −10
Original line number Original line Diff line number Diff line
@@ -732,24 +732,27 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
	struct ohci_regs __iomem *regs = ohci->regs;
	struct ohci_regs __iomem *regs = ohci->regs;
	int			ints;
	int			ints;


	/* we can eliminate a (slow) ohci_readl()
	/* Read interrupt status (and flush pending writes).  We ignore the
	 * if _only_ WDH caused this irq
	 * optimization of checking the LSB of hcca->done_head; it doesn't
	 * work on all systems (edge triggering for OHCI can be a factor).
	 */
	 */
	if ((ohci->hcca->done_head != 0)
	ints = ohci_readl(ohci, &regs->intrstatus);
			&& ! (hc32_to_cpup (ohci, &ohci->hcca->done_head)
				& 0x01)) {
		ints =  OHCI_INTR_WDH;


	/* cardbus/... hardware gone before remove() */
	/* Check for an all 1's result which is a typical consequence
	} else if ((ints = ohci_readl (ohci, &regs->intrstatus)) == ~(u32)0) {
	 * of dead, unclocked, or unplugged (CardBus...) devices
	 */
	if (ints == ~(u32)0) {
		disable (ohci);
		disable (ohci);
		ohci_dbg (ohci, "device removed!\n");
		ohci_dbg (ohci, "device removed!\n");
		return IRQ_HANDLED;
		return IRQ_HANDLED;
	}

	/* We only care about interrupts that are enabled */
	ints &= ohci_readl(ohci, &regs->intrenable);


	/* interrupt for some other device? */
	/* interrupt for some other device? */
	} else if ((ints &= ohci_readl (ohci, &regs->intrenable)) == 0) {
	if (ints == 0)
		return IRQ_NOTMINE;
		return IRQ_NOTMINE;
	}


	if (ints & OHCI_INTR_UE) {
	if (ints & OHCI_INTR_UE) {
		// e.g. due to PCI Master/Target Abort
		// e.g. due to PCI Master/Target Abort
Loading