€•¹?Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ%/translations/zh_CN/w1/masters/ds2490”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/zh_TW/w1/masters/ds2490”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/it_IT/w1/masters/ds2490”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ja_JP/w1/masters/ds2490”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ko_KR/w1/masters/ds2490”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/sp_SP/w1/masters/ds2490”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒKernel driver ds2490”h]”hŒKernel driver ds2490”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒ?/var/lib/git/docbuild/linux/Documentation/w1/masters/ds2490.rst”h KubhŒ paragraph”“”)”}”(hŒSupported chips:”h]”hŒSupported chips:”…””}”(hh¹hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khh£hžhubhŒ block_quote”“”)”}”(hŒ* Maxim DS2490 based ”h]”hŒ bullet_list”“”)”}”(hhh]”hŒ list_item”“”)”}”(hŒMaxim DS2490 based ”h]”h¸)”}”(hŒMaxim DS2490 based”h]”hŒMaxim DS2490 based”…””}”(hhØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KhhÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhhÏubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1hÍhŸh¶h KhhÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÇhŸh¶h Khh£hžhubh¸)”}”(hŒ.Author: Evgeniy Polyakov ”h]”(hŒAuthor: Evgeniy Polyakov <”…””}”(hhúhžhhŸNh NubhŒ reference”“”)”}”(hŒjohnpol@2ka.mipt.ru”h]”hŒjohnpol@2ka.mipt.ru”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:johnpol@2ka.mipt.ru”uh1jhhúubhŒ>”…””}”(hhúhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K hh£hžhubh¢)”}”(hhh]”(h§)”}”(hŒ Description”h]”hŒ Description”…””}”(hj!hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjhžhhŸh¶h K ubh¸)”}”(hŒYThe Maxim/Dallas Semiconductor DS2490 is a chip which allows to build USB <-> W1 bridges.”h]”hŒYThe Maxim/Dallas Semiconductor DS2490 is a chip which allows to build USB <-> W1 bridges.”…””}”(hj/hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjhžhubh¸)”}”(hŒ{DS9490(R) is a USB <-> W1 bus master device which has 0x81 family ID integrated chip and DS2490 low-level operational chip.”h]”hŒ{DS9490(R) is a USB <-> W1 bus master device which has 0x81 family ID integrated chip and DS2490 low-level operational chip.”…””}”(hj=hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjhžhubh¸)”}”(hŒNotes and limitations.”h]”hŒNotes and limitations.”…””}”(hjKhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KhjhžhubhÎ)”}”(hhh]”(hÓ)”}”(hŒCThe weak pullup current is a minimum of 0.9mA and maximum of 6.0mA.”h]”h¸)”}”(hj^h]”hŒCThe weak pullup current is a minimum of 0.9mA and maximum of 6.0mA.”…””}”(hj`hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hŒfThe 5V strong pullup is supported with a minimum of 5.9mA and a maximum of 30.4 mA. (From DS2490.pdf)”h]”h¸)”}”(hŒfThe 5V strong pullup is supported with a minimum of 5.9mA and a maximum of 30.4 mA. (From DS2490.pdf)”h]”hŒfThe 5V strong pullup is supported with a minimum of 5.9mA and a maximum of 30.4 mA. (From DS2490.pdf)”…””}”(hjwhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hXThe hardware will detect when devices are attached to the bus on the next bus (reset?) operation, however only a message is printed as the core w1 code doesn't make use of the information. Connecting one device tends to give multiple new device notifications.”h]”h¸)”}”(hXThe hardware will detect when devices are attached to the bus on the next bus (reset?) operation, however only a message is printed as the core w1 code doesn't make use of the information. Connecting one device tends to give multiple new device notifications.”h]”hXThe hardware will detect when devices are attached to the bus on the next bus (reset?) operation, however only a message is printed as the core w1 code doesn’t make use of the information. Connecting one device tends to give multiple new device notifications.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hXNThe number of USB bus transactions could be reduced if w1_reset_send was added to the API. The name is just a suggestion. It would take a write buffer and a read buffer (along with sizes) as arguments. The ds2490 block I/O command supports reset, write buffer, read buffer, and strong pullup all in one command, instead of the current 1 reset bus, 2 write the match rom command and slave rom id, 3 block write and read data. The write buffer needs to have the match rom command and slave rom id prepended to the front of the requested write buffer, both of which are known to the driver.”h]”h¸)”}”(hXNThe number of USB bus transactions could be reduced if w1_reset_send was added to the API. The name is just a suggestion. It would take a write buffer and a read buffer (along with sizes) as arguments. The ds2490 block I/O command supports reset, write buffer, read buffer, and strong pullup all in one command, instead of the current 1 reset bus, 2 write the match rom command and slave rom id, 3 block write and read data. The write buffer needs to have the match rom command and slave rom id prepended to the front of the requested write buffer, both of which are known to the driver.”h]”hXNThe number of USB bus transactions could be reduced if w1_reset_send was added to the API. The name is just a suggestion. It would take a write buffer and a read buffer (along with sizes) as arguments. The ds2490 block I/O command supports reset, write buffer, read buffer, and strong pullup all in one command, instead of the current 1 reset bus, 2 write the match rom command and slave rom id, 3 block write and read data. The write buffer needs to have the match rom command and slave rom id prepended to the front of the requested write buffer, both of which are known to the driver.”…””}”(hj§hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hŒqThe hardware supports normal, flexible, and overdrive bus communication speeds, but only the normal is supported.”h]”h¸)”}”(hŒqThe hardware supports normal, flexible, and overdrive bus communication speeds, but only the normal is supported.”h]”hŒqThe hardware supports normal, flexible, and overdrive bus communication speeds, but only the normal is supported.”…””}”(hj¿hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K(hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hŒÌThe registered w1_bus_master functions don't define error conditions. If a bus search is in progress and the ds2490 is removed it can produce a good amount of error output before the bus search finishes.”h]”h¸)”}”(hŒÌThe registered w1_bus_master functions don't define error conditions. If a bus search is in progress and the ds2490 is removed it can produce a good amount of error output before the bus search finishes.”h]”hŒÎThe registered w1_bus_master functions don’t define error conditions. If a bus search is in progress and the ds2490 is removed it can produce a good amount of error output before the bus search finishes.”…””}”(hj×hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K*hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hŒ¦The hardware supports detecting some error conditions, such as short, alarming presence on reset, and no presence on reset, but the driver doesn't query those values.”h]”h¸)”}”(hŒ¦The hardware supports detecting some error conditions, such as short, alarming presence on reset, and no presence on reset, but the driver doesn't query those values.”h]”hŒ¨The hardware supports detecting some error conditions, such as short, alarming presence on reset, and no presence on reset, but the driver doesn’t query those values.”…””}”(hjïhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K.hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hX]The ds2490 specification doesn't cover short bulk in reads in detail, but my observation is if fewer bytes are requested than are available, the bulk read will return an error and the hardware will clear the entire bulk in buffer. It would be possible to read the maximum buffer size to not run into this error condition, only extra bytes in the buffer is a logic error in the driver. The code should match reads and writes as well as data sizes. Reads and writes are serialized and the status verifies that the chip is idle (and data is available) before the read is executed, so it should not happen.”h]”h¸)”}”(hX]The ds2490 specification doesn't cover short bulk in reads in detail, but my observation is if fewer bytes are requested than are available, the bulk read will return an error and the hardware will clear the entire bulk in buffer. It would be possible to read the maximum buffer size to not run into this error condition, only extra bytes in the buffer is a logic error in the driver. The code should match reads and writes as well as data sizes. Reads and writes are serialized and the status verifies that the chip is idle (and data is available) before the read is executed, so it should not happen.”h]”hX_The ds2490 specification doesn’t cover short bulk in reads in detail, but my observation is if fewer bytes are requested than are available, the bulk read will return an error and the hardware will clear the entire bulk in buffer. It would be possible to read the maximum buffer size to not run into this error condition, only extra bytes in the buffer is a logic error in the driver. The code should match reads and writes as well as data sizes. Reads and writes are serialized and the status verifies that the chip is idle (and data is available) before the read is executed, so it should not happen.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K1hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h NubhÓ)”}”(hXRunning x86_64 2.6.24 UHCI under qemu 0.9.0 under x86_64 2.6.22-rc6 with a OHCI controller, ds2490 running in the guest would operate normally the first time the module was loaded after qemu attached the ds2490 hardware, but if the module was unloaded, then reloaded most of the time one of the bulk out or in, and usually the bulk in would fail. qemu sets a 50ms timeout and the bulk in would timeout even when the status shows data available. A bulk out write would show a successful completion, but the ds2490 status register would show 0 bytes written. Detaching qemu from the ds2490 hardware and reattaching would clear the problem. usbmon output in the guest and host did not explain the problem. My guess is a bug in either qemu or the host OS and more likely the host OS. ”h]”h¸)”}”(hXRunning x86_64 2.6.24 UHCI under qemu 0.9.0 under x86_64 2.6.22-rc6 with a OHCI controller, ds2490 running in the guest would operate normally the first time the module was loaded after qemu attached the ds2490 hardware, but if the module was unloaded, then reloaded most of the time one of the bulk out or in, and usually the bulk in would fail. qemu sets a 50ms timeout and the bulk in would timeout even when the status shows data available. A bulk out write would show a successful completion, but the ds2490 status register would show 0 bytes written. Detaching qemu from the ds2490 hardware and reattaching would clear the problem. usbmon output in the guest and host did not explain the problem. My guess is a bug in either qemu or the host OS and more likely the host OS.”h]”hXRunning x86_64 2.6.24 UHCI under qemu 0.9.0 under x86_64 2.6.22-rc6 with a OHCI controller, ds2490 running in the guest would operate normally the first time the module was loaded after qemu attached the ds2490 hardware, but if the module was unloaded, then reloaded most of the time one of the bulk out or in, and usually the bulk in would fail. qemu sets a 50ms timeout and the bulk in would timeout even when the status shows data available. A bulk out write would show a successful completion, but the ds2490 status register would show 0 bytes written. Detaching qemu from the ds2490 hardware and reattaching would clear the problem. usbmon output in the guest and host did not explain the problem. My guess is a bug in either qemu or the host OS and more likely the host OS.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K;hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjYhžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”hòŒ-”uh1hÍhŸh¶h Khjhžhubh¸)”}”(hŒ(03-06-2008 David Fries ”h]”(hŒ03-06-2008 David Fries <”…””}”(hj:hžhhŸNh Nubj)”}”(hŒDavid@Fries.net”h]”hŒDavid@Fries.net”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:David@Fries.net”uh1jhj:ubhŒ>”…””}”(hj:hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KHhjhžhubeh}”(h]”Œ description”ah ]”h"]”Œ description”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K ubeh}”(h]”Œkernel-driver-ds2490”ah ]”h"]”Œkernel driver ds2490”ah$]”h&]”uh1h¡hhhžhhŸh¶h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¶uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¦NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¶Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jijfjaj^uŒ nametypes”}”(ji‰ja‰uh}”(jfh£j^juŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.