diff options
-rw-r--r-- | Documentation/w1/masters/ds2490 | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Documentation/w1/masters/ds2490 b/Documentation/w1/masters/ds2490 index 239f9ae01843..28176def3d6f 100644 --- a/Documentation/w1/masters/ds2490 +++ b/Documentation/w1/masters/ds2490 | |||
@@ -16,3 +16,55 @@ which allows to build USB <-> W1 bridges. | |||
16 | DS9490(R) is a USB <-> W1 bus master device | 16 | DS9490(R) is a USB <-> W1 bus master device |
17 | which has 0x81 family ID integrated chip and DS2490 | 17 | which has 0x81 family ID integrated chip and DS2490 |
18 | low-level operational chip. | 18 | low-level operational chip. |
19 | |||
20 | Notes and limitations. | ||
21 | - The weak pullup current is a minimum of 0.9mA and maximum of 6.0mA. | ||
22 | - The 5V strong pullup is supported with a minimum of 5.9mA and a | ||
23 | maximum of 30.4 mA. (From DS2490.pdf) | ||
24 | - While the ds2490 supports a hardware search the code doesn't take | ||
25 | advantage of it (in tested case it only returned first device). | ||
26 | - The hardware will detect when devices are attached to the bus on the | ||
27 | next bus (reset?) operation, however only a message is printed as | ||
28 | the core w1 code doesn't make use of the information. Connecting | ||
29 | one device tends to give multiple new device notifications. | ||
30 | - The number of USB bus transactions could be reduced if w1_reset_send | ||
31 | was added to the API. The name is just a suggestion. It would take | ||
32 | a write buffer and a read buffer (along with sizes) as arguments. | ||
33 | The ds2490 block I/O command supports reset, write buffer, read | ||
34 | buffer, and strong pullup all in one command, instead of the current | ||
35 | 1 reset bus, 2 write the match rom command and slave rom id, 3 block | ||
36 | write and read data. The write buffer needs to have the match rom | ||
37 | command and slave rom id prepended to the front of the requested | ||
38 | write buffer, both of which are known to the driver. | ||
39 | - The hardware supports normal, flexible, and overdrive bus | ||
40 | communication speeds, but only the normal is supported. | ||
41 | - The registered w1_bus_master functions don't define error | ||
42 | conditions. If a bus search is in progress and the ds2490 is | ||
43 | removed it can produce a good amount of error output before the bus | ||
44 | search finishes. | ||
45 | - The hardware supports detecting some error conditions, such as | ||
46 | short, alarming presence on reset, and no presence on reset, but the | ||
47 | driver doesn't query those values. | ||
48 | - The ds2490 specification doesn't cover short bulk in reads in | ||
49 | detail, but my observation is if fewer bytes are requested than are | ||
50 | available, the bulk read will return an error and the hardware will | ||
51 | clear the entire bulk in buffer. It would be possible to read the | ||
52 | maximum buffer size to not run into this error condition, only extra | ||
53 | bytes in the buffer is a logic error in the driver. The code should | ||
54 | should match reads and writes as well as data sizes. Reads and | ||
55 | writes are serialized and the status verifies that the chip is idle | ||
56 | (and data is available) before the read is executed, so it should | ||
57 | not happen. | ||
58 | - Running x86_64 2.6.24 UHCI under qemu 0.9.0 under x86_64 2.6.22-rc6 | ||
59 | with a OHCI controller, ds2490 running in the guest would operate | ||
60 | normally the first time the module was loaded after qemu attached | ||
61 | the ds2490 hardware, but if the module was unloaded, then reloaded | ||
62 | most of the time one of the bulk out or in, and usually the bulk in | ||
63 | would fail. qemu sets a 50ms timeout and the bulk in would timeout | ||
64 | even when the status shows data available. A bulk out write would | ||
65 | show a successful completion, but the ds2490 status register would | ||
66 | show 0 bytes written. Detaching qemu from the ds2490 hardware and | ||
67 | reattaching would clear the problem. usbmon output in the guest and | ||
68 | host did not explain the problem. My guess is a bug in either qemu | ||
69 | or the host OS and more likely the host OS. | ||
70 | -- 03-06-2008 David Fries <David@Fries.net> | ||