Hi, Greg KH writes: > On Sun, Jan 10, 2010 at 03:44:09AM +0000, Ben Hutchings wrote: > > This code won't compile on ARM, on anything after 2.6.26: > > > > #ifdef CONFIG_ARM > > if (isp1362_hcd->board) > > set_irq_type(irq, isp1362_hcd->board->int_act_high ? IRQT_RISING : IRQT_FALLING); > > #endif > > > > Which is rather odd for a driver primarily meant for ARM systems and > > merged in 2.6.32... > > > > (Maybe this one should have gone through staging, Greg?) > > Odd. Lothar, any thoughts? > The following patch should fix this, but the currently only users of the driver according to the defconfigs (blackfin bf527, bf537) all have IORESOURCE_IRQ_HIGHLEVEL in their IRQ_RESOURCE flags, while the driver was passing IRQF_TRIGGER_LOW to the usb_add_hcd() function. So either the setting in the driver or in the platform code was incorrect. I added the blackfin maintainer to the 'CC' list for commenting on this. Furthermore I could only compile-test the patch (with the pxa3xx_defconfig), since I don't have any hardware with an ISP1362 any more. --- a/drivers/usb/host/isp1362-hcd.c 2009-12-03 04:51:21.000000000 +0100 +++ b/drivers/usb/host/isp1362-hcd.c 2010-01-11 09:38:19.000000000 +0100 @@ -2284,10 +2284,10 @@ dev_info(hcd->self.controller, "ISP1362 Memory usage:\n"); dev_info(hcd->self.controller, " ISTL: 2 * %4d: %4d @ $%04x:$%04x\n", istl_size / 2, istl_size, 0, istl_size / 2); - dev_info(hcd->self.controller, " INTL: %4d * (%3lu+8): %4d @ $%04x\n", + dev_info(hcd->self.controller, " INTL: %4d * (%3u+8): %4d @ $%04x\n", ISP1362_INTL_BUFFERS, intl_blksize - PTD_HEADER_SIZE, intl_size, istl_size); - dev_info(hcd->self.controller, " ATL : %4d * (%3lu+8): %4d @ $%04x\n", + dev_info(hcd->self.controller, " ATL : %4d * (%3u+8): %4d @ $%04x\n", atl_buffers, atl_blksize - PTD_HEADER_SIZE, atl_size, istl_size + intl_size); dev_info(hcd->self.controller, " USED/FREE: %4d %4d\n", total, @@ -2711,6 +2711,8 @@ void __iomem *data_reg; int irq; int retval = 0; + struct resource *irq_res; + unsigned int irq_flags = 0; /* basic sanity checks first. board-specific init logic should * have initialized this the three resources and probably board @@ -2724,11 +2726,12 @@ data = platform_get_resource(pdev, IORESOURCE_MEM, 0); addr = platform_get_resource(pdev, IORESOURCE_MEM, 1); - irq = platform_get_irq(pdev, 0); - if (!addr || !data || irq < 0) { + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (!addr || !data || irq_res) { retval = -ENODEV; goto err1; } + irq = irq_res->start; #ifdef CONFIG_USB_HCD_DMA if (pdev->dev.dma_mask) { @@ -2795,12 +2798,20 @@ } #endif -#ifdef CONFIG_ARM - if (isp1362_hcd->board) - set_irq_type(irq, isp1362_hcd->board->int_act_high ? IRQT_RISING : IRQT_FALLING); -#endif + if (irq_flags & IORESOURCE_IRQ_HIGHEDGE) { + irq_flags |= IRQF_TRIGGER_RISING; + } + if (irq_flags & IORESOURCE_IRQ_LOWEDGE) { + irq_flags |= IRQF_TRIGGER_FALLING; + } + if (irq_flags & IORESOURCE_IRQ_HIGHLEVEL) { + irq_flags |= IRQF_TRIGGER_HIGH; + } + if (irq_flags & IORESOURCE_IRQ_LOWLEVEL) { + irq_flags |= IRQF_TRIGGER_LOW; + } - retval = usb_add_hcd(hcd, irq, IRQF_TRIGGER_LOW | IRQF_DISABLED | IRQF_SHARED); + retval = usb_add_hcd(hcd, irq, irq_flags | IRQF_DISABLED | IRQF_SHARED); if (retval != 0) goto err6; pr_info("%s, irq %d\n", hcd->product_desc, irq); Lothar Waßmann -- ___________________________________________________________ Ka-Ro electronics GmbH | Pascalstraße 22 | D - 52076 Aachen Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10 Geschäftsführer: Matthias Kaussen Handelsregistereintrag: Amtsgericht Aachen, HRB 4996 www.karo-electronics.de | info@xxxxxxxxxxxxxxxxxxx ___________________________________________________________ -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html