Methods (b) and (c) should both work.  If (b) isn't working, the device
must have crashed it's internal firmware pretty badly.

Matt

On Thu, Jan 10, 2002 at 05:10:51PM +0100, Sancho Dauskardt wrote:
> Hi all,
> 
>   in writing a driver for the OnSpec 90c36-LC1 CF/SM/MS/SD controller (aka. 
> DataFab 0xA109), I am currently stumbling over a big problem:
>   how should you really reset a device, for which no known reset command 
> exists (eg. after a card has been removed during a read access, and the 
> controller's crashed) ?
> 
> What I tried:
> a) hub.c's usb_reset_device()  doesn't change anything (lower layer usb 
> responds, but bulk iface still dead).
> 
> b) Find next higher up hub, and then
>       usb_clear_port_feature(hub, port + 1, USB_PORT_FEAT_ENABLE);
>    then
>       usb_reset_device() to get it going again.
>    Same results as with a)
> 
> c) Find next higher up hub, and then
>       usb_clear_port_feature(hub, port + 1, USB_PORT_FEAT_POWER);     
>     wait
>       usb_set_port_feature(hub, port + 1, USB_PORT_FEAT_POWER);       
>    and now hope that the device will enumerate, and that usb-storage will 
> find the new
>    reincarnation and link it against the existing us_data.
>    Seems to work "quite often".
> 
> Any comments / ideas how this should work best ?
> 
> If the power hack is the only method, it would at least be nice to stop the 
> enumerating, and reuse the old device numbers.
> 
> 
> FYI: The device I'm using here is a ACOMdATA MF6. It consists of 2x 
> 90C36-LC1 Controller (one for CF/SM, the other for SD/MS). The 2 chips are 
> connected via a 4-port hub. Btw. the datafab.c driver works for CF and SD 
> slot.
> 
> Following match.
> +
> +UNUSUAL_DEV(  0x0c0b, 0xa109, 0x0000, 0xFFFF,
> +                "ACOMdATA",  "LC1-CF/SM",
> +                US_SC_SCSI, US_PR_ONSPECLC1, init_onspec_lc1,
> +                US_FL_MODE_XLATE ),
> +
> +UNUSUAL_DEV(  0x0c0b, 0xa10C, 0x0000, 0xFFFF,
> +                "ACOMdATA",  "LC1-SD/MS",
> +                US_SC_SCSI, US_PR_ONSPECLC1, init_onspec_lc1,
> +                US_FL_MODE_XLATE ),
> +
> Currently my driver work read-only on all 4 slots. Incase anyone's 
> interested, let me know.
> 
> 
> Another device that has the same reset problem ist the DataFab ML4-USB. Is 
> has a storage-compliant plain bulk iface, but doesn't support the needed 
> US_BULK_RESET_REQUEST command.
> 
> Again FYI: the ML4-USB consists of one chip for 3 ports CF/SM/SD + one chip 
> for MemoryStick + 4 port hub. Under the plastic housing you'll even find 
> usb-sockets for the 2 free ports !
> 
> The 3 slot chip needs  US_FL_FIX_INQUIRY. As i have no idea who the real 
> vendor is, im using following:
> 
> +
> + UNUSUAL_DEV(  0x0aec, 0x5010, 0x0000, 0xFFFF,
> +             "V-0x0AEC",     "D-0x5010",
> +             US_SC_SCSI, US_PR_BULK, NULL,
> +             US_FL_FIX_INQUIRY | US_FL_MODE_XLATE | US_FL_START_STOP  ),
> +
> 
> The MemoryStick slot works like a charm (storage compliant, no reset 
> problem, fast, ...).
> 
> As i'm trying to use the card readers in an embedded application, the reset 
> problem is quite essential (no chance of unplugging it by hand).
> Sofar i've been using a 3 slot reader, for which i know the reset command...
> 
> - sda
> 
> 
> p.s. /proc/bus/usb/devices for the ML4-USB:
> 
>-------------------------------------------------------------------------------------------------------------------------------
> T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  3 Spd=12  MxCh= 4
> D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
> P:  Vendor=03eb ProdID=3301 Rev= 3.00
> S:  Product=Standard USB Hub
> C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 64mA
> I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
> E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255ms
> T:  Bus=01 Lev=03 Prnt=03 Port=00 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
> D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=16 #Cfgs=  1
> P:  Vendor=0aec ProdID=5010 Rev= 1.00
> S:  Manufacturer=
> S:  Product=       USB Storage Device
> S:  SerialNumber=0AEC501000001A00
> C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
> I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
> E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> T:  Bus=01 Lev=03 Prnt=03 Port=01 Cnt=02 Dev#=  5 Spd=12  MxCh= 0
> D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
> P:  Vendor=07c4 ProdID=b00b Rev= 1.06
> S:  Manufacturer=DataFab Systems Inc.
> S:  Product=USB Memory Stick
> S:  SerialNumber=D882761785
> C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
> I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
> E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> 
>-------------------------------------------------------------------------------------------------------------------------------
> 
> 
> And for the MF6:
> 
>-------------------------------------------------------------------------------------------------------------------------------
> T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  6 Spd=12  MxCh= 4
> D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
> P:  Vendor=0451 ProdID=2046 Rev= 1.25
> C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
> I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
> E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255ms
> T:  Bus=01 Lev=03 Prnt=06 Port=00 Cnt=01 Dev#=  8 Spd=12  MxCh= 0
> D:  Ver= 1.10 Cls=ff(vend.) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
> P:  Vendor=0c0b ProdID=a109 Rev=17.08
> S:  Manufacturer=ACOMdATA
> S:  Product=USB CF+SM
> S:  SerialNumber=ACDB88FCDB
> C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
> I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usb-storage
> E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> T:  Bus=01 Lev=03 Prnt=06 Port=01 Cnt=02 Dev#=  7 Spd=12  MxCh= 0
> D:  Ver= 1.10 Cls=ff(vend.) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
> P:  Vendor=0c0b ProdID=a10c Rev= 1.14
> S:  Manufacturer=ACOMdATA
> S:  Product=USB SD+MS
> C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
> I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usb-storage
> E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
> 
>-------------------------------------------------------------------------------------------------------------------------------
> 
> 
> _______________________________________________
> [EMAIL PROTECTED]
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

-- 
Matthew Dharm                              Home: [EMAIL PROTECTED] 
Maintainer, Linux USB Mass Storage Driver

C:  They kicked your ass, didn't they?
S:  They were cheating!
                                        -- The Chief and Stef
User Friendly, 11/19/1997

Attachment: msg03868/pgp00000.pgp
Description: PGP signature

Reply via email to