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