€•ýÓŒ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/dss”Œ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/dss”Œ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/dss”Œ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/dss”Œ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/dss”Œ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/dss”Œ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/dss”Œ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ŒOMAP2/3 Display Subsystem”h]”hŒOMAP2/3 Display Subsystem”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ?/var/lib/git/docbuild/linux/Documentation/arch/arm/omap/dss.rst”h´KubhŒ paragraph”“”)�”}”(hŒéThis is an almost total rewrite of the OMAP FB driver in drivers/video/omap (let's call it DSS1). The main differences between DSS1 and DSS2 are DSI, TV-out and multiple display support, but there are lots of small improvements also.”h]”hŒëThis is an almost total rewrite of the OMAP FB driver in drivers/video/omap (let’s call it DSS1). The main differences between DSS1 and DSS2 are DSI, TV-out and multiple display support, but there are lots of small improvements also.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒÑThe DSS2 driver (omapdss module) is in arch/arm/plat-omap/dss/, and the FB, panel and controller drivers are in drivers/video/omap2/. DSS1 and DSS2 live currently side by side, you can choose which one to use.”h]”hŒÑThe DSS2 driver (omapdss module) is in arch/arm/plat-omap/dss/, and the FB, panel and controller drivers are in drivers/video/omap2/. DSS1 and DSS2 live currently side by side, you can choose which one to use.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒFeatures”h]”hŒFeatures”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhéh²hh³hÊh´KubhÌ)�”}”(hŒ$Working and tested features include:”h]”hŒ$Working and tested features include:”…”�”}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhéh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒMIPI DPI (parallel) output”h]”hÌ)�”}”(hjh]”hŒMIPI DPI (parallel) output”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒMIPI DSI output in command mode”h]”hÌ)�”}”(hj(h]”hŒMIPI DSI output in command mode”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒMIPI DBI (RFBI) output”h]”hÌ)�”}”(hj?h]”hŒMIPI DBI (RFBI) output”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ SDI output”h]”hÌ)�”}”(hjVh]”hŒ SDI output”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ TV output”h]”hÌ)�”}”(hjmh]”hŒ TV output”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ7All pieces can be compiled as a module or inside kernel”h]”hÌ)�”}”(hj„h]”hŒ7All pieces can be compiled as a module or inside kernel”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ&Use DISPC to update any of the outputs”h]”hÌ)�”}”(hj›h]”hŒ&Use DISPC to update any of the outputs”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ$Use CPU to update RFBI or DSI output”h]”hÌ)�”}”(hj²h]”hŒ$Use CPU to update RFBI or DSI output”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒOMAP DISPC planes”h]”hÌ)�”}”(hjÉh]”hŒOMAP DISPC planes”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ#RGB16, RGB24 packed, RGB24 unpacked”h]”hÌ)�”}”(hjàh]”hŒ#RGB16, RGB24 packed, RGB24 unpacked”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ YUV2, UYVY”h]”hÌ)�”}”(hj÷h]”hŒ YUV2, UYVY”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒScaling”h]”hÌ)�”}”(hjh]”hŒScaling”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ,Adjusting DSS FCK to find a good pixel clock”h]”hÌ)�”}”(hj%h]”hŒ,Adjusting DSS FCK to find a good pixel clock”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒUse DSI DPLL to create DSS FCK ”h]”hÌ)�”}”(hŒUse DSI DPLL to create DSS FCK”h]”hŒUse DSI DPLL to create DSS FCK”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³hÊh´Khhéh²hubhÌ)�”}”(hŒ>Tested boards include: - OMAP3 SDP board - Beagle board - N810”h]”hŒ>Tested boards include: - OMAP3 SDP board - Beagle board - N810”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K"hhéh²hubeh}”(h]”Œfeatures”ah ]”h"]”Œfeatures”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒomapdss driver”h]”hŒomapdss driver”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjph²hh³hÊh´K(ubhÌ)�”}”(hŒ­The DSS driver does not itself have any support for Linux framebuffer, V4L or such like the current ones, but it has an internal kernel API that upper level drivers can use.”h]”hŒ­The DSS driver does not itself have any support for Linux framebuffer, V4L or such like the current ones, but it has an internal kernel API that upper level drivers can use.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hjph²hubhÌ)�”}”(hX2The DSS driver models OMAP's overlays, overlay managers and displays in a flexible way to enable non-common multi-display configuration. In addition to modelling the hardware overlays, omapdss supports virtual overlays and overlay managers. These can be used when updating a display with CPU or system DMA.”h]”hX4The DSS driver models OMAP’s overlays, overlay managers and displays in a flexible way to enable non-common multi-display configuration. In addition to modelling the hardware overlays, omapdss supports virtual overlays and overlay managers. These can be used when updating a display with CPU or system DMA.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjph²hubeh}”(h]”Œomapdss-driver”ah ]”h"]”Œomapdss driver”ah$]”h&]”uh1hµhh·h²hh³hÊh´K(ubh¶)�”}”(hhh]”(h»)�”}”(hŒ omapdss driver support for audio”h]”hŒ omapdss driver support for audio”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¥h²hh³hÊh´K4ubhÌ)�”}”(hŒÿThere exist several display technologies and standards that support audio as well. Hence, it is relevant to update the DSS device driver to provide an audio interface that may be used by an audio driver or any other driver interested in the functionality.”h]”hŒÿThere exist several display technologies and standards that support audio as well. Hence, it is relevant to update the DSS device driver to provide an audio interface that may be used by an audio driver or any other driver interested in the functionality.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hj¥h²hubhÌ)�”}”(hXEThe audio_enable function is intended to prepare the relevant IP for playback (e.g., enabling an audio FIFO, taking in/out of reset some IP, enabling companion chips, etc). It is intended to be called before audio_start. The audio_disable function performs the reverse operation and is intended to be called after audio_stop.”h]”hXEThe audio_enable function is intended to prepare the relevant IP for playback (e.g., enabling an audio FIFO, taking in/out of reset some IP, enabling companion chips, etc). It is intended to be called before audio_start. The audio_disable function performs the reverse operation and is intended to be called after audio_stop.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K:hj¥h²hubhÌ)�”}”(hXWhile a given DSS device driver may support audio, it is possible that for certain configurations audio is not supported (e.g., an HDMI display using a VESA video timing). The audio_supported function is intended to query whether the current configuration of the display supports audio.”h]”hXWhile a given DSS device driver may support audio, it is possible that for certain configurations audio is not supported (e.g., an HDMI display using a VESA video timing). The audio_supported function is intended to query whether the current configuration of the display supports audio.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K@hj¥h²hubhÌ)�”}”(hXThe audio_config function is intended to configure all the relevant audio parameters of the display. In order to make the function independent of any specific DSS device driver, a struct omap_dss_audio is defined. Its purpose is to contain all the required parameters for audio configuration. At the moment, such structure contains pointers to IEC-60958 channel status word and CEA-861 audio infoframe structures. This should be enough to support HDMI and DisplayPort, as both are based on CEA-861 and IEC-60958.”h]”hXThe audio_config function is intended to configure all the relevant audio parameters of the display. In order to make the function independent of any specific DSS device driver, a struct omap_dss_audio is defined. Its purpose is to contain all the required parameters for audio configuration. At the moment, such structure contains pointers to IEC-60958 channel status word and CEA-861 audio infoframe structures. This should be enough to support HDMI and DisplayPort, as both are based on CEA-861 and IEC-60958.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KEhj¥h²hubhÌ)�”}”(hŒ¿The audio_enable/disable, audio_config and audio_supported functions could be implemented as functions that may sleep. Hence, they should not be called while holding a spinlock or a readlock.”h]”hŒ¿The audio_enable/disable, audio_config and audio_supported functions could be implemented as functions that may sleep. Hence, they should not be called while holding a spinlock or a readlock.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KMhj¥h²hubhÌ)�”}”(hXThe audio_start/audio_stop function is intended to effectively start/stop audio playback after the configuration has taken place. These functions are designed to be used in an atomic context. Hence, audio_start should return quickly and be called only after all the needed resources for audio playback (audio FIFOs, DMA channels, companion chips, etc) have been enabled to begin data transfers. audio_stop is designed to only stop the audio transfers. The resources used for playback are released using audio_disable.”h]”hXThe audio_start/audio_stop function is intended to effectively start/stop audio playback after the configuration has taken place. These functions are designed to be used in an atomic context. Hence, audio_start should return quickly and be called only after all the needed resources for audio playback (audio FIFOs, DMA channels, companion chips, etc) have been enabled to begin data transfers. audio_stop is designed to only stop the audio transfers. The resources used for playback are released using audio_disable.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KQhj¥h²hubhÌ)�”}”(hX8The enum omap_dss_audio_state may be used to help the implementations of the interface to keep track of the audio state. The initial state is _DISABLED; then, the state transitions to _CONFIGURED, and then, when it is ready to play audio, to _ENABLED. The state _PLAYING is used when the audio is being rendered.”h]”hX8The enum omap_dss_audio_state may be used to help the implementations of the interface to keep track of the audio state. The initial state is _DISABLED; then, the state transitions to _CONFIGURED, and then, when it is ready to play audio, to _ENABLED. The state _PLAYING is used when the audio is being rendered.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KYhj¥h²hubeh}”(h]”Œ omapdss-driver-support-for-audio”ah ]”h"]”Œ omapdss driver support for audio”ah$]”h&]”uh1hµhh·h²hh³hÊh´K4ubh¶)�”}”(hhh]”(h»)�”}”(hŒPanel and controller drivers”h]”hŒPanel and controller drivers”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KaubhÌ)�”}”(hŒ°The drivers implement panel or controller specific functionality and are not usually visible to users except through omapfb driver. They register themselves to the DSS driver.”h]”hŒ°The drivers implement panel or controller specific functionality and are not usually visible to users except through omapfb driver. They register themselves to the DSS driver.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kchj h²hubeh}”(h]”Œpanel-and-controller-drivers”ah ]”h"]”Œpanel and controller drivers”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kaubh¶)�”}”(hhh]”(h»)�”}”(hŒ omapfb driver”h]”hŒ omapfb driver”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjGh²hh³hÊh´KhubhÌ)�”}”(hŒ¹The omapfb driver implements arbitrary number of standard linux framebuffers. These framebuffers can be routed flexibly to any overlays, thus allowing very dynamic display architecture.”h]”hŒ¹The omapfb driver implements arbitrary number of standard linux framebuffers. These framebuffers can be routed flexibly to any overlays, thus allowing very dynamic display architecture.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KjhjGh²hubhÌ)�”}”(hŒgThe driver exports some omapfb specific ioctls, which are compatible with the ioctls in the old driver.”h]”hŒgThe driver exports some omapfb specific ioctls, which are compatible with the ioctls in the old driver.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KnhjGh²hubhÌ)�”}”(hŒˆThe rest of the non standard features are exported via sysfs. Whether the final implementation will use sysfs, or ioctls, is still open.”h]”hŒˆThe rest of the non standard features are exported via sysfs. Whether the final implementation will use sysfs, or ioctls, is still open.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KqhjGh²hubeh}”(h]”Œ omapfb-driver”ah ]”h"]”Œ omapfb driver”ah$]”h&]”uh1hµhh·h²hh³hÊh´Khubh¶)�”}”(hhh]”(h»)�”}”(hŒ V4L2 drivers”h]”hŒ V4L2 drivers”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŠh²hh³hÊh´KuubhÌ)�”}”(hŒ V4L2 is being implemented in TI.”h]”hŒ V4L2 is being implemented in TI.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KwhjŠh²hubhÌ)�”}”(hŒTFrom omapdss point of view the V4L2 drivers should be similar to framebuffer driver.”h]”hŒTFrom omapdss point of view the V4L2 drivers should be similar to framebuffer driver.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KyhjŠh²hubeh}”(h]”Œ v4l2-drivers”ah ]”h"]”Œ v4l2 drivers”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kuubh¶)�”}”(hhh]”(h»)�”}”(hŒ Architecture”h]”hŒ Architecture”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¿h²hh³hÊh´K}ubhÌ)�”}”(hŒ4Some clarification what the different components do:”h]”hŒ4Some clarification what the different components do:”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj¿h²hubhŒ block_quote”“”)�”}”(hX*- Framebuffer is a memory area inside OMAP's SRAM/SDRAM that contains the pixel data for the image. Framebuffer has width and height and color depth. - Overlay defines where the pixels are read from and where they go on the screen. The overlay may be smaller than framebuffer, thus displaying only part of the framebuffer. The position of the overlay may be changed if the overlay is smaller than the display. - Overlay manager combines the overlays in to one image and feeds them to display. - Display is the actual physical display device. ”h]”j )�”}”(hhh]”(j)�”}”(hŒ“Framebuffer is a memory area inside OMAP's SRAM/SDRAM that contains the pixel data for the image. Framebuffer has width and height and color depth.”h]”hÌ)�”}”(hŒ“Framebuffer is a memory area inside OMAP's SRAM/SDRAM that contains the pixel data for the image. Framebuffer has width and height and color depth.”h]”hŒ•Framebuffer is a memory area inside OMAP’s SRAM/SDRAM that contains the pixel data for the image. Framebuffer has width and height and color depth.”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjäubj)�”}”(hXOverlay defines where the pixels are read from and where they go on the screen. The overlay may be smaller than framebuffer, thus displaying only part of the framebuffer. The position of the overlay may be changed if the overlay is smaller than the display.”h]”hÌ)�”}”(hXOverlay defines where the pixels are read from and where they go on the screen. The overlay may be smaller than framebuffer, thus displaying only part of the framebuffer. The position of the overlay may be changed if the overlay is smaller than the display.”h]”hXOverlay defines where the pixels are read from and where they go on the screen. The overlay may be smaller than framebuffer, thus displaying only part of the framebuffer. The position of the overlay may be changed if the overlay is smaller than the display.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K„hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjäubj)�”}”(hŒPOverlay manager combines the overlays in to one image and feeds them to display.”h]”hÌ)�”}”(hŒPOverlay manager combines the overlays in to one image and feeds them to display.”h]”hŒPOverlay manager combines the overlays in to one image and feeds them to display.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kˆhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjäubj)�”}”(hŒ/Display is the actual physical display device. ”h]”hÌ)�”}”(hŒ.Display is the actual physical display device.”h]”hŒ.Display is the actual physical display device.”…”�”}”(hj3h²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&]”jXjYuh1jh³hÊh´K�hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³hÊh´K�hj¿h²hubhÌ)�”}”(hXA framebuffer can be connected to multiple overlays to show the same pixel data on all of the overlays. Note that in this case the overlay input sizes must be the same, but, in case of video overlays, the output size can be different. Any framebuffer can be connected to any overlay.”h]”hXA framebuffer can be connected to multiple overlays to show the same pixel data on all of the overlays. Note that in this case the overlay input sizes must be the same, but, in case of video overlays, the output size can be different. Any framebuffer can be connected to any overlay.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŒhj¿h²hubhÌ)�”}”(hŒ¸An overlay can be connected to one overlay manager. Also DISPC overlays can be connected only to DISPC overlay managers, and virtual overlays can be only connected to virtual overlays.”h]”hŒ¸An overlay can be connected to one overlay manager. Also DISPC overlays can be connected only to DISPC overlay managers, and virtual overlays can be only connected to virtual overlays.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‘hj¿h²hubhÌ)�”}”(hŒ�An overlay manager can be connected to one display. There are certain restrictions which kinds of displays an overlay manager can be connected:”h]”hŒ�An overlay manager can be connected to one display. There are certain restrictions which kinds of displays an overlay manager can be connected:”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K•hj¿h²hubjß)�”}”(hŒÜ- DISPC TV overlay manager can be only connected to TV display. - Virtual overlay managers can only be connected to DBI or DSI displays. - DISPC LCD overlay manager can be connected to all displays, except TV display. ”h]”j )�”}”(hhh]”(j)�”}”(hŒ=DISPC TV overlay manager can be only connected to TV display.”h]”hÌ)�”}”(hj†h]”hŒ=DISPC TV overlay manager can be only connected to TV display.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K˜hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubj)�”}”(hŒFVirtual overlay managers can only be connected to DBI or DSI displays.”h]”hÌ)�”}”(hj�h]”hŒFVirtual overlay managers can only be connected to DBI or DSI displays.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K™hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubj)�”}”(hŒODISPC LCD overlay manager can be connected to all displays, except TV display. ”h]”hÌ)�”}”(hŒNDISPC LCD overlay manager can be connected to all displays, except TV display.”h]”hŒNDISPC LCD overlay manager can be connected to all displays, except TV display.”…”�”}”(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&]”jXjYuh1jh³hÊh´K˜hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³hÊh´K˜hj¿h²hubeh}”(h]”Œ architecture”ah ]”h"]”Œ architecture”ah$]”h&]”uh1hµhh·h²hh³hÊh´K}ubh¶)�”}”(hhh]”(h»)�”}”(hŒSysfs”h]”hŒSysfs”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÞh²hh³hÊh´KžubhÌ)�”}”(hŒÃThe sysfs interface is mainly used for testing. I don't think sysfs interface is the best for this in the final version, but I don't quite know what would be the best interfaces for these things.”h]”hŒÇThe sysfs interface is mainly used for testing. I don’t think sysfs interface is the best for this in the final version, but I don’t quite know what would be the best interfaces for these things.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŸhjÞh²hubhÌ)�”}”(hŒ8The sysfs interface is divided to two parts: DSS and FB.”h]”hŒ8The sysfs interface is divided to two parts: DSS and FB.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K£hjÞh²hubhÌ)�”}”(hX�/sys/class/graphics/fb? directory: mirror 0=off, 1=on rotate Rotation 0-3 for 0, 90, 180, 270 degrees rotate_type 0 = DMA rotation, 1 = VRFB rotation overlays List of overlay numbers to which framebuffer pixels go phys_addr Physical address of the framebuffer virt_addr Virtual address of the framebuffer size Size of the framebuffer”h]”hX�/sys/class/graphics/fb? directory: mirror 0=off, 1=on rotate Rotation 0-3 for 0, 90, 180, 270 degrees rotate_type 0 = DMA rotation, 1 = VRFB rotation overlays List of overlay numbers to which framebuffer pixels go phys_addr Physical address of the framebuffer virt_addr Virtual address of the framebuffer size Size of the framebuffer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¥hjÞh²hubhÌ)�”}”(hX>/sys/devices/platform/omapdss/overlay? directory: enabled 0=off, 1=on input_size width,height (ie. the framebuffer size) manager Destination overlay manager name name output_size width,height position x,y screen_width width global_alpha global alpha 0-255 0=transparent 255=opaque”h]”hX>/sys/devices/platform/omapdss/overlay? directory: enabled 0=off, 1=on input_size width,height (ie. the framebuffer size) manager Destination overlay manager name name output_size width,height position x,y screen_width width global_alpha global alpha 0-255 0=transparent 255=opaque”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K®hjÞh²hubhÌ)�”}”(hX€/sys/devices/platform/omapdss/manager? directory: display Destination display name alpha_blending_enabled 0=off, 1=on trans_key_enabled 0=off, 1=on trans_key_type gfx-destination, video-source trans_key_value transparency color key (RGB24) default_color default background color (RGB24)”h]”hX€/sys/devices/platform/omapdss/manager? directory: display Destination display name alpha_blending_enabled 0=off, 1=on trans_key_enabled 0=off, 1=on trans_key_type gfx-destination, video-source trans_key_value transparency color key (RGB24) default_color default background color (RGB24)”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¸hjÞh²hubhÌ)�”}”(hŒ1/sys/devices/platform/omapdss/display? directory:”h]”hŒ1/sys/devices/platform/omapdss/display? directory:”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÁhjÞh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jMhjJubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K=uh1jMhjJubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒ ctrl_name”h]”hŒ ctrl_name”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÄhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjjubjn)�”}”(hhh]”hÌ)�”}”(hŒController name”h]”hŒController name”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÄhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒmirror”h]”hŒmirror”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÅhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj£ubjn)�”}”(hhh]”hÌ)�”}”(hŒ 0=off, 1=on”h]”hŒ 0=off, 1=on”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÅhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒ update_mode”h]”hŒ update_mode”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÆhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjÚubjn)�”}”(hhh]”hÌ)�”}”(hŒ0=off, 1=auto, 2=manual”h]”hŒ0=off, 1=auto, 2=manual”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÆhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒenabled”h]”hŒenabled”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÇhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjubjn)�”}”(hhh]”hÌ)�”}”(hŒ 0=off, 1=on”h]”hŒ 0=off, 1=on”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÇhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒname”h]”hŒname”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÈhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjHubjn)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jmhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒrotate”h]”hŒrotate”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÉhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjqubjn)�”}”(hhh]”hÌ)�”}”(hŒ(Rotation 0-3 for 0, 90, 180, 270 degrees”h]”hŒ(Rotation 0-3 for 0, 90, 180, 270 degrees”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÉhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒtimings”h]”hŒtimings”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÊhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj¨ubjn)�”}”(hhh]”hÌ)�”}”(hŒˆDisplay timings (pixclock,xres/hfp/hbp/hsw,yres/vfp/vbp/vsw) When writing, two special timings are accepted for tv-out: "pal" and "ntsc"”h]”hŒ�Display timings (pixclock,xres/hfp/hbp/hsw,yres/vfp/vbp/vsw) When writing, two special timings are accepted for tv-out: “palâ€� and “ntscâ€�”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÊhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒ panel_name”h]”hŒ panel_name”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÍhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjßubjn)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jmhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒ tear_elim”h]”hŒ tear_elim”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjubjn)�”}”(hhh]”hÌ)�”}”(hŒTearing elimination 0=off, 1=on”h]”hŒTearing elimination 0=off, 1=on”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”(jn)�”}”(hhh]”hÌ)�”}”(hŒ output_type”h]”hŒ output_type”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj?ubjn)�”}”(hhh]”hÌ)�”}”(hŒ9Output type (video encoder only): "composite" or "svideo"”h]”hŒAOutput type (video encoder only): “compositeâ€� or “svideoâ€�”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchjJubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jHhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÞh²hh³hÊh´NubhÌ)�”}”(hŒjThere are also some debugfs files at /omapdss/ which show information about clocks and registers.”h]”hŒjThere are also some debugfs files at /omapdss/ which show information about clocks and registers.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÒhjÞh²hubeh}”(h]”Œsysfs”ah ]”h"]”Œsysfs”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kžubh¶)�”}”(hhh]”(h»)�”}”(hŒExamples”h]”hŒExamples”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŸh²hh³hÊh´KÖubhÌ)�”}”(hŒAThe following definitions have been made for the examples below::”h]”hŒ@The following definitions have been made for the examples below:”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KØhjŸh²hubhŒ literal_block”“”)�”}”(hX²ovl0=/sys/devices/platform/omapdss/overlay0 ovl1=/sys/devices/platform/omapdss/overlay1 ovl2=/sys/devices/platform/omapdss/overlay2 mgr0=/sys/devices/platform/omapdss/manager0 mgr1=/sys/devices/platform/omapdss/manager1 lcd=/sys/devices/platform/omapdss/display0 dvi=/sys/devices/platform/omapdss/display1 tv=/sys/devices/platform/omapdss/display2 fb0=/sys/class/graphics/fb0 fb1=/sys/class/graphics/fb1 fb2=/sys/class/graphics/fb2”h]”hX²ovl0=/sys/devices/platform/omapdss/overlay0 ovl1=/sys/devices/platform/omapdss/overlay1 ovl2=/sys/devices/platform/omapdss/overlay2 mgr0=/sys/devices/platform/omapdss/manager0 mgr1=/sys/devices/platform/omapdss/manager1 lcd=/sys/devices/platform/omapdss/display0 dvi=/sys/devices/platform/omapdss/display1 tv=/sys/devices/platform/omapdss/display2 fb0=/sys/class/graphics/fb0 fb1=/sys/class/graphics/fb1 fb2=/sys/class/graphics/fb2”…”�”}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j¾h³hÊh´KÚhjŸh²hubeh}”(h]”Œexamples”ah ]”h"]”Œexamples”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÖubh¶)�”}”(hhh]”(h»)�”}”(hŒDefault setup on OMAP3 SDP”h]”hŒDefault setup on OMAP3 SDP”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjØh²hh³hÊh´KêubhÌ)�”}”(hŒ÷Here's the default setup on OMAP3 SDP board. All planes go to LCD. DVI and TV-out are not in use. The columns from left to right are: framebuffers, overlays, overlay managers, displays. Framebuffers are handled by omapfb, and the rest by the DSS::”h]”hŒøHere’s the default setup on OMAP3 SDP board. All planes go to LCD. DVI and TV-out are not in use. The columns from left to right are: framebuffers, overlays, overlay managers, displays. Framebuffers are handled by omapfb, and the rest by the DSS:”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KìhjØh²hubj¿)�”}”(hŒ[FB0 --- GFX -\ DVI FB1 --- VID1 --+- LCD ---- LCD FB2 --- VID2 -/ TV ----- TV”h]”hŒ[FB0 --- GFX -\ DVI FB1 --- VID1 --+- LCD ---- LCD FB2 --- VID2 -/ TV ----- TV”…”�”}”hj÷sbah}”(h]”h ]”h"]”h$]”h&]”jÎjÏuh1j¾h³hÊh´KñhjØh²hubeh}”(h]”Œdefault-setup-on-omap3-sdp”ah ]”h"]”Œdefault setup on omap3 sdp”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kêubh¶)�”}”(hhh]”(h»)�”}”(hŒExample: Switch from LCD to DVI”h]”hŒExample: Switch from LCD to DVI”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´Köubj¿)�”}”(hX\w=`cat $dvi/timings | cut -d "," -f 2 | cut -d "/" -f 1` h=`cat $dvi/timings | cut -d "," -f 3 | cut -d "/" -f 1` echo "0" > $lcd/enabled echo "" > $mgr0/display fbset -fb /dev/fb0 -xres $w -yres $h -vxres $w -vyres $h # at this point you have to switch the dvi/lcd dip-switch from the omap board echo "dvi" > $mgr0/display echo "1" > $dvi/enabled”h]”hX\w=`cat $dvi/timings | cut -d "," -f 2 | cut -d "/" -f 1` h=`cat $dvi/timings | cut -d "," -f 3 | cut -d "/" -f 1` echo "0" > $lcd/enabled echo "" > $mgr0/display fbset -fb /dev/fb0 -xres $w -yres $h -vxres $w -vyres $h # at this point you have to switch the dvi/lcd dip-switch from the omap board echo "dvi" > $mgr0/display echo "1" > $dvi/enabled”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jÎjÏuh1j¾h³hÊh´Kúhj h²hubhÌ)�”}”(hŒ*After this the configuration looks like:::”h]”hŒ)After this the configuration looks like::”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj h²hubj¿)�”}”(hŒ[FB0 --- GFX -\ -- DVI FB1 --- VID1 --+- LCD -/ LCD FB2 --- VID2 -/ TV ----- TV”h]”hŒ[FB0 --- GFX -\ -- DVI FB1 --- VID1 --+- LCD -/ LCD FB2 --- VID2 -/ TV ----- TV”…”�”}”hj:sbah}”(h]”h ]”h"]”h$]”h&]”jÎjÏuh1j¾h³hÊh´Mhj h²hubeh}”(h]”Œexample-switch-from-lcd-to-dvi”ah ]”h"]”Œexample: switch from lcd to dvi”ah$]”h&]”uh1hµhh·h²hh³hÊh´Köubh¶)�”}”(hhh]”(h»)�”}”(hŒ(Example: Clone GFX overlay to LCD and TV”h]”hŒ(Example: Clone GFX overlay to LCD and TV”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjPh²hh³hÊh´M ubj¿)�”}”(hX]w=`cat $tv/timings | cut -d "," -f 2 | cut -d "/" -f 1` h=`cat $tv/timings | cut -d "," -f 3 | cut -d "/" -f 1` echo "0" > $ovl0/enabled echo "0" > $ovl1/enabled echo "" > $fb1/overlays echo "0,1" > $fb0/overlays echo "$w,$h" > $ovl1/output_size echo "tv" > $ovl1/manager echo "1" > $ovl0/enabled echo "1" > $ovl1/enabled echo "1" > $tv/enabled”h]”hX]w=`cat $tv/timings | cut -d "," -f 2 | cut -d "/" -f 1` h=`cat $tv/timings | cut -d "," -f 3 | cut -d "/" -f 1` echo "0" > $ovl0/enabled echo "0" > $ovl1/enabled echo "" > $fb1/overlays echo "0,1" > $fb0/overlays echo "$w,$h" > $ovl1/output_size echo "tv" > $ovl1/manager echo "1" > $ovl0/enabled echo "1" > $ovl1/enabled echo "1" > $tv/enabled”…”�”}”hjasbah}”(h]”h ]”h"]”h$]”h&]”jÎjÏuh1j¾h³hÊh´MhjPh²hubhÌ)�”}”(hŒEAfter this the configuration looks like (only relevant parts shown)::”h]”hŒDAfter this the configuration looks like (only relevant parts shown):”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjPh²hubj¿)�”}”(hŒ7FB0 +-- GFX ---- LCD ---- LCD \- VID1 ---- TV ---- TV”h]”hŒ7FB0 +-- GFX ---- LCD ---- LCD \- VID1 ---- TV ---- TV”…”�”}”hj}sbah}”(h]”h ]”h"]”h$]”h&]”jÎjÏuh1j¾h³hÊh´M"hjPh²hubeh}”(h]”Œ'example-clone-gfx-overlay-to-lcd-and-tv”ah ]”h"]”Œ(example: clone gfx overlay to lcd and tv”ah$]”h&]”uh1hµhh·h²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Misc notes”h]”hŒ Misc notes”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj“h²hh³hÊh´M&ubhÌ)�”}”(hXOMAP FB allocates the framebuffer memory using the standard dma allocator. You can enable Contiguous Memory Allocator (CONFIG_CMA) to improve the dma allocator, and if CMA is enabled, you use "cma=" kernel parameter to increase the global memory area for CMA.”h]”hXOMAP FB allocates the framebuffer memory using the standard dma allocator. You can enable Contiguous Memory Allocator (CONFIG_CMA) to improve the dma allocator, and if CMA is enabled, you use “cma=â€� kernel parameter to increase the global memory area for CMA.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M(hj“h²hubhÌ)�”}”(hŒœUsing DSI DPLL to generate pixel clock it is possible produce the pixel clock of 86.5MHz (max possible), and with that you get 1280x1024@57 output from DVI.”h]”(hŒUsing DSI DPLL to generate pixel clock it is possible produce the pixel clock of 86.5MHz (max possible), and with that you get ”…”�”}”(hj²h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ 1280x1024@57”h]”hŒ 1280x1024@57”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:1280x1024@57”uh1jºhj²ubhŒ output from DVI.”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M-hj“h²hubhÌ)�”}”(hŒiRotation and mirroring currently only supports RGB565 and RGB8888 modes. VRFB does not support mirroring.”h]”hŒiRotation and mirroring currently only supports RGB565 and RGB8888 modes. VRFB does not support mirroring.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hj“h²hubhÌ)�”}”(hŒÿVRFB rotation requires much more memory than non-rotated framebuffer, so you probably need to increase your vram setting before using VRFB rotation. Also, many applications may not work with VRFB if they do not pay attention to all framebuffer parameters.”h]”hŒÿVRFB rotation requires much more memory than non-rotated framebuffer, so you probably need to increase your vram setting before using VRFB rotation. Also, many applications may not work with VRFB if they do not pay attention to all framebuffer parameters.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M3hj“h²hubeh}”(h]”Œ misc-notes”ah ]”h"]”Œ misc notes”ah$]”h&]”uh1hµhh·h²hh³hÊh´M&ubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel boot arguments”h]”hŒKernel boot arguments”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjúh²hh³hÊh´M9ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒñomapfb.mode=:[,...] - Default video mode for specified displays. For example, "dvi:800x400MR-24@60". See drivers/video/fbdev/core/modedb.c. There are also two special modes: "pal" and "ntsc" that can be used to tv out. ”h]”(hŒterm”“”)�”}”(hŒ"omapfb.mode=:[,...]”h]”hŒ"omapfb.mode=:[,...]”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´M?hj ubhŒ definition”“”)�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒÆDefault video mode for specified displays. For example, "dvi:800x400MR-24@60". See drivers/video/fbdev/core/modedb.c. There are also two special modes: "pal" and "ntsc" that can be used to tv out. ”h]”hÌ)�”}”(hŒÅDefault video mode for specified displays. For example, "dvi:800x400MR-24@60". See drivers/video/fbdev/core/modedb.c. There are also two special modes: "pal" and "ntsc" that can be used to tv out.”h]”hŒÑDefault video mode for specified displays. For example, “dvi:800x400MR-24@60â€�. See drivers/video/fbdev/core/modedb.c. There are also two special modes: “palâ€� and “ntscâ€� that can be used to tv out.”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M<hj. ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj+ ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´M<hj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´M?hj ubj )�”}”(hXomapfb.vram=:[@][,...] - VRAM allocated for a framebuffer. Normally omapfb allocates vram depending on the display size. With this you can manually allocate more or define the physical address of each framebuffer. For example, "1:4M" to allocate 4M for fb1. ”h]”(j )�”}”(hŒ-omapfb.vram=:[@][,...]”h]”hŒ-omapfb.vram=:[@][,...]”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MEhjX ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒéVRAM allocated for a framebuffer. Normally omapfb allocates vram depending on the display size. With this you can manually allocate more or define the physical address of each framebuffer. For example, "1:4M" to allocate 4M for fb1. ”h]”hÌ)�”}”(hŒèVRAM allocated for a framebuffer. Normally omapfb allocates vram depending on the display size. With this you can manually allocate more or define the physical address of each framebuffer. For example, "1:4M" to allocate 4M for fb1.”h]”hŒìVRAM allocated for a framebuffer. Normally omapfb allocates vram depending on the display size. With this you can manually allocate more or define the physical address of each framebuffer. For example, “1:4Mâ€� to allocate 4M for fb1.”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MBhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjm ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´MBhjj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hjX ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MEhj h²hubj )�”}”(hŒnomapfb.debug= - Enable debug printing. You have to have OMAPFB debug support enabled in kernel config. ”h]”(j )�”}”(hŒomapfb.debug=”h]”hŒomapfb.debug=”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MIhjš ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒWEnable debug printing. You have to have OMAPFB debug support enabled in kernel config. ”h]”hÌ)�”}”(hŒVEnable debug printing. You have to have OMAPFB debug support enabled in kernel config.”h]”hŒVEnable debug printing. You have to have OMAPFB debug support enabled in kernel config.”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¯ ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´MHhj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hjš ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MIhj h²hubj )�”}”(hŒ�omapfb.test= - Draw test pattern to framebuffer whenever framebuffer settings change. You need to have OMAPFB debug support enabled in kernel config. ”h]”(j )�”}”(hŒomapfb.test=”h]”hŒomapfb.test=”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MMhjÜ ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒ‡Draw test pattern to framebuffer whenever framebuffer settings change. You need to have OMAPFB debug support enabled in kernel config. ”h]”hÌ)�”}”(hŒ†Draw test pattern to framebuffer whenever framebuffer settings change. You need to have OMAPFB debug support enabled in kernel config.”h]”hŒ†Draw test pattern to framebuffer whenever framebuffer settings change. You need to have OMAPFB debug support enabled in kernel config.”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjñ ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´MLhjî ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hjÜ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MMhj h²hubj )�”}”(hŒ - Use VRFB rotation for all framebuffers. ”h]”(j )�”}”(hŒomapfb.vrfb=”h]”hŒomapfb.vrfb=”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MPhj ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒ(Use VRFB rotation for all framebuffers. ”h]”hÌ)�”}”(hŒ'Use VRFB rotation for all framebuffers.”h]”hŒ'Use VRFB rotation for all framebuffers.”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj3 ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´MPhj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MPhj h²hubj )�”}”(hŒ«omapfb.rotate= - Default rotation applied to all framebuffers. 0 - 0 degree rotation 1 - 90 degree rotation 2 - 180 degree rotation 3 - 270 degree rotation ”h]”(j )�”}”(hŒomapfb.rotate=”h]”hŒomapfb.rotate=”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MWhj` ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒ‹Default rotation applied to all framebuffers. 0 - 0 degree rotation 1 - 90 degree rotation 2 - 180 degree rotation 3 - 270 degree rotation ”h]”hÌ)�”}”(hŒŠDefault rotation applied to all framebuffers. 0 - 0 degree rotation 1 - 90 degree rotation 2 - 180 degree rotation 3 - 270 degree rotation”h]”hŒŠDefault rotation applied to all framebuffers. 0 - 0 degree rotation 1 - 90 degree rotation 2 - 180 degree rotation 3 - 270 degree rotation”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hju ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´MShjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hj` ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MWhj h²hubj )�”}”(hŒYomapfb.mirror= - Default mirror for all framebuffers. Only works with DMA rotation. ”h]”(j )�”}”(hŒomapfb.mirror=”h]”hŒomapfb.mirror=”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MZhj¢ ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒCDefault mirror for all framebuffers. Only works with DMA rotation. ”h]”hÌ)�”}”(hŒBDefault mirror for all framebuffers. Only works with DMA rotation.”h]”hŒBDefault mirror for all framebuffers. Only works with DMA rotation.”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MZhjº ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj· ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´MZhj´ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hj¢ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´MZhj h²hubj )�”}”(hŒ„omapdss.def_disp= - Name of default display, to which all overlays will be connected. Common examples are "lcd" or "tv". ”h]”(j )�”}”(hŒomapdss.def_disp=”h]”hŒomapdss.def_disp=”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´M^hjä ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒeName of default display, to which all overlays will be connected. Common examples are "lcd" or "tv". ”h]”hÌ)�”}”(hŒdName of default display, to which all overlays will be connected. Common examples are "lcd" or "tv".”h]”hŒlName of default display, to which all overlays will be connected. Common examples are “lcdâ€� or “tvâ€�.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjù ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´M]hjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hjä ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´M^hj h²hubj )�”}”(hŒlomapdss.debug= - Enable debug printing. You have to have DSS debug support enabled in kernel config. ”h]”(j )�”}”(hŒomapdss.debug=”h]”hŒomapdss.debug=”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´Mbhj& ubj' )�”}”(hhh]”j )�”}”(hhh]”j)�”}”(hŒTEnable debug printing. You have to have DSS debug support enabled in kernel config. ”h]”hÌ)�”}”(hŒSEnable debug printing. You have to have DSS debug support enabled in kernel config.”h]”hŒSEnable debug printing. You have to have DSS debug support enabled in kernel config.”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mahj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj; ubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´Mahj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j& hj& ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´Mbhj h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjúh²hh³Nh´Nubeh}”(h]”Œkernel-boot-arguments”ah ]”h"]”Œkernel boot arguments”ah$]”h&]”uh1hµhh·h²hh³hÊh´M9ubh¶)�”}”(hhh]”(h»)�”}”(hŒTODO”h]”hŒTODO”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjv h²hh³hÊh´MeubhÌ)�”}”(hŒ DSS locking”h]”hŒ DSS locking”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghjv h²hubhÌ)�”}”(hŒError checking”h]”hŒError checking”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mihjv h²hubj )�”}”(hhh]”j)�”}”(hŒ8Lots of checks are missing or implemented just as BUG() ”h]”hÌ)�”}”(hŒ7Lots of checks are missing or implemented just as BUG()”h]”hŒ7Lots of checks are missing or implemented just as BUG()”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mkhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj£ h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´Mkhjv h²hubhÌ)�”}”(hŒSystem DMA update for DSI”h]”hŒSystem DMA update for DSI”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mmhjv h²hubj )�”}”(hhh]”j)�”}”(hŒ^Can be used for RGB16 and RGB24P modes. Probably not for RGB24U (how to skip the empty byte?) ”h]”hÌ)�”}”(hŒ]Can be used for RGB16 and RGB24P modes. Probably not for RGB24U (how to skip the empty byte?)”h]”hŒ]Can be used for RGB16 and RGB24P modes. Probably not for RGB24U (how to skip the empty byte?)”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MohjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÒ h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´Mohjv h²hubhÌ)�”}”(hŒ OMAP1 support”h]”hŒ OMAP1 support”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mrhjv h²hubj )�”}”(hhh]”j)�”}”(hŒNot sure if needed”h]”hÌ)�”}”(hj h]”hŒNot sure if needed”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”jXjYuh1jh³hÊh´Mthjv h²hubeh}”(h]”Œtodo”ah ]”h"]”Œtodo”ah$]”h&]”uh1hµhh·h²hh³hÊh´Meubeh}”(h]”Œomap2-3-display-subsystem”ah ]”h"]”Œomap2/3 display subsystem”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”jmŒ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”jS Œ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”}”(j. j+ jmjjj¢jŸjjjDjAj‡j„j¼j¹jÛjØjœj™jÕjÒj jjMjJj�j�j÷jôjs jp j& j# uŒ nametypes”}”(j. ‰jm‰j¢‰j‰jD‰j‡‰j¼‰jÛ‰jœ‰jÕ‰j ‰jM‰j�‰j÷‰js ‰j& ‰uh}”(j+ h·jjhéjŸjpjj¥jAj j„jGj¹jŠjØj¿j™jÞjÒjŸjjØjJj j�jPjôj“jp júj# jv uŒ 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.