> 
> Am Donnerstag, 4. Januar 2007 08:25 schrieb Mike King:
> > > 
> > > Am Donnerstag, 4. Januar 2007 07:58 schrieb Mike King:
> > > > > 
> > > > > Am Donnerstag, 4. Januar 2007 07:30 schrieb Mike King:
> > > > > > Anytime a SET_CONFIGURATION is sent to the device without being 
> > > > > > preceeded
> > > > > > by the secret vendor specific command the device reverts to the 
> > > > > > previous
> > > > > > device descriptor data indicating 100ma.  A normal reset causes it 
> > > > > > to default to the normal power setting.
> > > > > > 
> > > > > > So, my basic problem is that the Linux USB core does the 
> > > > > > SET_CONFIGURATION
> > > > > > as part of device initialization after the device is plugged in, 
> > > > > > long
> > > > > > before my driver is probed.  I never get the opportunity to send
> > > > > > the secret command to the device.  If I actually write the secret
> > > > > > command followed by a SET_CONFIGURATION from my driver the BB device
> > > > > > will reset itself but the Linux core does another SET_CONFIGURATION
> > > > > > upon seeing the reset and so the hidden device descriptor data has
> > > > > > reverted back to the low power setting.
> > > > > 
> > > > > Does it work if you issue the secret command, wait and then reset the 
> > > > > device
> > > > > in your probe method?
> > > > > 
> > > > >       Regards
> > > > >               Oliver
> > > > > 
> > > > 
> > > > Oliver,
> > > > 
> > > > Nope.  Writing the secret command and the SET_CONFIGURATION causes the
> > > > device to reset itself.  USB Core reassigns the address and issues yet
> > > > another SET_CONFIGURATION which causes the default device descriptor to
> > > > reappear.
> > > 
> > > Sorry, I was unclear. I am suggesting that in your probe() method you:
> > > 
> > > - issue the secret command
> > > - wait the settling time
> > > - issue a full device reset, not SET_CONFIGURATION
> > > 
> > > If that doesn't work I can't see a nice way to deal with this problem.
> > > 
> > > Claiming a full device is major surgery. If you need to, you can claim all
> > > other interfaces from the probe() method for the first interface.
> > > If the little trick suggested above doesn't work, I don't see a way to get
> > > around this without messing with usbcore.
> > > 
> > >   Regards
> > >           Oliver
> > > 
> > 
> > Oliver,
> > 
> > The settling time is only necessary after the secret command and the 
> > SET_CONFIGURATION.  The device resets itself and is coming out of reset 
> > and I assume that the memory controller is not quite ready to be used.
> > 
> > By full device reset do you mean the usb_reset_configuration() call ?
> > 
> > Once the device sees a new USB_REQ_SET_CONFIGURATION preceeded by the
> > secret command it resets itself, causing the hub to think the 
> > device has been unplugged and replugged consequently reassinging device
> > address and issuing another USB_REQ_SET_CONFIGURATION that is not
> > preceeded by the secret command, so the default descriptor has been 
> > restored.
> 
> Hi,
> 
> maybe I am dense. On Windows you see:
> 
> secret command -> SET_CONFIGURATION -> {device resets by itself} -> 
> SET_CONFIGURATION  >> 500 mA
> 
> don't you? If so, I am suggesting you do:
> 
> secret command -> usb_reset_device() -> {device is reset by the hub} -> 
> SET_CONFIGURATION (from normal probe)
> 
> I am speculating that the device firmware has code like:
> 
> switch (command) {
> case SECRET_COMMAND:
>       reset_upon_set_config = 1;
>       full_power = 1;
>       break;
> case SET_CONFIGURATION:
>       if (reset_upon_set_config) {
>               reset();
>       } else {
>               set_config();
>       }
> 
> So it might not matter how the reset is done.
> 
>       Regards
>               Oliver
> 

Oliver,

I suspect that I am the one that is dense.  I have been pounding away
at this all day and night and my senses have been dulled by the pizza
and beer.

You got exactly the sequence I see on the analyzer :

secret command -> SET_CONFIG -> device reset itself -> descriptor = 500ma ->
   SET_CONFIG -> bulk rd/wr ....


I'll give the usb_reset_device() a go tommorrow when I get in to work.

Thanks,
Mike

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to