€•GŒ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/gpu/komeda-kms”Œ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/gpu/komeda-kms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/it_IT/gpu/komeda-kms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ja_JP/gpu/komeda-kms”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ko_KR/gpu/komeda-kms”Œ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/gpu/komeda-kms”Œ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/gpu/komeda-kms”Œ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³ŒubhÞ)�”}”(hXöD71 scaler mostly only has the half horizontal input/output capabilities compared with Layer, like if Layer supports 4K input size, the scaler only can support 2K input/output in the same time. To achieve the ful frame scaling, D71 introduces Layer Split, which splits the whole image to two half parts and feeds them to two Layers A and B, and does the scaling independently. After scaling the result need to be fed to merger to merge two part images together, and then output merged result to compiz.”h]”hXöD71 scaler mostly only has the half horizontal input/output capabilities compared with Layer, like if Layer supports 4K input size, the scaler only can support 2K input/output in the same time. To achieve the ful frame scaling, D71 introduces Layer Split, which splits the whole image to two half parts and feeds them to two Layers A and B, and does the scaling independently. After scaling the result need to be fed to merger to merge two part images together, and then output merged result to compiz.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K?hjh²hubeh}”(h]”Œmerger”ah ]”h"]”Œmerger”ah$]”h&]”uh1hÈhhíh²hh³hÇh´K>ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSplitter”h]”hŒSplitter”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj+h²hh³hÇh´KHubhÞ)�”}”(hŒŠSimilar to Layer Split, but Splitter is used for writeback, which splits the compiz result to two parts and then feed them to two scalers.”h]”hŒŠSimilar to Layer Split, but Splitter is used for writeback, which splits the compiz result to two parts and then feed them to two scalers.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhj+h²hubeh}”(h]”Œsplitter”ah ]”h"]”Œsplitter”ah$]”h&]”uh1hÈhhíh²hh³hÇh´KHubeh}”(h]”Œ overview-of-d71-like-display-ips”ah ]”h"]”Œ overview of d71 like display ips”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒPossible D71 Pipeline usage”h]”hŒPossible D71 Pipeline usage”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjZh²hh³hÇh´KMubhÞ)�”}”(hŒ°Benefitting from the modularized architecture, D71 pipelines can be easily adjusted to fit different usages. And D71 has two pipelines, which support two types of working mode:”h]”hŒ°Benefitting from the modularized architecture, D71 pipelines can be easily adjusted to fit different usages. And D71 has two pipelines, which support two types of working mode:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhjZh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ`Dual display mode Two pipelines work independently and separately to drive two display outputs. ”h]”hÞ)�”}”(hŒ_Dual display mode Two pipelines work independently and separately to drive two display outputs.”h]”hŒ_Dual display mode Two pipelines work independently and separately to drive two display outputs.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KShj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj{h²hh³hÇh´Nubj)�”}”(hX;Single display mode Two pipelines work together to drive only one display output. On this mode, pipeline_B doesn't work independently, but outputs its composition result into pipeline_A, and its pixel timing also derived from pipeline_A.timing_ctrlr. The pipeline_B works just like a "slave" of pipeline_A(master) ”h]”(hÞ)�”}”(hŒQSingle display mode Two pipelines work together to drive only one display output.”h]”hŒQSingle display mode Two pipelines work together to drive only one display output.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KVhj˜ubhÞ)�”}”(hŒçOn this mode, pipeline_B doesn't work independently, but outputs its composition result into pipeline_A, and its pixel timing also derived from pipeline_A.timing_ctrlr. The pipeline_B works just like a "slave" of pipeline_A(master)”h]”hŒíOn this mode, pipeline_B doesn’t work independently, but outputs its composition result into pipeline_A, and its pixel timing also derived from pipeline_A.timing_ctrlr. The pipeline_B works just like a “slaveâ€� of pipeline_A(master)”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KYhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~hj{h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jyh³hÇh´KShjZh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSingle pipeline data flow”h]”hŒSingle pipeline data flow”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÆh²hh³hÇh´K_ubhŒfigure”“”)�”}”(hhh]”(Œkfigure”Œ kernel_render”“”)�”}”(hhh]”hŒ literal_block”“”)�”}”(hXdigraph single_ppl { rankdir=LR; subgraph { "Memory"; "Monitor"; } subgraph cluster_pipeline { style=dashed node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-0"; "Scaler-1"; "Scaler-0/1" } node [bgcolor=grey style=filled] "Layer-0" -> "Scaler-0" "Layer-1" -> "Scaler-0" "Layer-2" -> "Scaler-1" "Layer-3" -> "Scaler-1" "Layer-0" -> "Compiz" "Layer-1" -> "Compiz" "Layer-2" -> "Compiz" "Layer-3" -> "Compiz" "Scaler-0" -> "Compiz" "Scaler-1" -> "Compiz" "Compiz" -> "Scaler-0/1" -> "Wb_layer" "Compiz" -> "Improc" -> "Timing Controller" } "Wb_layer" -> "Memory" "Timing Controller" -> "Monitor" }”h]”hXdigraph single_ppl { rankdir=LR; subgraph { "Memory"; "Monitor"; } subgraph cluster_pipeline { style=dashed node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-0"; "Scaler-1"; "Scaler-0/1" } node [bgcolor=grey style=filled] "Layer-0" -> "Scaler-0" "Layer-1" -> "Scaler-0" "Layer-2" -> "Scaler-1" "Layer-3" -> "Scaler-1" "Layer-0" -> "Compiz" "Layer-1" -> "Compiz" "Layer-2" -> "Compiz" "Layer-3" -> "Compiz" "Scaler-0" -> "Compiz" "Scaler-1" -> "Compiz" "Compiz" -> "Scaler-0/1" -> "Wb_layer" "Compiz" -> "Improc" -> "Timing Controller" } "Wb_layer" -> "Memory" "Timing Controller" -> "Monitor" }”…”�”}”hjäsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhjßh³hÇubah}”(h]”h ]”h"]”h$]”h&]”Œalt”ŒSingle pipeline digraph”Œsrclang”ŒDOT”uh1jÝhjÙubhŒcaption”“”)�”}”(hŒSingle pipeline data flow”h]”hŒSingle pipeline data flow”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´KhjÙubeh}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œalt”jùŒcaption”juh1j×hjÆh²hh³hh´Nubeh}”(h]”Œsingle-pipeline-data-flow”ah ]”h"]”Œsingle pipeline data flow”ah$]”h&]”uh1hÈhjZh²hh³hÇh´K_Œ referenced”KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Dual pipeline with Slave enabled”h]”hŒ Dual pipeline with Slave enabled”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K�ubjØ)�”}”(hhh]”(jÞ)�”}”(hhh]”jã)�”}”(hX&digraph slave_ppl { rankdir=LR; subgraph { "Memory"; "Monitor"; } node [shape=box] subgraph cluster_pipeline_slave { style=dashed label="Slave Pipeline_B" node [shape=box] { node [bgcolor=grey style=dashed] "Slave.Scaler-0"; "Slave.Scaler-1"; } node [bgcolor=grey style=filled] "Slave.Layer-0" -> "Slave.Scaler-0" "Slave.Layer-1" -> "Slave.Scaler-0" "Slave.Layer-2" -> "Slave.Scaler-1" "Slave.Layer-3" -> "Slave.Scaler-1" "Slave.Layer-0" -> "Slave.Compiz" "Slave.Layer-1" -> "Slave.Compiz" "Slave.Layer-2" -> "Slave.Compiz" "Slave.Layer-3" -> "Slave.Compiz" "Slave.Scaler-0" -> "Slave.Compiz" "Slave.Scaler-1" -> "Slave.Compiz" } subgraph cluster_pipeline_master { style=dashed label="Master Pipeline_A" node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-0"; "Scaler-1"; "Scaler-0/1" } node [bgcolor=grey style=filled] "Layer-0" -> "Scaler-0" "Layer-1" -> "Scaler-0" "Layer-2" -> "Scaler-1" "Layer-3" -> "Scaler-1" "Slave.Compiz" -> "Compiz" "Layer-0" -> "Compiz" "Layer-1" -> "Compiz" "Layer-2" -> "Compiz" "Layer-3" -> "Compiz" "Scaler-0" -> "Compiz" "Scaler-1" -> "Compiz" "Compiz" -> "Scaler-0/1" -> "Wb_layer" "Compiz" -> "Improc" -> "Timing Controller" } "Wb_layer" -> "Memory" "Timing Controller" -> "Monitor" }”h]”hX&digraph slave_ppl { rankdir=LR; subgraph { "Memory"; "Monitor"; } node [shape=box] subgraph cluster_pipeline_slave { style=dashed label="Slave Pipeline_B" node [shape=box] { node [bgcolor=grey style=dashed] "Slave.Scaler-0"; "Slave.Scaler-1"; } node [bgcolor=grey style=filled] "Slave.Layer-0" -> "Slave.Scaler-0" "Slave.Layer-1" -> "Slave.Scaler-0" "Slave.Layer-2" -> "Slave.Scaler-1" "Slave.Layer-3" -> "Slave.Scaler-1" "Slave.Layer-0" -> "Slave.Compiz" "Slave.Layer-1" -> "Slave.Compiz" "Slave.Layer-2" -> "Slave.Compiz" "Slave.Layer-3" -> "Slave.Compiz" "Slave.Scaler-0" -> "Slave.Compiz" "Slave.Scaler-1" -> "Slave.Compiz" } subgraph cluster_pipeline_master { style=dashed label="Master Pipeline_A" node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-0"; "Scaler-1"; "Scaler-0/1" } node [bgcolor=grey style=filled] "Layer-0" -> "Scaler-0" "Layer-1" -> "Scaler-0" "Layer-2" -> "Scaler-1" "Layer-3" -> "Scaler-1" "Slave.Compiz" -> "Compiz" "Layer-0" -> "Compiz" "Layer-1" -> "Compiz" "Layer-2" -> "Compiz" "Layer-3" -> "Compiz" "Scaler-0" -> "Compiz" "Scaler-1" -> "Compiz" "Compiz" -> "Scaler-0/1" -> "Wb_layer" "Compiz" -> "Improc" -> "Timing Controller" } "Wb_layer" -> "Memory" "Timing Controller" -> "Monitor" }”…”�”}”hj5sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhj2h³hÇubah}”(h]”h ]”h"]”h$]”h&]”jøŒSlave pipeline digraph”júŒDOT”uh1jÝhj/ubjý)�”}”(hŒ Slave pipeline enabled data flow”h]”hŒ Slave pipeline enabled data flow”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´Khj/ubeh}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œalt”jIŒcaption”jMuh1j×hjh²hh³hh´Nubeh}”(h]”Œ dual-pipeline-with-slave-enabled”ah ]”h"]”Œ dual pipeline with slave enabled”ah$]”h&]”uh1hÈhjZh²hh³hÇh´K�jKubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ"Sub-pipelines for input and output”h]”hŒ"Sub-pipelines for input and output”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjjh²hh³hÇh´KÕubhÞ)�”}”(hŒiA complete display pipeline can be easily divided into three sub-pipelines according to the in/out usage.”h]”hŒiA complete display pipeline can be easily divided into three sub-pipelines according to the in/out usage.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K×hjjh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒLayer(input) pipeline”h]”hŒLayer(input) pipeline”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‰h²hh³hÇh´KÛubjØ)�”}”(hhh]”(jÞ)�”}”(hhh]”jã)�”}”(hŒ¬digraph layer_data_flow { rankdir=LR; node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-n"; } "Layer-n" -> "Scaler-n" -> "Compiz" }”h]”hŒ¬digraph layer_data_flow { rankdir=LR; node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-n"; } "Layer-n" -> "Scaler-n" -> "Compiz" }”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhj�h³hÇubah}”(h]”h ]”h"]”h$]”h&]”jøŒLayer data digraph”júŒDOT”uh1jÝhjšubjý)�”}”(hŒLayer (input) data flow”h]”hŒLayer (input) data flow”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´Khjšubeh}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œalt”j´Œcaption”j¸uh1j×hj‰h²hh³hh´NubjØ)�”}”(hhh]”(jÞ)�”}”(hhh]”jã)�”}”(hŒ©digraph layer_data_flow { rankdir=LR; node [shape=box] "Layer-0/1" -> "Scaler-0" -> "Merger" "Layer-2/3" -> "Scaler-1" -> "Merger" "Merger" -> "Compiz" }”h]”hŒ©digraph layer_data_flow { rankdir=LR; node [shape=box] "Layer-0/1" -> "Scaler-0" -> "Merger" "Layer-2/3" -> "Scaler-1" -> "Merger" "Merger" -> "Compiz" }”…”�”}”hjÓsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhjÐh³hÇubah}”(h]”h ]”h"]”h$]”h&]”jøŒLayer Split digraph”júŒDOT”uh1jÝhjÍubjý)�”}”(hŒLayer Split pipeline”h]”hŒLayer Split pipeline”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´KhjÍubeh}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œalt”jçŒcaption”jëuh1j×hj‰h²hh³hh´Nubeh}”(h]”Œlayer-input-pipeline”ah ]”h"]”Œlayer(input) pipeline”ah$]”h&]”uh1hÈhjjh²hh³hÇh´KÛjKubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒWriteback(output) pipeline”h]”hŒWriteback(output) pipeline”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´KûubjØ)�”}”(hhh]”(jÞ)�”}”(hhh]”jã)�”}”(hŒ±digraph writeback_data_flow { rankdir=LR; node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-n"; } "Compiz" -> "Scaler-n" -> "Wb_layer" }”h]”hŒ±digraph writeback_data_flow { rankdir=LR; node [shape=box] { node [bgcolor=grey style=dashed] "Scaler-n"; } "Compiz" -> "Scaler-n" -> "Wb_layer" }”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhjh³hÇubah}”(h]”h ]”h"]”h$]”h&]”jøŒwriteback digraph”júŒDOT”uh1jÝhjubjý)�”}”(hŒWriteback(output) data flow”h]”hŒWriteback(output) data flow”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´Khjubeh}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œalt”j3Œcaption”j7uh1j×hjh²hh³hh´NubjØ)�”}”(hhh]”(jÞ)�”}”(hhh]”jã)�”}”(hŒÇdigraph writeback_data_flow { rankdir=LR; node [shape=box] "Compiz" -> "Splitter" "Splitter" -> "Scaler-0" -> "Merger" "Splitter" -> "Scaler-1" -> "Merger" "Merger" -> "Wb_layer" }”h]”hŒÇdigraph writeback_data_flow { rankdir=LR; node [shape=box] "Compiz" -> "Splitter" "Splitter" -> "Scaler-0" -> "Merger" "Splitter" -> "Scaler-1" -> "Merger" "Merger" -> "Wb_layer" }”…”�”}”hjRsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhjOh³hÇubah}”(h]”h ]”h"]”h$]”h&]”jøŒsplit writeback digraph”júŒDOT”uh1jÝhjLubjý)�”}”(hŒ!Writeback(output) Split data flow”h]”hŒ!Writeback(output) Split data flow”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´KhjLubeh}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œalt”jfŒcaption”jjuh1j×hjh²hh³hh´Nubeh}”(h]”Œwriteback-output-pipeline”ah ]”h"]”Œwriteback(output) pipeline”ah$]”h&]”uh1hÈhjjh²hh³hÇh´KûjKubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒDisplay output pipeline”h]”hŒDisplay output pipeline”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‡h²hh³hÇh´MubjØ)�”}”(hhh]”(jÞ)�”}”(hhh]”jã)�”}”(hŒidigraph single_ppl { rankdir=LR; node [shape=box] "Compiz" -> "Improc" -> "Timing Controller" }”h]”hŒidigraph single_ppl { rankdir=LR; node [shape=box] "Compiz" -> "Improc" -> "Timing Controller" }”…”�”}”hjžsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâhj›h³hÇubah}”(h]”h ]”h"]”h$]”h&]”jøŒdisplay digraph”júŒDOT”uh1jÝhj˜ubjý)�”}”(hŒdisplay output data flow”h]”hŒdisplay output data flow”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jüh³hh´Khj˜ubeh}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œalt”j²Œcaption”j¶uh1j×hj‡h²hh³hh´NubhÞ)�”}”(hŒtIn the following section we'll see these three sub-pipelines will be handled by KMS-plane/wb_conn/crtc respectively.”h]”hŒvIn the following section we’ll see these three sub-pipelines will be handled by KMS-plane/wb_conn/crtc respectively.”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M'hj‡h²hubeh}”(h]”Œdisplay-output-pipeline”ah ]”h"]”Œdisplay output pipeline”ah$]”h&]”uh1hÈhjjh²hh³hÇh´MjKubeh}”(h]”Œ"sub-pipelines-for-input-and-output”ah ]”h"]”Œ"sub-pipelines for input and output”ah$]”h&]”uh1hÈhjZh²hh³hÇh´KÕubeh}”(h]”Œpossible-d71-pipeline-usage”ah ]”h"]”Œpossible d71 pipeline usage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KMubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒKomeda Resource abstraction”h]”hŒKomeda Resource abstraction”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjñh²hh³hÇh´M+ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ struct komeda_pipeline/component”h]”hŒ struct komeda_pipeline/component”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´M.ubhÞ)�”}”(hŒÔTo fully utilize and easily access/configure the HW, the driver side also uses a similar architecture: Pipeline/Component to describe the HW features and capabilities, and a specific component includes two parts:”h]”hŒÔTo fully utilize and easily access/configure the HW, the driver side also uses a similar architecture: Pipeline/Component to describe the HW features and capabilities, and a specific component includes two parts:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M0hjh²hubjz)�”}”(hhh]”(j)�”}”(hŒData flow controlling.”h]”hÞ)�”}”(hj&h]”hŒData flow controlling.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M4hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj!h²hh³hÇh´Nubj)�”}”(hŒ.Specific component capabilities and features. ”h]”hÞ)�”}”(hŒ-Specific component capabilities and features.”h]”hŒ-Specific component capabilities and features.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M5hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj!h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³hÇh´M4hjh²hubhÞ)�”}”(hŒ¢So the driver defines a common header struct komeda_component to describe the data flow control and all specific components are a subclass of this base structure.”h]”hŒ¢So the driver defines a common header struct komeda_component to describe the data flow control and all specific components are a subclass of this base structure.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M7hjh²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œkomeda_component (C struct)”Œc.komeda_component”hNt”auh1jghjh²hh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒkomeda_component”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct komeda_component”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jŠhj†h²hh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jœhj†h²hh³j›h´KubhŒ desc_name”“”)�”}”(hŒkomeda_component”h]”hŒ desc_sig_name”“”)�”}”(hj‚h]”hŒkomeda_component”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j³hj¯ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j­hj†h²hh³j›h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j„Œsphinx_line_type”Œ declarator”hj€h²hh³j›h´Kubah}”(h]”jvah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j~h³j›h´Khj{h²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhj{h²hh³j›h´Kubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”jíŒobjtype”jîŒdesctype”jîŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jyh²hhjh³jxh´NubhŒ container”“”)�”}”(hXn**Definition**:: struct komeda_component { struct drm_private_obj obj; struct komeda_pipeline *pipeline; char name[32]; u32 __iomem *reg; u32 id; u32 hw_id; u8 max_active_inputs; u8 max_active_outputs; u32 supported_inputs; u32 supported_outputs; const struct komeda_component_funcs *funcs; }; **Members** ``obj`` treat component as private obj ``pipeline`` the komeda pipeline this component belongs to ``name`` component name ``reg`` component register base, which is initialized by chip and used by chip only ``id`` component id ``hw_id`` component hw id, which is initialized by chip and used by chip only ``max_active_inputs`` **max_active_outputs**: maximum number of inputs/outputs that can be active at the same time Note: the number isn't the bit number of **supported_inputs** or **supported_outputs**, but may be less than it, since component may not support enabling all **supported_inputs**/outputs at the same time. ``max_active_outputs`` maximum number of outputs ``supported_inputs`` **supported_outputs**: bitmask of BIT(component->id) for the supported inputs/outputs, describes the possibilities of how a component is linked into a pipeline. ``supported_outputs`` bitmask of supported output componenet ids ``funcs`` chip functions to access HW”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþubhŒ:”…”�”}”(hjþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KMhjúubjã)�”}”(hX@struct komeda_component { struct drm_private_obj obj; struct komeda_pipeline *pipeline; char name[32]; u32 __iomem *reg; u32 id; u32 hw_id; u8 max_active_inputs; u8 max_active_outputs; u32 supported_inputs; u32 supported_outputs; const struct komeda_component_funcs *funcs; };”h]”hX@struct komeda_component { struct drm_private_obj obj; struct komeda_pipeline *pipeline; char name[32]; u32 __iomem *reg; u32 id; u32 hw_id; u8 max_active_inputs; u8 max_active_outputs; u32 supported_inputs; u32 supported_outputs; const struct komeda_component_funcs *funcs; };”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KOhjúubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hj.h]”hŒMembers”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K]hjúubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ'``obj`` treat component as private obj ”h]”(hŒterm”“”)�”}”(hŒ``obj``”h]”hŒliteral”“”)�”}”(hjSh]”hŒobj”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KQhjKubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒtreat component as private obj”h]”hŒtreat component as private obj”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jjh´KQhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jjh´KQhjFubjJ)�”}”(hŒ;``pipeline`` the komeda pipeline this component belongs to ”h]”(jP)�”}”(hŒ ``pipeline``”h]”jV)�”}”(hj�h]”hŒpipeline”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KShjŠubjl)�”}”(hhh]”hÞ)�”}”(hŒ-the komeda pipeline this component belongs to”h]”hŒ-the komeda pipeline this component belongs to”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¥h´KShj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j¥h´KShjFubjJ)�”}”(hŒ``name`` component name ”h]”(jP)�”}”(hŒ``name``”h]”jV)�”}”(hjÉh]”hŒname”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KUhjÃubjl)�”}”(hhh]”hÞ)�”}”(hŒcomponent name”h]”hŒcomponent name”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÞh´KUhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÞh´KUhjFubjJ)�”}”(hŒT``reg`` component register base, which is initialized by chip and used by chip only ”h]”(jP)�”}”(hŒ``reg``”h]”jV)�”}”(hjh]”hŒreg”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KYhjüubjl)�”}”(hhh]”hÞ)�”}”(hŒKcomponent register base, which is initialized by chip and used by chip only”h]”hŒKcomponent register base, which is initialized by chip and used by chip only”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KXhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´KYhjFubjJ)�”}”(hŒ``id`` component id ”h]”(jP)�”}”(hŒ``id``”h]”jV)�”}”(hj<h]”hŒid”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K]hj6ubjl)�”}”(hhh]”hÞ)�”}”(hŒ component id”h]”hŒ component id”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jQh´K]hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jQh´K]hjFubjJ)�”}”(hŒN``hw_id`` component hw id, which is initialized by chip and used by chip only ”h]”(jP)�”}”(hŒ ``hw_id``”h]”jV)�”}”(hjuh]”hŒhw_id”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kahjoubjl)�”}”(hhh]”hÞ)�”}”(hŒCcomponent hw id, which is initialized by chip and used by chip only”h]”hŒCcomponent hw id, which is initialized by chip and used by chip only”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K`hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jŠh´KahjFubjJ)�”}”(hXA``max_active_inputs`` **max_active_outputs**: maximum number of inputs/outputs that can be active at the same time Note: the number isn't the bit number of **supported_inputs** or **supported_outputs**, but may be less than it, since component may not support enabling all **supported_inputs**/outputs at the same time. ”h]”(jP)�”}”(hŒ``max_active_inputs``”h]”jV)�”}”(hj¯h]”hŒmax_active_inputs”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Klhj©ubjl)�”}”(hhh]”(hÞ)�”}”(hŒ**max_active_outputs**:”h]”(j)�”}”(hŒ**max_active_outputs**”h]”hŒmax_active_outputs”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈubhŒ:”…”�”}”(hjÈh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KfhjÅubhÞ)�”}”(hXmaximum number of inputs/outputs that can be active at the same time Note: the number isn't the bit number of **supported_inputs** or **supported_outputs**, but may be less than it, since component may not support enabling all **supported_inputs**/outputs at the same time.”h]”(hŒpmaximum number of inputs/outputs that can be active at the same time Note: the number isn’t the bit number of ”…”�”}”(hjåh²hh³Nh´Nubj)�”}”(hŒ**supported_inputs**”h]”hŒsupported_inputs”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubhŒ or ”…”�”}”(hjåh²hh³Nh´Nubj)�”}”(hŒ**supported_outputs**”h]”hŒsupported_outputs”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubhŒH, but may be less than it, since component may not support enabling all ”…”�”}”(hjåh²hh³Nh´Nubj)�”}”(hŒ**supported_inputs**”h]”hŒsupported_inputs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubhŒ/outputs at the same time.”…”�”}”(hjåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KhhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkhj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÄh´KlhjFubjJ)�”}”(hŒ1``max_active_outputs`` maximum number of outputs ”h]”(jP)�”}”(hŒ``max_active_outputs``”h]”jV)�”}”(hj<h]”hŒmax_active_outputs”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kphj6ubjl)�”}”(hhh]”hÞ)�”}”(hŒmaximum number of outputs”h]”hŒmaximum number of outputs”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jQh´KphjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jQh´KphjFubjJ)�”}”(hŒ·``supported_inputs`` **supported_outputs**: bitmask of BIT(component->id) for the supported inputs/outputs, describes the possibilities of how a component is linked into a pipeline. ”h]”(jP)�”}”(hŒ``supported_inputs``”h]”jV)�”}”(hjuh]”hŒsupported_inputs”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kwhjoubjl)�”}”(hhh]”(hÞ)�”}”(hŒ**supported_outputs**:”h]”(j)�”}”(hŒ**supported_outputs**”h]”hŒsupported_outputs”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽubhŒ:”…”�”}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kshj‹ubhÞ)�”}”(hŒ‰bitmask of BIT(component->id) for the supported inputs/outputs, describes the possibilities of how a component is linked into a pipeline.”h]”hŒ‰bitmask of BIT(component->id) for the supported inputs/outputs, describes the possibilities of how a component is linked into a pipeline.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kuhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jŠh´KwhjFubjJ)�”}”(hŒA``supported_outputs`` bitmask of supported output componenet ids ”h]”(jP)�”}”(hŒ``supported_outputs``”h]”jV)�”}”(hjÌh]”hŒsupported_outputs”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K{hjÆubjl)�”}”(hhh]”hÞ)�”}”(hŒ*bitmask of supported output componenet ids”h]”hŒ*bitmask of supported output componenet ids”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jáh´K{hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jáh´K{hjFubjJ)�”}”(hŒ%``funcs`` chip functions to access HW”h]”(jP)�”}”(hŒ ``funcs``”h]”jV)�”}”(hj h]”hŒfuncs”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K~hjÿubjl)�”}”(hhh]”hÞ)�”}”(hŒchip functions to access HW”h]”hŒchip functions to access HW”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j h´K~hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhjúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjh²hh³jxh´NubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hjH h]”hŒ Description”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K‚hjh²hubhÞ)�”}”(hŒ«struct komeda_component describe the data flow capabilities for how to link a component into the display pipeline. all specified components are subclass of this structure.”h]”hŒ«struct komeda_component describe the data flow capabilities for how to link a component into the display pipeline. all specified components are subclass of this structure.”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KJhjh²hubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒ"komeda_component_output (C struct)”Œc.komeda_component_output”hNt”auh1jghjh²hh³jxh´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_component_output”h]”j…)�”}”(hŒstruct komeda_component_output”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj‚ h²hh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KQubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj‚ h²hh³j“ h´KQubj®)�”}”(hŒkomeda_component_output”h]”j´)�”}”(hj€ h]”hŒkomeda_component_output”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj¢ ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj‚ h²hh³j“ h´KQubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhj~ h²hh³j“ h´KQubah}”(h]”jy ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³j“ h´KQhj{ h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhj{ h²hh³j“ h´KQubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjójÑ jôjÑ jõ‰jö‰j÷‰uh1jyh²hhjh³jxh´Nubjù)�”}”(hX4**Definition**:: struct komeda_component_output { struct komeda_component *component; u8 output_port; }; **Members** ``component`` indicate which component the data comes from ``output_port`` the output port of the :c:type:`komeda_component_output.component `”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ ubhŒ:”…”�”}”(hjÙ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KŠhjÕ ubjã)�”}”(hŒ_struct komeda_component_output { struct komeda_component *component; u8 output_port; };”h]”hŒ_struct komeda_component_output { struct komeda_component *component; u8 output_port; };”…”�”}”hjö sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KŒhjÕ ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hj h]”hŒMembers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K‘hjÕ ubjE)�”}”(hhh]”(jJ)�”}”(hŒ;``component`` indicate which component the data comes from ”h]”(jP)�”}”(hŒ ``component``”h]”jV)�”}”(hj& h]”hŒ component”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj$ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KŽhj ubjl)�”}”(hhh]”hÞ)�”}”(hŒ,indicate which component the data comes from”h]”hŒ,indicate which component the data comes from”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j; h´KŽhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j; h´KŽhj ubjJ)�”}”(hŒl``output_port`` the output port of the :c:type:`komeda_component_output.component `”h]”(jP)�”}”(hŒ``output_port``”h]”jV)�”}”(hj_ h]”hŒ output_port”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj] ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K�hjY ubjl)�”}”(hhh]”hÞ)�”}”(hŒ\the output port of the :c:type:`komeda_component_output.component `”h]”(hŒthe output port of the ”…”�”}”(hjx h²hh³Nh´Nubh)�”}”(hŒE:c:type:`komeda_component_output.component `”h]”jV)�”}”(hj‚ h]”hŒ!komeda_component_output.component”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”(Œxref”jíŒc-type”eh"]”h$]”h&]”uh1jUhj€ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œgpu/komeda-kms”Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbŒ reftarget”Œkomeda_component_output”uh1hh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K‘hjx ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jª h´K‘hju ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjY ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jt h´K�hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhjÕ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjh²hh³jxh´NubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hjÌ h]”hŒ Description”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K”hjh²hubhÞ)�”}”(hŒ™a component has multiple outputs, if want to know where the data comes from, only know the component is not enough, we still need to know its output port”h]”hŒ™a component has multiple outputs, if want to know where the data comes from, only know the component is not enough, we still need to know its output port”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K‡hjh²hubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒ!komeda_component_state (C struct)”Œc.komeda_component_state”hNt”auh1jghjh²hh³jxh´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_component_state”h]”j…)�”}”(hŒstruct komeda_component_state”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj h²hh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KŽubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj h²hh³j h´KŽubj®)�”}”(hŒkomeda_component_state”h]”j´)�”}”(hj h]”hŒkomeda_component_state”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj& ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj h²hh³j h´KŽubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhj h²hh³j h´KŽubah}”(h]”jý ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³j h´KŽhjÿ h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÿ h²hh³j h´KŽubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjójU jôjU jõ‰jö‰j÷‰uh1jyh²hhjh³jxh´Nubjù)�”}”(hX**Definition**:: struct komeda_component_state { struct drm_private_state obj; struct komeda_component *component; union { struct drm_crtc *crtc; struct drm_plane *plane; struct drm_connector *wb_conn; void *binding_user; }; u16 active_inputs; u16 changed_active_inputs; u16 affected_inputs; struct komeda_component_output inputs[KOMEDA_COMPONENT_N_INPUTS]; }; **Members** ``obj`` tracking component_state by drm_atomic_commit ``component`` backpointer to the component ``{unnamed_union}`` anonymous ``crtc`` backpointer for user crtc ``plane`` backpointer for user plane ``wb_conn`` backpointer for user wb_connector ``binding_user`` currently bound user, the user can be **crtc**, **plane** or **wb_conn**, which is valid decided by **component** and **inputs** - Layer: its user always is plane. - compiz/improc/timing_ctrlr: the user is crtc. - wb_layer: wb_conn; - scaler: plane when input is layer, wb_conn if input is compiz. ``active_inputs`` active_inputs is bitmask of **inputs** index - active_inputs = changed_active_inputs | unchanged_active_inputs - affected_inputs = old->active_inputs | new->active_inputs; - disabling_inputs = affected_inputs ^ active_inputs; - changed_inputs = disabling_inputs | changed_active_inputs; NOTE: changed_inputs doesn't include all active_input but only **changed_active_inputs**, and this bitmask can be used in chip level for dirty update. ``changed_active_inputs`` bitmask of the changed **active_inputs** ``affected_inputs`` bitmask for affected **inputs** ``inputs`` the specific inputs[i] only valid on BIT(i) has been set in **active_inputs**, if not the inputs[i] is undefined.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubhŒ:”…”�”}”(hj] h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K›hjY ubjã)�”}”(hX—struct komeda_component_state { struct drm_private_state obj; struct komeda_component *component; union { struct drm_crtc *crtc; struct drm_plane *plane; struct drm_connector *wb_conn; void *binding_user; }; u16 active_inputs; u16 changed_active_inputs; u16 affected_inputs; struct komeda_component_output inputs[KOMEDA_COMPONENT_N_INPUTS]; };”h]”hX—struct komeda_component_state { struct drm_private_state obj; struct komeda_component *component; union { struct drm_crtc *crtc; struct drm_plane *plane; struct drm_connector *wb_conn; void *binding_user; }; u16 active_inputs; u16 changed_active_inputs; u16 affected_inputs; struct komeda_component_output inputs[KOMEDA_COMPONENT_N_INPUTS]; };”…”�”}”hjz sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K�hjY ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hj‹ h]”hŒMembers”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¬hjY ubjE)�”}”(hhh]”(jJ)�”}”(hŒ6``obj`` tracking component_state by drm_atomic_commit ”h]”(jP)�”}”(hŒ``obj``”h]”jV)�”}”(hjª h]”hŒobj”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj¨ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KŸhj¤ ubjl)�”}”(hhh]”hÞ)�”}”(hŒ-tracking component_state by drm_atomic_commit”h]”hŒ-tracking component_state by drm_atomic_commit”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¿ h´KŸhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j¿ h´KŸhj¡ ubjJ)�”}”(hŒ+``component`` backpointer to the component ”h]”(jP)�”}”(hŒ ``component``”h]”jV)�”}”(hjã h]”hŒ component”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¡hjÝ ubjl)�”}”(hhh]”hÞ)�”}”(hŒbackpointer to the component”h]”hŒbackpointer to the component”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jø h´K¡hjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jø h´K¡hj¡ ubjJ)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(jP)�”}”(hŒ``{unnamed_union}``”h]”jV)�”}”(hj h]”hŒ{unnamed_union}”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Khj ubjl)�”}”(hhh]”hÞ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j1 h´Khj2 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j1 h´Khj¡ ubjJ)�”}”(hŒ#``crtc`` backpointer for user crtc ”h]”(jP)�”}”(hŒ``crtc``”h]”jV)�”}”(hjU h]”hŒcrtc”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjS ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K®hjO ubjl)�”}”(hhh]”hÞ)�”}”(hŒbackpointer for user crtc”h]”hŒbackpointer for user crtc”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jj h´K®hjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jj h´K®hj¡ ubjJ)�”}”(hŒ%``plane`` backpointer for user plane ”h]”(jP)�”}”(hŒ ``plane``”h]”jV)�”}”(hjŽ h]”hŒplane”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K°hjˆ ubjl)�”}”(hhh]”hÞ)�”}”(hŒbackpointer for user plane”h]”hŒbackpointer for user plane”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j£ h´K°hj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjˆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j£ h´K°hj¡ ubjJ)�”}”(hŒ.``wb_conn`` backpointer for user wb_connector ”h]”(jP)�”}”(hŒ ``wb_conn``”h]”jV)�”}”(hjÇ h]”hŒwb_conn”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K²hjÁ ubjl)�”}”(hhh]”hÞ)�”}”(hŒ!backpointer for user wb_connector”h]”hŒ!backpointer for user wb_connector”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÜ h´K²hjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÁ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÜ h´K²hj¡ ubjJ)�”}”(hX@``binding_user`` currently bound user, the user can be **crtc**, **plane** or **wb_conn**, which is valid decided by **component** and **inputs** - Layer: its user always is plane. - compiz/improc/timing_ctrlr: the user is crtc. - wb_layer: wb_conn; - scaler: plane when input is layer, wb_conn if input is compiz. ”h]”(jP)�”}”(hŒ``binding_user``”h]”jV)�”}”(hj h]”hŒ binding_user”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjþ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kªhjú ubjl)�”}”(hhh]”(hÞ)�”}”(hŒ€currently bound user, the user can be **crtc**, **plane** or **wb_conn**, which is valid decided by **component** and **inputs**”h]”(hŒ¤tly bound user, the user can be ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ**crtc**”h]”hŒcrtc”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ, ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ **plane**”h]”hŒplane”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ or ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ **wb_conn**”h]”hŒwb_conn”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ, which is valid decided by ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ **component**”h]”hŒ component”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ and ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ **inputs**”h]”hŒinputs”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¤hj ubjz)�”}”(hhh]”(j)�”}”(hŒ Layer: its user always is plane.”h]”hÞ)�”}”(hjƒ h]”hŒ Layer: its user always is plane.”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K§hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj~ ubj)�”}”(hŒ-compiz/improc/timing_ctrlr: the user is crtc.”h]”hÞ)�”}”(hj› h]”hŒ-compiz/improc/timing_ctrlr: the user is crtc.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¨hj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj~ ubj)�”}”(hŒwb_layer: wb_conn;”h]”hÞ)�”}”(hj³ h]”hŒwb_layer: wb_conn;”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K©hj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj~ ubj)�”}”(hŒ?scaler: plane when input is layer, wb_conn if input is compiz. ”h]”hÞ)�”}”(hŒ>scaler: plane when input is layer, wb_conn if input is compiz.”h]”hŒ>scaler: plane when input is layer, wb_conn if input is compiz.”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j h´KªhjÉ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj~ ubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³j’ h´K§hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkhjú ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j h´Kªhj¡ ubjJ)�”}”(hXÎ``active_inputs`` active_inputs is bitmask of **inputs** index - active_inputs = changed_active_inputs | unchanged_active_inputs - affected_inputs = old->active_inputs | new->active_inputs; - disabling_inputs = affected_inputs ^ active_inputs; - changed_inputs = disabling_inputs | changed_active_inputs; NOTE: changed_inputs doesn't include all active_input but only **changed_active_inputs**, and this bitmask can be used in chip level for dirty update. ”h]”(jP)�”}”(hŒ``active_inputs``”h]”jV)�”}”(hjù h]”hŒ active_inputs”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj÷ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KÂhjó ubjl)�”}”(hhh]”(hÞ)�”}”(hŒ,active_inputs is bitmask of **inputs** index”h]”(hŒactive_inputs is bitmask of ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ **inputs**”h]”hŒinputs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ index”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¸hjubjz)�”}”(hhh]”(j)�”}”(hŒ?active_inputs = changed_active_inputs | unchanged_active_inputs”h]”hÞ)�”}”(hj8h]”hŒ?active_inputs = changed_active_inputs | unchanged_active_inputs”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Kºhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj3ubj)�”}”(hŒ:affected_inputs = old->active_inputs | new->active_inputs;”h]”hÞ)�”}”(hjPh]”hŒ:affected_inputs = old->active_inputs | new->active_inputs;”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K»hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj3ubj)�”}”(hŒ3disabling_inputs = affected_inputs ^ active_inputs;”h]”hÞ)�”}”(hjhh]”hŒ3disabling_inputs = affected_inputs ^ active_inputs;”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¼hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj3ubj)�”}”(hŒ;changed_inputs = disabling_inputs | changed_active_inputs; ”h]”hÞ)�”}”(hŒ:changed_inputs = disabling_inputs | changed_active_inputs;”h]”hŒ:changed_inputs = disabling_inputs | changed_active_inputs;”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K½hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj3ubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³jGh´KºhjubhÞ)�”}”(hŒ–NOTE: changed_inputs doesn't include all active_input but only **changed_active_inputs**, and this bitmask can be used in chip level for dirty update.”h]”(hŒANOTE: changed_inputs doesn’t include all active_input but only ”…”�”}”(hj�h²hh³Nh´Nubj)�”}”(hŒ**changed_active_inputs**”h]”hŒchanged_active_inputs”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubhŒ>, and this bitmask can be used in chip level for dirty update.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´K¿hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkhjó ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´KÂhj¡ ubjJ)�”}”(hŒC``changed_active_inputs`` bitmask of the changed **active_inputs** ”h]”(jP)�”}”(hŒ``changed_active_inputs``”h]”jV)�”}”(hjÐh]”hŒchanged_active_inputs”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KÇhjÊubjl)�”}”(hhh]”hÞ)�”}”(hŒ(bitmask of the changed **active_inputs**”h]”(hŒbitmask of the changed ”…”�”}”(hjéh²hh³Nh´Nubj)�”}”(hŒ**active_inputs**”h]”hŒ active_inputs”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jåh´KÇhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jåh´KÇhj¡ ubjJ)�”}”(hŒ4``affected_inputs`` bitmask for affected **inputs** ”h]”(jP)�”}”(hŒ``affected_inputs``”h]”jV)�”}”(hjh]”hŒaffected_inputs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KÉhjubjl)�”}”(hhh]”hÞ)�”}”(hŒbitmask for affected **inputs**”h]”(hŒbitmask for affected ”…”�”}”(hj0h²hh³Nh´Nubj)�”}”(hŒ **inputs**”h]”hŒinputs”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j,h´KÉhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j,h´KÉhj¡ ubjJ)�”}”(hŒ|``inputs`` the specific inputs[i] only valid on BIT(i) has been set in **active_inputs**, if not the inputs[i] is undefined.”•h]”(jP)�”}”(hŒ ``inputs``”h]”jV)�”}”(hj^h]”hŒinputs”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´KÌhjXubjl)�”}”(hhh]”hÞ)�”}”(hŒqthe specific inputs[i] only valid on BIT(i) has been set in **active_inputs**, if not the inputs[i] is undefined.”h]”(hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M¨hj:ubjl)�”}”(hhh]”hÞ)�”}”(hŒ2for split the compiz output to two half data flows”h]”hŒ2for split the compiz output to two half data flows”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jUh´M¨hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jUh´M¨hj§ubjJ)�”}”(hŒ``merger`` merger ”h]”(jP)�”}”(hŒ ``merger``”h]”jV)�”}”(hjyh]”hŒmerger”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Mªhjsubjl)�”}”(hhh]”hÞ)�”}”(hŒmerger”h]”hŒmerger”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŽh´Mªhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jŽh´Mªhj§ubjJ)�”}”(hŒ``wb_layer`` writeback layer ”h]”(jP)�”}”(hŒ ``wb_layer``”h]”jV)�”}”(hj²h]”hŒwb_layer”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M¬hj¬ubjl)�”}”(hhh]”hÞ)�”}”(hŒwriteback layer”h]”hŒwriteback layer”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÇh´M¬hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÇh´M¬hj§ubjJ)�”}”(hŒ ``improc`` post image processor ”h]”(jP)�”}”(hŒ ``improc``”h]”jV)�”}”(hjëh]”hŒimproc”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M®hjåubjl)�”}”(hhh]”hÞ)�”}”(hŒpost image processor”h]”hŒpost image processor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´M®hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´M®hj§ubjJ)�”}”(hŒ``ctrlr`` timing controller ”h]”(jP)�”}”(hŒ ``ctrlr``”h]”jV)�”}”(hj$h]”hŒctrlr”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M°hjubjl)�”}”(hhh]”hÞ)�”}”(hŒtiming controller”h]”hŒtiming controller”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j9h´M°hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j9h´M°hj§ubjJ)�”}”(hŒ*``funcs`` chip private pipeline functions ”h]”(jP)�”}”(hŒ ``funcs``”h]”jV)�”}”(hj]h]”hŒfuncs”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M²hjWubjl)�”}”(hhh]”hÞ)�”}”(hŒchip private pipeline functions”h]”hŒchip private pipeline functions”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jrh´M²hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jrh´M²hj§ubjJ)�”}”(hŒ``of_node`` pipeline dt node ”h]”(jP)�”}”(hŒ ``of_node``”h]”jV)�”}”(hj–h]”hŒof_node”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Mµhj�ubjl)�”}”(hhh]”hÞ)�”}”(hŒpipeline dt node”h]”hŒpipeline dt node”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j«h´Mµhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j«h´Mµhj§ubjJ)�”}”(hŒ(``of_output_port`` pipeline output port ”h]”(jP)�”}”(hŒ``of_output_port``”h]”jV)�”}”(hjÏh]”hŒof_output_port”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M·hjÉubjl)�”}”(hhh]”hÞ)�”}”(hŒpipeline output port”h]”hŒpipeline output port”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jäh´M·hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jäh´M·hj§ubjJ)�”}”(hŒ2``of_output_links`` output connector device nodes ”h]”(jP)�”}”(hŒ``of_output_links``”h]”jV)�”}”(hjh]”hŒof_output_links”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M¹hjubjl)�”}”(hhh]”hÞ)�”}”(hŒoutput connector device nodes”h]”hŒoutput connector device nodes”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´M¹hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´M¹hj§ubjJ)�”}”(hŒ?``dual_link`` true if of_output_links[0] and [1] are both valid”h]”(jP)�”}”(hŒ ``dual_link``”h]”jV)�”}”(hjAh]”hŒ dual_link”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Mºhj;ubjl)�”}”(hhh]”hÞ)�”}”(hŒ1true if of_output_links[0] and [1] are both valid”h]”hŒ1true if of_output_links[0] and [1] are both valid”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M»hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jVh´Mºhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjh²hh³jxh´NubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hj„h]”hŒ Description”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´M¾hjh²hubhÞ)�”}”(hŒIRepresent a complete display pipeline and hold all functional components.”h]”hŒIRepresent a complete display pipeline and hold all functional components.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Mƒhjh²hubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒ komeda_pipeline_state (C struct)”Œc.komeda_pipeline_state”hNt”auh1jghjh²hh³jxh´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_pipeline_state”h]”j…)�”}”(hŒstruct komeda_pipeline_state”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj¾h²hh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´Mˆubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj¾h²hh³jÏh´Mˆubj®)�”}”(hŒkomeda_pipeline_state”h]”j´)�”}”(hj¼h]”hŒkomeda_pipeline_state”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hjÞubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj¾h²hh³jÏh´Mˆubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhjºh²hh³jÏh´Mˆubah}”(h]”jµah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³jÏh´Mˆhj·h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhj·h²hh³jÏh´Mˆubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjój jôj jõ‰jö‰j÷‰uh1jyh²hhjh³jxh´Nubjù)�”}”(hXˆ**Definition**:: struct komeda_pipeline_state { struct drm_private_state obj; struct komeda_pipeline *pipe; struct drm_crtc *crtc; u32 active_comps; }; **Members** ``obj`` tracking pipeline_state by drm_atomic_commit ``pipe`` backpointer to the pipeline ``crtc`` currently bound crtc ``active_comps`` bitmask - BIT(component->id) of active components”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÃhjubjã)�”}”(hŒ–struct komeda_pipeline_state { struct drm_private_state obj; struct komeda_pipeline *pipe; struct drm_crtc *crtc; u32 active_comps; };”h]”hŒ–struct komeda_pipeline_state { struct drm_private_state obj; struct komeda_pipeline *pipe; struct drm_crtc *crtc; u32 active_comps; };”…”�”}”hj2sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÅhjubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hjCh]”hŒMembers”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÌhjubjE)�”}”(hhh]”(jJ)�”}”(hŒ5``obj`` tracking pipeline_state by drm_atomic_commit ”h]”(jP)�”}”(hŒ``obj``”h]”jV)�”}”(hjbh]”hŒobj”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÇhj\ubjl)�”}”(hhh]”hÞ)�”}”(hŒ,tracking pipeline_state by drm_atomic_commit”h]”hŒ,tracking pipeline_state by drm_atomic_commit”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jwh´MÇhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jwh´MÇhjYubjJ)�”}”(hŒ%``pipe`` backpointer to the pipeline ”h]”(jP)�”}”(hŒ``pipe``”h]”jV)�”}”(hj›h]”hŒpipe”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÉhj•ubjl)�”}”(hhh]”hÞ)�”}”(hŒbackpointer to the pipeline”h]”hŒbackpointer to the pipeline”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j°h´MÉhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j°h´MÉhjYubjJ)�”}”(hŒ``crtc`` currently bound crtc ”h]”(jP)�”}”(hŒ``crtc``”h]”jV)�”}”(hjÔh]”hŒcrtc”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MËhjÎubjl)�”}”(hhh]”hÞ)�”}”(hŒcurrently bound crtc”h]”hŒcurrently bound crtc”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jéh´MËhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jéh´MËhjYubjJ)�”}”(hŒB``active_comps`` bitmask - BIT(component->id) of active components”h]”(jP)�”}”(hŒ``active_comps``”h]”jV)�”}”(hj h]”hŒ active_comps”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÍhjubjl)�”}”(hhh]”hÞ)�”}”(hŒ1bitmask - BIT(component->id) of active components”h]”hŒ1bitmask - BIT(component->id) of active components”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÎhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j"h´MÍhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjh²hh³jxh´NubhÞ)�”}”(hŒ**NOTE**”h]”j)�”}”(hjPh]”hŒNOTE”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÑhjh²hubhÞ)�”}”(hŒ�Unlike the pipeline, pipeline_state doesn’t gather any component_state into it. It because all component will be managed by drm_atomic_commit.”h]”hŒ�Unlike the pipeline, pipeline_state doesn’t gather any component_state into it. It because all component will be managed by drm_atomic_commit.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:315: ./drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h”h´MÁhjh²hubeh}”(h]”Œ struct-komeda-pipeline-component”ah ]”h"]”Œ struct komeda_pipeline/component”ah$]”h&]”uh1hÈhjñh²hh³hÇh´M.ubeh}”(h]”Œkomeda-resource-abstraction”ah ]”h"]”Œkomeda resource abstraction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M+ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ%Resource discovery and initialization”h]”hŒ%Resource discovery and initialization”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj…h²hh³hÇh´M?ubhÞ)�”}”(hŒºPipeline and component are used to describe how to handle the pixel data. We still need a @struct komeda_dev to describe the whole view of the device, and the control-abilites of device.”h]”hŒºPipeline and component are used to describe how to handle the pixel data. We still need a @struct komeda_dev to describe the whole view of the device, and the control-abilites of device.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MAhj…h²hubhÞ)�”}”(hX8We have &komeda_dev, &komeda_pipeline, &komeda_component. Now fill devices with pipelines. Since komeda is not for D71 only but also intended for later products, of course we’d better share as much as possible between different products. To achieve this, split the komeda device into two layers: CORE and CHIP.”h]”hX8We have &komeda_dev, &komeda_pipeline, &komeda_component. Now fill devices with pipelines. Since komeda is not for D71 only but also intended for later products, of course we’d better share as much as possible between different products. To achieve this, split the komeda device into two layers: CORE and CHIP.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MEhj…h²hubjz)�”}”(hhh]”(j)�”}”(hŒ4CORE: for common features and capabilities handling.”h]”hÞ)�”}”(hj·h]”hŒ4CORE: for common features and capabilities handling.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MJhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj²h²hh³hÇh´Nubj)�”}”(hŒNCHIP: for register programming and HW specific feature (limitation) handling. ”h]”hÞ)�”}”(hŒMCHIP: for register programming and HW specific feature (limitation) handling.”h]”hŒMCHIP: for register programming and HW specific feature (limitation) handling.”…”�”}”(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´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³hÇh´MJhj…h²hubhÞ)�”}”(hŒ7CORE can access CHIP by three chip function structures:”h]”hŒ7CORE can access CHIP by three chip function structures:”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MMhj…h²hubjz)�”}”(hhh]”(j)�”}”(hŒstruct komeda_dev_funcs”h]”hÞ)�”}”(hjýh]”hŒstruct komeda_dev_funcs”…”�”}”(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´Nubj)�”}”(hŒstruct komeda_pipeline_funcs”h]”hÞ)�”}”(hjh]”hŒstruct komeda_pipeline_funcs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MPhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjøh²hh³hÇh´Nubj)�”}”(hŒstruct komeda_component_funcs ”h]”hÞ)�”}”(hŒstruct komeda_component_funcs”h]”hŒstruct komeda_component_funcs”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MQhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjøh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³hÇh´MOhj…h²hubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒkomeda_dev_funcs (C struct)”Œc.komeda_dev_funcs”hNt”auh1jghj…h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_dev_funcs”h]”j…)�”}”(hŒstruct komeda_dev_funcs”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj]h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj]h²hh³jnh´Kubj®)�”}”(hŒkomeda_dev_funcs”h]”j´)�”}”(hj[h]”hŒkomeda_dev_funcs”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj}ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj]h²hh³jnh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhjYh²hh³jnh´Kubah}”(h]”jSah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³jnh´KhjVh²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhjVh²hh³jnh´Kubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjój¬jôj¬jõ‰jö‰j÷‰uh1jyh²hhj…h³jUh´Nubjù)�”}”(hXn**Definition**:: struct komeda_dev_funcs { void (*init_format_table)(struct komeda_dev *mdev); int (*enum_resources)(struct komeda_dev *mdev); void (*cleanup)(struct komeda_dev *mdev); int (*connect_iommu)(struct komeda_dev *mdev); int (*disconnect_iommu)(struct komeda_dev *mdev); irqreturn_t (*irq_handler)(struct komeda_dev *mdev, struct komeda_events *events); int (*enable_irq)(struct komeda_dev *mdev); int (*disable_irq)(struct komeda_dev *mdev); void (*on_off_vblank)(struct komeda_dev *mdev, int master_pipe, bool on); void (*dump_register)(struct komeda_dev *mdev, struct seq_file *seq); int (*change_opmode)(struct komeda_dev *mdev, int new_mode); void (*flush)(struct komeda_dev *mdev, int master_pipe, u32 active_pipes); }; **Members** ``init_format_table`` initialize :c:type:`komeda_dev->format_table `, this function should be called before the :c:type:`enum_resource <_resource>` ``enum_resources`` for CHIP to report or add pipeline and component resources to CORE ``cleanup`` call to chip to cleanup komeda_dev->chip data ``connect_iommu`` Optional, connect to external iommu ``disconnect_iommu`` Optional, disconnect to external iommu ``irq_handler`` for CORE to get the HW event from the CHIP when interrupt happened. ``enable_irq`` enable irq ``disable_irq`` disable irq ``on_off_vblank`` notify HW to on/off vblank ``dump_register`` Optional, dump registers to seq_file ``change_opmode`` Notify HW to switch to a new display operation mode. ``flush`` Notify the HW to flush or kickoff the update”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhŒ:”…”�”}”(hj´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KYhj°ubjã)�”}”(hXÿstruct komeda_dev_funcs { void (*init_format_table)(struct komeda_dev *mdev); int (*enum_resources)(struct komeda_dev *mdev); void (*cleanup)(struct komeda_dev *mdev); int (*connect_iommu)(struct komeda_dev *mdev); int (*disconnect_iommu)(struct komeda_dev *mdev); irqreturn_t (*irq_handler)(struct komeda_dev *mdev, struct komeda_events *events); int (*enable_irq)(struct komeda_dev *mdev); int (*disable_irq)(struct komeda_dev *mdev); void (*on_off_vblank)(struct komeda_dev *mdev, int master_pipe, bool on); void (*dump_register)(struct komeda_dev *mdev, struct seq_file *seq); int (*change_opmode)(struct komeda_dev *mdev, int new_mode); void (*flush)(struct komeda_dev *mdev, int master_pipe, u32 active_pipes); };”h]”hXÿstruct komeda_dev_funcs { void (*init_format_table)(struct komeda_dev *mdev); int (*enum_resources)(struct komeda_dev *mdev); void (*cleanup)(struct komeda_dev *mdev); int (*connect_iommu)(struct komeda_dev *mdev); int (*disconnect_iommu)(struct komeda_dev *mdev); irqreturn_t (*irq_handler)(struct komeda_dev *mdev, struct komeda_events *events); int (*enable_irq)(struct komeda_dev *mdev); int (*disable_irq)(struct komeda_dev *mdev); void (*on_off_vblank)(struct komeda_dev *mdev, int master_pipe, bool on); void (*dump_register)(struct komeda_dev *mdev, struct seq_file *seq); int (*change_opmode)(struct komeda_dev *mdev, int new_mode); void (*flush)(struct komeda_dev *mdev, int master_pipe, u32 active_pipes); };”…”�”}”hjÑsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K[hj°ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hjâh]”hŒMembers”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kjhj°ubjE)�”}”(hhh]”(jJ)�”}”(hŒ ``init_format_table`` initialize :c:type:`komeda_dev->format_table `, this function should be called before the :c:type:`enum_resource <_resource>` ”h]”(jP)�”}”(hŒ``init_format_table``”h]”jV)�”}”(hjh]”hŒinit_format_table”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K]hjûubjl)�”}”(hhh]”hÞ)�”}”(hŒ‰initialize :c:type:`komeda_dev->format_table `, this function should be called before the :c:type:`enum_resource <_resource>`”h]”(hŒ initialize ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ/:c:type:`komeda_dev->format_table `”h]”jV)�”}”(hj$h]”hŒkomeda_dev->format_table”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhj"ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œ komeda_dev”uh1hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K\hjubhŒ,, this function should be called before the ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`enum_resource <_resource>`”h]”jV)�”}”(hjHh]”hŒ enum_resource”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhjFubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œ _resource”uh1hh³jAh´K\hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jAh´K\hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´K]hjøubjJ)�”}”(hŒV``enum_resources`` for CHIP to report or add pipeline and component resources to CORE ”h]”(jP)�”}”(hŒ``enum_resources``”h]”jV)�”}”(hj}h]”hŒenum_resources”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kchjwubjl)�”}”(hhh]”hÞ)�”}”(hŒBfor CHIP to report or add pipeline and component resources to CORE”h]”hŒBfor CHIP to report or add pipeline and component resources to CORE”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j’h´Kchj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j’h´KchjøubjJ)�”}”(hŒ:``cleanup`` call to chip to cleanup komeda_dev->chip data ”h]”(jP)�”}”(hŒ ``cleanup``”h]”jV)�”}”(hj¶h]”hŒcleanup”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Khhj°ubjl)�”}”(hhh]”hÞ)�”}”(hŒ-call to chip to cleanup komeda_dev->chip data”h]”hŒ-call to chip to cleanup komeda_dev->chip data”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jËh´KhhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jËh´KhhjøubjJ)�”}”(hŒ6``connect_iommu`` Optional, connect to external iommu ”h]”(jP)�”}”(hŒ``connect_iommu``”h]”jV)�”}”(hjïh]”hŒ connect_iommu”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kjhjéubjl)�”}”(hhh]”hÞ)�”}”(hŒ#Optional, connect to external iommu”h]”hŒ#Optional, connect to external iommu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´Kjhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´KjhjøubjJ)�”}”(hŒ<``disconnect_iommu`` Optional, disconnect to external iommu ”h]”(jP)�”}”(hŒ``disconnect_iommu``”h]”jV)�”}”(hj(h]”hŒdisconnect_iommu”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Klhj"ubjl)�”}”(hhh]”hÞ)�”}”(hŒ&Optional, disconnect to external iommu”h]”hŒ&Optional, disconnect to external iommu”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j=h´Klhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j=h´KlhjøubjJ)�”}”(hŒT``irq_handler`` for CORE to get the HW event from the CHIP when interrupt happened. ”h]”(jP)�”}”(hŒ``irq_handler``”h]”jV)�”}”(hjah]”hŒ irq_handler”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kohj[ubjl)�”}”(hhh]”hÞ)�”}”(hŒCfor CORE to get the HW event from the CHIP when interrupt happened.”h]”hŒCfor CORE to get the HW event from the CHIP when interrupt happened.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jvh´Kohjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jvh´KohjøubjJ)�”}”(hŒ``enable_irq`` enable irq ”h]”(jP)�”}”(hŒ``enable_irq``”h]”jV)�”}”(hjšh]”hŒ enable_irq”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kuhj”ubjl)�”}”(hhh]”hÞ)�”}”(hŒ enable irq”h]”hŒ enable irq”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¯h´Kuhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j¯h´KuhjøubjJ)�”}”(hŒ``disable_irq`` disable irq ”h]”(jP)�”}”(hŒ``disable_irq``”h]”jV)�”}”(hjÓh]”hŒ disable_irq”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KwhjÍubjl)�”}”(hhh]”hÞ)�”}”(hŒ disable irq”h]”hŒ disable irq”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jèh´Kwhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jèh´KwhjøubjJ)�”}”(hŒ-``on_off_vblank`` notify HW to on/off vblank ”h]”(jP)�”}”(hŒ``on_off_vblank``”h]”jV)�”}”(hj h]”hŒ on_off_vblank”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kyhjubjl)�”}”(hhh]”hÞ)�”}”(hŒnotify HW to on/off vblank”h]”hŒnotify HW to on/off vblank”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j!h´Kyhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j!h´KyhjøubjJ)�”}”(hŒ7``dump_register`` Optional, dump registers to seq_file ”h]”(jP)�”}”(hŒ``dump_register``”h]”jV)�”}”(hjEh]”hŒ dump_register”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K}hj?ubjl)�”}”(hhh]”hÞ)�”}”(hŒ$Optional, dump registers to seq_file”h]”hŒ$Optional, dump registers to seq_file”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jZh´K}hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jZh´K}hjøubjJ)�”}”(hŒG``change_opmode`` Notify HW to switch to a new display operation mode. ”h]”(jP)�”}”(hŒ``change_opmode``”h]”jV)�”}”(hj~h]”hŒ change_opmode”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K€hjxubjl)�”}”(hhh]”hÞ)�”}”(hŒ4Notify HW to switch to a new display operation mode.”h]”hŒ4Notify HW to switch to a new display operation mode.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j“h´K€hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j“h´K€hjøubjJ)�”}”(hŒ6``flush`` Notify the HW to flush or kickoff the update”h]”(jP)�”}”(hŒ ``flush``”h]”jV)�”}”(hj·h]”hŒflush”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K„hj±ubjl)�”}”(hhh]”hÞ)�”}”(hŒ,Notify the HW to flush or kickoff the update”h]”hŒ,Notify the HW to flush or kickoff the update”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K…hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÌh´K„hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhj°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj…h²hh³jUh´NubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hjúh]”hŒ Description”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kˆhj…h²hubhÞ)�”}”(hŒLSupplied by chip level and returned by the chip entry function xxx_identify,”h]”hŒLSupplied by chip level and returned by the chip entry function xxx_identify,”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KVhj…h²hubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒkomeda_dev (C struct)”Œ c.komeda_dev”hNt”auh1jghj…h²hh³jUh´Nubjz)�”}”(hhh]”(j)�”}”(hŒ komeda_dev”h]”j…)�”}”(hŒstruct komeda_dev”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj4h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K[ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj4h²hh³jEh´K[ubj®)�”}”(hŒ komeda_dev”h]”j´)�”}”(hj2h]”hŒ komeda_dev”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hjTubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj4h²hh³jEh´K[ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhj0h²hh³jEh´K[ubah}”(h]”j+ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³jEh´K[hj-h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhj-h²hh³jEh´K[ubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjójƒjôjƒjõ‰jö‰j÷‰uh1jyh²hhj…h³jUh´Nubjù)�”}”(hXº**Definition**:: struct komeda_dev { struct device *dev; u32 __iomem *reg_base; struct komeda_chip_info chip; struct komeda_format_caps_table fmt_tbl; struct clk *aclk; int irq; struct mutex lock; u32 dpmode; int n_pipelines; struct komeda_pipeline *pipelines[KOMEDA_MAX_PIPELINES]; const struct komeda_dev_funcs *funcs; void *chip_data; struct iommu_domain *iommu; struct dentry *debugfs_root; u16 err_verbosity; #define KOMEDA_DEV_PRINT_ERR_EVENTS BIT(0); #define KOMEDA_DEV_PRINT_WARN_EVENTS BIT(1); #define KOMEDA_DEV_PRINT_INFO_EVENTS BIT(2); #define KOMEDA_DEV_PRINT_DUMP_STATE_ON_EVENT BIT(8); #define KOMEDA_DEV_PRINT_DISABLE_RATELIMIT BIT(12); }; **Members** ``dev`` the base device structure ``reg_base`` the base address of komeda io space ``chip`` the basic chip information ``fmt_tbl`` initialized by :c:type:`komeda_dev_funcs->init_format_table ` ``aclk`` HW main engine clk ``irq`` irq number ``lock`` used to protect dpmode ``dpmode`` current display mode ``n_pipelines`` the number of pipe in **pipelines** ``pipelines`` the komeda pipelines ``funcs`` chip funcs to access to HW ``chip_data`` chip data will be added by :c:type:`komeda_dev_funcs.enum_resources\(\) ` and destroyed by :c:type:`komeda_dev_funcs.cleanup\(\) ` ``iommu`` iommu domain ``debugfs_root`` root directory of komeda debugfs ``err_verbosity`` bitmask for how much extra info to print on error See KOMEDA_DEV_* macros for details. Low byte contains the debug level categories, the high byte contains extra debug options.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubhŒ:”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KŸhj‡ubjã)�”}”(hX¼struct komeda_dev { struct device *dev; u32 __iomem *reg_base; struct komeda_chip_info chip; struct komeda_format_caps_table fmt_tbl; struct clk *aclk; int irq; struct mutex lock; u32 dpmode; int n_pipelines; struct komeda_pipeline *pipelines[KOMEDA_MAX_PIPELINES]; const struct komeda_dev_funcs *funcs; void *chip_data; struct iommu_domain *iommu; struct dentry *debugfs_root; u16 err_verbosity; #define KOMEDA_DEV_PRINT_ERR_EVENTS BIT(0); #define KOMEDA_DEV_PRINT_WARN_EVENTS BIT(1); #define KOMEDA_DEV_PRINT_INFO_EVENTS BIT(2); #define KOMEDA_DEV_PRINT_DUMP_STATE_ON_EVENT BIT(8); #define KOMEDA_DEV_PRINT_DISABLE_RATELIMIT BIT(12); };”h]”hX¼struct komeda_dev { struct device *dev; u32 __iomem *reg_base; struct komeda_chip_info chip; struct komeda_format_caps_table fmt_tbl; struct clk *aclk; int irq; struct mutex lock; u32 dpmode; int n_pipelines; struct komeda_pipeline *pipelines[KOMEDA_MAX_PIPELINES]; const struct komeda_dev_funcs *funcs; void *chip_data; struct iommu_domain *iommu; struct dentry *debugfs_root; u16 err_verbosity; #define KOMEDA_DEV_PRINT_ERR_EVENTS BIT(0); #define KOMEDA_DEV_PRINT_WARN_EVENTS BIT(1); #define KOMEDA_DEV_PRINT_INFO_EVENTS BIT(2); #define KOMEDA_DEV_PRINT_DUMP_STATE_ON_EVENT BIT(8); #define KOMEDA_DEV_PRINT_DISABLE_RATELIMIT BIT(12); };”…”�”}”hj¨sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¡hj‡ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hj¹h]”hŒMembers”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¸hj‡ubjE)�”}”(hhh]”(jJ)�”}”(hŒ"``dev`` the base device structure ”h]”(jP)�”}”(hŒ``dev``”h]”jV)�”}”(hjØh]”hŒdev”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K£hjÒubjl)�”}”(hhh]”hÞ)�”}”(hŒthe base device structure”h]”hŒthe base device structure”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jíh´K£hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jíh´K£hjÏubjJ)�”}”(hŒ1``reg_base`` the base address of komeda io space ”h]”(jP)�”}”(hŒ ``reg_base``”h]”jV)�”}”(hjh]”hŒreg_base”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¥hj ubjl)�”}”(hhh]”hÞ)�”}”(hŒ#the base address of komeda io space”h]”hŒ#the base address of komeda io space”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j&h´K¥hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j&h´K¥hjÏubjJ)�”}”(hŒ$``chip`` the basic chip information ”h]”(jP)�”}”(hŒ``chip``”h]”jV)�”}”(hjJh]”hŒchip”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¨hjDubjl)�”}”(hhh]”hÞ)�”}”(hŒthe basic chip information”h]”hŒthe basic chip information”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j_h´K¨hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j_h´K¨hjÏubjJ)�”}”(hŒ\``fmt_tbl`` initialized by :c:type:`komeda_dev_funcs->init_format_table ` ”h]”(jP)�”}”(hŒ ``fmt_tbl``”h]”jV)�”}”(hjƒh]”hŒfmt_tbl”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kªhj}ubjl)�”}”(hhh]”hÞ)�”}”(hŒOinitialized by :c:type:`komeda_dev_funcs->init_format_table `”h]”(hŒinitialized by ”…”�”}”(hjœh²hh³Nh´Nubh)�”}”(hŒ@:c:type:`komeda_dev_funcs->init_format_table `”h]”jV)�”}”(hj¦h]”hŒ#komeda_dev_funcs->init_format_table”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhj¤ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œkomeda_dev_funcs”uh1hh³j˜h´Kªhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j˜h´Kªhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j˜h´KªhjÏubjJ)�”}”(hŒ``aclk`` HW main engine clk ”h]”(jP)�”}”(hŒ``aclk``”h]”jV)�”}”(hjÛh]”hŒaclk”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¬hjÕubjl)�”}”(hhh]”hÞ)�”}”(hŒHW main engine clk”h]”hŒHW main engine clk”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jðh´K¬hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jðh´K¬hjÏubjJ)�”}”(hŒ``irq`` irq number ”h]”(jP)�”}”(hŒ``irq``”h]”jV)�”}”(hjh]”hŒirq”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¯hjubjl)�”}”(hhh]”hÞ)�”}”(hŒ irq number”h]”hŒ irq number”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j)h´K¯hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j)h´K¯hjÏubjJ)�”}”(hŒ ``lock`` used to protect dpmode ”h]”(jP)�”}”(hŒ``lock``”h]”jV)�”}”(hjMh]”hŒlock”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K²hjGubjl)�”}”(hhh]”hÞ)�”}”(hŒused to protect dpmode”h]”hŒused to protect dpmode”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jbh´K²hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jbh´K²hjÏubjJ)�”}”(hŒ ``dpmode`` current display mode ”h]”(jP)�”}”(hŒ ``dpmode``”h]”jV)�”}”(hj†h]”hŒdpmode”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K´hj€ubjl)�”}”(hhh]”hÞ)�”}”(hŒcurrent display mode”h]”hŒcurrent display mode”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j›h´K´hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j›h´K´hjÏubjJ)�”}”(hŒ4``n_pipelines`` the number of pipe in **pipelines** ”h]”(jP)�”}”(hŒ``n_pipelines``”h]”jV)�”}”(hj¿h]”hŒ n_pipelines”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K·hj¹ubjl)�”}”(hhh]”hÞ)�”}”(hŒ#the number of pipe in **pipelines**”h]”(hŒthe number of pipe in ”…”�”}”(hjØh²hh³Nh´Nubj)�”}”(hŒ **pipelines**”h]”hŒ pipelines”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÔh´K·hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÔh´K·hjÏubjJ)�”}”(hŒ#``pipelines`` the komeda pipelines ”h]”(jP)�”}”(hŒ ``pipelines``”h]”jV)�”}”(hjh]”hŒ pipelines”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¹hjubjl)�”}”(hhh]”hÞ)�”}”(hŒthe komeda pipelines”h]”hŒthe komeda pipelines”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´K¹hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jh´K¹hjÏubjJ)�”}”(hŒ%``funcs`` chip funcs to access to HW ”h]”(jP)�”}”(hŒ ``funcs``”h]”jV)�”}”(hj?h]”hŒfuncs”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¼hj9ubjl)�”}”(hhh]”hÞ)�”}”(hŒchip funcs to access to HW”h]”hŒchip funcs to access to HW”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jTh´K¼hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jTh´K¼hjÏubjJ)�”}”(hŒµ``chip_data`` chip data will be added by :c:type:`komeda_dev_funcs.enum_resources\(\) ` and destroyed by :c:type:`komeda_dev_funcs.cleanup\(\) ` ”h]”(jP)�”}”(hŒ ``chip_data``”h]”jV)�”}”(hjxh]”hŒ chip_data”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KÀhjrubjl)�”}”(hhh]”hÞ)�”}”(hŒ¦chip data will be added by :c:type:`komeda_dev_funcs.enum_resources\(\) ` and destroyed by :c:type:`komeda_dev_funcs.cleanup\(\) `”h]”(hŒchip data will be added by ”…”�”}”(hj‘h²hh³Nh´Nubh)�”}”(hŒ@:c:type:`komeda_dev_funcs.enum_resources\(\) `”h]”jV)�”}”(hj›h]”hŒ!komeda_dev_funcs.enum_resources()”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhj™ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œkomeda_dev_funcs”uh1hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´K¿hj‘ubhŒ and destroyed by ”…”�”}”(hj‘h²hh³Nh´Nubh)�”}”(hŒ9:c:type:`komeda_dev_funcs.cleanup\(\) `”h]”jV)�”}”(hj¿h]”hŒkomeda_dev_funcs.cleanup()”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhj½ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œkomeda_dev_funcs”uh1hh³j¸h´K¿hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¸h´K¿hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j�h´KÀhjÏubjJ)�”}”(hŒ``iommu`` iommu domain ”h]”(jP)�”}”(hŒ ``iommu``”h]”jV)�”}”(hjôh]”hŒiommu”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KÆhjîubjl)�”}”(hhh]”hÞ)�”}”(hŒ iommu domain”h]”hŒ iommu domain”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j h´KÆhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j h´KÆhjÏubjJ)�”}”(hŒ2``debugfs_root`` root directory of komeda debugfs ”h]”(jP)�”}”(hŒ``debugfs_root``”h]”jV)�”}”(hj- h]”hŒ debugfs_root”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KÉhj' ubjl)�”}”(hhh]”hÞ)�”}”(hŒ root directory of komeda debugfs”h]”hŒ root directory of komeda debugfs”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jB h´KÉhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj' ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jB h´KÉhjÏubjJ)�”}”(hŒÃ``err_verbosity`` bitmask for how much extra info to print on error See KOMEDA_DEV_* macros for details. Low byte contains the debug level categories, the high byte contains extra debug options.”h]”(jP)�”}”(hŒ``err_verbosity``”h]”jV)�”}”(hjf h]”hŒ err_verbosity”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjd ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KÎhj` ubjl)�”}”(hhh]”(hÞ)�”}”(hŒ1bitmask for how much extra info to print on error”h]”hŒ1bitmask for how much extra info to print on error”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KÌhj| ubhÞ)�”}”(hŒ~See KOMEDA_DEV_* macros for details. Low byte contains the debug level categories, the high byte contains extra debug options.”h]”hŒ~See KOMEDA_DEV_* macros for details. Low byte contains the debug level categories, the high byte contains extra debug options.”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j{ h´KÎhj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkhj` ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j{ h´KÎhjÏube•h}”(h]”h ]”h"]”h$]”h&]”uh1jDhj‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj…h²hh³jUh´NubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hj· h]”hŒ Description”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´KÒhj…h²hubhÞ)�”}”(hŒ«Pipeline and component are used to describe how to handle the pixel data. komeda_device is for describing the whole view of the device, and the control-abilites of device.”h]”hŒ«Pipeline and component are used to describe how to handle the pixel data. komeda_device is for describing the whole view of the device, and the control-abilites of device.”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:339: ./drivers/gpu/drm/arm/display/komeda/komeda_dev.h”h´Kœhj…h²hubeh}”(h]”Œ%resource-discovery-and-initialization”ah ]”h"]”Œ%resource discovery and initialization”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M?ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒFormat handling”h]”hŒFormat handling”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjä h²hh³hÇh´MWubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒkomeda_format_caps (C struct)”Œc.komeda_format_caps”hNt”auh1jghjä h²hh³Nh´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_format_caps”h]”j…)�”}”(hŒstruct komeda_format_caps”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj !h²hh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´Kubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj !h²hh³j!h´Kubj®)�”}”(hŒkomeda_format_caps”h]”j´)�”}”(hj!h]”hŒkomeda_format_caps”…”�”}”(hj.!h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj*!ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj !h²hh³j!h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhj!h²hh³j!h´Kubah}”(h]”j!ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³j!h´Khj!h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhj!h²hh³j!h´Kubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjójY!jôjY!jõ‰jö‰j÷‰uh1jyh²hhjä h³Nh´Nubjù)�”}”(hX**Definition**:: struct komeda_format_caps { u32 hw_id; u32 fourcc; u32 supported_layer_types; u32 supported_rots; u32 supported_afbc_layouts; u64 supported_afbc_features; }; **Members** ``hw_id`` hw format id, hw specific value. ``fourcc`` drm fourcc format. ``supported_layer_types`` indicate which layer supports this format ``supported_rots`` allowed rotations for this format ``supported_afbc_layouts`` supported afbc layerout ``supported_afbc_features`` supported afbc features”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hje!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja!ubhŒ:”…”�”}”(hja!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K.hj]!ubjã)�”}”(hŒµstruct komeda_format_caps { u32 hw_id; u32 fourcc; u32 supported_layer_types; u32 supported_rots; u32 supported_afbc_layouts; u64 supported_afbc_features; };”h]”hŒµstruct komeda_format_caps { u32 hw_id; u32 fourcc; u32 supported_layer_types; u32 supported_rots; u32 supported_afbc_layouts; u64 supported_afbc_features; };”…”�”}”hj~!sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K0hj]!ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hj�!h]”hŒMembers”…”�”}”(hj‘!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K9hj]!ubjE)�”}”(hhh]”(jJ)�”}”(hŒ+``hw_id`` hw format id, hw specific value. ”h]”(jP)�”}”(hŒ ``hw_id``”h]”jV)�”}”(hj®!h]”hŒhw_id”…”�”}”(hj°!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj¬!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K4hj¨!ubjl)�”}”(hhh]”hÞ)�”}”(hŒ hw format id, hw specific value.”h]”hŒ hw format id, hw specific value.”…”�”}”(hjÇ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÃ!h´K4hjÄ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj¨!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÃ!h´K4hj¥!ubjJ)�”}”(hŒ``fourcc`` drm fourcc format. ”h]”(jP)�”}”(hŒ ``fourcc``”h]”jV)�”}”(hjç!h]”hŒfourcc”…”�”}”(hjé!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjå!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K5hjá!ubjl)�”}”(hhh]”hÞ)�”}”(hŒdrm fourcc format.”h]”hŒdrm fourcc format.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jü!h´K5hjý!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjá!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jü!h´K5hj¥!ubjJ)�”}”(hŒD``supported_layer_types`` indicate which layer supports this format ”h]”(jP)�”}”(hŒ``supported_layer_types``”h]”jV)�”}”(hj "h]”hŒsupported_layer_types”…”�”}”(hj""h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K6hj"ubjl)�”}”(hhh]”hÞ)�”}”(hŒ)indicate which layer supports this format”h]”hŒ)indicate which layer supports this format”…”�”}”(hj9"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j5"h´K6hj6"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j5"h´K6hj¥!ubjJ)�”}”(hŒ5``supported_rots`` allowed rotations for this format ”h]”(jP)�”}”(hŒ``supported_rots``”h]”jV)�”}”(hjY"h]”hŒsupported_rots”…”�”}”(hj["h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjW"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K7hjS"ubjl)�”}”(hhh]”hÞ)�”}”(hŒ!allowed rotations for this format”h]”hŒ!allowed rotations for this format”…”�”}”(hjr"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jn"h´K7hjo"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjS"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jn"h´K7hj¥!ubjJ)�”}”(hŒ3``supported_afbc_layouts`` supported afbc layerout ”h]”(jP)�”}”(hŒ``supported_afbc_layouts``”h]”jV)�”}”(hj’"h]”hŒsupported_afbc_layouts”…”�”}”(hj”"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj�"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K8hjŒ"ubjl)�”}”(hhh]”hÞ)�”}”(hŒsupported afbc layerout”h]”hŒsupported afbc layerout”…”�”}”(hj«"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j§"h´K8hj¨"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjŒ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j§"h´K8hj¥!ubjJ)�”}”(hŒ3``supported_afbc_features`` supported afbc features”h]”(jP)�”}”(hŒ``supported_afbc_features``”h]”jV)�”}”(hjË"h]”hŒsupported_afbc_features”…”�”}”(hjÍ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÉ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K8hjÅ"ubjl)�”}”(hhh]”hÞ)�”}”(hŒsupported afbc features”h]”hŒsupported afbc features”…”�”}”(hjä"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´K9hjá"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÅ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jà"h´K8hj¥!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhj]!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjä h²hh³Nh´NubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hj#h]”hŒ Description”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œw/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:345: ./drivers/gpu/drm/arm/display/komeda/komeda_format_caps.h”h´KSo, one KMS-Obj represents a sub-pipeline of komeda resources.”h]”hŒ>So, one KMS-Obj represents a sub-pipeline of komeda resources.”…”�”}”(hj»'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mihjœ'h²hubjz)�”}”(hhh]”(j)�”}”(hŒPlane: `Layer(input) pipeline`_”h]”hÞ)�”}”(hjÎ'h]”(hŒPlane: ”…”�”}”(hjÐ'h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ`Layer(input) pipeline`_”h]”hŒLayer(input) pipeline”…”�”}”(hjÙ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒLayer(input) pipeline”Œrefid”juh1j×'hjÐ'Œresolved”Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MkhjÌ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÉ'h²hh³hÇh´Nubj)�”}”(hŒ+Wb_connector: `Writeback(output) pipeline`_”h]”hÞ)�”}”(hjù'h]”(hŒWb_connector: ”…”�”}”(hjû'h²hh³Nh´NubjØ')�”}”(hŒ`Writeback(output) pipeline`_”h]”hŒWriteback(output) pipeline”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒWriteback(output) pipeline”jé'j�uh1j×'hjû'jê'Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mlhj÷'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÉ'h²hh³hÇh´Nubj)�”}”(hŒ!Crtc: `Display output pipeline`_ ”h]”hÞ)�”}”(hŒ Crtc: `Display output pipeline`_”h]”(hŒCrtc: ”…”�”}”(hj"(h²hh³Nh´NubjØ')�”}”(hŒ`Display output pipeline`_”h]”hŒDisplay output pipeline”…”�”}”(hj*(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒDisplay output pipeline”jé'jÛuh1j×'hj"(jê'Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mmhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÉ'h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³hÇh´Mkhjœ'h²hubhÞ)�”}”(hXSo, for komeda, we treat KMS crtc/plane/connector as users of pipeline and component, and at any one time a pipeline/component only can be used by one user. And pipeline/component will be treated as private object of DRM-KMS; the state will be managed by drm_atomic_commit as well.”h]”hXSo, for komeda, we treat KMS crtc/plane/connector as users of pipeline and component, and at any one time a pipeline/component only can be used by one user. And pipeline/component will be treated as private object of DRM-KMS; the state will be managed by drm_atomic_commit as well.”…”�”}”(hjL(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mohjœ'h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ)How to map plane to Layer(input) pipeline”h]”hŒ)How to map plane to Layer(input) pipeline”…”�”}”(hj](h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjZ(h²hh³hÇh´MuubhÞ)�”}”(hŒxKomeda has multiple Layer input pipelines, see: - `Single pipeline data flow`_ - `Dual pipeline with Slave enabled`_”h]”(hŒ4Komeda has multiple Layer input pipelines, see: - ”…”�”}”(hjk(h²hh³Nh´NubjØ')�”}”(hŒ`Single pipeline data flow`_”h]”hŒSingle pipeline data flow”…”�”}”(hjs(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒSingle pipeline data flow”jé'juh1j×'hjk(jê'KubhŒ - ”…”�”}”(hjk(h²hh³Nh´NubjØ')�”}”(hŒ#`Dual pipeline with Slave enabled`_”h]”hŒ Dual pipeline with Slave enabled”…”�”}”(hj‡(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Dual pipeline with Slave enabled”jé'jduh1j×'hjk(jê'Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MwhjZ(h²hubhÞ)�”}”(hŒcThe easiest way is binding a plane to a fixed Layer pipeline, but consider the komeda capabilities:”h]”hŒcThe easiest way is binding a plane to a fixed Layer pipeline, but consider the komeda capabilities:”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M{hjZ(h²hubjz)�”}”(hhh]”(j)�”}”(hXÂLayer Split, See `Layer(input) pipeline`_ Layer_Split is quite complicated feature, which splits a big image into two parts and handles it by two layers and two scalers individually. But it imports an edge problem or effect in the middle of the image after the split. To avoid such a problem, it needs a complicated Split calculation and some special configurations to the layer and scaler. We'd better hide such HW related complexity to user mode. ”h]”(hÞ)�”}”(hŒ)Layer Split, See `Layer(input) pipeline`_”h]”(hŒLayer Split, See ”…”�”}”(hj²(h²hh³Nh´NubjØ')�”}”(hŒ`Layer(input) pipeline`_”h]”hŒLayer(input) pipeline”…”�”}”(hjº(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒLayer(input) pipeline”jé'juh1j×'hj²(jê'Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M~hj®(ubhÞ)�”}”(hX–Layer_Split is quite complicated feature, which splits a big image into two parts and handles it by two layers and two scalers individually. But it imports an edge problem or effect in the middle of the image after the split. To avoid such a problem, it needs a complicated Split calculation and some special configurations to the layer and scaler. We'd better hide such HW related complexity to user mode.”h]”hX˜Layer_Split is quite complicated feature, which splits a big image into two parts and handles it by two layers and two scalers individually. But it imports an edge problem or effect in the middle of the image after the split. To avoid such a problem, it needs a complicated Split calculation and some special configurations to the layer and scaler. We’d better hide such HW related complexity to user mode.”…”�”}”(hjÐ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M€hj®(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~hj«(h²hh³hÇh´Nubj)�”}”(hX?Slave pipeline, See `Dual pipeline with Slave enabled`_ Since the compiz component doesn't output alpha value, the slave pipeline only can be used for bottom layers composition. The komeda driver wants to hide this limitation to the user. The way to do this is to pick a suitable Layer according to plane_state->zpos. ”h]”(hÞ)�”}”(hŒ7Slave pipeline, See `Dual pipeline with Slave enabled`_”h]”(hŒSlave pipeline, See ”…”�”}”(hjè(h²hh³Nh´NubjØ')�”}”(hŒ#`Dual pipeline with Slave enabled`_”h]”hŒ Dual pipeline with Slave enabled”…”�”}”(hjð(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Dual pipeline with Slave enabled”jé'jduh1j×'hjè(jê'Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M‡hjä(ubhÞ)�”}”(hXSince the compiz component doesn't output alpha value, the slave pipeline only can be used for bottom layers composition. The komeda driver wants to hide this limitation to the user. The way to do this is to pick a suitable Layer according to plane_state->zpos.”h]”hXSince the compiz component doesn’t output alpha value, the slave pipeline only can be used for bottom layers composition. The komeda driver wants to hide this limitation to the user. The way to do this is to pick a suitable Layer according to plane_state->zpos.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M‰hjä(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~hj«(h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÄjÅuh1jyh³hÇh´M~hjZ(h²hubhÞ)�”}”(hŒÈSo for komeda, the KMS-plane doesn't represent a fixed komeda layer pipeline, but multiple Layers with same capabilities. Komeda will select one or more Layers to fit the requirement of one KMS-plane.”h]”hŒÊSo for komeda, the KMS-plane doesn’t represent a fixed komeda layer pipeline, but multiple Layers with same capabilities. Komeda will select one or more Layers to fit the requirement of one KMS-plane.”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MŽhjZ(h²hubeh}”(h]”Œ(how-to-map-plane-to-layer-input-pipeline”ah ]”h"]”Œ)how to map plane to layer(input) pipeline”ah$]”h&]”uh1hÈhjœ'h²hh³hÇh´MuubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ-Make component/pipeline to be drm_private_obj”h]”hŒ-Make component/pipeline to be drm_private_obj”…”�”}”(hj9)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj6)h²hh³hÇh´M“ubhÞ)�”}”(hŒVAdd :c:type:`drm_private_obj` to :c:type:`komeda_component`, :c:type:`komeda_pipeline`”h]”(hŒAdd ”…”�”}”(hjG)h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_private_obj`”h]”jV)�”}”(hjQ)h]”hŒdrm_private_obj”…”�”}”(hjS)h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhjO)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j  j¤ j¨ Œdrm_private_obj”uh1hh³hÇh´M•hjG)ubhŒ to ”…”�”}”(hjG)h²hh³Nh´Nubh)�”}”(hŒ:c:type:`komeda_component`”h]”jV)�”}”(hjt)h]”hŒkomeda_component”…”�”}”(hjv)h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhjr)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j  j¤ j¨ Œkomeda_component”uh1hh³hÇh´M•hjG)ubhŒ, ”…”�”}”(hjG)h²hh³Nh´Nubh)�”}”(hŒ:c:type:`komeda_pipeline`”h]”jV)�”}”(hj—)h]”hŒkomeda_pipeline”…”�”}”(hj™)h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhj•)ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j  j¤ j¨ Œkomeda_pipeline”uh1hh³hÇh´M•hjG)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M•hj6)h²hubjã)�”}”(hŒ‡struct komeda_component { struct drm_private_obj obj; ... } struct komeda_pipeline { struct drm_private_obj obj; ... }”h]”hŒ‡struct komeda_component { struct drm_private_obj obj; ... } struct komeda_pipeline { struct drm_private_obj obj; ... }”…”�”}”hjº)sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”jíŒhighlight_args”}”uh1jâh³hÇh´M—hj6)h²hubeh}”(h]”Œ-make-component-pipeline-to-be-drm-private-obj”ah ]”h"]”Œ-make component/pipeline to be drm_private_obj”ah$]”h&]”uh1hÈhjœ'h²hh³hÇh´M“ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ` and :c:type:`komeda_plane.layer `.right”h]”(hŒWThe plane_state can be split into two data flow (left/right) and handled by two layers ”…”�”}”(hj¿-h²hh³Nh´Nubh)�”}”(hŒ+:c:type:`komeda_plane.layer `”h]”jV)�”}”(hjÉ-h]”hŒkomeda_plane.layer”…”�”}”(hjË-h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhjÇ-ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œ komeda_plane”uh1hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K&hj¿-ubhŒ and ”…”�”}”(hj¿-h²hh³Nh´Nubh)�”}”(hŒ+:c:type:`komeda_plane.layer `”h]”jV)�”}”(hjí-h]”hŒkomeda_plane.layer”…”�”}”(hjï-h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhjë-ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j  j¤ j¨ Œ komeda_plane”uh1hh³jæ-h´K&hj¿-ubhŒ.right”…”�”}”(hj¿-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jæ-h´K&hj¥*h²hubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒkomeda_wb_connector (C struct)”Œc.komeda_wb_connector”hNt”auh1jghj¥*h²hh³Nh´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_wb_connector”h]”j…)�”}”(hŒstruct komeda_wb_connector”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj-.h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj).h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K,ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;.h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj).h²hh³j:.h´K,ubj®)�”}”(hŒkomeda_wb_connector”h]”j´)�”}”(hj'.h]”hŒkomeda_wb_connector”…”�”}”(hjM.h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hjI.ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj).h²hh³j:.h´K,ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhj%.h²hh³j:.h´K,ubah}”(h]”j .ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³j:.h´K,hj".h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhj".h²hh³j:.h´K,ubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjójx.jôjx.jõ‰jö‰j÷‰uh1jyh²hhj¥*h³Nh´Nubjù)�”}”(hX**Definition**:: struct komeda_wb_connector { struct drm_writeback_connector base; struct komeda_layer *wb_layer; }; **Members** ``base`` :c:type:`drm_writeback_connector` ``wb_layer`` represents associated writeback pipeline of komeda”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj„.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€.ubhŒ:”…”�”}”(hj€.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K9hj|.ubjã)�”}”(hŒkstruct komeda_wb_connector { struct drm_writeback_connector base; struct komeda_layer *wb_layer; };”h]”hŒkstruct komeda_wb_connector { struct drm_writeback_connector base; struct komeda_layer *wb_layer; };”…”�”}”hj�.sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K;hj|.ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hj®.h]”hŒMembers”…”�”}”(hj°.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K@hj|.ubjE)�”}”(hhh]”(jJ)�”}”(hŒ+``base`` :c:type:`drm_writeback_connector` ”h]”(jP)�”}”(hŒ``base``”h]”jV)�”}”(hjÍ.h]”hŒbase”…”�”}”(hjÏ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjË.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K9hjÇ.ubjl)�”}”(hhh]”hÞ)�”}”(hŒ!:c:type:`drm_writeback_connector`”h]”h)�”}”(hjè.h]”jV)�”}”(hjè.h]”hŒdrm_writeback_connector”…”�”}”(hjí.h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhjê.ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j  j¤ j¨ Œdrm_writeback_connector”uh1hh³jâ.h´K9hjæ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jâ.h´K9hjã.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÇ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jâ.h´K9hjÄ.ubjJ)�”}”(hŒ?``wb_layer`` represents associated writeback pipeline of komeda”h]”(jP)�”}”(hŒ ``wb_layer``”h]”jV)�”}”(hj /h]”hŒwb_layer”…”�”}”(hj"/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K;hj/ubjl)�”}”(hhh]”hÞ)�”}”(hŒ2represents associated writeback pipeline of komeda”h]”hŒ2represents associated writeback pipeline of komeda”…”�”}”(hj9/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj"1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j=1h´KShj0ubjJ)�”}”(hŒ;``disable_done`` this flip_done is for tracing the disable ”h]”(jP)�”}”(hŒ``disable_done``”h]”jV)�”}”(hja1h]”hŒ disable_done”…”�”}”(hjc1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj_1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KVhj[1ubjl)�”}”(hhh]”hÞ)�”}”(hŒ)this flip_done is for tracing the disable”h]”hŒ)this flip_done is for tracing the disable”…”�”}”(hjz1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jv1h´KVhjw1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj[1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jv1h´KVhj0ubjJ)�”}”(hŒ.``encoder`` encoder at the end of the pipeline”h]”(jP)�”}”(hŒ ``encoder``”h]”jV)�”}”(hjš1h]”hŒencoder”…”�”}”(hjœ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj˜1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KXhj”1ubjl)�”}”(hhh]”hÞ)�”}”(hŒ"encoder at the end of the pipeline”h]”hŒ"encoder at the end of the pipeline”…”�”}”(hj³1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”u•>eh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KYhj°1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj”1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j¯1h´KXhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhjÉ/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj¥*h²hh³Nh´Nubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒkomeda_crtc_state (C struct)”Œc.komeda_crtc_state”hNt”auh1jghj¥*h²hh³Nh´Nubjz)�”}”(hhh]”(j)�”}”(hŒkomeda_crtc_state”h]”j…)�”}”(hŒstruct komeda_crtc_state”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hjô1h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhjð1h²hh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´K_ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhjð1h²hh³j2h´K_ubj®)�”}”(hŒkomeda_crtc_state”h]”j´)�”}”(hjî1h]”hŒkomeda_crtc_state”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj2ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hjð1h²hh³j2h´K_ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhjì1h²hh³j2h´K_ubah}”(h]”jç1ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³j2h´K_hjé1h²hubjà)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jßhjé1h²hh³j2h´K_ubeh}”(h]”h ]”(jíŒstruct”eh"]”h$]”h&]”jòjíjój?2jôj?2jõ‰jö‰j÷‰uh1jyh²hhj¥*h³Nh´Nubjù)�”}”(hXØ**Definition**:: struct komeda_crtc_state { struct drm_crtc_state base; u32 affected_pipes; u32 active_pipes; u64 clock_ratio; u32 max_slave_zorder; }; **Members** ``base`` :c:type:`drm_crtc_state` ``affected_pipes`` the affected pipelines in once display instance ``active_pipes`` the active pipelines in once display instance ``clock_ratio`` ratio of (aclk << 32)/pxlclk ``max_slave_zorder`` the maximum of slave zorder”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjK2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG2ubhŒ:”…”�”}”(hjG2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KahjC2ubjã)�”}”(hŒšstruct komeda_crtc_state { struct drm_crtc_state base; u32 affected_pipes; u32 active_pipes; u64 clock_ratio; u32 max_slave_zorder; };”h]”hŒšstruct komeda_crtc_state { struct drm_crtc_state base; u32 affected_pipes; u32 active_pipes; u64 clock_ratio; u32 max_slave_zorder; };”…”�”}”hjd2sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jâh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KchjC2ubhÞ)�”}”(hŒ **Members**”h]”j)�”}”(hju2h]”hŒMembers”…”�”}”(hjw2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KkhjC2ubjE)�”}”(hhh]”(jJ)�”}”(hŒ"``base`` :c:type:`drm_crtc_state` ”h]”(jP)�”}”(hŒ``base``”h]”jV)�”}”(hj”2h]”hŒbase”…”�”}”(hj–2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj’2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KahjŽ2ubjl)�”}”(hhh]”hÞ)�”}”(hŒ:c:type:`drm_crtc_state`”h]”h)�”}”(hj¯2h]”jV)�”}”(hj¯2h]”hŒdrm_crtc_state”…”�”}”(hj´2h²hh³Nh´Nubah}”(h]”h ]”(jŽ jíŒc-type”eh"]”h$]”h&]”uh1jUhj±2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jš Œ refdomain”jíŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j  j¤ j¨ Œdrm_crtc_state”uh1hh³j©2h´Kahj­2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j©2h´Kahjª2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjŽ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j©2h´Kahj‹2ubjJ)�”}”(hŒC``affected_pipes`` the affected pipelines in once display instance ”h]”(jP)�”}”(hŒ``affected_pipes``”h]”jV)�”}”(hjç2h]”hŒaffected_pipes”…”�”}”(hjé2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjå2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´Khhjá2ubjl)�”}”(hhh]”hÞ)�”}”(hŒ/the affected pipelines in once display instance”h]”hŒ/the affected pipelines in once display instance”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jü2h´Khhjý2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjá2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jü2h´Khhj‹2ubjJ)�”}”(hŒ?``active_pipes`` the active pipelines in once display instance ”h]”(jP)�”}”(hŒ``active_pipes``”h]”jV)�”}”(hj 3h]”hŒ active_pipes”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´Kmhj3ubjl)�”}”(hhh]”hÞ)�”}”(hŒ-the active pipelines in once display instance”h]”hŒ-the active pipelines in once display instance”…”�”}”(hj93h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j53h´Kmhj63ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j53h´Kmhj‹2ubjJ)�”}”(hŒ-``clock_ratio`` ratio of (aclk << 32)/pxlclk ”h]”(jP)�”}”(hŒ``clock_ratio``”h]”jV)�”}”(hjY3h]”hŒ clock_ratio”…”�”}”(hj[3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjW3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KrhjS3ubjl)�”}”(hhh]”hÞ)�”}”(hŒratio of (aclk << 32)/pxlclk”h]”hŒratio of (aclk << 32)/pxlclk”…”�”}”(hjr3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jn3h´Krhjo3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjS3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jn3h´Krhj‹2ubjJ)�”}”(hŒ0``max_slave_zorder`` the maximum of slave zorder”h]”(jP)�”}”(hŒ``max_slave_zorder``”h]”jV)�”}”(hj’3h]”hŒmax_slave_zorder”…”�”}”(hj”3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj�3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´KthjŒ3ubjl)�”}”(hhh]”hÞ)�”}”(hŒthe maximum of slave zorder”h]”hŒthe maximum of slave zorder”…”�”}”(hj«3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œo/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:468: ./drivers/gpu/drm/arm/display/komeda/komeda_kms.h”h´Kuhj¨3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjŒ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j§3h´Kthj‹2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhjC2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj¥*h²hh³Nh´Nubeh}”(h]”Œkomeda-kms-abstraction”ah ]”h"]”Œkomeda_kms abstraction”ah$]”h&]”uh1hÈhjœ'h²hh³hÇh´MÒubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒkomde_kms Functions”h]”hŒkomde_kms Functions”…”�”}”(hjÞ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÛ3h²hh³hÇh´MØubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒ%komeda_crtc_atomic_check (C function)”Œc.komeda_crtc_atomic_check”hNt”auh1jghjÛ3h²hh³Nh´Nubjz)�”}”(hhh]”(j)�”}”(hŒUint komeda_crtc_atomic_check (struct drm_crtc *crtc, struct drm_atomic_commit *state)”h]”j…)�”}”(hŒTint komeda_crtc_atomic_check(struct drm_crtc *crtc, struct drm_atomic_commit *state)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j4hj4h²hh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KAubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj4h²hh³j4h´KAubj®)�”}”(hŒkomeda_crtc_atomic_check”h]”j´)�”}”(hŒkomeda_crtc_atomic_check”h]”hŒkomeda_crtc_atomic_check”…”�”}”(hj)4h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj%4ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj4h²hh³j4h´KAubhŒdesc_parameterlist”“”)�”}”(hŒ8(struct drm_crtc *crtc, struct drm_atomic_commit *state)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct drm_crtc *crtc”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hjI4h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhjE4ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV4h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhjE4ubh)�”}”(hhh]”j´)�”}”(hŒdrm_crtc”h]”hŒdrm_crtc”…”�”}”(hjg4h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hjd4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jíŒreftype”Œ identifier”Œ reftarget”ji4Œmodname”NŒ classname”Nj  j£ )�”}”j¦ ]”j¡ Œ ASTIdentifier”“”)�”}”j}4j+4sbŒc.komeda_crtc_atomic_check”†”asbuh1hhjE4ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ4h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhjE4ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjš4h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j˜4hjE4ubj´)�”}”(hŒcrtc”h]”hŒcrtc”…”�”}”(hj©4h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hjE4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jC4hj?4ubjD4)�”}”(hŒstruct drm_atomic_commit *state”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hjÂ4h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj¾4ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ4h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj¾4ubh)�”}”(hhh]”j´)�”}”(hŒdrm_atomic_commit”h]”hŒdrm_atomic_commit”…”�”}”(hjà4h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hjÝ4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jíŒreftype”j}4Œ reftarget”jâ4Œmodname”NŒ classname”Nj  j£ )�”}”j¦ ]”j†4Œc.komeda_crtc_atomic_check”†”asbuh1hhj¾4ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ4h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj¾4ubj™4)�”}”(hjœ4h]”hŒ*”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”j¥4ah"]”h$]”h&]”uh1j˜4hj¾4ubj´)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj¾4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jC4hj?4ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=4hj4h²hh³j4h´KAubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhjý3h²hh³j4h´KAubah}”(h]”jø3ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³j4h´KAhjú3h²hubjà)�”}”(hhh]”hÞ)�”}”(hŒbuild display output data flow”h]”hŒbuild display output data flow”…”�”}”(hjC5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KAhj@5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjú3h²hh³j4h´KAubeh}”(h]”h ]”(jíŒfunction”eh"]”h$]”h&]”jòjíjój[5jôj[5jõ‰jö‰j÷‰uh1jyh²hhjÛ3h³Nh´Nubjù)�”}”(hXd**Parameters** ``struct drm_crtc *crtc`` DRM crtc ``struct drm_atomic_commit *state`` the crtc state object **Description** crtc_atomic_check is the final check stage, so beside build a display data pipeline according to the crtc_state, but still needs to release or disable the unclaimed pipeline resources. **Return** Zero for success or -errno”h]”(hÞ)�”}”(hŒ**Parameters**”h]”j)�”}”(hje5h]”hŒ Parameters”…”�”}”(hjg5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KEhj_5ubjE)�”}”(hhh]”(jJ)�”}”(hŒ#``struct drm_crtc *crtc`` DRM crtc ”h]”(jP)�”}”(hŒ``struct drm_crtc *crtc``”h]”jV)�”}”(hj„5h]”hŒstruct drm_crtc *crtc”…”�”}”(hj†5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj‚5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KBhj~5ubjl)�”}”(hhh]”hÞ)�”}”(hŒDRM crtc”h]”hŒDRM crtc”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j™5h´KBhjš5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj~5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j™5h´KBhj{5ubjJ)�”}”(hŒ:``struct drm_atomic_commit *state`` the crtc state object ”h]”(jP)�”}”(hŒ#``struct drm_atomic_commit *state``”h]”jV)�”}”(hj½5h]”hŒstruct drm_atomic_commit *state”…”�”}”(hj¿5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj»5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KChj·5ubjl)�”}”(hhh]”hÞ)�”}”(hŒthe crtc state object”h]”hŒthe crtc state object”…”�”}”(hjÖ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÒ5h´KChjÓ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj·5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jÒ5h´KChj{5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhj_5ubhÞ)�”}”(hŒ**Description**”h]”j)�”}”(hjø5h]”hŒ Description”…”�”}”(hjú5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KEhj_5ubhÞ)�”}”(hŒ¸crtc_atomic_check is the final check stage, so beside build a display data pipeline according to the crtc_state, but still needs to release or disable the unclaimed pipeline resources.”h]”hŒ¸crtc_atomic_check is the final check stage, so beside build a display data pipeline according to the crtc_state, but still needs to release or disable the unclaimed pipeline resources.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KDhj_5ubhÞ)�”}”(hŒ **Return**”h]”j)�”}”(hj6h]”hŒReturn”…”�”}”(hj!6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KHhj_5ubhÞ)�”}”(hŒZero for success or -errno”h]”hŒZero for success or -errno”…”�”}”(hj56h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œp/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:473: ./drivers/gpu/drm/arm/display/komeda/komeda_crtc.c”h´KIhj_5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjÛ3h²hh³Nh´Nubjh)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jtŒ&komeda_plane_atomic_check (C function)”Œc.komeda_plane_atomic_check”hNt”auh1jghjÛ3h²hh³Nh´Nubjz)�”}”(hhh]”(j)�”}”(hŒXint komeda_plane_atomic_check (struct drm_plane *plane, struct drm_atomic_commit *state)”h]”j…)�”}”(hŒWint komeda_plane_atomic_check(struct drm_plane *plane, struct drm_atomic_commit *state)”h]”(j4)�”}”(hŒint”h]”hŒint”…”�”}”(hjd6h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j4hj`6h²hh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´K?ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs6h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj`6h²hh³jr6h´K?ubj®)�”}”(hŒkomeda_plane_atomic_check”h]”j´)�”}”(hŒkomeda_plane_atomic_check”h]”hŒkomeda_plane_atomic_check”…”�”}”(hj…6h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj�6ubah}”(h]”h ]”(jÆjÇeh"]”h$]”h&]”hÅhÆuh1j­hj`6h²hh³jr6h´K?ubj>4)�”}”(hŒ:(struct drm_plane *plane, struct drm_atomic_commit *state)”h]”(jD4)�”}”(hŒstruct drm_plane *plane”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj¡6h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj�6ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®6h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj�6ubh)�”}”(hhh]”j´)�”}”(hŒ drm_plane”h]”hŒ drm_plane”…”�”}”(hj¿6h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj¼6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jíŒreftype”j}4Œ reftarget”jÁ6Œmodname”NŒ classname”Nj  j£ )�”}”j¦ ]”j…4)�”}”j}4j‡6sbŒc.komeda_plane_atomic_check”†”asbuh1hhj�6ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß6h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj�6ubj™4)�”}”(hjœ4h]”hŒ*”…”�”}”(hjí6h²hh³Nh´Nubah}”(h]”h ]”j¥4ah"]”h$]”h&]”uh1j˜4hj�6ubj´)�”}”(hŒplane”h]”hŒplane”…”�”}”(hjú6h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj�6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jC4hj™6ubjD4)�”}”(hŒstruct drm_atomic_commit *state”h]”(j‹)�”}”(hjŽh]”hŒstruct”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j—ah"]”h$]”h&]”uh1jŠhj7ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj7ubh)�”}”(hhh]”j´)�”}”(hŒdrm_atomic_commit”h]”hŒdrm_atomic_commit”…”�”}”(hj17h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj.7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jíŒreftype”j}4Œ reftarget”j37Œmodname”NŒ classname”Nj  j£ )�”}”j¦ ]”jÛ6Œc.komeda_plane_atomic_check”†”asbuh1hhj7ubj�)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO7h²hh³Nh´Nubah}”(h]”h ]”j©ah"]”h$]”h&]”uh1jœhj7ubj™4)�”}”(hjœ4h]”hŒ*”…”�”}”(hj]7h²hh³Nh´Nubah}”(h]”h ]”j¥4ah"]”h$]”h&]”uh1j˜4hj7ubj´)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjj7h²hh³Nh´Nubah}”(h]”h ]”j¿ah"]”h$]”h&]”uh1j³hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jC4hj™6ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j=4hj`6h²hh³jr6h´K?ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjшuh1j„jÒjÓhj\6h²hh³jr6h´K?ubah}”(h]”jW6ah ]”(j×jØeh"]”h$]”h&]”j܈jÝ)jÞhuh1j~h³jr6h´K?hjY6h²hubjà)�”}”(hhh]”hÞ)�”}”(hŒbuild input data flow”h]”hŒbuild input data flow”…”�”}”(hj”7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´K?hj‘7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjY6h²hh³jr6h´K?ubeh}”(h]”h ]”(jíŒfunction”eh"]”h$]”h&]”jòjíjój¬7jôj¬7jõ‰jö‰j÷‰uh1jyh²hhjÛ3h³Nh´Nubjù)�”}”(hŒ�**Parameters** ``struct drm_plane *plane`` DRM plane ``struct drm_atomic_commit *state`` the plane state object **Return** Zero for success or -errno”h]”(hÞ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¶7h]”hŒ Parameters”…”�”}”(hj¸7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´KChj°7ubjE)�”}”(hhh]”(jJ)�”}”(hŒ&``struct drm_plane *plane`` DRM plane ”h]”(jP)�”}”(hŒ``struct drm_plane *plane``”h]”jV)�”}”(hjÕ7h]”hŒstruct drm_plane *plane”…”�”}”(hj×7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjÓ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´K@hjÏ7ubjl)�”}”(hhh]”hÞ)�”}”(hŒ DRM plane”h]”hŒ DRM plane”…”�”}”(hjî7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jê7h´K@hjë7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjÏ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³jê7h´K@hjÌ7ubjJ)�”}”(hŒ;``struct drm_atomic_commit *state`` the plane state object ”h]”(jP)�”}”(hŒ#``struct drm_atomic_commit *state``”h]”jV)�”}”(hj8h]”hŒstruct drm_atomic_commit *state”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj 8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jOh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´KAhj8ubjl)�”}”(hhh]”hÞ)�”}”(hŒthe plane state object”h]”hŒthe plane state object”…”�”}”(hj'8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j#8h´KAhj$8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jIh³j#8h´KAhjÌ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jDhj°7ubhÞ)�”}”(hŒ **Return**”h]”j)�”}”(hjI8h]”hŒReturn”…”�”}”(hjK8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´KChj°7ubhÞ)�”}”(hŒZero for success or -errno”h]”hŒZero for success or -errno”…”�”}”(hj_8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œq/var/lib/git/docbuild/linux/Documentation/gpu/komeda-kms:475: ./drivers/gpu/drm/arm/display/komeda/komeda_plane.c”h´KChj°7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjÛ3h²hh³Nh´Nubeh}”(h]”Œkomde-kms-functions”ah ]”h"]”Œkomde_kms functions”ah$]”h&]”uh1hÈhjœ'h²hh³hÇh´MØubeh}”(h]”Œattach-komeda-dev-to-drm-kms”ah ]”h"]”Œattach komeda_dev to drm-kms”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M_ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ(Build komeda to be a Linux module driver”h]”hŒ(Build komeda to be a Linux module driver”…”�”}”(hjˆ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj…8h²hh³hÇh´MßubhÞ)�”}”(hŒNow we have two level devices:”h]”hŒNow we have two level devices:”…”�”}”(hj–8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Máhj…8h²hubjz)�”}”(hhh]”(j)�”}”(hŒ0komeda_dev: describes the real display hardware.”h]”hÞ)�”}”(hj©8h]”hŒ0komeda_dev: describes the real display hardware.”…”�”}”(hj«8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mãhj§8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj¤8h²hh³hÇh´Nubj)�”}”(hŒj;jejbjŒj‰j³j°jÚj×jjþj(j%jOjLjîjëjjjgjdjæjãjjj„j�jÞjÛj‚jjzjwjá jÞ j™'j–'j‚8j8j3)j0)jÑ)jÎ)jl*ji*j¢*jŸ*jØ3jÕ3jz8jw8jï8jì8uŒ nametypes”}”(j÷8‰jW‰j>‰je‰jŒ‰j³‰jÚ‰j‰j(‰jO‰jî‰j‰jg‰jæ‰j‰j„‰jÞ‰j‚‰jz‰já ‰j™'‰j‚8‰j3)‰jÑ)‰jl*‰j¢*‰jØ3‰jz8‰jï8‰uh}”(jô8hÊjThíj;jjbjAj‰jhj°j�j×j¶jþjÝj%jjLj+jëjZjjÆjdjjãjjjj‰j�jjÛj‡jjñjwjjvj€jy j~ jý j jjjµjºjÞ j…jSjYj+j0j–'jä j!j!j¬#j±#j'%j,%j8jœ'j0)jZ(jÎ)j6)ji*jÔ)jŸ*jo*jÕ3j¥*jÂ*jÇ*j-,j2,j .j%.jm/jr/jç1jì1jw8jÛ3jø3jý3jW6j\6jì8j…8jjÙj[j/jÆjšjùjÍjEjjxjLjÄj˜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”“”}”j+9Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.