Re: Olimex ARM-USB-OCD and ftdi-sio driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 6 Mar 2009, Jon Smirl wrote:

> It can't find the end point. It is asking for EP 81 on interface 0.

You mean 0x81.

> 	if ((uurb->endpoint & USB_ENDPOINT_DIR_MASK) != 0) {
> 		is_in = 1;
> 		ep = ps->dev->ep_in[uurb->endpoint & USB_ENDPOINT_NUMBER_MASK];
> 	} else {
> 		is_in = 0;
> 		ep = ps->dev->ep_out[uurb->endpoint & USB_ENDPOINT_NUMBER_MASK];
> 	}
> 	if (!ep)
> 		return -ENOENT;
> 
> Should it be there?

Yes, indeed it should.  In your original message you said you were 
using 2.6.28.  It's entirely possible that a bug in this area has been 
fixed in the .stable series -- have you tried 2.6.28.7?

> All of this works ok if ftdi_sio is unloaded. Does having ftdi_sio
> bound effect these arrays?

Not directly, but there could be an indirect effect.

> The device only has one interface.

You mean only one configuration.

> Should the fact the the device was
> already in config #1 been detected before generating the error?

Before generating which error?  It _was_ detected before the failure of 
the USBDEVFS_SETCONFIGURATION ioctl:

> usb 7-2: usbfs: interface 1 claimed by ftdi_sio while 'jtag' sets 
> config #1

Look at proc_setconfig() in devio.c to see what happens when libftdi
does that ioctl.

> An attempt to set config #1 when config #1 was already set should be a
> nop, right?

No, not really.  If a driver is already bound to an interface when your
program does the Set-Config then the result should be a simple error
with no side effects.  So with ftdi_sio bound to interface 1, the
Set-Config should have done nothing.  (You might want to try adding
code at the beginning and end of proc_setconfig() to check whether
ps->dev->ep_in[1] is set.  You might also want to print out its value
just before the check in proc_do_submiturb(), just to be extra
certain.)

But...  If none of the interfaces are already bound then the Set-Config 
request is sent to the device, resetting it, and the kernel resets some 
of its internal state (including those arrays of endpoint pointers).

Alan Stern

--
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

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux