€•ÅcŒ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/arch/arm/omap/omap_pm”Œ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/arch/arm/omap/omap_pm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/arch/arm/omap/omap_pm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/arch/arm/omap/omap_pm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/arch/arm/omap/omap_pm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/pt_BR/arch/arm/omap/omap_pm”Œ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/arch/arm/omap/omap_pm”Œ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ŒThe OMAP PM interface”h]”hŒThe OMAP PM interface”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒC/var/lib/git/docbuild/linux/Documentation/arch/arm/omap/omap_pm.rst”h´KubhŒ paragraph”“”)”}”(hXThis document describes the temporary OMAP PM interface. Driver authors use these functions to communicate minimum latency or throughput constraints to the kernel power management code. Over time, the intention is to merge features from the OMAP PM interface into the Linux PM QoS code.”h]”hXThis document describes the temporary OMAP PM interface. Driver authors use these functions to communicate minimum latency or throughput constraints to the kernel power management code. Over time, the intention is to merge features from the OMAP PM interface into the Linux PM QoS code.”…””}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hŒ,Drivers need to express PM parameters which:”h]”hŒ,Drivers need to express PM parameters which:”…””}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒHsupport the range of power management parameters present in the TI SRF; ”h]”hÌ)”}”(hŒGsupport the range of power management parameters present in the TI SRF;”h]”hŒGsupport the range of power management parameters present in the TI SRF;”…””}”(hhôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hhðubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhhëh²hh³hÊh´Nubhï)”}”(hŒseparate the drivers from the underlying PM parameter implementation, whether it is the TI SRF or Linux PM QoS or Linux latency framework or something else; ”h]”hÌ)”}”(hŒœseparate the drivers from the underlying PM parameter implementation, whether it is the TI SRF or Linux PM QoS or Linux latency framework or something else;”h]”hŒœseparate the drivers from the underlying PM parameter implementation, whether it is the TI SRF or Linux PM QoS or Linux latency framework or something else;”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhhëh²hh³hÊh´Nubhï)”}”(hŒ¢specify PM parameters in terms of fundamental units, such as latency and throughput, rather than units which are specific to OMAP or to particular OMAP variants; ”h]”hÌ)”}”(hŒ¡specify PM parameters in terms of fundamental units, such as latency and throughput, rather than units which are specific to OMAP or to particular OMAP variants;”h]”hŒ¡specify PM parameters in terms of fundamental units, such as latency and throughput, rather than units which are specific to OMAP or to particular OMAP variants;”…””}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhhëh²hh³hÊh´Nubhï)”}”(hŒallow drivers which are shared with other architectures (e.g., DaVinci) to add these constraints in a way which won't affect non-OMAP systems, ”h]”hÌ)”}”(hŒŽallow drivers which are shared with other architectures (e.g., DaVinci) to add these constraints in a way which won't affect non-OMAP systems,”h]”hŒallow drivers which are shared with other architectures (e.g., DaVinci) to add these constraints in a way which won’t affect non-OMAP systems,”…””}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhhëh²hh³hÊh´Nubhï)”}”(hŒPcan be implemented immediately with minimal disruption of other architectures. ”h]”hÌ)”}”(hŒNcan be implemented immediately with minimal disruption of other architectures.”h]”hŒNcan be implemented immediately with minimal disruption of other architectures.”…””}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhhëh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1héh³hÊh´K hh·h²hubhÌ)”}”(hŒvThis document proposes the OMAP PM interface, including the following five power management functions for driver code:”h]”hŒvThis document proposes the OMAP PM interface, including the following five power management functions for driver code:”…””}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒenumerated_list”“”)”}”(hhh]”(hï)”}”(hŒlSet the maximum MPU wakeup latency:: (*pdata->set_max_mpu_wakeup_lat)(struct device *dev, unsigned long t) ”h]”(hÌ)”}”(hŒ$Set the maximum MPU wakeup latency::”h]”hŒ#Set the maximum MPU wakeup latency:”…””}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K"hjƒubhŒ literal_block”“”)”}”(hŒE(*pdata->set_max_mpu_wakeup_lat)(struct device *dev, unsigned long t)”h]”hŒE(*pdata->set_max_mpu_wakeup_lat)(struct device *dev, unsigned long t)”…””}”hj—sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j•h³hÊh´K$hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîhj€h²hh³hÊh´Nubhï)”}”(hŒoSet the maximum device wakeup latency:: (*pdata->set_max_dev_wakeup_lat)(struct device *dev, unsigned long t) ”h]”(hÌ)”}”(hŒ'Set the maximum device wakeup latency::”h]”hŒ&Set the maximum device wakeup latency:”…””}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K&hj­ubj–)”}”(hŒE(*pdata->set_max_dev_wakeup_lat)(struct device *dev, unsigned long t)”h]”hŒE(*pdata->set_max_dev_wakeup_lat)(struct device *dev, unsigned long t)”…””}”hj¿sbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´K(hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîhj€h²hh³hÊh´Nubhï)”}”(hŒySet the maximum system DMA transfer start latency (CORE pwrdm):: (*pdata->set_max_sdma_lat)(struct device *dev, long t) ”h]”(hÌ)”}”(hŒ@Set the maximum system DMA transfer start latency (CORE pwrdm)::”h]”hŒ?Set the maximum system DMA transfer start latency (CORE pwrdm):”…””}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hjÓubj–)”}”(hŒ6(*pdata->set_max_sdma_lat)(struct device *dev, long t)”h]”hŒ6(*pdata->set_max_sdma_lat)(struct device *dev, long t)”…””}”hjåsbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´K,hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîhj€h²hh³hÊh´Nubhï)”}”(hŒ‚Set the minimum bus throughput needed by a device:: (*pdata->set_min_bus_tput)(struct device *dev, u8 agent_id, unsigned long r) ”h]”(hÌ)”}”(hŒ3Set the minimum bus throughput needed by a device::”h]”hŒ2Set the minimum bus throughput needed by a device:”…””}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjùubj–)”}”(hŒL(*pdata->set_min_bus_tput)(struct device *dev, u8 agent_id, unsigned long r)”h]”hŒL(*pdata->set_min_bus_tput)(struct device *dev, u8 agent_id, unsigned long r)”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´K0hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîhj€h²hh³hÊh´Nubhï)”}”(hŒtReturn the number of times the device has lost context:: (*pdata->get_dev_context_loss_count)(struct device *dev) ”h]”(hÌ)”}”(hŒ8Return the number of times the device has lost context::”h]”hŒ7Return the number of times the device has lost context:”…””}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hjubj–)”}”(hŒ8(*pdata->get_dev_context_loss_count)(struct device *dev)”h]”hŒ8(*pdata->get_dev_context_loss_count)(struct device *dev)”…””}”hj1sbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´K4hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîhj€h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j~hh·h²hh³hÊh´K"ubhÌ)”}”(hŒtFurther documentation for all OMAP PM interface functions can be found in arch/arm/plat-omap/include/mach/omap-pm.h.”h]”hŒtFurther documentation for all OMAP PM interface functions can be found in arch/arm/plat-omap/include/mach/omap-pm.h.”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K7hh·h²hubh¶)”}”(hhh]”(h»)”}”(hŒ-The OMAP PM layer is intended to be temporary”h]”hŒ-The OMAP PM layer is intended to be temporary”…””}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj^h²hh³hÊh´Khj^h²hubeh}”(h]”Œ-the-omap-pm-layer-is-intended-to-be-temporary”ah ]”h"]”Œ-the omap pm layer is intended to be temporary”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kset_max_dev_wakeup_lat) (*pdata->set_max_dev_wakeup_lat)(dev, t); ”h]”(hÌ)”}”(hŒáset_max_dev_wakeup_lat will point to omap_pm_set_max_dev_wakeup_lat(), etc. Other architectures which do not support these functions should leave these function pointers set to NULL. Drivers should use the following idiom::”h]”hŒàset_max_dev_wakeup_lat will point to omap_pm_set_max_dev_wakeup_lat(), etc. Other architectures which do not support these functions should leave these function pointers set to NULL. Drivers should use the following idiom:”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KLhj»ubj–)”}”(hŒPif (pdata->set_max_dev_wakeup_lat) (*pdata->set_max_dev_wakeup_lat)(dev, t);”h]”hŒPif (pdata->set_max_dev_wakeup_lat) (*pdata->set_max_dev_wakeup_lat)(dev, t);”…””}”hjÍsbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´KQhj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîhj¸h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”jnjouh1héh³hÊh´KLhj…h²hubhÌ)”}”(hX›The most common usage of these functions will probably be to specify the maximum time from when an interrupt occurs, to when the device becomes accessible. To accomplish this, driver writers should use the set_max_mpu_wakeup_lat() function to constrain the MPU wakeup latency, and the set_max_dev_wakeup_lat() function to constrain the device wakeup latency (from clk_enable() to accessibility). For example::”h]”hXšThe most common usage of these functions will probably be to specify the maximum time from when an interrupt occurs, to when the device becomes accessible. To accomplish this, driver writers should use the set_max_mpu_wakeup_lat() function to constrain the MPU wakeup latency, and the set_max_dev_wakeup_lat() function to constrain the device wakeup latency (from clk_enable() to accessibility). For example:”…””}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KThj…h²hubj–)”}”(hX(/* Limit MPU wakeup latency */ if (pdata->set_max_mpu_wakeup_lat) (*pdata->set_max_mpu_wakeup_lat)(dev, tc); /* Limit device powerdomain wakeup latency */ if (pdata->set_max_dev_wakeup_lat) (*pdata->set_max_dev_wakeup_lat)(dev, td); /* total wakeup latency in this example: (tc + td) */”h]”hX(/* Limit MPU wakeup latency */ if (pdata->set_max_mpu_wakeup_lat) (*pdata->set_max_mpu_wakeup_lat)(dev, tc); /* Limit device powerdomain wakeup latency */ if (pdata->set_max_dev_wakeup_lat) (*pdata->set_max_dev_wakeup_lat)(dev, td); /* total wakeup latency in this example: (tc + td) */”…””}”hjõsbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´K\hj…h²hubhÌ)”}”(hŒÿThe PM parameters can be overwritten by calling the function again with the new value. The settings can be removed by calling the function with a t argument of -1 (except in the case of set_max_bus_tput(), which should be called with an r argument of 0).”h]”hŒÿThe PM parameters can be overwritten by calling the function again with the new value. The settings can be removed by calling the function with a t argument of -1 (except in the case of set_max_bus_tput(), which should be called with an r argument of 0).”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kfhj…h²hubhÌ)”}”(hX The fifth function above, omap_pm_get_dev_context_loss_count(), is intended as an optimization to allow drivers to determine whether the device has lost its internal context. If context has been lost, the driver must restore its internal context before proceeding.”h]”hX The fifth function above, omap_pm_get_dev_context_loss_count(), is intended as an optimization to allow drivers to determine whether the device has lost its internal context. If context has been lost, the driver must restore its internal context before proceeding.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kkhj…h²hubeh}”(h]”Œ%driver-usage-of-the-omap-pm-functions”ah ]”h"]”Œ%driver usage of the omap pm functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´KEubh¶)”}”(hhh]”(h»)”}”(hŒ%Other specialized interface functions”h]”hŒ%Other specialized interface functions”…””}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj'h²hh³hÊh´KrubhÌ)”}”(hXßThe five functions listed above are intended to be usable by any device driver. DSPBridge and CPUFreq have a few special requirements. DSPBridge expresses target DSP performance levels in terms of OPP IDs. CPUFreq expresses target MPU performance levels in terms of MPU frequency. The OMAP PM interface contains functions for these specialized cases to convert that input information (OPPs/MPU frequency) into the form that the underlying power management implementation needs:”h]”hXßThe five functions listed above are intended to be usable by any device driver. DSPBridge and CPUFreq have a few special requirements. DSPBridge expresses target DSP performance levels in terms of OPP IDs. CPUFreq expresses target MPU performance levels in terms of MPU frequency. The OMAP PM interface contains functions for these specialized cases to convert that input information (OPPs/MPU frequency) into the form that the underlying power management implementation needs:”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj'h²hubj)”}”(hhh]”(hï)”}”(hŒ$`(*pdata->dsp_get_opp_table)(void)` ”h]”hÌ)”}”(hŒ#`(*pdata->dsp_get_opp_table)(void)`”h]”jŸ)”}”(hjOh]”hŒ!(*pdata->dsp_get_opp_table)(void)”…””}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K}hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjFh²hh³hÊh´Nubhï)”}”(hŒ'`(*pdata->dsp_set_min_opp)(u8 opp_id)` ”h]”hÌ)”}”(hŒ&`(*pdata->dsp_set_min_opp)(u8 opp_id)`”h]”jŸ)”}”(hjph]”hŒ$(*pdata->dsp_set_min_opp)(u8 opp_id)”…””}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjFh²hh³hÊh´Nubhï)”}”(hŒ`(*pdata->dsp_get_opp)(void)` ”h]”hÌ)”}”(hŒ`(*pdata->dsp_get_opp)(void)`”h]”jŸ)”}”(hj‘h]”hŒ(*pdata->dsp_get_opp)(void)”…””}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjFh²hh³hÊh´Nubhï)”}”(hŒ%`(*pdata->cpu_get_freq_table)(void)` ”h]”hÌ)”}”(hŒ$`(*pdata->cpu_get_freq_table)(void)`”h]”jŸ)”}”(hj²h]”hŒ"(*pdata->cpu_get_freq_table)(void)”…””}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjFh²hh³hÊh´Nubhï)”}”(hŒ*`(*pdata->cpu_set_freq)(unsigned long f)` ”h]”hÌ)”}”(hŒ)`(*pdata->cpu_set_freq)(unsigned long f)`”h]”jŸ)”}”(hjÓh]”hŒ'(*pdata->cpu_set_freq)(unsigned long f)”…””}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjFh²hh³hÊh´Nubhï)”}”(hŒ`(*pdata->cpu_get_freq)(void)` ”h]”hÌ)”}”(hŒ`(*pdata->cpu_get_freq)(void)`”h]”jŸ)”}”(hjôh]”hŒ(*pdata->cpu_get_freq)(void)”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‡hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhjFh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jKjLjMhjNjOŒstart”Kuh1j~hj'h²hh³hÊh´K}ubh¶)”}”(hhh]”(h»)”}”(hŒCustomizing OPP for platform”h]”hŒCustomizing OPP for platform”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KŠubhÌ)”}”(hŒÐDefining CONFIG_PM should enable OPP layer for the silicon and the registration of OPP table should take place automatically. However, in special cases, the default OPP table may need to be tweaked, for e.g.:”h]”hŒÐDefining CONFIG_PM should enable OPP layer for the silicon and the registration of OPP table should take place automatically. However, in special cases, the default OPP table may need to be tweaked, for e.g.:”…””}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hjh²hubhŒ block_quote”“”)”}”(hX* enable default OPPs which are disabled by default, but which could be enabled on a platform * Disable an unsupported OPP on the platform * Define and add a custom opp table entry in these cases, the board file needs to do additional steps as follows: ”h]”hê)”}”(hhh]”(hï)”}”(hŒ[enable default OPPs which are disabled by default, but which could be enabled on a platform”h]”hÌ)”}”(hŒ[enable default OPPs which are disabled by default, but which could be enabled on a platform”h]”hŒ[enable default OPPs which are disabled by default, but which could be enabled on a platform”…””}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhj;ubhï)”}”(hŒ*Disable an unsupported OPP on the platform”h]”hÌ)”}”(hjXh]”hŒ*Disable an unsupported OPP on the platform”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K’hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhj;ubhï)”}”(hŒpDefine and add a custom opp table entry in these cases, the board file needs to do additional steps as follows: ”h]”hÌ)”}”(hŒoDefine and add a custom opp table entry in these cases, the board file needs to do additional steps as follows:”h]”hŒoDefine and add a custom opp table entry in these cases, the board file needs to do additional steps as follows:”…””}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1hîhj;ubeh}”(h]”h ]”h"]”h$]”h&]”jnŒ*”uh1héh³hÊh´Khj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Khjh²hubhÌ)”}”(hŒ!arch/arm/mach-omapx/board-xyz.c::”h]”hŒ arch/arm/mach-omapx/board-xyz.c:”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K–hjh²hubj–)”}”(hŒÑ#include "pm.h" .... static void __init omap_xyz_init_irq(void) { .... /* Initialize the default table */ omapx_opp_init(); /* Do customization to the defaults */ .... }”h]”hŒÑ#include "pm.h" .... static void __init omap_xyz_init_irq(void) { .... /* Initialize the default table */ omapx_opp_init(); /* Do customization to the defaults */ .... }”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j¥j¦uh1j•h³hÊh´K˜hjh²hubhŒdefinition_list”“”)”}”(hhh]”hŒdefinition_list_item”“”)”}”(hŒTNOTE: omapx_opp_init will be omap3_opp_init or as required based on the omap family.”h]”(hŒterm”“”)”}”(hŒNOTE:”h]”hŒNOTE:”…””}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹h³hÊh´K¤hjµubhŒ definition”“”)”}”(hhh]”hÌ)”}”(hŒNomapx_opp_init will be omap3_opp_init or as required based on the omap family.”h]”hŒNomapx_opp_init will be omap3_opp_init or as required based on the omap family.”…””}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³h³hÊh´K¤hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hjh²hh³hÊh´Nubeh}”(h]”Œcustomizing-opp-for-platform”ah ]”h"]”Œcustomizing opp for platform”ah$]”h&]”uh1hµhj'h²hh³hÊh´KŠubeh}”(h]”Œ%other-specialized-interface-functions”ah ]”h"]”Œ%other specialized interface functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Krubeh}”(h]”Œthe-omap-pm-interface”ah ]”h"]”Œthe omap pm interface”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”}”(jjj‚jj$j!jûjøjójðuŒ nametypes”}”(j‰j‚‰j$‰jû‰jó‰uh}”(jh·jj^j!j…jøj'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”]”hŒsystem_message”“”)”}”(hhh]”hÌ)”}”(hŒ:Enumerated list start value not ordinal-1: "6" (ordinal 6)”h]”hŒ>Enumerated list start value not ordinal-1: “6†(ordinal 6)”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Kuh1j‹hj'h²hh³hÊh´K}ubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.