€•ÿ1Œ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/misc-devices/tps6594-pfsm”Œ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/misc-devices/tps6594-pfsm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/it_IT/misc-devices/tps6594-pfsm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/ja_JP/misc-devices/tps6594-pfsm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ-/translations/ko_KR/misc-devices/tps6594-pfsm”Œ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/misc-devices/tps6594-pfsm”Œ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ŸŒG/var/lib/git/docbuild/linux/Documentation/misc-devices/tps6594-pfsm.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ%Texas Instruments TPS6594 PFSM driver”h]”hŒ%Texas Instruments TPS6594 PFSM driver”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒ*Author: Julien Panis (jpanis@baylibre.com)”h]”(hŒAuthor: Julien Panis (”…””}”(hhËhžhhŸNh NubhŒ reference”“”)”}”(hŒjpanis@baylibre.com”h]”hŒjpanis@baylibre.com”…””}”(hhÕhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:jpanis@baylibre.com”uh1hÓhhËubhŒ)”…””}”(hhËhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒOverview”h]”hŒOverview”…””}”(hhòhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhïhžhhŸh³h K ubhÊ)”}”(hŒgStrictly speaking, PFSM (Pre-configurable Finite State Machine) is not hardware. It is a piece of code.”h]”hŒgStrictly speaking, PFSM (Pre-configurable Finite State Machine) is not hardware. It is a piece of code.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hhïhžhubhÊ)”}”(hŒÌThe TPS6594 PMIC (Power Management IC) integrates a state machine which manages operational modes. Depending on the current operational mode, some voltage domains remain energized while others can be off.”h]”hŒÌThe TPS6594 PMIC (Power Management IC) integrates a state machine which manages operational modes. Depending on the current operational mode, some voltage domains remain energized while others can be off.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhïhžhubhÊ)”}”(hŒ‚The PFSM driver can be used to trigger transitions between configured states. It also provides R/W access to the device registers.”h]”hŒ‚The PFSM driver can be used to trigger transitions between configured states. It also provides R/W access to the device registers.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khhïhžhubhµ)”}”(hhh]”(hº)”}”(hŒSupported chips”h]”hŒSupported chips”…””}”(hj-hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj*hžhhŸh³h KubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ tps6594-q1”h]”hÊ)”}”(hjDh]”hŒ tps6594-q1”…””}”(hjFhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj=hžhhŸh³h NubjA)”}”(hŒ tps6593-q1”h]”hÊ)”}”(hj[h]”hŒ tps6593-q1”…””}”(hj]hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj=hžhhŸh³h NubjA)”}”(hŒ lp8764-q1 ”h]”hÊ)”}”(hŒ lp8764-q1”h]”hŒ lp8764-q1”…””}”(hjthžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj=hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j;hŸh³h Khj*hžhubeh}”(h]”Œsupported-chips”ah ]”h"]”Œsupported chips”ah$]”h&]”uh1h´hhïhžhhŸh³h Kubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1h´hh¶hžhhŸh³h K ubhµ)”}”(hhh]”(hº)”}”(hŒDriver location”h]”hŒDriver location”…””}”(hj£hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj hžhhŸh³h KubhÊ)”}”(hŒdrivers/misc/tps6594-pfsm.c”h]”hŒdrivers/misc/tps6594-pfsm.c”…””}”(hj±hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hj hžhubeh}”(h]”Œdriver-location”ah ]”h"]”Œdriver location”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒDriver type definitions”h]”hŒDriver type definitions”…””}”(hjÊhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjÇhžhhŸh³h K#ubhÊ)”}”(hŒ!include/uapi/linux/tps6594_pfsm.h”h]”hŒ!include/uapi/linux/tps6594_pfsm.h”…””}”(hjØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K%hjÇhžhubeh}”(h]”Œdriver-type-definitions”ah ]”h"]”Œdriver type definitions”ah$]”h&]”uh1h´hh¶hžhhŸh³h K#ubhµ)”}”(hhh]”(hº)”}”(hŒ Driver IOCTLs”h]”hŒ Driver IOCTLs”…””}”(hjñhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjîhžhhŸh³h K(ubhÊ)”}”(hŒ€:c:macro::`PMIC_GOTO_STANDBY` All device resources are powered down. The processor is off, and no voltage domains are energized.”h]”(hŒ :c:macro::”…””}”(hjÿhžhhŸNh NubhŒtitle_reference”“”)”}”(hŒ`PMIC_GOTO_STANDBY`”h]”hŒPMIC_GOTO_STANDBY”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubhŒc All device resources are powered down. The processor is off, and no voltage domains are energized.”…””}”(hjÿhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K*hjîhžhubhÊ)”}”(hŒ’:c:macro::`PMIC_GOTO_LP_STANDBY` The digital and analog functions of the PMIC, which are not required to be always-on, are turned off (low-power).”h]”(hŒ :c:macro::”…””}”(hj!hžhhŸNh Nubj)”}”(hŒ`PMIC_GOTO_LP_STANDBY`”h]”hŒPMIC_GOTO_LP_STANDBY”…””}”(hj)hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ubhŒr The digital and analog functions of the PMIC, which are not required to be always-on, are turned off (low-power).”…””}”(hj!hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K.hjîhžhubhÊ)”}”(hŒ7:c:macro::`PMIC_UPDATE_PGM` Triggers a firmware update.”h]”(hŒ :c:macro::”…””}”(hjAhžhhŸNh Nubj)”}”(hŒ`PMIC_UPDATE_PGM`”h]”hŒPMIC_UPDATE_PGM”…””}”(hjIhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubhŒ Triggers a firmware update.”…””}”(hjAhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K2hjîhžhubhÊ)”}”(hŒÌ:c:macro::`PMIC_SET_ACTIVE_STATE` One of the operational modes. The PMICs are fully functional and supply power to all PDN loads. All voltage domains are energized in both MCU and Main processor sections.”h]”(hŒ :c:macro::”…””}”(hjahžhhŸNh Nubj)”}”(hŒ`PMIC_SET_ACTIVE_STATE`”h]”hŒPMIC_SET_ACTIVE_STATE”…””}”(hjihžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubhŒ« One of the operational modes. The PMICs are fully functional and supply power to all PDN loads. All voltage domains are energized in both MCU and Main processor sections.”…””}”(hjahžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K5hjîhžhubhÊ)”}”(hŒ„:c:macro::`PMIC_SET_MCU_ONLY_STATE` One of the operational modes. Only the power resources assigned to the MCU Safety Island are on.”h]”(hŒ :c:macro::”…””}”(hjhžhhŸNh Nubj)”}”(hŒ`PMIC_SET_MCU_ONLY_STATE`”h]”hŒPMIC_SET_MCU_ONLY_STATE”…””}”(hj‰hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒa One of the operational modes. Only the power resources assigned to the MCU Safety Island are on.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K;hjîhžhubhÊ)”}”(hŒÕ:c:macro::`PMIC_SET_RETENTION_STATE` One of the operational modes. Depending on the triggers set, some DDR/GPIO voltage domains can remain energized, while all other domains are off to minimize total system power.”h]”(hŒ :c:macro::”…””}”(hj¡hžhhŸNh Nubj)”}”(hŒ`PMIC_SET_RETENTION_STATE`”h]”hŒPMIC_SET_RETENTION_STATE”…””}”(hj©hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ubhŒ± One of the operational modes. Depending on the triggers set, some DDR/GPIO voltage domains can remain energized, while all other domains are off to minimize total system power.”…””}”(hj¡hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K?hjîhžhubeh}”(h]”Œ driver-ioctls”ah ]”h"]”Œ driver ioctls”ah$]”h&]”uh1h´hh¶hžhhŸh³h K(ubhµ)”}”(hhh]”(hº)”}”(hŒ Driver usage”h]”hŒ Driver usage”…””}”(hjÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjÉhžhhŸh³h KFubhÊ)”}”(hŒSee available PFSMs::”h]”hŒSee available PFSMs:”…””}”(hjÚhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KHhjÉhžhubhŒ literal_block”“”)”}”(hŒ# ls /dev/pfsm*”h]”hŒ# ls /dev/pfsm*”…””}”hjêsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jèhŸh³h KJhjÉhžhubhÊ)”}”(hŒ%Dump the registers of pages 0 and 1::”h]”hŒ$Dump the registers of pages 0 and 1:”…””}”(hjøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KLhjÉhžhubjé)”}”(hŒ# hexdump -C /dev/pfsm-0-0x48”h]”hŒ# hexdump -C /dev/pfsm-0-0x48”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jèhŸh³h KNhjÉhžhubhÊ)”}”(hŒSee PFSM events::”h]”hŒSee PFSM events:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KPhjÉhžhubjé)”}”(hŒ# cat /proc/interrupts”h]”hŒ# cat /proc/interrupts”…””}”hj"sbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jèhŸh³h KRhjÉhžhubhµ)”}”(hhh]”(hº)”}”(hŒUserspace code example”h]”hŒUserspace code example”…””}”(hj3hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj0hžhhŸh³h KUubhÊ)”}”(hŒsamples/pfsm/pfsm-wakeup.c”h]”hŒsamples/pfsm/pfsm-wakeup.c”…””}”(hjAhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KWhj0hžhubeh}”(h]”Œuserspace-code-example”ah ]”h"]”Œuserspace code example”ah$]”h&]”uh1h´hjÉhžhhŸh³h KUubeh}”(h]”Œ driver-usage”ah ]”h"]”Œ driver usage”ah$]”h&]”uh1h´hh¶hžhhŸh³h KFubeh}”(h]”Œ%texas-instruments-tps6594-pfsm-driver”ah ]”h"]”Œ%texas instruments tps6594 pfsm driver”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”}”(jdjajjšj•j’jÄjÁjëjèjÆjÃj\jYjTjQuŒ nametypes”}”(jd‰j‰j•‰jĉjë‰jƉj\‰jT‰uh}”(jah¶jšhïj’j*jÁj jèjÇjÃjîjYjÉjQj0uŒ 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.