Hi,
> Now I implemented your hc811 based stuff into our 2.6.10 tree.
> The chip enumerates once a while and breaks doing that...
Could you please be more specific here.
> So, may be error on my side when doing platform Setup up or something.
> You say your driver does this and that on 2.6.9. So I took vanilla 2.6.9
> and put the hc811 based isp116x stuff into it. Compiles fine, but I get
> "irq65: nobody cared" and tried to get it away the whole day now to no
> avail. IRQ65 (GPIOA(1)) Is exclusively used by the isp116x.
>
> 116x: driver isp116x-hcd, Jan 4 2005
> Resetting isp116x
> Resetting isp116x
> 116x: Found ISP116x Host Controller
> 116x: ISP116x Host Controller, irq 65
> isp116x-hcd isp116x-hcd0: new USB bus registered, assigned bus number 1
> usb usb1: Product: ISP116x Host Controller
> usb usb1: Manufacturer: Linux 2.6.9-imx1 isp116x-hcd
> usb usb1: SerialNumber: isp116x-hcd0
> hub 1-0:1.0: USB hub found
> hub 1-0:1.0: 2 ports detected
> irq65: nobody cared
I think "nobody cared" means two things: either there was no
irq handler for that irq installed, or the existing handler
returned neither IRQ_HANDLED nor IRQ_NONE. To discriminate
between these cases, you can add to the end of the
isp116x_irq(), just before the 'return ret;' statement a
prink showing the 'ret' value.
> static struct resource isp116x_hcd_resources[] = {
> {
> .name = "mem",
> .start = SCB9328_USB_PHYS + 0,
> .end = SCB9328_USB_PHYS + 1,
> .flags = IORESOURCE_MEM,
> },
> {
> .name = "mem",
> .start = SCB9328_USB_PHYS + 2,
> .end = SCB9328_USB_PHYS + 3,
> .flags = IORESOURCE_MEM,
> },
> {
> .name = "irq",
> .start = SCB9328_USB_IRQ,
> .end = SCB9328_USB_IRQ,
> .flags = IORESOURCE_IRQ,
> },
> {
> .name = "dma",
> .start = -1,
> .end = -1,
> .flags = IORESOURCE_DMA,
> },
There is no dma resource parsing in the driver. You can
remove this entry.
> };
>
> static void pltf_isp116x_reset(struct device *dev, int set)
> {
> printk("Resetting isp116x\n");
> /* unsigned long flags;
>
> local_irq_save(flags);
> if( !set ){
> ISP116x_RESET_PORT |= ISP116x_RESET_BIT;
> barrier();
> ISP116x_RESET_DIR_PORT |= ISP116x_RESET_BIT;
> }else{
> ISP116x_RESET_PORT &= ~ISP116x_RESET_BIT;
> barrier();
> ISP116x_RESET_DIR_PORT |= ISP116x_RESET_BIT;
> }
> local_irq_restore(flags); */
> }
Are you sure this directly copied reset function really
works for you too?
> static struct isp116x_platform_data pltf_isp116x_platform_data = {
> .sel15Kres = 1,
> .clknotstop = 1,
> .no_power_switching = 1,
> .reset = pltf_isp116x_reset,
> // .delay = pltf_isp116x_delay,
> };
Are these settings correct also for your board. Please check
these. Maybe you have to set some other parameters (see
usb_isp116x.h).
> static struct platform_device isp116x_hcd = {
> .name = "isp116x-hcd",
> .id = 0,
> .num_resources = ARRAY_SIZE(isp116x_hcd_resources),
> .resource = isp116x_hcd_resources,
> .dev = {
> .platform_data = &pltf_isp116x_platform_data,
> }
> };
Otherwise, the platform conf seems ok.
Olav
-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel