xref: /linux/Documentation/gpu/drm-kms-helpers.rst (revision 7a39b9856acccc8e9b05845ca2bf62494fcd3dfa)
1=============================
2Mode Setting Helper Functions
3=============================
4
5The DRM subsystem aims for a strong separation between core code and helper
6libraries. Core code takes care of general setup and teardown and decoding
7userspace requests to kernel internal objects. Everything else is handled by a
8large set of helper libraries, which can be combined freely to pick and choose
9for each driver what fits, and avoid shared code where special behaviour is
10needed.
11
12This distinction between core code and helpers is especially strong in the
13modesetting code, where there's a shared userspace ABI for all drivers. This is
14in contrast to the render side, where pretty much everything (with very few
15exceptions) can be considered optional helper code.
16
17There are a few areas these helpers can grouped into:
18
19* Helpers to implement modesetting. The important ones here are the atomic
20  helpers. Old drivers still often use the legacy CRTC helpers. They both share
21  the same set of common helper vtables. For really simple drivers (anything
22  that would have been a great fit in the deprecated fbdev subsystem) there's
23  also the simple display pipe helpers.
24
25* There's a big pile of helpers for handling outputs. First the generic bridge
26  helpers for handling encoder and transcoder IP blocks. Second the panel helpers
27  for handling panel-related information and logic. Plus then a big set of
28  helpers for the various sink standards (DisplayPort, HDMI, MIPI DSI). Finally
29  there's also generic helpers for handling output probing, and for dealing with
30  EDIDs.
31
32* The last group of helpers concerns itself with the frontend side of a display
33  pipeline: Planes, handling rectangles for visibility checking and scissoring,
34  flip queues and assorted bits.
35
36.. contents::
37
38Modeset Helper Reference for Common Vtables
39===========================================
40
41.. kernel-doc:: include/drm/drm_modeset_helper_vtables.h
42   :doc: overview
43
44.. kernel-doc:: include/drm/drm_modeset_helper_vtables.h
45   :internal:
46
47.. _drm_atomic_helper:
48
49Atomic Modeset Helper Functions Reference
50=========================================
51
52Overview
53--------
54
55.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c
56   :doc: overview
57
58Implementing Asynchronous Atomic Commit
59---------------------------------------
60
61.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c
62   :doc: implementing nonblocking commit
63
64Helper Functions Reference
65--------------------------
66
67.. kernel-doc:: include/drm/drm_atomic_helper.h
68   :internal:
69
70.. kernel-doc:: drivers/gpu/drm/drm_atomic_helper.c
71   :export:
72
73Atomic State Reset and Initialization
74-------------------------------------
75
76.. kernel-doc:: drivers/gpu/drm/drm_atomic_state_helper.c
77   :doc: atomic state reset and initialization
78
79Atomic State Helper Reference
80-----------------------------
81
82.. kernel-doc:: drivers/gpu/drm/drm_atomic_state_helper.c
83   :export:
84
85GEM Atomic Helper Reference
86---------------------------
87
88.. kernel-doc:: drivers/gpu/drm/drm_gem_atomic_helper.c
89   :doc: overview
90
91.. kernel-doc:: include/drm/drm_gem_atomic_helper.h
92   :internal:
93
94.. kernel-doc:: drivers/gpu/drm/drm_gem_atomic_helper.c
95   :export:
96
97VBLANK Helper Reference
98-----------------------
99
100.. kernel-doc:: drivers/gpu/drm/drm_vblank_helper.c
101   :doc: overview
102
103.. kernel-doc:: include/drm/drm_vblank_helper.h
104   :internal:
105
106.. kernel-doc:: drivers/gpu/drm/drm_vblank_helper.c
107   :export:
108
109fbdev Helper Functions Reference
110================================
111
112.. kernel-doc:: drivers/gpu/drm/drm_fb_helper.c
113   :doc: fbdev helpers
114
115.. kernel-doc:: include/drm/drm_fb_helper.h
116   :internal:
117
118.. kernel-doc:: drivers/gpu/drm/drm_fb_helper.c
119   :export:
120
121format Helper Functions Reference
122=================================
123
124.. kernel-doc:: drivers/gpu/drm/drm_format_helper.c
125   :export:
126
127Framebuffer DMA Helper Functions Reference
128==========================================
129
130.. kernel-doc:: drivers/gpu/drm/drm_fb_dma_helper.c
131   :doc: framebuffer dma helper functions
132
133.. kernel-doc:: drivers/gpu/drm/drm_fb_dma_helper.c
134   :export:
135
136Framebuffer GEM Helper Reference
137================================
138
139.. kernel-doc:: drivers/gpu/drm/drm_gem_framebuffer_helper.c
140   :doc: overview
141
142.. kernel-doc:: drivers/gpu/drm/drm_gem_framebuffer_helper.c
143   :export:
144
145.. _drm_bridges:
146
147Bridges
148=======
149
150Overview
151--------
152
153.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
154   :doc: overview
155
156Display Driver Integration
157--------------------------
158
159.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
160   :doc: display driver integration
161
162Special Care with MIPI-DSI bridges
163----------------------------------
164
165.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
166   :doc: special care dsi
167
168Bridge Operations
169-----------------
170
171.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
172   :doc: bridge operations
173
174Bridge Chain Format Selection
175-----------------------------
176
177.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
178   :doc: bridge chain format selection
179
180Bridge Connector Helper
181-----------------------
182
183.. kernel-doc:: drivers/gpu/drm/display/drm_bridge_connector.c
184   :doc: overview
185
186
187Bridge Helper Reference
188-------------------------
189
190.. kernel-doc:: include/drm/drm_bridge.h
191   :internal:
192
193.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
194   :export:
195
196MIPI-DSI bridge operation
197-------------------------
198
199.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
200   :doc: dsi bridge operations
201
202
203Bridge Connector Helper Reference
204---------------------------------
205
206.. kernel-doc:: drivers/gpu/drm/display/drm_bridge_connector.c
207   :export:
208
209Panel-Bridge Helper Reference
210-----------------------------
211
212.. kernel-doc:: drivers/gpu/drm/bridge/panel.c
213   :export:
214
215.. _drm_panel_helper:
216
217Panel Helper Reference
218======================
219
220.. kernel-doc:: drivers/gpu/drm/drm_panel.c
221   :doc: drm panel
222
223.. kernel-doc:: include/drm/drm_panel.h
224   :internal:
225
226.. kernel-doc:: drivers/gpu/drm/drm_panel.c
227   :export:
228
229.. kernel-doc:: drivers/gpu/drm/drm_panel_orientation_quirks.c
230   :export:
231
232.. kernel-doc:: drivers/gpu/drm/drm_panel_backlight_quirks.c
233   :export:
234
235Panel Self Refresh Helper Reference
236===================================
237
238.. kernel-doc:: drivers/gpu/drm/drm_self_refresh_helper.c
239   :doc: overview
240
241.. kernel-doc:: drivers/gpu/drm/drm_self_refresh_helper.c
242   :export:
243
244HDMI Atomic State Helpers
245=========================
246
247Overview
248--------
249
250.. kernel-doc:: drivers/gpu/drm/display/drm_hdmi_state_helper.c
251   :doc: hdmi helpers
252
253Functions Reference
254-------------------
255
256.. kernel-doc:: drivers/gpu/drm/display/drm_hdmi_state_helper.c
257   :export:
258
259HDCP Helper Functions Reference
260===============================
261
262.. kernel-doc:: drivers/gpu/drm/display/drm_hdcp_helper.c
263   :export:
264
265Display Port Helper Functions Reference
266=======================================
267
268.. kernel-doc:: drivers/gpu/drm/display/drm_dp_helper.c
269   :doc: dp helpers
270
271.. kernel-doc:: include/drm/display/drm_dp.h
272   :internal:
273
274.. kernel-doc:: include/drm/display/drm_dp_helper.h
275   :internal:
276
277.. kernel-doc:: drivers/gpu/drm/display/drm_dp_helper.c
278   :export:
279
280Display Port CEC Helper Functions Reference
281===========================================
282
283.. kernel-doc:: drivers/gpu/drm/display/drm_dp_cec.c
284   :doc: dp cec helpers
285
286.. kernel-doc:: drivers/gpu/drm/display/drm_dp_cec.c
287   :export:
288
289Display Port Dual Mode Adaptor Helper Functions Reference
290=========================================================
291
292.. kernel-doc:: drivers/gpu/drm/display/drm_dp_dual_mode_helper.c
293   :doc: dp dual mode helpers
294
295.. kernel-doc:: include/drm/display/drm_dp_dual_mode_helper.h
296   :internal:
297
298.. kernel-doc:: drivers/gpu/drm/display/drm_dp_dual_mode_helper.c
299   :export:
300
301Display Port MST Helpers
302========================
303
304Overview
305--------
306
307.. kernel-doc:: drivers/gpu/drm/display/drm_dp_mst_topology.c
308   :doc: dp mst helper
309
310.. kernel-doc:: drivers/gpu/drm/display/drm_dp_mst_topology.c
311   :doc: Branch device and port refcounting
312
313Functions Reference
314-------------------
315
316.. kernel-doc:: include/drm/display/drm_dp_mst_helper.h
317   :internal:
318
319.. kernel-doc:: drivers/gpu/drm/display/drm_dp_mst_topology.c
320   :export:
321
322Topology Lifetime Internals
323---------------------------
324
325These functions aren't exported to drivers, but are documented here to help make
326the MST topology helpers easier to understand
327
328.. kernel-doc:: drivers/gpu/drm/display/drm_dp_mst_topology.c
329   :functions: drm_dp_mst_topology_try_get_mstb drm_dp_mst_topology_get_mstb
330               drm_dp_mst_topology_put_mstb
331               drm_dp_mst_topology_try_get_port drm_dp_mst_topology_get_port
332               drm_dp_mst_topology_put_port
333               drm_dp_mst_get_mstb_malloc drm_dp_mst_put_mstb_malloc
334
335MIPI DBI Helper Functions Reference
336===================================
337
338.. kernel-doc:: drivers/gpu/drm/drm_mipi_dbi.c
339   :doc: overview
340
341.. kernel-doc:: include/drm/drm_mipi_dbi.h
342   :internal:
343
344.. kernel-doc:: drivers/gpu/drm/drm_mipi_dbi.c
345   :export:
346
347MIPI DSI Helper Functions Reference
348===================================
349
350.. kernel-doc:: drivers/gpu/drm/drm_mipi_dsi.c
351   :doc: dsi helpers
352
353.. kernel-doc:: include/drm/drm_mipi_dsi.h
354   :internal:
355
356.. kernel-doc:: drivers/gpu/drm/drm_mipi_dsi.c
357   :export:
358
359Display Stream Compression Helper Functions Reference
360=====================================================
361
362.. kernel-doc:: drivers/gpu/drm/display/drm_dsc_helper.c
363   :doc: dsc helpers
364
365.. kernel-doc:: include/drm/display/drm_dsc.h
366   :internal:
367
368.. kernel-doc:: drivers/gpu/drm/display/drm_dsc_helper.c
369   :export:
370
371Output Probing Helper Functions Reference
372=========================================
373
374.. kernel-doc:: drivers/gpu/drm/drm_probe_helper.c
375   :doc: output probing helper overview
376
377.. kernel-doc:: drivers/gpu/drm/drm_probe_helper.c
378   :export:
379
380EDID Helper Functions Reference
381===============================
382
383.. kernel-doc:: include/drm/drm_edid.h
384   :internal:
385
386.. kernel-doc:: drivers/gpu/drm/drm_edid.c
387   :export:
388
389.. kernel-doc:: include/drm/drm_eld.h
390   :internal:
391
392.. kernel-doc:: drivers/gpu/drm/drm_eld.c
393   :export:
394
395SCDC Helper Functions Reference
396===============================
397
398.. kernel-doc:: drivers/gpu/drm/display/drm_scdc_helper.c
399   :doc: scdc helpers
400
401.. kernel-doc:: include/drm/display/drm_scdc_helper.h
402   :internal:
403
404.. kernel-doc:: drivers/gpu/drm/display/drm_scdc_helper.c
405   :export:
406
407HDMI Infoframes Helper Reference
408================================
409
410Strictly speaking this is not a DRM helper library but generally usable
411by any driver interfacing with HDMI outputs like v4l or alsa drivers.
412But it nicely fits into the overall topic of mode setting helper
413libraries and hence is also included here.
414
415.. kernel-doc:: include/linux/hdmi.h
416   :internal:
417
418.. kernel-doc:: drivers/video/hdmi.c
419   :export:
420
421Rectangle Utilities Reference
422=============================
423
424.. kernel-doc:: include/drm/drm_rect.h
425   :doc: rect utils
426
427.. kernel-doc:: include/drm/drm_rect.h
428   :internal:
429
430.. kernel-doc:: drivers/gpu/drm/drm_rect.c
431   :export:
432
433Flip-work Helper Reference
434==========================
435
436.. kernel-doc:: include/drm/drm_flip_work.h
437   :doc: flip utils
438
439.. kernel-doc:: include/drm/drm_flip_work.h
440   :internal:
441
442.. kernel-doc:: drivers/gpu/drm/drm_flip_work.c
443   :export:
444
445Auxiliary Modeset Helpers
446=========================
447
448.. kernel-doc:: drivers/gpu/drm/drm_modeset_helper.c
449   :doc: aux kms helpers
450
451.. kernel-doc:: drivers/gpu/drm/drm_modeset_helper.c
452   :export:
453
454OF/DT Helpers
455=============
456
457.. kernel-doc:: drivers/gpu/drm/drm_of.c
458   :doc: overview
459
460.. kernel-doc:: drivers/gpu/drm/drm_of.c
461   :export:
462
463Legacy Plane Helper Reference
464=============================
465
466.. kernel-doc:: drivers/gpu/drm/drm_plane_helper.c
467   :doc: overview
468
469.. kernel-doc:: drivers/gpu/drm/drm_plane_helper.c
470   :export:
471
472Legacy CRTC/Modeset Helper Functions Reference
473==============================================
474
475.. kernel-doc:: drivers/gpu/drm/drm_crtc_helper.c
476   :doc: overview
477
478.. kernel-doc:: drivers/gpu/drm/drm_crtc_helper.c
479   :export:
480
481Privacy-screen class
482====================
483
484.. kernel-doc:: drivers/gpu/drm/drm_privacy_screen.c
485   :doc: overview
486
487.. kernel-doc:: include/drm/drm_privacy_screen_driver.h
488   :internal:
489
490.. kernel-doc:: include/drm/drm_privacy_screen_machine.h
491   :internal:
492
493.. kernel-doc:: drivers/gpu/drm/drm_privacy_screen.c
494   :export:
495