€•23Œ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/devicetree/bindings/ABI”Œ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/devicetree/bindings/ABI”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/it_IT/devicetree/bindings/ABI”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ja_JP/devicetree/bindings/ABI”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ko_KR/devicetree/bindings/ABI”Œ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/devicetree/bindings/ABI”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒE/var/lib/git/docbuild/linux/Documentation/devicetree/bindings/ABI.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒDevicetree (DT) ABI”h]”hŒDevicetree (DT) ABI”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hXäRegarding stable bindings/ABI, we quote from the 2013 ARM mini-summit summary document: "That still leaves the question of, what does a stable binding look like? Certainly a stable binding means that a newer kernel will not break on an older device tree, but that doesn't mean the binding is frozen for all time. Grant said there are ways to change bindings that don't result in breakage. For instance, if a new property is added, then default to the previous behaviour if it is missing. If a binding truly needs an incompatible change, then change the compatible string at the same time. The driver can bind against both the old and the new. These guidelines aren't new, but they desperately need to be documented." ”h]”(hŒ paragraph”“”)”}”(hŒWRegarding stable bindings/ABI, we quote from the 2013 ARM mini-summit summary document:”h]”hŒWRegarding stable bindings/ABI, we quote from the 2013 ARM mini-summit summary document:”…””}”(hhÖhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h KhhÐubhŒ block_quote”“”)”}”(hXw"That still leaves the question of, what does a stable binding look like? Certainly a stable binding means that a newer kernel will not break on an older device tree, but that doesn't mean the binding is frozen for all time. Grant said there are ways to change bindings that don't result in breakage. For instance, if a new property is added, then default to the previous behaviour if it is missing. If a binding truly needs an incompatible change, then change the compatible string at the same time. The driver can bind against both the old and the new. These guidelines aren't new, but they desperately need to be documented." ”h]”hÕ)”}”(hXv"That still leaves the question of, what does a stable binding look like? Certainly a stable binding means that a newer kernel will not break on an older device tree, but that doesn't mean the binding is frozen for all time. Grant said there are ways to change bindings that don't result in breakage. For instance, if a new property is added, then default to the previous behaviour if it is missing. If a binding truly needs an incompatible change, then change the compatible string at the same time. The driver can bind against both the old and the new. These guidelines aren't new, but they desperately need to be documented."”h]”hX€“That still leaves the question of, what does a stable binding look like? Certainly a stable binding means that a newer kernel will not break on an older device tree, but that doesn’t mean the binding is frozen for all time. Grant said there are ways to change bindings that don’t result in breakage. For instance, if a new property is added, then default to the previous behaviour if it is missing. If a binding truly needs an incompatible change, then change the compatible string at the same time. The driver can bind against both the old and the new. These guidelines aren’t new, but they desperately need to be documented.—…””}”(hhêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h K hhæubah}”(h]”h ]”h"]”h$]”h&]”uh1hähŸh³h K hhÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÎhhËhžhhŸh³h NubhÏ)”}”(hŒGeneral binding rules ”h]”hÕ)”}”(hŒGeneral binding rules”h]”hŒGeneral binding rules”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhhËhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œ upperroman”Œprefix”hŒsuffix”Œ.”uh1hÉhh¶hžhhŸh³h Kubhå)”}”(hX1) Maintainers, don't let perfect be the enemy of good. Don't hold up a binding because it isn't perfect. 2) Use specific compatible strings so that if we need to add a feature (DMA) in the future, we can create a new compatible string. See I. 3) Bindings can be augmented, but the driver shouldn't break when given the old binding. ie. add additional properties, but don't change the meaning of an existing property. For drivers, default to the original behaviour when a newly added property is missing. 4) Don't submit bindings for staging or unstable. That will be decided by the devicetree maintainers *after* discussion on the mailinglist. ”h]”hÊ)”}”(hhh]”(hÏ)”}”(hŒhMaintainers, don't let perfect be the enemy of good. Don't hold up a binding because it isn't perfect. ”h]”hÕ)”}”(hŒgMaintainers, don't let perfect be the enemy of good. Don't hold up a binding because it isn't perfect.”h]”hŒmMaintainers, don’t let perfect be the enemy of good. Don’t hold up a binding because it isn’t perfect.”…””}”(hj2hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h Khj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhj+ubhÏ)”}”(hŒˆUse specific compatible strings so that if we need to add a feature (DMA) in the future, we can create a new compatible string. See I. ”h]”hÕ)”}”(hŒ‡Use specific compatible strings so that if we need to add a feature (DMA) in the future, we can create a new compatible string. See I.”h]”hŒ‡Use specific compatible strings so that if we need to add a feature (DMA) in the future, we can create a new compatible string. See I.”…””}”(hjJhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h KhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhj+ubhÏ)”}”(hXBindings can be augmented, but the driver shouldn't break when given the old binding. ie. add additional properties, but don't change the meaning of an existing property. For drivers, default to the original behaviour when a newly added property is missing. ”h]”hÕ)”}”(hXBindings can be augmented, but the driver shouldn't break when given the old binding. ie. add additional properties, but don't change the meaning of an existing property. For drivers, default to the original behaviour when a newly added property is missing.”h]”hXBindings can be augmented, but the driver shouldn’t break when given the old binding. ie. add additional properties, but don’t change the meaning of an existing property. For drivers, default to the original behaviour when a newly added property is missing.”…””}”(hjbhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h Khj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhj+ubhÏ)”}”(hŒŠDon't submit bindings for staging or unstable. That will be decided by the devicetree maintainers *after* discussion on the mailinglist. ”h]”hÕ)”}”(hŒ‰Don't submit bindings for staging or unstable. That will be decided by the devicetree maintainers *after* discussion on the mailinglist.”h]”(hŒeDon’t submit bindings for staging or unstable. That will be decided by the devicetree maintainers ”…””}”(hjzhžhhŸNh NubhŒemphasis”“”)”}”(hŒ*after*”h]”hŒafter”…””}”(hj„hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjzubhŒ discussion on the mailinglist.”…””}”(hjzhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h K"hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhj+ubeh}”(h]”h ]”h"]”h$]”h&]”j"Œarabic”j$hj%Œ)”uh1hÉhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähŸh³h Khh¶hžhubhÊ)”}”(hhh]”hÏ)”}”(hŒNotes ”h]”hÕ)”}”(hŒNotes”h]”hŒNotes”…””}”(hj·hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h K%hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhj°hžhhŸh³h Nubah}”(h]”h ]”h"]”h$]”h&]”j"j#j$hj%j&Œstart”Kuh1hÉhh¶hžhhŸh³h K%ubhå)”}”(hX1) This document is intended as a general familiarization with the process as decided at the 2013 Kernel Summit. When in doubt, the current word of the devicetree maintainers overrules this document. In that situation, a patch updating this document would be appreciated.”h]”hÊ)”}”(hhh]”hÏ)”}”(hXThis document is intended as a general familiarization with the process as decided at the 2013 Kernel Summit. When in doubt, the current word of the devicetree maintainers overrules this document. In that situation, a patch updating this document would be appreciated.”h]”hÕ)”}”(hXThis document is intended as a general familiarization with the process as decided at the 2013 Kernel Summit. When in doubt, the current word of the devicetree maintainers overrules this document. In that situation, a patch updating this document would be appreciated.”h]”hXThis document is intended as a general familiarization with the process as decided at the 2013 Kernel Summit. When in doubt, the current word of the devicetree maintainers overrules this document. In that situation, a patch updating this document would be appreciated.”…””}”(hjÝhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÔhŸh³h K'hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÎhjÖubah}”(h]”h ]”h"]”h$]”h&]”j"j¨j$hj%j©uh1hÉhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hähŸh³h K'hh¶hžhubeh}”(h]”Œdevicetree-dt-abi”ah ]”h"]”Œdevicetree (dt) abi”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”}”jjÿsŒ nametypes”}”j‰sh}”jÿh¶sŒ 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”]”hŒsystem_message”“”)”}”(hhh]”hÕ)”}”(hŒ