sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget'/translations/zh_CN/gpu/drm-kms-helpersmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/zh_TW/gpu/drm-kms-helpersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/it_IT/gpu/drm-kms-helpersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ja_JP/gpu/drm-kms-helpersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ko_KR/gpu/drm-kms-helpersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/sp_SP/gpu/drm-kms-helpersmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hMode Setting Helper Functionsh]hMode Setting Helper Functions}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhA/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers.rsthKubh paragraph)}(hXThe DRM subsystem aims for a strong separation between core code and helper libraries. Core code takes care of general setup and teardown and decoding userspace requests to kernel internal objects. Everything else is handled by a large set of helper libraries, which can be combined freely to pick and choose for each driver what fits, and avoid shared code where special behaviour is needed.h]hXThe DRM subsystem aims for a strong separation between core code and helper libraries. Core code takes care of general setup and teardown and decoding userspace requests to kernel internal objects. Everything else is handled by a large set of helper libraries, which can be combined freely to pick and choose for each driver what fits, and avoid shared code where special behaviour is needed.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXThis distinction between core code and helpers is especially strong in the modesetting code, where there's a shared userspace ABI for all drivers. This is in contrast to the render side, where pretty much everything (with very few exceptions) can be considered optional helper code.h]hXThis distinction between core code and helpers is especially strong in the modesetting code, where there’s a shared userspace ABI for all drivers. This is in contrast to the render side, where pretty much everything (with very few exceptions) can be considered optional helper code.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(h5There are a few areas these helpers can grouped into:h]h5There are a few areas these helpers can grouped into:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh bullet_list)}(hhh](h list_item)}(hXTHelpers to implement modesetting. The important ones here are the atomic helpers. Old drivers still often use the legacy CRTC helpers. They both share the same set of common helper vtables. For really simple drivers (anything that would have been a great fit in the deprecated fbdev subsystem) there's also the simple display pipe helpers. h]h)}(hXSHelpers to implement modesetting. The important ones here are the atomic helpers. Old drivers still often use the legacy CRTC helpers. They both share the same set of common helper vtables. For really simple drivers (anything that would have been a great fit in the deprecated fbdev subsystem) there's also the simple display pipe helpers.h]hXUHelpers to implement modesetting. The important ones here are the atomic helpers. Old drivers still often use the legacy CRTC helpers. They both share the same set of common helper vtables. For really simple drivers (anything that would have been a great fit in the deprecated fbdev subsystem) there’s also the simple display pipe helpers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hXThere's a big pile of helpers for handling outputs. First the generic bridge helpers for handling encoder and transcoder IP blocks. Second the panel helpers for handling panel-related information and logic. Plus then a big set of helpers for the various sink standards (DisplayPort, HDMI, MIPI DSI). Finally there's also generic helpers for handling output probing, and for dealing with EDIDs. h]h)}(hXThere's a big pile of helpers for handling outputs. First the generic bridge helpers for handling encoder and transcoder IP blocks. Second the panel helpers for handling panel-related information and logic. Plus then a big set of helpers for the various sink standards (DisplayPort, HDMI, MIPI DSI). Finally there's also generic helpers for handling output probing, and for dealing with EDIDs.h]hXThere’s a big pile of helpers for handling outputs. First the generic bridge helpers for handling encoder and transcoder IP blocks. Second the panel helpers for handling panel-related information and logic. Plus then a big set of helpers for the various sink standards (DisplayPort, HDMI, MIPI DSI). Finally there’s also generic helpers for handling output probing, and for dealing with EDIDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh)}(hThe last group of helpers concerns itself with the frontend side of a display pipeline: Planes, handling rectangles for visibility checking and scissoring, flip queues and assorted bits. h]h)}(hThe last group of helpers concerns itself with the frontend side of a display pipeline: Planes, handling rectangles for visibility checking and scissoring, flip queues and assorted bits.h]hThe last group of helpers concerns itself with the frontend side of a display pipeline: Planes, handling rectangles for visibility checking and scissoring, flip queues and assorted bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1hhhhKhhhhubh)}(hhh](h)}(h+Modeset Helper Reference for Common Vtablesh]h+Modeset Helper Reference for Common Vtables}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hhhhhK%ubh)}(hX`The DRM mode setting helper functions are common code for drivers to use if they wish. Drivers are not forced to use this code in their implementations but it would be useful if the code they do use at least provides a consistent interface and operation to userspace. Therefore it is highly recommended to use the provided helpers as much as possible.h]hX`The DRM mode setting helper functions are common code for drivers to use if they wish. Drivers are not forced to use this code in their implementations but it would be useful if the code they do use at least provides a consistent interface and operation to userspace. Therefore it is highly recommended to use the provided helpers as much as possible.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:39: ./include/drm/drm_modeset_helper_vtables.hhK$hj:hhubh)}(hBecause there is only one pointer per modeset object to hold a vfunc table for helper libraries they are by necessity shared among the different helpers.h]hBecause there is only one pointer per modeset object to hold a vfunc table for helper libraries they are by necessity shared among the different helpers.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:39: ./include/drm/drm_modeset_helper_vtables.hhK*hj:hhubh)}(hTTo make this clear all the helper vtables are pulled together in this location here.h]hTTo make this clear all the helper vtables are pulled together in this location here.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:39: ./include/drm/drm_modeset_helper_vtables.hhK.hj:hhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single drm_crtc_helper_funcs (C struct)c.drm_crtc_helper_funcshNtauh1jxhj:hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhNubhdesc)}(hhh](hdesc_signature)}(hdrm_crtc_helper_funcsh]hdesc_signature_line)}(hstruct drm_crtc_helper_funcsh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hdrm_crtc_helper_funcsh]h desc_sig_name)}(hjh]hdrm_crtc_helper_funcs}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(hhelper operations for CRTCsh]hhelper operations for CRTCs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhK=hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhj:hjhNubh container)}(hX@**Definition**:: struct drm_crtc_helper_funcs { void (*dpms)(struct drm_crtc *crtc, int mode); void (*prepare)(struct drm_crtc *crtc); void (*commit)(struct drm_crtc *crtc); enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_crtc *crtc,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,struct drm_display_mode *adjusted_mode, int x, int y, struct drm_framebuffer *old_fb); void (*mode_set_nofb)(struct drm_crtc *crtc); int (*mode_set_base)(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb); int (*mode_set_base_atomic)(struct drm_crtc *crtc,struct drm_framebuffer *fb, int x, int y, enum mode_set_atomic); void (*disable)(struct drm_crtc *crtc); int (*atomic_check)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_begin)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_flush)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_crtc *crtc, struct drm_atomic_state *state); bool (*get_scanout_position)(struct drm_crtc *crtc,bool in_vblank_irq, int *vpos, int *hpos,ktime_t *stime, ktime_t *etime, const struct drm_display_mode *mode); }; **Members** ``dpms`` Callback to control power levels on the CRTC. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy CRTC helpers to implement DPMS functionality in drm_helper_connector_dpms(). This callback is also used to disable a CRTC by calling it with DRM_MODE_DPMS_OFF if the **disable** hook isn't used. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_enable** and **atomic_disable** should be used. ``prepare`` This callback should prepare the CRTC for a subsequent modeset, which in practice means the driver should disable the CRTC if it is running. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_OFF. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_disable** should be used. ``commit`` This callback should commit the new mode on the CRTC after a modeset, which in practice means the driver should enable the CRTC. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_ON. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_enable** should be used. ``mode_valid`` This callback is used to check if a specific mode is valid in this crtc. This should be implemented if the crtc has some sort of restriction in the modes it can display. For example, a given crtc may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). This function is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup** or **atomic_check**. RETURNS: drm_mode_status Enum ``mode_fixup`` This callback is used to validate a mode. The parameter mode is the display mode that userspace requested, adjusted_mode is the mode the encoders need to be fed with. Note that this is the inverse semantics of the meaning for the :c:type:`drm_encoder` and :c:type:`drm_bridge_funcs.mode_fixup ` vfunc. If the CRTC cannot support the requested conversion from mode to adjusted_mode it should reject the modeset. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details. This function is used by both legacy CRTC helpers and atomic helpers. With atomic helpers it is optional. NOTE: This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter. This is in contrast to the legacy CRTC helpers where this was allowed. Atomic drivers which need to inspect and adjust more state should instead use the **atomic_check** callback, but note that they're not perfectly equivalent: **mode_valid** is called from drm_atomic_helper_check_modeset(), but **atomic_check** is called from drm_atomic_helper_check_planes(), because originally it was meant for plane update checks only. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into **mode_valid**. RETURNS: True if an acceptable configuration is possible, false if the modeset operation should be rejected. ``mode_set`` This callback is used by the legacy CRTC helpers to set a new mode, position and framebuffer. Since it ties the primary plane to every mode change it is incompatible with universal plane support. And since it can't update other planes it's incompatible with atomic modeset support. This callback is only used by CRTC helpers and deprecated. RETURNS: 0 on success or a negative error code on failure. ``mode_set_nofb`` This callback is used to update the display mode of a CRTC without changing anything of the primary plane configuration. This fits the requirement of atomic and hence is used by the atomic helpers. Note that the display pipe is completely off when this function is called. Atomic drivers which need hardware to be running before they program the new display mode (e.g. because they implement runtime PM) should not use this hook. This is because the helper library calls this hook only once per mode change and not every time the display pipeline is suspended using either DPMS or the new "ACTIVE" property. Which means register values set in this callback might get reset when the CRTC is suspended, but not restored. Such drivers should instead move all their CRTC setup into the **atomic_enable** callback. This callback is optional. ``mode_set_base`` This callback is used by the legacy CRTC helpers to set a new framebuffer and scanout position. It is optional and used as an optimized fast-path instead of a full mode set operation with all the resulting flickering. If it is not present drm_crtc_helper_set_config() will fall back to a full modeset, using the **mode_set** callback. Since it can't update other planes it's incompatible with atomic modeset support. This callback is only used by the CRTC helpers and deprecated. RETURNS: 0 on success or a negative error code on failure. ``mode_set_base_atomic`` This callback is used by the fbdev helpers to set a new framebuffer and scanout without sleeping, i.e. from an atomic calling context. It is only used to implement kgdb support. This callback is optional and only needed for kgdb support in the fbdev helpers. RETURNS: 0 on success or a negative error code on failure. ``disable`` This callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own :c:type:`drm_encoder_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **disable** must be the inverse of **atomic_enable** for atomic drivers. Atomic drivers should consider to use **atomic_disable** instead of this one. NOTE: With legacy CRTC helpers there's a big semantic difference between **disable** and other hooks (like **prepare** or **dpms**) used to shut down a CRTC: **disable** is only called when also logically disabling the display pipeline and needs to release any resources acquired in **mode_set** (like shared PLLs, or again release pinned framebuffers). Therefore **disable** must be the inverse of **mode_set** plus **commit** for drivers still using legacy CRTC helpers, which is different from the rules under atomic. ``atomic_check`` Drivers should check plane-update related CRTC constraints in this hook. They can also check mode related limitations but need to be aware of the calling order, since this hook is used by drm_atomic_helper_check_planes() whereas the preparations needed to check output routing and the display mode is done in drm_atomic_helper_check_modeset(). Therefore drivers that want to check output routing and display mode constraints in this callback must ensure that drm_atomic_helper_check_modeset() has been called beforehand. This is calling order used by the default helper implementation in drm_atomic_helper_check(). When using drm_atomic_helper_check_planes() this hook is called after the :c:type:`drm_plane_helper_funcs.atomic_check ` hook for planes, which allows drivers to assign shared resources requested by planes in this callback here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked. This function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached. This callback is used by the atomic modeset helpers, but it is optional. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state object passed-in. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into **mode_valid**. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. ``atomic_begin`` Drivers should prepare for an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might be vblank evasion, blocking updates by setting bits or doing preparatory work for e.g. manual update display. This hook is called before any plane commit functions are called. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. ``atomic_flush`` Drivers should finalize an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might include checking that vblank evasion was successful, unblocking updates by setting bits or setting the GO bit to flush out all updates. Simple hardware or hardware with special requirements can commit and flush out all updates for all planes from this hook and forgo all the other commit hooks for plane updates. This hook is called after any plane commit functions are called. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. ``atomic_enable`` This callback should be used to enable the CRTC. With the atomic drivers it is called before all encoders connected to this CRTC are enabled through the encoder's own :c:type:`drm_encoder_helper_funcs.enable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used only by atomic helpers, for symmetry with **atomic_disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **atomic_enable** must be the inverse of **atomic_disable** for atomic drivers. This function is optional. ``atomic_disable`` This callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own :c:type:`drm_encoder_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used only by atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the CRTC level. This function is optional. ``get_scanout_position`` Called by vblank timestamping code. Returns the current display scanout position from a CRTC and an optional accurate ktime_get() timestamp of when the position was measured. Note that this is a helper callback which is only used if a driver uses drm_crtc_vblank_helper_get_vblank_timestamp() for the **drm_crtc_funcs.get_vblank_timestamp** callback. Parameters: crtc: The CRTC. in_vblank_irq: True when called from drm_crtc_handle_vblank(). Some drivers need to apply some workarounds for gpu-specific vblank irq quirks if the flag is set. vpos: Target location for current vertical scanout position. hpos: Target location for current horizontal scanout position. stime: Target location for timestamp taken immediately before scanout position query. Can be NULL to skip timestamp. etime: Target location for timestamp taken immediately after scanout position query. Can be NULL to skip timestamp. mode: Current display timings. Returns vpos as a positive number while in active scanout area. Returns vpos as a negative number inside vblank, counting the number of scanlines to go until end of vblank, e.g., -1 means "one scanline until start of active scanout / end of vblank." Returns: True on success, false if a reliable scanout position counter could not be read out.h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKAhjubh literal_block)}(hXstruct drm_crtc_helper_funcs { void (*dpms)(struct drm_crtc *crtc, int mode); void (*prepare)(struct drm_crtc *crtc); void (*commit)(struct drm_crtc *crtc); enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_crtc *crtc,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,struct drm_display_mode *adjusted_mode, int x, int y, struct drm_framebuffer *old_fb); void (*mode_set_nofb)(struct drm_crtc *crtc); int (*mode_set_base)(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb); int (*mode_set_base_atomic)(struct drm_crtc *crtc,struct drm_framebuffer *fb, int x, int y, enum mode_set_atomic); void (*disable)(struct drm_crtc *crtc); int (*atomic_check)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_begin)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_flush)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_crtc *crtc, struct drm_atomic_state *state); bool (*get_scanout_position)(struct drm_crtc *crtc,bool in_vblank_irq, int *vpos, int *hpos,ktime_t *stime, ktime_t *etime, const struct drm_display_mode *mode); };h]hXstruct drm_crtc_helper_funcs { void (*dpms)(struct drm_crtc *crtc, int mode); void (*prepare)(struct drm_crtc *crtc); void (*commit)(struct drm_crtc *crtc); enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_crtc *crtc,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,struct drm_display_mode *adjusted_mode, int x, int y, struct drm_framebuffer *old_fb); void (*mode_set_nofb)(struct drm_crtc *crtc); int (*mode_set_base)(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb); int (*mode_set_base_atomic)(struct drm_crtc *crtc,struct drm_framebuffer *fb, int x, int y, enum mode_set_atomic); void (*disable)(struct drm_crtc *crtc); int (*atomic_check)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_begin)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_flush)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_crtc *crtc, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_crtc *crtc, struct drm_atomic_state *state); bool (*get_scanout_position)(struct drm_crtc *crtc,bool in_vblank_irq, int *vpos, int *hpos,ktime_t *stime, ktime_t *etime, const struct drm_display_mode *mode); };}hjAsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKChjubh)}(h **Members**h]j%)}(hjRh]hMembers}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKVhjubhdefinition_list)}(hhh](hdefinition_list_item)}(hXn``dpms`` Callback to control power levels on the CRTC. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy CRTC helpers to implement DPMS functionality in drm_helper_connector_dpms(). This callback is also used to disable a CRTC by calling it with DRM_MODE_DPMS_OFF if the **disable** hook isn't used. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_enable** and **atomic_disable** should be used. h](hterm)}(h``dpms``h]hliteral)}(hjwh]hdpms}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKPhjoubh definition)}(hhh](h)}(hCallback to control power levels on the CRTC. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy CRTC helpers to implement DPMS functionality in drm_helper_connector_dpms().h]hCallback to control power levels on the CRTC. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy CRTC helpers to implement DPMS functionality in drm_helper_connector_dpms().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKEhjubh)}(huThis callback is also used to disable a CRTC by calling it with DRM_MODE_DPMS_OFF if the **disable** hook isn't used.h](hYThis callback is also used to disable a CRTC by calling it with DRM_MODE_DPMS_OFF if the }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh hook isn’t used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKJhjubh)}(hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_enable** and **atomic_disable** should be used.h](hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead }(hjhhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhKPhjjubjn)}(hX``prepare`` This callback should prepare the CRTC for a subsequent modeset, which in practice means the driver should disable the CRTC if it is running. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_OFF. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_disable** should be used. h](jt)}(h ``prepare``h]jz)}(hj h]hprepare}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhK_hjubj)}(hhh](h)}(hThis callback should prepare the CRTC for a subsequent modeset, which in practice means the driver should disable the CRTC if it is running. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_OFF.h](hThis callback should prepare the CRTC for a subsequent modeset, which in practice means the driver should disable the CRTC if it is running. Most drivers ended up implementing this by calling their }(hj"hhhNhNubj%)}(h**dpms**h]hdpms}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubh hook with DRM_MODE_DPMS_OFF.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKWhjubh)}(hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_disable** should be used.h](hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead }(hjChhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh should be used.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhK\hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK_hjjubjn)}(hX``commit`` This callback should commit the new mode on the CRTC after a modeset, which in practice means the driver should enable the CRTC. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_ON. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_enable** should be used. h](jt)}(h ``commit``h]jz)}(hjvh]hcommit}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKnhjpubj)}(hhh](h)}(hThis callback should commit the new mode on the CRTC after a modeset, which in practice means the driver should enable the CRTC. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_ON.h](hThis callback should commit the new mode on the CRTC after a modeset, which in practice means the driver should enable the CRTC. Most drivers ended up implementing this by calling their }(hjhhhNhNubj%)}(h**dpms**h]hdpms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh hook with DRM_MODE_DPMS_ON.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKfhjubh)}(hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead **atomic_enable** should be used.h](hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling a CRTC to facilitate transitions to atomic, but it is deprecated. Instead }(hjhhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKkhjubeh}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhKnhjjubjn)}(hX?``mode_valid`` This callback is used to check if a specific mode is valid in this crtc. This should be implemented if the crtc has some sort of restriction in the modes it can display. For example, a given crtc may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). This function is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup** or **atomic_check**. RETURNS: drm_mode_status Enum h](jt)}(h``mode_valid``h]jz)}(hjh]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubj)}(hhh](h)}(hXThis callback is used to check if a specific mode is valid in this crtc. This should be implemented if the crtc has some sort of restriction in the modes it can display. For example, a given crtc may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed.h]hXThis callback is used to check if a specific mode is valid in this crtc. This should be implemented if the crtc has some sort of restriction in the modes it can display. For example, a given crtc may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKuhjubh)}(hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().h]hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhK}hjubh)}(hThis function is optional.h]hThis function is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hNOTE:h]hNOTE:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hXrSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup** or **atomic_check**.h](hXOSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in }(hj8hhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubh or }(hj8hhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hRETURNS:h]hRETURNS:}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hdrm_mode_status Enumh]hdrm_mode_status Enum}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjjubjn)}(hX4``mode_fixup`` This callback is used to validate a mode. The parameter mode is the display mode that userspace requested, adjusted_mode is the mode the encoders need to be fed with. Note that this is the inverse semantics of the meaning for the :c:type:`drm_encoder` and :c:type:`drm_bridge_funcs.mode_fixup ` vfunc. If the CRTC cannot support the requested conversion from mode to adjusted_mode it should reject the modeset. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details. This function is used by both legacy CRTC helpers and atomic helpers. With atomic helpers it is optional. NOTE: This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter. This is in contrast to the legacy CRTC helpers where this was allowed. Atomic drivers which need to inspect and adjust more state should instead use the **atomic_check** callback, but note that they're not perfectly equivalent: **mode_valid** is called from drm_atomic_helper_check_modeset(), but **atomic_check** is called from drm_atomic_helper_check_planes(), because originally it was meant for plane update checks only. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into **mode_valid**. RETURNS: True if an acceptable configuration is possible, false if the modeset operation should be rejected. h](jt)}(h``mode_fixup``h]jz)}(hjh]h mode_fixup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubj)}(hhh](h)}(hXThis callback is used to validate a mode. The parameter mode is the display mode that userspace requested, adjusted_mode is the mode the encoders need to be fed with. Note that this is the inverse semantics of the meaning for the :c:type:`drm_encoder` and :c:type:`drm_bridge_funcs.mode_fixup ` vfunc. If the CRTC cannot support the requested conversion from mode to adjusted_mode it should reject the modeset. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details.h](hThis callback is used to validate a mode. The parameter mode is the display mode that userspace requested, adjusted_mode is the mode the encoders need to be fed with. Note that this is the inverse semantics of the meaning for the }(hjhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjh]h drm_encoder}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocgpu/drm-kms-helpers refdomainjreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftarget drm_encoderuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh and }(hjhhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_fixup `h]jz)}(hjh]hdrm_bridge_funcs.mode_fixup}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhKhjubh~ vfunc. If the CRTC cannot support the requested conversion from mode to adjusted_mode it should reject the modeset. See also }(hjhhhNhNubh)}(h7:c:type:`drm_crtc_state.adjusted_mode `h]jz)}(hjh]hdrm_crtc_state.adjusted_mode}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjhKhjubh for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(hiThis function is used by both legacy CRTC helpers and atomic helpers. With atomic helpers it is optional.h]hiThis function is used by both legacy CRTC helpers and atomic helpers. With atomic helpers it is optional.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hNOTE:h]hNOTE:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hXIThis function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter.h]hXKThis function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace’s request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hFThis is in contrast to the legacy CRTC helpers where this was allowed.h]hFThis is in contrast to the legacy CRTC helpers where this was allowed.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hXaAtomic drivers which need to inspect and adjust more state should instead use the **atomic_check** callback, but note that they're not perfectly equivalent: **mode_valid** is called from drm_atomic_helper_check_modeset(), but **atomic_check** is called from drm_atomic_helper_check_planes(), because originally it was meant for plane update checks only.h](hRAtomic drivers which need to inspect and adjust more state should instead use the }(hjrhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh= callback, but note that they’re not perfectly equivalent: }(hjrhhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh7 is called from drm_atomic_helper_check_modeset(), but }(hjrhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubho is called from drm_atomic_helper_check_planes(), because originally it was meant for plane update checks only.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hXLAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into **mode_valid**.h](hAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in }(hjhhhNhNubh)}(h-:c:type:`drm_connector.modes `h]jz)}(hjh]hdrm_connector.modes}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubha. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into }(hjhhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(hRETURNS:h]hRETURNS:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hcTrue if an acceptable configuration is possible, false if the modeset operation should be rejected.h]hcTrue if an acceptable configuration is possible, false if the modeset operation should be rejected.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjjubjn)}(hX``mode_set`` This callback is used by the legacy CRTC helpers to set a new mode, position and framebuffer. Since it ties the primary plane to every mode change it is incompatible with universal plane support. And since it can't update other planes it's incompatible with atomic modeset support. This callback is only used by CRTC helpers and deprecated. RETURNS: 0 on success or a negative error code on failure. h](jt)}(h ``mode_set``h]jz)}(hj+h]hmode_set}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhj%ubj)}(hhh](h)}(hXThis callback is used by the legacy CRTC helpers to set a new mode, position and framebuffer. Since it ties the primary plane to every mode change it is incompatible with universal plane support. And since it can't update other planes it's incompatible with atomic modeset support.h]hXThis callback is used by the legacy CRTC helpers to set a new mode, position and framebuffer. Since it ties the primary plane to every mode change it is incompatible with universal plane support. And since it can’t update other planes it’s incompatible with atomic modeset support.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjAubh)}(h:This callback is only used by CRTC helpers and deprecated.h]h:This callback is only used by CRTC helpers and deprecated.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjAubh)}(hRETURNS:h]hRETURNS:}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjAubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKhjjubjn)}(hXZ``mode_set_nofb`` This callback is used to update the display mode of a CRTC without changing anything of the primary plane configuration. This fits the requirement of atomic and hence is used by the atomic helpers. Note that the display pipe is completely off when this function is called. Atomic drivers which need hardware to be running before they program the new display mode (e.g. because they implement runtime PM) should not use this hook. This is because the helper library calls this hook only once per mode change and not every time the display pipeline is suspended using either DPMS or the new "ACTIVE" property. Which means register values set in this callback might get reset when the CRTC is suspended, but not restored. Such drivers should instead move all their CRTC setup into the **atomic_enable** callback. This callback is optional. h](jt)}(h``mode_set_nofb``h]jz)}(hjh]h mode_set_nofb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubj)}(hhh](h)}(hThis callback is used to update the display mode of a CRTC without changing anything of the primary plane configuration. This fits the requirement of atomic and hence is used by the atomic helpers.h]hThis callback is used to update the display mode of a CRTC without changing anything of the primary plane configuration. This fits the requirement of atomic and hence is used by the atomic helpers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hXdNote that the display pipe is completely off when this function is called. Atomic drivers which need hardware to be running before they program the new display mode (e.g. because they implement runtime PM) should not use this hook. This is because the helper library calls this hook only once per mode change and not every time the display pipeline is suspended using either DPMS or the new "ACTIVE" property. Which means register values set in this callback might get reset when the CRTC is suspended, but not restored. Such drivers should instead move all their CRTC setup into the **atomic_enable** callback.h](hXMNote that the display pipe is completely off when this function is called. Atomic drivers which need hardware to be running before they program the new display mode (e.g. because they implement runtime PM) should not use this hook. This is because the helper library calls this hook only once per mode change and not every time the display pipeline is suspended using either DPMS or the new “ACTIVE” property. Which means register values set in this callback might get reset when the CRTC is suspended, but not restored. Such drivers should instead move all their CRTC setup into the }(hjhhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hThis callback is optional.h]hThis callback is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjjubjn)}(hX0``mode_set_base`` This callback is used by the legacy CRTC helpers to set a new framebuffer and scanout position. It is optional and used as an optimized fast-path instead of a full mode set operation with all the resulting flickering. If it is not present drm_crtc_helper_set_config() will fall back to a full modeset, using the **mode_set** callback. Since it can't update other planes it's incompatible with atomic modeset support. This callback is only used by the CRTC helpers and deprecated. RETURNS: 0 on success or a negative error code on failure. h](jt)}(h``mode_set_base``h]jz)}(hjh]h mode_set_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubj)}(hhh](h)}(hXThis callback is used by the legacy CRTC helpers to set a new framebuffer and scanout position. It is optional and used as an optimized fast-path instead of a full mode set operation with all the resulting flickering. If it is not present drm_crtc_helper_set_config() will fall back to a full modeset, using the **mode_set** callback. Since it can't update other planes it's incompatible with atomic modeset support.h](hX8This callback is used by the legacy CRTC helpers to set a new framebuffer and scanout position. It is optional and used as an optimized fast-path instead of a full mode set operation with all the resulting flickering. If it is not present drm_crtc_helper_set_config() will fall back to a full modeset, using the }(hjhhhNhNubj%)}(h **mode_set**h]hmode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh` callback. Since it can’t update other planes it’s incompatible with atomic modeset support.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(h>This callback is only used by the CRTC helpers and deprecated.h]h>This callback is only used by the CRTC helpers and deprecated.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(hRETURNS:h]hRETURNS:}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhKhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjjubjn)}(hXZ``mode_set_base_atomic`` This callback is used by the fbdev helpers to set a new framebuffer and scanout without sleeping, i.e. from an atomic calling context. It is only used to implement kgdb support. This callback is optional and only needed for kgdb support in the fbdev helpers. RETURNS: 0 on success or a negative error code on failure. h](jt)}(h``mode_set_base_atomic``h]jz)}(hjrh]hmode_set_base_atomic}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hjlubj)}(hhh](h)}(hThis callback is used by the fbdev helpers to set a new framebuffer and scanout without sleeping, i.e. from an atomic calling context. It is only used to implement kgdb support.h]hThis callback is used by the fbdev helpers to set a new framebuffer and scanout without sleeping, i.e. from an atomic calling context. It is only used to implement kgdb support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hPThis callback is optional and only needed for kgdb support in the fbdev helpers.h]hPThis callback is optional and only needed for kgdb support in the fbdev helpers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hRETURNS:h]hRETURNS:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjjubjn)}(hXd``disable`` This callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own :c:type:`drm_encoder_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **disable** must be the inverse of **atomic_enable** for atomic drivers. Atomic drivers should consider to use **atomic_disable** instead of this one. NOTE: With legacy CRTC helpers there's a big semantic difference between **disable** and other hooks (like **prepare** or **dpms**) used to shut down a CRTC: **disable** is only called when also logically disabling the display pipeline and needs to release any resources acquired in **mode_set** (like shared PLLs, or again release pinned framebuffers). Therefore **disable** must be the inverse of **mode_set** plus **commit** for drivers still using legacy CRTC helpers, which is different from the rules under atomic. h](jt)}(h ``disable``h]jz)}(hjh]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM.hjubj)}(hhh](h)}(hXThis callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own :c:type:`drm_encoder_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc().h](hThis callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own }(hjhhhNhNubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]jz)}(hjh]h drm_encoder_helper_funcs.disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hXThis hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **disable** must be the inverse of **atomic_enable** for atomic drivers. Atomic drivers should consider to use **atomic_disable** instead of this one.h](hXThis hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don’t need to implement it if there’s no need to disable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new “ACTIVE” property) works }(hj#hhhNhNubj%)}(h **disable**h]hdisable}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubh must be the inverse of }(hj#hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubh; for atomic drivers. Atomic drivers should consider to use }(hj#hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubh instead of this one.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hNOTE:h]hNOTE:}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM$hjubh)}(hX[With legacy CRTC helpers there's a big semantic difference between **disable** and other hooks (like **prepare** or **dpms**) used to shut down a CRTC: **disable** is only called when also logically disabling the display pipeline and needs to release any resources acquired in **mode_set** (like shared PLLs, or again release pinned framebuffers).h](hEWith legacy CRTC helpers there’s a big semantic difference between }(hjwhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh and other hooks (like }(hjwhhhNhNubj%)}(h **prepare**h]hprepare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh or }(hjwhhhNhNubj%)}(h**dpms**h]hdpms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh) used to shut down a CRTC: }(hjwhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubhr is only called when also logically disabling the display pipeline and needs to release any resources acquired in }(hjwhhhNhNubj%)}(h **mode_set**h]hmode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh: (like shared PLLs, or again release pinned framebuffers).}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM&hjubh)}(hTherefore **disable** must be the inverse of **mode_set** plus **commit** for drivers still using legacy CRTC helpers, which is different from the rules under atomic.h](h Therefore }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh must be the inverse of }(hjhhhNhNubj%)}(h **mode_set**h]hmode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh plus }(hjhhhNhNubj%)}(h **commit**h]hcommit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh] for drivers still using legacy CRTC helpers, which is different from the rules under atomic.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM.hjjubjn)}(hX``atomic_check`` Drivers should check plane-update related CRTC constraints in this hook. They can also check mode related limitations but need to be aware of the calling order, since this hook is used by drm_atomic_helper_check_planes() whereas the preparations needed to check output routing and the display mode is done in drm_atomic_helper_check_modeset(). Therefore drivers that want to check output routing and display mode constraints in this callback must ensure that drm_atomic_helper_check_modeset() has been called beforehand. This is calling order used by the default helper implementation in drm_atomic_helper_check(). When using drm_atomic_helper_check_planes() this hook is called after the :c:type:`drm_plane_helper_funcs.atomic_check ` hook for planes, which allows drivers to assign shared resources requested by planes in this callback here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked. This function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached. This callback is used by the atomic modeset helpers, but it is optional. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state object passed-in. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into **mode_valid**. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. h](jt)}(h``atomic_check``h]jz)}(hj7 h]h atomic_check}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5 ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMbhj1 ubj)}(hhh](h)}(hXfDrivers should check plane-update related CRTC constraints in this hook. They can also check mode related limitations but need to be aware of the calling order, since this hook is used by drm_atomic_helper_check_planes() whereas the preparations needed to check output routing and the display mode is done in drm_atomic_helper_check_modeset(). Therefore drivers that want to check output routing and display mode constraints in this callback must ensure that drm_atomic_helper_check_modeset() has been called beforehand. This is calling order used by the default helper implementation in drm_atomic_helper_check().h]hXfDrivers should check plane-update related CRTC constraints in this hook. They can also check mode related limitations but need to be aware of the calling order, since this hook is used by drm_atomic_helper_check_planes() whereas the preparations needed to check output routing and the display mode is done in drm_atomic_helper_check_modeset(). Therefore drivers that want to check output routing and display mode constraints in this callback must ensure that drm_atomic_helper_check_modeset() has been called beforehand. This is calling order used by the default helper implementation in drm_atomic_helper_check().}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM5hjM ubh)}(hXWhen using drm_atomic_helper_check_planes() this hook is called after the :c:type:`drm_plane_helper_funcs.atomic_check ` hook for planes, which allows drivers to assign shared resources requested by planes in this callback here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked.h](hJWhen using drm_atomic_helper_check_planes() this hook is called after the }(hj_ hhhNhNubh)}(hF:c:type:`drm_plane_helper_funcs.atomic_check `h]jz)}(hji h]h#drm_plane_helper_funcs.atomic_check}(hjk hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjg ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM@hj_ ubhX  hook for planes, which allows drivers to assign shared resources requested by planes in this callback here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked.}(hj_ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hM@hjM ubh)}(hXThis function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached.h]hXThis function is also allowed to inspect any other object’s state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMGhjM ubh)}(hHThis callback is used by the atomic modeset helpers, but it is optional.h]hHThis callback is used by the atomic modeset helpers, but it is optional.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMNhjM ubh)}(hNOTE:h]hNOTE:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMQhjM ubh)}(hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state object passed-in.h]hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state object passed-in.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMShjM ubh)}(hXLAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into **mode_valid**.h](hAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in }(hj hhhNhNubh)}(h-:c:type:`drm_connector.modes `h]jz)}(hj h]hdrm_connector.modes}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMWhj ubha. To ensure that modes are filtered consistently put any CRTC constraints and limits checks into }(hj hhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMWhjM ubh)}(hRETURNS:h]hRETURNS:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM]hjM ubh)}(h0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](h0 on success, -EINVAL if the state or the transition can’t be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a }(hj hhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hj* h]hdrm_modeset_lock}(hj, hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj( ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM_hj ubh deadlock.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjG hM_hjM ubeh}(h]h ]h"]h$]h&]uh1jhj1 ubeh}(h]h ]h"]h$]h&]uh1jmhjL hMbhjjubjn)}(hX``atomic_begin`` Drivers should prepare for an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might be vblank evasion, blocking updates by setting bits or doing preparatory work for e.g. manual update display. This hook is called before any plane commit functions are called. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. h](jt)}(h``atomic_begin``h]jz)}(hjd h]h atomic_begin}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMwhj^ ubj)}(hhh](h)}(hDrivers should prepare for an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might be vblank evasion, blocking updates by setting bits or doing preparatory work for e.g. manual update display.h]hDrivers should prepare for an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might be vblank evasion, blocking updates by setting bits or doing preparatory work for e.g. manual update display.}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMjhjz ubh)}(hAThis hook is called before any plane commit functions are called.h]hAThis hook is called before any plane commit functions are called.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMohjz ubh)}(hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.h]hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMqhjz ubh)}(hHThis callback is used by the atomic modeset helpers, but it is optional.h]hHThis callback is used by the atomic modeset helpers, but it is optional.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMvhjz ubeh}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jmhjy hMwhjjubjn)}(hXS``atomic_flush`` Drivers should finalize an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might include checking that vblank evasion was successful, unblocking updates by setting bits or setting the GO bit to flush out all updates. Simple hardware or hardware with special requirements can commit and flush out all updates for all planes from this hook and forgo all the other commit hooks for plane updates. This hook is called after any plane commit functions are called. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. h](jt)}(h``atomic_flush``h]jz)}(hj h]h atomic_flush}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh](h)}(hDrivers should finalize an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might include checking that vblank evasion was successful, unblocking updates by setting bits or setting the GO bit to flush out all updates.h]hDrivers should finalize an atomic update of multiple planes on a CRTC in this hook. Depending upon hardware this might include checking that vblank evasion was successful, unblocking updates by setting bits or setting the GO bit to flush out all updates.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM~hj ubh)}(hSimple hardware or hardware with special requirements can commit and flush out all updates for all planes from this hook and forgo all the other commit hooks for plane updates.h]hSimple hardware or hardware with special requirements can commit and flush out all updates for all planes from this hook and forgo all the other commit hooks for plane updates.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(h@This hook is called after any plane commit functions are called.h]h@This hook is called after any plane commit functions are called.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.h]hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hHThis callback is used by the atomic modeset helpers, but it is optional.h]hHThis callback is used by the atomic modeset helpers, but it is optional.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjjubjn)}(hX;``atomic_enable`` This callback should be used to enable the CRTC. With the atomic drivers it is called before all encoders connected to this CRTC are enabled through the encoder's own :c:type:`drm_encoder_helper_funcs.enable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used only by atomic helpers, for symmetry with **atomic_disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **atomic_enable** must be the inverse of **atomic_disable** for atomic drivers. This function is optional. h](jt)}(h``atomic_enable``h]jz)}(hjA h]h atomic_enable}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj? ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj; ubj)}(hhh](h)}(hXThis callback should be used to enable the CRTC. With the atomic drivers it is called before all encoders connected to this CRTC are enabled through the encoder's own :c:type:`drm_encoder_helper_funcs.enable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc().h](hThis callback should be used to enable the CRTC. With the atomic drivers it is called before all encoders connected to this CRTC are enabled through the encoder’s own }(hjZ hhhNhNubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]jz)}(hjd h]hdrm_encoder_helper_funcs.enable}(hjf hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjb ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjZ ubh hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hjZ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhjW ubh)}(hX\This hook is used only by atomic helpers, for symmetry with **atomic_disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the CRTC level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **atomic_enable** must be the inverse of **atomic_disable** for atomic drivers.h](h` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used only by atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the CRTC level. This function is optional. h](jt)}(h``atomic_disable``h]jz)}(hj h]hatomic_disable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh](h)}(hXThis callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own :c:type:`drm_encoder_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc().h](hThis callback should be used to disable the CRTC. With the atomic drivers it is called after all encoders connected to this CRTC have been shut off already using their own }(hj hhhNhNubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]jz)}(hj h]h drm_encoder_helper_funcs.disable}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh hook. If that sequence is too simple drivers can just add their own hooks and call it from this CRTC callback here by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1 hMhj ubh)}(hThis hook is used only by atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the CRTC level.h]hThis hook is used only by atomic helpers. Atomic drivers don’t need to implement it if there’s no need to disable anything at the CRTC level.}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hThis function is optional.h]hThis function is optional.}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjjubjn)}(hXC``get_scanout_position`` Called by vblank timestamping code. Returns the current display scanout position from a CRTC and an optional accurate ktime_get() timestamp of when the position was measured. Note that this is a helper callback which is only used if a driver uses drm_crtc_vblank_helper_get_vblank_timestamp() for the **drm_crtc_funcs.get_vblank_timestamp** callback. Parameters: crtc: The CRTC. in_vblank_irq: True when called from drm_crtc_handle_vblank(). Some drivers need to apply some workarounds for gpu-specific vblank irq quirks if the flag is set. vpos: Target location for current vertical scanout position. hpos: Target location for current horizontal scanout position. stime: Target location for timestamp taken immediately before scanout position query. Can be NULL to skip timestamp. etime: Target location for timestamp taken immediately after scanout position query. Can be NULL to skip timestamp. mode: Current display timings. Returns vpos as a positive number while in active scanout area. Returns vpos as a negative number inside vblank, counting the number of scanlines to go until end of vblank, e.g., -1 means "one scanline until start of active scanout / end of vblank." Returns: True on success, false if a reliable scanout position counter could not be read out.h](jt)}(h``get_scanout_position``h]jz)}(hjk h]hget_scanout_position}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhji ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhje ubj)}(hhh](h)}(h#Called by vblank timestamping code.h]h#Called by vblank timestamping code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hX:Returns the current display scanout position from a CRTC and an optional accurate ktime_get() timestamp of when the position was measured. Note that this is a helper callback which is only used if a driver uses drm_crtc_vblank_helper_get_vblank_timestamp() for the **drm_crtc_funcs.get_vblank_timestamp** callback.h](hX Returns the current display scanout position from a CRTC and an optional accurate ktime_get() timestamp of when the position was measured. Note that this is a helper callback which is only used if a driver uses drm_crtc_vblank_helper_get_vblank_timestamp() for the }(hj hhhNhNubj%)}(h'**drm_crtc_funcs.get_vblank_timestamp**h]h#drm_crtc_funcs.get_vblank_timestamp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh callback.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(h Parameters:h]h Parameters:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubji)}(hhh](jn)}(hcrtc: The CRTC.h](jt)}(hcrtc:h]hcrtc:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh]h)}(h The CRTC.h]h The CRTC.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(hin_vblank_irq: True when called from drm_crtc_handle_vblank(). Some drivers need to apply some workarounds for gpu-specific vblank irq quirks if the flag is set.h](jt)}(hin_vblank_irq:h]hin_vblank_irq:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh]h)}(hTrue when called from drm_crtc_handle_vblank(). Some drivers need to apply some workarounds for gpu-specific vblank irq quirks if the flag is set.h]hTrue when called from drm_crtc_handle_vblank(). Some drivers need to apply some workarounds for gpu-specific vblank irq quirks if the flag is set.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(h hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj; ubah}(h]h ]h"]h$]h&]uh1jhj( ubeh}(h]h ]h"]h$]h&]uh1jmhj: hMhj ubjn)}(h>hpos: Target location for current horizontal scanout position.h](jt)}(hhpos:h]hhpos:}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjY ubj)}(hhh]h)}(h8Target location for current horizontal scanout position.h]h8Target location for current horizontal scanout position.}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjl ubah}(h]h ]h"]h$]h&]uh1jhjY ubeh}(h]h ]h"]h$]h&]uh1jmhjk hMhj ubjn)}(htstime: Target location for timestamp taken immediately before scanout position query. Can be NULL to skip timestamp.h](jt)}(hstime:h]hstime:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh]h)}(hmTarget location for timestamp taken immediately before scanout position query. Can be NULL to skip timestamp.h]hmTarget location for timestamp taken immediately before scanout position query. Can be NULL to skip timestamp.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(hsetime: Target location for timestamp taken immediately after scanout position query. Can be NULL to skip timestamp.h](jt)}(hetime:h]hetime:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh]h)}(hlTarget location for timestamp taken immediately after scanout position query. Can be NULL to skip timestamp.h]hlTarget location for timestamp taken immediately after scanout position query. Can be NULL to skip timestamp.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(hmode: Current display timings. h](jt)}(hmode:h]hmode:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh]h)}(hCurrent display timings.h]hCurrent display timings.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(hReturns vpos as a positive number while in active scanout area. Returns vpos as a negative number inside vblank, counting the number of scanlines to go until end of vblank, e.g., -1 means "one scanline until start of active scanout / end of vblank."h]hReturns vpos as a positive number while in active scanout area. Returns vpos as a negative number inside vblank, counting the number of scanlines to go until end of vblank, e.g., -1 means “one scanline until start of active scanout / end of vblank.”}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hReturns:h]hReturns:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hTTrue on success, false if a reliable scanout position counter could not be read out.h]hTTrue on success, false if a reliable scanout position counter could not be read out.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubh)}(h**Description**h]j%)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:hhubh)}(hWThese hooks are used by the legacy CRTC helpers and the new atomic modesetting helpers.h]hWThese hooks are used by the legacy CRTC helpers and the new atomic modesetting helpers.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhK>hj:hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_crtc_helper_add (C function)c.drm_crtc_helper_addhNtauh1jxhj:hhhjhNubj)}(hhh](j)}(h[void drm_crtc_helper_add (struct drm_crtc *crtc, const struct drm_crtc_helper_funcs *funcs)h]j)}(hZvoid drm_crtc_helper_add(struct drm_crtc *crtc, const struct drm_crtc_helper_funcs *funcs)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_crtc_helper_addh]j)}(hdrm_crtc_helper_addh]hdrm_crtc_helper_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubhdesc_parameterlist)}(hB(struct drm_crtc *crtc, const struct drm_crtc_helper_funcs *funcs)h](hdesc_parameter)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj modnameN classnameNjj)}j]j ASTIdentifier)}jjsbc.drm_crtc_helper_addasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]pah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)const struct drm_crtc_helper_funcs *funcsh](j)}(hconsth]hconst}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hdrm_crtc_helper_funcsh]hdrm_crtc_helper_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j&c.drm_crtc_helper_addasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h!sets the helper vtable for a crtch]h!sets the helper vtable for a crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj:hjhNubj)}(h**Parameters** ``struct drm_crtc *crtc`` DRM CRTC ``const struct drm_crtc_helper_funcs *funcs`` helper vtable to set for **crtc**h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` DRM CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj?h]hstruct drm_crtc *crtc}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj9ubj)}(hhh]h)}(hDRM CRTCh]hDRM CRTC}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThMhj6ubjn)}(hO``const struct drm_crtc_helper_funcs *funcs`` helper vtable to set for **crtc**h](jt)}(h-``const struct drm_crtc_helper_funcs *funcs``h]jz)}(hjxh]h)const struct drm_crtc_helper_funcs *funcs}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjrubj)}(hhh]h)}(h!helper vtable to set for **crtc**h](hhelper vtable to set for }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj6ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_encoder_helper_funcs (C struct)c.drm_encoder_helper_funcshNtauh1jxhj:hhhjhNubj)}(hhh](j)}(hdrm_encoder_helper_funcsh]j)}(hstruct drm_encoder_helper_funcsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_encoder_helper_funcsh]j)}(hjh]hdrm_encoder_helper_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hhelper operations for encodersh]hhelper operations for encoders}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjj:jj:jjjuh1jhhhj:hjhNubj)}(hX4**Definition**:: struct drm_encoder_helper_funcs { void (*dpms)(struct drm_encoder *encoder, int mode); enum drm_mode_status (*mode_valid)(struct drm_encoder *crtc, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_encoder *encoder,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*prepare)(struct drm_encoder *encoder); void (*commit)(struct drm_encoder *encoder); void (*mode_set)(struct drm_encoder *encoder,struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*atomic_mode_set)(struct drm_encoder *encoder,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); enum drm_connector_status (*detect)(struct drm_encoder *encoder, struct drm_connector *connector); void (*atomic_disable)(struct drm_encoder *encoder, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_encoder *encoder, struct drm_atomic_state *state); void (*disable)(struct drm_encoder *encoder); void (*enable)(struct drm_encoder *encoder); int (*atomic_check)(struct drm_encoder *encoder,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); }; **Members** ``dpms`` Callback to control power levels on the encoder. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy encoder helpers to implement DPMS functionality in drm_helper_connector_dpms(). This callback is also used to disable an encoder by calling it with DRM_MODE_DPMS_OFF if the **disable** hook isn't used. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **enable** and **disable** should be used. ``mode_valid`` This callback is used to check if a specific mode is valid in this encoder. This should be implemented if the encoder has some sort of restriction in the modes it can display. For example, a given encoder may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). This function is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup** or **atomic_check**. RETURNS: drm_mode_status Enum ``mode_fixup`` This callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final :c:type:`drm_connector` or a :c:type:`drm_bridge`. The parameter adjusted_mode is the input mode the encoder requires. It can be modified by this callback and does not need to match mode. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details. This function is used by both legacy CRTC helpers and atomic helpers. This hook is optional. NOTE: This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter. This is in contrast to the legacy CRTC helpers where this was allowed. Atomic drivers which need to inspect and adjust more state should instead use the **atomic_check** callback. If **atomic_check** is used, this hook isn't called since **atomic_check** allows a strict superset of the functionality of **mode_fixup**. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any encoder constraints and limits checks into **mode_valid**. RETURNS: True if an acceptable configuration is possible, false if the modeset operation should be rejected. ``prepare`` This callback should prepare the encoder for a subsequent modeset, which in practice means the driver should disable the encoder if it is running. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_OFF. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **disable** should be used. ``commit`` This callback should commit the new mode on the encoder after a modeset, which in practice means the driver should enable the encoder. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_ON. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **enable** should be used. ``mode_set`` This callback is used to update the display mode of an encoder. Note that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspend using either DPMS or the new "ACTIVE" property. Such drivers should instead move all their encoder setup into the **enable** callback. This callback is used both by the legacy CRTC helpers and the atomic modeset helpers. It is optional in the atomic helpers. NOTE: If the driver uses the atomic modeset helpers and needs to inspect the connector state or connector display info during mode setting, **atomic_mode_set** can be used instead. ``atomic_mode_set`` This callback is used to update the display mode of an encoder. Note that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspended using either DPMS or the new "ACTIVE" property. Such drivers should instead move all their encoder setup into the **enable** callback. This callback is used by the atomic modeset helpers in place of the **mode_set** callback, if set by the driver. It is optional and should be used instead of **mode_set** if the driver needs to inspect the connector state or display info, since there is no direct way to go from the encoder to the current connector. ``detect`` This callback can be used by drivers who want to do detection on the encoder object instead of in connector functions. It is not used by any helper and therefore has purely driver-specific semantics. New drivers shouldn't use this and instead just implement their own private callbacks. FIXME: This should just be converted into a pile of driver vfuncs. Currently radeon, amdgpu and nouveau are using it. ``atomic_disable`` This callback should be used to disable the encoder. With the atomic drivers it is called before this encoder's CRTC has been shut off using their own :c:type:`drm_crtc_helper_funcs.atomic_disable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This callback is a variant of **disable** that provides the atomic state to the driver. If **atomic_disable** is implemented, **disable** is not called by the helpers. This hook is only used by atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **atomic_disable** must be the inverse of **atomic_enable**. ``atomic_enable`` This callback should be used to enable the encoder. It is called after this encoder's CRTC has been enabled using their own :c:type:`drm_crtc_helper_funcs.atomic_enable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This callback is a variant of **enable** that provides the atomic state to the driver. If **atomic_enable** is implemented, **enable** is not called by the helpers. This hook is only used by atomic helpers, it is the opposite of **atomic_disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the encoder level. To ensure that runtime PM handling works **atomic_enable** must be the inverse of **atomic_disable**. ``disable`` This callback should be used to disable the encoder. With the atomic drivers it is called before this encoder's CRTC has been shut off using their own :c:type:`drm_crtc_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **disable** must be the inverse of **enable** for atomic drivers. For atomic drivers also consider **atomic_disable** and save yourself from having to read the NOTE below! NOTE: With legacy CRTC helpers there's a big semantic difference between **disable** and other hooks (like **prepare** or **dpms**) used to shut down a encoder: **disable** is only called when also logically disabling the display pipeline and needs to release any resources acquired in **mode_set** (like shared PLLs, or again release pinned framebuffers). Therefore **disable** must be the inverse of **mode_set** plus **commit** for drivers still using legacy CRTC helpers, which is different from the rules under atomic. ``enable`` This callback should be used to enable the encoder. With the atomic drivers it is called after this encoder's CRTC has been enabled using their own :c:type:`drm_crtc_helper_funcs.enable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is only used by atomic helpers, it is the opposite of **disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **enable** must be the inverse of **disable** for atomic drivers. ``atomic_check`` This callback is used to validate encoder state for atomic drivers. Since the encoder is the object connecting the CRTC and connector it gets passed both states, to be able to validate interactions and update the CRTC to match what the encoder needs for the requested connector. Since this provides a strict superset of the functionality of **mode_fixup** (the requested and adjusted modes are both available through the passed in :c:type:`struct drm_crtc_state `) **mode_fixup** is not called when **atomic_check** is implemented. This function is used by the atomic helpers, but it is optional. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall :c:type:`drm_atomic_state` update tracking structure. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any encoder constraints and limits checks into **mode_valid**. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh:}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj>ubj@)}(hXstruct drm_encoder_helper_funcs { void (*dpms)(struct drm_encoder *encoder, int mode); enum drm_mode_status (*mode_valid)(struct drm_encoder *crtc, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_encoder *encoder,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*prepare)(struct drm_encoder *encoder); void (*commit)(struct drm_encoder *encoder); void (*mode_set)(struct drm_encoder *encoder,struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*atomic_mode_set)(struct drm_encoder *encoder,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); enum drm_connector_status (*detect)(struct drm_encoder *encoder, struct drm_connector *connector); void (*atomic_disable)(struct drm_encoder *encoder, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_encoder *encoder, struct drm_atomic_state *state); void (*disable)(struct drm_encoder *encoder); void (*enable)(struct drm_encoder *encoder); int (*atomic_check)(struct drm_encoder *encoder,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); };h]hXstruct drm_encoder_helper_funcs { void (*dpms)(struct drm_encoder *encoder, int mode); enum drm_mode_status (*mode_valid)(struct drm_encoder *crtc, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_encoder *encoder,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*prepare)(struct drm_encoder *encoder); void (*commit)(struct drm_encoder *encoder); void (*mode_set)(struct drm_encoder *encoder,struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*atomic_mode_set)(struct drm_encoder *encoder,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); enum drm_connector_status (*detect)(struct drm_encoder *encoder, struct drm_connector *connector); void (*atomic_disable)(struct drm_encoder *encoder, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_encoder *encoder, struct drm_atomic_state *state); void (*disable)(struct drm_encoder *encoder); void (*enable)(struct drm_encoder *encoder); int (*atomic_check)(struct drm_encoder *encoder,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); };}hj_sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj>ubh)}(h **Members**h]j%)}(hjph]hMembers}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj>ubji)}(hhh](jn)}(hXn``dpms`` Callback to control power levels on the encoder. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy encoder helpers to implement DPMS functionality in drm_helper_connector_dpms(). This callback is also used to disable an encoder by calling it with DRM_MODE_DPMS_OFF if the **disable** hook isn't used. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **enable** and **disable** should be used. h](jt)}(h``dpms``h]jz)}(hjh]hdpms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubj)}(hhh](h)}(hCallback to control power levels on the encoder. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy encoder helpers to implement DPMS functionality in drm_helper_connector_dpms().h]hCallback to control power levels on the encoder. If the mode passed in is unsupported, the provider must use the next lowest power level. This is used by the legacy encoder helpers to implement DPMS functionality in drm_helper_connector_dpms().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hyThis callback is also used to disable an encoder by calling it with DRM_MODE_DPMS_OFF if the **disable** hook isn't used.h](h]This callback is also used to disable an encoder by calling it with DRM_MODE_DPMS_OFF if the }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh hook isn’t used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **enable** and **disable** should be used.h](hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling and disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead }(hjhhhNhNubj%)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hXH``mode_valid`` This callback is used to check if a specific mode is valid in this encoder. This should be implemented if the encoder has some sort of restriction in the modes it can display. For example, a given encoder may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). This function is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup** or **atomic_check**. RETURNS: drm_mode_status Enum h](jt)}(h``mode_valid``h]jz)}(hjh]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM/hjubj)}(hhh](h)}(hXThis callback is used to check if a specific mode is valid in this encoder. This should be implemented if the encoder has some sort of restriction in the modes it can display. For example, a given encoder may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed.h]hXThis callback is used to check if a specific mode is valid in this encoder. This should be implemented if the encoder has some sort of restriction in the modes it can display. For example, a given encoder may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubh)}(hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().h]hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubh)}(hThis function is optional.h]hThis function is optional.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM"hj3ubh)}(hNOTE:h]hNOTE:}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM$hj3ubh)}(hXrSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup** or **atomic_check**.h](hXOSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in }(hjrhhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh or }(hjrhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM&hj3ubh)}(hRETURNS:h]hRETURNS:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM-hj3ubh)}(hdrm_mode_status Enumh]hdrm_mode_status Enum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM/hj3ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hM/hjubjn)}(hXz``mode_fixup`` This callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final :c:type:`drm_connector` or a :c:type:`drm_bridge`. The parameter adjusted_mode is the input mode the encoder requires. It can be modified by this callback and does not need to match mode. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details. This function is used by both legacy CRTC helpers and atomic helpers. This hook is optional. NOTE: This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter. This is in contrast to the legacy CRTC helpers where this was allowed. Atomic drivers which need to inspect and adjust more state should instead use the **atomic_check** callback. If **atomic_check** is used, this hook isn't called since **atomic_check** allows a strict superset of the functionality of **mode_fixup**. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any encoder constraints and limits checks into **mode_valid**. RETURNS: True if an acceptable configuration is possible, false if the modeset operation should be rejected. h](jt)}(h``mode_fixup``h]jz)}(hjh]h mode_fixup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMZhjubj)}(hhh](h)}(hXThis callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final :c:type:`drm_connector` or a :c:type:`drm_bridge`. The parameter adjusted_mode is the input mode the encoder requires. It can be modified by this callback and does not need to match mode. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details.h](hThis callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM7hjubh or a }(hjhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjh]h drm_bridge}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhM7hjubh. The parameter adjusted_mode is the input mode the encoder requires. It can be modified by this callback and does not need to match mode. See also }(hjhhhNhNubh)}(h7:c:type:`drm_crtc_state.adjusted_mode `h]jz)}(hj>h]hdrm_crtc_state.adjusted_mode}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjhM7hjubh for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM7hjubh)}(h\This function is used by both legacy CRTC helpers and atomic helpers. This hook is optional.h]h\This function is used by both legacy CRTC helpers and atomic helpers. This hook is optional.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM>hjubh)}(hNOTE:h]hNOTE:}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMAhjubh)}(hXIThis function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter.h]hXKThis function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace’s request to just check whether a configuration would be possible). Atomic drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in adjusted_mode parameter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMChjubh)}(hFThis is in contrast to the legacy CRTC helpers where this was allowed.h]hFThis is in contrast to the legacy CRTC helpers where this was allowed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMIhjubh)}(hAtomic drivers which need to inspect and adjust more state should instead use the **atomic_check** callback. If **atomic_check** is used, this hook isn't called since **atomic_check** allows a strict superset of the functionality of **mode_fixup**.h](hRAtomic drivers which need to inspect and adjust more state should instead use the }(hjhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh callback. If }(hjhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh) is used, this hook isn’t called since }(hjhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 allows a strict superset of the functionality of }(hjhhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMLhjubh)}(hXOAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any encoder constraints and limits checks into **mode_valid**.h](hAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in }(hjhhhNhNubh)}(h-:c:type:`drm_connector.modes `h]jz)}(hjh]hdrm_connector.modes}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMQhjubhd. To ensure that modes are filtered consistently put any encoder constraints and limits checks into }(hjhhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMQhjubh)}(hRETURNS:h]hRETURNS:}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMWhjubh)}(hcTrue if an acceptable configuration is possible, false if the modeset operation should be rejected.h]hcTrue if an acceptable configuration is possible, false if the modeset operation should be rejected.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMZhjubjn)}(hX``prepare`` This callback should prepare the encoder for a subsequent modeset, which in practice means the driver should disable the encoder if it is running. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_OFF. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **disable** should be used. h](jt)}(h ``prepare``h]jz)}(hjlh]hprepare}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMkhjfubj)}(hhh](h)}(hThis callback should prepare the encoder for a subsequent modeset, which in practice means the driver should disable the encoder if it is running. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_OFF.h](hThis callback should prepare the encoder for a subsequent modeset, which in practice means the driver should disable the encoder if it is running. Most drivers ended up implementing this by calling their }(hjhhhNhNubj%)}(h**dpms**h]hdpms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh hook with DRM_MODE_DPMS_OFF.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMchjubh)}(hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **disable** should be used.h](hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for disabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhhjubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhMkhjubjn)}(hX``commit`` This callback should commit the new mode on the encoder after a modeset, which in practice means the driver should enable the encoder. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_ON. This callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **enable** should be used. h](jt)}(h ``commit``h]jz)}(hjh]hcommit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMzhjubj)}(hhh](h)}(hThis callback should commit the new mode on the encoder after a modeset, which in practice means the driver should enable the encoder. Most drivers ended up implementing this by calling their **dpms** hook with DRM_MODE_DPMS_ON.h](hThis callback should commit the new mode on the encoder after a modeset, which in practice means the driver should enable the encoder. Most drivers ended up implementing this by calling their }(hjhhhNhNubj%)}(h**dpms**h]hdpms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh hook with DRM_MODE_DPMS_ON.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMrhjubh)}(hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead **enable** should be used.h](hThis callback is used by the legacy CRTC helpers. Atomic helpers also support using this hook for enabling an encoder to facilitate transitions to atomic, but it is deprecated. Instead }(hjhhhNhNubj%)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh should be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMzhjubjn)}(hXF``mode_set`` This callback is used to update the display mode of an encoder. Note that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspend using either DPMS or the new "ACTIVE" property. Such drivers should instead move all their encoder setup into the **enable** callback. This callback is used both by the legacy CRTC helpers and the atomic modeset helpers. It is optional in the atomic helpers. NOTE: If the driver uses the atomic modeset helpers and needs to inspect the connector state or connector display info during mode setting, **atomic_mode_set** can be used instead. h](jt)}(h ``mode_set``h]jz)}(hjFh]hmode_set}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj@ubj)}(hhh](h)}(h?This callback is used to update the display mode of an encoder.h]h?This callback is used to update the display mode of an encoder.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj\ubh)}(hXNote that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspend using either DPMS or the new "ACTIVE" property. Such drivers should instead move all their encoder setup into the **enable** callback.h](hXNote that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspend using either DPMS or the new “ACTIVE” property. Such drivers should instead move all their encoder setup into the }(hjnhhhNhNubj%)}(h **enable**h]henable}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh callback.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj\ubh)}(h{This callback is used both by the legacy CRTC helpers and the atomic modeset helpers. It is optional in the atomic helpers.h]h{This callback is used both by the legacy CRTC helpers and the atomic modeset helpers. It is optional in the atomic helpers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj\ubh)}(hNOTE:h]hNOTE:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj\ubh)}(hIf the driver uses the atomic modeset helpers and needs to inspect the connector state or connector display info during mode setting, **atomic_mode_set** can be used instead.h](hIf the driver uses the atomic modeset helpers and needs to inspect the connector state or connector display info during mode setting, }(hjhhhNhNubj%)}(h**atomic_mode_set**h]hatomic_mode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh can be used instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjubjn)}(hXY``atomic_mode_set`` This callback is used to update the display mode of an encoder. Note that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspended using either DPMS or the new "ACTIVE" property. Such drivers should instead move all their encoder setup into the **enable** callback. This callback is used by the atomic modeset helpers in place of the **mode_set** callback, if set by the driver. It is optional and should be used instead of **mode_set** if the driver needs to inspect the connector state or display info, since there is no direct way to go from the encoder to the current connector. h](jt)}(h``atomic_mode_set``h]jz)}(hjh]hatomic_mode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubj)}(hhh](h)}(h?This callback is used to update the display mode of an encoder.h]h?This callback is used to update the display mode of an encoder.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hXNote that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspended using either DPMS or the new "ACTIVE" property. Such drivers should instead move all their encoder setup into the **enable** callback.h](hXNote that the display pipe is completely off when this function is called. Drivers which need hardware to be running before they program the new display mode (because they implement runtime PM) should not use this hook, because the helper library calls it only once and not every time the display pipeline is suspended using either DPMS or the new “ACTIVE” property. Such drivers should instead move all their encoder setup into the }(hjhhhNhNubj%)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hX<This callback is used by the atomic modeset helpers in place of the **mode_set** callback, if set by the driver. It is optional and should be used instead of **mode_set** if the driver needs to inspect the connector state or display info, since there is no direct way to go from the encoder to the current connector.h](hDThis callback is used by the atomic modeset helpers in place of the }(hj)hhhNhNubj%)}(h **mode_set**h]hmode_set}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubhN callback, if set by the driver. It is optional and should be used instead of }(hj)hhhNhNubj%)}(h **mode_set**h]hmode_set}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubh if the driver needs to inspect the connector state or display info, since there is no direct way to go from the encoder to the current connector.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hX``detect`` This callback can be used by drivers who want to do detection on the encoder object instead of in connector functions. It is not used by any helper and therefore has purely driver-specific semantics. New drivers shouldn't use this and instead just implement their own private callbacks. FIXME: This should just be converted into a pile of driver vfuncs. Currently radeon, amdgpu and nouveau are using it. h](jt)}(h ``detect``h]jz)}(hjnh]hdetect}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjhubj)}(hhh](h)}(hvThis callback can be used by drivers who want to do detection on the encoder object instead of in connector functions.h]hvThis callback can be used by drivers who want to do detection on the encoder object instead of in connector functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hIt is not used by any helper and therefore has purely driver-specific semantics. New drivers shouldn't use this and instead just implement their own private callbacks.h]hIt is not used by any helper and therefore has purely driver-specific semantics. New drivers shouldn’t use this and instead just implement their own private callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hFIXME:h]hFIXME:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hnThis should just be converted into a pile of driver vfuncs. Currently radeon, amdgpu and nouveau are using it.h]hnThis should just be converted into a pile of driver vfuncs. Currently radeon, amdgpu and nouveau are using it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hX``atomic_disable`` This callback should be used to disable the encoder. With the atomic drivers it is called before this encoder's CRTC has been shut off using their own :c:type:`drm_crtc_helper_funcs.atomic_disable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This callback is a variant of **disable** that provides the atomic state to the driver. If **atomic_disable** is implemented, **disable** is not called by the helpers. This hook is only used by atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **atomic_disable** must be the inverse of **atomic_enable**. h](jt)}(h``atomic_disable``h]jz)}(hjh]hatomic_disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubj)}(hhh](h)}(hXThis callback should be used to disable the encoder. With the atomic drivers it is called before this encoder's CRTC has been shut off using their own :c:type:`drm_crtc_helper_funcs.atomic_disable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc().h](hThis callback should be used to disable the encoder. With the atomic drivers it is called before this encoder’s CRTC has been shut off using their own }(hjhhhNhNubh)}(hF:c:type:`drm_crtc_helper_funcs.atomic_disable `h]jz)}(hjh]h$drm_crtc_helper_funcs.atomic_disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC’s callback by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hThis callback is a variant of **disable** that provides the atomic state to the driver. If **atomic_disable** is implemented, **disable** is not called by the helpers.h](hThis callback is a variant of }(hj hhhNhNubj%)}(h **disable**h]hdisable}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh2 that provides the atomic state to the driver. If }(hj hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh is implemented, }(hj hhhNhNubj%)}(h **disable**h]hdisable}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh is not called by the helpers.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hX'This hook is only used by atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **atomic_disable** must be the inverse of **atomic_enable**.h](hThis hook is only used by atomic helpers. Atomic drivers don’t need to implement it if there’s no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new “ACTIVE” property) works }(hjehhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh must be the inverse of }(hjehhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hXn``atomic_enable`` This callback should be used to enable the encoder. It is called after this encoder's CRTC has been enabled using their own :c:type:`drm_crtc_helper_funcs.atomic_enable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This callback is a variant of **enable** that provides the atomic state to the driver. If **atomic_enable** is implemented, **enable** is not called by the helpers. This hook is only used by atomic helpers, it is the opposite of **atomic_disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the encoder level. To ensure that runtime PM handling works **atomic_enable** must be the inverse of **atomic_disable**. h](jt)}(h``atomic_enable``h]jz)}(hjh]h atomic_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubj)}(hhh](h)}(hXThis callback should be used to enable the encoder. It is called after this encoder's CRTC has been enabled using their own :c:type:`drm_crtc_helper_funcs.atomic_enable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc().h](h~This callback should be used to enable the encoder. It is called after this encoder’s CRTC has been enabled using their own }(hjhhhNhNubh)}(hE:c:type:`drm_crtc_helper_funcs.atomic_enable `h]jz)}(hjh]h#drm_crtc_helper_funcs.atomic_enable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC’s callback by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hThis callback is a variant of **enable** that provides the atomic state to the driver. If **atomic_enable** is implemented, **enable** is not called by the helpers.h](hThis callback is a variant of }(hjhhhNhNubj%)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 that provides the atomic state to the driver. If }(hjhhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is implemented, }(hjhhhNhNubj%)}(h **enable**h]henable}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is not called by the helpers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hXThis hook is only used by atomic helpers, it is the opposite of **atomic_disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the encoder level. To ensure that runtime PM handling works **atomic_enable** must be the inverse of **atomic_disable**.h](h@This hook is only used by atomic helpers, it is the opposite of }(hj:hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh. Atomic drivers don’t need to implement it if there’s no need to enable anything at the encoder level. To ensure that runtime PM handling works }(hj:hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh must be the inverse of }(hj:hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hXw``disable`` This callback should be used to disable the encoder. With the atomic drivers it is called before this encoder's CRTC has been shut off using their own :c:type:`drm_crtc_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **disable** must be the inverse of **enable** for atomic drivers. For atomic drivers also consider **atomic_disable** and save yourself from having to read the NOTE below! NOTE: With legacy CRTC helpers there's a big semantic difference between **disable** and other hooks (like **prepare** or **dpms**) used to shut down a encoder: **disable** is only called when also logically disabling the display pipeline and needs to release any resources acquired in **mode_set** (like shared PLLs, or again release pinned framebuffers). Therefore **disable** must be the inverse of **mode_set** plus **commit** for drivers still using legacy CRTC helpers, which is different from the rules under atomic. h](jt)}(h ``disable``h]jz)}(hjh]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hjubj)}(hhh](h)}(hXThis callback should be used to disable the encoder. With the atomic drivers it is called before this encoder's CRTC has been shut off using their own :c:type:`drm_crtc_helper_funcs.disable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc().h](hThis callback should be used to disable the encoder. With the atomic drivers it is called before this encoder’s CRTC has been shut off using their own }(hjhhhNhNubh)}(h?:c:type:`drm_crtc_helper_funcs.disable `h]jz)}(hjh]hdrm_crtc_helper_funcs.disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC’s callback by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hXDThis hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don't need to implement it if there's no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **disable** must be the inverse of **enable** for atomic drivers.h](hX This hook is used both by legacy CRTC helpers and atomic helpers. Atomic drivers don’t need to implement it if there’s no need to disable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new “ACTIVE” property) works }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh must be the inverse of }(hjhhhNhNubj%)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh for atomic drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hiFor atomic drivers also consider **atomic_disable** and save yourself from having to read the NOTE below!h](h!For atomic drivers also consider }(hjhhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh6 and save yourself from having to read the NOTE below!}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hNOTE:h]hNOTE:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hX^With legacy CRTC helpers there's a big semantic difference between **disable** and other hooks (like **prepare** or **dpms**) used to shut down a encoder: **disable** is only called when also logically disabling the display pipeline and needs to release any resources acquired in **mode_set** (like shared PLLs, or again release pinned framebuffers).h](hEWith legacy CRTC helpers there’s a big semantic difference between }(hj?hhhNhNubj%)}(h **disable**h]hdisable}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh and other hooks (like }(hj?hhhNhNubj%)}(h **prepare**h]hprepare}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh or }(hj?hhhNhNubj%)}(h**dpms**h]hdpms}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh) used to shut down a encoder: }(hj?hhhNhNubj%)}(h **disable**h]hdisable}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubhr is only called when also logically disabling the display pipeline and needs to release any resources acquired in }(hj?hhhNhNubj%)}(h **mode_set**h]hmode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh: (like shared PLLs, or again release pinned framebuffers).}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh)}(hTherefore **disable** must be the inverse of **mode_set** plus **commit** for drivers still using legacy CRTC helpers, which is different from the rules under atomic.h](h Therefore }(hjhhhNhNubj%)}(h **disable**h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh must be the inverse of }(hjhhhNhNubj%)}(h **mode_set**h]hmode_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh plus }(hjhhhNhNubj%)}(h **commit**h]hcommit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh] for drivers still using legacy CRTC helpers, which is different from the rules under atomic.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hX``enable`` This callback should be used to enable the encoder. With the atomic drivers it is called after this encoder's CRTC has been enabled using their own :c:type:`drm_crtc_helper_funcs.enable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc(). This hook is only used by atomic helpers, it is the opposite of **disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **enable** must be the inverse of **disable** for atomic drivers. h](jt)}(h ``enable``h]jz)}(hjh]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubj)}(hhh](h)}(hXThis callback should be used to enable the encoder. With the atomic drivers it is called after this encoder's CRTC has been enabled using their own :c:type:`drm_crtc_helper_funcs.enable ` hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC's callback by looping over all encoders connected to it using for_each_encoder_on_crtc().h](hThis callback should be used to enable the encoder. With the atomic drivers it is called after this encoder’s CRTC has been enabled using their own }(hjhhhNhNubh)}(h>:c:type:`drm_crtc_helper_funcs.enable `h]jz)}(hj"h]hdrm_crtc_helper_funcs.enable}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubh hook. If that sequence is too simple drivers can just add their own driver private encoder hooks and call them from CRTC’s callback by looping over all encoders connected to it using for_each_encoder_on_crtc().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMhjubh)}(hXNThis hook is only used by atomic helpers, it is the opposite of **disable**. Atomic drivers don't need to implement it if there's no need to enable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new "ACTIVE" property) works **enable** must be the inverse of **disable** for atomic drivers.h](h@This hook is only used by atomic helpers, it is the opposite of }(hjJhhhNhNubj%)}(h **disable**h]hdisable}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh. Atomic drivers don’t need to implement it if there’s no need to enable anything at the encoder level. To ensure that runtime PM handling (using either DPMS or the new “ACTIVE” property) works }(hjJhhhNhNubj%)}(h **enable**h]henable}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh must be the inverse of }(hjJhhhNhNubj%)}(h **disable**h]hdisable}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh for atomic drivers.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hX``atomic_check`` This callback is used to validate encoder state for atomic drivers. Since the encoder is the object connecting the CRTC and connector it gets passed both states, to be able to validate interactions and update the CRTC to match what the encoder needs for the requested connector. Since this provides a strict superset of the functionality of **mode_fixup** (the requested and adjusted modes are both available through the passed in :c:type:`struct drm_crtc_state `) **mode_fixup** is not called when **atomic_check** is implemented. This function is used by the atomic helpers, but it is optional. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall :c:type:`drm_atomic_state` update tracking structure. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any encoder constraints and limits checks into **mode_valid**. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](jt)}(h``atomic_check``h]jz)}(hjh]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMChjubj)}(hhh](h)}(hXThis callback is used to validate encoder state for atomic drivers. Since the encoder is the object connecting the CRTC and connector it gets passed both states, to be able to validate interactions and update the CRTC to match what the encoder needs for the requested connector.h]hXThis callback is used to validate encoder state for atomic drivers. Since the encoder is the object connecting the CRTC and connector it gets passed both states, to be able to validate interactions and update the CRTC to match what the encoder needs for the requested connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM%hjubh)}(hX Since this provides a strict superset of the functionality of **mode_fixup** (the requested and adjusted modes are both available through the passed in :c:type:`struct drm_crtc_state `) **mode_fixup** is not called when **atomic_check** is implemented.h](h>Since this provides a strict superset of the functionality of }(hjhhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhL (the requested and adjusted modes are both available through the passed in }(hjhhhNhNubh)}(h0:c:type:`struct drm_crtc_state `h]jz)}(hjh]hstruct drm_crtc_state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM+hjubh) }(hjhhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is not called when }(hjhhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is implemented.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM+hjubh)}(h@This function is used by the atomic helpers, but it is optional.h]h@This function is used by the atomic helpers, but it is optional.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM0hjubh)}(hNOTE:h]hNOTE:}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM2hjubh)}(hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall :c:type:`drm_atomic_state` update tracking structure.h](hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall }(hjOhhhNhNubh)}(h:c:type:`drm_atomic_state`h]jz)}(hjYh]hdrm_atomic_state}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM4hjOubh update tracking structure.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhM4hjubh)}(hXOAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any encoder constraints and limits checks into **mode_valid**.h](hAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in }(hjhhhNhNubh)}(h-:c:type:`drm_connector.modes `h]jz)}(hjh]hdrm_connector.modes}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM9hjubhd. To ensure that modes are filtered consistently put any encoder constraints and limits checks into }(hjhhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM9hjubh)}(hRETURNS:h]hRETURNS:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM?hjubh)}(h0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](h0 on success, -EINVAL if the state or the transition can’t be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a }(hjhhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hjh]hdrm_modeset_lock}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMAhjubh deadlock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMAhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMChjubeh}(h]h ]h"]h$]h&]uh1jhhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubh)}(h**Description**h]j%)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMGhj:hhubh)}(hWThese hooks are used by the legacy CRTC helpers and the new atomic modesetting helpers.h]hWThese hooks are used by the legacy CRTC helpers and the new atomic modesetting helpers.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM+hj:hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_encoder_helper_add (C function)c.drm_encoder_helper_addhNtauh1jxhj:hhhjhNubj)}(hhh](j)}(hgvoid drm_encoder_helper_add (struct drm_encoder *encoder, const struct drm_encoder_helper_funcs *funcs)h]j)}(hfvoid drm_encoder_helper_add(struct drm_encoder *encoder, const struct drm_encoder_helper_funcs *funcs)h](j)}(hvoidh]hvoid}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMQubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhjmhMQubj)}(hdrm_encoder_helper_addh]j)}(hdrm_encoder_helper_addh]hdrm_encoder_helper_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[hhhjmhMQubj)}(hK(struct drm_encoder *encoder, const struct drm_encoder_helper_funcs *funcs)h](j)}(hstruct drm_encoder *encoderh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_encoderh]h drm_encoder}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_encoder_helper_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hencoderh]hencoder}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h,const struct drm_encoder_helper_funcs *funcsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_encoder_helper_funcsh]hdrm_encoder_helper_funcs}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jc.drm_encoder_helper_addasbuh1hhj ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj[hhhjmhMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjmhMQubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jhjmhMQhjThhubj)}(hhh]h)}(h%sets the helper vtable for an encoderh]h%sets the helper vtable for an encoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMMhjhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjmhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj:hjhNubj)}(h**Parameters** ``struct drm_encoder *encoder`` DRM encoder ``const struct drm_encoder_helper_funcs *funcs`` helper vtable to set for **encoder**h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMQhjubji)}(hhh](jn)}(h,``struct drm_encoder *encoder`` DRM encoder h](jt)}(h``struct drm_encoder *encoder``h]jz)}(hjh]hstruct drm_encoder *encoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMNhjubj)}(hhh]h)}(h DRM encoderh]h DRM encoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMNhjubjn)}(hU``const struct drm_encoder_helper_funcs *funcs`` helper vtable to set for **encoder**h](jt)}(h0``const struct drm_encoder_helper_funcs *funcs``h]jz)}(hj$h]h,const struct drm_encoder_helper_funcs *funcs}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMPhjubj)}(hhh]h)}(h$helper vtable to set for **encoder**h](hhelper vtable to set for }(hj=hhhNhNubj%)}(h **encoder**h]hencoder}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMOhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMPhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_connector_helper_funcs (C struct)c.drm_connector_helper_funcshNtauh1jxhj:hhhjhNubj)}(hhh](j)}(hdrm_connector_helper_funcsh]j)}(h!struct drm_connector_helper_funcsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMTubj)}(hdrm_connector_helper_funcsh]j)}(hjh]hdrm_connector_helper_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMThjhhubj)}(hhh]h)}(h helper operations for connectorsh]h helper operations for connectors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMTubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhj:hjhNubj)}(hXP0**Definition**:: struct drm_connector_helper_funcs { int (*get_modes)(struct drm_connector *connector); int (*detect_ctx)(struct drm_connector *connector,struct drm_modeset_acquire_ctx *ctx, bool force); enum drm_mode_status (*mode_valid)(struct drm_connector *connector, const struct drm_display_mode *mode); int (*mode_valid_ctx)(struct drm_connector *connector,const struct drm_display_mode *mode,struct drm_modeset_acquire_ctx *ctx, enum drm_mode_status *status); struct drm_encoder *(*best_encoder)(struct drm_connector *connector); struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector, struct drm_atomic_state *state); int (*atomic_check)(struct drm_connector *connector, struct drm_atomic_state *state); void (*atomic_commit)(struct drm_connector *connector, struct drm_atomic_state *state); int (*prepare_writeback_job)(struct drm_writeback_connector *connector, struct drm_writeback_job *job); void (*cleanup_writeback_job)(struct drm_writeback_connector *connector, struct drm_writeback_job *job); void (*enable_hpd)(struct drm_connector *connector); void (*disable_hpd)(struct drm_connector *connector); }; **Members** ``get_modes`` This function should fill in all modes currently valid for the sink into the :c:type:`drm_connector.probed_modes ` list. It should also update the EDID property by calling drm_connector_update_edid_property(). The usual way to implement this is to cache the EDID retrieved in the probe callback somewhere in the driver-private connector structure. In this function drivers then parse the modes in the EDID and add them by calling drm_add_edid_modes(). But connectors that drive a fixed panel can also manually add specific modes using drm_mode_probed_add(). Drivers which manually add modes should also make sure that the :c:type:`drm_connector.display_info `, :c:type:`drm_connector.width_mm ` and :c:type:`drm_connector.height_mm ` fields are filled in. Note that the caller function will automatically add standard VESA DMT modes up to 1024x768 if the .get_modes() helper operation returns no mode and if the connector status is connector_status_connected or connector_status_unknown. There is no need to call drm_add_modes_noedid() manually in that case. Virtual drivers that just want some standard VESA mode with a given resolution can call drm_add_modes_noedid(), and mark the preferred one using drm_set_preferred_mode(). This function is only called after the **detect** hook has indicated that a sink is connected and when the EDID isn't overridden through sysfs or the kernel commandline. This callback is used by the probe helpers in e.g. drm_helper_probe_single_connector_modes(). To avoid races with concurrent connector state updates, the helper libraries always call this with the :c:type:`drm_mode_config.connection_mutex ` held. Because of this it's safe to inspect :c:type:`drm_connector->state `. RETURNS: The number of modes added by calling drm_mode_probed_add(). Return 0 on failures (no modes) instead of negative error codes. ``detect_ctx`` Check to see if anything is attached to the connector. The parameter force is set to false whilst polling, true when checking the connector due to a user request. force can be used by the driver to avoid expensive, destructive operations during automated probing. This callback is optional, if not implemented the connector will be considered as always being attached. This is the atomic version of :c:type:`drm_connector_funcs.detect `. To avoid races against concurrent connector state updates, the helper libraries always call this with ctx set to a valid context, and :c:type:`drm_mode_config.connection_mutex ` will always be locked with the ctx parameter set to this ctx. This allows taking additional locks as required. RETURNS: :c:type:`drm_connector_status` indicating the connector's status, or the error code returned by drm_modeset_lock(), -EDEADLK. ``mode_valid`` Callback to validate a mode for a connector, irrespective of the specific display configuration. This callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes(). This function is optional. NOTE: This only filters the mode list supplied to userspace in the GETCONNECTOR IOCTL. Compared to :c:type:`drm_encoder_helper_funcs.mode_valid `, :c:type:`drm_crtc_helper_funcs.mode_valid ` and :c:type:`drm_bridge_funcs.mode_valid `, which are also called by the atomic helpers from drm_atomic_helper_check_modeset(). This allows userspace to force and ignore sink constraint (like the pixel clock limits in the screen's EDID), which is useful for e.g. testing, or working around a broken EDID. Any source hardware constraint (which always need to be enforced) therefore should be checked in one of the above callbacks, and not this one here. To avoid races with concurrent connector state updates, the helper libraries always call this with the :c:type:`drm_mode_config.connection_mutex ` held. Because of this it's safe to inspect :c:type:`drm_connector->state `. RETURNS: Either :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `. ``mode_valid_ctx`` Callback to validate a mode for a connector, irrespective of the specific display configuration. This callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes(). This function is optional, and is the atomic version of :c:type:`drm_connector_helper_funcs.mode_valid `. To allow for accessing the atomic state of modesetting objects, the helper libraries always call this with ctx set to a valid context, and :c:type:`drm_mode_config.connection_mutex ` will always be locked with the ctx parameter set to **ctx**. This allows for taking additional locks as required. Even though additional locks may be acquired, this callback is still expected not to take any constraints into account which would be influenced by the currently set display state - such constraints should be handled in the driver's atomic check. For example, if a connector shares display bandwidth with other connectors then it would be ok to validate the minimum bandwidth requirement of a mode against the maximum possible bandwidth of the connector. But it wouldn't be ok to take the current bandwidth usage of other connectors into account, as this would change depending on the display state. Returns: 0 if :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` succeeded and wrote the :c:type:`enum drm_mode_status ` value to **status**, or a negative error code otherwise. ``best_encoder`` This function should select the best encoder for the given connector. This function is used by both the atomic helpers (in the drm_atomic_helper_check_modeset() function) and in the legacy CRTC helpers. NOTE: In atomic drivers this function is called in the check phase of an atomic update. The driver is not allowed to change or inspect anything outside of arguments passed-in. Atomic drivers which need to inspect dynamic configuration state should instead use **atomic_best_encoder**. You can leave this function to NULL if the connector is only attached to a single encoder. In this case, the core will call drm_connector_get_single_encoder() for you. RETURNS: Encoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren't used twice, drivers should not check for this. ``atomic_best_encoder`` This is the atomic version of **best_encoder** for atomic drivers which need to select the best encoder depending upon the desired configuration and can't select it statically. This function is used by drm_atomic_helper_check_modeset(). If it is not implemented, the core will fallback to **best_encoder** (or drm_connector_get_single_encoder() if **best_encoder** is NULL). NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the :c:type:`drm_atomic_state` update tracking structure passed in. RETURNS: Encoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren't used twice, drivers should not check for this. ``atomic_check`` This hook is used to validate connector state. This function is called from :c:type:`drm_atomic_helper_check_modeset`, and is called when a connector property is set, or a modeset on the crtc is forced. Because :c:type:`drm_atomic_helper_check_modeset` may be called multiple times, this function should handle being called multiple times as well. This function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall :c:type:`drm_atomic_state` update tracking structure. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. ``atomic_commit`` This hook is to be used by drivers implementing writeback connectors that need a point when to commit the writeback job to the hardware. The writeback_job to commit is available in the new connector state, in :c:type:`drm_connector_state.writeback_job `. This hook is optional. This callback is used by the atomic modeset helpers. ``prepare_writeback_job`` As writeback jobs contain a framebuffer, drivers may need to prepare and clean them up the same way they can prepare and clean up framebuffers for planes. This optional connector operation is used to support the preparation of writeback jobs. The job prepare operation is called from drm_atomic_helper_prepare_planes() for struct :c:type:`drm_writeback_connector` connectors only. This operation is optional. This callback is used by the atomic modeset helpers. ``cleanup_writeback_job`` This optional connector operation is used to support the cleanup of writeback jobs. The job cleanup operation is called from the existing drm_writeback_cleanup_job() function, invoked both when destroying the job as part of an aborted commit, or when the job completes. This operation is optional. This callback is used by the atomic modeset helpers. ``enable_hpd`` Enable hot-plug detection for the connector. This operation is optional. This callback is used by the drm_kms_helper_poll_enable() helpers. This operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced. ``disable_hpd`` Disable hot-plug detection for the connector. This operation is optional. This callback is used by the drm_kms_helper_poll_disable() helpers. This operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM\hjubj@)}(hXstruct drm_connector_helper_funcs { int (*get_modes)(struct drm_connector *connector); int (*detect_ctx)(struct drm_connector *connector,struct drm_modeset_acquire_ctx *ctx, bool force); enum drm_mode_status (*mode_valid)(struct drm_connector *connector, const struct drm_display_mode *mode); int (*mode_valid_ctx)(struct drm_connector *connector,const struct drm_display_mode *mode,struct drm_modeset_acquire_ctx *ctx, enum drm_mode_status *status); struct drm_encoder *(*best_encoder)(struct drm_connector *connector); struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector, struct drm_atomic_state *state); int (*atomic_check)(struct drm_connector *connector, struct drm_atomic_state *state); void (*atomic_commit)(struct drm_connector *connector, struct drm_atomic_state *state); int (*prepare_writeback_job)(struct drm_writeback_connector *connector, struct drm_writeback_job *job); void (*cleanup_writeback_job)(struct drm_writeback_connector *connector, struct drm_writeback_job *job); void (*enable_hpd)(struct drm_connector *connector); void (*disable_hpd)(struct drm_connector *connector); };h]hXstruct drm_connector_helper_funcs { int (*get_modes)(struct drm_connector *connector); int (*detect_ctx)(struct drm_connector *connector,struct drm_modeset_acquire_ctx *ctx, bool force); enum drm_mode_status (*mode_valid)(struct drm_connector *connector, const struct drm_display_mode *mode); int (*mode_valid_ctx)(struct drm_connector *connector,const struct drm_display_mode *mode,struct drm_modeset_acquire_ctx *ctx, enum drm_mode_status *status); struct drm_encoder *(*best_encoder)(struct drm_connector *connector); struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector, struct drm_atomic_state *state); int (*atomic_check)(struct drm_connector *connector, struct drm_atomic_state *state); void (*atomic_commit)(struct drm_connector *connector, struct drm_atomic_state *state); int (*prepare_writeback_job)(struct drm_writeback_connector *connector, struct drm_writeback_job *job); void (*cleanup_writeback_job)(struct drm_writeback_connector *connector, struct drm_writeback_job *job); void (*enable_hpd)(struct drm_connector *connector); void (*disable_hpd)(struct drm_connector *connector); };}hj sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM^hjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMmhjubji)}(hhh](jn)}(hX``get_modes`` This function should fill in all modes currently valid for the sink into the :c:type:`drm_connector.probed_modes ` list. It should also update the EDID property by calling drm_connector_update_edid_property(). The usual way to implement this is to cache the EDID retrieved in the probe callback somewhere in the driver-private connector structure. In this function drivers then parse the modes in the EDID and add them by calling drm_add_edid_modes(). But connectors that drive a fixed panel can also manually add specific modes using drm_mode_probed_add(). Drivers which manually add modes should also make sure that the :c:type:`drm_connector.display_info `, :c:type:`drm_connector.width_mm ` and :c:type:`drm_connector.height_mm ` fields are filled in. Note that the caller function will automatically add standard VESA DMT modes up to 1024x768 if the .get_modes() helper operation returns no mode and if the connector status is connector_status_connected or connector_status_unknown. There is no need to call drm_add_modes_noedid() manually in that case. Virtual drivers that just want some standard VESA mode with a given resolution can call drm_add_modes_noedid(), and mark the preferred one using drm_set_preferred_mode(). This function is only called after the **detect** hook has indicated that a sink is connected and when the EDID isn't overridden through sysfs or the kernel commandline. This callback is used by the probe helpers in e.g. drm_helper_probe_single_connector_modes(). To avoid races with concurrent connector state updates, the helper libraries always call this with the :c:type:`drm_mode_config.connection_mutex ` held. Because of this it's safe to inspect :c:type:`drm_connector->state `. RETURNS: The number of modes added by calling drm_mode_probed_add(). Return 0 on failures (no modes) instead of negative error codes. h](jt)}(h ``get_modes``h]jz)}(hj;h]h get_modes}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj5ubj)}(hhh](h)}(hThis function should fill in all modes currently valid for the sink into the :c:type:`drm_connector.probed_modes ` list. It should also update the EDID property by calling drm_connector_update_edid_property().h](hMThis function should fill in all modes currently valid for the sink into the }(hjThhhNhNubh)}(h4:c:type:`drm_connector.probed_modes `h]jz)}(hj^h]hdrm_connector.probed_modes}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM`hjTubh_ list. It should also update the EDID property by calling drm_connector_update_edid_property().}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hM`hjQubh)}(hXNThe usual way to implement this is to cache the EDID retrieved in the probe callback somewhere in the driver-private connector structure. In this function drivers then parse the modes in the EDID and add them by calling drm_add_edid_modes(). But connectors that drive a fixed panel can also manually add specific modes using drm_mode_probed_add(). Drivers which manually add modes should also make sure that the :c:type:`drm_connector.display_info `, :c:type:`drm_connector.width_mm ` and :c:type:`drm_connector.height_mm ` fields are filled in.h](hXThe usual way to implement this is to cache the EDID retrieved in the probe callback somewhere in the driver-private connector structure. In this function drivers then parse the modes in the EDID and add them by calling drm_add_edid_modes(). But connectors that drive a fixed panel can also manually add specific modes using drm_mode_probed_add(). Drivers which manually add modes should also make sure that the }(hjhhhNhNubh)}(h4:c:type:`drm_connector.display_info `h]jz)}(hjh]hdrm_connector.display_info}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMdhjubh, }(hjhhhNhNubh)}(h0:c:type:`drm_connector.width_mm `h]jz)}(hjh]hdrm_connector.width_mm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjhMdhjubh and }(hjhhhNhNubh)}(h1:c:type:`drm_connector.height_mm `h]jz)}(hjh]hdrm_connector.height_mm}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjhMdhjubh fields are filled in.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMdhjQubh)}(hX.Note that the caller function will automatically add standard VESA DMT modes up to 1024x768 if the .get_modes() helper operation returns no mode and if the connector status is connector_status_connected or connector_status_unknown. There is no need to call drm_add_modes_noedid() manually in that case.h]hX.Note that the caller function will automatically add standard VESA DMT modes up to 1024x768 if the .get_modes() helper operation returns no mode and if the connector status is connector_status_connected or connector_status_unknown. There is no need to call drm_add_modes_noedid() manually in that case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMnhjQubh)}(hVirtual drivers that just want some standard VESA mode with a given resolution can call drm_add_modes_noedid(), and mark the preferred one using drm_set_preferred_mode().h]hVirtual drivers that just want some standard VESA mode with a given resolution can call drm_add_modes_noedid(), and mark the preferred one using drm_set_preferred_mode().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMthjQubh)}(hThis function is only called after the **detect** hook has indicated that a sink is connected and when the EDID isn't overridden through sysfs or the kernel commandline.h](h'This function is only called after the }(hj hhhNhNubj%)}(h **detect**h]hdetect}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhz hook has indicated that a sink is connected and when the EDID isn’t overridden through sysfs or the kernel commandline.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMxhjQubh)}(h]This callback is used by the probe helpers in e.g. drm_helper_probe_single_connector_modes().h]h]This callback is used by the probe helpers in e.g. drm_helper_probe_single_connector_modes().}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM|hjQubh)}(hTo avoid races with concurrent connector state updates, the helper libraries always call this with the :c:type:`drm_mode_config.connection_mutex ` held. Because of this it's safe to inspect :c:type:`drm_connector->state `.h](hgTo avoid races with concurrent connector state updates, the helper libraries always call this with the }(hjL hhhNhNubh)}(h<:c:type:`drm_mode_config.connection_mutex `h]jz)}(hjV h]h drm_mode_config.connection_mutex}(hjX hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjT ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjL ubh. held. Because of this it’s safe to inspect }(hjL hhhNhNubh)}(h.:c:type:`drm_connector->state `h]jz)}(hjz h]hdrm_connector->state}(hj| hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjx ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjs hMhjL ubh.}(hjL hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjs hMhjQubh)}(hRETURNS:h]hRETURNS:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjQubh)}(h|The number of modes added by calling drm_mode_probed_add(). Return 0 on failures (no modes) instead of negative error codes.h]h|The number of modes added by calling drm_mode_probed_add(). Return 0 on failures (no modes) instead of negative error codes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhjPhMhj2ubjn)}(hX``detect_ctx`` Check to see if anything is attached to the connector. The parameter force is set to false whilst polling, true when checking the connector due to a user request. force can be used by the driver to avoid expensive, destructive operations during automated probing. This callback is optional, if not implemented the connector will be considered as always being attached. This is the atomic version of :c:type:`drm_connector_funcs.detect `. To avoid races against concurrent connector state updates, the helper libraries always call this with ctx set to a valid context, and :c:type:`drm_mode_config.connection_mutex ` will always be locked with the ctx parameter set to this ctx. This allows taking additional locks as required. RETURNS: :c:type:`drm_connector_status` indicating the connector's status, or the error code returned by drm_modeset_lock(), -EDEADLK. h](jt)}(h``detect_ctx``h]jz)}(hj h]h detect_ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubj)}(hhh](h)}(hXCheck to see if anything is attached to the connector. The parameter force is set to false whilst polling, true when checking the connector due to a user request. force can be used by the driver to avoid expensive, destructive operations during automated probing.h]hXCheck to see if anything is attached to the connector. The parameter force is set to false whilst polling, true when checking the connector due to a user request. force can be used by the driver to avoid expensive, destructive operations during automated probing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hhThis callback is optional, if not implemented the connector will be considered as always being attached.h]hhThis callback is optional, if not implemented the connector will be considered as always being attached.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(hYThis is the atomic version of :c:type:`drm_connector_funcs.detect `.h](hThis is the atomic version of }(hj!hhhNhNubh)}(h::c:type:`drm_connector_funcs.detect `h]jz)}(hj!h]hdrm_connector_funcs.detect}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/!hMhj ubh)}(hX1To avoid races against concurrent connector state updates, the helper libraries always call this with ctx set to a valid context, and :c:type:`drm_mode_config.connection_mutex ` will always be locked with the ctx parameter set to this ctx. This allows taking additional locks as required.h](hTo avoid races against concurrent connector state updates, the helper libraries always call this with ctx set to a valid context, and }(hj:!hhhNhNubh)}(h<:c:type:`drm_mode_config.connection_mutex `h]jz)}(hjD!h]h drm_mode_config.connection_mutex}(hjF!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjB!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:!ubho will always be locked with the ctx parameter set to this ctx. This allows taking additional locks as required.}(hj:!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhja!hMhj ubh)}(hRETURNS:h]hRETURNS:}(hjl!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj ubh)}(h}:c:type:`drm_connector_status` indicating the connector's status, or the error code returned by drm_modeset_lock(), -EDEADLK.h](h)}(h:c:type:`drm_connector_status`h]jz)}(hj!h]hdrm_connector_status}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_statusuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj{!ubha indicating the connector’s status, or the error code returned by drm_modeset_lock(), -EDEADLK.}(hj{!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj2ubjn)}(hX``mode_valid`` Callback to validate a mode for a connector, irrespective of the specific display configuration. This callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes(). This function is optional. NOTE: This only filters the mode list supplied to userspace in the GETCONNECTOR IOCTL. Compared to :c:type:`drm_encoder_helper_funcs.mode_valid `, :c:type:`drm_crtc_helper_funcs.mode_valid ` and :c:type:`drm_bridge_funcs.mode_valid `, which are also called by the atomic helpers from drm_atomic_helper_check_modeset(). This allows userspace to force and ignore sink constraint (like the pixel clock limits in the screen's EDID), which is useful for e.g. testing, or working around a broken EDID. Any source hardware constraint (which always need to be enforced) therefore should be checked in one of the above callbacks, and not this one here. To avoid races with concurrent connector state updates, the helper libraries always call this with the :c:type:`drm_mode_config.connection_mutex ` held. Because of this it's safe to inspect :c:type:`drm_connector->state `. RETURNS: Either :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `. h](jt)}(h``mode_valid``h]jz)}(hj!h]h mode_valid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubj)}(hhh](h)}(h`Callback to validate a mode for a connector, irrespective of the specific display configuration.h]h`Callback to validate a mode for a connector, irrespective of the specific display configuration.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubh)}(hThis callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes().h]hThis callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes().}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubh)}(hThis function is optional.h]hThis function is optional.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubh)}(hNOTE:h]hNOTE:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubh)}(hXThis only filters the mode list supplied to userspace in the GETCONNECTOR IOCTL. Compared to :c:type:`drm_encoder_helper_funcs.mode_valid `, :c:type:`drm_crtc_helper_funcs.mode_valid ` and :c:type:`drm_bridge_funcs.mode_valid `, which are also called by the atomic helpers from drm_atomic_helper_check_modeset(). This allows userspace to force and ignore sink constraint (like the pixel clock limits in the screen's EDID), which is useful for e.g. testing, or working around a broken EDID. Any source hardware constraint (which always need to be enforced) therefore should be checked in one of the above callbacks, and not this one here.h](h]This only filters the mode list supplied to userspace in the GETCONNECTOR IOCTL. Compared to }(hj"hhhNhNubh)}(hH:c:type:`drm_encoder_helper_funcs.mode_valid `h]jz)}(hj"h]h#drm_encoder_helper_funcs.mode_valid}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj"ubh, }(hj"hhhNhNubh)}(hB:c:type:`drm_crtc_helper_funcs.mode_valid `h]jz)}(hj>"h]h drm_crtc_helper_funcs.mode_valid}(hj@"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj<"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhj7"hMhj"ubh and }(hj"hhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_valid `h]jz)}(hja"h]hdrm_bridge_funcs.mode_valid}(hjc"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj_"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj7"hMhj"ubhX, which are also called by the atomic helpers from drm_atomic_helper_check_modeset(). This allows userspace to force and ignore sink constraint (like the pixel clock limits in the screen’s EDID), which is useful for e.g. testing, or working around a broken EDID. Any source hardware constraint (which always need to be enforced) therefore should be checked in one of the above callbacks, and not this one here.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7"hMhj!ubh)}(hTo avoid races with concurrent connector state updates, the helper libraries always call this with the :c:type:`drm_mode_config.connection_mutex ` held. Because of this it's safe to inspect :c:type:`drm_connector->state `.h](hgTo avoid races with concurrent connector state updates, the helper libraries always call this with the }(hj"hhhNhNubh)}(h<:c:type:`drm_mode_config.connection_mutex `h]jz)}(hj"h]h drm_mode_config.connection_mutex}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj"ubh. held. Because of this it’s safe to inspect }(hj"hhhNhNubh)}(h.:c:type:`drm_connector->state `h]jz)}(hj"h]hdrm_connector->state}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj"hMhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hMhj!ubh)}(hRETURNS:h]hRETURNS:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj!ubh)}(hEither :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `.h](hEither }(hj"hhhNhNubh)}(h3:c:type:`drm_mode_status.MODE_OK `h]jz)}(hj"h]hdrm_mode_status.MODE_OK}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_statusuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj"ubh" or one of the failure reasons in }(hj"hhhNhNubh)}(h0:c:type:`enum drm_mode_status `h]jz)}(hj#h]henum drm_mode_status}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_statusuh1hhj#hMhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhj2ubjn)}(hX,``mode_valid_ctx`` Callback to validate a mode for a connector, irrespective of the specific display configuration. This callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes(). This function is optional, and is the atomic version of :c:type:`drm_connector_helper_funcs.mode_valid `. To allow for accessing the atomic state of modesetting objects, the helper libraries always call this with ctx set to a valid context, and :c:type:`drm_mode_config.connection_mutex ` will always be locked with the ctx parameter set to **ctx**. This allows for taking additional locks as required. Even though additional locks may be acquired, this callback is still expected not to take any constraints into account which would be influenced by the currently set display state - such constraints should be handled in the driver's atomic check. For example, if a connector shares display bandwidth with other connectors then it would be ok to validate the minimum bandwidth requirement of a mode against the maximum possible bandwidth of the connector. But it wouldn't be ok to take the current bandwidth usage of other connectors into account, as this would change depending on the display state. Returns: 0 if :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` succeeded and wrote the :c:type:`enum drm_mode_status ` value to **status**, or a negative error code otherwise. h](jt)}(h``mode_valid_ctx``h]jz)}(hjS#h]hmode_valid_ctx}(hjU#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjM#ubj)}(hhh](h)}(h`Callback to validate a mode for a connector, irrespective of the specific display configuration.h]h`Callback to validate a mode for a connector, irrespective of the specific display configuration.}(hjl#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhji#ubh)}(hThis callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes().h]hThis callback is used by the probe helpers to filter the mode list (which is usually derived from the EDID data block from the sink). See e.g. drm_helper_probe_single_connector_modes().}(hj{#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhji#ubh)}(hThis function is optional, and is the atomic version of :c:type:`drm_connector_helper_funcs.mode_valid `.h](h8This function is optional, and is the atomic version of }(hj#hhhNhNubh)}(hL:c:type:`drm_connector_helper_funcs.mode_valid `h]jz)}(hj#h]h%drm_connector_helper_funcs.mode_valid}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhji#ubh)}(hX9To allow for accessing the atomic state of modesetting objects, the helper libraries always call this with ctx set to a valid context, and :c:type:`drm_mode_config.connection_mutex ` will always be locked with the ctx parameter set to **ctx**. This allows for taking additional locks as required.h](hTo allow for accessing the atomic state of modesetting objects, the helper libraries always call this with ctx set to a valid context, and }(hj#hhhNhNubh)}(h<:c:type:`drm_mode_config.connection_mutex `h]jz)}(hj#h]h drm_mode_config.connection_mutex}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj#ubh5 will always be locked with the ctx parameter set to }(hj#hhhNhNubj%)}(h**ctx**h]hctx}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubh6. This allows for taking additional locks as required.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhji#ubh)}(hXWEven though additional locks may be acquired, this callback is still expected not to take any constraints into account which would be influenced by the currently set display state - such constraints should be handled in the driver's atomic check. For example, if a connector shares display bandwidth with other connectors then it would be ok to validate the minimum bandwidth requirement of a mode against the maximum possible bandwidth of the connector. But it wouldn't be ok to take the current bandwidth usage of other connectors into account, as this would change depending on the display state.h]hX[Even though additional locks may be acquired, this callback is still expected not to take any constraints into account which would be influenced by the currently set display state - such constraints should be handled in the driver’s atomic check. For example, if a connector shares display bandwidth with other connectors then it would be ok to validate the minimum bandwidth requirement of a mode against the maximum possible bandwidth of the connector. But it wouldn’t be ok to take the current bandwidth usage of other connectors into account, as this would change depending on the display state.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhji#ubh)}(hReturns: 0 if :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` succeeded and wrote the :c:type:`enum drm_mode_status ` value to **status**, or a negative error code otherwise.h](hReturns: 0 if }(hj$hhhNhNubh)}(hP:c:type:`drm_connector_helper_funcs.mode_valid_ctx `h]jz)}(hj$h]h)drm_connector_helper_funcs.mode_valid_ctx}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubh succeeded and wrote the }(hj$hhhNhNubh)}(h0:c:type:`enum drm_mode_status `h]jz)}(hj=$h]henum drm_mode_status}(hj?$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_statusuh1hhj6$hMhj$ubh value to }(hj$hhhNhNubj%)}(h **status**h]hstatus}(hj^$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubh%, or a negative error code otherwise.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6$hMhji#ubeh}(h]h ]h"]h$]h&]uh1jhjM#ubeh}(h]h ]h"]h$]h&]uh1jmhjh#hMhj2ubjn)}(hX``best_encoder`` This function should select the best encoder for the given connector. This function is used by both the atomic helpers (in the drm_atomic_helper_check_modeset() function) and in the legacy CRTC helpers. NOTE: In atomic drivers this function is called in the check phase of an atomic update. The driver is not allowed to change or inspect anything outside of arguments passed-in. Atomic drivers which need to inspect dynamic configuration state should instead use **atomic_best_encoder**. You can leave this function to NULL if the connector is only attached to a single encoder. In this case, the core will call drm_connector_get_single_encoder() for you. RETURNS: Encoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren't used twice, drivers should not check for this. h](jt)}(h``best_encoder``h]jz)}(hj$h]h best_encoder}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubj)}(hhh](h)}(hEThis function should select the best encoder for the given connector.h]hEThis function should select the best encoder for the given connector.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubh)}(hThis function is used by both the atomic helpers (in the drm_atomic_helper_check_modeset() function) and in the legacy CRTC helpers.h]hThis function is used by both the atomic helpers (in the drm_atomic_helper_check_modeset() function) and in the legacy CRTC helpers.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubh)}(hNOTE:h]hNOTE:}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubh)}(hXIn atomic drivers this function is called in the check phase of an atomic update. The driver is not allowed to change or inspect anything outside of arguments passed-in. Atomic drivers which need to inspect dynamic configuration state should instead use **atomic_best_encoder**.h](hIn atomic drivers this function is called in the check phase of an atomic update. The driver is not allowed to change or inspect anything outside of arguments passed-in. Atomic drivers which need to inspect dynamic configuration state should instead use }(hj$hhhNhNubj%)}(h**atomic_best_encoder**h]hatomic_best_encoder}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubh)}(hYou can leave this function to NULL if the connector is only attached to a single encoder. In this case, the core will call drm_connector_get_single_encoder() for you.h]hYou can leave this function to NULL if the connector is only attached to a single encoder. In this case, the core will call drm_connector_get_single_encoder() for you.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj$ubh)}(hRETURNS:h]hRETURNS:}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hj$ubh)}(hEncoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren't used twice, drivers should not check for this.h]hEncoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren’t used twice, drivers should not check for this.}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj2ubjn)}(hX5``atomic_best_encoder`` This is the atomic version of **best_encoder** for atomic drivers which need to select the best encoder depending upon the desired configuration and can't select it statically. This function is used by drm_atomic_helper_check_modeset(). If it is not implemented, the core will fallback to **best_encoder** (or drm_connector_get_single_encoder() if **best_encoder** is NULL). NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the :c:type:`drm_atomic_state` update tracking structure passed in. RETURNS: Encoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren't used twice, drivers should not check for this. h](jt)}(h``atomic_best_encoder``h]jz)}(hj.%h]hatomic_best_encoder}(hj0%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,%ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM(hj(%ubj)}(hhh](h)}(hThis is the atomic version of **best_encoder** for atomic drivers which need to select the best encoder depending upon the desired configuration and can't select it statically.h](hThis is the atomic version of }(hjG%hhhNhNubj%)}(h**best_encoder**h]h best_encoder}(hjO%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjG%ubh for atomic drivers which need to select the best encoder depending upon the desired configuration and can’t select it statically.}(hjG%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD%ubh)}(hThis function is used by drm_atomic_helper_check_modeset(). If it is not implemented, the core will fallback to **best_encoder** (or drm_connector_get_single_encoder() if **best_encoder** is NULL).h](hpThis function is used by drm_atomic_helper_check_modeset(). If it is not implemented, the core will fallback to }(hjh%hhhNhNubj%)}(h**best_encoder**h]h best_encoder}(hjp%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjh%ubh+ (or drm_connector_get_single_encoder() if }(hjh%hhhNhNubj%)}(h**best_encoder**h]h best_encoder}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjh%ubh is NULL).}(hjh%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD%ubh)}(hNOTE:h]hNOTE:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD%ubh)}(hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the :c:type:`drm_atomic_state` update tracking structure passed in.h](h|This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the }(hj%hhhNhNubh)}(h:c:type:`drm_atomic_state`h]jz)}(hj%h]hdrm_atomic_state}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj%ubh% update tracking structure passed in.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hMhjD%ubh)}(hRETURNS:h]hRETURNS:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM#hjD%ubh)}(hEncoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren't used twice, drivers should not check for this.h]hEncoder that should be used for the given connector and connector state, or NULL if no suitable encoder exists. Note that the helpers will ensure that encoders aren’t used twice, drivers should not check for this.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM%hjD%ubeh}(h]h ]h"]h$]h&]uh1jhj(%ubeh}(h]h ]h"]h$]h&]uh1jmhjC%hM(hj2ubjn)}(hX``atomic_check`` This hook is used to validate connector state. This function is called from :c:type:`drm_atomic_helper_check_modeset`, and is called when a connector property is set, or a modeset on the crtc is forced. Because :c:type:`drm_atomic_helper_check_modeset` may be called multiple times, this function should handle being called multiple times as well. This function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall :c:type:`drm_atomic_state` update tracking structure. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. h](jt)}(h``atomic_check``h]jz)}(hj &h]h atomic_check}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj &ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMJhj&ubj)}(hhh](h)}(hThis hook is used to validate connector state. This function is called from :c:type:`drm_atomic_helper_check_modeset`, and is called when a connector property is set, or a modeset on the crtc is forced.h](hLThis hook is used to validate connector state. This function is called from }(hj%&hhhNhNubh)}(h):c:type:`drm_atomic_helper_check_modeset`h]jz)}(hj/&h]hdrm_atomic_helper_check_modeset}(hj1&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj-&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_helper_check_modesetuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM0hj%&ubhU, and is called when a connector property is set, or a modeset on the crtc is forced.}(hj%&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjL&hM0hj"&ubh)}(hBecause :c:type:`drm_atomic_helper_check_modeset` may be called multiple times, this function should handle being called multiple times as well.h](hBecause }(hjW&hhhNhNubh)}(h):c:type:`drm_atomic_helper_check_modeset`h]jz)}(hja&h]hdrm_atomic_helper_check_modeset}(hjc&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj_&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_helper_check_modesetuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM4hjW&ubh_ may be called multiple times, this function should handle being called multiple times as well.}(hjW&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~&hM4hj"&ubh)}(hXThis function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached.h]hXThis function is also allowed to inspect any other object’s state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM7hj"&ubh)}(hNOTE:h]hNOTE:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM>hj"&ubh)}(hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall :c:type:`drm_atomic_state` update tracking structure.h](hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the free-standing state objects passed-in or assembled in the overall }(hj&hhhNhNubh)}(h:c:type:`drm_atomic_state`h]jz)}(hj&h]hdrm_atomic_state}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM@hj&ubh update tracking structure.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hM@hj"&ubh)}(hRETURNS:h]hRETURNS:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMEhj"&ubh)}(h0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](h0 on success, -EINVAL if the state or the transition can’t be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a }(hj&hhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hj&h]hdrm_modeset_lock}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMGhj&ubh deadlock.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hMGhj"&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj!&hMJhj2ubjn)}(hXt``atomic_commit`` This hook is to be used by drivers implementing writeback connectors that need a point when to commit the writeback job to the hardware. The writeback_job to commit is available in the new connector state, in :c:type:`drm_connector_state.writeback_job `. This hook is optional. This callback is used by the atomic modeset helpers. h](jt)}(h``atomic_commit``h]jz)}(hj,'h]h atomic_commit}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*'ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMYhj&'ubj)}(hhh](h)}(hXThis hook is to be used by drivers implementing writeback connectors that need a point when to commit the writeback job to the hardware. The writeback_job to commit is available in the new connector state, in :c:type:`drm_connector_state.writeback_job `.h](hThis hook is to be used by drivers implementing writeback connectors that need a point when to commit the writeback job to the hardware. The writeback_job to commit is available in the new connector state, in }(hjE'hhhNhNubh)}(hA:c:type:`drm_connector_state.writeback_job `h]jz)}(hjO'h]h!drm_connector_state.writeback_job}(hjQ'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjM'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMRhjE'ubh.}(hjE'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjl'hMRhjB'ubh)}(hThis hook is optional.h]hThis hook is optional.}(hjw'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMWhjB'ubh)}(h4This callback is used by the atomic modeset helpers.h]h4This callback is used by the atomic modeset helpers.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA'hMYhjB'ubeh}(h]h ]h"]h$]h&]uh1jhj&'ubeh}(h]h ]h"]h$]h&]uh1jmhjA'hMYhj2ubjn)}(hX``prepare_writeback_job`` As writeback jobs contain a framebuffer, drivers may need to prepare and clean them up the same way they can prepare and clean up framebuffers for planes. This optional connector operation is used to support the preparation of writeback jobs. The job prepare operation is called from drm_atomic_helper_prepare_planes() for struct :c:type:`drm_writeback_connector` connectors only. This operation is optional. This callback is used by the atomic modeset helpers. h](jt)}(h``prepare_writeback_job``h]jz)}(hj'h]hprepare_writeback_job}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMjhj'ubj)}(hhh](h)}(hX|As writeback jobs contain a framebuffer, drivers may need to prepare and clean them up the same way they can prepare and clean up framebuffers for planes. This optional connector operation is used to support the preparation of writeback jobs. The job prepare operation is called from drm_atomic_helper_prepare_planes() for struct :c:type:`drm_writeback_connector` connectors only.h](hXJAs writeback jobs contain a framebuffer, drivers may need to prepare and clean them up the same way they can prepare and clean up framebuffers for planes. This optional connector operation is used to support the preparation of writeback jobs. The job prepare operation is called from drm_atomic_helper_prepare_planes() for struct }(hj'hhhNhNubh)}(h!:c:type:`drm_writeback_connector`h]jz)}(hj'h]hdrm_writeback_connector}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_writeback_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMahj'ubh connectors only.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hMahj'ubh)}(hThis operation is optional.h]hThis operation is optional.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhhj'ubh)}(h4This callback is used by the atomic modeset helpers.h]h4This callback is used by the atomic modeset helpers.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMjhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMjhj2ubjn)}(hX{``cleanup_writeback_job`` This optional connector operation is used to support the cleanup of writeback jobs. The job cleanup operation is called from the existing drm_writeback_cleanup_job() function, invoked both when destroying the job as part of an aborted commit, or when the job completes. This operation is optional. This callback is used by the atomic modeset helpers. h](jt)}(h``cleanup_writeback_job``h]jz)}(hj (h]hcleanup_writeback_job}(hj"(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMyhj(ubj)}(hhh](h)}(hX This optional connector operation is used to support the cleanup of writeback jobs. The job cleanup operation is called from the existing drm_writeback_cleanup_job() function, invoked both when destroying the job as part of an aborted commit, or when the job completes.h]hX This optional connector operation is used to support the cleanup of writeback jobs. The job cleanup operation is called from the existing drm_writeback_cleanup_job() function, invoked both when destroying the job as part of an aborted commit, or when the job completes.}(hj9(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMqhj6(ubh)}(hThis operation is optional.h]hThis operation is optional.}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMwhj6(ubh)}(h4This callback is used by the atomic modeset helpers.h]h4This callback is used by the atomic modeset helpers.}(hjW(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5(hMyhj6(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj5(hMyhj2ubjn)}(hXD``enable_hpd`` Enable hot-plug detection for the connector. This operation is optional. This callback is used by the drm_kms_helper_poll_enable() helpers. This operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced. h](jt)}(h``enable_hpd``h]jz)}(hjw(h]h enable_hpd}(hjy(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhju(ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjq(ubj)}(hhh](h)}(h,Enable hot-plug detection for the connector.h]h,Enable hot-plug detection for the connector.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubh)}(hThis operation is optional.h]hThis operation is optional.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubh)}(hBThis callback is used by the drm_kms_helper_poll_enable() helpers.h]hBThis callback is used by the drm_kms_helper_poll_enable() helpers.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubh)}(hThis operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced.h]hThis operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubeh}(h]h ]h"]h$]h&]uh1jhjq(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMhj2ubjn)}(hXF``disable_hpd`` Disable hot-plug detection for the connector. This operation is optional. This callback is used by the drm_kms_helper_poll_disable() helpers. This operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced.h](jt)}(h``disable_hpd``h]jz)}(hj(h]h disable_hpd}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubj)}(hhh](h)}(h-Disable hot-plug detection for the connector.h]h-Disable hot-plug detection for the connector.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubh)}(hThis operation is optional.h]hThis operation is optional.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubh)}(hCThis callback is used by the drm_kms_helper_poll_disable() helpers.h]hCThis callback is used by the drm_kms_helper_poll_disable() helpers.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubh)}(hThis operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced.h]hThis operation does not need to perform any hpd state tracking as the DRM core handles that maintenance and ensures the calls to enable and disable hpd are balanced.}(hj$)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubh)}(h**Description**h]j%)}(hjN)h]h Description}(hjP)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjL)ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:hhubh)}(h[These functions are used by the atomic and legacy modeset helpers and by the probe helpers.h]h[These functions are used by the atomic and legacy modeset helpers and by the probe helpers.}(hjd)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMYhj:hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_connector_helper_add (C function)c.drm_connector_helper_addhNtauh1jxhj:hhhjhNubj)}(hhh](j)}(hovoid drm_connector_helper_add (struct drm_connector *connector, const struct drm_connector_helper_funcs *funcs)h]j)}(hnvoid drm_connector_helper_add(struct drm_connector *connector, const struct drm_connector_helper_funcs *funcs)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hMubj)}(hdrm_connector_helper_addh]j)}(hdrm_connector_helper_addh]hdrm_connector_helper_add}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj)hMubj)}(hQ(struct drm_connector *connector, const struct drm_connector_helper_funcs *funcs)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j%)}jj)sbc.drm_connector_helper_addasbuh1hhj)ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)ubj)}(h connectorh]h connector}(hj"*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(h.const struct drm_connector_helper_funcs *funcsh](j)}(hjch]hconst}(hj;*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7*ubj)}(h h]h }(hjH*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7*ubj)}(hjh]hstruct}(hjV*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7*ubj)}(h h]h }(hjc*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7*ubh)}(hhh]j)}(hdrm_connector_helper_funcsh]hdrm_connector_helper_funcs}(hjt*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjv*modnameN classnameNjj)}j]j*c.drm_connector_helper_addasbuh1hhj7*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7*ubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7*ubj)}(hfuncsh]hfuncs}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubeh}(h]h ]h"]h$]h&]jjuh1jhj)hhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj)hMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jhj)hMhj)hhubj)}(hhh]h)}(h&sets the helper vtable for a connectorh]h&sets the helper vtable for a connector}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jhhhj:hjhNubj)}(h**Parameters** ``struct drm_connector *connector`` DRM connector ``const struct drm_connector_helper_funcs *funcs`` helper vtable to set for **connector**h](h)}(h**Parameters**h]j%)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj*ubji)}(hhh](jn)}(h2``struct drm_connector *connector`` DRM connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj+h]hstruct drm_connector *connector}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj+ubj)}(hhh]h)}(h DRM connectorh]h DRM connector}(hj1+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-+hMhj.+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj-+hMhj+ubjn)}(hY``const struct drm_connector_helper_funcs *funcs`` helper vtable to set for **connector**h](jt)}(h2``const struct drm_connector_helper_funcs *funcs``h]jz)}(hjQ+h]h.const struct drm_connector_helper_funcs *funcs}(hjS+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO+ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjK+ubj)}(hhh]h)}(h&helper vtable to set for **connector**h](hhelper vtable to set for }(hjj+hhhNhNubj%)}(h **connector**h]h connector}(hjr+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjj+ubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjg+ubah}(h]h ]h"]h$]h&]uh1jhjK+ubeh}(h]h ]h"]h$]h&]uh1jmhjf+hMhj+ubeh}(h]h ]h"]h$]h&]uh1jhhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_plane_helper_funcs (C struct)c.drm_plane_helper_funcshNtauh1jxhj:hhhjhNubj)}(hhh](j)}(hdrm_plane_helper_funcsh]j)}(hstruct drm_plane_helper_funcsh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hMubj)}(hdrm_plane_helper_funcsh]j)}(hj+h]hdrm_plane_helper_funcs}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhj+hMhj+hhubj)}(hhh]h)}(hhelper operations for planesh]hhelper operations for planes}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj+hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](jstructeh"]h$]h&]jjjj,jj,jjjuh1jhhhj:hjhNubj)}(hX/**Definition**:: struct drm_plane_helper_funcs { int (*prepare_fb)(struct drm_plane *plane, struct drm_plane_state *new_state); void (*cleanup_fb)(struct drm_plane *plane, struct drm_plane_state *old_state); int (*begin_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); void (*end_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); int (*atomic_check)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_update)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_plane *plane, struct drm_atomic_state *state); int (*atomic_async_check)(struct drm_plane *plane, struct drm_atomic_state *state, bool flip); void (*atomic_async_update)(struct drm_plane *plane, struct drm_atomic_state *state); int (*get_scanout_buffer)(struct drm_plane *plane, struct drm_scanout_buffer *sb); void (*panic_flush)(struct drm_plane *plane); }; **Members** ``prepare_fb`` This hook is to prepare a framebuffer for scanout by e.g. pinning its backing storage or relocating it into a contiguous block of VRAM. Other possible preparatory work includes flushing caches. This function must not block for outstanding rendering, since it is called in the context of the atomic IOCTL even for async commits to be able to return any errors to userspace. Instead the recommended way is to fill out the :c:type:`drm_plane_state.fence ` of the passed-in :c:type:`drm_plane_state`. If the driver doesn't support native fences then equivalent functionality should be implemented through private members in the plane structure. For GEM drivers who neither have a **prepare_fb** nor **cleanup_fb** hook set drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their **prepare_fb** hook. The resources acquired in **prepare_fb** persist after the end of the atomic commit. Resources that can be release at the commit's end should be acquired in **begin_fb_access** and released in **end_fb_access**. For example, a GEM buffer's pin operation belongs into **prepare_fb** to keep the buffer pinned after the commit. But a vmap operation for shadow-plane helpers belongs into **begin_fb_access**, so that atomic helpers remove the mapping at the end of the commit. The helpers will call **cleanup_fb** with matching arguments for every successful call to this hook. This callback is used by the atomic modeset helpers, but it is optional. See **begin_fb_access** for preparing per-commit resources. RETURNS: 0 on success or one of the following negative error codes allowed by the :c:type:`drm_mode_config_funcs.atomic_commit ` vfunc. When using helpers this callback is the only one which can fail an atomic commit, everything else must complete successfully. ``cleanup_fb`` This hook is called to clean up any resources allocated for the given framebuffer and plane configuration in **prepare_fb**. This callback is used by the atomic modeset helpers, but it is optional. ``begin_fb_access`` This hook prepares the plane for access during an atomic commit. In contrast to **prepare_fb**, resources acquired in **begin_fb_access**, are released at the end of the atomic commit in **end_fb_access**. For example, with shadow-plane helpers, the GEM buffer's vmap operation belongs into **begin_fb_access**, so that the buffer's memory will be unmapped at the end of the commit in **end_fb_access**. But a GEM buffer's pin operation belongs into **prepare_fb** to keep the buffer pinned after the commit. The callback is used by the atomic modeset helpers, but it is optional. See **end_fb_cleanup** for undoing the effects of **begin_fb_access** and **prepare_fb** for acquiring resources until the next pageflip. Returns: 0 on success, or a negative errno code otherwise. ``end_fb_access`` This hook cleans up resources allocated by **begin_fb_access**. It it called at the end of a commit for the new plane state. ``atomic_check`` Drivers should check plane specific constraints in this hook. When using drm_atomic_helper_check_planes() plane's **atomic_check** hooks are called before the ones for CRTCs, which allows drivers to request shared resources that the CRTC controls here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked. This function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached. This callback is used by the atomic modeset helpers, but it is optional. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the :c:type:`drm_atomic_state` update tracking structure. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. ``atomic_update`` Drivers should use this function to update the plane state. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. ``atomic_enable`` Drivers should use this function to unconditionally enable a plane. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. It is called after **atomic_update**, which will be called for all enabled planes. Drivers that use **atomic_enable** should set up a plane in **atomic_update** and afterwards enable the plane in **atomic_enable**. If a plane needs to be enabled before installing the scanout buffer, drivers can still do so in **atomic_update**. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. If implemented, **atomic_enable** should be the inverse of **atomic_disable**. Drivers that don't want to use either can still implement the complete plane update in **atomic_update**. ``atomic_disable`` Drivers should use this function to unconditionally disable a plane. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. It is an alternative to **atomic_update**, which will be called for disabling planes, too, if the **atomic_disable** hook isn't implemented. This hook is also useful to disable planes in preparation of a modeset, by calling drm_atomic_helper_disable_planes_on_crtc() from the :c:type:`drm_crtc_helper_funcs.disable ` hook. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. It's intended to reverse the effects of **atomic_enable**. ``atomic_async_check`` Drivers should set this function pointer to check if the plane's atomic state can be updated in a async fashion. Here async means "not vblank synchronized". This hook is called by drm_atomic_async_check() to establish if a given update can be committed asynchronously, that is, if it can jump ahead of the state currently queued for update. This function is also used by drm_atomic_set_property() to determine if the plane can be flipped in async. The flip flag is used to distinguish if the function is used for just the plane state or for a flip. RETURNS: Return 0 on success and any error returned indicates that the update can not be applied in asynchronous manner. ``atomic_async_update`` Drivers should set this function pointer to perform asynchronous updates of planes, that is, jump ahead of the currently queued state and update the plane. Here async means "not vblank synchronized". This hook is called by drm_atomic_helper_async_commit(). An async update will happen on legacy cursor updates. An async update won't happen if there is an outstanding commit modifying the same plane. When doing async_update drivers shouldn't replace the :c:type:`drm_plane_state` but update the current one with the new plane configurations in the new plane_state. Drivers should also swap the framebuffers between current plane state (:c:type:`drm_plane.state `) and new_state. This is required since cleanup for async commits is performed on the new state, rather than old state like for traditional commits. Since we want to give up the reference on the current (old) fb instead of our brand new one, swap them in the driver during the async commit. FIXME: - It only works for single plane updates - Async Pageflips are not supported yet - Some hw might still scan out the old buffer until the next vblank, however we let go of the fb references as soon as we run this hook. For now drivers must implement their own workers for deferring if needed, until a common solution is created. ``get_scanout_buffer`` Get the current scanout buffer, to display a message with drm_panic. The driver should do the minimum changes to provide a buffer, that can be used to display the panic screen. Currently only linear buffers are supported. Non-linear buffer support is on the TODO list. The device :c:type:`dev.mode_config `.panic_lock is taken before calling this function, so you can safely access the :c:type:`plane.state ` It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what's safe and what is not allowed. It's a best effort mode, so it's expected that in some complex cases the panic screen won't be displayed. The returned :c:type:`drm_scanout_buffer.map ` must be valid if no error code is returned. Return: ``0`` on success, negative errno on failure. ``panic_flush`` It is used by drm_panic, and is called after the panic screen is drawn to the scanout buffer. In this function, the driver can send additional commands to the hardware, to make the scanout buffer visible. It is only called if get_scanout_buffer() returned successfully, and the :c:type:`dev.mode_config `.panic_lock is held during the entire sequence. It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what's safe and what is not allowed.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubh:}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj,ubj@)}(hXstruct drm_plane_helper_funcs { int (*prepare_fb)(struct drm_plane *plane, struct drm_plane_state *new_state); void (*cleanup_fb)(struct drm_plane *plane, struct drm_plane_state *old_state); int (*begin_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); void (*end_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); int (*atomic_check)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_update)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_plane *plane, struct drm_atomic_state *state); int (*atomic_async_check)(struct drm_plane *plane, struct drm_atomic_state *state, bool flip); void (*atomic_async_update)(struct drm_plane *plane, struct drm_atomic_state *state); int (*get_scanout_buffer)(struct drm_plane *plane, struct drm_scanout_buffer *sb); void (*panic_flush)(struct drm_plane *plane); };h]hXstruct drm_plane_helper_funcs { int (*prepare_fb)(struct drm_plane *plane, struct drm_plane_state *new_state); void (*cleanup_fb)(struct drm_plane *plane, struct drm_plane_state *old_state); int (*begin_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); void (*end_fb_access)(struct drm_plane *plane, struct drm_plane_state *new_plane_state); int (*atomic_check)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_update)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_plane *plane, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_plane *plane, struct drm_atomic_state *state); int (*atomic_async_check)(struct drm_plane *plane, struct drm_atomic_state *state, bool flip); void (*atomic_async_update)(struct drm_plane *plane, struct drm_atomic_state *state); int (*get_scanout_buffer)(struct drm_plane *plane, struct drm_scanout_buffer *sb); void (*panic_flush)(struct drm_plane *plane); };}hj8,sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj,ubh)}(h **Members**h]j%)}(hjI,h]hMembers}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjG,ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj,ubji)}(hhh](jn)}(hX``prepare_fb`` This hook is to prepare a framebuffer for scanout by e.g. pinning its backing storage or relocating it into a contiguous block of VRAM. Other possible preparatory work includes flushing caches. This function must not block for outstanding rendering, since it is called in the context of the atomic IOCTL even for async commits to be able to return any errors to userspace. Instead the recommended way is to fill out the :c:type:`drm_plane_state.fence ` of the passed-in :c:type:`drm_plane_state`. If the driver doesn't support native fences then equivalent functionality should be implemented through private members in the plane structure. For GEM drivers who neither have a **prepare_fb** nor **cleanup_fb** hook set drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their **prepare_fb** hook. The resources acquired in **prepare_fb** persist after the end of the atomic commit. Resources that can be release at the commit's end should be acquired in **begin_fb_access** and released in **end_fb_access**. For example, a GEM buffer's pin operation belongs into **prepare_fb** to keep the buffer pinned after the commit. But a vmap operation for shadow-plane helpers belongs into **begin_fb_access**, so that atomic helpers remove the mapping at the end of the commit. The helpers will call **cleanup_fb** with matching arguments for every successful call to this hook. This callback is used by the atomic modeset helpers, but it is optional. See **begin_fb_access** for preparing per-commit resources. RETURNS: 0 on success or one of the following negative error codes allowed by the :c:type:`drm_mode_config_funcs.atomic_commit ` vfunc. When using helpers this callback is the only one which can fail an atomic commit, everything else must complete successfully. h](jt)}(h``prepare_fb``h]jz)}(hjh,h]h prepare_fb}(hjj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf,ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjb,ubj)}(hhh](h)}(hThis hook is to prepare a framebuffer for scanout by e.g. pinning its backing storage or relocating it into a contiguous block of VRAM. Other possible preparatory work includes flushing caches.h]hThis hook is to prepare a framebuffer for scanout by e.g. pinning its backing storage or relocating it into a contiguous block of VRAM. Other possible preparatory work includes flushing caches.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj~,ubh)}(hXThis function must not block for outstanding rendering, since it is called in the context of the atomic IOCTL even for async commits to be able to return any errors to userspace. Instead the recommended way is to fill out the :c:type:`drm_plane_state.fence ` of the passed-in :c:type:`drm_plane_state`. If the driver doesn't support native fences then equivalent functionality should be implemented through private members in the plane structure.h](hThis function must not block for outstanding rendering, since it is called in the context of the atomic IOCTL even for async commits to be able to return any errors to userspace. Instead the recommended way is to fill out the }(hj,hhhNhNubh)}(h1:c:type:`drm_plane_state.fence `h]jz)}(hj,h]hdrm_plane_state.fence}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj,ubh of the passed-in }(hj,hhhNhNubh)}(h:c:type:`drm_plane_state`h]jz)}(hj,h]hdrm_plane_state}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_stateuh1hhj,hMhj,ubh. If the driver doesn’t support native fences then equivalent functionality should be implemented through private members in the plane structure.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj~,ubh)}(hXFor GEM drivers who neither have a **prepare_fb** nor **cleanup_fb** hook set drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their **prepare_fb** hook.h](h#For GEM drivers who neither have a }(hj,hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubh nor }(hj,hhhNhNubj%)}(h**cleanup_fb**h]h cleanup_fb}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubh hook set drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their }(hj,hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubh hook.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj~,ubh)}(hXThe resources acquired in **prepare_fb** persist after the end of the atomic commit. Resources that can be release at the commit's end should be acquired in **begin_fb_access** and released in **end_fb_access**. For example, a GEM buffer's pin operation belongs into **prepare_fb** to keep the buffer pinned after the commit. But a vmap operation for shadow-plane helpers belongs into **begin_fb_access**, so that atomic helpers remove the mapping at the end of the commit.h](hThe resources acquired in }(hj*-hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hj2-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*-ubhw persist after the end of the atomic commit. Resources that can be release at the commit’s end should be acquired in }(hj*-hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hjD-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*-ubh and released in }(hj*-hhhNhNubj%)}(h**end_fb_access**h]h end_fb_access}(hjV-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*-ubh;. For example, a GEM buffer’s pin operation belongs into }(hj*-hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*-ubhh to keep the buffer pinned after the commit. But a vmap operation for shadow-plane helpers belongs into }(hj*-hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hjz-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*-ubhE, so that atomic helpers remove the mapping at the end of the commit.}(hj*-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj~,ubh)}(hdThe helpers will call **cleanup_fb** with matching arguments for every successful call to this hook.h](hThe helpers will call }(hj-hhhNhNubj%)}(h**cleanup_fb**h]h cleanup_fb}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubh@ with matching arguments for every successful call to this hook.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj~,ubh)}(hThis callback is used by the atomic modeset helpers, but it is optional. See **begin_fb_access** for preparing per-commit resources.h](hMThis callback is used by the atomic modeset helpers, but it is optional. See }(hj-hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubh$ for preparing per-commit resources.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj~,ubh)}(hRETURNS:h]hRETURNS:}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj~,ubh)}(hX0 on success or one of the following negative error codes allowed by the :c:type:`drm_mode_config_funcs.atomic_commit ` vfunc. When using helpers this callback is the only one which can fail an atomic commit, everything else must complete successfully.h](hI0 on success or one of the following negative error codes allowed by the }(hj-hhhNhNubh)}(hE:c:type:`drm_mode_config_funcs.atomic_commit `h]jz)}(hj-h]h#drm_mode_config_funcs.atomic_commit}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj-ubh vfunc. When using helpers this callback is the only one which can fail an atomic commit, everything else must complete successfully.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj .hMhj~,ubeh}(h]h ]h"]h$]h&]uh1jhjb,ubeh}(h]h ]h"]h$]h&]uh1jmhj},hMhj_,ubjn)}(h``cleanup_fb`` This hook is called to clean up any resources allocated for the given framebuffer and plane configuration in **prepare_fb**. This callback is used by the atomic modeset helpers, but it is optional. h](jt)}(h``cleanup_fb``h]jz)}(hj(.h]h cleanup_fb}(hj*.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&.ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj".ubj)}(hhh](h)}(h|This hook is called to clean up any resources allocated for the given framebuffer and plane configuration in **prepare_fb**.h](hmThis hook is called to clean up any resources allocated for the given framebuffer and plane configuration in }(hjA.hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hjI.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjA.ubh.}(hjA.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj>.ubh)}(hHThis callback is used by the atomic modeset helpers, but it is optional.h]hHThis callback is used by the atomic modeset helpers, but it is optional.}(hjb.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj>.ubeh}(h]h ]h"]h$]h&]uh1jhj".ubeh}(h]h ]h"]h$]h&]uh1jmhj=.hMhj_,ubjn)}(hX!``begin_fb_access`` This hook prepares the plane for access during an atomic commit. In contrast to **prepare_fb**, resources acquired in **begin_fb_access**, are released at the end of the atomic commit in **end_fb_access**. For example, with shadow-plane helpers, the GEM buffer's vmap operation belongs into **begin_fb_access**, so that the buffer's memory will be unmapped at the end of the commit in **end_fb_access**. But a GEM buffer's pin operation belongs into **prepare_fb** to keep the buffer pinned after the commit. The callback is used by the atomic modeset helpers, but it is optional. See **end_fb_cleanup** for undoing the effects of **begin_fb_access** and **prepare_fb** for acquiring resources until the next pageflip. Returns: 0 on success, or a negative errno code otherwise. h](jt)}(h``begin_fb_access``h]jz)}(hj.h]hbegin_fb_access}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj}.ubj)}(hhh](h)}(hThis hook prepares the plane for access during an atomic commit. In contrast to **prepare_fb**, resources acquired in **begin_fb_access**, are released at the end of the atomic commit in **end_fb_access**.h](hPThis hook prepares the plane for access during an atomic commit. In contrast to }(hj.hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubh, resources acquired in }(hj.hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubh2, are released at the end of the atomic commit in }(hj.hhhNhNubj%)}(h**end_fb_access**h]h end_fb_access}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj.ubh)}(hX.For example, with shadow-plane helpers, the GEM buffer's vmap operation belongs into **begin_fb_access**, so that the buffer's memory will be unmapped at the end of the commit in **end_fb_access**. But a GEM buffer's pin operation belongs into **prepare_fb** to keep the buffer pinned after the commit.h](hWFor example, with shadow-plane helpers, the GEM buffer’s vmap operation belongs into }(hj.hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubhM, so that the buffer’s memory will be unmapped at the end of the commit in }(hj.hhhNhNubj%)}(h**end_fb_access**h]h end_fb_access}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubh2. But a GEM buffer’s pin operation belongs into }(hj.hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubh, to keep the buffer pinned after the commit.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj.ubh)}(hThe callback is used by the atomic modeset helpers, but it is optional. See **end_fb_cleanup** for undoing the effects of **begin_fb_access** and **prepare_fb** for acquiring resources until the next pageflip.h](hLThe callback is used by the atomic modeset helpers, but it is optional. See }(hj&/hhhNhNubj%)}(h**end_fb_cleanup**h]hend_fb_cleanup}(hj./hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&/ubh for undoing the effects of }(hj&/hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hj@/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&/ubh and }(hj&/hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&/ubh1 for acquiring resources until the next pageflip.}(hj&/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj.ubh)}(h:Returns: 0 on success, or a negative errno code otherwise.h]h:Returns: 0 on success, or a negative errno code otherwise.}(hjk/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj.ubeh}(h]h ]h"]h$]h&]uh1jhj}.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hMhj_,ubjn)}(h``end_fb_access`` This hook cleans up resources allocated by **begin_fb_access**. It it called at the end of a commit for the new plane state. h](jt)}(h``end_fb_access``h]jz)}(hj/h]h end_fb_access}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj/ubj)}(hhh]h)}(h|This hook cleans up resources allocated by **begin_fb_access**. It it called at the end of a commit for the new plane state.h](h+This hook cleans up resources allocated by }(hj/hhhNhNubj%)}(h**begin_fb_access**h]hbegin_fb_access}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubh>. It it called at the end of a commit for the new plane state.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhj_,ubjn)}(hX/``atomic_check`` Drivers should check plane specific constraints in this hook. When using drm_atomic_helper_check_planes() plane's **atomic_check** hooks are called before the ones for CRTCs, which allows drivers to request shared resources that the CRTC controls here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked. This function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached. This callback is used by the atomic modeset helpers, but it is optional. NOTE: This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the :c:type:`drm_atomic_state` update tracking structure. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. h](jt)}(h``atomic_check``h]jz)}(hj/h]h atomic_check}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM'hj/ubj)}(hhh](h)}(h=Drivers should check plane specific constraints in this hook.h]h=Drivers should check plane specific constraints in this hook.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hj/ubh)}(hXrWhen using drm_atomic_helper_check_planes() plane's **atomic_check** hooks are called before the ones for CRTCs, which allows drivers to request shared resources that the CRTC controls here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked.h](h6When using drm_atomic_helper_check_planes() plane’s }(hj0hhhNhNubj%)}(h**atomic_check**h]h atomic_check}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubhX. hooks are called before the ones for CRTCs, which allows drivers to request shared resources that the CRTC controls here. For more complicated dependencies the driver can call the provided check helpers multiple times until the computed state has a final configuration and everything has been checked.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hj/ubh)}(hXThis function is also allowed to inspect any other object's state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached.h]hXThis function is also allowed to inspect any other object’s state and can add more state objects to the atomic commit if needed. Care must be taken though to ensure that state check and compute functions for these added states are all called, and derived state in other objects all updated. Again the recommendation is to just call check helpers until a maximal configuration is reached.}(hj!0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj/ubh)}(hHThis callback is used by the atomic modeset helpers, but it is optional.h]hHThis callback is used by the atomic modeset helpers, but it is optional.}(hj00hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj/ubh)}(hNOTE:h]hNOTE:}(hj?0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj/ubh)}(hThis function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the :c:type:`drm_atomic_state` update tracking structure.h](h|This function is called in the check phase of an atomic update. The driver is not allowed to change anything outside of the }(hjN0hhhNhNubh)}(h:c:type:`drm_atomic_state`h]jz)}(hjX0h]hdrm_atomic_state}(hjZ0hhhNhNubah}(h]h ](jjYc-typeeh"]h$]h&]uh1jyhjV0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjN0ubh update tracking structure.}(hjN0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhju0hMhj/ubh)}(hRETURNS:h]hRETURNS:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM"hj/ubh)}(h0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](h0 on success, -EINVAL if the state or the transition can’t be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a }(hj0hhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hj0h]hdrm_modeset_lock}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM$hj0ubh deadlock.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hM$hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hM'hj_,ubjn)}(hX8``atomic_update`` Drivers should use this function to update the plane state. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. h](jt)}(h``atomic_update``h]jz)}(hj0h]h atomic_update}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM8hj0ubj)}(hhh](h)}(hDrivers should use this function to update the plane state. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks.h](h`Drivers should use this function to update the plane state. This hook is called in-between the }(hj0hhhNhNubh)}(hD:c:type:`drm_crtc_helper_funcs.atomic_begin `h]jz)}(hj0h]h"drm_crtc_helper_funcs.atomic_begin}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM/hj0ubh2 and drm_crtc_helper_funcs.atomic_flush callbacks.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hM/hj0ubh)}(hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.h]hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM3hj0ubh)}(hHThis callback is used by the atomic modeset helpers, but it is optional.h]hHThis callback is used by the atomic modeset helpers, but it is optional.}(hj-1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM8hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hM8hj_,ubjn)}(hXB``atomic_enable`` Drivers should use this function to unconditionally enable a plane. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. It is called after **atomic_update**, which will be called for all enabled planes. Drivers that use **atomic_enable** should set up a plane in **atomic_update** and afterwards enable the plane in **atomic_enable**. If a plane needs to be enabled before installing the scanout buffer, drivers can still do so in **atomic_update**. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. If implemented, **atomic_enable** should be the inverse of **atomic_disable**. Drivers that don't want to use either can still implement the complete plane update in **atomic_update**. h](jt)}(h``atomic_enable``h]jz)}(hjM1h]h atomic_enable}(hjO1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjK1ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMQhjG1ubj)}(hhh](h)}(hX'Drivers should use this function to unconditionally enable a plane. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. It is called after **atomic_update**, which will be called for all enabled planes. Drivers that use **atomic_enable** should set up a plane in **atomic_update** and afterwards enable the plane in **atomic_enable**. If a plane needs to be enabled before installing the scanout buffer, drivers can still do so in **atomic_update**.h](hgDrivers should use this function to unconditionally enable a plane. This hook is called in-between the }(hjf1hhhNhNubh)}(hD:c:type:`drm_crtc_helper_funcs.atomic_begin `h]jz)}(hjp1h]h"drm_crtc_helper_funcs.atomic_begin}(hjr1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjn1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM@hjf1ubhF and drm_crtc_helper_funcs.atomic_flush callbacks. It is called after }(hjf1hhhNhNubj%)}(h**atomic_update**h]h atomic_update}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf1ubh@, which will be called for all enabled planes. Drivers that use }(hjf1hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf1ubh should set up a plane in }(hjf1hhhNhNubj%)}(h**atomic_update**h]h atomic_update}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf1ubh$ and afterwards enable the plane in }(hjf1hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf1ubhb. If a plane needs to be enabled before installing the scanout buffer, drivers can still do so in }(hjf1hhhNhNubj%)}(h**atomic_update**h]h atomic_update}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf1ubh.}(hjf1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hM@hjc1ubh)}(hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.h]hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMIhjc1ubh)}(hXThis callback is used by the atomic modeset helpers, but it is optional. If implemented, **atomic_enable** should be the inverse of **atomic_disable**. Drivers that don't want to use either can still implement the complete plane update in **atomic_update**.h](hYThis callback is used by the atomic modeset helpers, but it is optional. If implemented, }(hj2hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh should be the inverse of }(hj2hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh[. Drivers that don’t want to use either can still implement the complete plane update in }(hj2hhhNhNubj%)}(h**atomic_update**h]h atomic_update}(hj-2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMNhjc1ubeh}(h]h ]h"]h$]h&]uh1jhjG1ubeh}(h]h ]h"]h$]h&]uh1jmhjb1hMQhj_,ubjn)}(hX``atomic_disable`` Drivers should use this function to unconditionally disable a plane. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. It is an alternative to **atomic_update**, which will be called for disabling planes, too, if the **atomic_disable** hook isn't implemented. This hook is also useful to disable planes in preparation of a modeset, by calling drm_atomic_helper_disable_planes_on_crtc() from the :c:type:`drm_crtc_helper_funcs.disable ` hook. Note that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers. This callback is used by the atomic modeset helpers, but it is optional. It's intended to reverse the effects of **atomic_enable**. h](jt)}(h``atomic_disable``h]jz)}(hjX2h]hatomic_disable}(hjZ2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjV2ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMjhjR2ubj)}(hhh](h)}(hXkDrivers should use this function to unconditionally disable a plane. This hook is called in-between the :c:type:`drm_crtc_helper_funcs.atomic_begin ` and drm_crtc_helper_funcs.atomic_flush callbacks. It is an alternative to **atomic_update**, which will be called for disabling planes, too, if the **atomic_disable** hook isn't implemented.h](hhDrivers should use this function to unconditionally disable a plane. This hook is called in-between the }(hjq2hhhNhNubh)}(hD:c:type:`drm_crtc_helper_funcs.atomic_begin `h]jz)}(hj{2h]h"drm_crtc_helper_funcs.atomic_begin}(hj}2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjy2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMYhjq2ubhK and drm_crtc_helper_funcs.atomic_flush callbacks. It is an alternative to }(hjq2hhhNhNubj%)}(h**atomic_update**h]h atomic_update}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjq2ubh9, which will be called for disabling planes, too, if the }(hjq2hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjq2ubh hook isn’t implemented.}(hjq2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hMYhjn2ubh)}(hThis hook is also useful to disable planes in preparation of a modeset, by calling drm_atomic_helper_disable_planes_on_crtc() from the :c:type:`drm_crtc_helper_funcs.disable ` hook.h](hThis hook is also useful to disable planes in preparation of a modeset, by calling drm_atomic_helper_disable_planes_on_crtc() from the }(hj2hhhNhNubh)}(h?:c:type:`drm_crtc_helper_funcs.disable `h]jz)}(hj2h]hdrm_crtc_helper_funcs.disable}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM`hj2ubh hook.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hM`hjn2ubh)}(hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.h]hXNote that the power state of the display pipe when this function is called depends upon the exact helpers and calling sequence the driver has picked. See drm_atomic_helper_commit_planes() for a discussion of the tradeoffs and variants of plane commit helpers.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMdhjn2ubh)}(hThis callback is used by the atomic modeset helpers, but it is optional. It's intended to reverse the effects of **atomic_enable**.h](hsThis callback is used by the atomic modeset helpers, but it is optional. It’s intended to reverse the effects of }(hj3hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubh.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMihjn2ubeh}(h]h ]h"]h$]h&]uh1jhjR2ubeh}(h]h ]h"]h$]h&]uh1jmhjm2hMjhj_,ubjn)}(hX``atomic_async_check`` Drivers should set this function pointer to check if the plane's atomic state can be updated in a async fashion. Here async means "not vblank synchronized". This hook is called by drm_atomic_async_check() to establish if a given update can be committed asynchronously, that is, if it can jump ahead of the state currently queued for update. This function is also used by drm_atomic_set_property() to determine if the plane can be flipped in async. The flip flag is used to distinguish if the function is used for just the plane state or for a flip. RETURNS: Return 0 on success and any error returned indicates that the update can not be applied in asynchronous manner. h](jt)}(h``atomic_async_check``h]jz)}(hj;3h]hatomic_async_check}(hj=3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj93ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj53ubj)}(hhh](h)}(hDrivers should set this function pointer to check if the plane's atomic state can be updated in a async fashion. Here async means "not vblank synchronized".h]hDrivers should set this function pointer to check if the plane’s atomic state can be updated in a async fashion. Here async means “not vblank synchronized”.}(hjT3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMrhjQ3ubh)}(hThis hook is called by drm_atomic_async_check() to establish if a given update can be committed asynchronously, that is, if it can jump ahead of the state currently queued for update.h]hThis hook is called by drm_atomic_async_check() to establish if a given update can be committed asynchronously, that is, if it can jump ahead of the state currently queued for update.}(hjc3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMvhjQ3ubh)}(hThis function is also used by drm_atomic_set_property() to determine if the plane can be flipped in async. The flip flag is used to distinguish if the function is used for just the plane state or for a flip.h]hThis function is also used by drm_atomic_set_property() to determine if the plane can be flipped in async. The flip flag is used to distinguish if the function is used for just the plane state or for a flip.}(hjr3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMzhjQ3ubh)}(hRETURNS:h]hRETURNS:}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjQ3ubh)}(hoReturn 0 on success and any error returned indicates that the update can not be applied in asynchronous manner.h]hoReturn 0 on success and any error returned indicates that the update can not be applied in asynchronous manner.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjQ3ubeh}(h]h ]h"]h$]h&]uh1jhj53ubeh}(h]h ]h"]h$]h&]uh1jmhjP3hMhj_,ubjn)}(hX<``atomic_async_update`` Drivers should set this function pointer to perform asynchronous updates of planes, that is, jump ahead of the currently queued state and update the plane. Here async means "not vblank synchronized". This hook is called by drm_atomic_helper_async_commit(). An async update will happen on legacy cursor updates. An async update won't happen if there is an outstanding commit modifying the same plane. When doing async_update drivers shouldn't replace the :c:type:`drm_plane_state` but update the current one with the new plane configurations in the new plane_state. Drivers should also swap the framebuffers between current plane state (:c:type:`drm_plane.state `) and new_state. This is required since cleanup for async commits is performed on the new state, rather than old state like for traditional commits. Since we want to give up the reference on the current (old) fb instead of our brand new one, swap them in the driver during the async commit. FIXME: - It only works for single plane updates - Async Pageflips are not supported yet - Some hw might still scan out the old buffer until the next vblank, however we let go of the fb references as soon as we run this hook. For now drivers must implement their own workers for deferring if needed, until a common solution is created. h](jt)}(h``atomic_async_update``h]jz)}(hj3h]hatomic_async_update}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubj)}(hhh](h)}(hDrivers should set this function pointer to perform asynchronous updates of planes, that is, jump ahead of the currently queued state and update the plane. Here async means "not vblank synchronized".h]hDrivers should set this function pointer to perform asynchronous updates of planes, that is, jump ahead of the currently queued state and update the plane. Here async means “not vblank synchronized”.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubh)}(h8This hook is called by drm_atomic_helper_async_commit().h]h8This hook is called by drm_atomic_helper_async_commit().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubh)}(hAn async update will happen on legacy cursor updates. An async update won't happen if there is an outstanding commit modifying the same plane.h]hAn async update will happen on legacy cursor updates. An async update won’t happen if there is an outstanding commit modifying the same plane.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubh)}(hWhen doing async_update drivers shouldn't replace the :c:type:`drm_plane_state` but update the current one with the new plane configurations in the new plane_state.h](h8When doing async_update drivers shouldn’t replace the }(hj3hhhNhNubh)}(h:c:type:`drm_plane_state`h]jz)}(hj4h]hdrm_plane_state}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj3ubhU but update the current one with the new plane configurations in the new plane_state.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj3ubh)}(hXDrivers should also swap the framebuffers between current plane state (:c:type:`drm_plane.state `) and new_state. This is required since cleanup for async commits is performed on the new state, rather than old state like for traditional commits. Since we want to give up the reference on the current (old) fb instead of our brand new one, swap them in the driver during the async commit.h](hGDrivers should also swap the framebuffers between current plane state (}(hj)4hhhNhNubh)}(h%:c:type:`drm_plane.state `h]jz)}(hj34h]hdrm_plane.state}(hj54hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj14ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_planeuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj)4ubhX") and new_state. This is required since cleanup for async commits is performed on the new state, rather than old state like for traditional commits. Since we want to give up the reference on the current (old) fb instead of our brand new one, swap them in the driver during the async commit.}(hj)4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjP4hMhj3ubji)}(hhh]jn)}(hXUFIXME: - It only works for single plane updates - Async Pageflips are not supported yet - Some hw might still scan out the old buffer until the next vblank, however we let go of the fb references as soon as we run this hook. For now drivers must implement their own workers for deferring if needed, until a common solution is created. h](jt)}(hFIXME:h]hFIXME:}(hjb4hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj3hMhj^4ubj)}(hhh]h)}(hhh](h)}(h&It only works for single plane updatesh]h)}(hjx4h]h&It only works for single plane updates}(hjz4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjv4ubah}(h]h ]h"]h$]h&]uh1hhjs4ubh)}(h%Async Pageflips are not supported yeth]h)}(hj4h]h%Async Pageflips are not supported yet}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj4ubah}(h]h ]h"]h$]h&]uh1hhjs4ubh)}(hSome hw might still scan out the old buffer until the next vblank, however we let go of the fb references as soon as we run this hook. For now drivers must implement their own workers for deferring if needed, until a common solution is created. h]h)}(hSome hw might still scan out the old buffer until the next vblank, however we let go of the fb references as soon as we run this hook. For now drivers must implement their own workers for deferring if needed, until a common solution is created.h]hSome hw might still scan out the old buffer until the next vblank, however we let go of the fb references as soon as we run this hook. For now drivers must implement their own workers for deferring if needed, until a common solution is created.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj4ubah}(h]h ]h"]h$]h&]uh1hhjs4ubeh}(h]h ]h"]h$]h&]j8-uh1hhj4hMhjp4ubah}(h]h ]h"]h$]h&]uh1jhj^4ubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhj[4ubah}(h]h ]h"]h$]h&]uh1jhhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhj_,ubjn)}(hX``get_scanout_buffer`` Get the current scanout buffer, to display a message with drm_panic. The driver should do the minimum changes to provide a buffer, that can be used to display the panic screen. Currently only linear buffers are supported. Non-linear buffer support is on the TODO list. The device :c:type:`dev.mode_config `.panic_lock is taken before calling this function, so you can safely access the :c:type:`plane.state ` It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what's safe and what is not allowed. It's a best effort mode, so it's expected that in some complex cases the panic screen won't be displayed. The returned :c:type:`drm_scanout_buffer.map ` must be valid if no error code is returned. Return: ``0`` on success, negative errno on failure. h](jt)}(h``get_scanout_buffer``h]jz)}(hj4h]hget_scanout_buffer}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj4ubj)}(hhh](h)}(hX<Get the current scanout buffer, to display a message with drm_panic. The driver should do the minimum changes to provide a buffer, that can be used to display the panic screen. Currently only linear buffers are supported. Non-linear buffer support is on the TODO list. The device :c:type:`dev.mode_config `.panic_lock is taken before calling this function, so you can safely access the :c:type:`plane.state ` It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what's safe and what is not allowed. It's a best effort mode, so it's expected that in some complex cases the panic screen won't be displayed. The returned :c:type:`drm_scanout_buffer.map ` must be valid if no error code is returned.h](hXGet the current scanout buffer, to display a message with drm_panic. The driver should do the minimum changes to provide a buffer, that can be used to display the panic screen. Currently only linear buffers are supported. Non-linear buffer support is on the TODO list. The device }(hj5hhhNhNubh)}(h:c:type:`dev.mode_config `h]jz)}(hj 5h]hdev.mode_config}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj 5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdevuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj5ubhP.panic_lock is taken before calling this function, so you can safely access the }(hj5hhhNhNubh)}(h:c:type:`plane.state `h]jz)}(hj15h]h plane.state}(hj35hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjplaneuh1hhj*5hMhj5ubhX? It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what’s safe and what is not allowed. It’s a best effort mode, so it’s expected that in some complex cases the panic screen won’t be displayed. The returned }(hj5hhhNhNubh)}(h5:c:type:`drm_scanout_buffer.map `h]jz)}(hjT5h]hdrm_scanout_buffer.map}(hjV5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjR5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_scanout_bufferuh1hhj*5hMhj5ubh, must be valid if no error code is returned.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*5hMhj5ubh)}(h4Return: ``0`` on success, negative errno on failure.h](hReturn: }(hj{5hhhNhNubjz)}(h``0``h]h0}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{5ubh' on success, negative errno on failure.}(hj{5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj5ubeh}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhj4hMhj_,ubjn)}(hX3``panic_flush`` It is used by drm_panic, and is called after the panic screen is drawn to the scanout buffer. In this function, the driver can send additional commands to the hardware, to make the scanout buffer visible. It is only called if get_scanout_buffer() returned successfully, and the :c:type:`dev.mode_config `.panic_lock is held during the entire sequence. It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what's safe and what is not allowed.h](jt)}(h``panic_flush``h]jz)}(hj5h]h panic_flush}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj5ubj)}(hhh]h)}(hX#It is used by drm_panic, and is called after the panic screen is drawn to the scanout buffer. In this function, the driver can send additional commands to the hardware, to make the scanout buffer visible. It is only called if get_scanout_buffer() returned successfully, and the :c:type:`dev.mode_config `.panic_lock is held during the entire sequence. It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what's safe and what is not allowed.h](hXIt is used by drm_panic, and is called after the panic screen is drawn to the scanout buffer. In this function, the driver can send additional commands to the hardware, to make the scanout buffer visible. It is only called if get_scanout_buffer() returned successfully, and the }(hj5hhhNhNubh)}(h:c:type:`dev.mode_config `h]jz)}(hj5h]hdev.mode_config}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdevuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj5ubh.panic_lock is held during the entire sequence. It is called from a panic callback, and must follow its restrictions. Please look the documentation at drm_panic_trylock() for an in-depth discussions of what’s safe and what is not allowed.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hMhj_,ubeh}(h]h ]h"]h$]h&]uh1jhhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubh)}(h**Description**h]j%)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:hhubh)}(h/These functions are used by the atomic helpers.h]h/These functions are used by the atomic helpers.}(hj*6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_plane_helper_add (C function)c.drm_plane_helper_addhNtauh1jxhj:hhhjhNubj)}(hhh](j)}(h_void drm_plane_helper_add (struct drm_plane *plane, const struct drm_plane_helper_funcs *funcs)h]j)}(h^void drm_plane_helper_add(struct drm_plane *plane, const struct drm_plane_helper_funcs *funcs)h](j)}(hvoidh]hvoid}(hjR6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN6hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMubj)}(h h]h }(hja6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN6hhhj`6hMubj)}(hdrm_plane_helper_addh]j)}(hdrm_plane_helper_addh]hdrm_plane_helper_add}(hjs6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjN6hhhj`6hMubj)}(hE(struct drm_plane *plane, const struct drm_plane_helper_funcs *funcs)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j%)}jju6sbc.drm_plane_helper_addasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(hplaneh]hplane}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(h*const struct drm_plane_helper_funcs *funcsh](j)}(hjch]hconst}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj)7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(hdrm_plane_helper_funcsh]hdrm_plane_helper_funcs}(hj:7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj77ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<7modnameN classnameNjj)}j]j6c.drm_plane_helper_addasbuh1hhj6ubj)}(h h]h }(hjX7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hjf7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(hfuncsh]hfuncs}(hjs7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhjN6hhhj`6hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJ6hhhj`6hMubah}(h]jE6ah ](jjeh"]h$]h&]jj)jhuh1jhj`6hMhjG6hhubj)}(hhh]h)}(h"sets the helper vtable for a planeh]h"sets the helper vtable for a plane}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjG6hhhj`6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhj:hjhNubj)}(h**Parameters** ``struct drm_plane *plane`` DRM plane ``const struct drm_plane_helper_funcs *funcs`` helper vtable to set for **plane**h](h)}(h**Parameters**h]j%)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj7ubji)}(hhh](jn)}(h&``struct drm_plane *plane`` DRM plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hj7h]hstruct drm_plane *plane}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj7ubj)}(hhh]h)}(h DRM planeh]h DRM plane}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhj7ubjn)}(hQ``const struct drm_plane_helper_funcs *funcs`` helper vtable to set for **plane**h](jt)}(h.``const struct drm_plane_helper_funcs *funcs``h]jz)}(hj8h]h*const struct drm_plane_helper_funcs *funcs}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj8ubj)}(hhh]h)}(h"helper vtable to set for **plane**h](hhelper vtable to set for }(hj08hhhNhNubj%)}(h **plane**h]hplane}(hj88hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj08ubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj-8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj,8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_mode_config_helper_funcs (C struct)c.drm_mode_config_helper_funcshNtauh1jxhj:hhhjhNubj)}(hhh](j)}(hdrm_mode_config_helper_funcsh]j)}(h#struct drm_mode_config_helper_funcsh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{8hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{8hhhj8hMubj)}(hdrm_mode_config_helper_funcsh]j)}(hjy8h]hdrm_mode_config_helper_funcs}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{8hhhj8hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjw8hhhj8hMubah}(h]jr8ah ](jjeh"]h$]h&]jj)jhuh1jhj8hMhjt8hhubj)}(hhh]h)}(h global modeset helper operationsh]h global modeset helper operations}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jhjt8hhhj8hMubeh}(h]h ](jstructeh"]h$]h&]jjjj8jj8jjjuh1jhhhj:hjhNubj)}(hXN **Definition**:: struct drm_mode_config_helper_funcs { void (*atomic_commit_tail)(struct drm_atomic_state *state); int (*atomic_commit_setup)(struct drm_atomic_state *state); }; **Members** ``atomic_commit_tail`` This hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking commit helpers (see drm_atomic_helper_setup_commit() for a starting point) to implement blocking and nonblocking commits easily. It is not used by the atomic helpers This function is called when the new atomic state has already been swapped into the various state pointers. The passed in state therefore contains copies of the old/previous state. This hook should commit the new state into hardware. Note that the helpers have already waited for preceding atomic commits and fences, but drivers can add more waiting calls at the start of their implementation, e.g. to wait for driver-internal request for implicit syncing, before starting to commit the update to the hardware. After the atomic update is committed to the hardware this hook needs to call drm_atomic_helper_commit_hw_done(). Then wait for the update to be executed by the hardware, for example using drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(), and then clean up the old framebuffers using drm_atomic_helper_cleanup_planes(). When disabling a CRTC this hook _must_ stall for the commit to complete. Vblank waits don't work on disabled CRTC, hence the core can't take care of this. And it also can't rely on the vblank event, since that can be signalled already when the screen shows black, which can happen much earlier than the last hardware access needed to shut off the display pipeline completely. This hook is optional, the default implementation is drm_atomic_helper_commit_tail(). ``atomic_commit_setup`` This hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking helpers (see drm_atomic_helper_setup_commit()) to extend the DRM commit setup. It is not used by the atomic helpers. This function is called at the end of drm_atomic_helper_setup_commit(), so once the commit has been properly setup across the generic DRM object states. It allows drivers to do some additional commit tracking that isn't related to a CRTC, plane or connector, tracked in a :c:type:`drm_private_obj` structure. Note that the documentation of :c:type:`drm_private_obj` has more details on how one should implement this. This hook is optional.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubh:}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj8ubj@)}(hstruct drm_mode_config_helper_funcs { void (*atomic_commit_tail)(struct drm_atomic_state *state); int (*atomic_commit_setup)(struct drm_atomic_state *state); };h]hstruct drm_mode_config_helper_funcs { void (*atomic_commit_tail)(struct drm_atomic_state *state); int (*atomic_commit_setup)(struct drm_atomic_state *state); };}hj8sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj8ubh)}(h **Members**h]j%)}(hj9h]hMembers}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj 9ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj8ubji)}(hhh](jn)}(hXi``atomic_commit_tail`` This hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking commit helpers (see drm_atomic_helper_setup_commit() for a starting point) to implement blocking and nonblocking commits easily. It is not used by the atomic helpers This function is called when the new atomic state has already been swapped into the various state pointers. The passed in state therefore contains copies of the old/previous state. This hook should commit the new state into hardware. Note that the helpers have already waited for preceding atomic commits and fences, but drivers can add more waiting calls at the start of their implementation, e.g. to wait for driver-internal request for implicit syncing, before starting to commit the update to the hardware. After the atomic update is committed to the hardware this hook needs to call drm_atomic_helper_commit_hw_done(). Then wait for the update to be executed by the hardware, for example using drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(), and then clean up the old framebuffers using drm_atomic_helper_cleanup_planes(). When disabling a CRTC this hook _must_ stall for the commit to complete. Vblank waits don't work on disabled CRTC, hence the core can't take care of this. And it also can't rely on the vblank event, since that can be signalled already when the screen shows black, which can happen much earlier than the last hardware access needed to shut off the display pipeline completely. This hook is optional, the default implementation is drm_atomic_helper_commit_tail(). h](jt)}(h``atomic_commit_tail``h]jz)}(hj.9h]hatomic_commit_tail}(hj09hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,9ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj(9ubj)}(hhh](h)}(hX#This hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking commit helpers (see drm_atomic_helper_setup_commit() for a starting point) to implement blocking and nonblocking commits easily. It is not used by the atomic helpersh]hX#This hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking commit helpers (see drm_atomic_helper_setup_commit() for a starting point) to implement blocking and nonblocking commits easily. It is not used by the atomic helpers}(hjG9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD9ubh)}(hXThis function is called when the new atomic state has already been swapped into the various state pointers. The passed in state therefore contains copies of the old/previous state. This hook should commit the new state into hardware. Note that the helpers have already waited for preceding atomic commits and fences, but drivers can add more waiting calls at the start of their implementation, e.g. to wait for driver-internal request for implicit syncing, before starting to commit the update to the hardware.h]hXThis function is called when the new atomic state has already been swapped into the various state pointers. The passed in state therefore contains copies of the old/previous state. This hook should commit the new state into hardware. Note that the helpers have already waited for preceding atomic commits and fences, but drivers can add more waiting calls at the start of their implementation, e.g. to wait for driver-internal request for implicit syncing, before starting to commit the update to the hardware.}(hjV9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD9ubh)}(hX\After the atomic update is committed to the hardware this hook needs to call drm_atomic_helper_commit_hw_done(). Then wait for the update to be executed by the hardware, for example using drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(), and then clean up the old framebuffers using drm_atomic_helper_cleanup_planes().h]hX\After the atomic update is committed to the hardware this hook needs to call drm_atomic_helper_commit_hw_done(). Then wait for the update to be executed by the hardware, for example using drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(), and then clean up the old framebuffers using drm_atomic_helper_cleanup_planes().}(hje9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD9ubh)}(hXwWhen disabling a CRTC this hook _must_ stall for the commit to complete. Vblank waits don't work on disabled CRTC, hence the core can't take care of this. And it also can't rely on the vblank event, since that can be signalled already when the screen shows black, which can happen much earlier than the last hardware access needed to shut off the display pipeline completely.h]hX}When disabling a CRTC this hook _must_ stall for the commit to complete. Vblank waits don’t work on disabled CRTC, hence the core can’t take care of this. And it also can’t rely on the vblank event, since that can be signalled already when the screen shows black, which can happen much earlier than the last hardware access needed to shut off the display pipeline completely.}(hjt9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD9ubh)}(hUThis hook is optional, the default implementation is drm_atomic_helper_commit_tail().h]hUThis hook is optional, the default implementation is drm_atomic_helper_commit_tail().}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhjD9ubeh}(h]h ]h"]h$]h&]uh1jhj(9ubeh}(h]h ]h"]h$]h&]uh1jmhjC9hMhj%9ubjn)}(hX``atomic_commit_setup`` This hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking helpers (see drm_atomic_helper_setup_commit()) to extend the DRM commit setup. It is not used by the atomic helpers. This function is called at the end of drm_atomic_helper_setup_commit(), so once the commit has been properly setup across the generic DRM object states. It allows drivers to do some additional commit tracking that isn't related to a CRTC, plane or connector, tracked in a :c:type:`drm_private_obj` structure. Note that the documentation of :c:type:`drm_private_obj` has more details on how one should implement this. This hook is optional.h](jt)}(h``atomic_commit_setup``h]jz)}(hj9h]hatomic_commit_setup}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj9ubj)}(hhh](h)}(hThis hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking helpers (see drm_atomic_helper_setup_commit()) to extend the DRM commit setup. It is not used by the atomic helpers.h]hThis hook is used by the default atomic_commit() hook implemented in drm_atomic_helper_commit() together with the nonblocking helpers (see drm_atomic_helper_setup_commit()) to extend the DRM commit setup. It is not used by the atomic helpers.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhM hj9ubh)}(hX4This function is called at the end of drm_atomic_helper_setup_commit(), so once the commit has been properly setup across the generic DRM object states. It allows drivers to do some additional commit tracking that isn't related to a CRTC, plane or connector, tracked in a :c:type:`drm_private_obj` structure.h](hXThis function is called at the end of drm_atomic_helper_setup_commit(), so once the commit has been properly setup across the generic DRM object states. It allows drivers to do some additional commit tracking that isn’t related to a CRTC, plane or connector, tracked in a }(hj9hhhNhNubh)}(h:c:type:`drm_private_obj`h]jz)}(hj9h]hdrm_private_obj}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_private_objuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj9ubh structure.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubh)}(hkNote that the documentation of :c:type:`drm_private_obj` has more details on how one should implement this.h](hNote that the documentation of }(hj9hhhNhNubh)}(h:c:type:`drm_private_obj`h]jz)}(hj:h]hdrm_private_obj}(hj :hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_private_objuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj9ubh3 has more details on how one should implement this.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%:hMhj9ubh)}(hThis hook is optional.h]hThis hook is optional.}(hj0:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhj%9ubeh}(h]h ]h"]h$]h&]uh1jhhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj:hhhjhNubh)}(h**Description**h]j%)}(hjZ:h]h Description}(hj\:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjX:ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:hhubh)}(h6These helper functions are used by the atomic helpers.h]h6These helper functions are used by the atomic helpers.}(hjp:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:42: ./include/drm/drm_modeset_helper_vtables.hhMhj:hhubhtarget)}(h.. _drm_atomic_helper:h]h}(h]h ]h"]h$]h&]refiddrm-atomic-helperuh1j:hK-hj:hhhhubeh}(h]+modeset-helper-reference-for-common-vtablesah ]h"]+modeset helper reference for common vtablesah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(h)Atomic Modeset Helper Functions Referenceh]h)Atomic Modeset Helper Functions Reference}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hhhhhK0ubh)}(hhh](h)}(hOverviewh]hOverview}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hhhhhK3ubh)}(hXXThis helper library provides implementations of check and commit functions on top of the CRTC modeset helper callbacks and the plane helper callbacks. It also provides convenience implementations for the atomic state handling callbacks for drivers which don't need to subclass the drm core structures to add their own additional internal state.h]hXZThis helper library provides implementations of check and commit functions on top of the CRTC modeset helper callbacks and the plane helper callbacks. It also provides convenience implementations for the atomic state handling callbacks for drivers which don’t need to subclass the drm core structures to add their own additional internal state.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:53: ./drivers/gpu/drm/drm_atomic_helper.chK3hj:hhubh)}(hXTThis library also provides default implementations for the check callback in drm_atomic_helper_check() and for the commit callback with drm_atomic_helper_commit(). But the individual stages and callbacks are exposed to allow drivers to mix and match and e.g. use the plane helpers only together with a driver private modeset implementation.h]hXTThis library also provides default implementations for the check callback in drm_atomic_helper_check() and for the commit callback with drm_atomic_helper_commit(). But the individual stages and callbacks are exposed to allow drivers to mix and match and e.g. use the plane helpers only together with a driver private modeset implementation.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:53: ./drivers/gpu/drm/drm_atomic_helper.chK9hj:hhubh)}(hXRThis library also provides implementations for all the legacy driver interfaces on top of the atomic interface. See drm_atomic_helper_set_config(), drm_atomic_helper_disable_plane(), and the various functions to implement set_property callbacks. New drivers must not implement these functions themselves but must use the provided helpers.h]hXRThis library also provides implementations for all the legacy driver interfaces on top of the atomic interface. See drm_atomic_helper_set_config(), drm_atomic_helper_disable_plane(), and the various functions to implement set_property callbacks. New drivers must not implement these functions themselves but must use the provided helpers.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:53: ./drivers/gpu/drm/drm_atomic_helper.chK?hj:hhubh)}(hXThe atomic helper uses the same function table structures as all other modesetting helpers. See the documentation for :c:type:`struct drm_crtc_helper_funcs `, struct :c:type:`drm_encoder_helper_funcs` and :c:type:`struct drm_connector_helper_funcs `. It also shares the :c:type:`struct drm_plane_helper_funcs ` function table with the plane helpers.h](hvThe atomic helper uses the same function table structures as all other modesetting helpers. See the documentation for }(hj:hhhNhNubh)}(h>:c:type:`struct drm_crtc_helper_funcs `h]jz)}(hj:h]hstruct drm_crtc_helper_funcs}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:53: ./drivers/gpu/drm/drm_atomic_helper.chKEhj:ubh , struct }(hj:hhhNhNubh)}(h":c:type:`drm_encoder_helper_funcs`h]jz)}(hj;h]hdrm_encoder_helper_funcs}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj ;hKEhj:ubh and }(hj:hhhNhNubh)}(hH:c:type:`struct drm_connector_helper_funcs `h]jz)}(hj5;h]h!struct drm_connector_helper_funcs}(hj7;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhj ;hKEhj:ubh. It also shares the }(hj:hhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]jz)}(hjX;h]hstruct drm_plane_helper_funcs}(hjZ;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjV;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhj ;hKEhj:ubh' function table with the plane helpers.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ;hKEhj:hhubeh}(h]overviewah ]h"]h$]overviewah&]uh1hhj:hhhhhK3 referencedKubh)}(hhh](h)}(h'Implementing Asynchronous Atomic Commith]h'Implementing Asynchronous Atomic Commit}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhK9ubh)}(hXNonblocking atomic commits should use struct :c:type:`drm_crtc_commit` to sequence different operations against each another. Locks, especially struct :c:type:`drm_modeset_lock`, should not be held in worker threads or any other asynchronous context used to commit the hardware state.h](h-Nonblocking atomic commits should use struct }(hj;hhhNhNubh)}(h:c:type:`drm_crtc_commit`h]jz)}(hj;h]hdrm_crtc_commit}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_commituh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMJhj;ubhQ to sequence different operations against each another. Locks, especially struct }(hj;hhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hj;h]hdrm_modeset_lock}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhj;hMJhj;ubhk, should not be held in worker threads or any other asynchronous context used to commit the hardware state.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMJhj;hhubh)}(hdrm_atomic_helper_commit() implements the recommended sequence for nonblocking commits, using drm_atomic_helper_setup_commit() internally:Qh]hdrm_atomic_helper_commit() implements the recommended sequence for nonblocking commits, using drm_atomic_helper_setup_commit() internally:}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMOhj;hhubh)}(h1. Run drm_atomic_helper_prepare_planes(). Since this can fail and we need to propagate out of memory/VRAM errors to userspace, it must be called synchronously.h]h1. Run drm_atomic_helper_prepare_planes(). Since this can fail and we need to propagate out of memory/VRAM errors to userspace, it must be called synchronously.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMRhj;hhubh)}(h2. Synchronize with any outstanding nonblocking commit worker threads which might be affected by the new state update. This is handled by drm_atomic_helper_setup_commit().h]h2. Synchronize with any outstanding nonblocking commit worker threads which might be affected by the new state update. This is handled by drm_atomic_helper_setup_commit().}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMVhj;hhubh)}(hXEAsynchronous workers need to have sufficient parallelism to be able to run different atomic commits on different CRTCs in parallel. The simplest way to achieve this is by running them on the :c:type:`system_unbound_wq` work queue. Note that drivers are not required to split up atomic commits and run an individual commit in parallel - userspace is supposed to do that if it cares. But it might be beneficial to do that for modesets, since those necessarily must be done as one global operation, and enabling or disabling a CRTC can take a long time. But even that is not required.h](hAsynchronous workers need to have sufficient parallelism to be able to run different atomic commits on different CRTCs in parallel. The simplest way to achieve this is by running them on the }(hj<hhhNhNubh)}(h:c:type:`system_unbound_wq`h]jz)}(hj%<h]hsystem_unbound_wq}(hj'<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjsystem_unbound_wquh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMZhj<ubhXk work queue. Note that drivers are not required to split up atomic commits and run an individual commit in parallel - userspace is supposed to do that if it cares. But it might be beneficial to do that for modesets, since those necessarily must be done as one global operation, and enabling or disabling a CRTC can take a long time. But even that is not required.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjB<hMZhj;hhubh)}(hX+IMPORTANT: A :c:type:`drm_atomic_state` update for multiple CRTCs is sequenced against all CRTCs therein. Therefore for atomic state updates which only flip planes the driver must not get the struct :c:type:`drm_crtc_state` of unrelated CRTCs in its atomic check code: This would prevent committing of atomic updates to multiple CRTCs in parallel. In general, adding additional state structures should be avoided as much as possible, because this reduces parallelism in (nonblocking) commits, both due to locking and due to commit sequencing requirements.h](h IMPORTANT: A }(hjM<hhhNhNubh)}(h:c:type:`drm_atomic_state`h]jz)}(hjW<h]hdrm_atomic_state}(hjY<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjU<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMchjM<ubh update for multiple CRTCs is sequenced against all CRTCs therein. Therefore for atomic state updates which only flip planes the driver must not get the struct }(hjM<hhhNhNubh)}(h:c:type:`drm_crtc_state`h]jz)}(hj{<h]hdrm_crtc_state}(hj}<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjy<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjt<hMchjM<ubhXL of unrelated CRTCs in its atomic check code: This would prevent committing of atomic updates to multiple CRTCs in parallel. In general, adding additional state structures should be avoided as much as possible, because this reduces parallelism in (nonblocking) commits, both due to locking and due to commit sequencing requirements.}(hjM<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjt<hMchj;hhubh)}(hX3. The software state is updated synchronously with drm_atomic_helper_swap_state(). Doing this under the protection of all modeset locks means concurrent callers never see inconsistent state. Note that commit workers do not hold any locks; their access is only coordinated through ordering. If workers would access state only through the pointers in the free-standing state objects (currently not the case for any driver) then even multiple pending commits could be in-flight at the same time.h]hX3. The software state is updated synchronously with drm_atomic_helper_swap_state(). Doing this under the protection of all modeset locks means concurrent callers never see inconsistent state. Note that commit workers do not hold any locks; their access is only coordinated through ordering. If workers would access state only through the pointers in the free-standing state objects (currently not the case for any driver) then even multiple pending commits could be in-flight at the same time.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMlhj;hhubh)}(hX4. Schedule a work item to do all subsequent steps, using the split-out commit helpers: a) pre-plane commit b) plane commit c) post-plane commit and then cleaning up the framebuffers after the old framebuffer is no longer being displayed. The scheduled work should synchronize against other workers using the :c:type:`drm_crtc_commit` infrastructure as needed. See drm_atomic_helper_setup_commit() for more details.h](hX54. Schedule a work item to do all subsequent steps, using the split-out commit helpers: a) pre-plane commit b) plane commit c) post-plane commit and then cleaning up the framebuffers after the old framebuffer is no longer being displayed. The scheduled work should synchronize against other workers using the }(hj<hhhNhNubh)}(h:c:type:`drm_crtc_commit`h]jz)}(hj<h]hdrm_crtc_commit}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_commituh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:59: ./drivers/gpu/drm/drm_atomic_helper.chMthj<ubhQ infrastructure as needed. See drm_atomic_helper_setup_commit() for more details.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMthj;hhubeh}(h]'implementing-asynchronous-atomic-commitah ]h"]'implementing asynchronous atomic commitah$]h&]uh1hhj:hhhhhK9ubh)}(hhh](h)}(hHelper Functions Referenceh]hHelper Functions Reference}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hhhhhK?ubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_atomic_crtc_for_each_plane (C macro) c.drm_atomic_crtc_for_each_planehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hdrm_atomic_crtc_for_each_planeh]j)}(hdrm_atomic_crtc_for_each_planeh]j)}(hdrm_atomic_crtc_for_each_planeh]j)}(hj=h]hdrm_atomic_crtc_for_each_plane}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhj =hhhj,=hKubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhj,=hKhj =hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj =hhhj,=hKubeh}(h]h ](jmacroeh"]h$]h&]jjjjE=jjE=jjjuh1jhhhj<hNhNubh)}(h0``drm_atomic_crtc_for_each_plane (plane, crtc)``h]jz)}(hjK=h]h,drm_atomic_crtc_for_each_plane (plane, crtc)}(hjM=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjI=ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj<hhubh block_quote)}(h/iterate over planes currently attached to CRTC h]h)}(h.iterate over planes currently attached to CRTCh]h.iterate over planes currently attached to CRTC}(hjg=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjc=ubah}(h]h ]h"]h$]h&]uh1ja=hju=hKhj<hhubj)}(hX**Parameters** ``plane`` the loop cursor ``crtc`` the CRTC whose planes are iterated **Description** This iterates over the current state, useful (for example) when applying atomic state after it has been checked and swapped. To iterate over the planes which *will* be attached (more useful in code called from :c:type:`drm_mode_config_funcs.atomic_check `) see drm_atomic_crtc_state_for_each_plane().h](h)}(h**Parameters**h]j%)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj|=ubji)}(hhh](jn)}(h``plane`` the loop cursor h](jt)}(h ``plane``h]jz)}(hj=h]hplane}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj=ubj)}(hhh]h)}(hthe loop cursorh]hthe loop cursor}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hKhj=ubjn)}(h,``crtc`` the CRTC whose planes are iterated h](jt)}(h``crtc``h]jz)}(hj=h]hcrtc}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj=ubj)}(hhh]h)}(h"the CRTC whose planes are iteratedh]h"the CRTC whose planes are iterated}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hKhj=ubeh}(h]h ]h"]h$]h&]uh1jhhj|=ubh)}(h**Description**h]j%)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj|=ubh)}(hXDThis iterates over the current state, useful (for example) when applying atomic state after it has been checked and swapped. To iterate over the planes which *will* be attached (more useful in code called from :c:type:`drm_mode_config_funcs.atomic_check `) see drm_atomic_crtc_state_for_each_plane().h](hThis iterates over the current state, useful (for example) when applying atomic state after it has been checked and swapped. To iterate over the planes which }(hj+>hhhNhNubhemphasis)}(h*will*h]hwill}(hj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1j3>hj+>ubh. be attached (more useful in code called from }(hj+>hhhNhNubh)}(hD:c:type:`drm_mode_config_funcs.atomic_check `h]jz)}(hjI>h]h"drm_mode_config_funcs.atomic_check}(hjK>hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjG>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj+>ubh-) see drm_atomic_crtc_state_for_each_plane().}(hj+>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjf>hKhj|=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_crtc_state_for_each_plane (C macro)&c.drm_atomic_crtc_state_for_each_planehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h$drm_atomic_crtc_state_for_each_planeh]j)}(h$drm_atomic_crtc_state_for_each_planeh]j)}(h$drm_atomic_crtc_state_for_each_planeh]j)}(hj>h]h$drm_atomic_crtc_state_for_each_plane}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj>hKubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhj>hKhj>hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj>hhhj>hKubeh}(h]h ](jmacroeh"]h$]h&]jjjj>jj>jjjuh1jhhhj<hNhNubh)}(h<``drm_atomic_crtc_state_for_each_plane (plane, crtc_state)``h]jz)}(hj>h]h8drm_atomic_crtc_state_for_each_plane (plane, crtc_state)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj<hhubjb=)}(h*iterate over attached planes in new state h]h)}(h)iterate over attached planes in new stateh]h)iterate over attached planes in new state}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj>ubah}(h]h ]h"]h$]h&]uh1ja=hj>hKhj<hhubj)}(hX~**Parameters** ``plane`` the loop cursor ``crtc_state`` the incoming CRTC state **Description** Similar to drm_crtc_for_each_plane(), but iterates the planes that will be attached if the specified state is applied. Useful during for example in code called from :c:type:`drm_mode_config_funcs.atomic_check ` operations, to validate the incoming state.h](h)}(h**Parameters**h]j%)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj>ubji)}(hhh](jn)}(h``plane`` the loop cursor h](jt)}(h ``plane``h]jz)}(hj?h]hplane}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj?ubj)}(hhh]h)}(hthe loop cursorh]hthe loop cursor}(hj4?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0?hKhj1?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj0?hKhj?ubjn)}(h'``crtc_state`` the incoming CRTC state h](jt)}(h``crtc_state``h]jz)}(hjT?h]h crtc_state}(hjV?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjR?ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjN?ubj)}(hhh]h)}(hthe incoming CRTC stateh]hthe incoming CRTC state}(hjm?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji?hKhjj?ubah}(h]h ]h"]h$]h&]uh1jhjN?ubeh}(h]h ]h"]h$]h&]uh1jmhji?hKhj?ubeh}(h]h ]h"]h$]h&]uh1jhhj>ubh)}(h**Description**h]j%)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj>ubh)}(hXSimilar to drm_crtc_for_each_plane(), but iterates the planes that will be attached if the specified state is applied. Useful during for example in code called from :c:type:`drm_mode_config_funcs.atomic_check ` operations, to validate the incoming state.h](hSimilar to drm_crtc_for_each_plane(), but iterates the planes that will be attached if the specified state is applied. Useful during for example in code called from }(hj?hhhNhNubh)}(hD:c:type:`drm_mode_config_funcs.atomic_check `h]jz)}(hj?h]h"drm_mode_config_funcs.atomic_check}(hj?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj?ubh, operations, to validate the incoming state.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_atomic_crtc_state_for_each_plane_state (C macro),c.drm_atomic_crtc_state_for_each_plane_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h*drm_atomic_crtc_state_for_each_plane_stateh]j)}(h*drm_atomic_crtc_state_for_each_plane_stateh]j)}(h*drm_atomic_crtc_state_for_each_plane_stateh]j)}(hj?h]h*drm_atomic_crtc_state_for_each_plane_state}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhj@hKubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhj@hKhj?hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj?hhhj@hKubeh}(h]h ](jmacroeh"]h$]h&]jjjj'@jj'@jjjuh1jhhhj<hNhNubh)}(hO``drm_atomic_crtc_state_for_each_plane_state (plane, plane_state, crtc_state)``h]jz)}(hj-@h]hKdrm_atomic_crtc_state_for_each_plane_state (plane, plane_state, crtc_state)}(hj/@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+@ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj<hhubjb=)}(h*iterate over attached planes in new state h]h)}(h)iterate over attached planes in new stateh]h)iterate over attached planes in new state}(hjG@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjC@ubah}(h]h ]h"]h$]h&]uh1ja=hjU@hKhj<hhubj)}(hX**Parameters** ``plane`` the loop cursor ``plane_state`` loop cursor for the plane's state, must be const ``crtc_state`` the incoming CRTC state **Description** Similar to drm_crtc_for_each_plane(), but iterates the planes that will be attached if the specified state is applied. Useful during for example in code called from :c:type:`drm_mode_config_funcs.atomic_check ` operations, to validate the incoming state. Compared to just drm_atomic_crtc_state_for_each_plane() this also fills in a const plane_state. This is useful when a driver just wants to peek at other active planes on this CRTC, but does not need to change it.h](h)}(h**Parameters**h]j%)}(hjb@h]h Parameters}(hjd@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`@ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj\@ubji)}(hhh](jn)}(h``plane`` the loop cursor h](jt)}(h ``plane``h]jz)}(hj@h]hplane}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj{@ubj)}(hhh]h)}(hthe loop cursorh]hthe loop cursor}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj{@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKhjx@ubjn)}(hA``plane_state`` loop cursor for the plane's state, must be const h](jt)}(h``plane_state``h]jz)}(hj@h]h plane_state}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj@ubj)}(hhh]h)}(h0loop cursor for the plane's state, must be consth]h2loop cursor for the plane’s state, must be const}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKhjx@ubjn)}(h'``crtc_state`` the incoming CRTC state h](jt)}(h``crtc_state``h]jz)}(hj@h]h crtc_state}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj@ubj)}(hhh]h)}(hthe incoming CRTC stateh]hthe incoming CRTC state}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhj Aubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhjAhKhjx@ubeh}(h]h ]h"]h$]h&]uh1jhhj\@ubh)}(h**Description**h]j%)}(hj.Ah]h Description}(hj0AhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,Aubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj\@ubh)}(hXSimilar to drm_crtc_for_each_plane(), but iterates the planes that will be attached if the specified state is applied. Useful during for example in code called from :c:type:`drm_mode_config_funcs.atomic_check ` operations, to validate the incoming state.h](hSimilar to drm_crtc_for_each_plane(), but iterates the planes that will be attached if the specified state is applied. Useful during for example in code called from }(hjDAhhhNhNubh)}(hD:c:type:`drm_mode_config_funcs.atomic_check `h]jz)}(hjNAh]h"drm_mode_config_funcs.atomic_check}(hjPAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjLAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjDAubh, operations, to validate the incoming state.}(hjDAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkAhKhj\@ubh)}(hCompared to just drm_atomic_crtc_state_for_each_plane() this also fills in a const plane_state. This is useful when a driver just wants to peek at other active planes on this CRTC, but does not need to change it.h]hCompared to just drm_atomic_crtc_state_for_each_plane() this also fills in a const plane_state. This is useful when a driver just wants to peek at other active planes on this CRTC, but does not need to change it.}(hjvAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj\@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_atomic_plane_enabling (C function)c.drm_atomic_plane_enablinghNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hqbool drm_atomic_plane_enabling (struct drm_plane_state *old_plane_state, struct drm_plane_state *new_plane_state)h]j)}(hpbool drm_atomic_plane_enabling(struct drm_plane_state *old_plane_state, struct drm_plane_state *new_plane_state)h](j)}(hboolh]hbool}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjAhKubj)}(hdrm_atomic_plane_enablingh]j)}(hdrm_atomic_plane_enablingh]hdrm_atomic_plane_enabling}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjAhhhjAhKubj)}(hR(struct drm_plane_state *old_plane_state, struct drm_plane_state *new_plane_state)h](j)}(h'struct drm_plane_state *old_plane_stateh](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j%)}jjAsbc.drm_atomic_plane_enablingasbuh1hhjAubj)}(h h]h }(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj9h]h*}(hj.BhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj)}(hold_plane_stateh]hold_plane_state}(hj;BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(h'struct drm_plane_state *new_plane_stateh](j)}(hjh]hstruct}(hjTBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPBubj)}(h h]h }(hjaBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPBubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjrBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtBmodnameN classnameNjj)}j]jBc.drm_atomic_plane_enablingasbuh1hhjPBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPBubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPBubj)}(hnew_plane_stateh]hnew_plane_state}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjAhhhjAhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjAhKubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhjAhKhjAhhubj)}(hhh]h)}(h&check whether a plane is being enabledh]h&check whether a plane is being enabled}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_plane_state *old_plane_state`` old atomic plane state ``struct drm_plane_state *new_plane_state`` new atomic plane state **Description** Checks the atomic state of a plane to determine whether it's being enabled or not. This also WARNs if it detects an invalid state (both CRTC and FB need to either both be NULL or both be non-NULL). **Return** True if the plane is being enabled, false otherwise.h](h)}(h**Parameters**h]j%)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjBubji)}(hhh](jn)}(hC``struct drm_plane_state *old_plane_state`` old atomic plane state h](jt)}(h+``struct drm_plane_state *old_plane_state``h]jz)}(hjCh]h'struct drm_plane_state *old_plane_state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjCubj)}(hhh]h)}(hold atomic plane stateh]hold atomic plane state}(hj/ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ChKhj,Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhj+ChKhj Cubjn)}(hC``struct drm_plane_state *new_plane_state`` new atomic plane state h](jt)}(h+``struct drm_plane_state *new_plane_state``h]jz)}(hjOCh]h'struct drm_plane_state *new_plane_state}(hjQChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMCubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjICubj)}(hhh]h)}(hnew atomic plane stateh]hnew atomic plane state}(hjhChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdChKhjeCubah}(h]h ]h"]h$]h&]uh1jhjICubeh}(h]h ]h"]h$]h&]uh1jmhjdChKhj Cubeh}(h]h ]h"]h$]h&]uh1jhhjBubh)}(h**Description**h]j%)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjBubh)}(hChecks the atomic state of a plane to determine whether it's being enabled or not. This also WARNs if it detects an invalid state (both CRTC and FB need to either both be NULL or both be non-NULL).h]hChecks the atomic state of a plane to determine whether it’s being enabled or not. This also WARNs if it detects an invalid state (both CRTC and FB need to either both be NULL or both be non-NULL).}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjBubh)}(h **Return**h]j%)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjBubh)}(h4True if the plane is being enabled, false otherwise.h]h4True if the plane is being enabled, false otherwise.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_atomic_plane_disabling (C function)c.drm_atomic_plane_disablinghNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hrbool drm_atomic_plane_disabling (struct drm_plane_state *old_plane_state, struct drm_plane_state *new_plane_state)h]j)}(hqbool drm_atomic_plane_disabling(struct drm_plane_state *old_plane_state, struct drm_plane_state *new_plane_state)h](j)}(hjAh]hbool}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjDhKubj)}(hdrm_atomic_plane_disablingh]j)}(hdrm_atomic_plane_disablingh]hdrm_atomic_plane_disabling}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjDhKubj)}(hR(struct drm_plane_state *old_plane_state, struct drm_plane_state *new_plane_state)h](j)}(h'struct drm_plane_state *old_plane_stateh](j)}(hjh]hstruct}(hj2DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Dubj)}(h h]h }(hj?DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Dubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjPDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRDmodnameN classnameNjj)}j]j%)}jjDsbc.drm_atomic_plane_disablingasbuh1hhj.Dubj)}(h h]h }(hjpDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Dubj9)}(hj9h]h*}(hj~DhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.Dubj)}(hold_plane_stateh]hold_plane_state}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*Dubj)}(h'struct drm_plane_state *new_plane_stateh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jlDc.drm_atomic_plane_disablingasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hnew_plane_stateh]hnew_plane_state}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*Dubeh}(h]h ]h"]h$]h&]jjuh1jhjChhhjDhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjChhhjDhKubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jhjDhKhjChhubj)}(hhh]h)}(h'check whether a plane is being disabledh]h'check whether a plane is being disabled}(hj%EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj"Ehhubah}(h]h ]h"]h$]h&]uh1jhjChhhjDhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=Ejj=Ejjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_plane_state *old_plane_state`` old atomic plane state ``struct drm_plane_state *new_plane_state`` new atomic plane state **Description** Checks the atomic state of a plane to determine whether it's being disabled or not. This also WARNs if it detects an invalid state (both CRTC and FB need to either both be NULL or both be non-NULL). **Return** True if the plane is being disabled, false otherwise.h](h)}(h**Parameters**h]j%)}(hjGEh]h Parameters}(hjIEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEEubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjAEubji)}(hhh](jn)}(hC``struct drm_plane_state *old_plane_state`` old atomic plane state h](jt)}(h+``struct drm_plane_state *old_plane_state``h]jz)}(hjfEh]h'struct drm_plane_state *old_plane_state}(hjhEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdEubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhj`Eubj)}(hhh]h)}(hold atomic plane stateh]hold atomic plane state}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{EhKhj|Eubah}(h]h ]h"]h$]h&]uh1jhj`Eubeh}(h]h ]h"]h$]h&]uh1jmhj{EhKhj]Eubjn)}(hC``struct drm_plane_state *new_plane_state`` new atomic plane state h](jt)}(h+``struct drm_plane_state *new_plane_state``h]jz)}(hjEh]h'struct drm_plane_state *new_plane_state}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjEubj)}(hhh]h)}(hnew atomic plane stateh]hnew atomic plane state}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhjEhKhj]Eubeh}(h]h ]h"]h$]h&]uh1jhhjAEubh)}(h**Description**h]j%)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjAEubh)}(hChecks the atomic state of a plane to determine whether it's being disabled or not. This also WARNs if it detects an invalid state (both CRTC and FB need to either both be NULL or both be non-NULL).h]hChecks the atomic state of a plane to determine whether it’s being disabled or not. This also WARNs if it detects an invalid state (both CRTC and FB need to either both be NULL or both be non-NULL).}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjAEubh)}(h **Return**h]j%)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjAEubh)}(h5True if the plane is being disabled, false otherwise.h]h5True if the plane is being disabled, false otherwise.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:65: ./include/drm/drm_atomic_helper.hhKhjAEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_atomic_helper_check_modeset (C function)!c.drm_atomic_helper_check_modesethNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h\int drm_atomic_helper_check_modeset (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(h[int drm_atomic_helper_check_modeset(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjFFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBFhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjUFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBFhhhjTFhMubj)}(hdrm_atomic_helper_check_modeseth]j)}(hdrm_atomic_helper_check_modeseth]hdrm_atomic_helper_check_modeset}(hjgFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBFhhhjTFhMubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j%)}jjiFsb!c.drm_atomic_helper_check_modesetasbuh1hhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubj)}(hdevh]hdev}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{Fubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jF!c.drm_atomic_helper_check_modesetasbuh1hhjFubj)}(h h]h }(hj1GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj9h]h*}(hj?GhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubj)}(hstateh]hstate}(hjLGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{Fubeh}(h]h ]h"]h$]h&]jjuh1jhjBFhhhjTFhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>FhhhjTFhMubah}(h]j9Fah ](jjeh"]h$]h&]jj)jhuh1jhjTFhMhj;Fhhubj)}(hhh]h)}(h)validate state object for modeset changesh]h)validate state object for modeset changes}(hjvGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMZhjsGhhubah}(h]h ]h"]h$]h&]uh1jhj;FhhhjTFhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1jhhhj<hNhNubj)}(hX **Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` the driver state object **Description** Check the state object to see if the requested state is physically possible. This does all the CRTC and connector related computations for an atomic update and adds any additional connectors needed for full modesets. It calls the various per-object callbacks in the follow order: 1. :c:type:`drm_connector_helper_funcs.atomic_best_encoder ` for determining the new encoder. 2. :c:type:`drm_connector_helper_funcs.atomic_check ` to validate the connector state. 3. If it's determined a modeset is needed then all connectors on the affected CRTC are added and :c:type:`drm_connector_helper_funcs.atomic_check ` is run on them. 4. :c:type:`drm_encoder_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_crtc_helper_funcs.mode_valid ` are called on the affected components. 5. :c:type:`drm_bridge_funcs.mode_fixup ` is called on all encoder bridges. 6. :c:type:`drm_encoder_helper_funcs.atomic_check ` is called to validate any encoder state. This function is only called when the encoder will be part of a configured CRTC, it must not be used for implementing connector property validation. If this function is NULL, :c:type:`drm_atomic_encoder_helper_funcs.mode_fixup ` is called instead. 7. :c:type:`drm_crtc_helper_funcs.mode_fixup ` is called last, to fix up the mode with CRTC constraints. :c:type:`drm_crtc_state.mode_changed ` is set when the input mode is changed. :c:type:`drm_crtc_state.connectors_changed ` is set when a connector is added or removed from the CRTC. :c:type:`drm_crtc_state.active_changed ` is set when :c:type:`drm_crtc_state.active ` changes, which is used for DPMS. :c:type:`drm_crtc_state.no_vblank ` is set from the result of drm_dev_has_vblank(). See also: drm_atomic_crtc_needs_modeset() IMPORTANT: Drivers which set :c:type:`drm_crtc_state.mode_changed ` (e.g. in their :c:type:`drm_plane_helper_funcs.atomic_check ` hooks if a plane update can't be done without a full modeset) _must_ call this function after that change. It is permitted to call this function multiple times for the same update, e.g. when the :c:type:`drm_crtc_helper_funcs.atomic_check ` functions depend upon the adjusted dotclock for fifo space allocation and watermark computation. **Return** Zero for success or -errnoh](h)}(h**Parameters**h]j%)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM^hjGubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjGh]hstruct drm_device *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM[hjGubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM[hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjGhM[hjGubjn)}(h;``struct drm_atomic_state *state`` the driver state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjGh]hstruct drm_atomic_state *state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM\hjGubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM\hjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjHhM\hjGubeh}(h]h ]h"]h$]h&]uh1jhhjGubh)}(h**Description**h]j%)}(hj+Hh]h Description}(hj-HhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)Hubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM^hjGubh)}(hXCheck the state object to see if the requested state is physically possible. This does all the CRTC and connector related computations for an atomic update and adds any additional connectors needed for full modesets. It calls the various per-object callbacks in the follow order:h]hXCheck the state object to see if the requested state is physically possible. This does all the CRTC and connector related computations for an atomic update and adds any additional connectors needed for full modesets. It calls the various per-object callbacks in the follow order:}(hjAHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM^hjGubhenumerated_list)}(hhh](h)}(hv:c:type:`drm_connector_helper_funcs.atomic_best_encoder ` for determining the new encoder.h]h)}(hjWHh](h)}(hU:c:type:`drm_connector_helper_funcs.atomic_best_encoder `h]jz)}(hj^Hh]h.drm_connector_helper_funcs.atomic_best_encoder}(hj`HhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj\Hubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMchjYHubh! for determining the new encoder.}(hjYHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{HhMchjUHubah}(h]h ]h"]h$]h&]uh1hhjRHubh)}(ho:c:type:`drm_connector_helper_funcs.atomic_check ` to validate the connector state.h]h)}(hjHh](h)}(hN:c:type:`drm_connector_helper_funcs.atomic_check `h]jz)}(hjHh]h'drm_connector_helper_funcs.atomic_check}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMdhjHubh! to validate the connector state.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMdhjHubah}(h]h ]h"]h$]h&]uh1hhjRHubh)}(hIf it's determined a modeset is needed then all connectors on the affected CRTC are added and :c:type:`drm_connector_helper_funcs.atomic_check ` is run on them.h]h)}(hIf it's determined a modeset is needed then all connectors on the affected CRTC are added and :c:type:`drm_connector_helper_funcs.atomic_check ` is run on them.h](h`If it’s determined a modeset is needed then all connectors on the affected CRTC are added and }(hjHhhhNhNubh)}(hN:c:type:`drm_connector_helper_funcs.atomic_check `h]jz)}(hjHh]h'drm_connector_helper_funcs.atomic_check}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMehjHubh is run on them.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMehjHubah}(h]h ]h"]h$]h&]uh1hhjRHubh)}(h:c:type:`drm_encoder_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_crtc_helper_funcs.mode_valid ` are called on the affected components.h]h)}(h:c:type:`drm_encoder_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_crtc_helper_funcs.mode_valid ` are called on the affected components.h](h)}(hH:c:type:`drm_encoder_helper_funcs.mode_valid `h]jz)}(hj Ih]h#drm_encoder_helper_funcs.mode_valid}(hj IhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMghjIubh, }(hjIhhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_valid `h]jz)}(hj-Ih]hdrm_bridge_funcs.mode_valid}(hj/IhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+Iubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj&IhMghjIubh and }(hjIhhhNhNubh)}(hB:c:type:`drm_crtc_helper_funcs.mode_valid `h]jz)}(hjPIh]h drm_crtc_helper_funcs.mode_valid}(hjRIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhj&IhMghjIubh' are called on the affected components.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&IhMghjHubah}(h]h ]h"]h$]h&]uh1hhjRHubh)}(hZ:c:type:`drm_bridge_funcs.mode_fixup ` is called on all encoder bridges.h]h)}(hjIh](h)}(h8:c:type:`drm_bridge_funcs.mode_fixup `h]jz)}(hjIh]hdrm_bridge_funcs.mode_fixup}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMihjIubh" is called on all encoder bridges.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMihj}Iubah}(h]h ]h"]h$]h&]uh1hhjRHubh)}(hX:c:type:`drm_encoder_helper_funcs.atomic_check ` is called to validate any encoder state. This function is only called when the encoder will be part of a configured CRTC, it must not be used for implementing connector property validation. If this function is NULL, :c:type:`drm_atomic_encoder_helper_funcs.mode_fixup ` is called instead.h]h)}(hX:c:type:`drm_encoder_helper_funcs.atomic_check ` is called to validate any encoder state. This function is only called when the encoder will be part of a configured CRTC, it must not be used for implementing connector property validation. If this function is NULL, :c:type:`drm_atomic_encoder_helper_funcs.mode_fixup ` is called instead.h](h)}(hJ:c:type:`drm_encoder_helper_funcs.atomic_check `h]jz)}(hjIh]h%drm_encoder_helper_funcs.atomic_check}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMjhjIubh is called to validate any encoder state. This function is only called when the encoder will be part of a configured CRTC, it must not be used for implementing connector property validation. If this function is NULL, }(hjIhhhNhNubh)}(hV:c:type:`drm_atomic_encoder_helper_funcs.mode_fixup `h]jz)}(hjIh]h*drm_atomic_encoder_helper_funcs.mode_fixup}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_encoder_helper_funcsuh1hhjIhMjhjIubh is called instead.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMjhjIubah}(h]h ]h"]h$]h&]uh1hhjRHubh)}(h}:c:type:`drm_crtc_helper_funcs.mode_fixup ` is called last, to fix up the mode with CRTC constraints. h]h)}(h|:c:type:`drm_crtc_helper_funcs.mode_fixup ` is called last, to fix up the mode with CRTC constraints.h](h)}(hB:c:type:`drm_crtc_helper_funcs.mode_fixup `h]jz)}(hjJh]h drm_crtc_helper_funcs.mode_fixup}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMohjJubh: is called last, to fix up the mode with CRTC constraints.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6JhMohjJubah}(h]h ]h"]h$]h&]uh1hhjRHubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jPHhjGubh)}(hX:c:type:`drm_crtc_state.mode_changed ` is set when the input mode is changed. :c:type:`drm_crtc_state.connectors_changed ` is set when a connector is added or removed from the CRTC. :c:type:`drm_crtc_state.active_changed ` is set when :c:type:`drm_crtc_state.active ` changes, which is used for DPMS. :c:type:`drm_crtc_state.no_vblank ` is set from the result of drm_dev_has_vblank(). See also: drm_atomic_crtc_needs_modeset()h](h)}(h6:c:type:`drm_crtc_state.mode_changed `h]jz)}(hjXJh]hdrm_crtc_state.mode_changed}(hjZJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMqhjRJubh( is set when the input mode is changed. }(hjRJhhhNhNubh)}(h<:c:type:`drm_crtc_state.connectors_changed `h]jz)}(hj|Jh]h!drm_crtc_state.connectors_changed}(hj~JhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjzJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjuJhMqhjRJubh= is set when a connector is added or removed from the CRTC. }(hjRJhhhNhNubh)}(h8:c:type:`drm_crtc_state.active_changed `h]jz)}(hjJh]hdrm_crtc_state.active_changed}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjuJhMqhjRJubh is set when }(hjRJhhhNhNubh)}(h0:c:type:`drm_crtc_state.active `h]jz)}(hjJh]hdrm_crtc_state.active}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjuJhMqhjRJubh" changes, which is used for DPMS. }(hjRJhhhNhNubh)}(h3:c:type:`drm_crtc_state.no_vblank `h]jz)}(hjJh]hdrm_crtc_state.no_vblank}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjuJhMqhjRJubhZ is set from the result of drm_dev_has_vblank(). See also: drm_atomic_crtc_needs_modeset()}(hjRJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuJhMqhjGubh)}(h IMPORTANT:h]h IMPORTANT:}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMxhjGubh)}(hXDrivers which set :c:type:`drm_crtc_state.mode_changed ` (e.g. in their :c:type:`drm_plane_helper_funcs.atomic_check ` hooks if a plane update can't be done without a full modeset) _must_ call this function after that change. It is permitted to call this function multiple times for the same update, e.g. when the :c:type:`drm_crtc_helper_funcs.atomic_check ` functions depend upon the adjusted dotclock for fifo space allocation and watermark computation.h](hDrivers which set }(hjKhhhNhNubh)}(h6:c:type:`drm_crtc_state.mode_changed `h]jz)}(hj%Kh]hdrm_crtc_state.mode_changed}(hj'KhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#Kubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMzhjKubh (e.g. in their }(hjKhhhNhNubh)}(hF:c:type:`drm_plane_helper_funcs.atomic_check `h]jz)}(hjIKh]h#drm_plane_helper_funcs.atomic_check}(hjKKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjBKhMzhjKubh hooks if a plane update can’t be done without a full modeset) _must_ call this function after that change. It is permitted to call this function multiple times for the same update, e.g. when the }(hjKhhhNhNubh)}(hD:c:type:`drm_crtc_helper_funcs.atomic_check `h]jz)}(hjlKh]h"drm_crtc_helper_funcs.atomic_check}(hjnKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhjBKhMzhjKubha functions depend upon the adjusted dotclock for fifo space allocation and watermark computation.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBKhMzhjGubh)}(h **Return**h]j%)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjGubh)}(hZero for success or -errnoh]hZero for success or -errno}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j7drm_atomic_helper_check_wb_connector_state (C function),c.drm_atomic_helper_check_wb_connector_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hpint drm_atomic_helper_check_wb_connector_state (struct drm_connector *connector, struct drm_atomic_state *state)h]j)}(hoint drm_atomic_helper_check_wb_connector_state(struct drm_connector *connector, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMFubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMFubj)}(h*drm_atomic_helper_check_wb_connector_stateh]j)}(h*drm_atomic_helper_check_wb_connector_stateh]h*drm_atomic_helper_check_wb_connector_state}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhjKhMFubj)}(hA(struct drm_connector *connector, struct drm_atomic_state *state)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj$LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj5LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7LmodnameN classnameNjj)}j]j%)}jjKsb,c.drm_atomic_helper_check_wb_connector_stateasbuh1hhjLubj)}(h h]h }(hjULhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjcLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(h connectorh]h connector}(hjpLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jQL,c.drm_atomic_helper_check_wb_connector_stateasbuh1hhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hstateh]hstate}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(h]h ]h"]h$]h&]jjuh1jhjKhhhjKhMFubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjKhMFubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjKhMFhjKhhubj)}(hhh]h)}(hCheck writeback connector stateh]hCheck writeback connector state}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM<hjMhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"Mjj"Mjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` corresponding connector ``struct drm_atomic_state *state`` the driver state object **Description** Checks if the writeback connector state is valid, and returns an error if it isn't. **Return** Zero for success or -errnoh](h)}(h**Parameters**h]j%)}(hj,Mh]h Parameters}(hj.MhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*Mubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM@hj&Mubji)}(hhh](jn)}(h<``struct drm_connector *connector`` corresponding connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjKMh]hstruct drm_connector *connector}(hjMMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIMubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM=hjEMubj)}(hhh]h)}(hcorresponding connectorh]hcorresponding connector}(hjdMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`MhM=hjaMubah}(h]h ]h"]h$]h&]uh1jhjEMubeh}(h]h ]h"]h$]h&]uh1jmhj`MhM=hjBMubjn)}(h;``struct drm_atomic_state *state`` the driver state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjMh]hstruct drm_atomic_state *state}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM>hj~Mubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM>hjMubah}(h]h ]h"]h$]h&]uh1jhj~Mubeh}(h]h ]h"]h$]h&]uh1jmhjMhM>hjBMubeh}(h]h ]h"]h$]h&]uh1jhhj&Mubh)}(h**Description**h]j%)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM@hj&Mubh)}(hSChecks if the writeback connector state is valid, and returns an error if it isn't.h]hUChecks if the writeback connector state is valid, and returns an error if it isn’t.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM@hj&Mubh)}(h **Return**h]j%)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMChj&Mubh)}(hZero for success or -errnoh]hZero for success or -errno}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMChj&Mubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_atomic_helper_check_plane_state (C function)%c.drm_atomic_helper_check_plane_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hint drm_atomic_helper_check_plane_state (struct drm_plane_state *plane_state, const struct drm_crtc_state *crtc_state, int min_scale, int max_scale, bool can_position, bool can_update_disabled)h]j)}(hint drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state, const struct drm_crtc_state *crtc_state, int min_scale, int max_scale, bool can_position, bool can_update_disabled)h](j)}(hinth]hint}(hj+NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Nhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMyubj)}(h h]h }(hj:NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Nhhhj9NhMyubj)}(h#drm_atomic_helper_check_plane_stateh]j)}(h#drm_atomic_helper_check_plane_stateh]h#drm_atomic_helper_check_plane_state}(hjLNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'Nhhhj9NhMyubj)}(h(struct drm_plane_state *plane_state, const struct drm_crtc_state *crtc_state, int min_scale, int max_scale, bool can_position, bool can_update_disabled)h](j)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdNubj)}(h h]h }(hjuNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdNubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j%)}jjNNsb%c.drm_atomic_helper_check_plane_stateasbuh1hhjdNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdNubj9)}(hj9h]h*}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdNubj)}(h plane_stateh]h plane_state}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Nubj)}(h'const struct drm_crtc_state *crtc_stateh](j)}(hjch]hconst}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]jN%c.drm_atomic_helper_check_plane_stateasbuh1hhjNubj)}(h h]h }(hj1OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(hj9h]h*}(hj?OhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubj)}(h crtc_stateh]h crtc_state}(hjLOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Nubj)}(h int min_scaleh](j)}(hinth]hint}(hjeOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaOubj)}(h h]h }(hjsOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaOubj)}(h min_scaleh]h min_scale}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Nubj)}(h int max_scaleh](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h max_scaleh]h max_scale}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Nubj)}(hbool can_positionh](j)}(hjAh]hbool}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h can_positionh]h can_position}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Nubj)}(hbool can_update_disabledh](j)}(hjAh]hbool}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hcan_update_disabledh]hcan_update_disabled}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Nubeh}(h]h ]h"]h$]h&]jjuh1jhj'Nhhhj9NhMyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#Nhhhj9NhMyubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhj9NhMyhj Nhhubj)}(hhh]h)}(hCheck plane state for validityh]hCheck plane state for validity}(hjHPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMehjEPhhubah}(h]h ]h"]h$]h&]uh1jhj Nhhhj9NhMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`Pjj`Pjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_plane_state *plane_state`` plane state to check ``const struct drm_crtc_state *crtc_state`` CRTC state to check ``int min_scale`` minimum **src**:**dest** scaling factor in 16.16 fixed point ``int max_scale`` maximum **src**:**dest** scaling factor in 16.16 fixed point ``bool can_position`` is it legal to position the plane such that it doesn't cover the entire CRTC? This will generally only be false for primary planes. ``bool can_update_disabled`` can the plane be updated while the CRTC is disabled? **Description** Checks that a desired plane update is valid, and updates various bits of derived state (clipped coordinates etc.). Drivers that provide their own plane handling rather than helper-provided implementations may still wish to call this function to avoid duplication of error checking code. **Return** Zero if update appears valid, error code on failureh](h)}(h**Parameters**h]j%)}(hjjPh]h Parameters}(hjlPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhPubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMihjdPubji)}(hhh](jn)}(h=``struct drm_plane_state *plane_state`` plane state to check h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjPh]h#struct drm_plane_state *plane_state}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMfhjPubj)}(hhh]h)}(hplane state to checkh]hplane state to check}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMfhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjPhMfhjPubjn)}(h@``const struct drm_crtc_state *crtc_state`` CRTC state to check h](jt)}(h+``const struct drm_crtc_state *crtc_state``h]jz)}(hjPh]h'const struct drm_crtc_state *crtc_state}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMghjPubj)}(hhh]h)}(hCRTC state to checkh]hCRTC state to check}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMghjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjPhMghjPubjn)}(hO``int min_scale`` minimum **src**:**dest** scaling factor in 16.16 fixed point h](jt)}(h``int min_scale``h]jz)}(hjPh]h int min_scale}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhhjPubj)}(hhh]h)}(h` and :c:type:`drm_plane_helper_funcs.atomic_check ` hooks provided by the driver. It also sets :c:type:`drm_crtc_state.planes_changed ` to indicate that a CRTC has updated planes. **Return** Zero for success or -errnoh](h)}(h**Parameters**h]j%)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjUubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjUh]hstruct drm_device *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjUubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMhjUubjn)}(h;``struct drm_atomic_state *state`` the driver state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjUh]hstruct drm_atomic_state *state}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjUubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMhjUubeh}(h]h ]h"]h$]h&]uh1jhhjUubh)}(h**Description**h]j%)}(hj$Vh]h Description}(hj&VhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"Vubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjUubh)}(hXBCheck the state object to see if the requested state is physically possible. This does all the plane update related checks using by calling into the :c:type:`drm_crtc_helper_funcs.atomic_check ` and :c:type:`drm_plane_helper_funcs.atomic_check ` hooks provided by the driver.h](hCheck the state object to see if the requested state is physically possible. This does all the plane update related checks using by calling into the }(hj:VhhhNhNubh)}(hD:c:type:`drm_crtc_helper_funcs.atomic_check `h]jz)}(hjDVh]h"drm_crtc_helper_funcs.atomic_check}(hjFVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjBVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj:Vubh and }(hj:VhhhNhNubh)}(hF:c:type:`drm_plane_helper_funcs.atomic_check `h]jz)}(hjhVh]h#drm_plane_helper_funcs.atomic_check}(hjjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjfVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjaVhMhj:Vubh hooks provided by the driver.}(hj:VhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjaVhMhjUubh)}(hqIt also sets :c:type:`drm_crtc_state.planes_changed ` to indicate that a CRTC has updated planes.h](h It also sets }(hjVhhhNhNubh)}(h8:c:type:`drm_crtc_state.planes_changed `h]jz)}(hjVh]hdrm_crtc_state.planes_changed}(hjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjVubh, to indicate that a CRTC has updated planes.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMhjUubh)}(h **Return**h]j%)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjUubh)}(hZero for success or -errnoh]hZero for success or -errno}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_atomic_helper_check (C function)c.drm_atomic_helper_checkhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hTint drm_atomic_helper_check (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(hSint drm_atomic_helper_check(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMOubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhMOubj)}(hdrm_atomic_helper_checkh]j)}(hdrm_atomic_helper_checkh]hdrm_atomic_helper_check}(hj)WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Wubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjWhMOubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjEWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubj)}(h h]h }(hjRWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjcWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjeWmodnameN classnameNjj)}j]j%)}jj+Wsbc.drm_atomic_helper_checkasbuh1hhjAWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAWubj)}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=Wubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jWc.drm_atomic_helper_checkasbuh1hhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWubj)}(hstateh]hstate}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=Wubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjWhMOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjWhMOubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjWhMOhjVhhubj)}(hhh]h)}(hvalidate state objecth]hvalidate state object}(hj8XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM-hj5Xhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjWhMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPXjjPXjjjuh1jhhhj<hNhNubj)}(hXE**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` the driver state object **Description** Check the state object to see if the requested state is physically possible. Only CRTCs and planes have check callbacks, so for any additional (global) checking that a driver needs it can simply wrap that around this function. Drivers without such needs can directly use this as their :c:type:`drm_mode_config_funcs.atomic_check ` callback. This just wraps the two parts of the state checking for planes and modeset state in the default order: First it calls drm_atomic_helper_check_modeset() and then drm_atomic_helper_check_planes(). The assumption is that the **drm_plane_helper_funcs.atomic_check** and **drm_crtc_helper_funcs.atomic_check** functions depend upon an updated adjusted_mode.clock to e.g. properly compute watermarks. Note that zpos normalization will add all enable planes to the state which might not desired for some drivers. For example enable/disable of a cursor plane which have fixed zpos value would trigger all other enabled planes to be forced to the state change. IMPORTANT: As this function calls drm_atomic_helper_check_modeset() internally, its restrictions also apply: Drivers which set :c:type:`drm_crtc_state.mode_changed ` (e.g. in their :c:type:`drm_plane_helper_funcs.atomic_check ` hooks if a plane update can't be done without a full modeset) _must_ call drm_atomic_helper_check_modeset() function again after that change. **Return** Zero for success or -errnoh](h)}(h**Parameters**h]j%)}(hjZXh]h Parameters}(hj\XhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXXubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM1hjTXubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjyXh]hstruct drm_device *dev}(hj{XhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwXubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM.hjsXubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM.hjXubah}(h]h ]h"]h$]h&]uh1jhjsXubeh}(h]h ]h"]h$]h&]uh1jmhjXhM.hjpXubjn)}(h;``struct drm_atomic_state *state`` the driver state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjXh]hstruct drm_atomic_state *state}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM/hjXubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM/hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhM/hjpXubeh}(h]h ]h"]h$]h&]uh1jhhjTXubh)}(h**Description**h]j%)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM1hjTXubh)}(hXkCheck the state object to see if the requested state is physically possible. Only CRTCs and planes have check callbacks, so for any additional (global) checking that a driver needs it can simply wrap that around this function. Drivers without such needs can directly use this as their :c:type:`drm_mode_config_funcs.atomic_check ` callback.h](hXCheck the state object to see if the requested state is physically possible. Only CRTCs and planes have check callbacks, so for any additional (global) checking that a driver needs it can simply wrap that around this function. Drivers without such needs can directly use this as their }(hjYhhhNhNubh)}(hD:c:type:`drm_mode_config_funcs.atomic_check `h]jz)}(hj Yh]h"drm_mode_config_funcs.atomic_check}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj Yubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM1hjYubh callback.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*YhM1hjTXubh)}(hXThis just wraps the two parts of the state checking for planes and modeset state in the default order: First it calls drm_atomic_helper_check_modeset() and then drm_atomic_helper_check_planes(). The assumption is that the **drm_plane_helper_funcs.atomic_check** and **drm_crtc_helper_funcs.atomic_check** functions depend upon an updated adjusted_mode.clock to e.g. properly compute watermarks.h](hThis just wraps the two parts of the state checking for planes and modeset state in the default order: First it calls drm_atomic_helper_check_modeset() and then drm_atomic_helper_check_planes(). The assumption is that the }(hj5YhhhNhNubj%)}(h'**drm_plane_helper_funcs.atomic_check**h]h#drm_plane_helper_funcs.atomic_check}(hj=YhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5Yubh and }(hj5YhhhNhNubj%)}(h&**drm_crtc_helper_funcs.atomic_check**h]h"drm_crtc_helper_funcs.atomic_check}(hjOYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5YubhZ functions depend upon an updated adjusted_mode.clock to e.g. properly compute watermarks.}(hj5YhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM7hjTXubh)}(hXNote that zpos normalization will add all enable planes to the state which might not desired for some drivers. For example enable/disable of a cursor plane which have fixed zpos value would trigger all other enabled planes to be forced to the state change.h]hXNote that zpos normalization will add all enable planes to the state which might not desired for some drivers. For example enable/disable of a cursor plane which have fixed zpos value would trigger all other enabled planes to be forced to the state change.}(hjhYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM>hjTXubh)}(h IMPORTANT:h]h IMPORTANT:}(hjwYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMChjTXubh)}(hXAs this function calls drm_atomic_helper_check_modeset() internally, its restrictions also apply: Drivers which set :c:type:`drm_crtc_state.mode_changed ` (e.g. in their :c:type:`drm_plane_helper_funcs.atomic_check ` hooks if a plane update can't be done without a full modeset) _must_ call drm_atomic_helper_check_modeset() function again after that change.h](htAs this function calls drm_atomic_helper_check_modeset() internally, its restrictions also apply: Drivers which set }(hjYhhhNhNubh)}(h6:c:type:`drm_crtc_state.mode_changed `h]jz)}(hjYh]hdrm_crtc_state.mode_changed}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMEhjYubh (e.g. in their }(hjYhhhNhNubh)}(hF:c:type:`drm_plane_helper_funcs.atomic_check `h]jz)}(hjYh]h#drm_plane_helper_funcs.atomic_check}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjYhMEhjYubh hooks if a plane update can’t be done without a full modeset) _must_ call drm_atomic_helper_check_modeset() function again after that change.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhMEhjTXubh)}(h **Return**h]j%)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMLhjTXubh)}(hZero for success or -errnoh]hZero for success or -errno}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMLhjTXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j:drm_atomic_helper_update_legacy_modeset_state (C function)/c.drm_atomic_helper_update_legacy_modeset_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hkvoid drm_atomic_helper_update_legacy_modeset_state (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(hjvoid drm_atomic_helper_update_legacy_modeset_state(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj"ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hj1ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhj0ZhMubj)}(h-drm_atomic_helper_update_legacy_modeset_stateh]j)}(h-drm_atomic_helper_update_legacy_modeset_stateh]h-drm_atomic_helper_update_legacy_modeset_state}(hjCZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Zubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhj0ZhMubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj_ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Zubj)}(h h]h }(hjlZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Zubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj}ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j%)}jjEZsb/c.drm_atomic_helper_update_legacy_modeset_stateasbuh1hhj[Zubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Zubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[Zubj)}(hdevh]hdev}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jZ/c.drm_atomic_helper_update_legacy_modeset_stateasbuh1hhjZubj)}(h h]h }(hj [hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hstateh]hstate}(hj([hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWZubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhj0ZhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhj0ZhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhj0ZhMhjZhhubj)}(hhh]h)}(hupdate legacy modeset stateh]hupdate legacy modeset state}(hjR[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjO[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhj0ZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjj[jjj[jjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object being committed **Description** This function updates all the various legacy modeset state pointers in connectors, encoders and CRTCs. Drivers can use this for building their own atomic commit if they don't have a pure helper-based modeset implementation. Since these updates are not synchronized with lockings, only code paths called from :c:type:`drm_mode_config_helper_funcs.atomic_commit_tail ` can look at the legacy state filled out by this helper. Defacto this means this helper and the legacy state pointers are only really useful for transitioning an existing driver to the atomic world.h](h)}(h**Parameters**h]j%)}(hjt[h]h Parameters}(hjv[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr[ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjn[ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj[h]hstruct drm_device *dev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj[ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj[ubjn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj[h]hstruct drm_atomic_state *state}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj[ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj[ubeh}(h]h ]h"]h$]h&]uh1jhhjn[ubh)}(h**Description**h]j%)}(hj\h]h Description}(hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjn[ubh)}(hfThis function updates all the various legacy modeset state pointers in connectors, encoders and CRTCs.h]hfThis function updates all the various legacy modeset state pointers in connectors, encoders and CRTCs.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjn[ubh)}(hxDrivers can use this for building their own atomic commit if they don't have a pure helper-based modeset implementation.h]hzDrivers can use this for building their own atomic commit if they don’t have a pure helper-based modeset implementation.}(hj,\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjn[ubh)}(hXrSince these updates are not synchronized with lockings, only code paths called from :c:type:`drm_mode_config_helper_funcs.atomic_commit_tail ` can look at the legacy state filled out by this helper. Defacto this means this helper and the legacy state pointers are only really useful for transitioning an existing driver to the atomic world.h](hTSince these updates are not synchronized with lockings, only code paths called from }(hj;\hhhNhNubh)}(hX:c:type:`drm_mode_config_helper_funcs.atomic_commit_tail `h]jz)}(hjE\h]h/drm_mode_config_helper_funcs.atomic_commit_tail}(hjG\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjC\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj;\ubh can look at the legacy state filled out by this helper. Defacto this means this helper and the legacy state pointers are only really useful for transitioning an existing driver to the atomic world.}(hj;\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb\hMhjn[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j:drm_atomic_helper_calc_timestamping_constants (C function)/c.drm_atomic_helper_calc_timestamping_constantshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hSvoid drm_atomic_helper_calc_timestamping_constants (struct drm_atomic_state *state)h]j)}(hRvoid drm_atomic_helper_calc_timestamping_constants(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMSubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hMSubj)}(h-drm_atomic_helper_calc_timestamping_constantsh]j)}(h-drm_atomic_helper_calc_timestamping_constantsh]h-drm_atomic_helper_calc_timestamping_constants}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj\hMSubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j%)}jj\sb/c.drm_atomic_helper_calc_timestamping_constantsasbuh1hhj\ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\ubj)}(hstateh]hstate}(hj#]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubah}(h]h ]h"]h$]h&]jjuh1jhj\hhhj\hMSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj\hMSubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhj\hMShj\hhubj)}(hhh]h)}(h$update vblank timestamping constantsh]h$update vblank timestamping constants}(hjM]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMMhjJ]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj\hMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjje]jje]jjjuh1jhhhj<hNhNubj)}(h**Parameters** ``struct drm_atomic_state *state`` atomic state object **Description** Updates the timestamping constants used for precise vblank timestamps by calling drm_calc_timestamping_constants() for all enabled crtcs in **state**.h](h)}(h**Parameters**h]j%)}(hjo]h]h Parameters}(hjq]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjm]ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMQhji]ubji)}(hhh]jn)}(h7``struct drm_atomic_state *state`` atomic state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj]h]hstruct drm_atomic_state *state}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMNhj]ubj)}(hhh]h)}(hatomic state objecth]hatomic state object}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMNhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hMNhj]ubah}(h]h ]h"]h$]h&]uh1jhhji]ubh)}(h**Description**h]j%)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMPhji]ubh)}(hUpdates the timestamping constants used for precise vblank timestamps by calling drm_calc_timestamping_constants() for all enabled crtcs in **state**.h](hUpdates the timestamping constants used for precise vblank timestamps by calling drm_calc_timestamping_constants() for all enabled crtcs in }(hj]hhhNhNubj%)}(h **state**h]hstate}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMPhji]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_atomic_helper_commit_modeset_disables (C function)+c.drm_atomic_helper_commit_modeset_disableshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hgvoid drm_atomic_helper_commit_modeset_disables (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(hfvoid drm_atomic_helper_commit_modeset_disables(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hj/^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj.^hMubj)}(h)drm_atomic_helper_commit_modeset_disablesh]j)}(h)drm_atomic_helper_commit_modeset_disablesh]h)drm_atomic_helper_commit_modeset_disables}(hjA^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj.^hMubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj]^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY^ubj)}(h h]h }(hjj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY^ub4h)}(hhh]j)}(h drm_deviceh]h drm_device}(hj{^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}^modnameN classnameNjj)}j]j%)}jjC^sb+c.drm_atomic_helper_commit_modeset_disablesasbuh1hhjY^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY^ubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjY^ubj)}(hdevh]hdev}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU^ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j^+c.drm_atomic_helper_commit_modeset_disablesasbuh1hhj^ubj)}(h h]h }(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^ubj)}(hstateh]hstate}(hj&_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU^ubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhj.^hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj.^hMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhj.^hMhj^hhubj)}(hhh]h)}(h!modeset commit to disable outputsh]h!modeset commit to disable outputs}(hjP_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjM_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj.^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjh_jjh_jjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object being committed **Description** This function shuts down all the outputs that need to be shut down and prepares them (if required) with the new mode. For compatibility with legacy CRTC helpers this should be called before drm_atomic_helper_commit_planes(), which is what the default commit function does. But drivers with different needs can group the modeset commits together and do the plane commits at the end. This is useful for drivers doing runtime PM since planes updates then only happen when the CRTC is actually enabled.h](h)}(h**Parameters**h]j%)}(hjr_h]h Parameters}(hjt_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjp_ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjl_ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj_h]hstruct drm_device *dev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj_ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhj_ubjn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj_h]hstruct drm_atomic_state *state}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj_ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhhjl_ubh)}(h**Description**h]j%)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjl_ubh)}(huThis function shuts down all the outputs that need to be shut down and prepares them (if required) with the new mode.h]huThis function shuts down all the outputs that need to be shut down and prepares them (if required) with the new mode.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjl_ubh)}(hX|For compatibility with legacy CRTC helpers this should be called before drm_atomic_helper_commit_planes(), which is what the default commit function does. But drivers with different needs can group the modeset commits together and do the plane commits at the end. This is useful for drivers doing runtime PM since planes updates then only happen when the CRTC is actually enabled.h]hX|For compatibility with legacy CRTC helpers this should be called before drm_atomic_helper_commit_planes(), which is what the default commit function does. But drivers with different needs can group the modeset commits together and do the plane commits at the end. This is useful for drivers doing runtime PM since planes updates then only happen when the CRTC is actually enabled.}(hj*`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjl_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_atomic_helper_commit_modeset_enables (C function)*c.drm_atomic_helper_commit_modeset_enableshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hfvoid drm_atomic_helper_commit_modeset_enables (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(hevoid drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjY`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU`hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjh`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU`hhhjg`hMubj)}(h(drm_atomic_helper_commit_modeset_enablesh]j)}(h(drm_atomic_helper_commit_modeset_enablesh]h(drm_atomic_helper_commit_modeset_enables}(hjz`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjU`hhhjg`hMubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j%)}jj|`sb*c.drm_atomic_helper_commit_modeset_enablesasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hdevh]hdev}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj&ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(amodnameN classnameNjj)}j]j`*c.drm_atomic_helper_commit_modeset_enablesasbuh1hhjaubj)}(h h]h }(hjDahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjRahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hstateh]hstate}(hj_ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhjU`hhhjg`hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQ`hhhjg`hMubah}(h]jL`ah ](jjeh"]h$]h&]jj)jhuh1jhjg`hMhjN`hhubj)}(hhh]h)}(h modeset commit to enable outputsh]h modeset commit to enable outputs}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhjN`hhhjg`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhj<hNhNubj)}(hX|**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object being committed **Description** This function enables all the outputs with the new configuration which had to be turned off for the update. For compatibility with legacy CRTC helpers this should be called after drm_atomic_helper_commit_planes(), which is what the default commit function does. But drivers with different needs can group the modeset commits together and do the plane commits at the end. This is useful for drivers doing runtime PM since planes updates then only happen when the CRTC is actually enabled.h](h)}(h**Parameters**h]j%)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjaubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjah]hstruct drm_device *dev}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjaubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjaubjn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjbh]hstruct drm_atomic_state *state}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjaubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjaubeh}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hj>bh]h Description}(hj@bhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj` hook, for drivers that do not support runtime_pm or do not need the CRTC to be enabled to perform a commit. Otherwise, see drm_atomic_helper_commit_tail_rpm(). Note that the default ordering of how the various stages are called is to match the legacy modeset helper library closest.h](h)}(h**Parameters**h]j%)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjjubji)}(hhh]jn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjkh]hstruct drm_atomic_state *state}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjjubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjjubah}(h]h ]h"]h$]h&]uh1jhhjjubh)}(h**Description**h]j%)}(hj>kh]h Description}(hj@khhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj` hook, for drivers that do not support runtime_pm or do not need the CRTC to be enabled to perform a commit. Otherwise, see drm_atomic_helper_commit_tail_rpm().h](h+This is the default implementation for the }(hjTkhhhNhNubh)}(hX:c:type:`drm_mode_config_helper_funcs.atomic_commit_tail `h]jz)}(hj^kh]h/drm_mode_config_helper_funcs.atomic_commit_tail}(hj`khhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj\kubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjTkubh hook, for drivers that do not support runtime_pm or do not need the CRTC to be enabled to perform a commit. Otherwise, see drm_atomic_helper_commit_tail_rpm().}(hjTkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{khMhjjubh)}(hzNote that the default ordering of how the various stages are called is to match the legacy modeset helper library closest.h]hzNote that the default ordering of how the various stages are called is to match the legacy modeset helper library closest.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_helper_commit_tail_rpm (C function)#c.drm_atomic_helper_commit_tail_rpmhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hGvoid drm_atomic_helper_commit_tail_rpm (struct drm_atomic_state *state)h]j)}(hFvoid drm_atomic_helper_commit_tail_rpm(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhMubj)}(h!drm_atomic_helper_commit_tail_rpmh]j)}(h!drm_atomic_helper_commit_tail_rpmh]h!drm_atomic_helper_commit_tail_rpm}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhjkhMubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]j%)}jjksb#c.drm_atomic_helper_commit_tail_rpmasbuh1hhjkubj)}(h h]h }(hj0lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hj>lhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hstateh]hstate}(hjKlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubah}(h]h ]h"]h$]h&]jjuh1jhjkhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjkhMubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jhjkhMhjkhhubj)}(hhh]h)}(h commit atomic update to hardwareh]h commit atomic update to hardware}(hjulhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjrlhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` new modeset state to be committed **Description** This is an alternative implementation for the :c:type:`drm_mode_config_helper_funcs.atomic_commit_tail ` hook, for drivers that support runtime_pm or need the CRTC to be enabled to perform a commit. Otherwise, one should use the default implementation drm_atomic_helper_commit_tail().h](h)}(h**Parameters**h]j%)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjlubji)}(hhh]jn)}(hE``struct drm_atomic_state *state`` new modeset state to be committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjlh]hstruct drm_atomic_state *state}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjlubj)}(hhh]h)}(h!new modeset state to be committedh]h!new modeset state to be committed}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjlubh)}(hX:This is an alternative implementation for the :c:type:`drm_mode_config_helper_funcs.atomic_commit_tail ` hook, for drivers that support runtime_pm or need the CRTC to be enabled to perform a commit. Otherwise, one should use the default implementation drm_atomic_helper_commit_tail().h](h.This is an alternative implementation for the }(hjmhhhNhNubh)}(hX:c:type:`drm_mode_config_helper_funcs.atomic_commit_tail `h]jz)}(hjmh]h/drm_mode_config_helper_funcs.atomic_commit_tail}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjmubh hook, for drivers that support runtime_pm or need the CRTC to be enabled to perform a commit. Otherwise, one should use the default implementation drm_atomic_helper_commit_tail().}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.mhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_helper_async_check (C function)c.drm_atomic_helper_async_checkhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hZint drm_atomic_helper_async_check (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(hYint drm_atomic_helper_async_check(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjYmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUmhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMsubj)}(h h]h }(hjhmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUmhhhjgmhMsubj)}(hdrm_atomic_helper_async_checkh]j)}(hdrm_atomic_helper_async_checkh]hdrm_atomic_helper_async_check}(hjzmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUmhhhjgmhMsubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j%)}jj|msbc.drm_atomic_helper_async_checkasbuh1hhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hdevh]hdev}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj&nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(nmodnameN classnameNjj)}j]jmc.drm_atomic_helper_async_checkasbuh1hhjnubj)}(h h]h }(hjDnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hj9h]h*}(hjRnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubj)}(hstateh]hstate}(hj_nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubeh}(h]h ]h"]h$]h&]jjuh1jhjUmhhhjgmhMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQmhhhjgmhMsubah}(h]jLmah ](jjeh"]h$]h&]jj)jhuh1jhjgmhMshjNmhhubj)}(hhh]h)}(h.check if state can be committed asynchronouslyh]h.check if state can be committed asynchronously}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMghjnhhubah}(h]h ]h"]h$]h&]uh1jhjNmhhhjgmhMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhj<hNhNubj)}(hX4**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` the driver state object **Description** This helper will check if it is possible to commit the state asynchronously. Async commits are not supposed to swap the states like normal sync commits but just do in-place changes on the current state. It will return 0 if the commit can happen in an asynchronous fashion or error if not. Note that error just mean it can't be committed asynchronously, if it fails the commit should be treated like a normal synchronous commit.h](h)}(h**Parameters**h]j%)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMkhjnubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjnh]hstruct drm_device *dev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhhjnubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhhjnubjn)}(h;``struct drm_atomic_state *state`` the driver state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjoh]hstruct drm_atomic_state *state}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMihjnubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMihjoubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjohMihjnubeh}(h]h ]h"]h$]h&]uh1jhhjnubh)}(h**Description**h]j%)}(hj>oh]h Description}(hj@ohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:qubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj6qubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjUqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQqhMhjRqubah}(h]h ]h"]h$]h&]uh1jhj6qubeh}(h]h ]h"]h$]h&]uh1jmhjQqhMhjpubeh}(h]h ]h"]h$]h&]uh1jhhjpubh)}(h**Description**h]j%)}(hjwqh]h Description}(hjyqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuqubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjpubh)}(hXThis function commits a state asynchronously, i.e., not vblank synchronized. It should be used on a state only when drm_atomic_async_check() succeeds. Async commits are not supposed to swap the states like normal sync commits, but just do in-place changes on the current state.h]hXThis function commits a state asynchronously, i.e., not vblank synchronized. It should be used on a state only when drm_atomic_async_check() succeeds. Async commits are not supposed to swap the states like normal sync commits, but just do in-place changes on the current state.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjpubh)}(h` callback, or its default implementation drm_atomic_helper_commit_tail(). **Return** Zero for success or -errno.h](h)}(h**Parameters**h]j%)}(hjQsh]h Parameters}(hjSshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOsubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjKsubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjpsh]hstruct drm_device *dev}(hjrshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnsubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjjsubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjjsubeh}(h]h ]h"]h$]h&]uh1jmhjshMhjgsubjn)}(h;``struct drm_atomic_state *state`` the driver state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjsh]hstruct drm_atomic_state *state}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjsubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshMhjgsubjn)}(h=``bool nonblock`` whether nonblocking behavior is requested. h](jt)}(h``bool nonblock``h]jz)}(hjsh]h bool nonblock}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjsubj)}(hhh]h)}(h*whether nonblocking behavior is requested.h]h*whether nonblocking behavior is requested.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshMhjgsubeh}(h]h ]h"]h$]h&]uh1jhhjKsubh)}(h**Description**h]j%)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjKsubh)}(hThis function commits a with drm_atomic_helper_check() pre-validated state object. This can still fail when e.g. the framebuffer reservation fails. This function implements nonblocking commits, using drm_atomic_helper_setup_commit() and related functions.h]hThis function commits a with drm_atomic_helper_check() pre-validated state object. This can still fail when e.g. the framebuffer reservation fails. This function implements nonblocking commits, using drm_atomic_helper_setup_commit() and related functions.}(hj3thhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjKsubh)}(hCommitting the actual hardware state is done through the :c:type:`drm_mode_config_helper_funcs.atomic_commit_tail ` callback, or its default implementation drm_atomic_helper_commit_tail().h](h9Committing the actual hardware state is done through the }(hjBthhhNhNubh)}(hX:c:type:`drm_mode_config_helper_funcs.atomic_commit_tail `h]jz)}(hjLth]h/drm_mode_config_helper_funcs.atomic_commit_tail}(hjNthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjBtubhI callback, or its default implementation drm_atomic_helper_commit_tail().}(hjBthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjithMhjKsubh)}(h **Return**h]j%)}(hjvth]hReturn}(hjxthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjttubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjKsubh)}(hZero for success or -errno.h]hZero for success or -errno.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjKsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_atomic_helper_setup_commit (C function) c.drm_atomic_helper_setup_commithNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hRint drm_atomic_helper_setup_commit (struct drm_atomic_state *state, bool nonblock)h]j)}(hQint drm_atomic_helper_setup_commit(struct drm_atomic_state *state, bool nonblock)h](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjthM ubj)}(hdrm_atomic_helper_setup_commith]j)}(hdrm_atomic_helper_setup_commith]hdrm_atomic_helper_setup_commit}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjthM ubj)}(h/(struct drm_atomic_state *state, bool nonblock)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j%)}jjtsb c.drm_atomic_helper_setup_commitasbuh1hhjtubj)}(h h]h }(hj6uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjDuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(hstateh]hstate}(hjQuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(h bool nonblockh](j)}(hjAh]hbool}(hjjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfuubj)}(h h]h }(hjwuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfuubj)}(hnonblockh]hnonblock}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubeh}(h]h ]h"]h$]h&]jjuh1jhjthhhjthM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjthM ubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jhjthM hjthhubj)}(hhh]h)}(h!setup possibly nonblocking commith]h!setup possibly nonblocking commit}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` new modeset state to be committed ``bool nonblock`` whether nonblocking behavior is requested. **Description** This function prepares **state** to be used by the atomic helper's support for nonblocking commits. Drivers using the nonblocking commit infrastructure should always call this function from their :c:type:`drm_mode_config_funcs.atomic_commit ` hook. Drivers that need to extend the commit setup to private objects can use the :c:type:`drm_mode_config_helper_funcs.atomic_commit_setup ` hook. To be able to use this support drivers need to use a few more helper functions. drm_atomic_helper_wait_for_dependencies() must be called before actually committing the hardware state, and for nonblocking commits this call must be placed in the async worker. See also drm_atomic_helper_swap_state() and its stall parameter, for when a driver's commit hooks look at the :c:type:`drm_crtc.state `, :c:type:`drm_plane.state ` or :c:type:`drm_connector.state ` pointer directly. Completion of the hardware commit step must be signalled using drm_atomic_helper_commit_hw_done(). After this step the driver is not allowed to read or change any permanent software or hardware modeset state. The only exception is state protected by other means than :c:type:`drm_modeset_lock` locks. Only the free standing **state** with pointers to the old state structures can be inspected, e.g. to clean up old buffers using drm_atomic_helper_cleanup_planes(). At the very end, before cleaning up **state** drivers must call drm_atomic_helper_commit_cleanup_done(). This is all implemented by in drm_atomic_helper_commit(), giving drivers a complete and easy-to-use default implementation of the atomic_commit() hook. The tracking of asynchronously executed and still pending commits is done using the core structure :c:type:`drm_crtc_commit`. By default there's no need to clean up resources allocated by this function explicitly: drm_atomic_state_default_clear() will take care of that automatically. **Return** 0 on success. -EBUSY when userspace schedules nonblocking commits too fast, -ENOMEM on allocation failures and -EINTR when a signal is pending.h](h)}(h**Parameters**h]j%)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubji)}(hhh](jn)}(hE``struct drm_atomic_state *state`` new modeset state to be committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjuh]hstruct drm_atomic_state *state}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubj)}(hhh]h)}(h!new modeset state to be committedh]h!new modeset state to be committed}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjvhMhjuubjn)}(h=``bool nonblock`` whether nonblocking behavior is requested. h](jt)}(h``bool nonblock``h]jz)}(hj)vh]h bool nonblock}(hj+vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'vubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj#vubj)}(hhh]h)}(h*whether nonblocking behavior is requested.h]h*whether nonblocking behavior is requested.}(hjBvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>vhMhj?vubah}(h]h ]h"]h$]h&]uh1jhj#vubeh}(h]h ]h"]h$]h&]uh1jmhj>vhMhjuubeh}(h]h ]h"]h$]h&]uh1jhhjuubh)}(h**Description**h]j%)}(hjdvh]h Description}(hjfvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbvubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(hXThis function prepares **state** to be used by the atomic helper's support for nonblocking commits. Drivers using the nonblocking commit infrastructure should always call this function from their :c:type:`drm_mode_config_funcs.atomic_commit ` hook.h](hThis function prepares }(hjzvhhhNhNubj%)}(h **state**h]hstate}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzvubh to be used by the atomic helper’s support for nonblocking commits. Drivers using the nonblocking commit infrastructure should always call this function from their }(hjzvhhhNhNubh)}(hE:c:type:`drm_mode_config_funcs.atomic_commit `h]jz)}(hjvh]h#drm_mode_config_funcs.atomic_commit}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjzvubh hook.}(hjzvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMhjuubh)}(hDrivers that need to extend the commit setup to private objects can use the :c:type:`drm_mode_config_helper_funcs.atomic_commit_setup ` hook.h](hLDrivers that need to extend the commit setup to private objects can use the }(hjvhhhNhNubh)}(hY:c:type:`drm_mode_config_helper_funcs.atomic_commit_setup `h]jz)}(hjvh]h0drm_mode_config_helper_funcs.atomic_commit_setup}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjvubh hook.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMhjuubh)}(hXTo be able to use this support drivers need to use a few more helper functions. drm_atomic_helper_wait_for_dependencies() must be called before actually committing the hardware state, and for nonblocking commits this call must be placed in the async worker. See also drm_atomic_helper_swap_state() and its stall parameter, for when a driver's commit hooks look at the :c:type:`drm_crtc.state `, :c:type:`drm_plane.state ` or :c:type:`drm_connector.state ` pointer directly.h](hXrTo be able to use this support drivers need to use a few more helper functions. drm_atomic_helper_wait_for_dependencies() must be called before actually committing the hardware state, and for nonblocking commits this call must be placed in the async worker. See also drm_atomic_helper_swap_state() and its stall parameter, for when a driver’s commit hooks look at the }(hjvhhhNhNubh)}(h#:c:type:`drm_crtc.state `h]jz)}(hjvh]hdrm_crtc.state}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtcuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjvubh, }(hjvhhhNhNubh)}(h%:c:type:`drm_plane.state `h]jz)}(hjwh]hdrm_plane.state}(hj whhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_planeuh1hhjwhMhjvubh or }(hjvhhhNhNubh)}(h-:c:type:`drm_connector.state `h]jz)}(hjAwh]hdrm_connector.state}(hjCwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj?wubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjwhMhjvubh pointer directly.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjuubh)}(hXCompletion of the hardware commit step must be signalled using drm_atomic_helper_commit_hw_done(). After this step the driver is not allowed to read or change any permanent software or hardware modeset state. The only exception is state protected by other means than :c:type:`drm_modeset_lock` locks. Only the free standing **state** with pointers to the old state structures can be inspected, e.g. to clean up old buffers using drm_atomic_helper_cleanup_planes().h](hX Completion of the hardware commit step must be signalled using drm_atomic_helper_commit_hw_done(). After this step the driver is not allowed to read or change any permanent software or hardware modeset state. The only exception is state protected by other means than }(hjhwhhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hjrwh]hdrm_modeset_lock}(hjtwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjhwubh locks. Only the free standing }(hjhwhhhNhNubj%)}(h **state**h]hstate}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhwubh with pointers to the old state structures can be inspected, e.g. to clean up old buffers using drm_atomic_helper_cleanup_planes().}(hjhwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjuubh)}(hhAt the very end, before cleaning up **state** drivers must call drm_atomic_helper_commit_cleanup_done().h](h$At the very end, before cleaning up }(hjwhhhNhNubj%)}(h **state**h]hstate}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh; drivers must call drm_atomic_helper_commit_cleanup_done().}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(hThis is all implemented by in drm_atomic_helper_commit(), giving drivers a complete and easy-to-use default implementation of the atomic_commit() hook.h]hThis is all implemented by in drm_atomic_helper_commit(), giving drivers a complete and easy-to-use default implementation of the atomic_commit() hook.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(h}The tracking of asynchronously executed and still pending commits is done using the core structure :c:type:`drm_crtc_commit`.h](hcThe tracking of asynchronously executed and still pending commits is done using the core structure }(hjwhhhNhNubh)}(h:c:type:`drm_crtc_commit`h]jz)}(hjwh]hdrm_crtc_commit}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_commituh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjuubh)}(hBy default there's no need to clean up resources allocated by this function explicitly: drm_atomic_state_default_clear() will take care of that automatically.h]hBy default there’s no need to clean up resources allocated by this function explicitly: drm_atomic_state_default_clear() will take care of that automatically.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(h **Return**h]j%)}(hjxh]hReturn}(hj!xhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjuubh)}(h0 on success. -EBUSY when userspace schedules nonblocking commits too fast, -ENOMEM on allocation failures and -EINTR when a signal is pending.h]h0 on success. -EBUSY when userspace schedules nonblocking commits too fast, -ENOMEM on allocation failures and -EINTR when a signal is pending.}(hj5xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_atomic_helper_wait_for_dependencies (C function))c.drm_atomic_helper_wait_for_dependencieshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hMvoid drm_atomic_helper_wait_for_dependencies (struct drm_atomic_state *state)h]j)}(hLvoid drm_atomic_helper_wait_for_dependencies(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjdxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`xhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjsxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`xhhhjrxhM ubj)}(h'drm_atomic_helper_wait_for_dependenciesh]j)}(h'drm_atomic_helper_wait_for_dependenciesh]h'drm_atomic_helper_wait_for_dependencies}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`xhhhjrxhM ubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j%)}jjxsb)c.drm_atomic_helper_wait_for_dependenciesasbuh1hhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hstateh]hstate}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubah}(h]h ]h"]h$]h&]jjuh1jhj`xhhhjrxhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\xhhhjrxhM ubah}(h]jWxah ](jjeh"]h$]h&]jj)jhuh1jhjrxhM hjYxhhubj)}(hhh]h)}(h#wait for required preceding commitsh]h#wait for required preceding commits}(hj$yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMy hj!yhhubah}(h]h ]h"]h$]h&]uh1jhjYxhhhjrxhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`). This is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h](h)}(h**Parameters**h]j%)}(hjFyh]h Parameters}(hjHyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDyubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM} hj@yubji)}(hhh]jn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjeyh]hstruct drm_atomic_state *state}(hjgyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcyubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMz hj_yubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj~yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzyhMz hj{yubah}(h]h ]h"]h$]h&]uh1jhj_yubeh}(h]h ]h"]h$]h&]uh1jmhjzyhMz hj\yubah}(h]h ]h"]h$]h&]uh1jhhj@yubh)}(h**Description**h]j%)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM| hj@yubh)}(hX9This function waits for all preceding commits that touch the same CRTC as **state** to both be committed to the hardware (as signalled by drm_atomic_helper_commit_hw_done()) and executed by the hardware (as signalled by calling drm_crtc_send_vblank_event() on the :c:type:`drm_crtc_state.event `).h](hJThis function waits for all preceding commits that touch the same CRTC as }(hjyhhhNhNubj%)}(h **state**h]hstate}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubh to both be committed to the hardware (as signalled by drm_atomic_helper_commit_hw_done()) and executed by the hardware (as signalled by calling drm_crtc_send_vblank_event() on the }(hjyhhhNhNubh)}(h/:c:type:`drm_crtc_state.event `h]jz)}(hjyh]hdrm_crtc_state.event}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM| hjyubh).}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhM| hj@yubh)}(hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h]hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj@yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_helper_fake_vblank (C function)c.drm_atomic_helper_fake_vblankhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hCvoid drm_atomic_helper_fake_vblank (struct drm_atomic_state *state)h]j)}(hBvoid drm_atomic_helper_fake_vblank(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj)zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%zhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj8zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%zhhhj7zhM ubj)}(hdrm_atomic_helper_fake_vblankh]j)}(hdrm_atomic_helper_fake_vblankh]hdrm_atomic_helper_fake_vblank}(hjJzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFzubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%zhhhj7zhM ubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjfzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbzubj)}(h h]h }(hjszhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbzubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jjLzsbc.drm_atomic_helper_fake_vblankasbuh1hhjbzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbzubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbzubj)}(hstateh]hstate}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^zubah}(h]h ]h"]h$]h&]jjuh1jhj%zhhhj7zhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!zhhhj7zhM ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1jhj7zhM hjzhhubj)}(hhh]h)}(hfake VBLANK events if neededh]hfake VBLANK events if needed}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjzhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhj7zhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1jhhhj<hNhNubj)}(hX{**Parameters** ``struct drm_atomic_state *state`` atomic state object being committed **Description** This function walks all CRTCs and fakes VBLANK events on those with :c:type:`drm_crtc_state.no_vblank ` set to true and :c:type:`drm_crtc_state.event ` != NULL. The primary use of this function is writeback connectors working in oneshot mode and faking VBLANK events. In this case they only fake the VBLANK event when a job is queued, and any change to the pipeline that does not touch the connector is leading to timeouts when calling drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(). In addition to writeback connectors, this function can also fake VBLANK events for CRTCs without VBLANK interrupt. This is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h](h)}(h**Parameters**h]j%)}(hj {h]h Parameters}(hj {hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj {ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj{ubji)}(hhh]jn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj*{h]hstruct drm_atomic_state *state}(hj,{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj({ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj${ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hjC{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?{hM hj@{ubah}(h]h ]h"]h$]h&]uh1jhj${ubeh}(h]h ]h"]h$]h&]uh1jmhj?{hM hj!{ubah}(h]h ]h"]h$]h&]uh1jhhj{ubh)}(h**Description**h]j%)}(hje{h]h Description}(hjg{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjc{ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj{ubh)}(hXThis function walks all CRTCs and fakes VBLANK events on those with :c:type:`drm_crtc_state.no_vblank ` set to true and :c:type:`drm_crtc_state.event ` != NULL. The primary use of this function is writeback connectors working in oneshot mode and faking VBLANK events. In this case they only fake the VBLANK event when a job is queued, and any change to the pipeline that does not touch the connector is leading to timeouts when calling drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(). In addition to writeback connectors, this function can also fake VBLANK events for CRTCs without VBLANK interrupt.h](hDThis function walks all CRTCs and fakes VBLANK events on those with }(hj{{hhhNhNubh)}(h3:c:type:`drm_crtc_state.no_vblank `h]jz)}(hj{h]hdrm_crtc_state.no_vblank}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj{{ubh set to true and }(hj{{hhhNhNubh)}(h/:c:type:`drm_crtc_state.event `h]jz)}(hj{h]hdrm_crtc_state.event}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhj{hM hj{{ubhX != NULL. The primary use of this function is writeback connectors working in oneshot mode and faking VBLANK events. In this case they only fake the VBLANK event when a job is queued, and any change to the pipeline that does not touch the connector is leading to timeouts when calling drm_atomic_helper_wait_for_vblanks() or drm_atomic_helper_wait_for_flip_done(). In addition to writeback connectors, this function can also fake VBLANK events for CRTCs without VBLANK interrupt.}(hj{{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hM hj{ubh)}(hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h]hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_atomic_helper_commit_hw_done (C function)"c.drm_atomic_helper_commit_hw_donehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hFvoid drm_atomic_helper_commit_hw_done (struct drm_atomic_state *state)h]j)}(hEvoid drm_atomic_helper_commit_hw_done(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj |hM ubj)}(h drm_atomic_helper_commit_hw_doneh]j)}(h drm_atomic_helper_commit_hw_doneh]h drm_atomic_helper_commit_hw_done}(hj |hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj |hM ubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj<|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8|ubj)}(h h]h }(hjI|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8|ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjZ|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\|modnameN classnameNjj)}j]j%)}jj"|sb"c.drm_atomic_helper_commit_hw_doneasbuh1hhj8|ubj)}(h h]h }(hjz|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8|ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8|ubj)}(hstateh]hstate}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4|ubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhj |hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhj |hM ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj |hM hj{hhubj)}(hhh]h)}(h!setup possible nonblocking commith]h!setup possible nonblocking commit}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj |hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhj<hNhNubj)}(hX[**Parameters** ``struct drm_atomic_state *state`` atomic state object being committed **Description** This function is used to signal completion of the hardware commit step. After this step the driver is not allowed to read or change any permanent software or hardware modeset state. The only exception is state protected by other means than :c:type:`drm_modeset_lock` locks. Drivers should try to postpone any expensive or delayed cleanup work after this function is called. This is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h](h)}(h**Parameters**h]j%)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj|ubji)}(hhh]jn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj}h]hstruct drm_atomic_state *state}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj|ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj}hM hj|ubah}(h]h ]h"]h$]h&]uh1jhhj|ubh)}(h**Description**h]j%)}(hj;}h]h Description}(hj=}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9}ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj|ubh)}(hXThis function is used to signal completion of the hardware commit step. After this step the driver is not allowed to read or change any permanent software or hardware modeset state. The only exception is state protected by other means than :c:type:`drm_modeset_lock` locks.h](hThis function is used to signal completion of the hardware commit step. After this step the driver is not allowed to read or change any permanent software or hardware modeset state. The only exception is state protected by other means than }(hjQ}hhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hj[}h]hdrm_modeset_lock}(hj]}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjY}ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjQ}ubh locks.}(hjQ}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjx}hM hj|ubh)}(hcDrivers should try to postpone any expensive or delayed cleanup work after this function is called.h]hcDrivers should try to postpone any expensive or delayed cleanup work after this function is called.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj|ubh)}(hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h]hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_helper_commit_cleanup_done (C function)'c.drm_atomic_helper_commit_cleanup_donehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hKvoid drm_atomic_helper_commit_cleanup_done (struct drm_atomic_state *state)h]j)}(hJvoid drm_atomic_helper_commit_cleanup_done(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj}hM ubj)}(h%drm_atomic_helper_commit_cleanup_doneh]j)}(h%drm_atomic_helper_commit_cleanup_doneh]h%drm_atomic_helper_commit_cleanup_done}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}hhhj}hM ubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jj}sb'c.drm_atomic_helper_commit_cleanup_doneasbuh1hhj}ubj)}(h h]h }(hj<~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj9h]h*}(hjJ~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubj)}(hstateh]hstate}(hjW~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubah}(h]h ]h"]h$]h&]jjuh1jhj}hhhj}hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}hhhj}hM ubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1jhj}hM hj}hhubj)}(hhh]h)}(hsignal completion of commith]hsignal completion of commit}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj~~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj}hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` atomic state object being committed **Description** This signals completion of the atomic update **state**, including any cleanup work. If used, it must be called right before calling drm_atomic_state_put(). This is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h](h)}(h**Parameters**h]j%)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj~ubji)}(hhh]jn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj~h]hstruct drm_atomic_state *state}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj~ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhj~hM hj~ubah}(h]h ]h"]h$]h&]uh1jhhj~ubh)}(h**Description**h]j%)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj~ubh)}(hThis signals completion of the atomic update **state**, including any cleanup work. If used, it must be called right before calling drm_atomic_state_put().h](h-This signals completion of the atomic update }(hjhhhNhNubj%)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe, including any cleanup work. If used, it must be called right before calling drm_atomic_state_put().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj~ubh)}(hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.h]hxThis is part of the atomic helper support for nonblocking commits, see drm_atomic_helper_setup_commit() for an overview.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_atomic_helper_prepare_planes (C function)"c.drm_atomic_helper_prepare_planeshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h]int drm_atomic_helper_prepare_planes (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(h\int drm_atomic_helper_prepare_planes(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM6 ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhM6 ubj)}(h drm_atomic_helper_prepare_planesh]j)}(h drm_atomic_helper_prepare_planesh]h drm_atomic_helper_prepare_planes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhjqhM6 ubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb"c.drm_atomic_helper_prepare_planesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j"c.drm_atomic_helper_prepare_planesasbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj_hhhjqhM6 ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhjqhM6 ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjqhM6 hjXhhubj)}(hhh]h)}(h%prepare plane resources before commith]h%prepare plane resources before commit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM* hjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhM6 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX0**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object with new state structures **Description** This function prepares plane state, specifically framebuffers, for the new configuration, by calling :c:type:`drm_plane_helper_funcs.prepare_fb `. If any failure is encountered this function will call :c:type:`drm_plane_helper_funcs.cleanup_fb ` on any already successfully prepared framebuffer. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM. hjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjԀh]hstruct drm_device *dev}(hjրhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҀubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM+ hj΀ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+ hjubah}(h]h ]h"]h$]h&]uh1jhj΀ubeh}(h]h ]h"]h$]h&]uh1jmhjhM+ hjˀubjn)}(hQ``struct drm_atomic_state *state`` atomic state object with new state structures h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj h]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM, hjubj)}(hhh]h)}(h-atomic state object with new state structuresh]h-atomic state object with new state structures}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM, hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hM, hjˀubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM. hjubh)}(hXWThis function prepares plane state, specifically framebuffers, for the new configuration, by calling :c:type:`drm_plane_helper_funcs.prepare_fb `. If any failure is encountered this function will call :c:type:`drm_plane_helper_funcs.cleanup_fb ` on any already successfully prepared framebuffer.h](heThis function prepares plane state, specifically framebuffers, for the new configuration, by calling }(hj^hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.prepare_fb `h]jz)}(hjhh]h!drm_plane_helper_funcs.prepare_fb}(hjjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM. hj^ubh8. If any failure is encountered this function will call }(hj^hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.cleanup_fb `h]jz)}(hjh]h!drm_plane_helper_funcs.cleanup_fb}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjhM. hj^ubh2 on any already successfully prepared framebuffer.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM. hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM3 hjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjˁhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM3 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_atomic_helper_unprepare_planes (C function)$c.drm_atomic_helper_unprepare_planeshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h`void drm_atomic_helper_unprepare_planes (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(h_void drm_atomic_helper_unprepare_planes(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h"drm_atomic_helper_unprepare_planesh]j)}(h"drm_atomic_helper_unprepare_planesh]h"drm_atomic_helper_unprepare_planes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j%)}jjsb$c.drm_atomic_helper_unprepare_planesasbuh1hhj3ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjǂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĂubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjɂmodnameN classnameNjj)}j]jq$c.drm_atomic_helper_unprepare_planesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h!release plane resources on abortsh]h!release plane resources on aborts}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj'hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object with old state structures **Description** This function cleans up plane state, specifically framebuffers, from the atomic state. It undoes the effects of drm_atomic_helper_prepare_planes() when aborting an atomic commit. For cleaning up after a successful commit use drm_atomic_helper_cleanup_planes().h](h)}(h**Parameters**h]j%)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjFubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjkh]hstruct drm_device *dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjeubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjbubjn)}(hQ``struct drm_atomic_state *state`` atomic state object with old state structures h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjh]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(h-atomic state object with old state structuresh]h-atomic state object with old state structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjbubeh}(h]h ]h"]h$]h&]uh1jhhjFubh)}(h**Description**h]j%)}(hj߃h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj݃ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjFubh)}(hXThis function cleans up plane state, specifically framebuffers, from the atomic state. It undoes the effects of drm_atomic_helper_prepare_planes() when aborting an atomic commit. For cleaning up after a successful commit use drm_atomic_helper_cleanup_planes().h]hXThis function cleans up plane state, specifically framebuffers, from the atomic state. It undoes the effects of drm_atomic_helper_prepare_planes() when aborting an atomic commit. For cleaning up after a successful commit use drm_atomic_helper_cleanup_planes().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_atomic_helper_commit_planes (C function)!c.drm_atomic_helper_commit_planeshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hmvoid drm_atomic_helper_commit_planes (struct drm_device *dev, struct drm_atomic_state *state, uint32_t flags)h]j)}(hlvoid drm_atomic_helper_commit_planes(struct drm_device *dev, struct drm_atomic_state *state, uint32_t flags)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj2hM ubj)}(hdrm_atomic_helper_commit_planesh]j)}(hdrm_atomic_helper_commit_planesh]hdrm_atomic_helper_commit_planes}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj2hM ubj)}(hH(struct drm_device *dev, struct drm_atomic_state *state, uint32_t flags)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjGsb!c.drm_atomic_helper_commit_planesasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjӄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjτubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjτubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_atomic_helper_commit_planesasbuh1hhjτubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjτubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjτubj)}(hstateh]hstate}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjτubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(huint32_t flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j!c.drm_atomic_helper_commit_planesasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hflagsh]hflags}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj2hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj2hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj2hM hjhhubj)}(hhh]h)}(hcommit plane stateh]hcommit plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX!**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object being committed ``uint32_t flags`` flags for committing plane state **Description** This function commits the new plane state using the plane and atomic helper functions for planes and CRTCs. It assumes that the atomic state has already been pushed into the relevant object state pointers, since this step can no longer fail. It still requires the global state object **state** to know which planes and crtcs need to be updated though. Note that this function does all plane updates across all CRTCs in one step. If the hardware can't support this approach look at drm_atomic_helper_commit_planes_on_crtc() instead. Plane parameters can be updated by applications while the associated CRTC is disabled. The DRM/KMS core will store the parameters in the plane state, which will be available to the driver when the CRTC is turned on. As a result most drivers don't need to be immediately notified of plane updates for a disabled CRTC. Unless otherwise needed, drivers are advised to set the ACTIVE_ONLY flag in **flags** in order not to receive plane update notifications related to a disabled CRTC. This avoids the need to manually ignore plane updates in driver code when the driver and/or hardware can't or just don't need to deal with updates on disabled CRTCs, for example when supporting runtime PM. Drivers may set the NO_DISABLE_AFTER_MODESET flag in **flags** if the relevant display controllers require to disable a CRTC's planes when the CRTC is disabled. This function would skip the :c:type:`drm_plane_helper_funcs.atomic_disable ` call for a plane if the CRTC of the old plane state needs a modesetting operation. Of course, the drivers need to disable the planes in their CRTC disable callbacks since no one else would do that. The drm_atomic_helper_commit() default implementation doesn't set the ACTIVE_ONLY flag to most closely match the behaviour of the legacy helpers. This should not be copied blindly by drivers.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj݅h]hstruct drm_device *dev}(hj߅hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjۅubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjׅubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjׅubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjԅubjn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjh]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj+hM hjԅubjn)}(h4``uint32_t flags`` flags for committing plane state h](jt)}(h``uint32_t flags``h]jz)}(hjOh]huint32_t flags}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjIubj)}(hhh]h)}(h flags for committing plane stateh]h flags for committing plane state}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhM hjԅubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hThis function commits the new plane state using the plane and atomic helper functions for planes and CRTCs. It assumes that the atomic state has already been pushed into the relevant object state pointers, since this step can no longer fail.h]hThis function commits the new plane state using the plane and atomic helper functions for planes and CRTCs. It assumes that the atomic state has already been pushed into the relevant object state pointers, since this step can no longer fail.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hmIt still requires the global state object **state** to know which planes and crtcs need to be updated though.h](h*It still requires the global state object }(hjhhhNhNubj%)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh: to know which planes and crtcs need to be updated though.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hNote that this function does all plane updates across all CRTCs in one step. If the hardware can't support this approach look at drm_atomic_helper_commit_planes_on_crtc() instead.h]hNote that this function does all plane updates across all CRTCs in one step. If the hardware can’t support this approach look at drm_atomic_helper_commit_planes_on_crtc() instead.}(hjІhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hX<Plane parameters can be updated by applications while the associated CRTC is disabled. The DRM/KMS core will store the parameters in the plane state, which will be available to the driver when the CRTC is turned on. As a result most drivers don't need to be immediately notified of plane updates for a disabled CRTC.h]hX>Plane parameters can be updated by applications while the associated CRTC is disabled. The DRM/KMS core will store the parameters in the plane state, which will be available to the driver when the CRTC is turned on. As a result most drivers don’t need to be immediately notified of plane updates for a disabled CRTC.}(hj߆hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hXrUnless otherwise needed, drivers are advised to set the ACTIVE_ONLY flag in **flags** in order not to receive plane update notifications related to a disabled CRTC. This avoids the need to manually ignore plane updates in driver code when the driver and/or hardware can't or just don't need to deal with updates on disabled CRTCs, for example when supporting runtime PM.h](hLUnless otherwise needed, drivers are advised to set the ACTIVE_ONLY flag in }(hjhhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhX! in order not to receive plane update notifications related to a disabled CRTC. This avoids the need to manually ignore plane updates in driver code when the driver and/or hardware can’t or just don’t need to deal with updates on disabled CRTCs, for example when supporting runtime PM.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hXDrivers may set the NO_DISABLE_AFTER_MODESET flag in **flags** if the relevant display controllers require to disable a CRTC's planes when the CRTC is disabled. This function would skip the :c:type:`drm_plane_helper_funcs.atomic_disable ` call for a plane if the CRTC of the old plane state needs a modesetting operation. Of course, the drivers need to disable the planes in their CRTC disable callbacks since no one else would do that.h](h5Drivers may set the NO_DISABLE_AFTER_MODESET flag in }(hjhhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh if the relevant display controllers require to disable a CRTC’s planes when the CRTC is disabled. This function would skip the }(hjhhhNhNubh)}(hH:c:type:`drm_plane_helper_funcs.atomic_disable `h]jz)}(hj+h]h%drm_plane_helper_funcs.atomic_disable}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh call for a plane if the CRTC of the old plane state needs a modesetting operation. Of course, the drivers need to disable the planes in their CRTC disable callbacks since no one else would do that.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhM hjubh)}(hThe drm_atomic_helper_commit() default implementation doesn't set the ACTIVE_ONLY flag to most closely match the behaviour of the legacy helpers. This should not be copied blindly by drivers.h]hThe drm_atomic_helper_commit() default implementation doesn’t set the ACTIVE_ONLY flag to most closely match the behaviour of the legacy helpers. This should not be copied blindly by drivers.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_atomic_helper_commit_planes_on_crtc (C function))c.drm_atomic_helper_commit_planes_on_crtchNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hTvoid drm_atomic_helper_commit_planes_on_crtc (struct drm_crtc_state *old_crtc_state)h]j)}(hSvoid drm_atomic_helper_commit_planes_on_crtc(struct drm_crtc_state *old_crtc_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMK ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMK ubj)}(h'drm_atomic_helper_commit_planes_on_crtch]j)}(h'drm_atomic_helper_commit_planes_on_crtch]h'drm_atomic_helper_commit_planes_on_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhMK ubj)}(h'(struct drm_crtc_state *old_crtc_state)h]j)}(h%struct drm_crtc_state *old_crtc_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj̇hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hj݇hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڇubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj߇modnameN classnameNjj)}j]j%)}jjsb)c.drm_atomic_helper_commit_planes_on_crtcasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hold_crtc_stateh]hold_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhMK ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhMK ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhMK hjwhhubj)}(hhh]h)}(hcommit plane state for a CRTCh]hcommit plane state for a CRTC}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM; hj?hhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhj<hNhNubj)}(hX1**Parameters** ``struct drm_crtc_state *old_crtc_state`` atomic state object with the old CRTC state **Description** This function commits the new plane state using the plane and atomic helper functions for planes on the specific CRTC. It assumes that the atomic state has already been pushed into the relevant object state pointers, since this step can no longer fail. This function is useful when plane updates should be done CRTC-by-CRTC instead of one global step like drm_atomic_helper_commit_planes() does. This function can only be savely used when planes are not allowed to move between different CRTCs because this function doesn't handle inter-CRTC dependencies. Callers need to ensure that either no such dependencies exist, resolve them through ordering of commit calls or through some other means.h](h)}(h**Parameters**h]j%)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM? hj^ubji)}(hhh]jn)}(hV``struct drm_crtc_state *old_crtc_state`` atomic state object with the old CRTC state h](jt)}(h)``struct drm_crtc_state *old_crtc_state``h]jz)}(hjh]h%struct drm_crtc_state *old_crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM< hj}ubj)}(hhh]h)}(h+atomic state object with the old CRTC stateh]h+atomic state object with the old CRTC state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM< hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhM< hjzubah}(h]h ]h"]h$]h&]uh1jhhj^ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM> hj^ubh)}(hThis function commits the new plane state using the plane and atomic helper functions for planes on the specific CRTC. It assumes that the atomic state has already been pushed into the relevant object state pointers, since this step can no longer fail.h]hThis function commits the new plane state using the plane and atomic helper functions for planes on the specific CRTC. It assumes that the atomic state has already been pushed into the relevant object state pointers, since this step can no longer fail.}(hjԈhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM> hj^ubh)}(hThis function is useful when plane updates should be done CRTC-by-CRTC instead of one global step like drm_atomic_helper_commit_planes() does.h]hThis function is useful when plane updates should be done CRTC-by-CRTC instead of one global step like drm_atomic_helper_commit_planes() does.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMC hj^ubh)}(hX)This function can only be savely used when planes are not allowed to move between different CRTCs because this function doesn't handle inter-CRTC dependencies. Callers need to ensure that either no such dependencies exist, resolve them through ordering of commit calls or through some other means.h]hX+This function can only be savely used when planes are not allowed to move between different CRTCs because this function doesn’t handle inter-CRTC dependencies. Callers need to ensure that either no such dependencies exist, resolve them through ordering of commit calls or through some other means.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMF hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_atomic_helper_disable_planes_on_crtc (C function)*c.drm_atomic_helper_disable_planes_on_crtchNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hbvoid drm_atomic_helper_disable_planes_on_crtc (struct drm_crtc_state *old_crtc_state, bool atomic)h]j)}(havoid drm_atomic_helper_disable_planes_on_crtc(struct drm_crtc_state *old_crtc_state, bool atomic)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hM ubj)}(h(drm_atomic_helper_disable_planes_on_crtch]j)}(h(drm_atomic_helper_disable_planes_on_crtch]h(drm_atomic_helper_disable_planes_on_crtc}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hM ubj)}(h4(struct drm_crtc_state *old_crtc_state, bool atomic)h](j)}(h%struct drm_crtc_state *old_crtc_stateh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjDsb*c.drm_atomic_helper_disable_planes_on_crtcasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hold_crtc_stateh]hold_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(h bool atomich](j)}(hjAh]hbool}(hjЉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubj)}(h h]h }(hj݉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubj)}(hatomich]hatomic}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj/hM hjhhubj)}(hhh]h)}(hhelper to disable CRTC's planesh]h!helper to disable CRTC’s planes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jhhhj<hNhNubj)}(hXy**Parameters** ``struct drm_crtc_state *old_crtc_state`` atomic state object with the old CRTC state ``bool atomic`` if set, synchronize with CRTC's atomic_begin/flush hooks **Description** Disables all planes associated with the given CRTC. This can be used for instance in the CRTC helper atomic_disable callback to disable all planes. If the atomic-parameter is set the function calls the CRTC's atomic_begin hook before and atomic_flush hook after disabling the planes. It is a bug to call this function without having implemented the :c:type:`drm_plane_helper_funcs.atomic_disable ` plane hook.h](h)}(h**Parameters**h]j%)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj1ubji)}(hhh](jn)}(hV``struct drm_crtc_state *old_crtc_state`` atomic state object with the old CRTC state h](jt)}(h)``struct drm_crtc_state *old_crtc_state``h]jz)}(hjVh]h%struct drm_crtc_state *old_crtc_state}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjPubj)}(hhh]h)}(h+atomic state object with the old CRTC stateh]h+atomic state object with the old CRTC state}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhM hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjkhM hjMubjn)}(hI``bool atomic`` if set, synchronize with CRTC's atomic_begin/flush hooks h](jt)}(h``bool atomic``h]jz)}(hjh]h bool atomic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(h8if set, synchronize with CRTC's atomic_begin/flush hooksh]h:if set, synchronize with CRTC’s atomic_begin/flush hooks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjMubeh}(h]h ]h"]h$]h&]uh1jhhj1ubh)}(h**Description**h]j%)}(hjʊh]h Description}(hj̊hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjȊubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj1ubh)}(hDisables all planes associated with the given CRTC. This can be used for instance in the CRTC helper atomic_disable callback to disable all planes.h]hDisables all planes associated with the given CRTC. This can be used for instance in the CRTC helper atomic_disable callback to disable all planes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj1ubh)}(hIf the atomic-parameter is set the function calls the CRTC's atomic_begin hook before and atomic_flush hook after disabling the planes.h]hIf the atomic-parameter is set the function calls the CRTC’s atomic_begin hook before and atomic_flush hook after disabling the planes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj1ubh)}(hIt is a bug to call this function without having implemented the :c:type:`drm_plane_helper_funcs.atomic_disable ` plane hook.h](hAIt is a bug to call this function without having implemented the }(hjhhhNhNubh)}(hH:c:type:`drm_plane_helper_funcs.atomic_disable `h]jz)}(hjh]h%drm_plane_helper_funcs.atomic_disable}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh plane hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hM hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_atomic_helper_cleanup_planes (C function)"c.drm_atomic_helper_cleanup_planeshNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h^void drm_atomic_helper_cleanup_planes (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(h]void drm_atomic_helper_cleanup_planes(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj^hM ubj)}(h drm_atomic_helper_cleanup_planesh]j)}(h drm_atomic_helper_cleanup_planesh]h drm_atomic_helper_cleanup_planes}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj^hM ubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjssb"c.drm_atomic_helper_cleanup_planesasbuh1hhjubj)}(h h]h }(hjˋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjًhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jNj"c.drm_atomic_helper_cleanup_planesasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhj^hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhj^hM ubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jhj^hM hjEhhubj)}(hhh]h)}(h$cleanup plane resources after commith]h$cleanup plane resources after commit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj}hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state object being committed **Description** This function cleans up plane state, specifically framebuffers, from the old configuration. Hence the old configuration must be perserved in **state** to be able to call this function. This function may not be called on the new state when the atomic update fails at any point after calling drm_atomic_helper_prepare_planes(). Use drm_atomic_helper_unprepare_planes() in this case.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjÌhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjڌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֌hM hj׌ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj֌hM hjubjn)}(hG``struct drm_atomic_state *state`` atomic state object being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjh]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hThis function cleans up plane state, specifically framebuffers, from the old configuration. Hence the old configuration must be perserved in **state** to be able to call this function.h](hThis function cleans up plane state, specifically framebuffers, from the old configuration. Hence the old configuration must be perserved in }(hjKhhhNhNubj%)}(h **state**h]hstate}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubh" to be able to call this function.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hThis function may not be called on the new state when the atomic update fails at any point after calling drm_atomic_helper_prepare_planes(). Use drm_atomic_helper_unprepare_planes() in this case.h]hThis function may not be called on the new state when the atomic update fails at any point after calling drm_atomic_helper_prepare_planes(). Use drm_atomic_helper_unprepare_planes() in this case.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_atomic_helper_swap_state (C function)c.drm_atomic_helper_swap_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hMint drm_atomic_helper_swap_state (struct drm_atomic_state *state, bool stall)h]j)}(hLint drm_atomic_helper_swap_state(struct drm_atomic_state *state, bool stall)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_atomic_helper_swap_stateh]j)}(hdrm_atomic_helper_swap_stateh]hdrm_atomic_helper_swap_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h,(struct drm_atomic_state *state, bool stall)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj؍hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԍubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԍubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_atomic_helper_swap_stateasbuh1hhjԍubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԍubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjԍubj)}(hstateh]hstate}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԍubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjЍubj)}(h bool stallh](j)}(hjAh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hstallh]hstall}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjЍubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h(store atomic state into current sw stateh]h(store atomic state into current sw state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` atomic state ``bool stall`` stall for preceding commits **Description** This function stores the atomic state into the current state pointers in all driver objects. It should be called after all failing steps have been done and succeeded, but before the actual hardware state is committed. For cleanup and error recovery the current state for all changed objects will be swapped into **state**. With that sequence it fits perfectly into the plane prepare/cleanup sequence: 1. Call drm_atomic_helper_prepare_planes() with the staged atomic state. 2. Do any other steps that might fail. 3. Put the staged state into the current state pointers with this function. 4. Actually commit the hardware state. 5. Call drm_atomic_helper_cleanup_planes() with **state**, which since step 3 contains the old state. Also do any other cleanup required with that state. **stall** must be set when nonblocking commits for this driver directly access the :c:type:`drm_plane.state `, :c:type:`drm_crtc.state ` or :c:type:`drm_connector.state ` pointer. With the current atomic helpers this is almost always the case, since the helpers don't pass the right state structures to the callbacks. **Return** Returns 0 on success. Can return -ERESTARTSYS when **stall** is true and the waiting for the previous commits has been interrupted.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubji)}(hhh](jn)}(h0``struct drm_atomic_state *state`` atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjЎh]hstruct drm_atomic_state *state}(hjҎhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΎubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjʎubj)}(hhh]h)}(h atomic stateh]h atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjʎubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjǎubjn)}(h+``bool stall`` stall for preceding commits h](jt)}(h``bool stall``h]jz)}(hj h]h bool stall}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(hstall for preceding commitsh]hstall for preceding commits}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjǎubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hThis function stores the atomic state into the current state pointers in all driver objects. It should be called after all failing steps have been done and succeeded, but before the actual hardware state is committed.h]hThis function stores the atomic state into the current state pointers in all driver objects. It should be called after all failing steps have been done and succeeded, but before the actual hardware state is committed.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hhFor cleanup and error recovery the current state for all changed objects will be swapped into **state**.h](h^For cleanup and error recovery the current state for all changed objects will be swapped into }(hjihhhNhNubj%)}(h **state**h]hstate}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hMWith that sequence it fits perfectly into the plane prepare/cleanup sequence:h]hMWith that sequence it fits perfectly into the plane prepare/cleanup sequence:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubjQH)}(hhh](h)}(hFCall drm_atomic_helper_prepare_planes() with the staged atomic state. h]h)}(hECall drm_atomic_helper_prepare_planes() with the staged atomic state.h]hECall drm_atomic_helper_prepare_planes() with the staged atomic state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h$Do any other steps that might fail. h]h)}(h#Do any other steps that might fail.h]h#Do any other steps that might fail.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hIPut the staged state into the current state pointers with this function. h]h)}(hHPut the staged state into the current state pointers with this function.h]hHPut the staged state into the current state pointers with this function.}(hjҏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjΏubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h$Actually commit the hardware state. h]h)}(h#Actually commit the hardware state.h]h#Actually commit the hardware state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jMJjNJjOJhjPJjQJuh1jPHhjubh)}(h5. Call drm_atomic_helper_cleanup_planes() with **state**, which since step 3 contains the old state. Also do any other cleanup required with that state.h](h05. Call drm_atomic_helper_cleanup_planes() with }(hjhhhNhNubj%)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh`, which since step 3 contains the old state. Also do any other cleanup required with that state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hXa**stall** must be set when nonblocking commits for this driver directly access the :c:type:`drm_plane.state `, :c:type:`drm_crtc.state ` or :c:type:`drm_connector.state ` pointer. With the current atomic helpers this is almost always the case, since the helpers don't pass the right state structures to the callbacks.h](j%)}(h **stall**h]hstall}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubhJ must be set when nonblocking commits for this driver directly access the }(hj'hhhNhNubh)}(h%:c:type:`drm_plane.state `h]jz)}(hj?h]hdrm_plane.state}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_planeuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj'ubh, }(hj'hhhNhNubh)}(h#:c:type:`drm_crtc.state `h]jz)}(hjch]hdrm_crtc.state}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtcuh1hhj\hM hj'ubh or }(hj'hhhNhNubh)}(h-:c:type:`drm_connector.state `h]jz)}(hjh]hdrm_connector.state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj\hM hj'ubh pointer. With the current atomic helpers this is almost always the case, since the helpers don’t pass the right state structures to the callbacks.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hReturns 0 on success. Can return -ERESTARTSYS when **stall** is true and the waiting for the previous commits has been interrupted.h](h3Returns 0 on success. Can return -ERESTARTSYS when }(hjŐhhhNhNubj%)}(h **stall**h]hstall}(hj͐hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjŐubhG is true and the waiting for the previous commits has been interrupted.}(hjŐhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_atomic_helper_update_plane (C function) c.drm_atomic_helper_update_planehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hXint drm_atomic_helper_update_plane (struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, unsigned int crtc_w, unsigned int crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, struct drm_modeset_acquire_ctx *ctx)h]j)}(hXint drm_atomic_helper_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, unsigned int crtc_w, unsigned int crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMr ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMr ubj)}(hdrm_atomic_helper_update_planeh]j)}(hdrm_atomic_helper_update_planeh]hdrm_atomic_helper_update_plane}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMr ubj)}(h(struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, unsigned int crtc_w, unsigned int crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j%)}jj)sb c.drm_atomic_helper_update_planeasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj‘hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjӑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjБubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjՑmodnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhj!ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubj)}(hfbh]hfb}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h int crtc_xh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcrtc_xh]hcrtc_x}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h int crtc_yh](j)}(hinth]hint}(hjʒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƒubj)}(h h]h }(hjؒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƒubj)}(hcrtc_yh]hcrtc_y}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƒubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hunsigned int crtc_wh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcrtc_wh]hcrtc_w}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hunsigned int crtc_hh](j)}(hunsignedh]hunsigned}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hcrtc_hh]hcrtc_h}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(huint32_t src_xh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhjubj)}(h h]h }(hj“hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsrc_xh]hsrc_x}(hjГhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(huint32_t src_yh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsrc_yh]hsrc_y}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(huint32_t src_wh](h)}(hhh]j)}(huint32_th]huint32_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhj-ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hsrc_wh]hsrc_w}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(huint32_t src_hh](h)}(hhh]j)}(huint32_th]huint32_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hsrc_hh]hsrc_h}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjΔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjߔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܔubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j} c.drm_atomic_helper_update_planeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMr ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMr ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMr hjhhubj)}(hhh]h)}(h,Helper for primary plane update using atomich]h,Helper for primary plane update using atomic}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM_ hj?hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMr ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhj<hNhNubj)}(hXo**Parameters** ``struct drm_plane *plane`` plane object to update ``struct drm_crtc *crtc`` owning CRTC of owning plane ``struct drm_framebuffer *fb`` framebuffer to flip onto plane ``int crtc_x`` x offset of primary plane on **crtc** ``int crtc_y`` y offset of primary plane on **crtc** ``unsigned int crtc_w`` width of primary plane rectangle on **crtc** ``unsigned int crtc_h`` height of primary plane rectangle on **crtc** ``uint32_t src_x`` x offset of **fb** for panning ``uint32_t src_y`` y offset of **fb** for panning ``uint32_t src_w`` width of source rectangle in **fb** ``uint32_t src_h`` height of source rectangle in **fb** ``struct drm_modeset_acquire_ctx *ctx`` lock acquire context **Description** Provides a default plane update handler using the atomic driver interface. **Return** Zero on success, error code on failureh](h)}(h**Parameters**h]j%)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMc hj^ubji)}(hhh](jn)}(h3``struct drm_plane *plane`` plane object to update h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM` hj}ubj)}(hhh]h)}(hplane object to updateh]hplane object to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM` hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhM` hjzubjn)}(h6``struct drm_crtc *crtc`` owning CRTC of owning plane h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMa hjubj)}(hhh]h)}(howning CRTC of owning planeh]howning CRTC of owning plane}(hjՕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѕhMa hjҕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjѕhMa hjzubjn)}(h>``struct drm_framebuffer *fb`` framebuffer to flip onto plane h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMb hjubj)}(hhh]h)}(hframebuffer to flip onto planeh]hframebuffer to flip onto plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMb hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMb hjzubjn)}(h5``int crtc_x`` x offset of primary plane on **crtc** h](jt)}(h``int crtc_x``h]jz)}(hj.h]h int crtc_x}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMc hj(ubj)}(hhh]h)}(h%x offset of primary plane on **crtc**h](hx offset of primary plane on }(hjGhhhNhNubj%)}(h**crtc**h]hcrtc}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]uh1hhjChMc hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhjChMc hjzubjn)}(h5``int crtc_y`` y offset of primary plane on **crtc** h](jt)}(h``int crtc_y``h]jz)}(hjuh]h int crtc_y}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMd hjoubj)}(hhh]h)}(h%y offset of primary plane on **crtc**h](hy offset of primary plane on }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhMd hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhMd hjzubjn)}(hE``unsigned int crtc_w`` width of primary plane rectangle on **crtc** h](jt)}(h``unsigned int crtc_w``h]jz)}(hjh]hunsigned int crtc_w}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMe hjubj)}(hhh]h)}(h,width of primary plane rectangle on **crtc**h](h$width of primary plane rectangle on }(hjՖhhhNhNubj%)}(h**crtc**h]hcrtc}(hjݖhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjՖubeh}(h]h ]h"]h$]h&]uh1hhjіhMe hjҖubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjіhMe hjzubjn)}(hF``unsigned int crtc_h`` height of primary plane rectangle on **crtc** h](jt)}(h``unsigned int crtc_h``h]jz)}(hjh]hunsigned int crtc_h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMf hjubj)}(hhh]h)}(h-height of primary plane rectangle on **crtc**h](h%height of primary plane rectangle on }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhMf hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMf hjzubjn)}(h2``uint32_t src_x`` x offset of **fb** for panning h](jt)}(h``uint32_t src_x``h]jz)}(hjJh]huint32_t src_x}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMg hjDubj)}(hhh]h)}(hx offset of **fb** for panningh](h x offset of }(hjchhhNhNubj%)}(h**fb**h]hfb}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubh for panning}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMg hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhj_hMg hjzubjn)}(h2``uint32_t src_y`` y offset of **fb** for panning h](jt)}(h``uint32_t src_y``h]jz)}(hjh]huint32_t src_y}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMh hjubj)}(hhh]h)}(hy offset of **fb** for panningh](h y offset of }(hjhhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh for panning}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMh hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMh hjzubjn)}(h7``uint32_t src_w`` width of source rectangle in **fb** h](jt)}(h``uint32_t src_w``h]jz)}(hjh]huint32_t src_w}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjޗubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMi hjڗubj)}(hhh]h)}(h#width of source rectangle in **fb**h](hwidth of source rectangle in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhMi hjubah}(h]h ]h"]h$]h&]uh1jhjڗubeh}(h]h ]h"]h$]h&]uh1jmhjhMi hjzubjn)}(h8``uint32_t src_h`` height of source rectangle in **fb** h](jt)}(h``uint32_t src_h``h]jz)}(hj'h]huint32_t src_h}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMj hj!ubj)}(hhh]h)}(h$height of source rectangle in **fb**h](hheight of source rectangle in }(hj@hhhNhNubj%)}(h**fb**h]hfb}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]uh1hhj<hMj hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj<hMj hjzubjn)}(h=``struct drm_modeset_acquire_ctx *ctx`` lock acquire context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjnh]h#struct drm_modeset_acquire_ctx *ctx}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMk hjhubj)}(hhh]h)}(hlock acquire contexth]hlock acquire context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMk hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhMk hjzubeh}(h]h ]h"]h$]h&]uh1jhhj^ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMm hj^ubh)}(hJProvides a default plane update handler using the atomic driver interface.h]hJProvides a default plane update handler using the atomic driver interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMm hj^ubh)}(h **Return**h]j%)}(hjИh]hReturn}(hjҘhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjΘubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMo hj^ubh)}(h&Zero on success, error code on failureh]h&Zero on success, error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMo hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_atomic_helper_disable_plane (C function)!c.drm_atomic_helper_disable_planehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hbint drm_atomic_helper_disable_plane (struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx)h]j)}(haint drm_atomic_helper_disable_plane(struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM ubj)}(hdrm_atomic_helper_disable_planeh]j)}(hdrm_atomic_helper_disable_planeh]hdrm_atomic_helper_disable_plane}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hM ubj)}(h>(struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j%)}jj8sb!c.drm_atomic_helper_disable_planeasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjęhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjљhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߙubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_atomic_helper_disable_planeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj#hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj#hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj#hM hj hhubj)}(hhh]h)}(h-Helper for primary plane disable using atomich]h-Helper for primary plane disable using atomic}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjBhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` plane to disable ``struct drm_modeset_acquire_ctx *ctx`` lock acquire context **Description** Provides a default plane disable handler using the atomic driver interface. **Return** Zero on success, error code on failureh](h)}(h**Parameters**h]j%)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjaubji)}(hhh](jn)}(h-``struct drm_plane *plane`` plane to disable h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(hplane to disableh]hplane to disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj}ubjn)}(h=``struct drm_modeset_acquire_ctx *ctx`` lock acquire context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(hlock acquire contexth]hlock acquire context}(hjؚhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԚhM hj՚ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjԚhM hj}ubeh}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjaubh)}(hKProvides a default plane disable handler using the atomic driver interface.h]hKProvides a default plane disable handler using the atomic driver interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjaubh)}(h **Return**h]j%)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjaubh)}(h&Zero on success, error code on failureh]h&Zero on success, error code on failure}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_atomic_helper_set_config (C function)c.drm_atomic_helper_set_confighNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h`int drm_atomic_helper_set_config (struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h]j)}(h_int drm_atomic_helper_set_config(struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjthM ubj)}(hdrm_atomic_helper_set_configh]j)}(hdrm_atomic_helper_set_configh]hdrm_atomic_helper_set_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjthM ubj)}(h?(struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_mode_set *seth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_mode_seth]h drm_mode_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjÛmodnameN classnameNjj)}j]j%)}jjsbc.drm_atomic_helper_set_configasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hseth]hset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]jݛc.drm_atomic_helper_set_configasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjthM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhjthM ubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjthM hj[hhubj)}(hhh]h)}(hset a new config from userspaceh]hset a new config from userspace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjthM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX~**Parameters** ``struct drm_mode_set *set`` mode set configuration ``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context **Description** Provides a default CRTC set_config handler using the atomic driver interface. **NOTE** For backwards compatibility with old userspace this automatically resets the "link-status" property to GOOD, to force any link re-training. The SETCRTC ioctl does not define whether an update does need a full modeset or just a plane update, hence we're allowed to do that. See also drm_connector_set_link_status_property(). **Return** Returns 0 on success, negative errno numbers on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubji)}(hhh](jn)}(h4``struct drm_mode_set *set`` mode set configuration h](jt)}(h``struct drm_mode_set *set``h]jz)}(hjלh]hstruct drm_mode_set *set}(hjٜhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj՜ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjќubj)}(hhh]h)}(hmode set configurationh]hmode set configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjќubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjΜubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj ubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj%hM hjΜubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hMProvides a default CRTC set_config handler using the atomic driver interface.h]hMProvides a default CRTC set_config handler using the atomic driver interface.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(h**NOTE**h]j%)}(hjrh]hNOTE}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hXCFor backwards compatibility with old userspace this automatically resets the "link-status" property to GOOD, to force any link re-training. The SETCRTC ioctl does not define whether an update does need a full modeset or just a plane update, hence we're allowed to do that. See also drm_connector_set_link_status_property().h]hXIFor backwards compatibility with old userspace this automatically resets the “link-status” property to GOOD, to force any link re-training. The SETCRTC ioctl does not define whether an update does need a full modeset or just a plane update, hence we’re allowed to do that. See also drm_connector_set_link_status_property().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(h8Returns 0 on success, negative errno numbers on failure.h]h8Returns 0 on success, negative errno numbers on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_helper_disable_all (C function)c.drm_atomic_helper_disable_allhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h_int drm_atomic_helper_disable_all (struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx)h]j)}(h^int drm_atomic_helper_disable_all(struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjޝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڝhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڝhhhjhM ubj)}(hdrm_atomic_helper_disable_allh]j)}(hdrm_atomic_helper_disable_allh]hdrm_atomic_helper_disable_all}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjڝhhhjhM ubj)}(h=(struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j%)}jjsbc.drm_atomic_helper_disable_allasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.drm_atomic_helper_disable_allasbuh1hhjubj)}(h h]h }(hjɞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjמhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjڝhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj֝hhhjhM ubah}(h]jѝah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjӝhhubj)}(hhh]h)}(h$disable all currently active outputsh]h$disable all currently active outputs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj hhubah}(h]h ]h"]h$]h&]uh1jhjӝhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhj<hNhNubj)}(hXF**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context **Description** Loops through all connectors, finding those that aren't turned off and then turns them off by setting their DPMS mode to OFF and deactivating the CRTC that they are connected to. This is used for example in suspend/resume to disable all currently active functions when suspending. If you just want to shut down everything at e.g. driver unload, look at drm_atomic_helper_shutdown(). Note that if callers haven't already acquired all modeset locks this might return -EDEADLK, which must be handled by calling drm_modeset_backoff(). See also: drm_atomic_helper_suspend(), drm_atomic_helper_resume() and drm_atomic_helper_shutdown(). **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjOh]hstruct drm_device *dev}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjIubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhM hjFubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjFubeh}(h]h ]h"]h$]h&]uh1jhhj*ubh)}(h**Description**h]j%)}(hjßh]h Description}(hjşhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubh)}(hLoops through all connectors, finding those that aren't turned off and then turns them off by setting their DPMS mode to OFF and deactivating the CRTC that they are connected to.h]hLoops through all connectors, finding those that aren’t turned off and then turns them off by setting their DPMS mode to OFF and deactivating the CRTC that they are connected to.}(hjٟhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubh)}(hThis is used for example in suspend/resume to disable all currently active functions when suspending. If you just want to shut down everything at e.g. driver unload, look at drm_atomic_helper_shutdown().h]hThis is used for example in suspend/resume to disable all currently active functions when suspending. If you just want to shut down everything at e.g. driver unload, look at drm_atomic_helper_shutdown().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubh)}(hNote that if callers haven't already acquired all modeset locks this might return -EDEADLK, which must be handled by calling drm_modeset_backoff().h]hNote that if callers haven’t already acquired all modeset locks this might return -EDEADLK, which must be handled by calling drm_modeset_backoff().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubh)}(hcSee also: drm_atomic_helper_suspend(), drm_atomic_helper_resume() and drm_atomic_helper_shutdown().h]hcSee also: drm_atomic_helper_suspend(), drm_atomic_helper_resume() and drm_atomic_helper_shutdown().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_atomic_helper_reset_crtc (C function)c.drm_atomic_helper_reset_crtchNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h]int drm_atomic_helper_reset_crtc (struct drm_crtc *crtc, struct drm_modeset_acquire_ctx *ctx)h]j)}(h\int drm_atomic_helper_reset_crtc(struct drm_crtc *crtc, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM[ ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjjhM[ ubj)}(hdrm_atomic_helper_reset_crtch]j)}(hdrm_atomic_helper_reset_crtch]hdrm_atomic_helper_reset_crtc}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXhhhjjhM[ ubj)}(h<(struct drm_crtc *crtc, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_atomic_helper_reset_crtcasbuh1hhjubj)}(h h]h }(hjנhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]jӠc.drm_atomic_helper_reset_crtcasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjXhhhjjhM[ ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjThhhjjhM[ ubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jhjjhM[ hjQhhubj)}(hhh]h)}(h"reset the active outputs of a CRTCh]h"reset the active outputs of a CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chML hjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhM[ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX4**Parameters** ``struct drm_crtc *crtc`` DRM CRTC ``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context **Description** Reset the active outputs by indicating that connectors have changed. This implies a reset of all active components available between the CRTC and connectors. **NOTE** This relies on resetting :c:type:`drm_crtc_state.connectors_changed `. For drivers which optimize out unnecessary modesets this will result in a no-op commit, achieving nothing. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMP hjubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` DRM CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj͡h]hstruct drm_crtc *crtc}(hjϡhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjˡubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMM hjǡubj)}(hhh]h)}(hDRM CRTCh]hDRM CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMM hjubah}(h]h ]h"]h$]h&]uh1jhjǡubeh}(h]h ]h"]h$]h&]uh1jmhjhMM hjġubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMN hjubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMN hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMN hjġubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMP hjubh)}(hReset the active outputs by indicating that connectors have changed. This implies a reset of all active components available between the CRTC and connectors.h]hReset the active outputs by indicating that connectors have changed. This implies a reset of all active components available between the CRTC and connectors.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMP hjubh)}(h**NOTE**h]j%)}(hjhh]hNOTE}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMT hjubh)}(hThis relies on resetting :c:type:`drm_crtc_state.connectors_changed `. For drivers which optimize out unnecessary modesets this will result in a no-op commit, achieving nothing.h](hThis relies on resetting }(hj~hhhNhNubh)}(h<:c:type:`drm_crtc_state.connectors_changed `h]jz)}(hjh]h!drm_crtc_state.connectors_changed}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMT hj~ubhl. For drivers which optimize out unnecessary modesets this will result in a no-op commit, achieving nothing.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMT hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMX hjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjȢhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMX hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_atomic_helper_shutdown (C function)c.drm_atomic_helper_shutdownhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(h8void drm_atomic_helper_shutdown (struct drm_device *dev)h]j)}(h7void drm_atomic_helper_shutdown(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_atomic_helper_shutdownh]j)}(hdrm_atomic_helper_shutdownh]hdrm_atomic_helper_shutdown}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j%)}jjsbc.drm_atomic_helper_shutdownasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hshutdown all CRTCh]hshutdown all CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMy hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjϣjjϣjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device **Description** This shuts down all CRTC, which is useful for driver unloading. Shutdown on suspend should instead be handled with drm_atomic_helper_suspend(), since that also takes a snapshot of the modeset state to be restored on resume. This is just a convenience wrapper around drm_atomic_helper_disable_all(), and it is the atomic version of drm_helper_force_disable_all().h](h)}(h**Parameters**h]j%)}(hj٣h]h Parameters}(hjۣhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjףubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM} hjӣubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMz hjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMz hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMz hjubah}(h]h ]h"]h$]h&]uh1jhhjӣubh)}(h**Description**h]j%)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM| hjӣubh)}(hThis shuts down all CRTC, which is useful for driver unloading. Shutdown on suspend should instead be handled with drm_atomic_helper_suspend(), since that also takes a snapshot of the modeset state to be restored on resume.h]hThis shuts down all CRTC, which is useful for driver unloading. Shutdown on suspend should instead be handled with drm_atomic_helper_suspend(), since that also takes a snapshot of the modeset state to be restored on resume.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM| hjӣubh)}(hThis is just a convenience wrapper around drm_atomic_helper_disable_all(), and it is the atomic version of drm_helper_force_disable_all().h]hThis is just a convenience wrapper around drm_atomic_helper_disable_all(), and it is the atomic version of drm_helper_force_disable_all().}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjӣubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_helper_duplicate_state (C function)#c.drm_atomic_helper_duplicate_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hystruct drm_atomic_state * drm_atomic_helper_duplicate_state (struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx)h]j)}(hwstruct drm_atomic_state *drm_atomic_helper_duplicate_state(struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j!drm_atomic_helper_duplicate_statesb#c.drm_atomic_helper_duplicate_stateasbuh1hhjhhhjhM ubj)}(h h]h }(hjǤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj9)}(hj9h]h*}(hjդhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM ubj)}(h!drm_atomic_helper_duplicate_stateh]j)}(hjĤh]h!drm_atomic_helper_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h=(struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j¤#c.drm_atomic_helper_duplicate_stateasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j¤#c.drm_atomic_helper_duplicate_stateasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hctxh]hctx}(hjȥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1jhjhM hj|hhubj)}(hhh]h)}(h duplicate an atomic state objecth]h duplicate an atomic state object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context **Description** Makes a copy of the current atomic state by looping over all objects and duplicating their respective states. This is used for example by suspend/ resume support code to save the state prior to suspend such that it can be restored upon resume. Note that this treats atomic state as persistent between save and restore. Drivers must make sure that this is possible and won't result in confusion or erroneous behaviour. Note that if callers haven't already acquired all modeset locks this might return -EDEADLK, which must be handled by calling drm_modeset_backoff(). See also: drm_atomic_helper_suspend(), drm_atomic_helper_resume() **Return** A pointer to the copy of the atomic state object on success or an ERR_PTR()-encoded error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj3h]hstruct drm_device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj-ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhM hj*ubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjlh]h#struct drm_modeset_acquire_ctx *ctx}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjfubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj*ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hMakes a copy of the current atomic state by looping over all objects and duplicating their respective states. This is used for example by suspend/ resume support code to save the state prior to suspend such that it can be restored upon resume.h]hMakes a copy of the current atomic state by looping over all objects and duplicating their respective states. This is used for example by suspend/ resume support code to save the state prior to suspend such that it can be restored upon resume.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hNote that this treats atomic state as persistent between save and restore. Drivers must make sure that this is possible and won't result in confusion or erroneous behaviour.h]hNote that this treats atomic state as persistent between save and restore. Drivers must make sure that this is possible and won’t result in confusion or erroneous behaviour.}(hj̦hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hNote that if callers haven't already acquired all modeset locks this might return -EDEADLK, which must be handled by calling drm_modeset_backoff().h]hNote that if callers haven’t already acquired all modeset locks this might return -EDEADLK, which must be handled by calling drm_modeset_backoff().}(hjۦhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hASee also: drm_atomic_helper_suspend(), drm_atomic_helper_resume()h]hASee also: drm_atomic_helper_suspend(), drm_atomic_helper_resume()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hjA pointer to the copy of the atomic state object on success or an ERR_PTR()-encoded error code on failure.h]hjA pointer to the copy of the atomic state object on success or an ERR_PTR()-encoded error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_atomic_helper_suspend (C function)c.drm_atomic_helper_suspendhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hLstruct drm_atomic_state * drm_atomic_helper_suspend (struct drm_device *dev)h]j)}(hJstruct drm_atomic_state *drm_atomic_helper_suspend(struct drm_device *dev)h](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhMubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j%)}jdrm_atomic_helper_suspendsbc.drm_atomic_helper_suspendasbuh1hhj<hhhjMhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<hhhjMhMubj)}(hdrm_atomic_helper_suspendh]j)}(hj}h]hdrm_atomic_helper_suspend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhjMhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjǧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjاhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjէubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjڧmodnameN classnameNjj)}j]j{c.drm_atomic_helper_suspendasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj<hhhjMhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhjMhMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jhjMhMhj5hhubj)}(hhh]h)}(hsubsystem-level suspend helperh]hsubsystem-level suspend helper}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hj8hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhj<hNhNubj)}(hX,**Parameters** ``struct drm_device *dev`` DRM device **Description** Duplicates the current atomic state, disables all active outputs and then returns a pointer to the original atomic state to the caller. Drivers can pass this pointer to the drm_atomic_helper_resume() helper upon resume to restore the output configuration that was active at the time the system entered suspend. Note that it is potentially unsafe to use this. The atomic state object returned by this function is assumed to be persistent. Drivers must ensure that this holds true. Before calling this function, drivers must make sure to suspend fbdev emulation so that nothing can be using the device. See also: drm_atomic_helper_duplicate_state(), drm_atomic_helper_disable_all(), drm_atomic_helper_resume(), drm_atomic_helper_commit_duplicated_state() **Return** A pointer to a copy of the state before suspend on success or an ERR_PTR()- encoded error code on failure. Drivers should store the returned atomic state object and pass it to the drm_atomic_helper_resume() helper upon resume.h](h)}(h**Parameters**h]j%)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjWubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj|h]hstruct drm_device *dev}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjvubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjsubah}(h]h ]h"]h$]h&]uh1jhhjWubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjWubh)}(hX6Duplicates the current atomic state, disables all active outputs and then returns a pointer to the original atomic state to the caller. Drivers can pass this pointer to the drm_atomic_helper_resume() helper upon resume to restore the output configuration that was active at the time the system entered suspend.h]hX6Duplicates the current atomic state, disables all active outputs and then returns a pointer to the original atomic state to the caller. Drivers can pass this pointer to the drm_atomic_helper_resume() helper upon resume to restore the output configuration that was active at the time the system entered suspend.}(hjͨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjWubh)}(hX!Note that it is potentially unsafe to use this. The atomic state object returned by this function is assumed to be persistent. Drivers must ensure that this holds true. Before calling this function, drivers must make sure to suspend fbdev emulation so that nothing can be using the device.h]hX!Note that it is potentially unsafe to use this. The atomic state object returned by this function is assumed to be persistent. Drivers must ensure that this holds true. Before calling this function, drivers must make sure to suspend fbdev emulation so that nothing can be using the device.}(hjܨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjWubh)}(hSee also: drm_atomic_helper_duplicate_state(), drm_atomic_helper_disable_all(), drm_atomic_helper_resume(), drm_atomic_helper_commit_duplicated_state()h]hSee also: drm_atomic_helper_duplicate_state(), drm_atomic_helper_disable_all(), drm_atomic_helper_resume(), drm_atomic_helper_commit_duplicated_state()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjWubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjWubh)}(hA pointer to a copy of the state before suspend on success or an ERR_PTR()- encoded error code on failure. Drivers should store the returned atomic state object and pass it to the drm_atomic_helper_resume() helper upon resume.h]hA pointer to a copy of the state before suspend on success or an ERR_PTR()- encoded error code on failure. Drivers should store the returned atomic state object and pass it to the drm_atomic_helper_resume() helper upon resume.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_atomic_helper_commit_duplicated_state (C function)+c.drm_atomic_helper_commit_duplicated_statehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hsint drm_atomic_helper_commit_duplicated_state (struct drm_atomic_state *state, struct drm_modeset_acquire_ctx *ctx)h]j)}(hrint drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM6ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhM6ubj)}(h)drm_atomic_helper_commit_duplicated_stateh]j)}(h)drm_atomic_helper_commit_duplicated_stateh]h)drm_atomic_helper_commit_duplicated_state}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhM6ubj)}(hE(struct drm_atomic_state *state, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjdsb+c.drm_atomic_helper_commit_duplicated_stateasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjʩhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hstateh]hstate}(hjשhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j+c.drm_atomic_helper_commit_duplicated_stateasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhM6ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhM6ubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhM6hj6hhubj)}(hhh]h)}(hcommit duplicated stateh]hcommit duplicated state}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM(hjnhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` duplicated atomic state to commit ``struct drm_modeset_acquire_ctx *ctx`` pointer to acquire_ctx to use for commit. **Description** The state returned by drm_atomic_helper_duplicate_state() and drm_atomic_helper_suspend() is partially invalid, and needs to be fixed up before commit. See also: drm_atomic_helper_suspend() **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM,hjubji)}(hhh](jn)}(hE``struct drm_atomic_state *state`` duplicated atomic state to commit h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjh]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM)hjubj)}(hhh]h)}(h!duplicated atomic state to commith]h!duplicated atomic state to commit}(hj˪hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǪhM)hjȪubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjǪhM)hjubjn)}(hR``struct drm_modeset_acquire_ctx *ctx`` pointer to acquire_ctx to use for commit. h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM*hjubj)}(hhh]h)}(h)pointer to acquire_ctx to use for commit.h]h)pointer to acquire_ctx to use for commit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM*hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM,hjubh)}(hThe state returned by drm_atomic_helper_duplicate_state() and drm_atomic_helper_suspend() is partially invalid, and needs to be fixed up before commit.h]hThe state returned by drm_atomic_helper_duplicate_state() and drm_atomic_helper_suspend() is partially invalid, and needs to be fixed up before commit.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM,hjubh)}(h%See also: drm_atomic_helper_suspend()h]h%See also: drm_atomic_helper_suspend()}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM0hjubh)}(h **Return**h]j%)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM3hjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_atomic_helper_resume (C function)c.drm_atomic_helper_resumehNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hUint drm_atomic_helper_resume (struct drm_device *dev, struct drm_atomic_state *state)h]j)}(hTint drm_atomic_helper_resume(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMdubj)}(hdrm_atomic_helper_resumeh]j)}(hdrm_atomic_helper_resumeh]hdrm_atomic_helper_resume}(hj«hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMdubj)}(h8(struct drm_device *dev, struct drm_atomic_state *state)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjޫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjګubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjګubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjīsbc.drm_atomic_helper_resumeasbuh1hhjګubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjګubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjګubj)}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjګubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj֫ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]jc.drm_atomic_helper_resumeasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj֫ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMdhjhhubj)}(hhh]h)}(hsubsystem-level resume helperh]hsubsystem-level resume helper}(hjѬhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMUhjάhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX **Parameters** ``struct drm_device *dev`` DRM device ``struct drm_atomic_state *state`` atomic state to resume to **Description** Calls drm_mode_config_reset() to synchronize hardware and software states, grabs all modeset locks and commits the atomic state object. This can be used in conjunction with the drm_atomic_helper_suspend() helper to implement suspend/resume for drivers that support atomic mode-setting. See also: drm_atomic_helper_suspend() **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMYhjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMVhj ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMVhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMVhj ubjn)}(h=``struct drm_atomic_state *state`` atomic state to resume to h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjKh]hstruct drm_atomic_state *state}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMWhjEubj)}(hhh]h)}(hatomic state to resume toh]hatomic state to resume to}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMWhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hMWhj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMYhjubh)}(hXCalls drm_mode_config_reset() to synchronize hardware and software states, grabs all modeset locks and commits the atomic state object. This can be used in conjunction with the drm_atomic_helper_suspend() helper to implement suspend/resume for drivers that support atomic mode-setting.h]hXCalls drm_mode_config_reset() to synchronize hardware and software states, grabs all modeset locks and commits the atomic state object. This can be used in conjunction with the drm_atomic_helper_suspend() helper to implement suspend/resume for drivers that support atomic mode-setting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMYhjubh)}(h%See also: drm_atomic_helper_suspend()h]h%See also: drm_atomic_helper_suspend()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM^hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMahjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjҭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_atomic_helper_page_flip (C function)c.drm_atomic_helper_page_fliphNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hint drm_atomic_helper_page_flip (struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t flags, struct drm_modeset_acquire_ctx *ctx)h]j)}(hint drm_atomic_helper_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t flags, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_atomic_helper_page_fliph]j)}(hdrm_atomic_helper_page_fliph]hdrm_atomic_helper_page_flip}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t flags, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j%)}jj$sbc.drm_atomic_helper_page_flipasbuh1hhj:ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjήhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˮubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjЮmodnameN classnameNjj)}j]jxc.drm_atomic_helper_page_flipasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(h&struct drm_pending_vblank_event *eventh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_pending_vblank_eventh]hdrm_pending_vblank_event}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]jxc.drm_atomic_helper_page_flipasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heventh]hevent}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(huint32_t flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jxc.drm_atomic_helper_page_flipasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjدhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԯubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԯubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jxc.drm_atomic_helper_page_flipasbuh1hhjԯubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԯubj9)}(hj9h]h*}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjԯubj)}(hctxh]hctx}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԯubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hexecute a legacy page fliph]hexecute a legacy page flip}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhj<hNhNubj)}(hXF**Parameters** ``struct drm_crtc *crtc`` DRM CRTC ``struct drm_framebuffer *fb`` DRM framebuffer ``struct drm_pending_vblank_event *event`` optional DRM event to signal upon completion ``uint32_t flags`` flip flags for non-vblank sync'ed updates ``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context **Description** Provides a default :c:type:`drm_crtc_funcs.page_flip ` implementation using the atomic driver interface. See also: drm_atomic_helper_page_flip_target() **Return** Returns 0 on success, negative errno numbers on failure.h](h)}(h**Parameters**h]j%)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` DRM CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubj)}(hhh]h)}(hDRM CRTCh]hDRM CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h/``struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjӰh]hstruct drm_framebuffer *fb}(hjհhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjѰubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjͰubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjͰubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hX``struct drm_pending_vblank_event *event`` optional DRM event to signal upon completion h](jt)}(h*``struct drm_pending_vblank_event *event``h]jz)}(hj h]h&struct drm_pending_vblank_event *event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubj)}(hhh]h)}(h,optional DRM event to signal upon completionh]h,optional DRM event to signal upon completion}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjubjn)}(h=``uint32_t flags`` flip flags for non-vblank sync'ed updates h](jt)}(h``uint32_t flags``h]jz)}(hjEh]huint32_t flags}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj?ubj)}(hhh]h)}(h)flip flags for non-vblank sync'ed updatesh]h+flip flags for non-vblank sync’ed updates}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhjubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hj~h]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjxubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjuubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(hxProvides a default :c:type:`drm_crtc_funcs.page_flip ` implementation using the atomic driver interface.h](hProvides a default }(hjϱhhhNhNubh)}(h3:c:type:`drm_crtc_funcs.page_flip `h]jz)}(hjٱh]hdrm_crtc_funcs.page_flip}(hj۱hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjױubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjϱubh2 implementation using the atomic driver interface.}(hjϱhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjuubh)}(h.See also: drm_atomic_helper_page_flip_target()h]h.See also: drm_atomic_helper_page_flip_target()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubh)}(h8Returns 0 on success, negative errno numbers on failure.h]h8Returns 0 on success, negative errno numbers on failure.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_atomic_helper_page_flip_target (C function)$c.drm_atomic_helper_page_flip_targethNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hint drm_atomic_helper_page_flip_target (struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t flags, uint32_t target, struct drm_modeset_acquire_ctx *ctx)h]j)}(hint drm_atomic_helper_page_flip_target(struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t flags, uint32_t target, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjehMubj)}(h"drm_atomic_helper_page_flip_targeth]j)}(h"drm_atomic_helper_page_flip_targeth]h"drm_atomic_helper_page_flip_target}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjehMubj)}(h(struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t flags, uint32_t target, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjzsb$c.drm_atomic_helper_page_flip_targetasbuh1hhjubj)}(h h]h }(hjҲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]jβ$c.drm_atomic_helper_page_flip_targetasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&struct drm_pending_vblank_event *eventh](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hdrm_pending_vblank_eventh]hdrm_pending_vblank_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jβ$c.drm_atomic_helper_page_flip_targetasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(heventh]hevent}(hjͳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t flagsh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jβ$c.drm_atomic_helper_page_flip_targetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t targeth](h)}(hhh]j)}(huint32_th]huint32_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jβ$c.drm_atomic_helper_page_flip_targetasbuh1hhj*ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(htargeth]htarget}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jβ$c.drm_atomic_helper_page_flip_targetasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(hctxh]hctx}(hjʹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhjehMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjehMubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jhjehMhjLhhubj)}(hhh]h)}(h%do page flip on target vblank period.h]h%do page flip on target vblank period.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_crtc *crtc`` DRM CRTC ``struct drm_framebuffer *fb`` DRM framebuffer ``struct drm_pending_vblank_event *event`` optional DRM event to signal upon completion ``uint32_t flags`` flip flags for non-vblank sync'ed updates ``uint32_t target`` specifying the target vblank period when the flip to take effect ``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context **Description** Provides a default :c:type:`drm_crtc_funcs.page_flip_target ` implementation. Similar to drm_atomic_helper_page_flip() with extra parameter to specify target vblank period to flip. **Return** Returns 0 on success, negative errno numbers on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` DRM CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj8h]hstruct drm_crtc *crtc}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj2ubj)}(hhh]h)}(hDRM CRTCh]hDRM CRTC}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhj/ubjn)}(h/``struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjqh]hstruct drm_framebuffer *fb}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjkubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj/ubjn)}(hX``struct drm_pending_vblank_event *event`` optional DRM event to signal upon completion h](jt)}(h*``struct drm_pending_vblank_event *event``h]jz)}(hjh]h&struct drm_pending_vblank_event *event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubj)}(hhh]h)}(h,optional DRM event to signal upon completionh]h,optional DRM event to signal upon completion}(hjõhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj/ubjn)}(h=``uint32_t flags`` flip flags for non-vblank sync'ed updates h](jt)}(h``uint32_t flags``h]jz)}(hjh]huint32_t flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjݵubj)}(hhh]h)}(h)flip flags for non-vblank sync'ed updatesh]h+flip flags for non-vblank sync’ed updates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjݵubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj/ubjn)}(hU``uint32_t target`` specifying the target vblank period when the flip to take effect h](jt)}(h``uint32_t target``h]jz)}(hjh]huint32_t target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubj)}(hhh]h)}(h@specifying the target vblank period when the flip to take effecth]h@specifying the target vblank period when the flip to take effect}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hMhj/ubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjUh]h#struct drm_modeset_acquire_ctx *ctx}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjOubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(hProvides a default :c:type:`drm_crtc_funcs.page_flip_target ` implementation. Similar to drm_atomic_helper_page_flip() with extra parameter to specify target vblank period to flip.h](hProvides a default }(hjhhhNhNubh)}(h::c:type:`drm_crtc_funcs.page_flip_target `h]jz)}(hjh]hdrm_crtc_funcs.page_flip_target}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubhw implementation. Similar to drm_atomic_helper_page_flip() with extra parameter to specify target vblank period to flip.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjͶhMhjubh)}(h **Return**h]j%)}(hjڶh]hReturn}(hjܶhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjضubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(h8Returns 0 on success, negative errno numbers on failure.h]h8Returns 0 on success, negative errno numbers on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j7drm_atomic_helper_bridge_propagate_bus_fmt (C function),c.drm_atomic_helper_bridge_propagate_bus_fmthNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hu32 * drm_atomic_helper_bridge_propagate_bus_fmt (struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state, u32 output_fmt, unsigned int *num_input_fmts)h]j)}(hu32 *drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state, u32 output_fmt, unsigned int *num_input_fmts)h](h)}(hhh]j)}(hu32h]hu32}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j%)}j*drm_atomic_helper_bridge_propagate_bus_fmtsb,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjChMubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjChMubj)}(h*drm_atomic_helper_bridge_propagate_bus_fmth]j)}(hj@h]h*drm_atomic_helper_bridge_propagate_bus_fmt}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjChMubj)}(h(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state, u32 output_fmt, unsigned int *num_input_fmts)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjȷhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hbridgeh]hbridge}(hjշhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h%struct drm_bridge_state *bridge_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h bridge_stateh]h bridge_state}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h!struct drm_crtc_state *crtc_stateh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j>,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(h crtc_stateh]h crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h&struct drm_connector_state *conn_stateh](j)}(hjh]hstruct}(hjθhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʸubj)}(h h]h }(hj۸hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʸubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjʸubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʸubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjʸubj)}(h conn_stateh]h conn_state}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʸubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu32 output_fmth](h)}(hhh]j)}(hu32h]hu32}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j>,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhj:ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h output_fmth]h output_fmt}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hunsigned int *num_input_fmtsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnum_input_fmtsh]hnum_input_fmts}(hj˹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjChMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjChMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjChMhjhhubj)}(hhh]h)}(h4Propagate output format to the input end of a bridgeh]h4Propagate output format to the input end of a bridge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj<hNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_bridge_state *bridge_state`` new bridge state ``struct drm_crtc_state *crtc_state`` new CRTC state ``struct drm_connector_state *conn_state`` new connector state ``u32 output_fmt`` tested output bus format ``unsigned int *num_input_fmts`` will contain the size of the returned array **Description** This helper is a pluggable implementation of the :c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts ` operation for bridges that don't modify the bus configuration between their input and their output. It returns an array of input formats with a single element set to **output_fmt**. **Return** a valid format array of size **num_input_fmts**, or NULL if the allocation failedh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj6h]hstruct drm_bridge *bridge}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhj0ubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhMhj-ubjn)}(h;``struct drm_bridge_state *bridge_state`` new bridge state h](jt)}(h)``struct drm_bridge_state *bridge_state``h]jz)}(hjoh]h%struct drm_bridge_state *bridge_state}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjiubj)}(hhh]h)}(hnew bridge stateh]hnew bridge state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj-ubjn)}(h5``struct drm_crtc_state *crtc_state`` new CRTC state h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjh]h!struct drm_crtc_state *crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubj)}(hhh]h)}(hnew CRTC stateh]hnew CRTC state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj-ubjn)}(h?``struct drm_connector_state *conn_state`` new connector state h](jt)}(h*``struct drm_connector_state *conn_state``h]jz)}(hjh]h&struct drm_connector_state *conn_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjߺubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjۺubj)}(hhh]h)}(hnew connector stateh]hnew connector state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjۺubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj-ubjn)}(h,``u32 output_fmt`` tested output bus format h](jt)}(h``u32 output_fmt``h]jz)}(hjh]hu32 output_fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubj)}(hhh]h)}(htested output bus formath]htested output bus format}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhj-ubjn)}(hM``unsigned int *num_input_fmts`` will contain the size of the returned array h](jt)}(h ``unsigned int *num_input_fmts``h]jz)}(hjSh]hunsigned int *num_input_fmts}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjMubj)}(hhh]h)}(h+will contain the size of the returned arrayh]h+will contain the size of the returned array}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(hX.This helper is a pluggable implementation of the :c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts ` operation for bridges that don't modify the bus configuration between their input and their output. It returns an array of input formats with a single element set to **output_fmt**.h](h1This helper is a pluggable implementation of the }(hjhhhNhNubh)}(hG:c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts `h]jz)}(hjh]h*drm_bridge_funcs.atomic_get_input_bus_fmts}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh operation for bridges that don’t modify the bus configuration between their input and their output. It returns an array of input formats with a single element set to }(hjhhhNhNubj%)}(h**output_fmt**h]h output_fmt}(hjлhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj˻hMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubh)}(hQa valid format array of size **num_input_fmts**, or NULL if the allocation failedh](ha valid format array of size }(hjhhhNhNubj%)}(h**num_input_fmts**h]hnum_input_fmts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh", or NULL if the allocation failed}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubeh}(h]helper-functions-referenceah ]h"]helper functions referenceah$]h&]uh1hhj:hhhhhK?ubh)}(hhh](h)}(h%Atomic State Reset and Initializationh]h%Atomic State Reset and Initialization}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhKHubh)}(hXsBoth the drm core and the atomic helpers assume that there is always the full and correct atomic software state for all connectors, CRTCs and planes available. Which is a bit a problem on driver load and also after system suspend. One way to solve this is to have a hardware state read-out infrastructure which reconstructs the full software state (e.g. the i915 driver).h]hXsBoth the drm core and the atomic helpers assume that there is always the full and correct atomic software state for all connectors, CRTCs and planes available. Which is a bit a problem on driver load and also after system suspend. One way to solve this is to have a hardware state read-out infrastructure which reconstructs the full software state (e.g. the i915 driver).}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:74: ./drivers/gpu/drm/drm_atomic_state_helper.chK,hj0hhubh)}(hThe simpler solution is to just reset the software state to everything off, which is easiest to do by calling drm_mode_config_reset(). To facilitate this the atomic helpers provide default reset implementations for all hooks.h]hThe simpler solution is to just reset the software state to everything off, which is easiest to do by calling drm_mode_config_reset(). To facilitate this the atomic helpers provide default reset implementations for all hooks.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:74: ./drivers/gpu/drm/drm_atomic_state_helper.chK3hj0hhubh)}(hXHOn the upside the precise state tracking of atomic simplifies system suspend and resume a lot. For drivers using drm_mode_config_reset() a complete recipe is implemented in drm_atomic_helper_suspend() and drm_atomic_helper_resume(). For other drivers the building blocks are split out, see the documentation for these functions.h]hXHOn the upside the precise state tracking of atomic simplifies system suspend and resume a lot. For drivers using drm_mode_config_reset() a complete recipe is implemented in drm_atomic_helper_suspend() and drm_atomic_helper_resume(). For other drivers the building blocks are split out, see the documentation for these functions.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:74: ./drivers/gpu/drm/drm_atomic_state_helper.chK7hj0hhubeh}(h]%atomic-state-reset-and-initializationah ]h"]%atomic state reset and initializationah$]h&]uh1hhj:hhhhhKHubh)}(hhh](h)}(hAtomic State Helper Referenceh]hAtomic State Helper Reference}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhhhhhKNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1__drm_atomic_helper_crtc_state_reset (C function)&c.__drm_atomic_helper_crtc_state_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hdvoid __drm_atomic_helper_crtc_state_reset (struct drm_crtc_state *crtc_state, struct drm_crtc *crtc)h]j)}(hcvoid __drm_atomic_helper_crtc_state_reset(struct drm_crtc_state *crtc_state, struct drm_crtc *crtc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKHubj)}(h$__drm_atomic_helper_crtc_state_reseth]j)}(h$__drm_atomic_helper_crtc_state_reseth]h$__drm_atomic_helper_crtc_state_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKHubj)}(h:(struct drm_crtc_state *crtc_state, struct drm_crtc *crtc)h](j)}(h!struct drm_crtc_state *crtc_stateh](j)}(hjh]hstruct}(hjݼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjټubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjټubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjüsb&c.__drm_atomic_helper_crtc_state_resetasbuh1hhjټubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjټubj9)}(hj9h]h*}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjټubj)}(h crtc_stateh]h crtc_state}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjټubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjռubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j&c.__drm_atomic_helper_crtc_state_resetasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjռubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKHubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKHhjhhubj)}(hhh]h)}(hreset the CRTC stateh]hreset the CRTC state}(hjнhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKAhjͽhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX%**Parameters** ``struct drm_crtc_state *crtc_state`` atomic CRTC state, must not be NULL ``struct drm_crtc *crtc`` CRTC object, must not be NULL **Description** Initializes the newly allocated **crtc_state** with default values. This is useful for drivers that subclass the CRTC state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKEhjubji)}(hhh](jn)}(hJ``struct drm_crtc_state *crtc_state`` atomic CRTC state, must not be NULL h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjh]h!struct drm_crtc_state *crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKBhj ubj)}(hhh]h)}(h#atomic CRTC state, must not be NULLh]h#atomic CRTC state, must not be NULL}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKBhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj&hKBhjubjn)}(h8``struct drm_crtc *crtc`` CRTC object, must not be NULL h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjJh]hstruct drm_crtc *crtc}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKChjDubj)}(hhh]h)}(hCRTC object, must not be NULLh]hCRTC object, must not be NULL}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKChj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhj_hKChjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKEhjubh)}(h|Initializes the newly allocated **crtc_state** with default values. This is useful for drivers that subclass the CRTC state.h](h Initializes the newly allocated }(hjhhhNhNubj%)}(h**crtc_state**h]h crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhN with default values. This is useful for drivers that subclass the CRTC state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+__drm_atomic_helper_crtc_reset (C function) c.__drm_atomic_helper_crtc_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(h^void __drm_atomic_helper_crtc_reset (struct drm_crtc *crtc, struct drm_crtc_state *crtc_state)h]j)}(h]void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state)h](j)}(hvoidh]hvoid}(hjܾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؾhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chK\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؾhhhjhK\ubj)}(h__drm_atomic_helper_crtc_reseth]j)}(h__drm_atomic_helper_crtc_reseth]h__drm_atomic_helper_crtc_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjؾhhhjhK\ubj)}(h:(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j%)}jjsb c.__drm_atomic_helper_crtc_resetasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_crtc_state *crtc_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jS c.__drm_atomic_helper_crtc_resetasbuh1hhjubj)}(h h]h }(hjǿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjտhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h crtc_stateh]h crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjؾhhhjhK\ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjԾhhhjhK\ubah}(h]jϾah ](jjeh"]h$]h&]jj)jhuh1jhjhK\hjѾhhubj)}(hhh]h)}(hreset state on CRTCh]hreset state on CRTC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKQhj hhubah}(h]h ]h"]h$]h&]uh1jhjѾhhhjhK\ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_crtc *crtc`` drm CRTC ``struct drm_crtc_state *crtc_state`` CRTC state to assign **Description** Initializes the newly allocated **crtc_state** and assigns it to the :c:type:`drm_crtc->state ` pointer of **crtc**, usually required when initializing the drivers or when called from the :c:type:`drm_crtc_funcs.reset ` hook. This is useful for drivers that subclass the CRTC state.h](h)}(h**Parameters**h]j%)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKUhj(ubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` drm CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjMh]hstruct drm_crtc *crtc}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKRhjGubj)}(hhh]h)}(hdrm CRTCh]hdrm CRTC}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKRhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjbhKRhjDubjn)}(h;``struct drm_crtc_state *crtc_state`` CRTC state to assign h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjh]h!struct drm_crtc_state *crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKShjubj)}(hhh]h)}(hCRTC state to assignh]hCRTC state to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKShjDubeh}(h]h ]h"]h$]h&]uh1jhhj(ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKUhj(ubh)}(hInitializes the newly allocated **crtc_state** and assigns it to the :c:type:`drm_crtc->state ` pointer of **crtc**, usually required when initializing the drivers or when called from the :c:type:`drm_crtc_funcs.reset ` hook.h](h Initializes the newly allocated }(hjhhhNhNubj%)}(h**crtc_state**h]h crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and assigns it to the }(hjhhhNhNubh)}(h$:c:type:`drm_crtc->state `h]jz)}(hjh]hdrm_crtc->state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtcuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKUhjubh pointer of }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhI, usually required when initializing the drivers or when called from the }(hjhhhNhNubh)}(h/:c:type:`drm_crtc_funcs.reset `h]jz)}(hj)h]hdrm_crtc_funcs.reset}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjhKUhjubh hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKUhj(ubh)}(h8This is useful for drivers that subclass the CRTC state.h]h8This is useful for drivers that subclass the CRTC state.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKZhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_atomic_helper_crtc_reset (C function)c.drm_atomic_helper_crtc_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(h9void drm_atomic_helper_crtc_reset (struct drm_crtc *crtc)h]j)}(h8void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhKqubj)}(hdrm_atomic_helper_crtc_reseth]j)}(hdrm_atomic_helper_crtc_reseth]hdrm_atomic_helper_crtc_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhjhKqubj)}(h(struct drm_crtc *crtc)h]j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_atomic_helper_crtc_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhKqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwhhhjhKqubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhjhKqhjthhubj)}(hhh]h)}(hFdefault :c:type:`drm_crtc_funcs.reset ` hook for CRTCsh](hdefault }(hj?hhhNhNubh)}(h/:c:type:`drm_crtc_funcs.reset `h]jz)}(hjIh]hdrm_crtc_funcs.reset}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_atomic_helper_crtc_resetasbjdrm_crtc_funcsuh1hhjhKHhj?ubh hook for CRTCs}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKkhj<hhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_crtc *crtc`` drm CRTC **Description** Resets the atomic state for **crtc** by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKohjubji)}(hhh]jn)}(h#``struct drm_crtc *crtc`` drm CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKlhjubj)}(hhh]h)}(hdrm CRTCh]hdrm CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKlhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKnhjubh)}(hResets the atomic state for **crtc** by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.h](hResets the atomic state for }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhv by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5__drm_atomic_helper_crtc_duplicate_state (C function)*c.__drm_atomic_helper_crtc_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hcvoid __drm_atomic_helper_crtc_duplicate_state (struct drm_crtc *crtc, struct drm_crtc_state *state)h]j)}(hbvoid __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc, struct drm_crtc_state *state)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjHhKubj)}(h(__drm_atomic_helper_crtc_duplicate_stateh]j)}(h(__drm_atomic_helper_crtc_duplicate_stateh]h(__drm_atomic_helper_crtc_duplicate_state}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhjHhKubj)}(h5(struct drm_crtc *crtc, struct drm_crtc_state *state)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj]sb*c.__drm_atomic_helper_crtc_duplicate_stateasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubj)}(hstruct drm_crtc_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j*c.__drm_atomic_helper_crtc_duplicate_stateasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubeh}(h]h ]h"]h$]h&]jjuh1jhj6hhhjHhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj2hhhjHhKubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhjHhKhj/hhubj)}(hhh]h)}(hcopy atomic CRTC stateh]hcopy atomic CRTC state}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chK~hjghhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_crtc *crtc`` CRTC object ``struct drm_crtc_state *state`` atomic CRTC state **Description** Copies atomic state from a CRTC's current state and resets inferred values. This is useful for drivers that subclass the CRTC state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubji)}(hhh](jn)}(h&``struct drm_crtc *crtc`` CRTC object h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubj)}(hhh]h)}(h CRTC objecth]h CRTC object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h3``struct drm_crtc_state *state`` atomic CRTC state h](jt)}(h ``struct drm_crtc_state *state``h]jz)}(hjh]hstruct drm_crtc_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubj)}(hhh]h)}(hatomic CRTC stateh]hatomic CRTC state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubh)}(hCopies atomic state from a CRTC's current state and resets inferred values. This is useful for drivers that subclass the CRTC state.h]hCopies atomic state from a CRTC’s current state and resets inferred values. This is useful for drivers that subclass the CRTC state.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_atomic_helper_crtc_duplicate_state (C function)(c.drm_atomic_helper_crtc_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hVstruct drm_crtc_state * drm_atomic_helper_crtc_duplicate_state (struct drm_crtc *crtc)h]j)}(hTstruct drm_crtc_state *drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc)h](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjqhKubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j&drm_atomic_helper_crtc_duplicate_statesb(c.drm_atomic_helper_crtc_duplicate_stateasbuh1hhj`hhhjqhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjqhKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`hhhjqhKubj)}(h&drm_atomic_helper_crtc_duplicate_stateh]j)}(hjh]h&drm_atomic_helper_crtc_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhjqhKubj)}(h(struct drm_crtc *crtc)h]j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j(c.drm_atomic_helper_crtc_duplicate_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhjqhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhjqhKubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjqhKhjYhhubj)}(hhh]h)}(hdefault state duplicate hookh]hdefault state duplicate hook}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj\hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjqhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_crtc *crtc`` drm CRTC **Description** Default CRTC state duplicate hook for drivers which don't have their own subclassed CRTC state structure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj{ubji)}(hhh]jn)}(h#``struct drm_crtc *crtc`` drm CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubj)}(hhh]h)}(hdrm CRTCh]hdrm CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhj{ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj{ubh)}(hiDefault CRTC state duplicate hook for drivers which don't have their own subclassed CRTC state structure.h]hkDefault CRTC state duplicate hook for drivers which don’t have their own subclassed CRTC state structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3__drm_atomic_helper_crtc_destroy_state (C function)(c.__drm_atomic_helper_crtc_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hJvoid __drm_atomic_helper_crtc_destroy_state (struct drm_crtc_state *state)h]j)}(hIvoid __drm_atomic_helper_crtc_destroy_state(struct drm_crtc_state *state)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hKubj)}(h&__drm_atomic_helper_crtc_destroy_stateh]j)}(h&__drm_atomic_helper_crtc_destroy_stateh]h&__drm_atomic_helper_crtc_destroy_state}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hKubj)}(h(struct drm_crtc_state *state)h]j)}(hstruct drm_crtc_state *stateh](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjCsb(c.__drm_atomic_helper_crtc_destroy_stateasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hKhjhhubj)}(hhh]h)}(hrelease CRTC stateh]hrelease CRTC state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_crtc_state *state`` CRTC state object to release **Description** Releases all resources stored in the CRTC state without actually freeing the memory of the CRTC state. This is useful for drivers that subclass the CRTC state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubji)}(hhh]jn)}(h>``struct drm_crtc_state *state`` CRTC state object to release h](jt)}(h ``struct drm_crtc_state *state``h]jz)}(hj!h]hstruct drm_crtc_state *state}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubj)}(hhh]h)}(hCRTC state object to releaseh]hCRTC state object to release}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubh)}(hReleases all resources stored in the CRTC state without actually freeing the memory of the CRTC state. This is useful for drivers that subclass the CRTC state.h]hReleases all resources stored in the CRTC state without actually freeing the memory of the CRTC state. This is useful for drivers that subclass the CRTC state.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_helper_crtc_destroy_state (C function)&c.drm_atomic_helper_crtc_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(h_void drm_atomic_helper_crtc_destroy_state (struct drm_crtc *crtc, struct drm_crtc_state *state)h]j)}(h^void drm_atomic_helper_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h$drm_atomic_helper_crtc_destroy_stateh]j)}(h$drm_atomic_helper_crtc_destroy_stateh]h$drm_atomic_helper_crtc_destroy_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h5(struct drm_crtc *crtc, struct drm_crtc_state *state)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb&c.drm_atomic_helper_crtc_destroy_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_crtc_state *stateh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j&c.drm_atomic_helper_crtc_destroy_stateasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hdefault state destroy hookh]hdefault state destroy hook}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_crtc *crtc`` drm CRTC ``struct drm_crtc_state *state`` CRTC state object to release **Description** Default CRTC state destroy hook for drivers which don't have their own subclassed CRTC state structure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` drm CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj ubj)}(hhh]h)}(hdrm CRTCh]hdrm CRTC}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hKhj ubjn)}(h>``struct drm_crtc_state *state`` CRTC state object to release h](jt)}(h ``struct drm_crtc_state *state``h]jz)}(hjKh]hstruct drm_crtc_state *state}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjEubj)}(hhh]h)}(hCRTC state object to releaseh]hCRTC state object to release}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hKhj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubh)}(hgDefault CRTC state destroy hook for drivers which don't have their own subclassed CRTC state structure.h]hiDefault CRTC state destroy hook for drivers which don’t have their own subclassed CRTC state structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2__drm_atomic_helper_plane_state_reset (C function)'c.__drm_atomic_helper_plane_state_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hivoid __drm_atomic_helper_plane_state_reset (struct drm_plane_state *plane_state, struct drm_plane *plane)h]j)}(hhvoid __drm_atomic_helper_plane_state_reset(struct drm_plane_state *plane_state, struct drm_plane *plane)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h%__drm_atomic_helper_plane_state_reseth]j)}(h%__drm_atomic_helper_plane_state_reseth]h%__drm_atomic_helper_plane_state_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h>(struct drm_plane_state *plane_state, struct drm_plane *plane)h](j)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}jjsb'c.__drm_atomic_helper_plane_state_resetasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jB'c.__drm_atomic_helper_plane_state_resetasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h$resets plane state to default valuesh]h$resets plane state to default values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX,**Parameters** ``struct drm_plane_state *plane_state`` atomic plane state, must not be NULL ``struct drm_plane *plane`` plane object, must not be NULL **Description** Initializes the newly allocated **plane_state** with default values. This is useful for drivers that subclass the CRTC state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubji)}(hhh](jn)}(hM``struct drm_plane_state *plane_state`` atomic plane state, must not be NULL h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hj<h]h#struct drm_plane_state *plane_state}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj6ubj)}(hhh]h)}(h$atomic plane state, must not be NULLh]h$atomic plane state, must not be NULL}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhKhj3ubjn)}(h;``struct drm_plane *plane`` plane object, must not be NULL h](jt)}(h``struct drm_plane *plane``h]jz)}(hjuh]hstruct drm_plane *plane}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjoubj)}(hhh]h)}(hplane object, must not be NULLh]hplane object, must not be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj3ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubh)}(h}Initializes the newly allocated **plane_state** with default values. This is useful for drivers that subclass the CRTC state.h](h Initializes the newly allocated }(hjhhhNhNubj%)}(h**plane_state**h]h plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhN with default values. This is useful for drivers that subclass the CRTC state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,__drm_atomic_helper_plane_reset (C function)!c.__drm_atomic_helper_plane_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hcvoid __drm_atomic_helper_plane_reset (struct drm_plane *plane, struct drm_plane_state *plane_state)h]j)}(hbvoid __drm_atomic_helper_plane_reset(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM3ubj)}(h__drm_atomic_helper_plane_reseth]j)}(h__drm_atomic_helper_plane_reseth]h__drm_atomic_helper_plane_reset}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM3ubj)}(h>(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j%)}jj*sb!c.__drm_atomic_helper_plane_resetasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j~!c.__drm_atomic_helper_plane_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM3ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM3hjhhubj)}(hhh]h)}(hreset state on planeh]hreset state on plane}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM(hj4hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` drm plane ``struct drm_plane_state *plane_state`` plane state to assign **Description** Initializes the newly allocated **plane_state** and assigns it to the :c:type:`drm_crtc->state ` pointer of **plane**, usually required when initializing the drivers or when called from the :c:type:`drm_plane_funcs.reset ` hook. This is useful for drivers that subclass the plane state.h](h)}(h**Parameters**h]j%)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM,hjSubji)}(hhh](jn)}(h&``struct drm_plane *plane`` drm plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjxh]hstruct drm_plane *plane}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM)hjrubj)}(hhh]h)}(h drm planeh]h drm plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhM)hjoubjn)}(h>``struct drm_plane_state *plane_state`` plane state to assign h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM*hjubj)}(hhh]h)}(hplane state to assignh]hplane state to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM*hjoubeh}(h]h ]h"]h$]h&]uh1jhhjSubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM,hjSubh)}(hInitializes the newly allocated **plane_state** and assigns it to the :c:type:`drm_crtc->state ` pointer of **plane**, usually required when initializing the drivers or when called from the :c:type:`drm_plane_funcs.reset ` hook.h](h Initializes the newly allocated }(hjhhhNhNubj%)}(h**plane_state**h]h plane_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and assigns it to the }(hjhhhNhNubh)}(h$:c:type:`drm_crtc->state `h]jz)}(hjh]hdrm_crtc->state}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtcuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM,hjubh pointer of }(hjhhhNhNubj%)}(h **plane**h]hplane}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhI, usually required when initializing the drivers or when called from the }(hjhhhNhNubh)}(h1:c:type:`drm_plane_funcs.reset `h]jz)}(hjTh]hdrm_plane_funcs.reset}(hjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhj;hM,hjubh hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hM,hjSubh)}(h9This is useful for drivers that subclass the plane state.h]h9This is useful for drivers that subclass the plane state.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM1hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_helper_plane_reset (C function)c.drm_atomic_helper_plane_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(h` hook for planesh](hdefault }(hjjhhhNhNubh)}(h1:c:type:`drm_plane_funcs.reset `h]jz)}(hjth]hdrm_plane_funcs.reset}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j!c.drm_atomic_helper_plane_resetasbjdrm_plane_funcsuh1hhjhKHhjjubh hook for planes}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM>hjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_plane *plane`` drm plane **Description** Resets the atomic state for **plane** by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMBhjubji)}(hhh]jn)}(h&``struct drm_plane *plane`` drm plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM?hjubj)}(hhh]h)}(h drm planeh]h drm plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMAhjubh)}(hResets the atomic state for **plane** by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.h](hResets the atomic state for }(hj$hhhNhNubj%)}(h **plane**h]hplane}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubhv by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6__drm_atomic_helper_plane_duplicate_state (C function)+c.__drm_atomic_helper_plane_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hgvoid __drm_atomic_helper_plane_duplicate_state (struct drm_plane *plane, struct drm_plane_state *state)h]j)}(hfvoid __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane, struct drm_plane_state *state)h](j)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMXubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshMXubj)}(h)__drm_atomic_helper_plane_duplicate_stateh]j)}(h)__drm_atomic_helper_plane_duplicate_stateh]h)__drm_atomic_helper_plane_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjshMXubj)}(h8(struct drm_plane *plane, struct drm_plane_state *state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb+c.__drm_atomic_helper_plane_duplicate_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j+c.__drm_atomic_helper_plane_duplicate_stateasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjahhhjshMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj]hhhjshMXubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhjshMXhjZhhubj)}(hhh]h)}(hcopy atomic plane stateh]hcopy atomic plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_plane *plane`` plane object ``struct drm_plane_state *state`` atomic plane state **Description** Copies atomic state from a plane's current state. This is useful for drivers that subclass the plane state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMUhjubji)}(hhh](jn)}(h)``struct drm_plane *plane`` plane object h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMRhjubj)}(hhh]h)}(h plane objecth]h plane object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMRhjubjn)}(h5``struct drm_plane_state *state`` atomic plane state h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hjh]hstruct drm_plane_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMShj ubj)}(hhh]h)}(hatomic plane stateh]hatomic plane state}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMShj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMShjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMUhjubh)}(hkCopies atomic state from a plane's current state. This is useful for drivers that subclass the plane state.h]hmCopies atomic state from a plane’s current state. This is useful for drivers that subclass the plane state.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_atomic_helper_plane_duplicate_state (C function))c.drm_atomic_helper_plane_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hZstruct drm_plane_state * drm_atomic_helper_plane_duplicate_state (struct drm_plane *plane)h]j)}(hXstruct drm_plane_state *drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMnubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j'drm_atomic_helper_plane_duplicate_statesb)c.drm_atomic_helper_plane_duplicate_stateasbuh1hhjhhhjhMnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMnubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMnubj)}(h'drm_atomic_helper_plane_duplicate_stateh]j)}(hjh]h'drm_atomic_helper_plane_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMnubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j)c.drm_atomic_helper_plane_duplicate_stateasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMnubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMnhjhhubj)}(hhh]h)}(hdefault state duplicate hookh]hdefault state duplicate hook}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_plane *plane`` drm plane **Description** Default plane state duplicate hook for drivers which don't have their own subclassed plane state structure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMlhjubji)}(hhh]jn)}(h&``struct drm_plane *plane`` drm plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMihjubj)}(hhh]h)}(h drm planeh]h drm plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMihjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMkhjubh)}(hkDefault plane state duplicate hook for drivers which don't have their own subclassed plane state structure.h]hmDefault plane state duplicate hook for drivers which don’t have their own subclassed plane state structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4__drm_atomic_helper_plane_destroy_state (C function))c.__drm_atomic_helper_plane_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hLvoid __drm_atomic_helper_plane_destroy_state (struct drm_plane_state *state)h]j)}(hKvoid __drm_atomic_helper_plane_destroy_state(struct drm_plane_state *state)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhMubj)}(h'__drm_atomic_helper_plane_destroy_stateh]j)}(h'__drm_atomic_helper_plane_destroy_stateh]h'__drm_atomic_helper_plane_destroy_state}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjYhMubj)}(h(struct drm_plane_state *state)h]j)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjnsb)c.__drm_atomic_helper_plane_destroy_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjGhhhjYhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjChhhjYhMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhjYhMhj@hhubj)}(hhh]h)}(hrelease plane stateh]hrelease plane state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_plane_state *state`` plane state object to release **Description** Releases all resources stored in the plane state without actually freeing the memory of the plane state. This is useful for drivers that subclass the plane state.h](h)}(h**Parameters**h]j%)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj'ubji)}(hhh]jn)}(h@``struct drm_plane_state *state`` plane state object to release h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hjLh]hstruct drm_plane_state *state}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjFubj)}(hhh]h)}(hplane state object to releaseh]hplane state object to release}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjCubah}(h]h ]h"]h$]h&]uh1jhhj'ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj'ubh)}(hReleases all resources stored in the plane state without actually freeing the memory of the plane state. This is useful for drivers that subclass the plane state.h]hReleases all resources stored in the plane state without actually freeing the memory of the plane state. This is useful for drivers that subclass the plane state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_helper_plane_destroy_state (C function)'c.drm_atomic_helper_plane_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hcvoid drm_atomic_helper_plane_destroy_state (struct drm_plane *plane, struct drm_plane_state *state)h]j)}(hbvoid drm_atomic_helper_plane_destroy_state(struct drm_plane *plane, struct drm_plane_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h%drm_atomic_helper_plane_destroy_stateh]j)}(h%drm_atomic_helper_plane_destroy_stateh]h%drm_atomic_helper_plane_destroy_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h8(struct drm_plane *plane, struct drm_plane_state *state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j%)}jjsb'c.drm_atomic_helper_plane_destroy_stateasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jC'c.drm_atomic_helper_plane_destroy_stateasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hdefault state destroy hookh]hdefault state destroy hook}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_plane *plane`` drm plane ``struct drm_plane_state *state`` plane state object to release **Description** Default plane state destroy hook for drivers which don't have their own subclassed plane state structure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh](jn)}(h&``struct drm_plane *plane`` drm plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hj=h]hstruct drm_plane *plane}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj7ubj)}(hhh]h)}(h drm planeh]h drm plane}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhj4ubjn)}(h@``struct drm_plane_state *state`` plane state object to release h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hjvh]hstruct drm_plane_state *state}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjpubj)}(hhh]h)}(hplane state object to releaseh]hplane state object to release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj4ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hiDefault plane state destroy hook for drivers which don't have their own subclassed plane state structure.h]hkDefault plane state destroy hook for drivers which don’t have their own subclassed plane state structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6__drm_atomic_helper_connector_state_reset (C function)+c.__drm_atomic_helper_connector_state_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hxvoid __drm_atomic_helper_connector_state_reset (struct drm_connector_state *conn_state, struct drm_connector *connector)h]j)}(hwvoid __drm_atomic_helper_connector_state_reset(struct drm_connector_state *conn_state, struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h)__drm_atomic_helper_connector_state_reseth]j)}(h)__drm_atomic_helper_connector_state_reseth]h)__drm_atomic_helper_connector_state_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hI(struct drm_connector_state *conn_state, struct drm_connector *connector)h](j)}(h&struct drm_connector_state *conn_stateh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j%)}jjsb+c.__drm_atomic_helper_connector_state_resetasbuh1hhj/ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(h conn_stateh]h conn_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jm+c.__drm_atomic_helper_connector_state_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hreset the connector stateh]hreset the connector state}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhjvhNhNubj)}(hXD**Parameters** ``struct drm_connector_state *conn_state`` atomic connector state, must not be NULL ``struct drm_connector *connector`` connectotr object, must not be NULL **Description** Initializes the newly allocated **conn_state** with default values. This is useful for drivers that subclass the connector state.h](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjBubji)}(hhh](jn)}(hT``struct drm_connector_state *conn_state`` atomic connector state, must not be NULL h](jt)}(h*``struct drm_connector_state *conn_state``h]jz)}(hjgh]h&struct drm_connector_state *conn_state}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjaubj)}(hhh]h)}(h(atomic connector state, must not be NULLh]h(atomic connector state, must not be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj|hMhj^ubjn)}(hH``struct drm_connector *connector`` connectotr object, must not be NULL h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h#connectotr object, must not be NULLh]h#connectotr object, must not be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj^ubeh}(h]h ]h"]h$]h&]uh1jhhjBubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjBubh)}(hInitializes the newly allocated **conn_state** with default values. This is useful for drivers that subclass the connector state.h](h Initializes the newly allocated }(hjhhhNhNubj%)}(h**conn_state**h]h conn_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhS with default values. This is useful for drivers that subclass the connector state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0__drm_atomic_helper_connector_reset (C function)%c.__drm_atomic_helper_connector_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hrvoid __drm_atomic_helper_connector_reset (struct drm_connector *connector, struct drm_connector_state *conn_state)h]j)}(hqvoid __drm_atomic_helper_connector_reset(struct drm_connector *connector, struct drm_connector_state *conn_state)h](j)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hMubj)}(h#__drm_atomic_helper_connector_reseth]j)}(h#__drm_atomic_helper_connector_reseth]h#__drm_atomic_helper_connector_reset}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj@hMubj)}(hI(struct drm_connector *connector, struct drm_connector_state *conn_state)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjUsb%c.__drm_atomic_helper_connector_resetasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(h&struct drm_connector_state *conn_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.__drm_atomic_helper_connector_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h conn_stateh]h conn_state}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj@hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhj@hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhj@hMhj'hhubj)}(hhh]h)}(hreset state on connectorh]hreset state on connector}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` drm connector ``struct drm_connector_state *conn_state`` connector state to assign **Description** Initializes the newly allocated **conn_state** and assigns it to the :c:type:`drm_connector->state ` pointer of **connector**, usually required when initializing the drivers or when called from the :c:type:`drm_connector_funcs.reset ` hook. This is useful for drivers that subclass the connector state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj~ubji)}(hhh](jn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h drm connectorh]h drm connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hE``struct drm_connector_state *conn_state`` connector state to assign h](jt)}(h*``struct drm_connector_state *conn_state``h]jz)}(hjh]h&struct drm_connector_state *conn_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(hconnector state to assignh]hconnector state to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhj~ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj~ubh)}(hXInitializes the newly allocated **conn_state** and assigns it to the :c:type:`drm_connector->state ` pointer of **connector**, usually required when initializing the drivers or when called from the :c:type:`drm_connector_funcs.reset ` hook.h](h Initializes the newly allocated }(hj-hhhNhNubj%)}(h**conn_state**h]h conn_state}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubh and assigns it to the }(hj-hhhNhNubh)}(h.:c:type:`drm_connector->state `h]jz)}(hjIh]hdrm_connector->state}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj-ubh pointer of }(hj-hhhNhNubj%)}(h **connector**h]h connector}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubhI, usually required when initializing the drivers or when called from the }(hj-hhhNhNubh)}(h9:c:type:`drm_connector_funcs.reset `h]jz)}(hjh]hdrm_connector_funcs.reset}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhjfhMhj-ubh hook.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMhj~ubh)}(h=This is useful for drivers that subclass the connector state.h]h=This is useful for drivers that subclass the connector state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_helper_connector_reset (C function)#c.drm_atomic_helper_connector_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hHvoid drm_atomic_helper_connector_reset (struct drm_connector *connector)h]j)}(hGvoid drm_atomic_helper_connector_reset(struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h!drm_atomic_helper_connector_reseth]j)}(h!drm_atomic_helper_connector_reseth]h!drm_atomic_helper_connector_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsb#c.drm_atomic_helper_connector_resetasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hUdefault :c:type:`drm_connector_funcs.reset ` hook for connectorsh](hdefault }(hjhhhNhNubh)}(h9:c:type:`drm_connector_funcs.reset `h]jz)}(hjh]hdrm_connector_funcs.reset}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jL#c.drm_atomic_helper_connector_resetasbjdrm_connector_funcsuh1hhjhKHhjubh hook for connectors}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` drm connector **Description** Resets the atomic state for **connector** by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh]jn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h drm connectorh]h drm connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hResets the atomic state for **connector** by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.h](hResets the atomic state for }(hjOhhhNhNubj%)}(h **connector**h]h connector}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubhv by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j9drm_atomic_helper_connector_tv_margins_reset (C function).c.drm_atomic_helper_connector_tv_margins_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hSvoid drm_atomic_helper_connector_tv_margins_reset (struct drm_connector *connector)h]j)}(hRvoid drm_atomic_helper_connector_tv_margins_reset(struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h,drm_atomic_helper_connector_tv_margins_reseth]j)}(h,drm_atomic_helper_connector_tv_margins_reseth]h,drm_atomic_helper_connector_tv_margins_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb.c.drm_atomic_helper_connector_tv_margins_resetasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hResets TV connector propertiesh]hResets TV connector properties}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` DRM connector **Description** Resets the TV-related properties attached to a connector.h](h)}(h**Parameters**h]j%)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjlubji)}(hhh]jn)}(h2``struct drm_connector *connector`` DRM connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h DRM connectorh]h DRM connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjlubh)}(h9Resets the TV-related properties attached to a connector.h]h9Resets the TV-related properties attached to a connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_helper_connector_tv_reset (C function)&c.drm_atomic_helper_connector_tv_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hKvoid drm_atomic_helper_connector_tv_reset (struct drm_connector *connector)h]j)}(hJvoid drm_atomic_helper_connector_tv_reset(struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(h$drm_atomic_helper_connector_tv_reseth]j)}(h$drm_atomic_helper_connector_tv_reseth]h$drm_atomic_helper_connector_tv_reset}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j%)}jj4sb&c.drm_atomic_helper_connector_tv_resetasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubah}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h%Resets Analog TV connector propertiesh]h%Resets Analog TV connector properties}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` DRM connector **Description** Resets the analog TV properties attached to a connectorh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh]jn)}(h2``struct drm_connector *connector`` DRM connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj ubj)}(hhh]h)}(h DRM connectorh]h DRM connector}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhj ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(h7Resets the analog TV properties attached to a connectorh]h7Resets the analog TV properties attached to a connector}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_helper_connector_tv_check (C function)&c.drm_atomic_helper_connector_tv_checkhNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hjint drm_atomic_helper_connector_tv_check (struct drm_connector *connector, struct drm_atomic_state *state)h]j)}(hiint drm_atomic_helper_connector_tv_check(struct drm_connector *connector, struct drm_atomic_state *state)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMIubj)}(h$drm_atomic_helper_connector_tv_checkh]j)}(h$drm_atomic_helper_connector_tv_checkh]h$drm_atomic_helper_connector_tv_check}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMIubj)}(hA(struct drm_connector *connector, struct drm_atomic_state *state)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb&c.drm_atomic_helper_connector_tv_checkasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j &c.drm_atomic_helper_connector_tv_checkasbuh1hhj=ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMIubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMIubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMIhjhhubj)}(hhh]h)}(h%Validate an analog TV connector stateh]h%Validate an analog TV connector state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMIubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX+**Parameters** ``struct drm_connector *connector`` DRM Connector ``struct drm_atomic_state *state`` the DRM State object **Description** Checks the state object to see if the requested state is valid for an analog TV connector. **Return** ``0`` for success, a negative error code on error.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMChjubji)}(hhh](jn)}(h2``struct drm_connector *connector`` DRM Connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM@hjubj)}(hhh]h)}(h DRM Connectorh]h DRM Connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM@hjubjn)}(h8``struct drm_atomic_state *state`` the DRM State object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj<h]hstruct drm_atomic_state *state}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMAhj6ubj)}(hhh]h)}(hthe DRM State objecth]hthe DRM State object}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMAhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhMAhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMChjubh)}(hZChecks the state object to see if the requested state is valid for an analog TV connector.h]hZChecks the state object to see if the requested state is valid for an analog TV connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMChjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMFhjubh)}(h2``0`` for success, a negative error code on error.h](jz)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh- for success, a negative error code on error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j:__drm_atomic_helper_connector_duplicate_state (C function)/c.__drm_atomic_helper_connector_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hwvoid __drm_atomic_helper_connector_duplicate_state (struct drm_connector *connector, struct drm_connector_state *state)h]j)}(hvvoid __drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector, struct drm_connector_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMwubj)}(h-__drm_atomic_helper_connector_duplicate_stateh]j)}(h-__drm_atomic_helper_connector_duplicate_stateh]h-__drm_atomic_helper_connector_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMwubj)}(hD(struct drm_connector *connector, struct drm_connector_state *state)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j%)}jjsb/c.__drm_atomic_helper_connector_duplicate_stateasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj*ubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(h!struct drm_connector_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jh/c.__drm_atomic_helper_connector_duplicate_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMwubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMwhjhhubj)}(hhh]h)}(hcopy atomic connector stateh]hcopy atomic connector state}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMphjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhjvhNhNubj)}(hX **Parameters** ``struct drm_connector *connector`` connector object ``struct drm_connector_state *state`` atomic connector state **Description** Copies atomic state from a connector's current state. This is useful for drivers that subclass the connector state.h](h)}(h**Parameters**h]j%)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMthj=ubji)}(hhh](jn)}(h5``struct drm_connector *connector`` connector object h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjbh]hstruct drm_connector *connector}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMqhj\ubj)}(hhh]h)}(hconnector objecth]hconnector object}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMqhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhMqhjYubjn)}(h=``struct drm_connector_state *state`` atomic connector state h](jt)}(h%``struct drm_connector_state *state``h]jz)}(hjh]h!struct drm_connector_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMrhjubj)}(hhh]h)}(hatomic connector stateh]hatomic connector state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMrhjYubeh}(h]h ]h"]h$]h&]uh1jhhj=ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMthj=ubh)}(hsCopies atomic state from a connector's current state. This is useful for drivers that subclass the connector state.h]huCopies atomic state from a connector’s current state. This is useful for drivers that subclass the connector state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMthj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j8drm_atomic_helper_connector_duplicate_state (C function)-c.drm_atomic_helper_connector_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hjstruct drm_connector_state * drm_atomic_helper_connector_duplicate_state (struct drm_connector *connector)h]j)}(hhstruct drm_connector_state *drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j%)}j+drm_atomic_helper_connector_duplicate_statesb-c.drm_atomic_helper_connector_duplicate_stateasbuh1hhjhhhj(hMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj(hMubj)}(h+drm_atomic_helper_connector_duplicate_stateh]j)}(hjXh]h+drm_atomic_helper_connector_duplicate_state}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj(hMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jV-c.drm_atomic_helper_connector_duplicate_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj(hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj(hMhjhhubj)}(hhh]h)}(hdefault state duplicate hookh]hdefault state duplicate hook}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjvhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` drm connector **Description** Default connector state duplicate hook for drivers which don't have their own subclassed connector state structure.h](h)}(h**Parameters**h]j%)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj2ubji)}(hhh]jn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjWh]hstruct drm_connector *connector}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjQubj)}(hhh]h)}(h drm connectorh]h drm connector}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjNubah}(h]h ]h"]h$]h&]uh1jhhj2ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj2ubh)}(hsDefault connector state duplicate hook for drivers which don't have their own subclassed connector state structure.h]huDefault connector state duplicate hook for drivers which don’t have their own subclassed connector state structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j8__drm_atomic_helper_connector_destroy_state (C function)-c.__drm_atomic_helper_connector_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hTvoid __drm_atomic_helper_connector_destroy_state (struct drm_connector_state *state)h]j)}(hSvoid __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h+__drm_atomic_helper_connector_destroy_stateh]j)}(h+__drm_atomic_helper_connector_destroy_stateh]h+__drm_atomic_helper_connector_destroy_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h#(struct drm_connector_state *state)h]j)}(h!struct drm_connector_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j%)}jjsb-c.__drm_atomic_helper_connector_destroy_stateasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hrelease connector stateh]hrelease connector state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_connector_state *state`` connector state object to release **Description** Releases all resources stored in the connector state without actually freeing the memory of the connector state. This is useful for drivers that subclass the connector state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh]jn)}(hH``struct drm_connector_state *state`` connector state object to release h](jt)}(h%``struct drm_connector_state *state``h]jz)}(hjh]h!struct drm_connector_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h!connector state object to releaseh]h!connector state object to release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hReleases all resources stored in the connector state without actually freeing the memory of the connector state. This is useful for drivers that subclass the connector state.h]hReleases all resources stored in the connector state without actually freeing the memory of the connector state. This is useful for drivers that subclass the connector state.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_atomic_helper_connector_destroy_state (C function)+c.drm_atomic_helper_connector_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hsvoid drm_atomic_helper_connector_destroy_state (struct drm_connector *connector, struct drm_connector_state *state)h]j)}(hrvoid drm_atomic_helper_connector_destroy_state(struct drm_connector *connector, struct drm_connector_state *state)h](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjfhMubj)}(h)drm_atomic_helper_connector_destroy_stateh]j)}(h)drm_atomic_helper_connector_destroy_stateh]h)drm_atomic_helper_connector_destroy_state}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjfhMubj)}(hD(struct drm_connector *connector, struct drm_connector_state *state)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj{sb+c.drm_atomic_helper_connector_destroy_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_connector_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j+c.drm_atomic_helper_connector_destroy_stateasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjThhhjfhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjfhMubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjfhMhjMhhubj)}(hhh]h)}(hdefault state destroy hookh]hdefault state destroy hook}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjfhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` drm connector ``struct drm_connector_state *state`` connector state object to release **Description** Default connector state destroy hook for drivers which don't have their own subclassed connector state structure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh](jn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h drm connectorh]h drm connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hH``struct drm_connector_state *state`` connector state object to release h](jt)}(h%``struct drm_connector_state *state``h]jz)}(hjh]h!struct drm_connector_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h!connector state object to releaseh]h!connector state object to release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hqDefault connector state destroy hook for drivers which don't have their own subclassed connector state structure.h]hsDefault connector state destroy hook for drivers which don’t have their own subclassed connector state structure.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j<__drm_atomic_helper_private_obj_duplicate_state (C function)1c.__drm_atomic_helper_private_obj_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hsvoid __drm_atomic_helper_private_obj_duplicate_state (struct drm_private_obj *obj, struct drm_private_state *state)h]j)}(hrvoid __drm_atomic_helper_private_obj_duplicate_state(struct drm_private_obj *obj, struct drm_private_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubj)}(h/__drm_atomic_helper_private_obj_duplicate_stateh]j)}(h/__drm_atomic_helper_private_obj_duplicate_stateh]h/__drm_atomic_helper_private_obj_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhMubj)}(h>(struct drm_private_obj *obj, struct drm_private_state *state)h](j)}(hstruct drm_private_obj *objh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_private_objh]hdrm_private_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb1c.__drm_atomic_helper_private_obj_duplicate_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hobjh]hobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_private_state *stateh](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(hdrm_private_stateh]hdrm_private_state}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j1c.__drm_atomic_helper_private_obj_duplicate_stateasbuh1hhj-ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjwhhubj)}(hhh]h)}(hcopy atomic private stateh]hcopy atomic private state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX"**Parameters** ``struct drm_private_obj *obj`` CRTC object ``struct drm_private_state *state`` new private object state **Description** Copies atomic state from a private objects's current state and resets inferred values. This is useful for drivers that subclass the private state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh](jn)}(h,``struct drm_private_obj *obj`` CRTC object h](jt)}(h``struct drm_private_obj *obj``h]jz)}(hjh]hstruct drm_private_obj *obj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h CRTC objecth]h CRTC object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h=``struct drm_private_state *state`` new private object state h](jt)}(h#``struct drm_private_state *state``h]jz)}(hj,h]hstruct drm_private_state *state}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj&ubj)}(hhh]h)}(hnew private object stateh]hnew private object state}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hCopies atomic state from a private objects's current state and resets inferred values. This is useful for drivers that subclass the private state.h]hCopies atomic state from a private objects’s current state and resets inferred values. This is useful for drivers that subclass the private state.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j7__drm_atomic_helper_bridge_duplicate_state (C function),c.__drm_atomic_helper_bridge_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hkvoid __drm_atomic_helper_bridge_duplicate_state (struct drm_bridge *bridge, struct drm_bridge_state *state)h]j)}(hjvoid __drm_atomic_helper_bridge_duplicate_state(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h*__drm_atomic_helper_bridge_duplicate_stateh]j)}(h*__drm_atomic_helper_bridge_duplicate_stateh]h*__drm_atomic_helper_bridge_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h;(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsb,c.__drm_atomic_helper_bridge_duplicate_stateasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge_state *stateh](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j#,c.__drm_atomic_helper_bridge_duplicate_stateasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hCopy atomic bridge stateh]hCopy atomic bridge state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge object ``struct drm_bridge_state *state`` atomic bridge state **Description** Copies atomic state from a bridge's current state and resets inferred values. This is useful for drivers that subclass the bridge state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh](jn)}(h,``struct drm_bridge *bridge`` bridge object h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjh]hstruct drm_bridge *bridge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(h bridge objecth]h bridge object}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhjubjn)}(h7``struct drm_bridge_state *state`` atomic bridge state h](jt)}(h"``struct drm_bridge_state *state``h]jz)}(hjVh]hstruct drm_bridge_state *state}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjPubj)}(hhh]h)}(hatomic bridge stateh]hatomic bridge state}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hCopies atomic state from a bridge's current state and resets inferred values. This is useful for drivers that subclass the bridge state.h]hCopies atomic state from a bridge’s current state and resets inferred values. This is useful for drivers that subclass the bridge state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_atomic_helper_bridge_duplicate_state (C function)*c.drm_atomic_helper_bridge_duplicate_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(h^struct drm_bridge_state * drm_atomic_helper_bridge_duplicate_state (struct drm_bridge *bridge)h]j)}(h\struct drm_bridge_state *drm_atomic_helper_bridge_duplicate_state(struct drm_bridge *bridge)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j(drm_atomic_helper_bridge_duplicate_statesb*c.drm_atomic_helper_bridge_duplicate_stateasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(h(drm_atomic_helper_bridge_duplicate_stateh]j)}(hjh]h(drm_atomic_helper_bridge_duplicate_state}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j*c.drm_atomic_helper_bridge_duplicate_stateasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hDuplicate a bridge state objecth]hDuplicate a bridge state object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hXM**Parameters** ``struct drm_bridge *bridge`` bridge object **Description** Allocates a new bridge state and initializes it with the current bridge state values. This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_duplicate_state ` hook for bridges that don't subclass the bridge state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh]jn)}(h,``struct drm_bridge *bridge`` bridge object h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjh]hstruct drm_bridge *bridge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj ubj)}(hhh]h)}(h bridge objecth]h bridge object}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhj ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hAllocates a new bridge state and initializes it with the current bridge state values. This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_duplicate_state ` hook for bridges that don't subclass the bridge state.h](hAllocates a new bridge state and initializes it with the current bridge state values. This helper is meant to be used as a bridge }(hjchhhNhNubh)}(hD:c:type:`drm_bridge_funcs.atomic_duplicate_state `h]jz)}(hjmh]h'drm_bridge_funcs.atomic_duplicate_state}(hjohhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjcubh9 hook for bridges that don’t subclass the bridge state.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_atomic_helper_bridge_destroy_state (C function)(c.drm_atomic_helper_bridge_destroy_statehNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hgvoid drm_atomic_helper_bridge_destroy_state (struct drm_bridge *bridge, struct drm_bridge_state *state)h]j)}(hfvoid drm_atomic_helper_bridge_destroy_state(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h&drm_atomic_helper_bridge_destroy_stateh]j)}(h&drm_atomic_helper_bridge_destroy_stateh]h&drm_atomic_helper_bridge_destroy_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h;(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb(c.drm_atomic_helper_bridge_destroy_stateasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge_state *stateh](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j,(c.drm_atomic_helper_bridge_destroy_stateasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hDestroy a bridge state objecth]hDestroy a bridge state object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjvhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` the bridge this state refers to ``struct drm_bridge_state *state`` bridge state to destroy **Description** Destroys a bridge state previously created by :c:type:`drm_atomic_helper_bridge_reset`() or :c:type:`drm_atomic_helper_bridge_duplicate_state`(). This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_destroy_state ` hook for bridges that don't subclass the bridge state.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubji)}(hhh](jn)}(h>``struct drm_bridge *bridge`` the bridge this state refers to h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj&h]hstruct drm_bridge *bridge}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj ubj)}(hhh]h)}(hthe bridge this state refers toh]hthe bridge this state refers to}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj;hMhjubjn)}(h;``struct drm_bridge_state *state`` bridge state to destroy h](jt)}(h"``struct drm_bridge_state *state``h]jz)}(hj_h]hstruct drm_bridge_state *state}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjYubj)}(hhh]h)}(hbridge state to destroyh]hbridge state to destroy}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh)}(hX7Destroys a bridge state previously created by :c:type:`drm_atomic_helper_bridge_reset`() or :c:type:`drm_atomic_helper_bridge_duplicate_state`(). This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_destroy_state ` hook for bridges that don't subclass the bridge state.h](h.Destroys a bridge state previously created by }(hjhhhNhNubh)}(h:c:type:`drm_atomic_helper_bridge_reset`() or :c:type:`drm_atomic_helper_bridge_duplicate_state`(). This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_destroy_state `h]jz)}(hjh]hdrm_atomic_helper_bridge_reset`() or :c:type:`drm_atomic_helper_bridge_duplicate_state`(). This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_destroy_state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh9 hook for bridges that don’t subclass the bridge state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-__drm_atomic_helper_bridge_reset (C function)"c.__drm_atomic_helper_bridge_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(havoid __drm_atomic_helper_bridge_reset (struct drm_bridge *bridge, struct drm_bridge_state *state)h]j)}(h`void __drm_atomic_helper_bridge_reset(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h __drm_atomic_helper_bridge_reseth]j)}(h __drm_atomic_helper_bridge_reseth]h __drm_atomic_helper_bridge_reset}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h;(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j%)}jj%sb"c.__drm_atomic_helper_bridge_resetasbuh1hhj;ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct drm_bridge_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jy"c.__drm_atomic_helper_bridge_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h(Initialize a bridge state to its defaulth]h(Initialize a bridge state to its default}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjvhNhNubj)}(hXg**Parameters** ``struct drm_bridge *bridge`` the bridge this state refers to ``struct drm_bridge_state *state`` bridge state to initialize **Description** Initializes the bridge state to default values. This is meant to be called by the bridge :c:type:`drm_bridge_funcs.atomic_reset ` hook for bridges that subclass the bridge state.h](h)}(h**Parameters**h]j%)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjNubji)}(hhh](jn)}(h>``struct drm_bridge *bridge`` the bridge this state refers to h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjsh]hstruct drm_bridge *bridge}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjmubj)}(hhh]h)}(hthe bridge this state refers toh]hthe bridge this state refers to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjjubjn)}(h>``struct drm_bridge_state *state`` bridge state to initialize h](jt)}(h"``struct drm_bridge_state *state``h]jz)}(hjh]hstruct drm_bridge_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(hbridge state to initializeh]hbridge state to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhhjNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjNubh)}(hInitializes the bridge state to default values. This is meant to be called by the bridge :c:type:`drm_bridge_funcs.atomic_reset ` hook for bridges that subclass the bridge state.h](hYInitializes the bridge state to default values. This is meant to be called by the bridge }(hjhhhNhNubh)}(h::c:type:`drm_bridge_funcs.atomic_reset `h]jz)}(hjh]hdrm_bridge_funcs.atomic_reset}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubh1 hook for bridges that subclass the bridge state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_atomic_helper_bridge_reset (C function) c.drm_atomic_helper_bridge_resethNtauh1jxhjvhhhNhNubj)}(hhh](j)}(hTstruct drm_bridge_state * drm_atomic_helper_bridge_reset (struct drm_bridge *bridge)h]j)}(hRstruct drm_bridge_state *drm_atomic_helper_bridge_reset(struct drm_bridge *bridge)h](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM-ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj\hM-ubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jdrm_atomic_helper_bridge_resetsb c.drm_atomic_helper_bridge_resetasbuh1hhjKhhhj\hM-ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj\hM-ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKhhhj\hM-ubj)}(hdrm_atomic_helper_bridge_reseth]j)}(hjh]hdrm_atomic_helper_bridge_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj\hM-ubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_atomic_helper_bridge_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhj\hM-ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhj\hM-ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhj\hM-hjDhhubj)}(hhh]h)}(h5Allocate and initialize a bridge state to its defaulth]h5Allocate and initialize a bridge state to its default}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM%hjGhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj\hM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhjvhNhNubj)}(hX@**Parameters** ``struct drm_bridge *bridge`` the bridge this state refers to **Description** Allocates the bridge state and initializes it to default values. This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_reset ` hook for bridges that don't subclass the bridge state.h](h)}(h**Parameters**h]j%)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM)hjfubji)}(hhh]jn)}(h>``struct drm_bridge *bridge`` the bridge this state refers to h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjh]hstruct drm_bridge *bridge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM'hjubj)}(hhh]h)}(hthe bridge this state refers toh]hthe bridge this state refers to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhhjfubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM)hjfubh)}(hAllocates the bridge state and initializes it to default values. This helper is meant to be used as a bridge :c:type:`drm_bridge_funcs.atomic_reset ` hook for bridges that don't subclass the bridge state.h](hmAllocates the bridge state and initializes it to default values. This helper is meant to be used as a bridge }(hjhhhNhNubh)}(h::c:type:`drm_bridge_funcs.atomic_reset `h]jz)}(hjh]hdrm_bridge_funcs.atomic_reset}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM)hjubh9 hook for bridges that don’t subclass the bridge state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM)hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjvhhhNhNubeh}(h]atomic-state-helper-referenceah ]h"]atomic state helper referenceah$]h&]uh1hhj:hhhhhKNubh)}(hhh](h)}(hGEM Atomic Helper Referenceh]hGEM Atomic Helper Reference}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKTubh)}(hThe GEM atomic helpers library implements generic atomic-commit functions for drivers that use GEM objects. Currently, it provides synchronization helpers, and plane state and framebuffer BO mappings for planes with shadow buffers.h]hThe GEM atomic helpers library implements generic atomic-commit functions for drivers that use GEM objects. Currently, it provides synchronization helpers, and plane state and framebuffer BO mappings for planes with shadow buffers.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.cLhKhjhhubh)}(hXBefore scanout, a plane's framebuffer needs to be synchronized with possible writers that draw into the framebuffer. All drivers should call drm_gem_plane_helper_prepare_fb() from their implementation of struct :c:type:`drm_plane_helper.prepare_fb ` . It sets the plane's fence from the framebuffer so that the DRM core can synchronize access automatically. drm_gem_plane_helper_prepare_fb() can also be used directly as implementation of prepare_fb.h](hBefore scanout, a plane’s framebuffer needs to be synchronized with possible writers that draw into the framebuffer. All drivers should call drm_gem_plane_helper_prepare_fb() from their implementation of struct }(hj=hhhNhNubh)}(h8:c:type:`drm_plane_helper.prepare_fb `h]jz)}(hjGh]hdrm_plane_helper.prepare_fb}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helperuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhj=ubh . It sets the plane’s fence from the framebuffer so that the DRM core can synchronize access automatically. drm_gem_plane_helper_prepare_fb() can also be used directly as implementation of prepare_fb.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhKhjhhubj@)}(h#include struct drm_plane_helper_funcs driver_plane_helper_funcs = { ..., . prepare_fb = drm_gem_plane_helper_prepare_fb, };h]h#include struct drm_plane_helper_funcs driver_plane_helper_funcs = { ..., . prepare_fb = drm_gem_plane_helper_prepare_fb, };}hjosbah}(h]h ]h"]h$]h&]jjforcelanguagejhighlight_args}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjhhubh)}(hXXA driver using a shadow buffer copies the content of the shadow buffers into the HW's framebuffer memory during an atomic update. This requires a mapping of the shadow buffer into kernel address space. The mappings cannot be established by commit-tail functions, such as atomic_update, as this would violate locking rules around dma_buf_vmap().h]hXZA driver using a shadow buffer copies the content of the shadow buffers into the HW’s framebuffer memory during an atomic update. This requires a mapping of the shadow buffer into kernel address space. The mappings cannot be established by commit-tail functions, such as atomic_update, as this would violate locking rules around dma_buf_vmap().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK'hjhhubh)}(hThe helpers for shadow-buffered planes establish and release mappings, and provide struct drm_shadow_plane_state, which stores the plane's mapping for commit-tail functions.h]hThe helpers for shadow-buffered planes establish and release mappings, and provide struct drm_shadow_plane_state, which stores the plane’s mapping for commit-tail functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK-hjhhubh)}(hShadow-buffered planes can easily be enabled by using the provided macros ``DRM_GEM_SHADOW_PLANE_FUNCS`` and ``DRM_GEM_SHADOW_PLANE_HELPER_FUNCS``. These macros set up the plane and plane-helper callbacks to point to the shadow-buffer helpers.h](hJShadow-buffered planes can easily be enabled by using the provided macros }(hjhhhNhNubjz)}(h``DRM_GEM_SHADOW_PLANE_FUNCS``h]hDRM_GEM_SHADOW_PLANE_FUNCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh and }(hjhhhNhNubjz)}(h%``DRM_GEM_SHADOW_PLANE_HELPER_FUNCS``h]h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubha. These macros set up the plane and plane-helper callbacks to point to the shadow-buffer helpers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK1hjhhubj@)}(hX#include struct drm_plane_funcs driver_plane_funcs = { ..., DRM_GEM_SHADOW_PLANE_FUNCS, }; struct drm_plane_helper_funcs driver_plane_helper_funcs = { ..., DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, };h]hX#include struct drm_plane_funcs driver_plane_funcs = { ..., DRM_GEM_SHADOW_PLANE_FUNCS, }; struct drm_plane_helper_funcs driver_plane_helper_funcs = { ..., DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, };}hjsbah}(h]h ]h"]h$]h&]jjj}j~jj}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK6hjhhubh)}(hIn the driver's atomic-update function, shadow-buffer mappings are available from the plane state. Use to_drm_shadow_plane_state() to upcast from struct drm_plane_state.h]hIn the driver’s atomic-update function, shadow-buffer mappings are available from the plane state. Use to_drm_shadow_plane_state() to upcast from struct drm_plane_state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKDhjhhubj@)}(hXrvoid driver_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *old_plane_state) { struct drm_plane_state *plane_state = plane->state; struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state); // access shadow buffer via shadow_plane_state->map }h]hXrvoid driver_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *old_plane_state) { struct drm_plane_state *plane_state = plane->state; struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state); // access shadow buffer via shadow_plane_state->map }}hjsbah}(h]h ]h"]h$]h&]jjj}j~jj}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKHhjhhubh)}(hA mapping address for each of the framebuffer's buffer object is stored in struct :c:type:`drm_shadow_plane_state.map `. The mappings are valid while the state is being used.h](hTA mapping address for each of the framebuffer’s buffer object is stored in struct }(hjhhhNhNubh)}(h=:c:type:`drm_shadow_plane_state.map `h]jz)}(hj h]hdrm_shadow_plane_state.map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_shadow_plane_stateuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKThjubh7. The mappings are valid while the state is being used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hKThjhhubh)}(hDrivers that use struct drm_simple_display_pipe can use ``DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS`` to initialize the rsp callbacks. Access to shadow-buffer mappings is similar to regular atomic_update.h](h8Drivers that use struct drm_simple_display_pipe can use }(hj4hhhNhNubjz)}(h2``DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS``h]h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubhg to initialize the rsp callbacks. Access to shadow-buffer mappings is similar to regular atomic_update.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKXhjhhubj@)}(hXstruct drm_simple_display_pipe_funcs driver_pipe_funcs = { ..., DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS, }; void driver_pipe_enable(struct drm_simple_display_pipe *pipe, struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state) { struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state); // access shadow buffer via shadow_plane_state->map }h]hXstruct drm_simple_display_pipe_funcs driver_pipe_funcs = { ..., DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS, }; void driver_pipe_enable(struct drm_simple_display_pipe *pipe, struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state) { struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state); // access shadow buffer via shadow_plane_state->map }}hjUsbah}(h]h ]h"]h$]h&]jjj}j~jj}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK]hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$DRM_SHADOW_PLANE_MAX_WIDTH (C macro)c.DRM_SHADOW_PLANE_MAX_WIDTHhNtauh1jxhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhNubj)}(hhh](j)}(hDRM_SHADOW_PLANE_MAX_WIDTHh]j)}(hDRM_SHADOW_PLANE_MAX_WIDTHh]j)}(hDRM_SHADOW_PLANE_MAX_WIDTHh]j)}(hjyh]hDRM_SHADOW_PLANE_MAX_WIDTH}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjwhhhjhKubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjthhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhjshNubh)}(h``DRM_SHADOW_PLANE_MAX_WIDTH``h]jz)}(hjh]hDRM_SHADOW_PLANE_MAX_WIDTH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK!hjhhubjb=)}(hX Maximum width of a plane's shadow buffer in pixels **Description** For drivers with shadow planes, the maximum width of the framebuffer is usually independent from hardware limitations. Drivers can initialize struct drm_mode_config.max_width from DRM_SHADOW_PLANE_MAX_WIDTH. h](jb=)}(h3Maximum width of a plane's shadow buffer in pixels h]h)}(h2Maximum width of a plane's shadow buffer in pixelsh]h4Maximum width of a plane’s shadow buffer in pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1ja=hjhKhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhjubh)}(hFor drivers with shadow planes, the maximum width of the framebuffer is usually independent from hardware limitations. Drivers can initialize struct drm_mode_config.max_width from DRM_SHADOW_PLANE_MAX_WIDTH.h]hFor drivers with shadow planes, the maximum width of the framebuffer is usually independent from hardware limitations. Drivers can initialize struct drm_mode_config.max_width from DRM_SHADOW_PLANE_MAX_WIDTH.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhjubeh}(h]h ]h"]h$]h&]uh1ja=hjhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%DRM_SHADOW_PLANE_MAX_HEIGHT (C macro)c.DRM_SHADOW_PLANE_MAX_HEIGHThNtauh1jxhjhhhjshNubj)}(hhh](j)}(hDRM_SHADOW_PLANE_MAX_HEIGHTh]j)}(hDRM_SHADOW_PLANE_MAX_HEIGHTh]j)}(hDRM_SHADOW_PLANE_MAX_HEIGHTh]j)}(hj(h]hDRM_SHADOW_PLANE_MAX_HEIGHT}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK(ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj&hhhjEhK(ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhjEhK(hj#hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj#hhhjEhK(ubeh}(h]h ](jmacroeh"]h$]h&]jjjj^jj^jjjuh1jhhhjhjshNubh)}(h``DRM_SHADOW_PLANE_MAX_HEIGHT``h]jz)}(hjdh]hDRM_SHADOW_PLANE_MAX_HEIGHT}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK*hjhhubjb=)}(hX  Maximum height of a plane's shadow buffer in scanlines **Description** For drivers with shadow planes, the maximum height of the framebuffer is usually independent from hardware limitations. Drivers can initialize struct drm_mode_config.max_height from DRM_SHADOW_PLANE_MAX_HEIGHT. h](jb=)}(h7Maximum height of a plane's shadow buffer in scanlines h]h)}(h6Maximum height of a plane's shadow buffer in scanlinesh]h8Maximum height of a plane’s shadow buffer in scanlines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK"hj~ubah}(h]h ]h"]h$]h&]uh1ja=hjhK"hjzubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK$hjzubh)}(hFor drivers with shadow planes, the maximum height of the framebuffer is usually independent from hardware limitations. Drivers can initialize struct drm_mode_config.max_height from DRM_SHADOW_PLANE_MAX_HEIGHT.h]hFor drivers with shadow planes, the maximum height of the framebuffer is usually independent from hardware limitations. Drivers can initialize struct drm_mode_config.max_height from DRM_SHADOW_PLANE_MAX_HEIGHT.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK#hjzubeh}(h]h ]h"]h$]h&]uh1ja=hjhK"hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_shadow_plane_state (C struct)c.drm_shadow_plane_statehNtauh1jxhjhhhjshNubj)}(hhh](j)}(hdrm_shadow_plane_stateh]j)}(hstruct drm_shadow_plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK*ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK*ubj)}(hdrm_shadow_plane_stateh]j)}(hjh]hdrm_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK*ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK*hjhhubj)}(hhh]h)}(h*plane state for planes with shadow buffersh]h*plane state for planes with shadow buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK+hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK*ubeh}(h]h ](jstructeh"]h$]h&]jjjj7jj7jjjuh1jhhhjhjshNubj)}(hXZ**Definition**:: struct drm_shadow_plane_state { struct drm_plane_state base; struct drm_format_conv_state fmtcnv_state; struct iosys_map map[DRM_FORMAT_MAX_PLANES]; struct iosys_map data[DRM_FORMAT_MAX_PLANES]; }; **Members** ``base`` plane state ``fmtcnv_state`` Format-conversion state Per-plane state for format conversion. Flags for copying shadow buffers into backend storage. Also holds temporary storage for format conversion. ``map`` Mappings of the plane's framebuffer BOs in to kernel address space The memory mappings stored in map should be established in the plane's prepare_fb callback and removed in the cleanup_fb callback. ``data`` Address of each framebuffer BO's data The address of the data stored in each mapping. This is different for framebuffers with non-zero offset fields.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh:}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK/hj;ubj@)}(hstruct drm_shadow_plane_state { struct drm_plane_state base; struct drm_format_conv_state fmtcnv_state; struct iosys_map map[DRM_FORMAT_MAX_PLANES]; struct iosys_map data[DRM_FORMAT_MAX_PLANES]; };h]hstruct drm_shadow_plane_state { struct drm_plane_state base; struct drm_format_conv_state fmtcnv_state; struct iosys_map map[DRM_FORMAT_MAX_PLANES]; struct iosys_map data[DRM_FORMAT_MAX_PLANES]; };}hj\sbah}(h]h ]h"]h$]h&]jjuh1j?hg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK1hj;ubh)}(h **Members**h]j%)}(hjmh]hMembers}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK8hj;ubji)}(hhh](jn)}(h``base`` plane state h](jt)}(h``base``h]jz)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK2hjubj)}(hhh]h)}(h plane stateh]h plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK2hjubjn)}(h``fmtcnv_state`` Format-conversion state Per-plane state for format conversion. Flags for copying shadow buffers into backend storage. Also holds temporary storage for format conversion. h](jt)}(h``fmtcnv_state``h]jz)}(hjh]h fmtcnv_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK;hjubj)}(hhh](h)}(hFormat-conversion stateh]hFormat-conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK7hjubh)}(hPer-plane state for format conversion. Flags for copying shadow buffers into backend storage. Also holds temporary storage for format conversion.h]hPer-plane state for format conversion. Flags for copying shadow buffers into backend storage. Also holds temporary storage for format conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK9hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK;hjubjn)}(h``map`` Mappings of the plane's framebuffer BOs in to kernel address space The memory mappings stored in map should be established in the plane's prepare_fb callback and removed in the cleanup_fb callback. h](jt)}(h``map``h]jz)}(hjh]hmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKEhjubj)}(hhh](h)}(hBMappings of the plane's framebuffer BOs in to kernel address spaceh]hDMappings of the plane’s framebuffer BOs in to kernel address space}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKBhj$ubh)}(hThe memory mappings stored in map should be established in the plane's prepare_fb callback and removed in the cleanup_fb callback.h]hThe memory mappings stored in map should be established in the plane’s prepare_fb callback and removed in the cleanup_fb callback.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKDhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj#hKEhjubjn)}(h``data`` Address of each framebuffer BO's data The address of the data stored in each mapping. This is different for framebuffers with non-zero offset fields.h](jt)}(h``data``h]jz)}(hjWh]hdata}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKLhjQubj)}(hhh](h)}(h%Address of each framebuffer BO's datah]h'Address of each framebuffer BO’s data}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKJhjmubh)}(hoThe address of the data stored in each mapping. This is different for framebuffers with non-zero offset fields.h]hoThe address of the data stored in each mapping. This is different for framebuffers with non-zero offset fields.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKLhjmubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhKLhjubeh}(h]h ]h"]h$]h&]uh1jhhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjshNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKPhjhhubh)}(hFor planes that use a shadow buffer, struct drm_shadow_plane_state provides the regular plane state plus mappings of the shadow buffer into kernel address space.h]hFor planes that use a shadow buffer, struct drm_shadow_plane_state provides the regular plane state plus mappings of the shadow buffer into kernel address space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK,hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&to_drm_shadow_plane_state (C function)c.to_drm_shadow_plane_statehNtauh1jxhjhhhjshNubj)}(hhh](j)}(hYstruct drm_shadow_plane_state * to_drm_shadow_plane_state (struct drm_plane_state *state)h]j)}(hWstruct drm_shadow_plane_state *to_drm_shadow_plane_state(struct drm_plane_state *state)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKUubh)}(hhh]j)}(hdrm_shadow_plane_stateh]hdrm_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jto_drm_shadow_plane_statesbc.to_drm_shadow_plane_stateasbuh1hhjhhhjhKUubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKUubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKUubj)}(hto_drm_shadow_plane_stateh]j)}(hj#h]hto_drm_shadow_plane_state}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKUubj)}(h(struct drm_plane_state *state)h]j)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.to_drm_shadow_plane_stateasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKUubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKUubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKUhjhhubj)}(hhh]h)}(h#upcasts from struct drm_plane_stateh]h#upcasts from struct drm_plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhjshNubj)}(hC**Parameters** ``struct drm_plane_state *state`` the plane stateh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKVhjubji)}(hhh]jn)}(h1``struct drm_plane_state *state`` the plane stateh](jt)}(h!``struct drm_plane_state *state``h]jz)}(hj"h]hstruct drm_plane_state *state}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKXhjubj)}(hhh]h)}(hthe plane stateh]hthe plane state}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKShj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hKXhjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjshNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$DRM_GEM_SHADOW_PLANE_FUNCS (C macro)c.DRM_GEM_SHADOW_PLANE_FUNCShNtauh1jxhjhhhjshNubj)}(hhh](j)}(hDRM_GEM_SHADOW_PLANE_FUNCSh]j)}(hDRM_GEM_SHADOW_PLANE_FUNCSh]j)}(hDRM_GEM_SHADOW_PLANE_FUNCSh]j)}(hjvh]hDRM_GEM_SHADOW_PLANE_FUNCS}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKmubah}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhKmubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjhKmhjqhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjqhhhjhKmubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhjshNubh)}(h``DRM_GEM_SHADOW_PLANE_FUNCS``h]jz)}(hjh]hDRM_GEM_SHADOW_PLANE_FUNCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKohjhhubjb=)}(h Initializes struct drm_plane_funcs for shadow-buffered planes **Description** Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_plane_funcs to use the rsp helper functions. h](jb=)}(h>Initializes struct drm_plane_funcs for shadow-buffered planes h]h)}(h=Initializes struct drm_plane_funcs for shadow-buffered planesh]h=Initializes struct drm_plane_funcs for shadow-buffered planes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKghjubah}(h]h ]h"]h$]h&]uh1ja=hjhKghjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKihjubh)}(hDrivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_plane_funcs to use the rsp helper functions.h]hDrivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_plane_funcs to use the rsp helper functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhhjubeh}(h]h ]h"]h$]h&]uh1ja=hjhKghjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+DRM_GEM_SHADOW_PLANE_HELPER_FUNCS (C macro)#c.DRM_GEM_SHADOW_PLANE_HELPER_FUNCShNtauh1jxhjhhhjshNubj)}(hhh](j)}(h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCSh]j)}(h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCSh]j)}(h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCSh]j)}(hj%h]h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCS}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK}ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhjBhK}ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjBhK}hj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhjBhK}ubeh}(h]h ](jmacroeh"]h$]h&]jjjj[jj[jjjuh1jhhhjhjshNubh)}(h%``DRM_GEM_SHADOW_PLANE_HELPER_FUNCS``h]jz)}(hjah]h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCS}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhjhhubjb=)}(h Initializes struct drm_plane_helper_funcs for shadow-buffered planes **Description** Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_plane_helper_funcs to use the rsp helper functions. h](jb=)}(hEInitializes struct drm_plane_helper_funcs for shadow-buffered planes h]h)}(hDInitializes struct drm_plane_helper_funcs for shadow-buffered planesh]hDInitializes struct drm_plane_helper_funcs for shadow-buffered planes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKvhj{ubah}(h]h ]h"]h$]h&]uh1ja=hjhKvhjwubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKxhjwubh)}(hDrivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_plane_helper_funcs to use the rsp helper functions.h]hDrivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_plane_helper_funcs to use the rsp helper functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKwhjwubeh}(h]h ]h"]h$]h&]uh1ja=hjhKvhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j8DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS (C macro)0c.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCShNtauh1jxhjhhhjshNubj)}(hhh](j)}(h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCSh]j)}(h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCSh]j)}(h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCSh]j)}(hjh]h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1jhhhjhjshNubh)}(h2``DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS``h]jz)}(hjh]h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhjhhubjb=)}(hX Initializes struct drm_simple_display_pipe_funcs for shadow-buffered planes **Description** Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_simple_display_pipe_funcs to use the rsp helper functions. h](jb=)}(hLInitializes struct drm_simple_display_pipe_funcs for shadow-buffered planes h]h)}(hKInitializes struct drm_simple_display_pipe_funcs for shadow-buffered planesh]hKInitializes struct drm_simple_display_pipe_funcs for shadow-buffered planes}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhj*ubah}(h]h ]h"]h$]h&]uh1ja=hj<hKhj&ubh)}(h**Description**h]j%)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhj&ubh)}(hDrivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_simple_display_pipe_funcs to use the rsp helper functions.h]hDrivers may use GEM BOs as shadow buffers over the framebuffer memory. This macro initializes struct drm_simple_display_pipe_funcs to use the rsp helper functions.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhj&ubeh}(h]h ]h"]h$]h&]uh1ja=hj<hKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_gem_plane_helper_prepare_fb (C function)!c.drm_gem_plane_helper_prepare_fbhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h\int drm_gem_plane_helper_prepare_fb (struct drm_plane *plane, struct drm_plane_state *state)h]j)}(h[int drm_gem_plane_helper_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_gem_plane_helper_prepare_fbh]j)}(hdrm_gem_plane_helper_prepare_fbh]hdrm_gem_plane_helper_prepare_fb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h8(struct drm_plane *plane, struct drm_plane_state *state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb!c.drm_gem_plane_helper_prepare_fbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j!c.drm_gem_plane_helper_prepare_fbasbuh1hhj4ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jhjhKhj~hhubj)}(hhh]h)}(h Prepare a GEM backed framebufferh]h Prepare a GEM backed framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKvhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXx**Parameters** ``struct drm_plane *plane`` Plane ``struct drm_plane_state *state`` Plane state the fence will be attached to **Description** This function extracts the exclusive fence from :c:type:`drm_gem_object.resv ` and attaches it to plane state for the atomic helper to wait on. This is necessary to correctly implement implicit synchronization for any buffers shared as a struct :c:type:`dma_buf`. This function can be used as the :c:type:`drm_plane_helper_funcs.prepare_fb ` callback. There is no need for :c:type:`drm_plane_helper_funcs.cleanup_fb ` hook for simple GEM based framebuffer drivers which have their buffers always pinned in memory. This function is the default implementation for GEM drivers of :c:type:`drm_plane_helper_funcs.prepare_fb ` if no callback is provided.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKzhjubji)}(hhh](jn)}(h"``struct drm_plane *plane`` Plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKwhjubj)}(hhh]h)}(hPlaneh]hPlane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKwhjubjn)}(hL``struct drm_plane_state *state`` Plane state the fence will be attached to h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hj3h]hstruct drm_plane_state *state}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKxhj-ubj)}(hhh]h)}(h)Plane state the fence will be attached toh]h)Plane state the fence will be attached to}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKxhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhKxhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKzhjubh)}(hXThis function extracts the exclusive fence from :c:type:`drm_gem_object.resv ` and attaches it to plane state for the atomic helper to wait on. This is necessary to correctly implement implicit synchronization for any buffers shared as a struct :c:type:`dma_buf`. This function can be used as the :c:type:`drm_plane_helper_funcs.prepare_fb ` callback.h](h0This function extracts the exclusive fence from }(hjhhhNhNubh)}(h.:c:type:`drm_gem_object.resv `h]jz)}(hjh]hdrm_gem_object.resv}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_gem_objectuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKzhjubh and attaches it to plane state for the atomic helper to wait on. This is necessary to correctly implement implicit synchronization for any buffers shared as a struct }(hjhhhNhNubh)}(h:c:type:`dma_buf`h]jz)}(hjh]hdma_buf}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdma_bufuh1hhjhKzhjubh#. This function can be used as the }(hjhhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.prepare_fb `h]jz)}(hjh]h!drm_plane_helper_funcs.prepare_fb}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjhKzhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKzhjubh)}(hThere is no need for :c:type:`drm_plane_helper_funcs.cleanup_fb ` hook for simple GEM based framebuffer drivers which have their buffers always pinned in memory.h](hThere is no need for }(hjhhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.cleanup_fb `h]jz)}(hjh]h!drm_plane_helper_funcs.cleanup_fb}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubh` hook for simple GEM based framebuffer drivers which have their buffers always pinned in memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hKhjubh)}(hThis function is the default implementation for GEM drivers of :c:type:`drm_plane_helper_funcs.prepare_fb ` if no callback is provided.h](h?This function is the default implementation for GEM drivers of }(hj.hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.prepare_fb `h]jz)}(hj8h]h!drm_plane_helper_funcs.prepare_fb}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhj.ubh if no callback is provided.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3__drm_gem_duplicate_shadow_plane_state (C function)(c.__drm_gem_duplicate_shadow_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h|void __drm_gem_duplicate_shadow_plane_state (struct drm_plane *plane, struct drm_shadow_plane_state *new_shadow_plane_state)h]j)}(h{void __drm_gem_duplicate_shadow_plane_state(struct drm_plane *plane, struct drm_shadow_plane_state *new_shadow_plane_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhKubj)}(h&__drm_gem_duplicate_shadow_plane_stateh]j)}(h&__drm_gem_duplicate_shadow_plane_stateh]h&__drm_gem_duplicate_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhKubj)}(hP(struct drm_plane *plane, struct drm_shadow_plane_state *new_shadow_plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb(c.__drm_gem_duplicate_shadow_plane_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h5struct drm_shadow_plane_state *new_shadow_plane_stateh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hdrm_shadow_plane_stateh]hdrm_shadow_plane_state}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j(c.__drm_gem_duplicate_shadow_plane_stateasbuh1hhj+ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hnew_shadow_plane_stateh]hnew_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhKubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjuhhubj)}(hhh]h)}(h&duplicates shadow-buffered plane stateh]h&duplicates shadow-buffered plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX1**Parameters** ``struct drm_plane *plane`` the plane ``struct drm_shadow_plane_state *new_shadow_plane_state`` the new shadow-buffered plane state **Description** This function duplicates shadow-buffered plane state. This is helpful for drivers that subclass struct drm_shadow_plane_state. The function does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb and cleanup_fb helpers. See drm_gem_prepare_shadow_fb() and drm_gem_cleanup_shadow_fb() for corresponding helpers.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubji)}(hhh](jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubj)}(hhh]h)}(h the planeh]h the plane}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h^``struct drm_shadow_plane_state *new_shadow_plane_state`` the new shadow-buffered plane state h](jt)}(h9``struct drm_shadow_plane_state *new_shadow_plane_state``h]jz)}(hj*h]h5struct drm_shadow_plane_state *new_shadow_plane_state}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhj$ubj)}(hhh]h)}(h#the new shadow-buffered plane stateh]h#the new shadow-buffered plane state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubh)}(h~This function duplicates shadow-buffered plane state. This is helpful for drivers that subclass struct drm_shadow_plane_state.h]h~This function duplicates shadow-buffered plane state. This is helpful for drivers that subclass struct drm_shadow_plane_state.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubh)}(hXThe function does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb and cleanup_fb helpers. See drm_gem_prepare_shadow_fb() and drm_gem_cleanup_shadow_fb() for corresponding helpers.h]hXThe function does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane’s prepare_fb and cleanup_fb helpers. See drm_gem_prepare_shadow_fb() and drm_gem_cleanup_shadow_fb() for corresponding helpers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_gem_duplicate_shadow_plane_state (C function)&c.drm_gem_duplicate_shadow_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWstruct drm_plane_state * drm_gem_duplicate_shadow_plane_state (struct drm_plane *plane)h]j)}(hUstruct drm_plane_state *drm_gem_duplicate_shadow_plane_state(struct drm_plane *plane)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j$drm_gem_duplicate_shadow_plane_statesb&c.drm_gem_duplicate_shadow_plane_stateasbuh1hhjhhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKubj)}(h$drm_gem_duplicate_shadow_plane_stateh]j)}(hjh]h$drm_gem_duplicate_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j&c.drm_gem_duplicate_shadow_plane_stateasbuh1hhj/ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h&duplicates shadow-buffered plane stateh]h&duplicates shadow-buffered plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` the plane **Description** This function implements struct :c:type:`drm_plane_funcs.atomic_duplicate_state ` for shadow-buffered planes. It assumes the existing state to be of type struct drm_shadow_plane_state and it allocates the new state to be of this type. The function does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb and cleanup_fb helpers. See drm_gem_prepare_shadow_fb() and drm_gem_cleanup_shadow_fb() for corresponding helpers. **Return** A pointer to a new plane state on success, or NULL otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubji)}(hhh]jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubj)}(hhh]h)}(h the planeh]h the plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubh)}(hThis function implements struct :c:type:`drm_plane_funcs.atomic_duplicate_state ` for shadow-buffered planes. It assumes the existing state to be of type struct drm_shadow_plane_state and it allocates the new state to be of this type.h](h This function implements struct }(hjFhhhNhNubh)}(hB:c:type:`drm_plane_funcs.atomic_duplicate_state `h]jz)}(hjPh]h&drm_plane_funcs.atomic_duplicate_state}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjFubh for shadow-buffered planes. It assumes the existing state to be of type struct drm_shadow_plane_state and it allocates the new state to be of this type.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhKhjubh)}(hXThe function does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb and cleanup_fb helpers. See drm_gem_prepare_shadow_fb() and drm_gem_cleanup_shadow_fb() for corresponding helpers.h]hXThe function does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane’s prepare_fb and cleanup_fb helpers. See drm_gem_prepare_shadow_fb() and drm_gem_cleanup_shadow_fb() for corresponding helpers.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubh)}(h=A pointer to a new plane state on success, or NULL otherwise.h]h=A pointer to a new plane state on success, or NULL otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1__drm_gem_destroy_shadow_plane_state (C function)&c.__drm_gem_destroy_shadow_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h]void __drm_gem_destroy_shadow_plane_state (struct drm_shadow_plane_state *shadow_plane_state)h]j)}(h\void __drm_gem_destroy_shadow_plane_state(struct drm_shadow_plane_state *shadow_plane_state)2h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h$__drm_gem_destroy_shadow_plane_stateh]j)}(h$__drm_gem_destroy_shadow_plane_stateh]h$__drm_gem_destroy_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h3(struct drm_shadow_plane_state *shadow_plane_state)h]j)}(h1struct drm_shadow_plane_state *shadow_plane_stateh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_shadow_plane_stateh]hdrm_shadow_plane_state}(hj) hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+ modnameN classnameNjj)}j]j%)}jjsb&c.__drm_gem_destroy_shadow_plane_stateasbuh1hhj ubj)}(h h]h }(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjW hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hshadow_plane_stateh]hshadow_plane_state}(hjd hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h%cleans up shadow-buffered plane stateh]h%cleans up shadow-buffered plane state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_shadow_plane_state *shadow_plane_state`` the shadow-buffered plane state **Description** This function cleans up shadow-buffered plane state. Helpful for drivers that subclass struct drm_shadow_plane_state.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubji)}(hhh]jn)}(hV``struct drm_shadow_plane_state *shadow_plane_state`` the shadow-buffered plane state h](jt)}(h5``struct drm_shadow_plane_state *shadow_plane_state``h]jz)}(hj h]h1struct drm_shadow_plane_state *shadow_plane_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM hj ubj)}(hhh]h)}(hthe shadow-buffered plane stateh]hthe shadow-buffered plane state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubh)}(huThis function cleans up shadow-buffered plane state. Helpful for drivers that subclass struct drm_shadow_plane_state.h]huThis function cleans up shadow-buffered plane state. Helpful for drivers that subclass struct drm_shadow_plane_state.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_gem_destroy_shadow_plane_state (C function)$c.drm_gem_destroy_shadow_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hfvoid drm_gem_destroy_shadow_plane_state (struct drm_plane *plane, struct drm_plane_state *plane_state)h]j)}(hevoid drm_gem_destroy_shadow_plane_state(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjO hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM"ubj)}(h h]h }(hj^ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK hhhj] hM"ubj)}(h"drm_gem_destroy_shadow_plane_stateh]j)}(h"drm_gem_destroy_shadow_plane_stateh]h"drm_gem_destroy_shadow_plane_state}(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjK hhhj] hM"ubj)}(h>(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjr sb$c.drm_gem_destroy_shadow_plane_stateasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hplaneh]hplane}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j $c.drm_gem_destroy_shadow_plane_stateasbuh1hhj ubj)}(h h]h }(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjH hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(h plane_stateh]h plane_state}(hjU hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjK hhhj] hM"ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjG hhhj] hM"ubah}(h]jB ah ](jjeh"]h$]h&]jj)jhuh1jhj] hM"hjD hhubj)}(hhh]h)}(h#deletes shadow-buffered plane stateh]h#deletes shadow-buffered plane state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj| hhubah}(h]h ]h"]h$]h&]uh1jhjD hhhj] hM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hXn**Parameters** ``struct drm_plane *plane`` the plane ``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state **Description** This function implements struct :c:type:`drm_plane_funcs.atomic_destroy_state ` for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubji)}(hhh](jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hj h]hstruct drm_plane *plane}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubj)}(hhh]h)}(h the planeh]h the plane}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(h^``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hj h]h#struct drm_plane_state *plane_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hj4 h]h Description}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2 ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj ubh)}(hThis function implements struct :c:type:`drm_plane_funcs.atomic_destroy_state ` for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.h](h This function implements struct }(hjJ hhhNhNubh)}(h@:c:type:`drm_plane_funcs.atomic_destroy_state `h]jz)}(hjT h]h$drm_plane_funcs.atomic_destroy_state}(hjV hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjR ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjJ ubhc for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.}(hjJ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjq hMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)__drm_gem_reset_shadow_plane (C function)c.__drm_gem_reset_shadow_planehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hnvoid __drm_gem_reset_shadow_plane (struct drm_plane *plane, struct drm_shadow_plane_state *shadow_plane_state)h]j)}(hmvoid __drm_gem_reset_shadow_plane(struct drm_plane *plane, struct drm_shadow_plane_state *shadow_plane_state)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM5ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM5ubj)}(h__drm_gem_reset_shadow_planeh]j)}(h__drm_gem_reset_shadow_planeh]h__drm_gem_reset_shadow_plane}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hM5ubj)}(hL(struct drm_plane *plane, struct drm_shadow_plane_state *shadow_plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jj sbc.__drm_gem_reset_shadow_planeasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj% hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hplaneh]hplane}(hj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h1struct drm_shadow_plane_state *shadow_plane_stateh](j)}(hjh]hstruct}(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubh)}(hhh]j)}(hdrm_shadow_plane_stateh]hdrm_shadow_plane_state}(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjk modnameN classnameNjj)}j]j c.__drm_gem_reset_shadow_planeasbuh1hhjG ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjG ubj)}(hshadow_plane_stateh]hshadow_plane_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hM5ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hM5ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hM5hj hhubj)}(hhh]h)}(hresets a shadow-buffered planeh]hresets a shadow-buffered plane}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM.hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` the plane ``struct drm_shadow_plane_state *shadow_plane_state`` the shadow-buffered plane state **Description** This function resets state for shadow-buffered planes. Helpful for drivers that subclass struct drm_shadow_plane_state.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM2hj ubji)}(hhh](jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hj h]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM/hjubj)}(hhh]h)}(h the planeh]h the plane}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM/hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hM/hjubjn)}(hV``struct drm_shadow_plane_state *shadow_plane_state`` the shadow-buffered plane state h](jt)}(h5``struct drm_shadow_plane_state *shadow_plane_state``h]jz)}(hjFh]h1struct drm_shadow_plane_state *shadow_plane_state}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM0hj@ubj)}(hhh]h)}(hthe shadow-buffered plane stateh]hthe shadow-buffered plane state}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM0hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hM0hjubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM2hj ubh)}(hwThis function resets state for shadow-buffered planes. Helpful for drivers that subclass struct drm_shadow_plane_state.h]hwThis function resets state for shadow-buffered planes. Helpful for drivers that subclass struct drm_shadow_plane_state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM2hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_reset_shadow_plane (C function)c.drm_gem_reset_shadow_planehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h9void drm_gem_reset_shadow_plane (struct drm_plane *plane)h]j)}(h8void drm_gem_reset_shadow_plane(struct drm_plane *plane)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMFubj)}(hdrm_gem_reset_shadow_planeh]j)}(hdrm_gem_reset_shadow_planeh]hdrm_gem_reset_shadow_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMFubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j%)}jjsbc.drm_gem_reset_shadow_planeasbuh1hhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjOhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMFubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMFubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMFhjhhubj)}(hhh]h)}(hresets a shadow-buffered planeh]hresets a shadow-buffered plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX3**Parameters** ``struct drm_plane *plane`` the plane **Description** This function implements struct :c:type:`drm_plane_funcs.reset_plane ` for shadow-buffered planes. It assumes the current plane state to be of type struct drm_shadow_plane and it allocates the new state of this type.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMBhjubji)}(hhh]jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM?hjubj)}(hhh]h)}(h the planeh]h the plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMAhjubh)}(hThis function implements struct :c:type:`drm_plane_funcs.reset_plane ` for shadow-buffered planes. It assumes the current plane state to be of type struct drm_shadow_plane and it allocates the new state of this type.h](h This function implements struct }(hjhhhNhNubh)}(h7:c:type:`drm_plane_funcs.reset_plane `h]jz)}(hj"h]hdrm_plane_funcs.reset_plane}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMAhjubh for shadow-buffered planes. It assumes the current plane state to be of type struct drm_shadow_plane and it allocates the new state of this type.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_gem_begin_shadow_fb_access (C function) c.drm_gem_begin_shadow_fb_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(haint drm_gem_begin_shadow_fb_access (struct drm_plane *plane, struct drm_plane_state *plane_state)h]j)}(h`int drm_gem_begin_shadow_fb_access(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMeubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhMeubj)}(hdrm_gem_begin_shadow_fb_accessh]j)}(hdrm_gem_begin_shadow_fb_accessh]hdrm_gem_begin_shadow_fb_access}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjxhMeubj)}(h>(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb c.drm_gem_begin_shadow_fb_accessasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j c.drm_gem_begin_shadow_fb_accessasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjfhhhjxhMeubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjbhhhjxhMeubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhjxhMehj_hhubj)}(hhh]h)}(h+prepares shadow framebuffers for CPU accessh]h+prepares shadow framebuffers for CPU access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjxhMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` the plane ``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state **Description** This function implements struct :c:type:`drm_plane_helper_funcs.begin_fb_access `. It maps all buffer objects of the plane's framebuffer into kernel address space and stores them in struct :c:type:`drm_shadow_plane_state.map `. The first data bytes are available in struct :c:type:`drm_shadow_plane_state.data `. See drm_gem_end_shadow_fb_access() for cleanup. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM[hjubji)}(hhh](jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMXhjubj)}(hhh]h)}(h the planeh]h the plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMXhjubjn)}(h^``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMYhjubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMYhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj)hMYhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM[hjubh)}(hXThis function implements struct :c:type:`drm_plane_helper_funcs.begin_fb_access `. It maps all buffer objects of the plane's framebuffer into kernel address space and stores them in struct :c:type:`drm_shadow_plane_state.map `. The first data bytes are available in struct :c:type:`drm_shadow_plane_state.data `.h](h This function implements struct }(hjehhhNhNubh)}(hI:c:type:`drm_plane_helper_funcs.begin_fb_access `h]jz)}(hjoh]h&drm_plane_helper_funcs.begin_fb_access}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM[hjeubhn. It maps all buffer objects of the plane’s framebuffer into kernel address space and stores them in struct }(hjehhhNhNubh)}(h=:c:type:`drm_shadow_plane_state.map `h]jz)}(hjh]hdrm_shadow_plane_state.map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_shadow_plane_stateuh1hhjhM[hjeubh/. The first data bytes are available in struct }(hjehhhNhNubh)}(h>:c:type:`drm_shadow_plane_state.data `h]jz)}(hjh]hdrm_shadow_plane_state.data}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_shadow_plane_stateuh1hhjhM[hjeubh.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM[hjubh)}(h/See drm_gem_end_shadow_fb_access() for cleanup.h]h/See drm_gem_end_shadow_fb_access() for cleanup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM`hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMbhjubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gem_end_shadow_fb_access (C function)c.drm_gem_end_shadow_fb_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(h`void drm_gem_end_shadow_fb_access (struct drm_plane *plane, struct drm_plane_state *plane_state)h]j)}(h_void drm_gem_end_shadow_fb_access(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM{ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhM{ubj)}(hdrm_gem_end_shadow_fb_accessh]j)}(hdrm_gem_end_shadow_fb_accessh]hdrm_gem_end_shadow_fb_access}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhM{ubj)}(h>(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjVsbc.drm_gem_end_shadow_fb_accessasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_end_shadow_fb_accessasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubeh}(h]h ]h"]h$]h&]jjuh1jhj/hhhjAhM{ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhjAhM{ubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhjAhM{hj(hhubj)}(hhh]h)}(h,releases shadow framebuffers from CPU accessh]h,releases shadow framebuffers from CPU access}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMrhj`hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` the plane ``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state **Description** This function implements struct :c:type:`drm_plane_helper_funcs.end_fb_access `. It undoes all effects of drm_gem_begin_shadow_fb_access() in reverse order. See drm_gem_begin_shadow_fb_access() for more information.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMvhjubji)}(hhh](jn)}(h&``struct drm_plane *plane`` the plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMshjubj)}(hhh]h)}(h the planeh]h the plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMshjubjn)}(h^``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMthjubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMthjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMvhjubh)}(hThis function implements struct :c:type:`drm_plane_helper_funcs.end_fb_access `. It undoes all effects of drm_gem_begin_shadow_fb_access() in reverse order.h](h This function implements struct }(hj.hhhNhNubh)}(hG:c:type:`drm_plane_helper_funcs.end_fb_access `h]jz)}(hj8h]h$drm_plane_helper_funcs.end_fb_access}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMvhj.ubhM. It undoes all effects of drm_gem_begin_shadow_fb_access() in reverse order.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMvhjubh)}(h:See drm_gem_begin_shadow_fb_access() for more information.h]h:See drm_gem_begin_shadow_fb_access() for more information.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_gem_simple_kms_begin_shadow_fb_access (C function)+c.drm_gem_simple_kms_begin_shadow_fb_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hyint drm_gem_simple_kms_begin_shadow_fb_access (struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h]j)}(hxint drm_gem_simple_kms_begin_shadow_fb_access(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h)drm_gem_simple_kms_begin_shadow_fb_accessh]j)}(h)drm_gem_simple_kms_begin_shadow_fb_accessh]h)drm_gem_simple_kms_begin_shadow_fb_access}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hK(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb+c.drm_gem_simple_kms_begin_shadow_fb_accessasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j+c.drm_gem_simple_kms_begin_shadow_fb_accessasbuh1hhj:ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h+prepares shadow framebuffers for CPU accessh]h+prepares shadow framebuffers for CPU access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_simple_display_pipe *pipe`` the simple display pipe ``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state **Description** This function implements struct drm_simple_display_funcs.begin_fb_access. See drm_gem_begin_shadow_fb_access() for details and drm_gem_simple_kms_cleanup_shadow_fb() for cleanup. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubji)}(hhh](jn)}(hA``struct drm_simple_display_pipe *pipe`` the simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjh]h$struct drm_simple_display_pipe *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h^``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hj9h]h#struct drm_plane_state *plane_state}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj3ubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhjNhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(hIThis function implements struct drm_simple_display_funcs.begin_fb_access.h]hIThis function implements struct drm_simple_display_funcs.begin_fb_access.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(hhSee drm_gem_begin_shadow_fb_access() for details and drm_gem_simple_kms_cleanup_shadow_fb() for cleanup.h]hhSee drm_gem_begin_shadow_fb_access() for details and drm_gem_simple_kms_cleanup_shadow_fb() for cleanup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_gem_simple_kms_end_shadow_fb_access (C function))c.drm_gem_simple_kms_end_shadow_fb_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hxvoid drm_gem_simple_kms_end_shadow_fb_access (struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h]j)}(hwvoid drm_gem_simple_kms_end_shadow_fb_access(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h'drm_gem_simple_kms_end_shadow_fb_accessh]j)}(h'drm_gem_simple_kms_end_shadow_fb_accessh]h'drm_gem_simple_kms_end_shadow_fb_access}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hK(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j%)}jjsb)c.drm_gem_simple_kms_end_shadow_fb_accessasbuh1hhj(ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jf)c.drm_gem_simple_kms_end_shadow_fb_accessasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h,releases shadow framebuffers from CPU accessh]h,releases shadow framebuffers from CPU access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_simple_display_pipe *pipe`` the simple display pipe ``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state **Description** This function implements struct drm_simple_display_funcs.end_fb_access. It undoes all effects of drm_gem_simple_kms_begin_shadow_fb_access() in reverse order. See drm_gem_simple_kms_begin_shadow_fb_access().h](h)}(h**Parameters**h]j%)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj;ubji)}(hhh](jn)}(hA``struct drm_simple_display_pipe *pipe`` the simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hj`h]h$struct drm_simple_display_pipe *pipe}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjZubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhMhjWubjn)}(h^``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjWubeh}(h]h ]h"]h$]h&]uh1jhhj;ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj;ubh)}(hThis function implements struct drm_simple_display_funcs.end_fb_access. It undoes all effects of drm_gem_simple_kms_begin_shadow_fb_access() in reverse order.h]hThis function implements struct drm_simple_display_funcs.end_fb_access. It undoes all effects of drm_gem_simple_kms_begin_shadow_fb_access() in reverse order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj;ubh)}(h0See drm_gem_simple_kms_begin_shadow_fb_access().h]h0See drm_gem_simple_kms_begin_shadow_fb_access().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_gem_simple_kms_reset_shadow_plane (C function)'c.drm_gem_simple_kms_reset_shadow_planehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hQvoid drm_gem_simple_kms_reset_shadow_plane (struct drm_simple_display_pipe *pipe)h]j)}(hPvoid drm_gem_simple_kms_reset_shadow_plane(struct drm_simple_display_pipe *pipe)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hMubj)}(h%drm_gem_simple_kms_reset_shadow_planeh]j)}(h%drm_gem_simple_kms_reset_shadow_planeh]h%drm_gem_simple_kms_reset_shadow_plane}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj6hMubj)}(h&(struct drm_simple_display_pipe *pipe)h]j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjKsb'c.drm_gem_simple_kms_reset_shadow_planeasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhjhhubj)}(hhh]h)}(hresets a shadow-buffered planeh]hresets a shadow-buffered plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_simple_display_pipe *pipe`` the simple display pipe **Description** This function implements struct drm_simple_display_funcs.reset_plane for shadow-buffered planes.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubji)}(hhh]jn)}(hA``struct drm_simple_display_pipe *pipe`` the simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hj)h]h$struct drm_simple_display_pipe *pipe}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj#ubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(h`This function implements struct drm_simple_display_funcs.reset_plane for shadow-buffered planes.h]h`This function implements struct drm_simple_display_funcs.reset_plane for shadow-buffered planes.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j1c.drm_gem_simple_kms_duplicate_shadow_plane_stateasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&duplicates shadow-buffered plane stateh]h&duplicates shadow-buffered plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_simple_display_pipe *pipe`` the simple display pipe **Description** This function implements struct drm_simple_display_funcs.duplicate_plane_state for shadow-buffered planes. It does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb and cleanup_fb helpers. **Return** A pointer to a new plane state on success, or NULL otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubji)}(hhh]jn)}(hA``struct drm_simple_display_pipe *pipe`` the simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjh]h$struct drm_simple_display_pipe *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(hX This function implements struct drm_simple_display_funcs.duplicate_plane_state for shadow-buffered planes. It does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane's prepare_fb and cleanup_fb helpers.h]hXThis function implements struct drm_simple_display_funcs.duplicate_plane_state for shadow-buffered planes. It does not duplicate existing mappings of the shadow buffers. Mappings are maintained during the atomic commit by the plane’s prepare_fb and cleanup_fb helpers.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(h **Return**h]j%)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(h=A pointer to a new plane state on success, or NULL otherwise.h]h=A pointer to a new plane state on success, or NULL otherwise.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j:drm_gem_simple_kms_destroy_shadow_plane_state (C function)/c.drm_gem_simple_kms_destroy_shadow_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h~void drm_gem_simple_kms_destroy_shadow_plane_state (struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h]j)}(h}void drm_gem_simple_kms_destroy_shadow_plane_state(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h-drm_gem_simple_kms_destroy_shadow_plane_stateh]j)}(h-drm_gem_simple_kms_destroy_shadow_plane_stateh]h-drm_gem_simple_kms_destroy_shadow_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hK(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb/c.drm_gem_simple_kms_destroy_shadow_plane_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j/c.drm_gem_simple_kms_destroy_shadow_plane_stateasbuh1hhj7ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h"resets shadow-buffered plane stateh]h"resets shadow-buffered plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXu**Parameters** ``struct drm_simple_display_pipe *pipe`` the simple display pipe ``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state **Description** This function implements struct drm_simple_display_funcs.destroy_plane_state for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubji)}(hhh](jn)}(hA``struct drm_simple_display_pipe *pipe`` the simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjh]h$struct drm_simple_display_pipe *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h^``struct drm_plane_state *plane_state`` the plane state of type struct drm_shadow_plane_state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hj6h]h#struct drm_plane_state *plane_state}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj0ubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubh)}(hThis function implements struct drm_simple_display_funcs.destroy_plane_state for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.h]hThis function implements struct drm_simple_display_funcs.destroy_plane_state for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]gem-atomic-helper-referenceah ]h"]gem atomic helper referenceah$]h&]uh1hhj:hhhhhKTubeh}(h]()atomic-modeset-helper-functions-referencej:eh ]h"]()atomic modeset helper functions referencedrm_atomic_helpereh$]h&]uh1hhhhhhhhK0expect_referenced_by_name}jj:sexpect_referenced_by_id}j:j:subh)}(hhh](h)}(hSimple KMS Helper Referenceh]hSimple KMS Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK`ubh)}(hMThis helper library provides helpers for drivers for simple display hardware.h]hMThis helper library provides helpers for drivers for simple display hardware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:98: ./drivers/gpu/drm/drm_simple_kms_helper.chKhjhhubh)}(hXdrm_simple_display_pipe_init() initializes a simple display pipeline which has only one full-screen scanout buffer feeding one output. The pipeline is represented by :c:type:`struct drm_simple_display_pipe ` and binds together :c:type:`drm_plane`, :c:type:`drm_crtc` and :c:type:`drm_encoder` structures into one fixed entity. Some flexibility for code reuse is provided through a separately allocated :c:type:`drm_connector` object and supporting optional :c:type:`drm_bridge` encoder drivers.h](hdrm_simple_display_pipe_init() initializes a simple display pipeline which has only one full-screen scanout buffer feeding one output. The pipeline is represented by }(hjhhhNhNubh)}(hB:c:type:`struct drm_simple_display_pipe `h]jz)}(hjh]hstruct drm_simple_display_pipe}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipeuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:98: ./drivers/gpu/drm/drm_simple_kms_helper.chKhjubh and binds together }(hjhhhNhNubh)}(h:c:type:`drm_plane`h]jz)}(hj h]h drm_plane}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_planeuh1hhjhKhjubh, }(hjhhhNhNubh)}(h:c:type:`drm_crtc`h]jz)}(hj# h]hdrm_crtc}(hj% hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj! ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtcuh1hhjhKhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjF h]h drm_encoder}(hjH hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjD ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hhjhKhjubhn structures into one fixed entity. Some flexibility for code reuse is provided through a separately allocated }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hji h]h drm_connector}(hjk hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjg ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjhKhjubh object and supporting optional }(hjhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj h]h drm_bridge}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhKhjubh encoder drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubh)}(hMany drivers require only a very simple encoder that fulfills the minimum requirements of the display pipeline and does not add additional functionality. The function drm_simple_encoder_init() provides an implementation of such an encoder.h]hMany drivers require only a very simple encoder that fulfills the minimum requirements of the display pipeline and does not add additional functionality. The function drm_simple_encoder_init() provides an implementation of such an encoder.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:98: ./drivers/gpu/drm/drm_simple_kms_helper.chKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_simple_display_pipe_funcs (C struct)c.drm_simple_display_pipe_funcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_simple_display_pipe_funcsh]j)}(h$struct drm_simple_display_pipe_funcsh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKubj)}(hdrm_simple_display_pipe_funcsh]j)}(hj h]hdrm_simple_display_pipe_funcs}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKhj hhubj)}(hhh]h)}(h/helper operations for a simple display pipelineh]h/helper operations for a simple display pipeline}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](jstructeh"]h$]h&]jjjj5!jj5!jjjuh1jhhhjhNhNubj)}(hX[**Definition**:: struct drm_simple_display_pipe_funcs { enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *pipe, const struct drm_display_mode *mode); void (*enable)(struct drm_simple_display_pipe *pipe,struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state); void (*disable)(struct drm_simple_display_pipe *pipe); int (*check)(struct drm_simple_display_pipe *pipe,struct drm_plane_state *plane_state, struct drm_crtc_state *crtc_state); void (*update)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_plane_state); int (*prepare_fb)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); void (*cleanup_fb)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); int (*begin_fb_access)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *new_plane_state); void (*end_fb_access)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); int (*enable_vblank)(struct drm_simple_display_pipe *pipe); void (*disable_vblank)(struct drm_simple_display_pipe *pipe); void (*reset_crtc)(struct drm_simple_display_pipe *pipe); struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *pipe); void (*destroy_crtc_state)(struct drm_simple_display_pipe *pipe, struct drm_crtc_state *crtc_state); void (*reset_plane)(struct drm_simple_display_pipe *pipe); struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe); void (*destroy_plane_state)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); }; **Members** ``mode_valid`` This callback is used to check if a specific mode is valid in the crtc used in this simple display pipe. This should be implemented if the display pipe has some sort of restriction in the modes it can display. For example, a given display pipe may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. Another reason can be bandwidth mitigation: the memory port on the display controller can have bandwidth limitations not allowing pixel data to be fetched at any rate. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). This function is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. RETURNS: drm_mode_status Enum ``enable`` This function should be used to enable the pipeline. It is called when the underlying crtc is enabled. This hook is optional. ``disable`` This function should be used to disable the pipeline. It is called when the underlying crtc is disabled. This hook is optional. ``check`` This function is called in the check phase of an atomic update, specifically when the underlying plane is checked. The simple display pipeline helpers already check that the plane is not scaled, fills the entire visible area and is always enabled when the crtc is also enabled. This hook is optional. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. ``update`` This function is called when the underlying plane state is updated. This hook is optional. This is the function drivers should submit the :c:type:`drm_pending_vblank_event` from. Using either drm_crtc_arm_vblank_event(), when the driver supports vblank interrupt handling, or drm_crtc_send_vblank_event() for more complex case. In case the hardware lacks vblank support entirely, drivers can set :c:type:`struct drm_crtc_state `.no_vblank in :c:type:`struct drm_simple_display_pipe_funcs `.check and let DRM's atomic helper fake a vblank event. ``prepare_fb`` Optional, called by :c:type:`drm_plane_helper_funcs.prepare_fb `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.prepare_fb ` hook for more details. For GEM drivers who neither have a **prepare_fb** nor **cleanup_fb** hook set, drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their **prepare_fb** hook. ``cleanup_fb`` Optional, called by :c:type:`drm_plane_helper_funcs.cleanup_fb `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.cleanup_fb ` hook for more details. ``begin_fb_access`` Optional, called by :c:type:`drm_plane_helper_funcs.begin_fb_access `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.begin_fb_access ` hook for more details. ``end_fb_access`` Optional, called by :c:type:`drm_plane_helper_funcs.end_fb_access `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.end_fb_access ` hook for more details. ``enable_vblank`` Optional, called by :c:type:`drm_crtc_funcs.enable_vblank `. Please read the documentation for the :c:type:`drm_crtc_funcs.enable_vblank ` hook for more details. ``disable_vblank`` Optional, called by :c:type:`drm_crtc_funcs.disable_vblank `. Please read the documentation for the :c:type:`drm_crtc_funcs.disable_vblank ` hook for more details. ``reset_crtc`` Optional, called by :c:type:`drm_crtc_funcs.reset `. Please read the documentation for the :c:type:`drm_crtc_funcs.reset ` hook for more details. ``duplicate_crtc_state`` Optional, called by :c:type:`drm_crtc_funcs.atomic_duplicate_state `. Please read the documentation for the :c:type:`drm_crtc_funcs.atomic_duplicate_state ` hook for more details. ``destroy_crtc_state`` Optional, called by :c:type:`drm_crtc_funcs.atomic_destroy_state `. Please read the documentation for the :c:type:`drm_crtc_funcs.atomic_destroy_state ` hook for more details. ``reset_plane`` Optional, called by :c:type:`drm_plane_funcs.reset `. Please read the documentation for the :c:type:`drm_plane_funcs.reset ` hook for more details. ``duplicate_plane_state`` Optional, called by :c:type:`drm_plane_funcs.atomic_duplicate_state `. Please read the documentation for the :c:type:`drm_plane_funcs.atomic_duplicate_state ` hook for more details. ``destroy_plane_state`` Optional, called by :c:type:`drm_plane_funcs.atomic_destroy_state `. Please read the documentation for the :c:type:`drm_plane_funcs.atomic_destroy_state ` hook for more details.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjA!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=!ubh:}(hj=!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj9!ubj@)}(hX\struct drm_simple_display_pipe_funcs { enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *pipe, const struct drm_display_mode *mode); void (*enable)(struct drm_simple_display_pipe *pipe,struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state); void (*disable)(struct drm_simple_display_pipe *pipe); int (*check)(struct drm_simple_display_pipe *pipe,struct drm_plane_state *plane_state, struct drm_crtc_state *crtc_state); void (*update)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_plane_state); int (*prepare_fb)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); void (*cleanup_fb)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); int (*begin_fb_access)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *new_plane_state); void (*end_fb_access)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); int (*enable_vblank)(struct drm_simple_display_pipe *pipe); void (*disable_vblank)(struct drm_simple_display_pipe *pipe); void (*reset_crtc)(struct drm_simple_display_pipe *pipe); struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *pipe); void (*destroy_crtc_state)(struct drm_simple_display_pipe *pipe, struct drm_crtc_state *crtc_state); void (*reset_plane)(struct drm_simple_display_pipe *pipe); struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe); void (*destroy_plane_state)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); };h]hX\struct drm_simple_display_pipe_funcs { enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *pipe, const struct drm_display_mode *mode); void (*enable)(struct drm_simple_display_pipe *pipe,struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state); void (*disable)(struct drm_simple_display_pipe *pipe); int (*check)(struct drm_simple_display_pipe *pipe,struct drm_plane_state *plane_state, struct drm_crtc_state *crtc_state); void (*update)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_plane_state); int (*prepare_fb)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); void (*cleanup_fb)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); int (*begin_fb_access)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *new_plane_state); void (*end_fb_access)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); int (*enable_vblank)(struct drm_simple_display_pipe *pipe); void (*disable_vblank)(struct drm_simple_display_pipe *pipe); void (*reset_crtc)(struct drm_simple_display_pipe *pipe); struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *pipe); void (*destroy_crtc_state)(struct drm_simple_display_pipe *pipe, struct drm_crtc_state *crtc_state); void (*reset_plane)(struct drm_simple_display_pipe *pipe); struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe); void (*destroy_plane_state)(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state); };}hjZ!sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj9!ubh)}(h **Members**h]j%)}(hjk!h]hMembers}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hji!ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK*hj9!ubji)}(hhh](jn)}(hX``mode_valid`` This callback is used to check if a specific mode is valid in the crtc used in this simple display pipe. This should be implemented if the display pipe has some sort of restriction in the modes it can display. For example, a given display pipe may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. Another reason can be bandwidth mitigation: the memory port on the display controller can have bandwidth limitations not allowing pixel data to be fetched at any rate. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). This function is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. RETURNS: drm_mode_status Enum h](jt)}(h``mode_valid``h]jz)}(hj!h]h mode_valid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK1hj!ubj)}(hhh](h)}(hXoThis callback is used to check if a specific mode is valid in the crtc used in this simple display pipe. This should be implemented if the display pipe has some sort of restriction in the modes it can display. For example, a given display pipe may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. Another reason can be bandwidth mitigation: the memory port on the display controller can have bandwidth limitations not allowing pixel data to be fetched at any rate.h]hXoThis callback is used to check if a specific mode is valid in the crtc used in this simple display pipe. This should be implemented if the display pipe has some sort of restriction in the modes it can display. For example, a given display pipe may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. Another reason can be bandwidth mitigation: the memory port on the display controller can have bandwidth limitations not allowing pixel data to be fetched at any rate.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj!ubh)}(hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().h]hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK!hj!ubh)}(hThis function is optional.h]hThis function is optional.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK&hj!ubh)}(hNOTE:h]hNOTE:}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK(hj!ubh)}(hXSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints.h]hXSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK*hj!ubh)}(hRETURNS:h]hRETURNS:}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK/hj!ubh)}(hdrm_mode_status Enumh]hdrm_mode_status Enum}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK1hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hK1hj!ubjn)}(h``enable`` This function should be used to enable the pipeline. It is called when the underlying crtc is enabled. This hook is optional. h](jt)}(h ``enable``h]jz)}(hj"h]henable}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK;hj"ubj)}(hhh]h)}(h}This function should be used to enable the pipeline. It is called when the underlying crtc is enabled. This hook is optional.h]h}This function should be used to enable the pipeline. It is called when the underlying crtc is enabled. This hook is optional.}(hj6"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK9hj3"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj2"hK;hj!ubjn)}(h``disable`` This function should be used to disable the pipeline. It is called when the underlying crtc is disabled. This hook is optional. h](jt)}(h ``disable``h]jz)}(hjW"h]hdisable}(hjY"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU"ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKEhjQ"ubj)}(hhh]h)}(hThis function should be used to disable the pipeline. It is called when the underlying crtc is disabled. This hook is optional.h]hThis function should be used to disable the pipeline. It is called when the underlying crtc is disabled. This hook is optional.}(hjp"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKChjm"ubah}(h]h ]h"]h$]h&]uh1jhjQ"ubeh}(h]h ]h"]h$]h&]uh1jmhjl"hKEhj!ubjn)}(hX``check`` This function is called in the check phase of an atomic update, specifically when the underlying plane is checked. The simple display pipeline helpers already check that the plane is not scaled, fills the entire visible area and is always enabled when the crtc is also enabled. This hook is optional. RETURNS: 0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock. h](jt)}(h ``check``h]jz)}(hj"h]hcheck}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKXhj"ubj)}(hhh](h)}(hX,This function is called in the check phase of an atomic update, specifically when the underlying plane is checked. The simple display pipeline helpers already check that the plane is not scaled, fills the entire visible area and is always enabled when the crtc is also enabled. This hook is optional.h]hX,This function is called in the check phase of an atomic update, specifically when the underlying plane is checked. The simple display pipeline helpers already check that the plane is not scaled, fills the entire visible area and is always enabled when the crtc is also enabled. This hook is optional.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKLhj"ubh)}(hRETURNS:h]hRETURNS:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKShj"ubh)}(h0 on success, -EINVAL if the state or the transition can't be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a :c:type:`drm_modeset_lock` deadlock.h](h0 on success, -EINVAL if the state or the transition can’t be supported, -ENOMEM on memory allocation failure and -EDEADLK if an attempt to obtain another state object ran into a }(hj"hhhNhNubh)}(h:c:type:`drm_modeset_lock`h]jz)}(hj"h]hdrm_modeset_lock}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_modeset_lockuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKUhj"ubh deadlock.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hKUhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj"hKXhj!ubjn)}(hX\``update`` This function is called when the underlying plane state is updated. This hook is optional. This is the function drivers should submit the :c:type:`drm_pending_vblank_event` from. Using either drm_crtc_arm_vblank_event(), when the driver supports vblank interrupt handling, or drm_crtc_send_vblank_event() for more complex case. In case the hardware lacks vblank support entirely, drivers can set :c:type:`struct drm_crtc_state `.no_vblank in :c:type:`struct drm_simple_display_pipe_funcs `.check and let DRM's atomic helper fake a vblank event. h](jt)}(h ``update``h]jz)}(hj #h]hupdate}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj #ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKjhj#ubj)}(hhh](h)}(hZThis function is called when the underlying plane state is updated. This hook is optional.h]hZThis function is called when the underlying plane state is updated. This hook is optional.}(hj%#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhK`hj"#ubh)}(hXThis is the function drivers should submit the :c:type:`drm_pending_vblank_event` from. Using either drm_crtc_arm_vblank_event(), when the driver supports vblank interrupt handling, or drm_crtc_send_vblank_event() for more complex case. In case the hardware lacks vblank support entirely, drivers can set :c:type:`struct drm_crtc_state `.no_vblank in :c:type:`struct drm_simple_display_pipe_funcs `.check and let DRM's atomic helper fake a vblank event.h](h/This is the function drivers should submit the }(hj4#hhhNhNubh)}(h":c:type:`drm_pending_vblank_event`h]jz)}(hj>#h]hdrm_pending_vblank_event}(hj@#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj<#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_pending_vblank_eventuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKchj4#ubh from. Using either drm_crtc_arm_vblank_event(), when the driver supports vblank interrupt handling, or drm_crtc_send_vblank_event() for more complex case. In case the hardware lacks vblank support entirely, drivers can set }(hj4#hhhNhNubh)}(h0:c:type:`struct drm_crtc_state `h]jz)}(hjb#h]hstruct drm_crtc_state}(hjd#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhj[#hKchj4#ubh.no_vblank in }(hj4#hhhNhNubh)}(hN:c:type:`struct drm_simple_display_pipe_funcs `h]jz)}(hj#h]h$struct drm_simple_display_pipe_funcs}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhj[#hKchj4#ubh9.check and let DRM’s atomic helper fake a vblank event.}(hj4#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[#hKchj"#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj!#hKjhj!ubjn)}(hX ``prepare_fb`` Optional, called by :c:type:`drm_plane_helper_funcs.prepare_fb `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.prepare_fb ` hook for more details. For GEM drivers who neither have a **prepare_fb** nor **cleanup_fb** hook set, drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their **prepare_fb** hook. h](jt)}(h``prepare_fb``h]jz)}(hj#h]h prepare_fb}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKzhj#ubj)}(hhh](h)}(hOptional, called by :c:type:`drm_plane_helper_funcs.prepare_fb `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.prepare_fb ` hook for more details.h](hOptional, called by }(hj#hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.prepare_fb `h]jz)}(hj#h]h!drm_plane_helper_funcs.prepare_fb}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKrhj#ubh). Please read the documentation for the }(hj#hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.prepare_fb `h]jz)}(hj$h]h!drm_plane_helper_funcs.prepare_fb}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhj#hKrhj#ubh hook for more details.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hKrhj#ubh)}(hXFor GEM drivers who neither have a **prepare_fb** nor **cleanup_fb** hook set, drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their **prepare_fb** hook.h](h#For GEM drivers who neither have a }(hj,$hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hj4$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,$ubh nor }(hj,$hhhNhNubj%)}(h**cleanup_fb**h]h cleanup_fb}(hjF$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,$ubh hook set, drm_gem_plane_helper_prepare_fb() is called automatically to implement this. Other drivers which need additional plane processing can call drm_gem_plane_helper_prepare_fb() from their }(hj,$hhhNhNubj%)}(h**prepare_fb**h]h prepare_fb}(hjX$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,$ubh hook.}(hj,$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKvhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj#hKzhj!ubjn)}(h``cleanup_fb`` Optional, called by :c:type:`drm_plane_helper_funcs.cleanup_fb `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.cleanup_fb ` hook for more details. h](jt)}(h``cleanup_fb``h]jz)}(hj$h]h cleanup_fb}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj}$ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_plane_helper_funcs.cleanup_fb `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.cleanup_fb ` hook for more details.h](hOptional, called by }(hj$hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.cleanup_fb `h]jz)}(hj$h]h!drm_plane_helper_funcs.cleanup_fb}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj$ubh). Please read the documentation for the }(hj$hhhNhNubh)}(hD:c:type:`drm_plane_helper_funcs.cleanup_fb `h]jz)}(hj$h]h!drm_plane_helper_funcs.cleanup_fb}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhj$hKhj$ubh hook for more details.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhj}$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hKhj!ubjn)}(h``begin_fb_access`` Optional, called by :c:type:`drm_plane_helper_funcs.begin_fb_access `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.begin_fb_access ` hook for more details. h](jt)}(h``begin_fb_access``h]jz)}(hj%h]hbegin_fb_access}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj$ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_plane_helper_funcs.begin_fb_access `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.begin_fb_access ` hook for more details.h](hOptional, called by }(hj%hhhNhNubh)}(hI:c:type:`drm_plane_helper_funcs.begin_fb_access `h]jz)}(hj&%h]h&drm_plane_helper_funcs.begin_fb_access}(hj(%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj%ubh(. Please read the documentation for the }(hj%hhhNhNubh)}(hI:c:type:`drm_plane_helper_funcs.begin_fb_access `h]jz)}(hjJ%h]h&drm_plane_helper_funcs.begin_fb_access}(hjL%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjC%hKhj%ubh hook for more details.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj%hKhj!ubjn)}(h``end_fb_access`` Optional, called by :c:type:`drm_plane_helper_funcs.end_fb_access `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.end_fb_access ` hook for more details. h](jt)}(h``end_fb_access``h]jz)}(hj%h]h end_fb_access}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj}%ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_plane_helper_funcs.end_fb_access `. Please read the documentation for the :c:type:`drm_plane_helper_funcs.end_fb_access ` hook for more details.h](hOptional, called by }(hj%hhhNhNubh)}(hG:c:type:`drm_plane_helper_funcs.end_fb_access `h]jz)}(hj%h]h$drm_plane_helper_funcs.end_fb_access}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj%ubh(. Please read the documentation for the }(hj%hhhNhNubh)}(hG:c:type:`drm_plane_helper_funcs.end_fb_access `h]jz)}(hj%h]h$drm_plane_helper_funcs.end_fb_access}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhj%hKhj%ubh hook for more details.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj}%ubeh}(h]h ]h"]h$]h&]uh1jmhj%hKhj!ubjn)}(h``enable_vblank`` Optional, called by :c:type:`drm_crtc_funcs.enable_vblank `. Please read the documentation for the :c:type:`drm_crtc_funcs.enable_vblank ` hook for more details. h](jt)}(h``enable_vblank``h]jz)}(hj&h]h enable_vblank}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj%ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_crtc_funcs.enable_vblank `. Please read the documentation for the :c:type:`drm_crtc_funcs.enable_vblank ` hook for more details.h](hOptional, called by }(hj&hhhNhNubh)}(h7:c:type:`drm_crtc_funcs.enable_vblank `h]jz)}(hj&&h]hdrm_crtc_funcs.enable_vblank}(hj(&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj&ubh(. Please read the documentation for the }(hj&hhhNhNubh)}(h7:c:type:`drm_crtc_funcs.enable_vblank `h]jz)}(hjJ&h]hdrm_crtc_funcs.enable_vblank}(hjL&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjC&hKhj&ubh hook for more details.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj&hKhj!ubjn)}(h``disable_vblank`` Optional, called by :c:type:`drm_crtc_funcs.disable_vblank `. Please read the documentation for the :c:type:`drm_crtc_funcs.disable_vblank ` hook for more details. h](jt)}(h``disable_vblank``h]jz)}(hj&h]hdisable_vblank}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj}&ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_crtc_funcs.disable_vblank `. Please read the documentation for the :c:type:`drm_crtc_funcs.disable_vblank ` hook for more details.h](hOptional, called by }(hj&hhhNhNubh)}(h8:c:type:`drm_crtc_funcs.disable_vblank `h]jz)}(hj&h]hdrm_crtc_funcs.disable_vblank}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj&ubh(. Please read the documentation for the }(hj&hhhNhNubh)}(h8:c:type:`drm_crtc_funcs.disable_vblank `h]jz)}(hj&h]hdrm_crtc_funcs.disable_vblank}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhj&hKhj&ubh hook for more details.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj}&ubeh}(h]h ]h"]h$]h&]uh1jmhj&hKhj!ubjn)}(h``reset_crtc`` Optional, called by :c:type:`drm_crtc_funcs.reset `. Please read the documentation for the :c:type:`drm_crtc_funcs.reset ` hook for more details. h](jt)}(h``reset_crtc``h]jz)}(hj'h]h reset_crtc}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj&ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_crtc_funcs.reset `. Please read the documentation for the :c:type:`drm_crtc_funcs.reset ` hook for more details.h](hOptional, called by }(hj'hhhNhNubh)}(h/:c:type:`drm_crtc_funcs.reset `h]jz)}(hj&'h]hdrm_crtc_funcs.reset}(hj('hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj'ubh(. Please read the documentation for the }(hj'hhhNhNubh)}(h/:c:type:`drm_crtc_funcs.reset `h]jz)}(hjJ'h]hdrm_crtc_funcs.reset}(hjL'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjC'hKhj'ubh hook for more details.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj'hKhj!ubjn)}(h``duplicate_crtc_state`` Optional, called by :c:type:`drm_crtc_funcs.atomic_duplicate_state `. Please read the documentation for the :c:type:`drm_crtc_funcs.atomic_duplicate_state ` hook for more details. h](jt)}(h``duplicate_crtc_state``h]jz)}(hj'h]hduplicate_crtc_state}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj}'ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_crtc_funcs.atomic_duplicate_state `. Please read the documentation for the :c:type:`drm_crtc_funcs.atomic_duplicate_state ` hook for more details.h](hOptional, called by }(hj'hhhNhNubh)}(h@:c:type:`drm_crtc_funcs.atomic_duplicate_state `h]jz)}(hj'h]h%drm_crtc_funcs.atomic_duplicate_state}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj'ubh(. Please read the documentation for the }(hj'hhhNhNubh)}(h@:c:type:`drm_crtc_funcs.atomic_duplicate_state `h]jz)}(hj'h]h%drm_crtc_funcs.atomic_duplicate_state}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhj'hKhj'ubh hook for more details.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj}'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hKhj!ubjn)}(h``destroy_crtc_state`` Optional, called by :c:type:`drm_crtc_funcs.atomic_destroy_state `. Please read the documentation for the :c:type:`drm_crtc_funcs.atomic_destroy_state ` hook for more details. h](jt)}(h``destroy_crtc_state``h]jz)}(hj(h]hdestroy_crtc_state}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj'ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_crtc_funcs.atomic_destroy_state `. Please read the documentation for the :c:type:`drm_crtc_funcs.atomic_destroy_state ` hook for more details.h](hOptional, called by }(hj(hhhNhNubh)}(h>:c:type:`drm_crtc_funcs.atomic_destroy_state `h]jz)}(hj&(h]h#drm_crtc_funcs.atomic_destroy_state}(hj((hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj(ubh(. Please read the documentation for the }(hj(hhhNhNubh)}(h>:c:type:`drm_crtc_funcs.atomic_destroy_state `h]jz)}(hjJ(h]h#drm_crtc_funcs.atomic_destroy_state}(hjL(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjC(hKhj(ubh hook for more details.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC(hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj(hKhj!ubjn)}(h``reset_plane`` Optional, called by :c:type:`drm_plane_funcs.reset `. Please read the documentation for the :c:type:`drm_plane_funcs.reset ` hook for more details. h](jt)}(h``reset_plane``h]jz)}(hj(h]h reset_plane}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj}(ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_plane_funcs.reset `. Please read the documentation for the :c:type:`drm_plane_funcs.reset ` hook for more details.h](hOptional, called by }(hj(hhhNhNubh)}(h1:c:type:`drm_plane_funcs.reset `h]jz)}(hj(h]hdrm_plane_funcs.reset}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj(ubh(. Please read the documentation for the }(hj(hhhNhNubh)}(h1:c:type:`drm_plane_funcs.reset `h]jz)}(hj(h]hdrm_plane_funcs.reset}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhj(hKhj(ubh hook for more details.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj}(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hKhj!ubjn)}(h``duplicate_plane_state`` Optional, called by :c:type:`drm_plane_funcs.atomic_duplicate_state `. Please read the documentation for the :c:type:`drm_plane_funcs.atomic_duplicate_state ` hook for more details. h](jt)}(h``duplicate_plane_state``h]jz)}(hj)h]hduplicate_plane_state}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj(ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_plane_funcs.atomic_duplicate_state `. Please read the documentation for the :c:type:`drm_plane_funcs.atomic_duplicate_state ` hook for more details.h](hOptional, called by }(hj)hhhNhNubh)}(hB:c:type:`drm_plane_funcs.atomic_duplicate_state `h]jz)}(hj&)h]h&drm_plane_funcs.atomic_duplicate_state}(hj()hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj)ubh). Please read the documentation for the }(hj)hhhNhNubh)}(hB:c:type:`drm_plane_funcs.atomic_duplicate_state `h]jz)}(hjJ)h]h&drm_plane_funcs.atomic_duplicate_state}(hjL)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhjC)hKhj)ubh hook for more details.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj)hKhj!ubjn)}(h``destroy_plane_state`` Optional, called by :c:type:`drm_plane_funcs.atomic_destroy_state `. Please read the documentation for the :c:type:`drm_plane_funcs.atomic_destroy_state ` hook for more details.[h](jt)}(h``destroy_plane_state``h]jz)}(hj)h]hdestroy_plane_state}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj})ubj)}(hhh]h)}(hOptional, called by :c:type:`drm_plane_funcs.atomic_destroy_state `. Please read the documentation for the :c:type:`drm_plane_funcs.atomic_destroy_state ` hook for more details.h](hOptional, called by }(hj)hhhNhNubh)}(h@:c:type:`drm_plane_funcs.atomic_destroy_state `h]jz)}(hj)h]h$drm_plane_funcs.atomic_destroy_state}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj)ubh). Please read the documentation for the }(hj)hhhNhNubh)}(h@:c:type:`drm_plane_funcs.atomic_destroy_state `h]jz)}(hj)h]h$drm_plane_funcs.atomic_destroy_state}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhj)hKhj)ubh hook for more details.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj})ubeh}(h]h ]h"]h$]h&]uh1jmhj)hKhj!ubeh}(h]h ]h"]h$]h&]uh1jhhj9!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_simple_display_pipe (C struct)c.drm_simple_display_pipehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_simple_display_pipeh]j)}(hstruct drm_simple_display_pipeh](j)}(hjh]hstruct}(hj#*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKubj)}(h h]h }(hj1*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj0*hKubj)}(hdrm_simple_display_pipeh]j)}(hj*h]hdrm_simple_display_pipe}(hjC*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhj0*hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhj0*hKubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhj0*hKhj*hhubj)}(hhh]h)}(hsimple display pipelineh]hsimple display pipeline}(hje*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjb*hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj0*hKubeh}(h]h ](jstructeh"]h$]h&]jjjj}*jj}*jjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_simple_display_pipe { struct drm_crtc crtc; struct drm_plane plane; struct drm_encoder encoder; struct drm_connector *connector; const struct drm_simple_display_pipe_funcs *funcs; }; **Members** ``crtc`` CRTC control structure ``plane`` Plane control structure ``encoder`` Encoder control structure ``connector`` Connector control structure ``funcs`` Pipeline control functions (optional)h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubh:}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj*ubj@)}(hstruct drm_simple_display_pipe { struct drm_crtc crtc; struct drm_plane plane; struct drm_encoder encoder; struct drm_connector *connector; const struct drm_simple_display_pipe_funcs *funcs; };h]hstruct drm_simple_display_pipe { struct drm_crtc crtc; struct drm_plane plane; struct drm_encoder encoder; struct drm_connector *connector; const struct drm_simple_display_pipe_funcs *funcs; };}hj*sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj*ubh)}(h **Members**h]j%)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj*ubji)}(hhh](jn)}(h ``crtc`` CRTC control structure h](jt)}(h``crtc``h]jz)}(hj*h]hcrtc}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj*ubj)}(hhh]h)}(hCRTC control structureh]hCRTC control structure}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhj*hKhj*ubjn)}(h"``plane`` Plane control structure h](jt)}(h ``plane``h]jz)}(hj +h]hplane}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj +ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj+ubj)}(hhh]h)}(hPlane control structureh]hPlane control structure}(hj$+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj +hKhj!+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj +hKhj*ubjn)}(h&``encoder`` Encoder control structure h](jt)}(h ``encoder``h]jz)}(hjD+h]hencoder}(hjF+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB+ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj>+ubj)}(hhh]h)}(hEncoder control structureh]hEncoder control structure}(hj]+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY+hKhjZ+ubah}(h]h ]h"]h$]h&]uh1jhj>+ubeh}(h]h ]h"]h$]h&]uh1jmhjY+hKhj*ubjn)}(h*``connector`` Connector control structure h](jt)}(h ``connector``h]jz)}(hj}+h]h connector}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{+ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjw+ubj)}(hhh]h)}(hConnector control structureh]hConnector control structure}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjw+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKhj*ubjn)}(h/``funcs`` Pipeline control functions (optional)h](jt)}(h ``funcs``h]jz)}(hj+h]hfuncs}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj+ubj)}(hhh]h)}(h%Pipeline control functions (optional)h]h%Pipeline control functions (optional)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKhj*ubeh}(h]h ]h"]h$]h&]uh1jhhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjhhubh)}(hSimple display pipeline with plane, crtc and encoder collapsed into one entity. It should be initialized by calling drm_simple_display_pipe_init().h]hSimple display pipeline with plane, crtc and encoder collapsed into one entity. It should be initialized by calling drm_simple_display_pipe_init().}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drmm_simple_encoder_alloc (C macro)c.drmm_simple_encoder_allochNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrmm_simple_encoder_alloch]j)}(hdrmm_simple_encoder_alloch]j)}(hdrmm_simple_encoder_alloch]j)}(hj1,h]hdrmm_simple_encoder_alloc}(hj;,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3,hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhj/,hhhjN,hMubah}(h]j*,ah ](jjeh"]h$]h&]jj)jhuh1jhjN,hMhj,,hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj,,hhhjN,hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjg,jjg,jjjuh1jhhhjhNhNubh)}(h?``drmm_simple_encoder_alloc (dev, type, member, encoder_type)``h]jz)}(hjm,h]h;drmm_simple_encoder_alloc (dev, type, member, encoder_type)}(hjo,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjk,ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhMhjhhubjb=)}(h=Allocate and initialize an encoder with basic functionality. h]h)}(h` member. After calling drm_kms_helper_poll_init() it is safe to enable interrupts and start processing hotplug events. At the same time, drivers should initialize all modeset objects such as CRTCs, encoders and connectors. To finish up the fbdev helper initialization, the drm_fb_helper_init() function is called. To probe for all attached displays and set up an initial configuration using the detected hardware, drivers should call drm_fb_helper_initial_config().h](hX#It is possible, though perhaps somewhat tricky, to implement race-free hotplug detection using the fbdev helpers. The drm_fb_helper_prepare() helper must be called first to initialize the minimum required to make hotplug detection work. Drivers also need to make sure to properly set up the }(hj9hhhNhNubh)}(h1:c:type:`drm_mode_config.funcs `h]jz)}(hj9h]hdrm_mode_config.funcs}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_configuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:110: ./drivers/gpu/drm/drm_fb_helper.chK`hj9ubhX member. After calling drm_kms_helper_poll_init() it is safe to enable interrupts and start processing hotplug events. At the same time, drivers should initialize all modeset objects such as CRTCs, encoders and connectors. To finish up the fbdev helper initialization, the drm_fb_helper_init() function is called. To probe for all attached displays and set up an initial configuration using the detected hardware, drivers should call drm_fb_helper_initial_config().}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hK`hjq9hhubh)}(hX4If :c:type:`drm_framebuffer_funcs.dirty ` is set, the drm_fb_helper_{cfb,sys}_{write,fillrect,copyarea,imageblit} functions will accumulate changes and schedule :c:type:`drm_fb_helper.dirty_work ` to run right away. This worker then calls the dirty() function ensuring that it will always run in process context since the fb_*() function could be running in atomic context. If drm_fb_helper_deferred_io() is used as the deferred_io callback it will also schedule dirty_work with the damage collected from the mmap page writes.h](hIf }(hj9hhhNhNubh)}(h=:c:type:`drm_framebuffer_funcs.dirty `h]jz)}(hj9h]hdrm_framebuffer_funcs.dirty}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:110: ./drivers/gpu/drm/drm_fb_helper.chKlhj9ubhx is set, the drm_fb_helper_{cfb,sys}_{write,fillrect,copyarea,imageblit} functions will accumulate changes and schedule }(hj9hhhNhNubh)}(h2:c:type:`drm_fb_helper.dirty_work `h]jz)}(hj:h]hdrm_fb_helper.dirty_work}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj :ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_fb_helperuh1hhj:hKlhj9ubhXJ to run right away. This worker then calls the dirty() function ensuring that it will always run in process context since the fb_*() function could be running in atomic context. If drm_fb_helper_deferred_io() is used as the deferred_io callback it will also schedule dirty_work with the damage collected from the mmap page writes.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hKlhjq9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_helper_surface_size (C struct)c.drm_fb_helper_surface_sizehNtauh1jxhjq9hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhNubj)}(hhh](j)}(hdrm_fb_helper_surface_sizeh]j)}(h!struct drm_fb_helper_surface_sizeh](j)}(hjh]hstruct}(hjP:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL:hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKubj)}(h h]h }(hj^:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL:hhhj]:hKubj)}(hdrm_fb_helper_surface_sizeh]j)}(hjJ:h]hdrm_fb_helper_surface_size}(hjp:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjL:hhhj]:hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjH:hhhj]:hKubah}(h]jB:ah ](jjeh"]h$]h&]jj)jhuh1jhj]:hKhjE:hhubj)}(hhh]h)}(h-describes fbdev size and scanout surface sizeh]h-describes fbdev size and scanout surface size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK)hj:hhubah}(h]h ]h"]h$]h&]uh1jhjE:hhhj]:hKubeh}(h]h ](jstructeh"]h$]h&]jjjj:jj:jjjuh1jhhhjq9hjD:hNubj)}(hX**Definition**:: struct drm_fb_helper_surface_size { u32 fb_width; u32 fb_height; u32 surface_width; u32 surface_height; u32 surface_bpp; u32 surface_depth; }; **Members** ``fb_width`` fbdev width ``fb_height`` fbdev height ``surface_width`` scanout buffer width ``surface_height`` scanout buffer height ``surface_bpp`` scanout buffer bpp ``surface_depth`` scanout buffer depthh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh:}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK-hj:ubj@)}(hstruct drm_fb_helper_surface_size { u32 fb_width; u32 fb_height; u32 surface_width; u32 surface_height; u32 surface_bpp; u32 surface_depth; };h]hstruct drm_fb_helper_surface_size { u32 fb_width; u32 fb_height; u32 surface_width; u32 surface_height; u32 surface_bpp; u32 surface_depth; };}hj:sbah}(h]h ]h"]h$]h&]jjuh1j?h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK/hj:ubh)}(h **Members**h]j%)}(hj:h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK8hj:ubji)}(hhh](jn)}(h``fb_width`` fbdev width h](jt)}(h ``fb_width``h]jz)}(hj:h]hfb_width}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK+hj:ubj)}(hhh]h)}(h fbdev widthh]h fbdev width}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK+hj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK+hj:ubjn)}(h``fb_height`` fbdev height h](jt)}(h ``fb_height``h]jz)}(hj8;h]h fb_height}(hj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6;ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK,hj2;ubj)}(hhh]h)}(h fbdev heighth]h fbdev height}(hjQ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM;hK,hjN;ubah}(h]h ]h"]h$]h&]uh1jhj2;ubeh}(h]h ]h"]h$]h&]uh1jmhjM;hK,hj:ubjn)}(h'``surface_width`` scanout buffer width h](jt)}(h``surface_width``h]jz)}(hjq;h]h surface_width}(hjs;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo;ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK-hjk;ubj)}(hhh]h)}(hscanout buffer widthh]hscanout buffer width}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK-hj;ubah}(h]h ]h"]h$]h&]uh1jhjk;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK-hj:ubjn)}(h)``surface_height`` scanout buffer height h](jt)}(h``surface_height``h]jz)}(hj;h]hsurface_height}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK.hj;ubj)}(hhh]h)}(hscanout buffer heighth]hscanout buffer height}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK.hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK.hj:ubjn)}(h#``surface_bpp`` scanout buffer bpp h](jt)}(h``surface_bpp``h]jz)}(hj;h]h surface_bpp}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK/hj;ubj)}(hhh]h)}(hscanout buffer bpph]hscanout buffer bpp}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK/hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK/hj:ubjn)}(h&``surface_depth`` scanout buffer depthh](jt)}(h``surface_depth``h]jz)}(hj<h]h surface_depth}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK/hj<ubj)}(hhh]h)}(hscanout buffer depthh]hscanout buffer depth}(hj5<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK0hj2<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj1<hK/hj:ubeh}(h]h ]h"]h$]h&]uh1jhhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhjD:hNubh)}(h**Description**h]j%)}(hj_<h]h Description}(hja<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]<ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK3hjq9hhubh)}(hXNote that the scanout surface width/height may be larger than the fbdev width/height. In case of multiple displays, the scanout surface is sized according to the largest width/height (so it is large enough for all CRTCs to scanout). But the fbdev width/height is sized to the minimum width/ height of all the displays. This ensures that fbcon fits on the smallest of the attached displays. fb_width/fb_height is used by drm_fb_helper_fill_info() to fill out the :c:type:`fb_info.var ` structure.h](hXNote that the scanout surface width/height may be larger than the fbdev width/height. In case of multiple displays, the scanout surface is sized according to the largest width/height (so it is large enough for all CRTCs to scanout). But the fbdev width/height is sized to the minimum width/ height of all the displays. This ensures that fbcon fits on the smallest of the attached displays. fb_width/fb_height is used by drm_fb_helper_fill_info() to fill out the }(hju<hhhNhNubh)}(h:c:type:`fb_info.var `h]jz)}(hj<h]h fb_info.var}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj}<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjfb_infouh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK1hju<ubh structure.}(hju<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hK1hjq9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_helper_funcs (C struct)c.drm_fb_helper_funcshNtauh1jxhjq9hhhjD:hNubj)}(hhh](j)}(hdrm_fb_helper_funcsh]j)}(hstruct drm_fb_helper_funcsh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKh]hfb_set_suspend}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKkhj>ubj)}(hhh](h)}(hDriver callback to suspend or resume, if set, fbdev emulation will invoke this callback during suspend and resume. Driver should call fb_set_suspend() from their implementation. If not set, fbdev emulation will invoke fb_set_suspend() directly.h]hDriver callback to suspend or resume, if set, fbdev emulation will invoke this callback during suspend and resume. Driver should call fb_set_suspend() from their implementation. If not set, fbdev emulation will invoke fb_set_suspend() directly.}(hj7>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKehj4>ubh)}(h&Only for i915. Do not use in new code.h]h&Only for i915. Do not use in new code.}(hjF>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKjhj4>ubh)}(h,TODO: Fix i915 to not require this callback.h]h,TODO: Fix i915 to not require this callback.}(hjU>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKlhj4>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhj3>hKkhjf=ubeh}(h]h ]h"]h$]h&]uh1jhhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhjD:hNubh)}(h**Description**h]j%)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}>ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKohjq9hhubh)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKDhjq9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_helper (C struct)c.drm_fb_helperhNtauh1jxhjq9hhhjD:hNubj)}(hhh](j)}(h drm_fb_helperh]j)}(hstruct drm_fb_helperh](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKIubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hKIubj)}(h drm_fb_helperh]j)}(hj>h]h drm_fb_helper}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj>hKIubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj>hKIubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhj>hKIhj>hhubj)}(hhh]h)}(h-main structure to emulate fbdev on top of KMSh]h-main structure to emulate fbdev on top of KMS}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKshj>hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hKIubeh}(h]h ](jstructeh"]h$]h&]jjjj?jj?jjjuh1jhhhjq9hjD:hNubj)}(hX} **Definition**:: struct drm_fb_helper { struct drm_client_dev client; struct drm_client_buffer *buffer; struct drm_framebuffer *fb; struct drm_device *dev; const struct drm_fb_helper_funcs *funcs; struct fb_info *info; u32 pseudo_palette[17]; struct drm_clip_rect damage_clip; spinlock_t damage_lock; struct work_struct damage_work; struct work_struct resume_work; struct mutex lock; struct list_head kernel_fb_list; bool delayed_hotplug; bool deferred_setup; int preferred_bpp; #ifdef CONFIG_FB_DEFERRED_IO; struct fb_deferred_io fbdefio; #endif; }; **Members** ``client`` DRM client used by the generic fbdev emulation. ``buffer`` Framebuffer used by the generic fbdev emulation. ``fb`` Scanout framebuffer object ``dev`` DRM device ``funcs`` driver callbacks for fb helper ``info`` emulated fbdev device info struct ``pseudo_palette`` fake palette of 16 colors ``damage_clip`` clip rectangle used with deferred_io to accumulate damage to the screen buffer ``damage_lock`` spinlock protecting **damage_clip** ``damage_work`` worker used to flush the framebuffer ``resume_work`` worker used during resume if the console lock is already taken ``lock`` Top-level FBDEV helper lock. This protects all internal data structures and lists, such as **connector_info** and **crtc_info**. FIXME: fbdev emulation locking is a mess and long term we want to protect all helper internal state with this lock as well as reduce core KMS locking as much as possible. ``kernel_fb_list`` Entry on the global kernel_fb_helper_list, used for kgdb entry/exit. ``delayed_hotplug`` A hotplug was received while fbdev wasn't in control of the DRM device, i.e. another KMS master was active. The output configuration needs to be reprobe when fbdev is in control again. ``deferred_setup`` If no outputs are connected (disconnected or unknown) the FB helper code will defer setup until at least one of the outputs shows up. This field keeps track of the status so that setup can be retried at every hotplug event until it succeeds eventually. Protected by **lock**. ``preferred_bpp`` Temporary storage for the driver's preferred BPP setting passed to FB helper initialization. This needs to be tracked so that deferred FB helper setup can pass this on. See also: **deferred_setup** ``fbdefio`` Temporary storage for the driver's FB deferred I/O handler. If the driver uses the DRM fbdev emulation layer, this is set by the core to a generic deferred I/O handler if a driver is preferring to use a shadow buffer.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj#?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh:}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKwhj?ubj@)}(hXYstruct drm_fb_helper { struct drm_client_dev client; struct drm_client_buffer *buffer; struct drm_framebuffer *fb; struct drm_device *dev; const struct drm_fb_helper_funcs *funcs; struct fb_info *info; u32 pseudo_palette[17]; struct drm_clip_rect damage_clip; spinlock_t damage_lock; struct work_struct damage_work; struct work_struct resume_work; struct mutex lock; struct list_head kernel_fb_list; bool delayed_hotplug; bool deferred_setup; int preferred_bpp; #ifdef CONFIG_FB_DEFERRED_IO; struct fb_deferred_io fbdefio; #endif; };h]hXYstruct drm_fb_helper { struct drm_client_dev client; struct drm_client_buffer *buffer; struct drm_framebuffer *fb; struct drm_device *dev; const struct drm_fb_helper_funcs *funcs; struct fb_info *info; u32 pseudo_palette[17]; struct drm_clip_rect damage_clip; spinlock_t damage_lock; struct work_struct damage_work; struct work_struct resume_work; struct mutex lock; struct list_head kernel_fb_list; bool delayed_hotplug; bool deferred_setup; int preferred_bpp; #ifdef CONFIG_FB_DEFERRED_IO; struct fb_deferred_io fbdefio; #endif; };}hjworker used during resume if the console lock is already takenh]h>worker used during resume if the console lock is already taken}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhK~hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjAhK~hjc?ubjn)}(hX6``lock`` Top-level FBDEV helper lock. This protects all internal data structures and lists, such as **connector_info** and **crtc_info**. FIXME: fbdev emulation locking is a mess and long term we want to protect all helper internal state with this lock as well as reduce core KMS locking as much as possible. h](jt)}(h``lock``h]jz)}(hjAh]hlock}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjAubj)}(hhh](h)}(hTop-level FBDEV helper lock. This protects all internal data structures and lists, such as **connector_info** and **crtc_info**.h](h[Top-level FBDEV helper lock. This protects all internal data structures and lists, such as }(hjBhhhNhNubj%)}(h**connector_info**h]hconnector_info}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh and }(hjBhhhNhNubj%)}(h **crtc_info**h]h crtc_info}(hj!BhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjBubh)}(hFIXME: fbdev emulation locking is a mess and long term we want to protect all helper internal state with this lock as well as reduce core KMS locking as much as possible.h]hFIXME: fbdev emulation locking is a mess and long term we want to protect all helper internal state with this lock as well as reduce core KMS locking as much as possible.}(hj:BhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjBubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjc?ubjn)}(hX``kernel_fb_list`` Entry on the global kernel_fb_helper_list, used for kgdb entry/exit. h](jt)}(h``kernel_fb_list``h]jz)}(hj[Bh]hkernel_fb_list}(hj]BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYBubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjUBubj)}(hhh]h)}(hDEntry on the global kernel_fb_helper_list, used for kgdb entry/exit.h]hDEntry on the global kernel_fb_helper_list, used for kgdb entry/exit.}(hjtBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpBhKhjqBubah}(h]h ]h"]h$]h&]uh1jhjUBubeh}(h]h ]h"]h$]h&]uh1jmhjpBhKhjc?ubjn)}(h``delayed_hotplug`` A hotplug was received while fbdev wasn't in control of the DRM device, i.e. another KMS master was active. The output configuration needs to be reprobe when fbdev is in control again. h](jt)}(h``delayed_hotplug``h]jz)}(hjBh]hdelayed_hotplug}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjBubj)}(hhh]h)}(hA hotplug was received while fbdev wasn't in control of the DRM device, i.e. another KMS master was active. The output configuration needs to be reprobe when fbdev is in control again.h]hA hotplug was received while fbdev wasn’t in control of the DRM device, i.e. another KMS master was active. The output configuration needs to be reprobe when fbdev is in control again.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjc?ubjn)}(hX(``deferred_setup`` If no outputs are connected (disconnected or unknown) the FB helper code will defer setup until at least one of the outputs shows up. This field keeps track of the status so that setup can be retried at every hotplug event until it succeeds eventually. Protected by **lock**. h](jt)}(h``deferred_setup``h]jz)}(hjBh]hdeferred_setup}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjBubj)}(hhh](h)}(hIf no outputs are connected (disconnected or unknown) the FB helper code will defer setup until at least one of the outputs shows up. This field keeps track of the status so that setup can be retried at every hotplug event until it succeeds eventually.h]hIf no outputs are connected (disconnected or unknown) the FB helper code will defer setup until at least one of the outputs shows up. This field keeps track of the status so that setup can be retried at every hotplug event until it succeeds eventually.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjBubh)}(hProtected by **lock**.h](h Protected by }(hjBhhhNhNubj%)}(h**lock**h]hlock}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhKhjBubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjc?ubjn)}(h``preferred_bpp`` Temporary storage for the driver's preferred BPP setting passed to FB helper initialization. This needs to be tracked so that deferred FB helper setup can pass this on. See also: **deferred_setup** h](jt)}(h``preferred_bpp``h]jz)}(hj(Ch]h preferred_bpp}(hj*ChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Cubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhj"Cubj)}(hhh](h)}(hTemporary storage for the driver's preferred BPP setting passed to FB helper initialization. This needs to be tracked so that deferred FB helper setup can pass this on.h]hTemporary storage for the driver’s preferred BPP setting passed to FB helper initialization. This needs to be tracked so that deferred FB helper setup can pass this on.}(hjAChhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhj>Cubh)}(hSee also: **deferred_setup**h](h See also: }(hjPChhhNhNubj%)}(h**deferred_setup**h]hdeferred_setup}(hjXChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPCubeh}(h]h ]h"]h$]h&]uh1hhj=ChKhj>Cubeh}(h]h ]h"]h$]h&]uh1jhj"Cubeh}(h]h ]h"]h$]h&]uh1jmhj=ChKhjc?ubjn)}(h``fbdefio`` Temporary storage for the driver's FB deferred I/O handler. If the driver uses the DRM fbdev emulation layer, this is set by the core to a generic deferred I/O handler if a driver is preferring to use a shadow buffer.h](jt)}(h ``fbdefio``h]jz)}(hj~Ch]hfbdefio}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|Cubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjxCubj)}(hhh]h)}(hTemporary storage for the driver's FB deferred I/O handler. If the driver uses the DRM fbdev emulation layer, this is set by the core to a generic deferred I/O handler if a driver is preferring to use a shadow buffer.h]hTemporary storage for the driver’s FB deferred I/O handler. If the driver uses the DRM fbdev emulation layer, this is set by the core to a generic deferred I/O handler if a driver is preferring to use a shadow buffer.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjCubah}(h]h ]h"]h$]h&]uh1jhjxCubeh}(h]h ]h"]h$]h&]uh1jmhjChKhjc?ubeh}(h]h ]h"]h$]h&]uh1jhhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhjD:hNubh)}(h**Description**h]j%)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjq9hhubh)}(hXThis is the main structure used by the fbdev helpers. Drivers supporting fbdev emulation should embedded this into their overall driver structure. Drivers must also fill out a :c:type:`struct drm_fb_helper_funcs ` with a few operations.h](hThis is the main structure used by the fbdev helpers. Drivers supporting fbdev emulation should embedded this into their overall driver structure. Drivers must also fill out a }(hjChhhNhNubh)}(h::c:type:`struct drm_fb_helper_funcs `h]jz)}(hjCh]hstruct drm_fb_helper_funcs}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_fb_helper_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjCubh with a few operations.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChKhjq9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#DRM_FB_HELPER_DEFAULT_OPS (C macro)c.DRM_FB_HELPER_DEFAULT_OPShNtauh1jxhjq9hhhjD:hNubj)}(hhh](j)}(hDRM_FB_HELPER_DEFAULT_OPSh]j)}(hDRM_FB_HELPER_DEFAULT_OPSh]j)}(hDRM_FB_HELPER_DEFAULT_OPSh]j)}(hjDh]hDRM_FB_HELPER_DEFAULT_OPS}(hj&DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Dubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhj9DhKubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhj9DhKhjDhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjDhhhj9DhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjRDjjRDjjjuh1jhhhjq9hjD:hNubh)}(h``DRM_FB_HELPER_DEFAULT_OPS``h]jz)}(hjXDh]hDRM_FB_HELPER_DEFAULT_OPS}(hjZDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVDubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjq9hhubjb=)}(h helper define for drm drivers **Description** Helper define to register default implementations of drm_fb_helper functions. To be used in struct fb_ops of drm drivers. h](jb=)}(hhelper define for drm drivers h]h)}(hhelper define for drm driversh]hhelper define for drm drivers}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjrDubah}(h]h ]h"]h$]h&]uh1ja=hjDhKhjnDubh)}(h**Description**h]j%)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjnDubh)}(hyHelper define to register default implementations of drm_fb_helper functions. To be used in struct fb_ops of drm drivers.h]hyHelper define to register default implementations of drm_fb_helper functions. To be used in struct fb_ops of drm drivers.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjnDubeh}(h]h ]h"]h$]h&]uh1ja=hjDhKhjq9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_debug_enter (C function)c.drm_fb_helper_debug_enterhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h4int drm_fb_helper_debug_enter (struct fb_info *info)h]j)}(h3int drm_fb_helper_debug_enter(struct fb_info *info)h](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjDhKubj)}(hdrm_fb_helper_debug_enterh]j)}(hdrm_fb_helper_debug_enterh]hdrm_fb_helper_debug_enter}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjDhKubj)}(h(struct fb_info *info)h]j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj,EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.EmodnameN classnameNjj)}j]j%)}jjDsbc.drm_fb_helper_debug_enterasbuh1hhj Eubj)}(h h]h }(hjLEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubj9)}(hj9h]h*}(hjZEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj Eubj)}(hinfoh]hinfo}(hjgEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubah}(h]h ]h"]h$]h&]jjuh1jhjDhhhjDhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjDhKubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhjDhKhjDhhubj)}(hhh]h)}(h;implementation for :c:type:`fb_ops.fb_debug_enter `h](himplementation for }(hjEhhhNhNubh)}(h(:c:type:`fb_ops.fb_debug_enter `h]jz)}(hjEh]hfb_ops.fb_debug_enter}(hjEhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jHEc.drm_fb_helper_debug_enterasbjfb_opsuh1hhjDhKhjEubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhjq9hNhNubj)}(hI**Parameters** ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjEubji)}(hhh]jn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hjEh]hstruct fb_info *info}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjEubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhj Fubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj FhKhjEubah}(h]h ]h"]h$]h&]uh1jhhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_debug_leave (C function)c.drm_fb_helper_debug_leavehNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h4int drm_fb_helper_debug_leave (struct fb_info *info)h]j)}(h3int drm_fb_helper_debug_leave(struct fb_info *info)h](j)}(hinth]hint}(hjPFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLFhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKubj)}(h h]h }(hj_FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLFhhhj^FhKubj)}(hdrm_fb_helper_debug_leaveh]j)}(hdrm_fb_helper_debug_leaveh]hdrm_fb_helper_debug_leave}(hjqFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLFhhhj^FhKubj)}(h(struct fb_info *info)h]j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j%)}jjsFsbc.drm_fb_helper_debug_leaveasbuh1hhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubj)}(hinfoh]hinfo}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubah}(h]h ]h"]h$]h&]jjuh1jhjLFhhhj^FhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHFhhhj^FhKubah}(h]jCFah ](jjeh"]h$]h&]jj)jhuh1jhj^FhKhjEFhhubj)}(hhh]h)}(h;implementation for :c:type:`fb_ops.fb_debug_leave `h](himplementation for }(hjGhhhNhNubh)}(h(:c:type:`fb_ops.fb_debug_leave `h]jz)}(hjGh]hfb_ops.fb_debug_leave}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jFc.drm_fb_helper_debug_leaveasbjfb_opsuh1hhjDhKhjGubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhj Ghhubah}(h]h ]h"]h$]h&]uh1jhjEFhhhj^FhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLGjjLGjjjuh1jhhhjq9hNhNubj)}(hI**Parameters** ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjVGh]h Parameters}(hjXGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTGubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjPGubji)}(hhh]jn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hjuGh]hstruct fb_info *info}(hjwGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsGubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjoGubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjGubah}(h]h ]h"]h$]h&]uh1jhjoGubeh}(h]h ]h"]h$]h&]uh1jmhjGhKhjlGubah}(h]h ]h"]h$]h&]uh1jhhjPGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_fb_helper_restore_fbdev_mode_unlocked (C function)+c.drm_fb_helper_restore_fbdev_mode_unlockedhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hOint drm_fb_helper_restore_fbdev_mode_unlocked (struct drm_fb_helper *fb_helper)h]j)}(hNint drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper)h](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhM ubj)}(h)drm_fb_helper_restore_fbdev_mode_unlockedh]j)}(h)drm_fb_helper_restore_fbdev_mode_unlockedh]h)drm_fb_helper_restore_fbdev_mode_unlocked}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjGhM ubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hj*HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,HmodnameN classnameNjj)}j]j%)}jjGsb+c.drm_fb_helper_restore_fbdev_mode_unlockedasbuh1hhjHubj)}(h h]h }(hjJHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(hj9h]h*}(hjXHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubj)}(h fb_helperh]h fb_helper}(hjeHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubah}(h]h ]h"]h$]h&]jjuh1jhjGhhhjGhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhjGhM ubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjGhM hjGhhubj)}(hhh]h)}(hrestore fbdev configurationh]hrestore fbdev configuration}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjq9hNhNubj)}(hX**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL **Description** This helper should be called from fbdev emulation's :c:type:`drm_client_funcs.restore ` callback. It ensures that the user isn't greeted with a black screen when the userspace compositor releases the display device. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHubji)}(hhh]jn)}(hO``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjHh]hstruct drm_fb_helper *fb_helper}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhhjHubh)}(h**Description**h]j%)}(hj Ih]h Description}(hj IhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Iubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHubh)}(hThis helper should be called from fbdev emulation's :c:type:`drm_client_funcs.restore ` callback. It ensures that the user isn't greeted with a black screen when the userspace compositor releases the display device.h](h6This helper should be called from fbdev emulation’s }(hj!IhhhNhNubh)}(h5:c:type:`drm_client_funcs.restore `h]jz)}(hj+Ih]hdrm_client_funcs.restore}(hj-IhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)Iubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_client_funcsuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj!Iubh callback. It ensures that the user isn’t greeted with a black screen when the userspace compositor releases the display device.}(hj!IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHIhMhjHubh)}(h **Return**h]j%)}(hjUIh]hReturn}(hjWIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSIubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjkIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_fb_helper_blank (C function)c.drm_fb_helper_blankhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h9int drm_fb_helper_blank (int blank, struct fb_info *info)h]j)}(h8int drm_fb_helper_blank(int blank, struct fb_info *info)h](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMAubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMAubj)}(hdrm_fb_helper_blankh]j)}(hdrm_fb_helper_blankh]hdrm_fb_helper_blank}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjIhMAubj)}(h!(int blank, struct fb_info *info)h](j)}(h int blankh](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hblankh]hblank}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hj JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj*JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,JmodnameN classnameNjj)}j]j%)}jjIsbc.drm_fb_helper_blankasbuh1hhjJubj)}(h h]h }(hjJJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(hj9h]h*}(hjXJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubj)}(hinfoh]hinfo}(hjeJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjIhMAubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhjIhMAubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhjIhMAhjIhhubj)}(hhh]h)}(h5implementation for :c:type:`fb_ops.fb_blank `h](himplementation for }(hjJhhhNhNubh)}(h":c:type:`fb_ops.fb_blank `h]jz)}(hjJh]hfb_ops.fb_blank}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jFJc.drm_fb_helper_blankasbjfb_opsuh1hhjDhKhjJubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM=hjJhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjIhMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjq9hNhNubj)}(hq**Parameters** ``int blank`` desired blanking state ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMAhjJubji)}(hhh](jn)}(h%``int blank`` desired blanking state h](jt)}(h ``int blank``h]jz)}(hjJh]h int blank}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM>hjJubj)}(hhh]h)}(hdesired blanking stateh]hdesired blanking state}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj KhM>hj Kubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhj KhM>hjJubjn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hj-Kh]hstruct fb_info *info}(hj/KhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+Kubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM@hj'Kubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjFKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM?hjCKubah}(h]h ]h"]h$]h&]uh1jhj'Kubeh}(h]h ]h"]h$]h&]uh1jmhjBKhM@hjJubeh}(h]h ]h"]h$]h&]uh1jhhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_fb_helper_prepare (C function)c.drm_fb_helper_preparehNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hvoid drm_fb_helper_prepare (struct drm_device *dev, struct drm_fb_helper *helper, unsigned int preferred_bpp, const struct drm_fb_helper_funcs *funcs)h]j)}(hvoid drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper, unsigned int preferred_bpp, const struct drm_fb_helper_funcs *funcs)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubj)}(hdrm_fb_helper_prepareh]j)}(hdrm_fb_helper_prepareh]hdrm_fb_helper_prepare}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhjKhMubj)}(h{(struct drm_device *dev, struct drm_fb_helper *helper, unsigned int preferred_bpp, const struct drm_fb_helper_funcs *funcs)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j%)}jjKsbc.drm_fb_helper_prepareasbuh1hhjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubj)}(hdevh]hdev}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(hstruct drm_fb_helper *helperh](j)}(hjh]hstruct}(hj6LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Lubj)}(h h]h }(hjCLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Lubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjTLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVLmodnameN classnameNjj)}j]jKc.drm_fb_helper_prepareasbuh1hhj2Lubj)}(h h]h }(hjrLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Lubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2Lubj)}(hhelperh]hhelper}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(hunsigned int preferred_bpph](j)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h preferred_bpph]h preferred_bpp}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(h'const struct drm_fb_helper_funcs *funcsh](j)}(hjch]hconst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_fb_helper_funcsh]hdrm_fb_helper_funcs}(hj0MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2MmodnameN classnameNjj)}j]jKc.drm_fb_helper_prepareasbuh1hhjLubj)}(h h]h }(hjNMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hj\MhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hfuncsh]hfuncs}(hjiMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubeh}(h]h ]h"]h$]h&]jjuh1jhjKhhhjKhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjKhMubah}(h]jzKah ](jjeh"]h$]h&]jj)jhuh1jhjKhMhj|Khhubj)}(hhh]h)}(hsetup a drm_fb_helper structureh]hsetup a drm_fb_helper structure}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjMhhubah}(h]h ]h"]h$]h&]uh1jhj|KhhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhjq9hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_fb_helper *helper`` driver-allocated fbdev helper structure to set up ``unsigned int preferred_bpp`` Preferred bits per pixel for the device. ``const struct drm_fb_helper_funcs *funcs`` pointer to structure of functions associate with this helper **Description** Sets up the bare minimum to make the framebuffer helper usable. This is useful to implement race-free initialization of the polling helpers.h](h)}(h**Parameters**h]j%)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjMubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjMh]hstruct drm_device *dev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjMubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhjMubjn)}(hS``struct drm_fb_helper *helper`` driver-allocated fbdev helper structure to set up h](jt)}(h ``struct drm_fb_helper *helper``h]jz)}(hj Nh]hstruct drm_fb_helper *helper}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Nubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjNubj)}(hhh]h)}(h1driver-allocated fbdev helper structure to set uph]h1driver-allocated fbdev helper structure to set up}(hj&NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"NhMhj#Nubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhj"NhMhjMubjn)}(hH``unsigned int preferred_bpp`` Preferred bits per pixel for the device. h](jt)}(h``unsigned int preferred_bpp``h]jz)}(hjFNh]hunsigned int preferred_bpp}(hjHNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDNubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj@Nubj)}(hhh]h)}(h(Preferred bits per pixel for the device.h]h(Preferred bits per pixel for the device.}(hj_NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[NhMhj\Nubah}(h]h ]h"]h$]h&]uh1jhj@Nubeh}(h]h ]h"]h$]h&]uh1jmhj[NhMhjMubjn)}(hi``const struct drm_fb_helper_funcs *funcs`` pointer to structure of functions associate with this helper h](jt)}(h+``const struct drm_fb_helper_funcs *funcs``h]jz)}(hjNh]h'const struct drm_fb_helper_funcs *funcs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}Nubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjyNubj)}(hhh]h)}(hvoid drm_fb_helper_unprepare (struct drm_fb_helper *fb_helper)h]j)}(h=void drm_fb_helper_unprepare(struct drm_fb_helper *fb_helper)h](j)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj OhMubj)}(hdrm_fb_helper_unprepareh]j)}(hdrm_fb_helper_unprepareh]hdrm_fb_helper_unprepare}(hj OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhj OhMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj`h](h initialize a }(hjQhhhNhNubh)}(h.:c:type:`struct drm_fb_helper `h]jz)}(hjQh]hstruct drm_fb_helper}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jPc.drm_fb_helper_initasbj drm_fb_helperuh1hhjDhKhjQubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjuPhhhjPhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jhhhjq9hNhNubj)}(hXO**Parameters** ``struct drm_device *dev`` drm device ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper structure to initialize **Description** This allocates the structures for the fbdev helper with the given limits. Note that this won't yet touch the hardware (through the driver interfaces) nor register the fbdev. This is only done in drm_fb_helper_initial_config() to allow driver writes more control over the exact init sequence. Drivers must call drm_fb_helper_prepare() before calling this function. **Return** Zero if everything went ok, nonzero otherwise.h](h)}(h**Parameters**h]j%)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQubji)}(hhh](jn)}(h&``struct drm_device *dev`` drm device h](jt)}(h``struct drm_device *dev``h]jz)}(hjRh]hstruct drm_device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjRubj)}(hhh]h)}(h drm deviceh]h drm device}(hj.RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*RhMhj+Rubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhj*RhMhj Rubjn)}(hZ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper structure to initialize h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjNRh]hstruct drm_fb_helper *fb_helper}(hjPRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLRubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHRubj)}(hhh]h)}(h5driver-allocated fbdev helper structure to initializeh]h5driver-allocated fbdev helper structure to initialize}(hjgRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcRhMhjdRubah}(h]h ]h"]h$]h&]uh1jhjHRubeh}(h]h ]h"]h$]h&]uh1jmhjcRhMhj Rubeh}(h]h ]h"]h$]h&]uh1jhhjQubh)}(h**Description**h]j%)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQubh)}(hX#This allocates the structures for the fbdev helper with the given limits. Note that this won't yet touch the hardware (through the driver interfaces) nor register the fbdev. This is only done in drm_fb_helper_initial_config() to allow driver writes more control over the exact init sequence.h]hX%This allocates the structures for the fbdev helper with the given limits. Note that this won’t yet touch the hardware (through the driver interfaces) nor register the fbdev. This is only done in drm_fb_helper_initial_config() to allow driver writes more control over the exact init sequence.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQubh)}(hGDrivers must call drm_fb_helper_prepare() before calling this function.h]hGDrivers must call drm_fb_helper_prepare() before calling this function.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQubh)}(h **Return**h]j%)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQubh)}(h.Zero if everything went ok, nonzero otherwise.h]h.Zero if everything went ok, nonzero otherwise.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_helper_alloc_info (C function)c.drm_fb_helper_alloc_infohNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hKstruct fb_info * drm_fb_helper_alloc_info (struct drm_fb_helper *fb_helper)h]j)}(hIstruct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper)h](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj#ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%SmodnameN classnameNjj)}j]j%)}jdrm_fb_helper_alloc_infosbc.drm_fb_helper_alloc_infoasbuh1hhjShhhjShMubj)}(h h]h }(hjDShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMubj9)}(hj9h]h*}(hjRShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjShhhjShMubj)}(hdrm_fb_helper_alloc_infoh]j)}(hjASh]hdrm_fb_helper_alloc_info}(hjcShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Subah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj~ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzSubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j?Sc.drm_fb_helper_alloc_infoasbuh1hhjzSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzSubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzSubj)}(h fb_helperh]h fb_helper}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjShMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jhjShMhjRhhubj)}(hhh]h)}(h(allocate fb_info and some of its membersh]h(allocate fb_info and some of its members}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjShhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhjq9hNhNubj)}(hX**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper **Description** A helper to alloc fb_info and the member cmap. Called by the driver within the struct :c:type:`drm_driver.fbdev_probe ` callback function. Drivers do not need to release the allocated fb_info structure themselves, this is automatically done when calling drm_fb_helper_fini(). **Return** fb_info pointer if things went okay, pointer containing error code otherwiseh](h)}(h**Parameters**h]j%)}(hj!Th]h Parameters}(hj#ThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjTubji)}(hhh]jn)}(hB``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hj@Th]hstruct drm_fb_helper *fb_helper}(hjBThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>Tubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj:Tubj)}(hhh]h)}(hdriver-allocated fbdev helperh]hdriver-allocated fbdev helper}(hjYThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUThMhjVTubah}(h]h ]h"]h$]h&]uh1jhj:Tubeh}(h]h ]h"]h$]h&]uh1jmhjUThMhj7Tubah}(h]h ]h"]h$]h&]uh1jhhjTubh)}(h**Description**h]j%)}(hj{Th]h Description}(hj}ThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyTubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjTubh)}(hXA helper to alloc fb_info and the member cmap. Called by the driver within the struct :c:type:`drm_driver.fbdev_probe ` callback function. Drivers do not need to release the allocated fb_info structure themselves, this is automatically done when calling drm_fb_helper_fini().h](hVA helper to alloc fb_info and the member cmap. Called by the driver within the struct }(hjThhhNhNubh)}(h-:c:type:`drm_driver.fbdev_probe `h]jz)}(hjTh]hdrm_driver.fbdev_probe}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_driveruh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjTubh callback function. Drivers do not need to release the allocated fb_info structure themselves, this is automatically done when calling drm_fb_helper_fini().}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjThMhjTubh)}(h **Return**h]j%)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjTubh)}(hLfb_info pointer if things went okay, pointer containing error code otherwiseh]hLfb_info pointer if things went okay, pointer containing error code otherwise}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_fb_helper_release_info (C function)c.drm_fb_helper_release_infohNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hAvoid drm_fb_helper_release_info (struct drm_fb_helper *fb_helper)h]j)}(h@void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper)h](j)}(hvoidh]hvoid}(hj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhMubj)}(hdrm_fb_helper_release_infoh]j)}(hdrm_fb_helper_release_infoh]hdrm_fb_helper_release_info}(hj+UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Uubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjGUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUubj)}(h h]h }(hjTUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjeUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgUmodnameN classnameNjj)}j]j%)}jj-Usbc.drm_fb_helper_release_infoasbuh1hhjCUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjCUubj)}(h fb_helperh]h fb_helper}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Uubah}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjUhMubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjUhMhjThhubj)}(hhh]h)}(hrelease fb_info and its membersh]hrelease fb_info and its members}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjq9hNhNubj)}(hX **Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper **Description** A helper to release fb_info and the member cmap. Drivers do not need to release the allocated fb_info structure themselves, this is automatically done when calling drm_fb_helper_fini().h](h)}(h**Parameters**h]j%)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjUubji)}(hhh]jn)}(hB``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hj Vh]hstruct drm_fb_helper *fb_helper}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Vubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjVubj)}(hhh]h)}(hdriver-allocated fbdev helperh]hdriver-allocated fbdev helper}(hj$VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj VhMhj!Vubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhj VhMhjVubah}(h]h ]h"]h$]h&]uh1jhhjUubh)}(h**Description**h]j%)}(hjFVh]h Description}(hjHVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDVubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjUubh)}(hA helper to release fb_info and the member cmap. Drivers do not need to release the allocated fb_info structure themselves, this is automatically done when calling drm_fb_helper_fini().h]hA helper to release fb_info and the member cmap. Drivers do not need to release the allocated fb_info structure themselves, this is automatically done when calling drm_fb_helper_fini().}(hj\VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_fb_helper_unregister_info (C function)c.drm_fb_helper_unregister_infohNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hDvoid drm_fb_helper_unregister_info (struct drm_fb_helper *fb_helper)h]j)}(hCvoid drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM6ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjVhM6ubj)}(hdrm_fb_helper_unregister_infoh]j)}(hdrm_fb_helper_unregister_infoh]hdrm_fb_helper_unregister_info}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVhhhjVhM6ubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j%)}jjVsbc.drm_fb_helper_unregister_infoasbuh1hhjVubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(h fb_helperh]h fb_helper}(hj!WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubah}(h]h ]h"]h$]h&]jjuh1jhjVhhhjVhM6ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjVhM6ubah}(h]j~Vah ](jjeh"]h$]h&]jj)jhuh1jhjVhM6hjVhhubj)}(hhh]h)}(h%unregister fb_info framebuffer deviceh]h%unregister fb_info framebuffer device}(hjKWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM/hjHWhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjVhM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcWjjcWjjjuh1jhhhjq9hNhNubj)}(hX1**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, must not be NULL **Description** A wrapper around unregister_framebuffer, to release the fb_info framebuffer device. This must be called before releasing all resources for **fb_helper** by calling drm_fb_helper_fini().h](h)}(h**Parameters**h]j%)}(hjmWh]h Parameters}(hjoWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkWubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM3hjgWubji)}(hhh]jn)}(hT``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, must not be NULL h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjWh]hstruct drm_fb_helper *fb_helper}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM0hjWubj)}(hhh]h)}(h/driver-allocated fbdev helper, must not be NULLh]h/driver-allocated fbdev helper, must not be NULL}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM0hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjWhM0hjWubah}(h]h ]h"]h$]h&]uh1jhhjgWubh)}(h**Description**h]j%)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM2hjgWubh)}(hA wrapper around unregister_framebuffer, to release the fb_info framebuffer device. This must be called before releasing all resources for **fb_helper** by calling drm_fb_helper_fini().h](hA wrapper around unregister_framebuffer, to release the fb_info framebuffer device. This must be called before releasing all resources for }(hjWhhhNhNubj%)}(h **fb_helper**h]h fb_helper}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubh! by calling drm_fb_helper_fini().}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM2hjgWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_helper_fini (C function)c.drm_fb_helper_finihNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h9void drm_fb_helper_fini (struct drm_fb_helper *fb_helper)h]j)}(h8void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)h](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMGubj)}(h h]h }(hj-XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhj,XhMGubj)}(hdrm_fb_helper_finih]j)}(hdrm_fb_helper_finih]hdrm_fb_helper_fini}(hj?XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXhhhj,XhMGubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj[XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWXubj)}(h h]h }(hjhXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWXubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjyXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{XmodnameN classnameNjj)}j]j%)}jjAXsbc.drm_fb_helper_finiasbuh1hhjWXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWXubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWXubj)}(h fb_helperh]h fb_helper}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSXubah}(h]h ]h"]h$]h&]jjuh1jhjXhhhj,XhMGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjXhhhj,XhMGubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhj,XhMGhjXhhubj)}(hhh]h)}(h:finialize a :c:type:`struct drm_fb_helper `h](h finialize a }(hjXhhhNhNubh)}(h.:c:type:`struct drm_fb_helper `h]jz)}(hjXh]hstruct drm_fb_helper}(hjXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jXc.drm_fb_helper_finiasbj drm_fb_helperuh1hhjDhKhjXubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMBhjXhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhj,XhMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjq9hNhNubj)}(h**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL **Description** This cleans up all remaining resources associated with **fb_helper**.h](h)}(h**Parameters**h]j%)}(hj$Yh]h Parameters}(hj&YhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"Yubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMFhjYubji)}(hhh]jn)}(hO``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjCYh]hstruct drm_fb_helper *fb_helper}(hjEYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAYubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMChj=Yubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hj\YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXYhMChjYYubah}(h]h ]h"]h$]h&]uh1jhj=Yubeh}(h]h ]h"]h$]h&]uh1jmhjXYhMChj:Yubah}(h]h ]h"]h$]h&]uh1jhhjYubh)}(h**Description**h]j%)}(hj~Yh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|Yubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMEhjYubh)}(hEThis cleans up all remaining resources associated with **fb_helper**.h](h7This cleans up all remaining resources associated with }(hjYhhhNhNubj%)}(h **fb_helper**h]h fb_helper}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMEhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_deferred_io (C function)c.drm_fb_helper_deferred_iohNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hTvoid drm_fb_helper_deferred_io (struct fb_info *info, struct list_head *pagereflist)h]j)}(hSvoid drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist)h](j)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjYhMubj)}(hdrm_fb_helper_deferred_ioh]j)}(hdrm_fb_helper_deferred_ioh]hdrm_fb_helper_deferred_io}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjYhMubj)}(h5(struct fb_info *info, struct list_head *pagereflist)h](j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj0ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2ZmodnameN classnameNjj)}j]j%)}jjYsbc.drm_fb_helper_deferred_ioasbuh1hhjZubj)}(h h]h }(hjPZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hj^ZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hinfoh]hinfo}(hjkZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Zubj)}(hstruct list_head *pagereflisth](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(h list_headh]h list_head}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jLZc.drm_fb_helper_deferred_ioasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(h pagereflisth]h pagereflist}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Zubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjYhMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjYhMhjYhhubj)}(hhh]h)}(h#fbdev deferred_io callback functionh]h#fbdev deferred_io callback function}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jhhhjq9hNhNubj)}(hX8**Parameters** ``struct fb_info *info`` fb_info struct pointer ``struct list_head *pagereflist`` list of mmap framebuffer pages that have to be flushed **Description** This function is used as the :c:type:`fb_deferred_io.deferred_io ` callback function for flushing the fbdev mmap writes.h](h)}(h**Parameters**h]j%)}(hj'[h]h Parameters}(hj)[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%[ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj![ubji)}(hhh](jn)}(h0``struct fb_info *info`` fb_info struct pointer h](jt)}(h``struct fb_info *info``h]jz)}(hjF[h]hstruct fb_info *info}(hjH[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD[ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj@[ubj)}(hhh]h)}(hfb_info struct pointerh]hfb_info struct pointer}(hj_[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[[hMhj\[ubah}(h]h ]h"]h$]h&]uh1jhj@[ubeh}(h]h ]h"]h$]h&]uh1jmhj[[hMhj=[ubjn)}(hY``struct list_head *pagereflist`` list of mmap framebuffer pages that have to be flushed h](jt)}(h!``struct list_head *pagereflist``h]jz)}(hj[h]hstruct list_head *pagereflist}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}[ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjy[ubj)}(hhh]h)}(h6list of mmap framebuffer pages that have to be flushedh]h6list of mmap framebuffer pages that have to be flushed}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhjy[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj=[ubeh}(h]h ]h"]h$]h&]uh1jhhj![ubh)}(h**Description**h]j%)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj![ubh)}(hThis function is used as the :c:type:`fb_deferred_io.deferred_io ` callback function for flushing the fbdev mmap writes.h](hThis function is used as the }(hj[hhhNhNubh)}(h5:c:type:`fb_deferred_io.deferred_io `h]jz)}(hj[h]hfb_deferred_io.deferred_io}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjfb_deferred_iouh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj[ubh6 callback function for flushing the fbdev mmap writes.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj![ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_set_suspend (C function)c.drm_fb_helper_set_suspendhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hNvoid drm_fb_helper_set_suspend (struct drm_fb_helper *fb_helper, bool suspend)h]j)}(hMvoid drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend)h](j)}(hvoidh]hvoid}(hj"\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hj1\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj0\hMubj)}(hdrm_fb_helper_set_suspendh]j)}(hdrm_fb_helper_set_suspendh]hdrm_fb_helper_set_suspend}(hjC\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj0\hMubj)}(h/(struct drm_fb_helper *fb_helper, bool suspend)h](j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj_\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[\ubj)}(h h]h }(hjl\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[\ubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hj}\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j%)}jjE\sbc.drm_fb_helper_set_suspendasbuh1hhj[\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[\ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[\ubj)}(h fb_helperh]h fb_helper}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW\ubj)}(h bool suspendh](j)}(hjAh]hbool}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hsuspendh]hsuspend}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW\ubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhj0\hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj0\hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhj0\hMhj\hhubj)}(hhh]h)}(hwrapper around fb_set_suspendh]hwrapper around fb_set_suspend}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj0\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.]jj.]jjjuh1jhhhjq9hNhNubj)}(hX3**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL ``bool suspend`` whether to suspend or resume **Description** A wrapper around fb_set_suspend implemented by fbdev core. Use drm_fb_helper_set_suspend_unlocked() if you don't need to take the lock yourselfh](h)}(h**Parameters**h]j%)}(hj8]h]h Parameters}(hj:]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6]ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj2]ubji)}(hhh](jn)}(hO``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjW]h]hstruct drm_fb_helper *fb_helper}(hjY]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU]ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjQ]ubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hjp]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl]hMhjm]ubah}(h]h ]h"]h$]h&]uh1jhjQ]ubeh}(h]h ]h"]h$]h&]uh1jmhjl]hMhjN]ubjn)}(h.``bool suspend`` whether to suspend or resume h](jt)}(h``bool suspend``h]jz)}(hj]h]h bool suspend}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj]ubj)}(hhh]h)}(hwhether to suspend or resumeh]hwhether to suspend or resume}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhjN]ubeh}(h]h ]h"]h$]h&]uh1jhhj2]ubh)}(h**Description**h]j%)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj2]ubh)}(hA wrapper around fb_set_suspend implemented by fbdev core. Use drm_fb_helper_set_suspend_unlocked() if you don't need to take the lock yourselfh]hA wrapper around fb_set_suspend implemented by fbdev core. Use drm_fb_helper_set_suspend_unlocked() if you don’t need to take the lock yourself}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj2]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_fb_helper_set_suspend_unlocked (C function)$c.drm_fb_helper_set_suspend_unlockedhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hWvoid drm_fb_helper_set_suspend_unlocked (struct drm_fb_helper *fb_helper, bool suspend)h]j)}(hVvoid drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper, bool suspend)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^hhhj^hMubj)}(h"drm_fb_helper_set_suspend_unlockedh]j)}(h"drm_fb_helper_set_suspend_unlockedh]h"drm_fb_helper_set_suspend_unlocked}(hj1^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj ^hhhj^hMubj)}(h/(struct drm_fb_helper *fb_helper, bool suspend)h](j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjM^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI^ubj)}(h h]h }(hjZ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI^ubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjk^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm^modnameN classnameNjj)}j]j%)}jj3^sb$c.drm_fb_helper_set_suspend_unlockedasbuh1hhjI^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI^ubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjI^ubj)}(h fb_helperh]h fb_helper}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjE^ubj)}(h bool suspendh](j)}(hjAh]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hsuspendh]hsuspend}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjE^ubeh}(h]h ]h"]h$]h&]jjuh1jhj ^hhhj^hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj^hMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhj^hMhj^hhubj)}(hhh]h)}(h>wrapper around fb_set_suspend that also takes the console lockh]h>wrapper around fb_set_suspend that also takes the console lock}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1jhhhjq9hNhNubj)}(hX**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL ``bool suspend`` whether to suspend or resume **Description** A wrapper around fb_set_suspend() that takes the console lock. If the lock isn't available on resume, a worker is tasked with waiting for the lock to become available. The console lock can be pretty contented on resume due to all the printk activity. This function can be called multiple times with the same state since :c:type:`fb_info.state ` is checked to see if fbdev is running or not before locking. Use drm_fb_helper_set_suspend() if you need to take the lock yourself.h](h)}(h**Parameters**h]j%)}(hj&_h]h Parameters}(hj(_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$_ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj _ubji)}(hhh](jn)}(hO``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjE_h]hstruct drm_fb_helper *fb_helper}(hjG_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC_ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj?_ubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hj^_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ_hMhj[_ubah}(h]h ]h"]h$]h&]uh1jhj?_ubeh}(h]h ]h"]h$]h&]uh1jmhjZ_hMhj<_ubjn)}(h.``bool suspend`` whether to suspend or resume h](jt)}(h``bool suspend``h]jz)}(hj~_h]h bool suspend}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|_ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjx_ubj)}(hhh]h)}(hwhether to suspend or resumeh]hwhether to suspend or resume}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjx_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhj<_ubeh}(h]h ]h"]h$]h&]uh1jhhj _ubh)}(h**Description**h]j%)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj _ubh)}(hA wrapper around fb_set_suspend() that takes the console lock. If the lock isn't available on resume, a worker is tasked with waiting for the lock to become available. The console lock can be pretty contented on resume due to all the printk activity.h]hA wrapper around fb_set_suspend() that takes the console lock. If the lock isn’t available on resume, a worker is tasked with waiting for the lock to become available. The console lock can be pretty contented on resume due to all the printk activity.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj _ubh)}(hThis function can be called multiple times with the same state since :c:type:`fb_info.state ` is checked to see if fbdev is running or not before locking.h](hEThis function can be called multiple times with the same state since }(hj_hhhNhNubh)}(h!:c:type:`fb_info.state `h]jz)}(hj_h]h fb_info.state}(hj_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjfb_infouh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM hj_ubh= is checked to see if fbdev is running or not before locking.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hM hj _ubh)}(hFUse drm_fb_helper_set_suspend() if you need to take the lock yourself.h]hFUse drm_fb_helper_set_suspend() if you need to take the lock yourself.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj _ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_fb_helper_setcmap (C function)c.drm_fb_helper_setcmaphNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hFint drm_fb_helper_setcmap (struct fb_cmap *cmap, struct fb_info *info)h]j)}(hEint drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)h](j)}(hinth]hint}(hj?`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;`hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjN`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;`hhhjM`hMubj)}(hdrm_fb_helper_setcmaph]j)}(hdrm_fb_helper_setcmaph]hdrm_fb_helper_setcmap}(hj``hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;`hhhjM`hMubj)}(h,(struct fb_cmap *cmap, struct fb_info *info)h](j)}(hstruct fb_cmap *cmaph](j)}(hjh]hstruct}(hj|`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx`ubh)}(hhh]j)}(hfb_cmaph]hfb_cmap}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j%)}jjb`sbc.drm_fb_helper_setcmapasbuh1hhjx`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx`ubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjx`ubj)}(hcmaph]hcmap}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjt`ubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j`c.drm_fb_helper_setcmapasbuh1hhj`ubj)}(h h]h }(hj*ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hj8ahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hinfoh]hinfo}(hjEahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjt`ubeh}(h]h ]h"]h$]h&]jjuh1jhj;`hhhjM`hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7`hhhjM`hMubah}(h]j2`ah ](jjeh"]h$]h&]jj)jhuh1jhjM`hMhj4`hhubj)}(hhh]h)}(h7implementation for :c:type:`fb_ops.fb_setcmap `h](himplementation for }(hjoahhhNhNubh)}(h$:c:type:`fb_ops.fb_setcmap `h]jz)}(hjyah]hfb_ops.fb_setcmap}(hj{ahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j`c.drm_fb_helper_setcmapasbjfb_opsuh1hhjDhKhjoaubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjlahhubah}(h]h ]h"]h$]h&]uh1jhj4`hhhjM`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjq9hNhNubj)}(hq**Parameters** ``struct fb_cmap *cmap`` cmap to set ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah2}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjaubji)}(hhh](jn)}(h%``struct fb_cmap *cmap`` cmap to set h](jt)}(h``struct fb_cmap *cmap``h]jz)}(hjah]hstruct fb_cmap *cmap}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjaubj)}(hhh]h)}(h cmap to seth]h cmap to set}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjaubjn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hj bh]hstruct fb_info *info}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj bubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjbubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hj&bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj#bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj"bhMhjaubeh}(h]h ]h"]h$]h&]uh1jhhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_fb_helper_ioctl (C function)c.drm_fb_helper_ioctlhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hSint drm_fb_helper_ioctl (struct fb_info *info, unsigned int cmd, unsigned long arg)h]j)}(hRint drm_fb_helper_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)h](j)}(hinth]hint}(hjgbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM*ubj)}(h h]h }(hjvbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbhhhjubhM*ubj)}(hdrm_fb_helper_ioctlh]j)}(hdrm_fb_helper_ioctlh]hdrm_fb_helper_ioctl}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjcbhhhjubhM*ubj)}(h;(struct fb_info *info, unsigned int cmd, unsigned long arg)h](j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j%)}jjbsbc.drm_fb_helper_ioctlasbuh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbubj)}(hinfoh]hinfo}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hunsigned int cmdh](j)}(hunsignedh]hunsigned}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hj$chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hinth]hint}(hj2chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hj@chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hcmdh]hcmd}(hjNchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hunsigned long argh](j)}(hunsignedh]hunsigned}(hjgchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjccubj)}(h h]h }(hjuchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjccubj)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjccubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjccubj)}(hargh]harg}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjccubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhjcbhhhjubhM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_bhhhjubhM*ubah}(h]jZbah ](jjeh"]h$]h&]jj)jhuh1jhjubhM*hj\bhhubj)}(hhh]h)}(hlegacy ioctl implementationh]hlegacy ioctl implementation}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM"hjchhubah}(h]h ]h"]h$]h&]uh1jhj\bhhhjubhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhjq9hNhNubj)}(hX**Parameters** ``struct fb_info *info`` fbdev registered by the helper ``unsigned int cmd`` ioctl command ``unsigned long arg`` ioctl argument **Description** A helper to implement the standard fbdev ioctl. Only FBIO_WAITFORVSYNC is implemented for now.h](h)}(h**Parameters**h]j%)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM&hjcubji)}(hhh](jn)}(h8``struct fb_info *info`` fbdev registered by the helper h](jt)}(h``struct fb_info *info``h]jz)}(hj dh]hstruct fb_info *info}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM#hjdubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hj#dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM#hj dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjdhM#hjdubjn)}(h#``unsigned int cmd`` ioctl command h](jt)}(h``unsigned int cmd``h]jz)}(hjCdh]hunsigned int cmd}(hjEdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAdubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM$hj=dubj)}(hhh]h)}(h ioctl commandh]h ioctl command}(hj\dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXdhM$hjYdubah}(h]h ]h"]h$]h&]uh1jhj=dubeh}(h]h ]h"]h$]h&]uh1jmhjXdhM$hjdubjn)}(h%``unsigned long arg`` ioctl argument h](jt)}(h``unsigned long arg``h]jz)}(hj|dh]hunsigned long arg}(hj~dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzdubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM%hjvdubj)}(hhh]h)}(hioctl argumenth]hioctl argument}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM%hjdubah}(h]h ]h"]h$]h&]uh1jhjvdubeh}(h]h ]h"]h$]h&]uh1jmhjdhM%hjdubeh}(h]h ]h"]h$]h&]uh1jhhjcubh)}(h**Description**h]j%)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM'hjcubh)}(h^A helper to implement the standard fbdev ioctl. Only FBIO_WAITFORVSYNC is implemented for now.h]h^A helper to implement the standard fbdev ioctl. Only FBIO_WAITFORVSYNC is implemented for now.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM'hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_helper_check_var (C function)c.drm_fb_helper_check_varhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hQint drm_fb_helper_check_var (struct fb_var_screeninfo *var, struct fb_info *info)h]j)}(hPint drm_fb_helper_check_var(struct fb_var_screeninfo *var, struct fb_info *info)h](j)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hj ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhj ehMubj)}(hdrm_fb_helper_check_varh]j)}(hdrm_fb_helper_check_varh]hdrm_fb_helper_check_var}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhj ehMubj)}(h5(struct fb_var_screeninfo *var, struct fb_info *info)h](j)}(hstruct fb_var_screeninfo *varh](j)}(hjh]hstruct}(hj9ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5eubj)}(h h]h }(hjFehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5eubh)}(hhh]j)}(hfb_var_screeninfoh]hfb_var_screeninfo}(hjWehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYemodnameN classnameNjj)}j]j%)}jjesbc.drm_fb_helper_check_varasbuh1hhj5eubj)}(h h]h }(hjwehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5eubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5eubj)}(hvarh]hvar}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5eubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1eubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jsec.drm_fb_helper_check_varasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hinfoh]hinfo}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1eubeh}(h]h ]h"]h$]h&]jjuh1jhjdhhhj ehMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjdhhhj ehMubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jhj ehMhjdhhubj)}(hhh]h)}(h9implementation for :c:type:`fb_ops.fb_check_var `h](himplementation for }(hj,fhhhNhNubh)}(h&:c:type:`fb_ops.fb_check_var `h]jz)}(hj6fh]hfb_ops.fb_check_var}(hj8fhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4fubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jsec.drm_fb_helper_check_varasbjfb_opsuh1hhjDhKhj,fubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj)fhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj ehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhfjjhfjjjuh1jhhhjq9hNhNubj)}(h**Parameters** ``struct fb_var_screeninfo *var`` screeninfo to check ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjrfh]h Parameters}(hjtfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpfubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjlfubji)}(hhh](jn)}(h6``struct fb_var_screeninfo *var`` screeninfo to check h](jt)}(h!``struct fb_var_screeninfo *var``h]jz)}(hjfh]hstruct fb_var_screeninfo *var}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjfubj)}(hhh]h)}(hscreeninfo to checkh]hscreeninfo to check}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjfubjn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hjfh]hstruct fb_info *info}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjfubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjfubeh}(h]h ]h"]h$]h&]uh1jhhjlfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_fb_helper_set_par (C function)c.drm_fb_helper_set_parhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h0int drm_fb_helper_set_par (struct fb_info *info)h]j)}(h/int drm_fb_helper_set_par(struct fb_info *info)h](j)}(hinth]hint}(hj$ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ghhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM4ubj)}(h h]h }(hj3ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ghhhj2ghM4ubj)}(hdrm_fb_helper_set_parh]j)}(hdrm_fb_helper_set_parh]hdrm_fb_helper_set_par}(hjEghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAgubah}(h]h ](jjeh"]h$]h&]jjuh1jhj ghhhj2ghM4ubj)}(h(struct fb_info *info)h]j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjaghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]gubj)}(h h]h }(hjnghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]gubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|gubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j%)}jjGgsbc.drm_fb_helper_set_parasbuh1hhj]gubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]gubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]gubj)}(hinfoh]hinfo}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYgubah}(h]h ]h"]h$]h&]jjuh1jhj ghhhj2ghM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhj2ghM4ubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhj2ghM4hjghhubj)}(hhh]h)}(h7implementation for :c:type:`fb_ops.fb_set_par `h](himplementation for }(hjghhhNhNubh)}(h$:c:type:`fb_ops.fb_set_par `h]jz)}(hjgh]hfb_ops.fb_set_par}(hjghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jgc.drm_fb_helper_set_parasbjfb_opsuh1hhjDhKhjgubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM-hjghhubah}(h]h ]h"]h$]h&]uh1jhjghhhj2ghM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj hjj hjjjuh1jhhhjq9hNhNubj)}(h**Parameters** ``struct fb_info *info`` fbdev registered by the helper **Description** This will let fbcon do the mode init and is called at initialization time by the fbdev core when registering the driver, and later on through the hotplug callback.h](h)}(h**Parameters**h]j%)}(hj*hh]h Parameters}(hj,hhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(hubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM1hj$hubji)}(hhh]jn)}(h8``struct fb_info *info`` fbdev registered by the helper h](jt)}(h``struct fb_info *info``h]jz)}(hjIhh]hstruct fb_info *info}(hjKhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGhubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM.hjChubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjbhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hhM.hj_hubah}(h]h ]h"]h$]h&]uh1jhjChubeh}(h]h ]h"]h$]h&]uh1jmhj^hhM.hj@hubah}(h]h ]h"]h$]h&]uh1jhhj$hubh)}(h**Description**h]j%)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM0hj$hubh)}(hThis will let fbcon do the mode init and is called at initialization time by the fbdev core when registering the driver, and later on through the hotplug callback.h]hThis will let fbcon do the mode init and is called at initialization time by the fbdev core when registering the driver, and later on through the hotplug callback.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM0hj$hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_pan_display (C function)c.drm_fb_helper_pan_displayhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hSint drm_fb_helper_pan_display (struct fb_var_screeninfo *var, struct fb_info *info)h]j)}(hRint drm_fb_helper_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)h](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhMubj)}(hdrm_fb_helper_pan_displayh]j)}(hdrm_fb_helper_pan_displayh]hdrm_fb_helper_pan_display}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjhhMubj)}(h5(struct fb_var_screeninfo *var, struct fb_info *info)h](j)}(hstruct fb_var_screeninfo *varh](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hfb_var_screeninfoh]hfb_var_screeninfo}(hj$ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&imodnameN classnameNjj)}j]j%)}jjhsbc.drm_fb_helper_pan_displayasbuh1hhjiubj)}(h h]h }(hjDihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjRihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hvarh]hvar}(hj_ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjxihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtiubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j@ic.drm_fb_helper_pan_displayasbuh1hhjtiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtiubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtiubj)}(hinfoh]hinfo}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhhjhhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jhjhhMhjhhhubj)}(hhh]h)}(h;implementation for :c:type:`fb_ops.fb_pan_display `h](himplementation for }(hjihhhNhNubh)}(h(:c:type:`fb_ops.fb_pan_display `h]jz)}(hjjh]hfb_ops.fb_pan_display}(hjjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j@ic.drm_fb_helper_pan_displayasbjfb_opsuh1hhjDhKhjiubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jjj5jjjjuh1jhhhjq9hNhNubj)}(h**Parameters** ``struct fb_var_screeninfo *var`` updated screen information ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hj?jh]h Parameters}(hjAjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=jubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj9jubji)}(hhh](jn)}(h=``struct fb_var_screeninfo *var`` updated screen information h](jt)}(h!``struct fb_var_screeninfo *var``h]jz)}(hj^jh]hstruct fb_var_screeninfo *var}(hj`jhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\jubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjXjubj)}(hhh]h)}(hupdated screen informationh]hupdated screen information}(hjwjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsjhMhjtjubah}(h]h ]h"]h$]h&]uh1jhjXjubeh}(h]h ]h"]h$]h&]uh1jmhjsjhMhjUjubjn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hjjh]hstruct fb_info *info}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjjubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjUjubeh}(h]h ]h"]h$]h&]uh1jhhj9jubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_helper_fill_info (C function)c.drm_fb_helper_fill_infohNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h~void drm_fb_helper_fill_info (struct fb_info *info, struct drm_fb_helper *fb_helper, struct drm_fb_helper_surface_size *sizes)h]j)}(h}void drm_fb_helper_fill_info(struct fb_info *info, struct drm_fb_helper *fb_helper, struct drm_fb_helper_surface_size *sizes)h](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubj)}(hdrm_fb_helper_fill_infoh]j)}(hdrm_fb_helper_fill_infoh]hdrm_fb_helper_fill_info}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjjhMubj)}(ha(struct fb_info *info, struct drm_fb_helper *fb_helper, struct drm_fb_helper_surface_size *sizes)h](j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hj.khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*kubj)}(h h]h }(hj;khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*kubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjLkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNkmodnameN classnameNjj)}j]j%)}jjksbc.drm_fb_helper_fill_infoasbuh1hhj*kubj)}(h h]h }(hjlkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*kubj9)}(hj9h]h*}(hjzkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj*kubj)}(hinfoh]hinfo}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*kubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&kubj)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jhkc.drm_fb_helper_fill_infoasbuh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(h fb_helperh]h fb_helper}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&kubj)}(h(struct drm_fb_helper_surface_size *sizesh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubh)}(hhh]j)}(hdrm_fb_helper_surface_sizeh]hdrm_fb_helper_surface_size}(hj.lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0lmodnameN classnameNjj)}j]jhkc.drm_fb_helper_fill_infoasbuh1hhj lubj)}(h h]h }(hjLlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubj9)}(hj9h]h*}(hjZlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj lubj)}(hsizesh]hsizes}(hjglhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&kubeh}(h]h ]h"]h$]h&]jjuh1jhjjhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjjhMhjjhhubj)}(hhh]h)}(hinitializes fbdev informationh]hinitializes fbdev information}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjlhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jhhhjq9hNhNubj)}(hXc**Parameters** ``struct fb_info *info`` fbdev instance to set up ``struct drm_fb_helper *fb_helper`` fb helper instance to use as template ``struct drm_fb_helper_surface_size *sizes`` describes fbdev size and scanout surface size **Description** Sets up the variable and fixed fbdev metainformation from the given fb helper instance and the drm framebuffer allocated in :c:type:`drm_fb_helper.fb `. Drivers should call this (or their equivalent setup code) from their :c:type:`drm_driver.fbdev_probe ` callback after having allocated the fbdev backing storage framebuffer.h](h)}(h**Parameters**h]j%)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjlubji)}(hhh](jn)}(h2``struct fb_info *info`` fbdev instance to set up h](jt)}(h``struct fb_info *info``h]jz)}(hjlh]hstruct fb_info *info}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjlubj)}(hhh]h)}(hfbdev instance to set uph]hfbdev instance to set up}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjlubjn)}(hJ``struct drm_fb_helper *fb_helper`` fb helper instance to use as template h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hj mh]hstruct drm_fb_helper *fb_helper}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj mubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjmubj)}(hhh]h)}(h%fb helper instance to use as templateh]h%fb helper instance to use as template}(hj$mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj mhMhj!mubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhj mhMhjlubjn)}(h[``struct drm_fb_helper_surface_size *sizes`` describes fbdev size and scanout surface size h](jt)}(h,``struct drm_fb_helper_surface_size *sizes``h]jz)}(hjDmh]h(struct drm_fb_helper_surface_size *sizes}(hjFmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBmubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj>mubj)}(hhh]h)}(h-describes fbdev size and scanout surface sizeh]h-describes fbdev size and scanout surface size}(hj]mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYmhMhjZmubah}(h]h ]h"]h$]h&]uh1jhj>mubeh}(h]h ]h"]h$]h&]uh1jmhjYmhMhjlubeh}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}mubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjlubh)}(hSets up the variable and fixed fbdev metainformation from the given fb helper instance and the drm framebuffer allocated in :c:type:`drm_fb_helper.fb `.h](h|Sets up the variable and fixed fbdev metainformation from the given fb helper instance and the drm framebuffer allocated in }(hjmhhhNhNubh)}(h*:c:type:`drm_fb_helper.fb `h]jz)}(hjmh]hdrm_fb_helper.fb}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_fb_helperuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjlubh)}(hDrivers should call this (or their equivalent setup code) from their :c:type:`drm_driver.fbdev_probe ` callback after having allocated the fbdev backing storage framebuffer.h](hEDrivers should call this (or their equivalent setup code) from their }(hjmhhhNhNubh)}(h-:c:type:`drm_driver.fbdev_probe `h]jz)}(hjmh]hdrm_driver.fbdev_probe}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_driveruh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjmubhG callback after having allocated the fbdev backing storage framebuffer.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_fb_helper_initial_config (C function)c.drm_fb_helper_initial_confighNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hBint drm_fb_helper_initial_config (struct drm_fb_helper *fb_helper)h]j)}(hAint drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper)h](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMtubj)}(h h]h }(hj(nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhj'nhMtubj)}(hdrm_fb_helper_initial_configh]j)}(hdrm_fb_helper_initial_configh]hdrm_fb_helper_initial_config}(hj:nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6nubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhj'nhMtubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjVnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRnubj)}(h h]h }(hjcnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRnubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjtnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvnmodnameN classnameNjj)}j]j%)}jj` callback to let the driver allocate and initialize the fbdev info structure and the drm framebuffer used to back the fbdev. drm_fb_helper_fill_info() is provided as a helper to setup simple default values for the fbdev info structure. HANG DEBUGGING: When you have fbcon support built-in or already loaded, this function will do a full modeset to setup the fbdev console. Due to locking misdesign in the VT/fbdev subsystem that entire modeset sequence has to be done while holding console_lock. Until console_unlock is called no dmesg lines will be sent out to consoles, not even serial console. This means when your driver crashes, you will see absolutely nothing else but a system stuck in this function, with no further output. Any kind of printk() you place within your own driver or in the drm core modeset code will also never show up. Standard debug practice is to run the fbcon setup without taking the console_lock as a hack, to be able to see backtraces and crashes on the serial line. This can be done by setting the fb.lockless_register_fb=1 kernel cmdline option. The other option is to just disable fbdev emulation since very likely the first modeset from userspace will crash in the same way, and is even easier to debug. This can be done by setting the drm_kms_helper.fbdev_emulation=0 kernel cmdline option. **Return** Zero if everything went ok, nonzero otherwise.h](h)}(h**Parameters**h]j%)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMQhjnubji)}(hhh]jn)}(h<``struct drm_fb_helper *fb_helper`` fb_helper device struct h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjoh]hstruct drm_fb_helper *fb_helper}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMNhjoubj)}(hhh]h)}(hfb_helper device structh]hfb_helper device struct}(hj3ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ohMNhj0oubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhj/ohMNhjoubah}(h]h ]h"]h$]h&]uh1jhhjnubh)}(h**Description**h]j%)}(hjUoh]h Description}(hjWohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSoubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMPhjnubh)}(hScans the CRTCs and connectors and tries to put together an initial setup. At the moment, this is a cloned configuration across all heads with a new framebuffer object as the backing store.h]hScans the CRTCs and connectors and tries to put together an initial setup. At the moment, this is a cloned configuration across all heads with a new framebuffer object as the backing store.}(hjkohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMPhjnubh)}(huNote that this also registers the fbdev and so allows userspace to call into the driver through the fbdev interfaces.h]huNote that this also registers the fbdev and so allows userspace to call into the driver through the fbdev interfaces.}(hjzohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMThjnubh)}(hX>This function will call down into the :c:type:`drm_driver.fbdev_probe ` callback to let the driver allocate and initialize the fbdev info structure and the drm framebuffer used to back the fbdev. drm_fb_helper_fill_info() is provided as a helper to setup simple default values for the fbdev info structure.h](h&This function will call down into the }(hjohhhNhNubh)}(h-:c:type:`drm_driver.fbdev_probe `h]jz)}(hjoh]hdrm_driver.fbdev_probe}(hjohhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_driveruh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMWhjoubh callback to let the driver allocate and initialize the fbdev info structure and the drm framebuffer used to back the fbdev. drm_fb_helper_fill_info() is provided as a helper to setup simple default values for the fbdev info structure.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohMWhjnubh)}(hHANG DEBUGGING:h]hHANG DEBUGGING:}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM\hjnubh)}(hXNWhen you have fbcon support built-in or already loaded, this function will do a full modeset to setup the fbdev console. Due to locking misdesign in the VT/fbdev subsystem that entire modeset sequence has to be done while holding console_lock. Until console_unlock is called no dmesg lines will be sent out to consoles, not even serial console. This means when your driver crashes, you will see absolutely nothing else but a system stuck in this function, with no further output. Any kind of printk() you place within your own driver or in the drm core modeset code will also never show up.h]hXNWhen you have fbcon support built-in or already loaded, this function will do a full modeset to setup the fbdev console. Due to locking misdesign in the VT/fbdev subsystem that entire modeset sequence has to be done while holding console_lock. Until console_unlock is called no dmesg lines will be sent out to consoles, not even serial console. This means when your driver crashes, you will see absolutely nothing else but a system stuck in this function, with no further output. Any kind of printk() you place within your own driver or in the drm core modeset code will also never show up.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM^hjnubh)}(hStandard debug practice is to run the fbcon setup without taking the console_lock as a hack, to be able to see backtraces and crashes on the serial line. This can be done by setting the fb.lockless_register_fb=1 kernel cmdline option.h]hStandard debug practice is to run the fbcon setup without taking the console_lock as a hack, to be able to see backtraces and crashes on the serial line. This can be done by setting the fb.lockless_register_fb=1 kernel cmdline option.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMghjnubh)}(hThe other option is to just disable fbdev emulation since very likely the first modeset from userspace will crash in the same way, and is even easier to debug. This can be done by setting the drm_kms_helper.fbdev_emulation=0 kernel cmdline option.h]hThe other option is to just disable fbdev emulation since very likely the first modeset from userspace will crash in the same way, and is even easier to debug. This can be done by setting the drm_kms_helper.fbdev_emulation=0 kernel cmdline option.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMlhjnubh)}(h **Return**h]j%)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMqhjnubh)}(h.Zero if everything went ok, nonzero otherwise.h]h.Zero if everything went ok, nonzero otherwise.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMqhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_helper_hotplug_event (C function)c.drm_fb_helper_hotplug_eventhNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(hAint drm_fb_helper_hotplug_event (struct drm_fb_helper *fb_helper)h]j)}(h@int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)h](j)}(hinth]hint}(hj>phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:phhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjMphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:phhhjLphMubj)}(hdrm_fb_helper_hotplug_eventh]j)}(hdrm_fb_helper_hotplug_eventh]hdrm_fb_helper_hotplug_event}(hj_phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[pubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:phhhjLphMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj{phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwpubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jjapsbc.drm_fb_helper_hotplug_eventasbuh1hhjwpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwpubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwpubj)}(h fb_helperh]h fb_helper}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjspubah}(h]h ]h"]h$]h&]jjuh1jhj:phhhjLphMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj6phhhjLphMubah}(h]j1pah ](jjeh"]h$]h&]jj)jhuh1jhjLphMhj3phhubj)}(hhh]h)}(hOrespond to a hotplug notification by probing all the outputs attached to the fbh]hOrespond to a hotplug notification by probing all the outputs attached to the fb}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjphhubah}(h]h ]h"]h$]h&]uh1jhj3phhhjLphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjq9hNhNubj)}(hX**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL **Description** Scan the connectors attached to the fb_helper and try to put together a setup after notification of a change in output configuration. Called at runtime, takes the mode config locks to be able to check/change the modeset configuration. Must be run from process context (which usually means either the output polling work or a work item launched from the driver's hotplug interrupt). Note that drivers may call this even before calling drm_fb_helper_initial_config but only after drm_fb_helper_init. This allows for a race-free fbcon setup and will make sure that the fbdev emulation will not miss any hotplug events. **Return** 0 on success and a non-zero error code otherwise.h](h)}(h**Parameters**h]j%)}(hj qh]h Parameters}(hj"qhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubji)}(hhh]jn)}(hO``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper, can be NULL h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hj?qh]hstruct drm_fb_helper *fb_helper}(hjAqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=qubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj9qubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hjXqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTqhMhjUqubah}(h]h ]h"]h$]h&]uh1jhj9qubeh}(h]h ]h"]h$]h&]uh1jmhjTqhMhj6qubah}(h]h ]h"]h$]h&]uh1jhhjqubh)}(h**Description**h]j%)}(hjzqh]h Description}(hj|qhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxqubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubh)}(hScan the connectors attached to the fb_helper and try to put together a setup after notification of a change in output configuration.h]hScan the connectors attached to the fb_helper and try to put together a setup after notification of a change in output configuration.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubh)}(hCalled at runtime, takes the mode config locks to be able to check/change the modeset configuration. Must be run from process context (which usually means either the output polling work or a work item launched from the driver's hotplug interrupt).h]hCalled at runtime, takes the mode config locks to be able to check/change the modeset configuration. Must be run from process context (which usually means either the output polling work or a work item launched from the driver’s hotplug interrupt).}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubh)}(hNote that drivers may call this even before calling drm_fb_helper_initial_config but only after drm_fb_helper_init. This allows for a race-free fbcon setup and will make sure that the fbdev emulation will not miss any hotplug events.h]hNote that drivers may call this even before calling drm_fb_helper_initial_config but only after drm_fb_helper_init. This allows for a race-free fbcon setup and will make sure that the fbdev emulation will not miss any hotplug events.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubh)}(h **Return**h]j%)}(hjqh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubh)}(h10 on success and a non-zero error code otherwise.h]h10 on success and a non-zero error code otherwise.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_helper_lastclose (C function)c.drm_fb_helper_lastclosehNtauh1jxhjq9hhhNhNubj)}(hhh](j)}(h5void drm_fb_helper_lastclose (struct drm_device *dev)h]j)}(h4void drm_fb_helper_lastclose(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjrhMubj)}(hdrm_fb_helper_lastcloseh]j)}(hdrm_fb_helper_lastcloseh]hdrm_fb_helper_lastclose}(hj%rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!rubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjrhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjArhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=rubj)}(h h]h }(hjNrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=rubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj_rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjarmodnameN classnameNjj)}j]j%)}jj'rsbc.drm_fb_helper_lastcloseasbuh1hhj=rubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=rubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=rubj)}(hdevh]hdev}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9rubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjqhhhjrhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjqhhubj)}(hhh]h)}(h/DRM driver lastclose helper for fbdev emulationh]h/DRM driver lastclose helper for fbdev emulation}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1jhhhjq9hNhNubj)}(h**Parameters** ``struct drm_device *dev`` DRM device **Description** This function is obsolete. Call drm_fb_helper_restore_fbdev_mode_unlocked() instead.h](h)}(h**Parameters**h]j%)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjrubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjsh]hstruct drm_device *dev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjrubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjshMhjrubah}(h]h ]h"]h$]h&]uh1jhhjrubh)}(h**Description**h]j%)}(hj@sh]h Description}(hjBshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>subah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjrubh)}(hTThis function is obsolete. Call drm_fb_helper_restore_fbdev_mode_unlocked() instead.h]hTThis function is obsolete. Call drm_fb_helper_restore_fbdev_mode_unlocked() instead.}(hjVshhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjq9hhhNhNubeh}(h] fbdev-helper-functions-referenceah ]h"] fbdev helper functions referenceah$]h&]uh1hhhhhhhhKlubh)}(hhh](h)}(h!format Helper Functions Referenceh]h!format Helper Functions Reference}(hjwshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtshhhhhKxubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_format_conv_state_init (C function)c.drm_format_conv_state_inithNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hEvoid drm_format_conv_state_init (struct drm_format_conv_state *state)h]j)}(hDvoid drm_format_conv_state_init(struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshKubj)}(hdrm_format_conv_state_inith]j)}(hdrm_format_conv_state_inith]hdrm_format_conv_state_init}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjshKubj)}(h%(struct drm_format_conv_state *state)h]j)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j%)}jjssbc.drm_format_conv_state_initasbuh1hhjsubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hj'thhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hstateh]hstate}(hj4thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubah}(h]h ]h"]h$]h&]jjuh1jhjshhhjshKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjshKubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjshKhjshhubj)}(hhh]h)}(h"Initialize format-conversion stateh]h"Initialize format-conversion state}(hj^thhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhj[thhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvtjjvtjjjuh1jhhhjtshNhNubj)}(h**Parameters** ``struct drm_format_conv_state *state`` The state to initialize **Description** Clears all fields in struct drm_format_conv_state. The state will be empty with no preallocated resources.h](h)}(h**Parameters**h]j%)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~tubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjztubji)}(hhh]jn)}(h@``struct drm_format_conv_state *state`` The state to initialize h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjth]h#struct drm_format_conv_state *state}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjtubj)}(hhh]h)}(hThe state to initializeh]hThe state to initialize}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthKhjtubah}(h]h ]h"]h$]h&]uh1jhhjztubh)}(h**Description**h]j%)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjztubh)}(hjClears all fields in struct drm_format_conv_state. The state will be empty with no preallocated resources.h]hjClears all fields in struct drm_format_conv_state. The state will be empty with no preallocated resources.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjztubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_format_conv_state_copy (C function)c.drm_format_conv_state_copyhNtauh1jxhjtshhhNhNubj)}(hhh](j)}(htvoid drm_format_conv_state_copy (struct drm_format_conv_state *state, const struct drm_format_conv_state *old_state)h]j)}(hsvoid drm_format_conv_state_copy(struct drm_format_conv_state *state, const struct drm_format_conv_state *old_state)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chK.ubj)}(h h]h }(hj.uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhj-uhK.ubj)}(hdrm_format_conv_state_copyh]j)}(hdrm_format_conv_state_copyh]hdrm_format_conv_state_copy}(hj@uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhjYyubj)}(hhh]h)}(hThe minimum allocation sizeh]hThe minimum allocation size}(hjxyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtyhK>hjuyubah}(h]h ]h"]h$]h&]uh1jhjYyubeh}(h]h ]h"]h$]h&]uh1jmhjtyhK>hjyubjn)}(h$``gfp_t flags`` Flags for kmalloc() h](jt)}(h``gfp_t flags``h]jz)}(hjyh]h gfp_t flags}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chK?hjyubj)}(hhh]h)}(hFlags for kmalloc()h]hFlags for kmalloc()}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhK?hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhK?hjyubeh}(h]h ]h"]h$]h&]uh1jhhjyubh)}(h**Description**h]j%)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKAhjyubh)}(hXAllocates at least **new_size** bytes and returns a pointer to the memory range. After calling this function, previously returned memory blocks are invalid. It's best to collect all memory requirements of a format conversion and call this function once to allocate the range.h](hAllocates at least }(hjyhhhNhNubj%)}(h **new_size**h]hnew_size}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubh bytes and returns a pointer to the memory range. After calling this function, previously returned memory blocks are invalid. It’s best to collect all memory requirements of a format conversion and call this function once to allocate the range.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKAhjyubh)}(h **Return**h]j%)}(hj zh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj zubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKFhjyubh)}(h;A pointer to the allocated memory range, or NULL otherwise.h]h;A pointer to the allocated memory range, or NULL otherwise.}(hj"zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKFhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_format_conv_state_release (C function)c.drm_format_conv_state_releasehNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hHvoid drm_format_conv_state_release (struct drm_format_conv_state *state)h]j)}(hGvoid drm_format_conv_state_release(struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjQzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMzhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKgubj)}(h h]h }(hj`zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMzhhhj_zhKgubj)}(hdrm_format_conv_state_releaseh]j)}(hdrm_format_conv_state_releaseh]hdrm_format_conv_state_release}(hjrzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMzhhhj_zhKgubj)}(h%(struct drm_format_conv_state *state)h]j)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jjtzsbc.drm_format_conv_state_releaseasbuh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hstateh]hstate}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubah}(h]h ]h"]h$]h&]jjuh1jhjMzhhhj_zhKgubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIzhhhj_zhKgubah}(h]jDzah ](jjeh"]h$]h&]jj)jhuh1jhj_zhKghjFzhhubj)}(hhh]h)}(h%Releases an format-conversion storageh]h%Releases an format-conversion storage}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chK`hj{hhubah}(h]h ]h"]h$]h&]uh1jhjFzhhhj_zhKgubeh}(h]h ](jfunctioneh"]h$]h&]jjjj){jj){jjjuh1jhhhjtshNhNubj)}(hX1**Parameters** ``struct drm_format_conv_state *state`` The format-conversion state **Description** Releases the memory range references by the format-conversion state. After this call, all pointers to the memory are invalid. Prefer drm_format_conv_state_init() for cleaning up and unloading a driver.h](h)}(h**Parameters**h]j%)}(hj3{h]h Parameters}(hj5{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1{ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKdhj-{ubji)}(hhh]jn)}(hD``struct drm_format_conv_state *state`` The format-conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjR{h]h#struct drm_format_conv_state *state}(hjT{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP{ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKahjL{ubj)}(hhh]h)}(hThe format-conversion stateh]hThe format-conversion state}(hjk{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg{hKahjh{ubah}(h]h ]h"]h$]h&]uh1jhjL{ubeh}(h]h ]h"]h$]h&]uh1jmhjg{hKahjI{ubah}(h]h ]h"]h$]h&]uh1jhhj-{ubh)}(h**Description**h]j%)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKchj-{ubh)}(hReleases the memory range references by the format-conversion state. After this call, all pointers to the memory are invalid. Prefer drm_format_conv_state_init() for cleaning up and unloading a driver.h]hReleases the memory range references by the format-conversion state. After this call, all pointers to the memory are invalid. Prefer drm_format_conv_state_init() for cleaning up and unloading a driver.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKchj-{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_clip_offset (C function)c.drm_fb_clip_offsethNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hwunsigned int drm_fb_clip_offset (unsigned int pitch, const struct drm_format_info *format, const struct drm_rect *clip)h]j)}(hvunsigned int drm_fb_clip_offset(unsigned int pitch, const struct drm_format_info *format, const struct drm_rect *clip)h](j)}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hKubj)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hKubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hKubj)}(hdrm_fb_clip_offseth]j)}(hdrm_fb_clip_offseth]hdrm_fb_clip_offset}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj |ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj{hKubj)}(hW(unsigned int pitch, const struct drm_format_info *format, const struct drm_rect *clip)h](j)}(hunsigned int pitchh](j)}(hunsignedh]hunsigned}(hj+|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'|ubj)}(h h]h }(hj9|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'|ubj)}(hinth]hint}(hjG|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'|ubj)}(h h]h }(hjU|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'|ubj)}(hpitchh]hpitch}(hjc|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#|ubj)}(h$const struct drm_format_info *formath](j)}(hjch]hconst}(hj||hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|ubj)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|ubh)}(hhh]j)}(hdrm_format_infoh]hdrm_format_info}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j%)}jj|sbc.drm_fb_clip_offsetasbuh1hhjx|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjx|ubj)}(hformath]hformat}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#|ubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hj }hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]hstruct}(hj$}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj1}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjB}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD}modnameN classnameNjj)}j]j|c.drm_fb_clip_offsetasbuh1hhj}ubj)}(h h]h }(hj`}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj9h]h*}(hjn}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubj)}(hcliph]hclip}(hj{}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#|ubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhj{hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhj{hKubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj{hKhj{hhubj)}(hhh]h)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]jOc.drm_fb_memcpyasbuh1hhjubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhj~hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhj~hM ubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jhj~hM hj~hhubj)}(hhh]h)}(hCopy clip bufferh]hCopy clip buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjʁjjʁjjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct iosys_map *dst`` Array of destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy **Description** This function copies parts of a framebuffer to display memory. Destination and framebuffer formats must match. No conversion takes place. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)}(h**Parameters**h]j%)}(hjԁh]h Parameters}(hjցhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjҁubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhj΁ubji)}(hhh](jn)}(h7``struct iosys_map *dst`` Array of destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjubj)}(hhh]h)}(hArray of destination buffersh]hArray of destination buffers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hj,h]hconst unsigned int *dst_pitch}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhj&ubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjEhhhNhNubj%)}(h**dst**h]hdst}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh9; can be NULL if scanlines are stored next to each other.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhKhjubjn)}(h8``const struct iosys_map *src`` Array of source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjxh]hconst struct iosys_map *src}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjrubj)}(hhh]h)}(hArray of source buffersh]hArray of source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjʂhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƂhKhjǂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjƂhKhjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhj΁ubh)}(h**Description**h]j%)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj΁ubh)}(hXyThis function copies parts of a framebuffer to display memory. Destination and framebuffer formats must match. No conversion takes place. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory. Destination and framebuffer formats must match. No conversion takes place. The parameters }(hj;hhhNhNubj%)}(h**dst**h]hdst}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubh, }(hj;hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubh and }(hj;hhhNhNubj%)}(h**src**h]hsrc}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hj;hhhNhNubj%)}(h**fb**h]hfb}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj΁ubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj΁ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_swab (C function) c.drm_fb_swabhNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_swab (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, bool cached, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_swab(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, bool cached, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjӃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjσhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjσhhhjhMWubj)}(h drm_fb_swabh]j)}(h drm_fb_swabh]h drm_fb_swab}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjσhhhjhMWubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, bool cached, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jjsb c.drm_fb_swabasbuh1hhj ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdsth]hdst}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjDŽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj9)}(hj9h]h*}(hjՄhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~ubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jJ c.drm_fb_swabasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jJ c.drm_fb_swabasbuh1hhjubj)}(h h]h }(hj݅hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jJ c.drm_fb_swabasbuh1hhj ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool cachedh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcachedh]hcached}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjІhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̆ubj)}(h h]h }(hj݆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̆ubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jJ c.drm_fb_swabasbuh1hhj̆ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̆ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj̆ubj)}(hstateh]hstate}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̆ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjσhhhjhMWubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj˃hhhjhMWubah}(h]jƃah ](jjeh"]h$]h&]jj)jhuh1jhjhMWhjȃhhubj)}(hhh]h)}(hSwap bytes into clip bufferh]hSwap bytes into clip buffer}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMBhjNhhubah}(h]h ]h"]h$]h&]uh1jhjȃhhhjhMWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct iosys_map *dst`` Array of destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``bool cached`` Source buffer is mapped cached (eg. not write-combined) ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and swaps per-pixel bytes during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. If **cached** is false a temporary buffer is used to cache one pixel line at a time to speed up slow uncached reads. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)}(h**Parameters**h]j%)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMFhjmubji)}(hhh](jn)}(h7``struct iosys_map *dst`` Array of destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMChjubj)}(hhh]h)}(hArray of destination buffersh]hArray of destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMChjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjˇh]hconst unsigned int *dst_pitch}(hj͇hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjɇubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMEhjŇubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMDhjubah}(h]h ]h"]h$]h&]uh1jhjŇubeh}(h]h ]h"]h$]h&]uh1jmhjhMEhjubjn)}(h8``const struct iosys_map *src`` Array of source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMFhjubj)}(hhh]h)}(hArray of source buffersh]hArray of source buffers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMFhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj,hMFhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjPh]h const struct drm_framebuffer *fb}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMGhjJubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMGhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehMGhjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMHhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMHhjubjn)}(hH``bool cached`` Source buffer is mapped cached (eg. not write-combined) h](jt)}(h``bool cached``h]jz)}(hjˆh]h bool cached}(hjĈhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMIhjubj)}(hhh]h)}(h7Source buffer is mapped cached (eg. not write-combined)h]h7Source buffer is mapped cached (eg. not write-combined)}(hjۈhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj׈hMIhj؈ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj׈hMIhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMJhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMJhjubeh}(h]h ]h"]h$]h&]uh1jhhjmubh)}(h**Description**h]j%)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMLhjmubh)}(hXThis function copies parts of a framebuffer to display memory and swaps per-pixel bytes during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. If **cached** is false a temporary buffer is used to cache one pixel line at a time to speed up slow uncached reads.h](hThis function copies parts of a framebuffer to display memory and swaps per-pixel bytes during the process. Destination and framebuffer formats must match. The parameters }(hjLhhhNhNubj%)}(h**dst**h]hdst}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubh, }(hjLhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubh and }(hjLhhhNhNubj%)}(h**src**h]hsrc}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjLhhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubhi’s format. Each entry stores the value for the format’s respective color plane at the same index. If }(hjLhhhNhNubj%)}(h **cached**h]hcached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubhg is false a temporary buffer is used to cache one pixel line at a time to speed up slow uncached reads.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMLhjmubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMThjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_rgb332 (C function)c.drm_fb_xrgb8888_to_rgb332hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_rgb332 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_rgb332(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_fb_xrgb8888_to_rgb332h]j)}(hdrm_fb_xrgb8888_to_rgb332h]hdrm_fb_xrgb8888_to_rgb332}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_rgb332asbuh1hhj/ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjΊhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj܊hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]jmc.drm_fb_xrgb8888_to_rgb332asbuh1hhjubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjċhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjыhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߋubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jmc.drm_fb_xrgb8888_to_rgb332asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jmc.drm_fb_xrgb8888_to_rgb332asbuh1hhj0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hǰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hj݌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڌubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjߌmodnameN classnameNjj)}j]jmc.drm_fb_xrgb8888_to_rgb332asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&Convert XRGB8888 to RGB332 clip bufferh]h&Convert XRGB8888 to RGB332 clip buffer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhjtshNhNubj)}(hXj**Parameters** ``struct iosys_map *dst`` Array of RGB332 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for RGB332 devices that don't support XRGB8888 natively.h](h)}(h**Parameters**h]j%)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj\ubji)}(hhh](jn)}(h>``struct iosys_map *dst`` Array of RGB332 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj{ubj)}(hhh]h)}(h#Array of RGB332 destination buffersh]h#Array of RGB332 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjxubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjӍhhhNhNubj%)}(h**dst**h]hdst}(hjۍhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjӍubh9; can be NULL if scanlines are stored next to each other.}(hjӍhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjЍubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjύhMhjxubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjxubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hj?h]h const struct drm_framebuffer *fb}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj9ubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjxubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjxh]hconst struct drm_rect *clip}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjrubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjxubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjʎhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƎhMhjǎubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjƎhMhjxubeh}(h]h ]h"]h$]h&]uh1jhhj\ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj\ubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj\ubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjYhhhNhNubj%)}(h**dst**h]hdst}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubh2 (i.e. the destination is at the top-left corner).}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj\ubh)}(hVDrivers can use this function for RGB332 devices that don't support XRGB8888 natively.h]hXDrivers can use this function for RGB332 devices that don’t support XRGB8888 natively.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_rgb565 (C function)c.drm_fb_xrgb8888_to_rgb565hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_rgb565 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state, bool swab)h]j)}(hvoid drm_fb_xrgb8888_to_rgb565(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state, bool swab)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_fb_xrgb8888_to_rgb565h]j)}(hdrm_fb_xrgb8888_to_rgb565h]hdrm_fb_xrgb8888_to_rgb565}(hjʏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƏubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state, bool swab)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj̏sbc.drm_fb_xrgb8888_to_rgb565asbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hunsignedh]hunsigned}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjѐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͐ubj)}(h h]h }(hjސhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͐ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͐ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͐ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_rgb565asbuh1hhj͐ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͐ubj9)}(hj9h]h*}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj͐ubj)}(hsrch]hsrc}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͐ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_rgb565asbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hfbh]hfb}(hjΑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_rgb565asbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_rgb565asbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubj)}(hstateh]hstate}(hjɒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubj)}(h bool swabh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޒubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޒubj)}(hswabh]hswab}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޒubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޏubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&Convert XRGB8888 to RGB565 clip bufferh]h&Convert XRGB8888 to RGB565 clip buffer}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct iosys_map *dst`` Array of RGB565 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffer ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state ``bool swab`` Swap bytes **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for RGB565 devices that don't support XRGB8888 natively.h](h)}(h**Parameters**h]j%)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjCubji)}(hhh](jn)}(h>``struct iosys_map *dst`` Array of RGB565 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjhh]hstruct iosys_map *dst}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjbubj)}(hhh]h)}(h#Array of RGB565 destination buffersh]h#Array of RGB565 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hMhj_ubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hj“hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj_ubjn)}(h@``const struct iosys_map *src`` Array of XRGB8888 source buffer h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj_ubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hj&h]h const struct drm_framebuffer *fb}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj ubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj;hMhj_ubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hj_h]hconst struct drm_rect *clip}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjYubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthMhj_ubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj_ubjn)}(h``bool swab`` Swap bytes h](jt)}(h ``bool swab``h]jz)}(hjєh]h bool swab}(hjӔhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjϔubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj˔ubj)}(hhh]h)}(h Swap bytesh]h Swap bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˔ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj_ubeh}(h]h ]h"]h$]h&]uh1jhhjCubh)}(h**Description**h]j%)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjCubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hj"hhhNhNubj%)}(h**dst**h]hdst}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubh, }(hj"hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubh and }(hj"hhhNhNubj%)}(h**src**h]hsrc}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hj"hhhNhNubj%)}(h**fb**h]hfb}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjCubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjyhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubh2 (i.e. the destination is at the top-left corner).}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjCubh)}(hVDrivers can use this function for RGB565 devices that don't support XRGB8888 natively.h]hXDrivers can use this function for RGB565 devices that don’t support XRGB8888 natively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_xrgb1555 (C function)c.drm_fb_xrgb8888_to_xrgb1555hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_xrgb1555 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_xrgb1555(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjɕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŕhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjؕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŕhhhjוhMubj)}(hdrm_fb_xrgb8888_to_xrgb1555h]j)}(hdrm_fb_xrgb8888_to_xrgb1555h]hdrm_fb_xrgb8888_to_xrgb1555}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjŕhhhjוhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_xrgb1555asbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hj˖hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(h dst_pitchh]h dst_pitch}(hjؖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j@c.drm_fb_xrgb8888_to_xrgb1555asbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjVhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j@c.drm_fb_xrgb8888_to_xrgb1555asbuh1hhjxubj)}(h h]h }(hjӗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j@c.drm_fb_xrgb8888_to_xrgb1555asbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j@c.drm_fb_xrgb8888_to_xrgb1555asbuh1hhjubj)}(h h]h }(hjΘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjܘhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjŕhhhjוhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjוhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjוhMhjhhubj)}(hhh]h)}(h(Convert XRGB8888 to XRGB1555 clip bufferh]h(Convert XRGB8888 to XRGB1555 clip buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjוhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjtshNhNubj)}(hX=**Parameters** ``struct iosys_map *dst`` Array of XRGB1555 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffer ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for XRGB1555 devices that don't support XRGB8888 natively.h](h)}(h**Parameters**h]j%)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj/ubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of XRGB1555 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjTh]hstruct iosys_map *dst}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjNubj)}(hhh]h)}(h%Array of XRGB1555 destination buffersh]h%Array of XRGB1555 destination buffers}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihMhjKubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(h@``const struct iosys_map *src`` Array of XRGB8888 source buffer h](jt)}(h``const struct iosys_map *src``h]jz)}(hjٙh]hconst struct iosys_map *src}(hjۙhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjיubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjәubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjәubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj ubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhjKubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjKh]hconst struct drm_rect *clip}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjEubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hMhjKubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hj~ubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjKubeh}(h]h ]h"]h$]h&]uh1jhhj/ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hj/ubh)}(hX_This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters }(hj՚hhhNhNubj%)}(h**dst**h]hdst}(hjݚhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj՚ubh, }(hj՚hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj՚ubh and }(hj՚hhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj՚ubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hj՚hhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj՚ubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hj՚hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hj/ubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hj,hhhNhNubj%)}(h**dst**h]hdst}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubh2 (i.e. the destination is at the top-left corner).}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj/ubh)}(hXDrivers can use this function for XRGB1555 devices that don't support XRGB8888 natively.h]hZDrivers can use this function for XRGB1555 devices that don’t support XRGB8888 natively.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_argb1555 (C function)c.drm_fb_xrgb8888_to_argb1555hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_argb1555 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_argb1555(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhMLubj)}(hdrm_fb_xrgb8888_to_argb1555h]j)}(hdrm_fb_xrgb8888_to_argb1555h]hdrm_fb_xrgb8888_to_argb1555}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhMLubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjƛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjכhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԛubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjٛmodnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_argb1555asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hunsignedh]hunsigned}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(hj9h]h*}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj'ubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj̜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjݜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڜubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjߜmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb1555asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb1555asbuh1hhj+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjǝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj՝hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb1555asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb1555asbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjxhhhjhMLubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhMLubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjhMLhjqhhubj)}(hhh]h)}(h(Convert XRGB8888 to ARGB1555 clip bufferh]h(Convert XRGB8888 to ARGB1555 clip buffer}(hjƞhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM7hjÞhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjޞjjޞjjjuh1jhhhjtshNhNubj)}(hXx**Parameters** ``struct iosys_map *dst`` Array of ARGB1555 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffer ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for ARGB1555 devices that don't support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM;hjubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of ARGB1555 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM8hjubj)}(hhh]h)}(h%Array of ARGB1555 destination buffersh]h%Array of ARGB1555 destination buffers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM8hjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hj@h]hconst unsigned int *dst_pitch}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM:hj:ubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjYhhhNhNubj%)}(h**dst**h]hdst}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubh9; can be NULL if scanlines are stored next to each other.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM9hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhjUhM:hjubjn)}(h@``const struct iosys_map *src`` Array of XRGB8888 source buffer h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM;hjubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM;hjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjşh]h const struct drm_framebuffer *fb}(hjǟhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjßubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM<hjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjޟhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڟhM<hj۟ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjڟhM<hjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM=hjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM=hjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hj7h]h#struct drm_format_conv_state *state}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM>hj1ubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM>hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhM>hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM@hjubh)}(hX_This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hjƠhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM@hjubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjߠhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjߠubh2 (i.e. the destination is at the top-left corner).}(hjߠhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMFhjubh)}(hDrivers can use this function for ARGB1555 devices that don't support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.h]hDrivers can use this function for ARGB1555 devices that don’t support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_rgba5551 (C function)c.drm_fb_xrgb8888_to_rgba5551hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_rgba5551 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj=hMubj)}(hdrm_fb_xrgb8888_to_rgba5551h]j)}(hdrm_fb_xrgb8888_to_rgba5551h]hdrm_fb_xrgb8888_to_rgba5551}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj=hMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjRsbc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(hdsth]hdst}(hjšhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjޡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjڡubj)}(h dst_pitchh]h dst_pitch}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڡubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSubj)}(hsrch]hsrc}(hjɢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjޢubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjޢubj)}(hfbh]hfb}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޢubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjiubj)}(h h]h }(hjģhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjңhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hcliph]hclip}(hjߣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj=hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'hhhj=hMubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhj=hMhj$hhubj)}(hhh]h)}(h(Convert XRGB8888 to RGBA5551 clip bufferh]h(Convert XRGB8888 to RGBA5551 clip buffer}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMlhjvhhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjtshNhNubj)}(hXx**Parameters** ``struct iosys_map *dst`` Array of RGBA5551 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffer ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for RGBA5551 devices that don't support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMphjubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of RGBA5551 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMmhjubj)}(hhh]h)}(h%Array of RGBA5551 destination buffersh]h%Array of RGBA5551 destination buffers}(hjӤhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϤhMmhjФubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjϤhMmhjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMohjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hj hhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh9; can be NULL if scanlines are stored next to each other.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMnhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMohjubjn)}(h@``const struct iosys_map *src`` Array of XRGB8888 source buffer h](jt)}(h``const struct iosys_map *src``h]jz)}(hj?h]hconst struct iosys_map *src}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMphj9ubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMphjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThMphjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjxh]h const struct drm_framebuffer *fb}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMqhjrubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhMqhjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMrhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjʥhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƥhMrhjǥubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjƥhMrhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMshjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMshjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMuhjubh)}(hX_This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters }(hj;hhhNhNubj%)}(h**dst**h]hdst}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubh, }(hj;hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubh and }(hj;hhhNhNubj%)}(h**src**h]hsrc}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hj;hhhNhNubj%)}(h**fb**h]hfb}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMuhjubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM{hjubh)}(hDrivers can use this function for RGBA5551 devices that don't support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.h]hDrivers can use this function for RGBA5551 devices that don’t support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_rgb888 (C function)c.drm_fb_xrgb8888_to_rgb888hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_rgb888 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjަhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjަhhhjhMubj)}(hdrm_fb_xrgb8888_to_rgb888h]j)}(hdrm_fb_xrgb8888_to_rgb888h]hdrm_fb_xrgb8888_to_rgb888}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjަhhhjhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjȧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj֧hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]jYc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjΨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˨ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjШmodnameN classnameNjj)}j]jYc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]jYc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjɩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƩubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj˩modnameN classnameNjj)}j]jYc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjަhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjڦhhhjhMubah}(h]jզah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjצhhubj)}(hhh]h)}(h&Convert XRGB8888 to RGB888 clip bufferh]h&Convert XRGB8888 to RGB888 clip buffer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj)hhubah}(h]h ]h"]h$]h&]uh1jhjצhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjDjjDjjjuh1jhhhjtshNhNubj)}(hXj**Parameters** ``struct iosys_map *dst`` Array of RGB888 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for RGB888 devices that don't natively support XRGB8888.h](h)}(h**Parameters**h]j%)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjHubji)}(hhh](jn)}(h>``struct iosys_map *dst`` Array of RGB888 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjmh]hstruct iosys_map *dst}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjgubj)}(hhh]h)}(h#Array of RGB888 destination buffersh]h#Array of RGB888 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjdubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjǪhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjdubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjdubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hj+h]h const struct drm_framebuffer *fb}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj%ubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj@hMhjdubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjdh]hconst struct drm_rect *clip}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj^ubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjdubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjdubeh}(h]h ]h"]h$]h&]uh1jhhjHubh)}(h**Description**h]j%)}(hjثh]h Description}(hjګhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj֫ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjHubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjHubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjEhhhNhNubj%)}(h**dst**h]hdst}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh2 (i.e. the destination is at the top-left corner).}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjHubh)}(hVDrivers can use this function for RGB888 devices that don't natively support XRGB8888.h]hXDrivers can use this function for RGB888 devices that don’t natively support XRGB8888.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_bgr888 (C function)c.drm_fb_xrgb8888_to_bgr888hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_bgr888 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_fb_xrgb8888_to_bgr888h]j)}(hdrm_fb_xrgb8888_to_bgr888h]hdrm_fb_xrgb8888_to_bgr888}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjҬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjάubj)}(h h]h }(hj߬hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjάubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_bgr888asbuh1hhjάubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjάubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjάubj)}(hdsth]hdst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjάubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjʬubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjʬubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjʭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjحhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_bgr888asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjʬubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_bgr888asbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjʬubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjӮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϮubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϮubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϮubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϮubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_bgr888asbuh1hhjϮubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϮubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjϮubj)}(hcliph]hclip}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϮubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjʬubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_bgr888asbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjʬubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&Convert XRGB8888 to BGR888 clip bufferh]h&Convert XRGB8888 to BGR888 clip buffer}(hj߯hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjܯhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjtshNhNubj)}(hXj**Parameters** ``struct iosys_map *dst`` Array of BGR888 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for BGR888 devices that don't natively support XRGB8888.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubji)}(hhh](jn)}(h>``struct iosys_map *dst`` Array of BGR888 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hj h]hstruct iosys_map *dst}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h#Array of BGR888 destination buffersh]h#Array of BGR888 destination buffers}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hMhjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjYh]hconst unsigned int *dst_pitch}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjSubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjrhhhNhNubj%)}(h**dst**h]hdst}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh9; can be NULL if scanlines are stored next to each other.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhjubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjްh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܰubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjذubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjذubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj,hMhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjPh]h#struct drm_format_conv_state *state}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjJubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hjͱhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hj߱hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hVDrivers can use this function for BGR888 devices that don't natively support XRGB8888.h]hXDrivers can use this function for BGR888 devices that don’t natively support XRGB8888.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_argb8888 (C function)c.drm_fb_xrgb8888_to_argb8888hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_argb8888 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjVhMubj)}(hdrm_fb_xrgb8888_to_argb8888h]j)}(hdrm_fb_xrgb8888_to_argb8888h]hdrm_fb_xrgb8888_to_argb8888}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjVhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjksbc.drm_fb_xrgb8888_to_argb8888asbuh1hhjubj)}(h h]h }(hjòhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjѲhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hj޲hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb8888asbuh1hhjlubj)}(h h]h }(hjdzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjճhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb8888asbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb8888asbuh1hhjubj)}(h h]h }(hjݴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb8888asbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hstateh]hstate}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubeh}(h]h ]h"]h$]h&]jjuh1jhjDhhhjVhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@hhhjVhMubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1jhjVhMhj=hhubj)}(hhh]h)}(h(Convert XRGB8888 to ARGB8888 clip bufferh]h(Convert XRGB8888 to ARGB8888 clip buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjtshNhNubj)}(hXx**Parameters** ``struct iosys_map *dst`` Array of ARGB8888 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffer ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for ARGB8888 devices that don't support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion. h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of ARGB8888 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjӵh]hstruct iosys_map *dst}(hjյhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjѵubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj͵ubj)}(hhh]h)}(h%Array of ARGB8888 destination buffersh]h%Array of ARGB8888 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj͵ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjʵubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hj h]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hj%hhhNhNubj%)}(h**dst**h]hdst}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubh9; can be NULL if scanlines are stored next to each other.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjʵubjn)}(h@``const struct iosys_map *src`` Array of XRGB8888 source buffer h](jt)}(h``const struct iosys_map *src``h]jz)}(hjXh]hconst struct iosys_map *src}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjRubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhMhjʵubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjʵubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjʶh]hconst struct drm_rect *clip}(hj̶hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjȶubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hjĶubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj߶hM hjubah}(h]h ]h"]h$]h&]uh1jhjĶubeh}(h]h ]h"]h$]h&]uh1jmhj߶hM hjʵubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjʵubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hjubh)}(hX_This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters }(hjThhhNhNubj%)}(h**dst**h]hdst}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh, }(hjThhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh and }(hjThhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjThhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hjubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hDrivers can use this function for ARGB8888 devices that don't support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.h]hDrivers can use this function for ARGB8888 devices that don’t support XRGB8888 natively. It sets an opaque alpha channel as part of the conversion.}(hj̷hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_fb_xrgb8888_to_xrgb2101010 (C function) c.drm_fb_xrgb8888_to_xrgb2101010hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_xrgb2101010 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_xrgb2101010(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hdrm_fb_xrgb8888_to_xrgb2101010h]j)}(hdrm_fb_xrgb8888_to_xrgb2101010h]hdrm_fb_xrgb8888_to_xrgb2101010}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j%)}jjsb c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhj4ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjŸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjӸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]jr c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhjubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjɹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjֹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jr c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]jr c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhj5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjĺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjѺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߺubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jr c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(h+Convert XRGB8888 to XRGB2101010 clip bufferh]h+Convert XRGB8888 to XRGB2101010 clip buffer}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMvhjBhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhjtshNhNubj)}(hXt**Parameters** ``struct iosys_map *dst`` Array of XRGB2101010 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for XRGB2101010 devices that don't support XRGB8888 natively.h](h)}(h**Parameters**h]j%)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMzhjaubji)}(hhh](jn)}(hC``struct iosys_map *dst`` Array of XRGB2101010 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMwhjubj)}(hhh]h)}(h(Array of XRGB2101010 destination buffersh]h(Array of XRGB2101010 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMwhj}ubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMyhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjػhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjػubh9; can be NULL if scanlines are stored next to each other.}(hjػhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMxhjջubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjԻhMyhj}ubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hj h]hconst struct iosys_map *src}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMzhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMzhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMzhj}ubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjDh]h const struct drm_framebuffer *fb}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM{hj>ubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhM{hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhM{hj}ubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hj}h]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM|hjwubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhM|hj}ubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM}hjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjϼhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj˼hM}hj̼ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj˼hM}hj}ubeh}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjaubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjaubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hj^hhhNhNubj%)}(h**dst**h]hdst}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubh2 (i.e. the destination is at the top-left corner).}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjaubh)}(h[Drivers can use this function for XRGB2101010 devices that don't support XRGB8888 natively.h]h]Drivers can use this function for XRGB2101010 devices that don’t support XRGB8888 natively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_fb_xrgb8888_to_argb2101010 (C function) c.drm_fb_xrgb8888_to_argb2101010hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_argb2101010 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_argb2101010(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_fb_xrgb8888_to_argb2101010h]j)}(hdrm_fb_xrgb8888_to_argb2101010h]hdrm_fb_xrgb8888_to_argb2101010}(hjϽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˽ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjѽsb c.drm_fb_xrgb8888_to_argb2101010asbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hunsignedh]hunsigned}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj־hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҾubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҾubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҾubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҾubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j% c.drm_fb_xrgb8888_to_argb2101010asbuh1hhjҾubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҾubj9)}(hj9h]h*}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjҾubj)}(hsrch]hsrc}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҾubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j% c.drm_fb_xrgb8888_to_argb2101010asbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hjƿhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hfbh]hfb}(hjӿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j% c.drm_fb_xrgb8888_to_argb2101010asbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j% c.drm_fb_xrgb8888_to_argb2101010asbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h+Convert XRGB8888 to ARGB2101010 clip bufferh]h+Convert XRGB8888 to ARGB2101010 clip buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjtshNhNubj)}(hXD**Parameters** ``struct iosys_map *dst`` Array of ARGB2101010 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for ARGB2101010 devices that don't support XRGB8888 natively.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubji)}(hhh](jn)}(hC``struct iosys_map *dst`` Array of ARGB2101010 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hj9h]hstruct iosys_map *dst}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj3ubj)}(hhh]h)}(h(Array of ARGB2101010 destination buffersh]h(Array of ARGB2101010 destination buffers}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhjNhMhj0ubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjrh]hconst unsigned int *dst_pitch}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjlubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj0ubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjh]hconst struct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj0ubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj0ubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hj0h]hconst struct drm_rect *clip}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj*ubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhjEhMhj0ubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjih]h#struct drm_format_conv_state *state}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjcubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj~hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hX_This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(h[Drivers can use this function for ARGB2101010 devices that don't support XRGB8888 natively.h]h]Drivers can use this function for ARGB2101010 devices that don’t support XRGB8888 natively.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_xrgb8888_to_gray8 (C function)c.drm_fb_xrgb8888_to_gray8hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_gray8 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_gray8(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjohMubj)}(hdrm_fb_xrgb8888_to_gray8h]j)}(hdrm_fb_xrgb8888_to_gray8h]hdrm_fb_xrgb8888_to_gray8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhjohMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_gray8asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hunsignedh]hunsigned}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(h dst_pitchh]h dst_pitch}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_gray8asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_gray8asbuh1hhjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_gray8asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_gray8asbuh1hhj&ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhjohMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjohMubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjohMhjVhhubj)}(hhh]h)}(hConvert XRGB8888 to grayscaleh]hConvert XRGB8888 to grayscale}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct iosys_map *dst`` Array of 8-bit grayscale destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). DRM doesn't have native monochrome or grayscale support. Drivers can use this function for grayscale devices that don't support XRGB8888 natively.Such drivers can announce the commonly supported XR24 format to userspace and use this function to convert to the native format. Monochrome drivers will use the most significant bit, where 1 means foreground color and 0 background color. ITU BT.601 is being used for the RGB -> luma (brightness) conversion.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubji)}(hhh](jn)}(hG``struct iosys_map *dst`` Array of 8-bit grayscale destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h,Array of 8-bit grayscale destination buffersh]h,Array of 8-bit grayscale destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hj%h]hconst unsigned int *dst_pitch}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hj>hhhNhNubj%)}(h**dst**h]hdst}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubh9; can be NULL if scanlines are stored next to each other.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhjubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjqh]hconst struct iosys_map *src}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjkubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hjmhhhNhNubj%)}(h**dst**h]hdst}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubh, }(hjmhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubh and }(hjmhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjmhhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubh)}(hXDRM doesn't have native monochrome or grayscale support. Drivers can use this function for grayscale devices that don't support XRGB8888 natively.Such drivers can announce the commonly supported XR24 format to userspace and use this function to convert to the native format. Monochrome drivers will use the most significant bit, where 1 means foreground color and 0 background color. ITU BT.601 is being used for the RGB -> luma (brightness) conversion.h]hXDRM doesn’t have native monochrome or grayscale support. Drivers can use this function for grayscale devices that don’t support XRGB8888 natively.Such drivers can announce the commonly supported XR24 format to userspace and use this function to convert to the native format. Monochrome drivers will use the most significant bit, where 1 means foreground color and 0 background color. ITU BT.601 is being used for the RGB -> luma (brightness) conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_argb8888_to_argb4444 (C function)c.drm_fb_argb8888_to_argb4444hNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_argb8888_to_argb4444 (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_argb8888_to_argb4444(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM@ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hM@ubj)}(hdrm_fb_argb8888_to_argb4444h]j)}(hdrm_fb_argb8888_to_argb4444h]hdrm_fb_argb8888_to_argb4444}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hM@ubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j%)}jj7sbc.drm_fb_argb8888_to_argb4444asbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]hstructG}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jc.drm_fb_argb8888_to_argb4444asbuh1hhj8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_argb8888_to_argb4444asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_argb8888_to_argb4444asbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_argb8888_to_argb4444asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj"hM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj"hM@ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj"hM@hj hhubj)}(hhh]h)}(h(Convert ARGB8888 to ARGB4444 clip bufferh]h(Convert ARGB8888 to ARGB4444 clip buffer}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM+hj[hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjtshNhNubj)}(hX=**Parameters** ``struct iosys_map *dst`` Array of ARGB4444 destination buffers ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of ARGB8888 source buffer ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). Drivers can use this function for ARGB4444 devices that don't support ARGB8888 natively.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM/hjzubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of ARGB4444 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM,hjubj)}(hhh]h)}(h%Array of ARGB4444 destination buffersh]h%Array of ARGB4444 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM,hjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM.hjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM.hjubjn)}(h@``const struct iosys_map *src`` Array of ARGB8888 source buffer h](jt)}(h``const struct iosys_map *src``h]jz)}(hj$h]hconst struct iosys_map *src}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM/hjubj)}(hhh]h)}(hArray of ARGB8888 source bufferh]hArray of ARGB8888 source buffer}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM/hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hM/hjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hj]h]h const struct drm_framebuffer *fb}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM0hjWubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM0hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhM0hjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM1hjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM1hjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM2hjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM2hjubeh}(h]h ]h"]h$]h&]uh1jhhjzubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM4hjzubh)}(hX_This function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. The parameters }(hj hhhNhNubj%)}(h**dst**h]hdst}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh, }(hj hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh and }(hj hhhNhNubj%)}(h**src**h]hsrc}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hj hhhNhNubj%)}(h**fb**h]hfb}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM4hjzubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjwhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh2 (i.e. the destination is at the top-left corner).}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM:hjzubh)}(hXDrivers can use this function for ARGB4444 devices that don't support ARGB8888 natively.h]hZDrivers can use this function for ARGB4444 devices that don’t support ARGB8888 natively.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM=hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_blit (C function) c.drm_fb_blithNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hint drm_fb_blit (struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t dst_format, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hint drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t dst_format, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMgubj)}(h drm_fb_blith]j)}(h drm_fb_blith]h drm_fb_blit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMgubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t dst_format, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j%)}jjsb c.drm_fb_blitasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t dst_formath](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j> c.drm_fb_blitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h dst_formath]h dst_format}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j> c.drm_fb_blitasbuh1hhj3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j> c.drm_fb_blitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j> c.drm_fb_blitasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j> c.drm_fb_blitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMgubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMghjhhubj)}(hhh]h)}(h-Copy parts of a framebuffer to display memoryh]h-Copy parts of a framebuffer to display memory}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMNhjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct iosys_map *dst`` Array of display-memory addresses to copy to ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``uint32_t dst_format`` FOURCC code of the display's color format ``const struct iosys_map *src`` The framebuffer memory to copy from ``const struct drm_framebuffer *fb`` The framebuffer to copy from ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory. If the formats of the display and the framebuffer mismatch, the blit function will attempt to convert between them during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **dst_format**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). **Return** 0 on success, or -EINVAL if the color-format conversion failed, or a negative error code otherwise.h](h)}(h**Parameters**h]j%)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMRhjuubji)}(hhh](jn)}(hG``struct iosys_map *dst`` Array of display-memory addresses to copy to h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMOhjubj)}(hhh]h)}(h,Array of display-memory addresses to copy toh]h,Array of display-memory addresses to copy to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMOhjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMQhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMQhjubjn)}(hB``uint32_t dst_format`` FOURCC code of the display's color format h](jt)}(h``uint32_t dst_format``h]jz)}(hjh]huint32_t dst_format}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMRhjubj)}(hhh]h)}(h)FOURCC code of the display's color formath]h+FOURCC code of the display’s color format}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMRhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hMRhjubjn)}(hD``const struct iosys_map *src`` The framebuffer memory to copy from h](jt)}(h``const struct iosys_map *src``h]jz)}(hjXh]hconst struct iosys_map *src}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMShjRubj)}(hhh]h)}(h#The framebuffer memory to copy fromh]h#The framebuffer memory to copy from}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMShjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhMShjubjn)}(hB``const struct drm_framebuffer *fb`` The framebuffer to copy from h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjh]h const struct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMThjubj)}(hhh]h)}(hThe framebuffer to copy fromh]hThe framebuffer to copy from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMThjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMUhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMUhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMVhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMVhjubeh}(h]h ]h"]h$]h&]uh1jhhjuubh)}(h**Description**h]j%)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMXhjuubh)}(hXThis function copies parts of a framebuffer to display memory. If the formats of the display and the framebuffer mismatch, the blit function will attempt to convert between them during the process. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **dst_format**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory. If the formats of the display and the framebuffer mismatch, the blit function will attempt to convert between them during the process. The parameters }(hjThhhNhNubj%)}(h**dst**h]hdst}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh, }(hjThhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh and }(hjThhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjThhhNhNubj%)}(h**dst_format**h]h dst_format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMXhjuubh)}(hbThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner).h](h)This function does not apply clipping on }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 (i.e. the destination is at the top-left corner).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM_hjuubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMbhjuubh)}(hc0 on success, or -EINVAL if the color-format conversion failed, or a negative error code otherwise.h]hc0 on success, or -EINVAL if the color-format conversion failed, or a negative error code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMbhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_xrgb8888_to_mono (C function)c.drm_fb_xrgb8888_to_monohNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_mono (struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h]j)}(hvoid drm_fb_xrgb8888_to_mono(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hMubj)}(hdrm_fb_xrgb8888_to_monoh]j)}(hdrm_fb_xrgb8888_to_monoh]hdrm_fb_xrgb8888_to_mono}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hMubj)}(h(struct iosys_map *dst, const unsigned int *dst_pitch, const struct iosys_map *src, const struct drm_framebuffer *fb, const struct drm_rect *clip, struct drm_format_conv_state *state)h](j)}(hstruct iosys_map *dsth](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jj6sbc.drm_fb_xrgb8888_to_monoasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_monoasbuh1hhj7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_monoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_monoasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_monoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj!hMhjhhubj)}(hhh]h)}(hConvert XRGB8888 to monochromeh]hConvert XRGB8888 to monochrome}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct iosys_map *dst`` Array of monochrome destination buffers (0=black, 1=white) ``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. ``const struct iosys_map *src`` Array of XRGB8888 source buffers ``const struct drm_framebuffer *fb`` DRM framebuffer ``const struct drm_rect *clip`` Clip rectangle area to copy ``struct drm_format_conv_state *state`` Transform and conversion state **Description** This function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index. This function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). The first pixel (upper left corner of the clip rectangle) will be converted and copied to the first bit (LSB) in the first byte of the monochrome destination buffer. If the caller requires that the first pixel in a byte must be located at an x-coordinate that is a multiple of 8, then the caller must take care itself of supplying a suitable clip rectangle. DRM doesn't have native monochrome support. Drivers can use this function for monochrome devices that don't support XRGB8888 natively. Such drivers can announce the commonly supported XR24 format to userspace and use this function to convert to the native format. This function uses drm_fb_xrgb8888_to_gray8() to convert to grayscale and then the result is converted from grayscale to monochrome.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjyubji)}(hhh](jn)}(hU``struct iosys_map *dst`` Array of monochrome destination buffers (0=black, 1=white) h](jt)}(h``struct iosys_map *dst``h]jz)}(hjh]hstruct iosys_map *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h:Array of monochrome destination buffers (0=black, 1=white)h]h:Array of monochrome destination buffers (0=black, 1=white)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``const unsigned int *dst_pitch`` Array of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other. h](jt)}(h!``const unsigned int *dst_pitch``h]jz)}(hjh]hconst unsigned int *dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hArray of numbers of bytes between the start of two consecutive scanlines within **dst**; can be NULL if scanlines are stored next to each other.h](hPArray of numbers of bytes between the start of two consecutive scanlines within }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh9; can be NULL if scanlines are stored next to each other.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hj#h]hconst struct iosys_map *src}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hj\h]h const struct drm_framebuffer *fb}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjVubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhMhjubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjh]h#struct drm_format_conv_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjyubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjyubh)}(hXThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters **dst**, **dst_pitch** and **src** refer to arrays. Each array must have at least as many entries as there are planes in **fb**'s format. Each entry stores the value for the format's respective color plane at the same index.h](hThis function copies parts of a framebuffer to display memory and converts the color format during the process. Destination and framebuffer formats must match. The parameters }(hjhhhNhNubj%)}(h**dst**h]hdst}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**src**h]hsrc}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjhhhNhNubj%)}(h**fb**h]hfb}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjyubh)}(hXThis function does not apply clipping on **dst** (i.e. the destination is at the top-left corner). The first pixel (upper left corner of the clip rectangle) will be converted and copied to the first bit (LSB) in the first byte of the monochrome destination buffer. If the caller requires that the first pixel in a byte must be located at an x-coordinate that is a multiple of 8, then the caller must take care itself of supplying a suitable clip rectangle.h](h)This function does not apply clipping on }(hjvhhhNhNubj%)}(h**dst**h]hdst}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubhX (i.e. the destination is at the top-left corner). The first pixel (upper left corner of the clip rectangle) will be converted and copied to the first bit (LSB) in the first byte of the monochrome destination buffer. If the caller requires that the first pixel in a byte must be located at an x-coordinate that is a multiple of 8, then the caller must take care itself of supplying a suitable clip rectangle.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjyubh)}(hXDRM doesn't have native monochrome support. Drivers can use this function for monochrome devices that don't support XRGB8888 natively. Such drivers can announce the commonly supported XR24 format to userspace and use this function to convert to the native format.h]hX DRM doesn’t have native monochrome support. Drivers can use this function for monochrome devices that don’t support XRGB8888 natively. Such drivers can announce the commonly supported XR24 format to userspace and use this function to convert to the native format.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjyubh)}(hThis function uses drm_fb_xrgb8888_to_gray8() to convert to grayscale and then the result is converted from grayscale to monochrome.h]hThis function uses drm_fb_xrgb8888_to_gray8() to convert to grayscale and then the result is converted from grayscale to monochrome.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_build_fourcc_list (C function)c.drm_fb_build_fourcc_listhNtauh1jxhjtshhhNhNubj)}(hhh](j)}(hsize_t drm_fb_build_fourcc_list (struct drm_device *dev, const u32 *native_fourccs, size_t native_nfourccs, u32 *fourccs_out, size_t nfourccs_out)h]j)}(hsize_t drm_fb_build_fourcc_list(struct drm_device *dev, const u32 *native_fourccs, size_t native_nfourccs, u32 *fourccs_out, size_t nfourccs_out)h](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_fb_build_fourcc_listsbc.drm_fb_build_fourcc_listasbuh1hhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMVubj)}(hdrm_fb_build_fourcc_listh]j)}(hjh]hdrm_fb_build_fourcc_list}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMVubj)}(hr(struct drm_device *dev, const u32 *native_fourccs, size_t native_nfourccs, u32 *fourccs_out, size_t nfourccs_out)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jc.drm_fb_build_fourcc_listasbuh1hhj#ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#ubj)}(hdevh]hdev}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst u32 *native_fourccsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_build_fourcc_listasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnative_fourccsh]hnative_fourccs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hsize_t native_nfourccsh](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_fb_build_fourcc_listasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnative_nfourccsh]hnative_nfourccs}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 *fourccs_outh](h)}(hhh]j)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jc.drm_fb_build_fourcc_listasbuh1hhjKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(hj9h]h*}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubj)}(h fourccs_outh]h fourccs_out}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hsize_t nfourccs_outh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_build_fourcc_listasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h nfourccs_outh]h nfourccs_out}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMVhjhhubj)}(hhh]h)}(hMFilters a list of supported color formats against the device's native formatsh]hOFilters a list of supported color formats against the device’s native formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjtshNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``const u32 *native_fourccs`` 4CC codes of natively supported color formats ``size_t native_nfourccs`` The number of entries in **native_fourccs** ``u32 *fourccs_out`` Returns 4CC codes of supported color formats ``size_t nfourccs_out`` The number of available entries in **fourccs_out** **Description** This function create a list of supported color format from natively supported formats and additional emulated formats. At a minimum, most userspace programs expect at least support for XRGB8888 on the primary plane. Devices that have to emulate the format, and possibly others, can use drm_fb_build_fourcc_list() to create a list of supported color formats. The returned list can be handed over to drm_universal_plane_init() et al. Native formats will go before emulated formats. Native formats with alpha channel will be replaced by such without, as primary planes usually don't support alpha. Other heuristics might be applied to optimize the order. Formats near the beginning of the list are usually preferred over formats near the end of the list. **Return** The number of color-formats 4CC codes returned in **fourccs_out**.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMBhjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj>h]hstruct drm_device *dev}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM@hj8ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM@hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShM@hj5ubjn)}(hL``const u32 *native_fourccs`` 4CC codes of natively supported color formats h](jt)}(h``const u32 *native_fourccs``h]jz)}(hjwh]hconst u32 *native_fourccs}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMAhjqubj)}(hhh]h)}(h-4CC codes of natively supported color formatsh]h-4CC codes of natively supported color formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhMAhj5ubjn)}(hG``size_t native_nfourccs`` The number of entries in **native_fourccs** h](jt)}(h``size_t native_nfourccs``h]jz)}(hjh]hsize_t native_nfourccs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMBhjubj)}(hhh]h)}(h+The number of entries in **native_fourccs**h](hThe number of entries in }(hjhhhNhNubj%)}(h**native_fourccs**h]hnative_fourccs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMBhj5ubjn)}(hB``u32 *fourccs_out`` Returns 4CC codes of supported color formats h](jt)}(h``u32 *fourccs_out``h]jz)}(hjh]hu32 *fourccs_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMChjubj)}(hhh]h)}(h,Returns 4CC codes of supported color formatsh]h,Returns 4CC codes of supported color formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMChj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMChj5ubjn)}(hK``size_t nfourccs_out`` The number of available entries in **fourccs_out** h](jt)}(h``size_t nfourccs_out``h]jz)}(hj0h]hsize_t nfourccs_out}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMDhj*ubj)}(hhh]h)}(h2The number of available entries in **fourccs_out**h](h#The number of available entries in }(hjIhhhNhNubj%)}(h**fourccs_out**h]h fourccs_out}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]uh1hhjEhMDhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhjEhMDhj5ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMFhjubh)}(hXThis function create a list of supported color format from natively supported formats and additional emulated formats. At a minimum, most userspace programs expect at least support for XRGB8888 on the primary plane. Devices that have to emulate the format, and possibly others, can use drm_fb_build_fourcc_list() to create a list of supported color formats. The returned list can be handed over to drm_universal_plane_init() et al. Native formats will go before emulated formats. Native formats with alpha channel will be replaced by such without, as primary planes usually don't support alpha. Other heuristics might be applied to optimize the order. Formats near the beginning of the list are usually preferred over formats near the end of the list.h]hXThis function create a list of supported color format from natively supported formats and additional emulated formats. At a minimum, most userspace programs expect at least support for XRGB8888 on the primary plane. Devices that have to emulate the format, and possibly others, can use drm_fb_build_fourcc_list() to create a list of supported color formats. The returned list can be handed over to drm_universal_plane_init() et al. Native formats will go before emulated formats. Native formats with alpha channel will be replaced by such without, as primary planes usually don’t support alpha. Other heuristics might be applied to optimize the order. Formats near the beginning of the list are usually preferred over formats near the end of the list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMFhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMShjubh)}(hBThe number of color-formats 4CC codes returned in **fourccs_out**.h](h2The number of color-formats 4CC codes returned in }(hjhhhNhNubj%)}(h**fourccs_out**h]h fourccs_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjtshhhNhNubeh}(h]!format-helper-functions-referenceah ]h"]!format helper functions referenceah$]h&]uh1hhhhhhhhKxubh)}(hhh](h)}(h*Framebuffer DMA Helper Functions Referenceh]h*Framebuffer DMA Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK~ubh)}(hDProvides helper functions for creating a DMA-contiguous framebuffer.h]hDProvides helper functions for creating a DMA-contiguous framebuffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:128: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjhhubh)}(hX+Depending on the platform, the buffers may be physically non-contiguous and mapped through an IOMMU or a similar mechanism, or allocated from physically-contiguous memory (using, for instance, CMA or a pool of memory reserved at early boot). This is handled behind the scenes by the DMA mapping API.h]hX+Depending on the platform, the buffers may be physically non-contiguous and mapped through an IOMMU or a similar mechanism, or allocated from physically-contiguous memory (using, for instance, CMA or a pool of memory reserved at early boot). This is handled behind the scenes by the DMA mapping API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:128: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjhhubh)}(hdrm_gem_fb_create() is used in the :c:type:`drm_mode_config_funcs.fb_create ` callback function to create a DMA-contiguous framebuffer.h](h#drm_gem_fb_create() is used in the }(hjhhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjh]hdrm_mode_config_funcs.fb_create}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:128: ./drivers/gpu/drm/drm_fb_dma_helper.chK hjubh: callback function to create a DMA-contiguous framebuffer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hK hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_fb_dma_get_gem_obj (C function)c.drm_fb_dma_get_gem_objhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcstruct drm_gem_dma_object * drm_fb_dma_get_gem_obj (struct drm_framebuffer *fb, unsigned int plane)h]j)}(hastruct drm_gem_dma_object *drm_fb_dma_get_gem_obj(struct drm_framebuffer *fb, unsigned int plane)h](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK/ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhK/ubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_fb_dma_get_gem_objsbc.drm_fb_dma_get_gem_objasbuh1hhj\hhhjmhK/ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhK/ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\hhhjmhK/ubj)}(hdrm_fb_dma_get_gem_objh]j)}(hjh]hdrm_fb_dma_get_gem_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhjmhK/ubj)}(h0(struct drm_framebuffer *fb, unsigned int plane)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_dma_get_gem_objasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int planeh](j)}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhjmhK/ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjXhhhjmhK/ubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjmhK/hjUhhubj)}(hhh]h)}(h"Get DMA GEM object for framebufferh]h"Get DMA GEM object for framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK'hjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjmhK/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_framebuffer *fb`` The framebuffer ``unsigned int plane`` Which plane **Description** Return the DMA GEM object for given framebuffer. This function will usually be called from the CRTC callback functions.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK+hjubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` The framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK(hjubj)}(hhh]h)}(hThe framebufferh]hThe framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK(hjubjn)}(h#``unsigned int plane`` Which plane h](jt)}(h``unsigned int plane``h]jz)}(hj&h]hunsigned int plane}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK)hj ubj)}(hhh]h)}(h Which planeh]h Which plane}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK)hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK)hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK+hjubh)}(h0Return the DMA GEM object for given framebuffer.h]h0Return the DMA GEM object for given framebuffer.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK+hjubh)}(hFThis function will usually be called from the CRTC callback functions.h]hFThis function will usually be called from the CRTC callback functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK-hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_dma_get_gem_addr (C function)c.drm_fb_dma_get_gem_addrhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hrdma_addr_t drm_fb_dma_get_gem_addr (struct drm_framebuffer *fb, struct drm_plane_state *state, unsigned int plane)h]j)}(hqdma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, struct drm_plane_state *state, unsigned int plane)h](h)}(hhh]j)}(h dma_addr_th]h dma_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_fb_dma_get_gem_addrsbc.drm_fb_dma_get_gem_addrasbuh1hhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKGubj)}(hdrm_fb_dma_get_gem_addrh]j)}(hjh]hdrm_fb_dma_get_gem_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKGubj)}(hO(struct drm_framebuffer *fb, struct drm_plane_state *state, unsigned int plane)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]jc.drm_fb_dma_get_gem_addrasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_dma_get_gem_addrasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int planeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKGubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKGhjhhubj)}(hhh]h)}(hGet DMA (bus) address for framebuffer, for pixel formats where values are grouped in blocks this will get you the beginning of the blockh]hGet DMA (bus) address for framebuffer, for pixel formats where values are grouped in blocks this will get you the beginning of the block}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK=hjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjhNhNubj)}(hX2**Parameters** ``struct drm_framebuffer *fb`` The framebuffer ``struct drm_plane_state *state`` Which state of drm plane ``unsigned int plane`` Which plane Return the DMA GEM address for given framebuffer. **Description** This function will usually be called from the PLANE callback functions.h](h)}(h**Parameters**h]j%)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKAhjeubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` The framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK@hjubj)}(hhh]h)}(hThe framebufferh]hThe framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK@hjubjn)}(h;``struct drm_plane_state *state`` Which state of drm plane h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hjh]hstruct drm_plane_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKAhjubj)}(hhh]h)}(hWhich state of drm planeh]hWhich state of drm plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKAhjubjn)}(hU``unsigned int plane`` Which plane Return the DMA GEM address for given framebuffer. h](jt)}(h``unsigned int plane``h]jz)}(hjh]hunsigned int plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKChjubj)}(hhh]h)}(h=Which plane Return the DMA GEM address for given framebuffer.h]h=Which plane Return the DMA GEM address for given framebuffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKChjubeh}(h]h ]h"]h$]h&]uh1jhhjeubh)}(h**Description**h]j%)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKEhjeubh)}(hGThis function will usually be called from the PLANE callback functions.h]hGThis function will usually be called from the PLANE callback functions.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKEhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_fb_dma_sync_non_coherent (C function)c.drm_fb_dma_sync_non_coherenthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h|void drm_fb_dma_sync_non_coherent (struct drm_device *drm, struct drm_plane_state *old_state, struct drm_plane_state *state)h]j)}(h{void drm_fb_dma_sync_non_coherent(struct drm_device *drm, struct drm_plane_state *old_state, struct drm_plane_state *state)h](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhKyubj)}(hdrm_fb_dma_sync_non_coherenth]j)}(hdrm_fb_dma_sync_non_coherenth]hdrm_fb_dma_sync_non_coherent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhKyubj)}(hZ(struct drm_device *drm, struct drm_plane_state *old_state, struct drm_plane_state *state)h](j)}(hstruct drm_device *drmh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_fb_dma_sync_non_coherentasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_plane_state *old_stateh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jc.drm_fb_dma_sync_non_coherentasbuh1hhj(ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(h old_stateh]h old_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_dma_sync_non_coherentasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhKyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjhKyubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhKyhjrhhubj)}(hhh]h)}(h.Sync GEM object to non-coherent backing memoryh]h.Sync GEM object to non-coherent backing memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKnhjhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhKyubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *drm`` DRM device ``struct drm_plane_state *old_state`` Old plane state ``struct drm_plane_state *state`` New plane state **Description** This function can be used by drivers that use damage clips and have DMA GEM objects backed by non-coherent memory. Calling this function in a plane's .atomic_update ensures that all the data in the backing memory have been written to RAM.h](h)}(h**Parameters**h]j%)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKrhj9ubji)}(hhh](jn)}(h&``struct drm_device *drm`` DRM device h](jt)}(h``struct drm_device *drm``h]jz)}(hj^h]hstruct drm_device *drm}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKphjXubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKphjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjshKphjUubjn)}(h6``struct drm_plane_state *old_state`` Old plane state h](jt)}(h%``struct drm_plane_state *old_state``h]jz)}(hjh]h!struct drm_plane_state *old_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKqhjubj)}(hhh]h)}(hOld plane stateh]hOld plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKqhjUubjn)}(h2``struct drm_plane_state *state`` New plane state h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hjh]hstruct drm_plane_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKrhjubj)}(hhh]h)}(hNew plane stateh]hNew plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKrhjUubeh}(h]h ]h"]h$]h&]uh1jhhj9ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKthj9ubh)}(hThis function can be used by drivers that use damage clips and have DMA GEM objects backed by non-coherent memory. Calling this function in a plane's .atomic_update ensures that all the data in the backing memory have been written to RAM.h]hThis function can be used by drivers that use damage clips and have DMA GEM objects backed by non-coherent memory. Calling this function in a plane’s .atomic_update ensures that all the data in the backing memory have been written to RAM.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKthj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_fb_dma_get_scanout_buffer (C function)c.drm_fb_dma_get_scanout_bufferhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hZint drm_fb_dma_get_scanout_buffer (struct drm_plane *plane, struct drm_scanout_buffer *sb)h]j)}(hYint drm_fb_dma_get_scanout_buffer(struct drm_plane *plane, struct drm_scanout_buffer *sb)h](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj^hKubj)}(hdrm_fb_dma_get_scanout_bufferh]j)}(hdrm_fb_dma_get_scanout_bufferh]hdrm_fb_dma_get_scanout_buffer}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj^hKubj)}(h8(struct drm_plane *plane, struct drm_scanout_buffer *sb)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjssbc.drm_fb_dma_get_scanout_bufferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_scanout_buffer *sbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_scanout_bufferh]hdrm_scanout_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_dma_get_scanout_bufferasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsbh]hsb}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhj^hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhj^hKubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jhj^hKhjEhhubj)}(hhh]h)}(h)Provide a scanout buffer in case of panich]h)Provide a scanout buffer in case of panic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhj}hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_plane *plane`` DRM primary plane ``struct drm_scanout_buffer *sb`` scanout buffer for the panic handler **Return** 0 or negative error code **Description** Generic get_scanout_buffer() implementation, for drivers that uses the drm_fb_dma_helper. It won't call vmap in the panic context, so the driver should make sure the primary plane is vmapped, otherwise the panic screen won't get displayed.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubji)}(hhh](jn)}(h.``struct drm_plane *plane`` DRM primary plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubj)}(hhh]h)}(hDRM primary planeh]hDRM primary plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hG``struct drm_scanout_buffer *sb`` scanout buffer for the panic handler h](jt)}(h!``struct drm_scanout_buffer *sb``h]jz)}(hjh]hstruct drm_scanout_buffer *sb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubj)}(hhh]h)}(h$scanout buffer for the panic handlerh]h$scanout buffer for the panic handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubh)}(h0 or negative error codeh]h0 or negative error code}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubh)}(h**Description**h]j%)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubh)}(hGeneric get_scanout_buffer() implementation, for drivers that uses the drm_fb_dma_helper. It won't call vmap in the panic context, so the driver should make sure the primary plane is vmapped, otherwise the panic screen won't get displayed.h]hGeneric get_scanout_buffer() implementation, for drivers that uses the drm_fb_dma_helper. It won’t call vmap in the panic context, so the driver should make sure the primary plane is vmapped, otherwise the panic screen won’t get displayed.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]*framebuffer-dma-helper-functions-referenceah ]h"]*framebuffer dma helper functions referenceah$]h&]uh1hhhhhhhhK~ubh)}(hhh](h)}(h Framebuffer GEM Helper Referenceh]h Framebuffer GEM Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThis library provides helpers for drivers that don't subclass :c:type:`drm_framebuffer` and use :c:type:`drm_gem_object` for their backing storage.h](h@This library provides helpers for drivers that don’t subclass }(hjhhhNhNubh)}(h:c:type:`drm_framebuffer`h]jz)}(hjh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebufferuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:137: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubh and use }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]jz)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_gem_objectuh1hhjhKhjubh for their backing storage.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubh)}(hDrivers without additional needs to validate framebuffers can simply use drm_gem_fb_create() and everything is wired up automatically. Other drivers can use all parts independently.h]hDrivers without additional needs to validate framebuffers can simply use drm_gem_fb_create() and everything is wired up automatically. Other drivers can use all parts independently.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:137: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK"hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_fb_get_obj (C function)c.drm_gem_fb_get_objhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h[struct drm_gem_object * drm_gem_fb_get_obj (struct drm_framebuffer *fb, unsigned int plane)h]j)}(hYstruct drm_gem_object *drm_gem_fb_get_obj(struct drm_framebuffer *fb, unsigned int plane)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK5ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hK5ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j%)}jdrm_gem_fb_get_objsbc.drm_gem_fb_get_objasbuh1hhjhhhj+hK5ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hK5ubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj+hK5ubj)}(hdrm_gem_fb_get_objh]j)}(hj[h]hdrm_gem_fb_get_obj}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hK5ubj)}(h0(struct drm_framebuffer *fb, unsigned int plane)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jYc.drm_gem_fb_get_objasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int planeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hplaneh]hplane}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hK5ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj+hK5ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj+hK5hjhhubj)}(hhh]h)}(h&Get GEM object backing the framebufferh]h&Get GEM object backing the framebuffer}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK*hjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hK5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXN**Parameters** ``struct drm_framebuffer *fb`` Framebuffer ``unsigned int plane`` Plane index **Description** No additional reference is taken beyond the one that the :c:type:`drm_frambuffer` already holds. **Return** Pointer to :c:type:`drm_gem_object` for the given framebuffer and plane index or NULL if it does not exist.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK.hjubji)}(hhh](jn)}(h+``struct drm_framebuffer *fb`` Framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK+hjubj)}(hhh]h)}(h Framebufferh]h Framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK+hjubjn)}(h#``unsigned int plane`` Plane index h](jt)}(h``unsigned int plane``h]jz)}(hjh]hunsigned int plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK,hjubj)}(hhh]h)}(h Plane indexh]h Plane index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK,hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK.hjubh)}(h`No additional reference is taken beyond the one that the :c:type:`drm_frambuffer` already holds.h](h9No additional reference is taken beyond the one that the }(hj5hhhNhNubh)}(h:c:type:`drm_frambuffer`h]jz)}(hj?h]hdrm_frambuffer}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_frambufferuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK.hj5ubh already holds.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hK.hjubh)}(h **Return**h]j%)}(hjih]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK1hjubh)}(hkPointer to :c:type:`drm_gem_object` for the given framebuffer and plane index or NULL if it does not exist.h](h Pointer to }(hjhhhNhNubh)}(h:c:type:`drm_gem_object`h]jz)}(hjh]hdrm_gem_object}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_gem_objectuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK1hjubhH for the given framebuffer and plane index or NULL if it does not exist.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_fb_destroy (C function)c.drm_gem_fb_destroyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4void drm_gem_fb_destroy (struct drm_framebuffer *fb)h]j)}(h3void drm_gem_fb_destroy(struct drm_framebuffer *fb)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKaubj)}(hdrm_gem_fb_destroyh]j)}(hdrm_gem_fb_destroyh]hdrm_gem_fb_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKaubj)}(h(struct drm_framebuffer *fb)h]j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j%)}jjsbc.drm_gem_fb_destroyasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hfbh]hfb}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKaubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKahjhhubj)}(hhh]h)}(hFree GEM backed framebufferh]hFree GEM backed framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKZhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct drm_framebuffer *fb`` Framebuffer **Description** Frees a GEM backed framebuffer with its backing buffer(s) and the structure itself. Drivers can use this as their :c:type:`drm_framebuffer_funcs->destroy ` callback.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK^hjubji)}(hhh]jn)}(h+``struct drm_framebuffer *fb`` Framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK[hjubj)}(hhh]h)}(h Framebufferh]h Framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK[hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK]hjubh)}(hFrees a GEM backed framebuffer with its backing buffer(s) and the structure itself. Drivers can use this as their :c:type:`drm_framebuffer_funcs->destroy ` callback.h](hrFrees a GEM backed framebuffer with its backing buffer(s) and the structure itself. Drivers can use this as their }(hj#hhhNhNubh)}(h@:c:type:`drm_framebuffer_funcs->destroy `h]jz)}(hj-h]hdrm_framebuffer_funcs->destroy}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK]hj#ubh callback.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhK]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_gem_fb_create_handle (C function)c.drm_gem_fb_create_handlehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hfint drm_gem_fb_create_handle (struct drm_framebuffer *fb, struct drm_file *file, unsigned int *handle)h]j)}(heint drm_gem_fb_create_handle(struct drm_framebuffer *fb, struct drm_file *file, unsigned int *handle)h](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhKzubj)}(hdrm_gem_fb_create_handleh]j)}(hdrm_gem_fb_create_handleh]hdrm_gem_fb_create_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhjhKzubj)}(hI(struct drm_framebuffer *fb, struct drm_file *file, unsigned int *handle)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_gem_fb_create_handleasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jc.drm_gem_fb_create_handleasbuh1hhj ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hfileh]hfile}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int *handleh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjqhhhjhKzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjmhhhjhKzubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jhjhKzhjjhhubj)}(hhh]h)}(h(Create handle for GEM backed framebufferh]h(Create handle for GEM backed framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKnhjhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhKzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_framebuffer *fb`` Framebuffer ``struct drm_file *file`` DRM file to register the handle for ``unsigned int *handle`` Pointer to return the created handle **Description** This function creates a handle for the GEM object backing the framebuffer. Drivers can use this as their :c:type:`drm_framebuffer_funcs->create_handle ` callback. The GETFB IOCTL calls into this callback. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKrhjubji)}(hhh](jn)}(h+``struct drm_framebuffer *fb`` Framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjDh]hstruct drm_framebuffer *fb}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKohj>ubj)}(hhh]h)}(h Framebufferh]h Framebuffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKohjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhKohj;ubjn)}(h>``struct drm_file *file`` DRM file to register the handle for h](jt)}(h``struct drm_file *file``h]jz)}(hj}h]hstruct drm_file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKphjwubj)}(hhh]h)}(h#DRM file to register the handle forh]h#DRM file to register the handle for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhKphj;ubjn)}(h>``unsigned int *handle`` Pointer to return the created handle h](jt)}(h``unsigned int *handle``h]jz)}(hjh]hunsigned int *handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKqhjubj)}(hhh]h)}(h$Pointer to return the created handleh]h$Pointer to return the created handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKqhj;ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKshjubh)}(hThis function creates a handle for the GEM object backing the framebuffer. Drivers can use this as their :c:type:`drm_framebuffer_funcs->create_handle ` callback. The GETFB IOCTL calls into this callback.h](hiThis function creates a handle for the GEM object backing the framebuffer. Drivers can use this as their }(hjhhhNhNubh)}(hF:c:type:`drm_framebuffer_funcs->create_handle `h]jz)}(hjh]h$drm_framebuffer_funcs->create_handle}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKshjubh4 callback. The GETFB IOCTL calls into this callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hKshjubh)}(h **Return**h]j%)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKwhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_fb_init_with_funcs (C function)c.drm_gem_fb_init_with_funcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_gem_fb_init_with_funcs (struct drm_device *dev, struct drm_framebuffer *fb, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h]j)}(hint drm_gem_fb_init_with_funcs(struct drm_device *dev, struct drm_framebuffer *fb, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhKubj)}(hdrm_gem_fb_init_with_funcsh]j)}(hdrm_gem_fb_init_with_funcsh]hdrm_gem_fb_init_with_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhKubj)}(h(struct drm_device *dev, struct drm_framebuffer *fb, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_gem_fb_init_with_funcsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]jc.drm_gem_fb_init_with_funcsasbuh1hhj+ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_fb_init_with_funcsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h'const struct drm_mode_fb_cmd2 *mode_cmdh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_mode_fb_cmd2h]hdrm_mode_fb_cmd2}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jc.drm_gem_fb_init_with_funcsasbuh1hhj ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hmode_cmdh]hmode_cmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)const struct drm_framebuffer_funcs *funcsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebuffer_funcsh]hdrm_framebuffer_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_fb_init_with_funcsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfuncsh]hfuncs}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhKubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjuhhubj)}(hhh]h)}(hHelper function for implementing :c:type:`drm_mode_config_funcs.fb_create ` callback in cases when the driver allocates a subclass of struct drm_framebufferh](h!Helper function for implementing }(hj6hhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hj@h]hdrm_mode_config_funcs.fb_create}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gem_fb_init_with_funcsasbjdrm_mode_config_funcsuh1hhj+hK5hj6ubhQ callback in cases when the driver allocates a subclass of struct drm_framebuffer}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjhNhNubj)}(hXc**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_framebuffer *fb`` framebuffer object ``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer ``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request ``const struct drm_framebuffer_funcs *funcs`` vtable to be used for the new framebuffer object **Description** This function can be used to set :c:type:`drm_framebuffer_funcs` for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to change :c:type:`drm_framebuffer_funcs`. The function does buffer size validation. The buffer size validation is for a general case, though, so users should pay attention to the checks being appropriate for them or, at least, non-conflicting. **Return** Zero or a negative error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjzubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h2``struct drm_framebuffer *fb`` framebuffer object h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubj)}(hhh]h)}(hframebuffer objecth]hframebuffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hX``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer h](jt)}(h``struct drm_file *file``h]jz)}(hjh]hstruct drm_file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhj ubj)}(hhh]h)}(h=DRM file that holds the GEM handle(s) backing the framebufferh]h=DRM file that holds the GEM handle(s) backing the framebuffer}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj&hKhjubjn)}(he``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request h](jt)}(h+``const struct drm_mode_fb_cmd2 *mode_cmd``h]jz)}(hjJh]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjDubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhj_hKhjubjn)}(h_``const struct drm_framebuffer_funcs *funcs`` vtable to be used for the new framebuffer object h](jt)}(h-``const struct drm_framebuffer_funcs *funcs``h]jz)}(hjh]h)const struct drm_framebuffer_funcs *funcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhj}ubj)}(hhh]h)}(h0vtable to be used for the new framebuffer objecth]h0vtable to be used for the new framebuffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjzubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjzubh)}(hXThis function can be used to set :c:type:`drm_framebuffer_funcs` for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to change :c:type:`drm_framebuffer_funcs`. The function does buffer size validation. The buffer size validation is for a general case, though, so users should pay attention to the checks being appropriate for them or, at least, non-conflicting.h](h!This function can be used to set }(hjhhhNhNubh)}(h:c:type:`drm_framebuffer_funcs`h]jz)}(hjh]hdrm_framebuffer_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubhk for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don’t need to change }(hjhhhNhNubh)}(h:c:type:`drm_framebuffer_funcs`h]jz)}(hjh]hdrm_framebuffer_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhjhKhjubh. The function does buffer size validation. The buffer size validation is for a general case, though, so users should pay attention to the checks being appropriate for them or, at least, non-conflicting.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjzubh)}(h **Return**h]j%)}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjzubh)}(hZero or a negative error code.h]hZero or a negative error code.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gem_fb_create_with_funcs (C function)c.drm_gem_fb_create_with_funcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_framebuffer * drm_gem_fb_create_with_funcs (struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h]j)}(hstruct drm_framebuffer *drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj}hKubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_gem_fb_create_with_funcssbc.drm_gem_fb_create_with_funcsasbuh1hhjlhhhj}hKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj}hKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlhhhj}hKubj)}(hdrm_gem_fb_create_with_funcsh]j)}(hjh]hdrm_gem_fb_create_with_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhj}hKubj)}(h(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_gem_fb_create_with_funcsasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]jc.drm_gem_fb_create_with_funcsasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h'const struct drm_mode_fb_cmd2 *mode_cmdh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_mode_fb_cmd2h]hdrm_mode_fb_cmd2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_fb_create_with_funcsasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmode_cmdh]hmode_cmd}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)const struct drm_framebuffer_funcs *funcsh](j)}(hjch]hconst}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j)}(hdrm_framebuffer_funcsh]hdrm_framebuffer_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_fb_create_with_funcsasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjQubj)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhj}hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhj}hKubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jhj}hKhjehhubj)}(hhh]h)}(hbHelper function for the :c:type:`drm_mode_config_funcs.fb_create ` callbackh](hHelper function for the }(hjhhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjh]hdrm_mode_config_funcs.fb_create}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gem_fb_create_with_funcsasbjdrm_mode_config_funcsuh1hhj+hK5hjubh callback}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj}hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer ``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request ``const struct drm_framebuffer_funcs *funcs`` vtable to be used for the new framebuffer object **Description** This function can be used to set :c:type:`drm_framebuffer_funcs` for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to change :c:type:`drm_framebuffer_funcs`. The function does buffer size validation. **Return** Pointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h)}(h**Parameters**h]j%)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhj5ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjZh]hstruct drm_device *dev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjTubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjohKhjQubjn)}(hX``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer h](jt)}(h``struct drm_file *file``h]jz)}(hjh]hstruct drm_file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubj)}(hhh]h)}(h=DRM file that holds the GEM handle(s) backing the framebufferh]h=DRM file that holds the GEM handle(s) backing the framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjQubjn)}(he``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request h](jt)}(h+``const struct drm_mode_fb_cmd2 *mode_cmd``h]jz)}(hjh]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjQubjn)}(h_``const struct drm_framebuffer_funcs *funcs`` vtable to be used for the new framebuffer object h](jt)}(h-``const struct drm_framebuffer_funcs *funcs``h]jz)}(hjh]h)const struct drm_framebuffer_funcs *funcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubj)}(hhh]h)}(h0vtable to be used for the new framebuffer objecth]h0vtable to be used for the new framebuffer object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjQubeh}(h]h ]h"]h$]h&]uh1jhhj5ubh)}(h**Description**h]j%)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhj5ubh)}(hThis function can be used to set :c:type:`drm_framebuffer_funcs` for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to change :c:type:`drm_framebuffer_funcs`. The function does buffer size validation.h](h!This function can be used to set }(hjVhhhNhNubh)}(h:c:type:`drm_framebuffer_funcs`h]jz)}(hj`h]hdrm_framebuffer_funcs}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjVubhk for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don’t need to change }(hjVhhhNhNubh)}(h:c:type:`drm_framebuffer_funcs`h]jz)}(hjh]hdrm_framebuffer_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhj}hKhjVubh+. The function does buffer size validation.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hKhj5ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhj5ubh)}(hQPointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h Pointer to a }(hjhhhNhNubh)}(h:c:type:`drm_framebuffer`h]jz)}(hjh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebufferuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjubh+ on success or an error pointer on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_fb_create (C function)c.drm_gem_fb_createhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_framebuffer * drm_gem_fb_create (struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)h]j)}(hstruct drm_framebuffer *drm_gem_fb_create(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j%)}jdrm_gem_fb_createsbc.drm_gem_fb_createasbuh1hhjhhhj"hMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMubj9)}(hj9h]h*}(hjchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj"hMubj)}(hdrm_gem_fb_createh]j)}(hjRh]hdrm_gem_fb_create}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hMubj)}(hX(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jPc.drm_gem_fb_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jPc.drm_gem_fb_createasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfileh]hfile}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h'const struct drm_mode_fb_cmd2 *mode_cmdh](j)}(hjch]hconst}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdrm_mode_fb_cmd2h]hdrm_mode_fb_cmd2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jPc.drm_gem_fb_createasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hmode_cmdh]hmode_cmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj"hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj"hMhj hhubj)}(hhh]h)}(hbHelper function for the :c:type:`drm_mode_config_funcs.fb_create ` callbackh](hHelper function for the }(hj hhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjh]hdrm_mode_config_funcs.fb_create}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jPc.drm_gem_fb_createasbjdrm_mode_config_funcsuh1hhj+hK5hj ubh callback}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer ``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request **Description** This function creates a new framebuffer object described by :c:type:`drm_mode_fb_cmd2`. This description includes handles for the buffer(s) backing the framebuffer. If your hardware has special alignment or pitch requirements these should be checked before calling this function. The function does buffer size validation. Use drm_gem_fb_create_with_dirty() if you need framebuffer flushing. Drivers can use this as their :c:type:`drm_mode_config_funcs.fb_create ` callback. The ADDFB2 IOCTL calls into this callback. **Return** Pointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h)}(h**Parameters**h]j%)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM hjOubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjth]hstruct drm_device *dev}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjnubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(hX``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer h](jt)}(h``struct drm_file *file``h]jz)}(hjh]hstruct drm_file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubj)}(hhh]h)}(h=DRM file that holds the GEM handle(s) backing the framebufferh]h=DRM file that holds the GEM handle(s) backing the framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(he``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request h](jt)}(h+``const struct drm_mode_fb_cmd2 *mode_cmd``h]jz)}(hjh]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM hjubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjkubeh}(h]h ]h"]h$]h&]uh1jhhjOubh)}(h**Description**h]j%)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM hjOubh)}(hThis function creates a new framebuffer object described by :c:type:`drm_mode_fb_cmd2`. This description includes handles for the buffer(s) backing the framebuffer.h](h` callback. The ADDFB2 IOCTL calls into this callback.h](hDrivers can use this as their }(hjxhhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjh]hdrm_mode_config_funcs.fb_create}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjxubh5 callback. The ADDFB2 IOCTL calls into this callback.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjOubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjOubh)}(hQPointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h Pointer to a }(hjhhhNhNubh)}(h:c:type:`drm_framebuffer`h]jz)}(hjh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebufferuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubh+ on success or an error pointer on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gem_fb_create_with_dirty (C function)c.drm_gem_fb_create_with_dirtyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_framebuffer * drm_gem_fb_create_with_dirty (struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)h]j)}(hstruct drm_framebuffer *drm_gem_fb_create_with_dirty(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM@ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hM@ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j%)}jdrm_gem_fb_create_with_dirtysbc.drm_gem_fb_create_with_dirtyasbuh1hhjhhhj!hM@ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hM@ubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj!hM@ubj)}(hdrm_gem_fb_create_with_dirtyh]j)}(hjQh]hdrm_gem_fb_create_with_dirty}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hM@ubj)}(hX(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jOc.drm_gem_fb_create_with_dirtyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jOc.drm_gem_fb_create_with_dirtyasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfileh]hfile}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h'const struct drm_mode_fb_cmd2 *mode_cmdh](j)}(hjch]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(hdrm_mode_fb_cmd2h]hdrm_mode_fb_cmd2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jOc.drm_gem_fb_create_with_dirtyasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hmode_cmdh]hmode_cmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hM@ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj!hM@hj hhubj)}(hhh]h)}(hbHelper function for the :c:type:`drm_mode_config_funcs.fb_create ` callbackh](hHelper function for the }(hj hhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjh]hdrm_mode_config_funcs.fb_create}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jOc.drm_gem_fb_create_with_dirtyasbjdrm_mode_config_funcsuh1hhj+hK5hj ubh callback}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj!hM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer ``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request **Description** This function creates a new framebuffer object described by :c:type:`drm_mode_fb_cmd2`. This description includes handles for the buffer(s) backing the framebuffer. drm_atomic_helper_dirtyfb() is used for the dirty callback giving framebuffer flushing through the atomic machinery. Use drm_gem_fb_create() if you don't need the dirty callback. The function does buffer size validation. Drivers should also call drm_plane_enable_fb_damage_clips() on all planes to enable userspace to use damage clips also with the ATOMIC IOCTL. Drivers can use this as their :c:type:`drm_mode_config_funcs.fb_create ` callback. The ADDFB2 IOCTL calls into this callback. **Return** Pointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h)}(h**Parameters**h]j%)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM.hjNubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjsh]hstruct drm_device *dev}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM,hjmubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhM,hjjubjn)}(hX``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer h](jt)}(h``struct drm_file *file``h]jz)}(hjh]hstruct drm_file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM-hjubj)}(hhh]h)}(h=DRM file that holds the GEM handle(s) backing the framebufferh]h=DRM file that holds the GEM handle(s) backing the framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM-hjjubjn)}(he``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request h](jt)}(h+``const struct drm_mode_fb_cmd2 *mode_cmd``h]jz)}(hjh]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM.hjubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM.hjjubeh}(h]h ]h"]h$]h&]uh1jhhjNubh)}(h**Description**h]j%)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM0hjNubh)}(hXThis function creates a new framebuffer object described by :c:type:`drm_mode_fb_cmd2`. This description includes handles for the buffer(s) backing the framebuffer. drm_atomic_helper_dirtyfb() is used for the dirty callback giving framebuffer flushing through the atomic machinery. Use drm_gem_fb_create() if you don't need the dirty callback. The function does buffer size validation.h](hubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_fb_cmd2uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM0hj6ubhX-. This description includes handles for the buffer(s) backing the framebuffer. drm_atomic_helper_dirtyfb() is used for the dirty callback giving framebuffer flushing through the atomic machinery. Use drm_gem_fb_create() if you don’t need the dirty callback. The function does buffer size validation.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hM0hjNubh)}(hDrivers should also call drm_plane_enable_fb_damage_clips() on all planes to enable userspace to use damage clips also with the ATOMIC IOCTL.h]hDrivers should also call drm_plane_enable_fb_damage_clips() on all planes to enable userspace to use damage clips also with the ATOMIC IOCTL.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM7hjNubh)}(hDrivers can use this as their :c:type:`drm_mode_config_funcs.fb_create ` callback. The ADDFB2 IOCTL calls into this callback.h](hDrivers can use this as their }(hjwhhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjh]hdrm_mode_config_funcs.fb_create}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM:hjwubh5 callback. The ADDFB2 IOCTL calls into this callback.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM:hjNubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM=hjNubh)}(hQPointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h Pointer to a }(hjhhhNhNubh)}(h:c:type:`drm_framebuffer`h]jz)}(hjh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebufferuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM=hjubh+ on success or an error pointer on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM=hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_fb_vmap (C function)c.drm_gem_fb_vmaphNtauh1jxhjhhhNhNubj)}(hhh](j)}(h_int drm_gem_fb_vmap (struct drm_framebuffer *fb, struct iosys_map *map, struct iosys_map *data)h]j)}(h^int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct iosys_map *map, struct iosys_map *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM`ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hM`ubj)}(hdrm_gem_fb_vmaph]j)}(hdrm_gem_fb_vmaph]hdrm_gem_fb_vmap}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hM`ubj)}(hK(struct drm_framebuffer *fb, struct iosys_map *map, struct iosys_map *data)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jj6sbc.drm_gem_fb_vmapasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hstruct iosys_map *maph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_fb_vmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmaph]hmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hstruct iosys_map *datah](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jc.drm_gem_fb_vmapasbuh1hhj.ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hM`ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hM`ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj!hM`hjhhubj)}(hhh]h)}(h2maps all framebuffer BOs into kernel address spaceh]h2maps all framebuffer BOs into kernel address space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_framebuffer *fb`` the framebuffer ``struct iosys_map *map`` returns the mapping's address for each BO ``struct iosys_map *data`` returns the data address for each BO, can be NULL **Description** This function maps all buffer objects of the given framebuffer into kernel address space and stores them in struct iosys_map. If the mapping operation fails for one of the BOs, the function unmaps the already established mappings automatically. Callers that want to access a BO's stored data should pass **data**. The argument returns the addresses of the data stored in each BO. This is different from **map** if the framebuffer's offsets field is non-zero. Both, **map** and **data**, must each refer to arrays with at least fb->format->num_planes elements. See drm_gem_fb_vunmap() for unmapping. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMNhjubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` the framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMKhjubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMKhjubjn)}(hD``struct iosys_map *map`` returns the mapping's address for each BO h](jt)}(h``struct iosys_map *map``h]jz)}(hj-h]hstruct iosys_map *map}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMLhj'ubj)}(hhh]h)}(h)returns the mapping's address for each BOh]h+returns the mapping’s address for each BO}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMLhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMLhjubjn)}(hM``struct iosys_map *data`` returns the data address for each BO, can be NULL h](jt)}(h``struct iosys_map *data``h]jz)}(hjfh]hstruct iosys_map *data}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMMhj`ubj)}(hhh]h)}(h1returns the data address for each BO, can be NULLh]h1returns the data address for each BO, can be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMOhjubh)}(hThis function maps all buffer objects of the given framebuffer into kernel address space and stores them in struct iosys_map. If the mapping operation fails for one of the BOs, the function unmaps the already established mappings automatically.h]hThis function maps all buffer objects of the given framebuffer into kernel address space and stores them in struct iosys_map. If the mapping operation fails for one of the BOs, the function unmaps the already established mappings automatically.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMOhjubh)}(hCallers that want to access a BO's stored data should pass **data**. The argument returns the addresses of the data stored in each BO. This is different from **map** if the framebuffer's offsets field is non-zero.h](h=Callers that want to access a BO’s stored data should pass }(hjhhhNhNubj%)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh[. The argument returns the addresses of the data stored in each BO. This is different from }(hjhhhNhNubj%)}(h**map**h]hmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 if the framebuffer’s offsets field is non-zero.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMThjubh)}(hdBoth, **map** and **data**, must each refer to arrays with at least fb->format->num_planes elements.h](hBoth, }(hjhhhNhNubj%)}(h**map**h]hmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhJ, must each refer to arrays with at least fb->format->num_planes elements.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMXhjubh)}(h&See drm_gem_fb_vunmap() for unmapping.h]h&See drm_gem_fb_vunmap() for unmapping.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM[hjubh)}(h **Return**h]j%)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM]hjubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_gem_fb_vunmap (C function)c.drm_gem_fb_vunmaphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJvoid drm_gem_fb_vunmap (struct drm_framebuffer *fb, struct iosys_map *map)h]j)}(hIvoid drm_gem_fb_vunmap(struct drm_framebuffer *fb, struct iosys_map *map)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubj)}(hdrm_gem_fb_vunmaph]j)}(hdrm_gem_fb_vunmaph]hdrm_gem_fb_vunmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhMubj)}(h3(struct drm_framebuffer *fb, struct iosys_map *map)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_gem_fb_vunmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbhW ]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iosys_map *maph](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]jc.drm_gem_fb_vunmapasbuh1hhj-ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-ubj)}(hmaph]hmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjwhhubj)}(hhh]h)}(h0unmaps framebuffer BOs from kernel address spaceh]h0unmaps framebuffer BOs from kernel address space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_framebuffer *fb`` the framebuffer ``struct iosys_map *map`` mapping addresses as returned by drm_gem_fb_vmap() **Description** This function unmaps all buffer objects of the given framebuffer. See drm_gem_fb_vmap() for more information.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` the framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hM``struct iosys_map *map`` mapping addresses as returned by drm_gem_fb_vmap() h](jt)}(h``struct iosys_map *map``h]jz)}(hj,h]hstruct iosys_map *map}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj&ubj)}(hhh]h)}(h2mapping addresses as returned by drm_gem_fb_vmap()h]h2mapping addresses as returned by drm_gem_fb_vmap()}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubh)}(hAThis function unmaps all buffer objects of the given framebuffer.h]hAThis function unmaps all buffer objects of the given framebuffer.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubh)}(h+See drm_gem_fb_vmap() for more information.h]h+See drm_gem_fb_vmap() for more information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_gem_fb_begin_cpu_access (C function)c.drm_gem_fb_begin_cpu_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hYint drm_gem_fb_begin_cpu_access (struct drm_framebuffer *fb, enum dma_data_direction dir)h]j)}(hXint drm_gem_fb_begin_cpu_access(struct drm_framebuffer *fb, enum dma_data_direction dir)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_gem_fb_begin_cpu_accessh]j)}(hdrm_gem_fb_begin_cpu_accessh]hdrm_gem_fb_begin_cpu_access}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h9(struct drm_framebuffer *fb, enum dma_data_direction dir)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsbc.drm_gem_fb_begin_cpu_accessasbuh1hhjubj)}(h h]h }(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjD hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum dma_data_direction dirh](j)}(henumh]henum}(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubj)}(h h]h }(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j2 c.drm_gem_fb_begin_cpu_accessasbuh1hhjf ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubj)}(hdirh]hdir}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h*prepares GEM buffer objects for CPU accessh]h*prepares GEM buffer objects for CPU access}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_framebuffer *fb`` the framebuffer ``enum dma_data_direction dir`` access mode **Description** Prepares a framebuffer's GEM buffer objects for CPU access. This function must be called before accessing the BO data within the kernel. For imported BOs, the function calls dma_buf_begin_cpu_access(). See drm_gem_fb_end_cpu_access() for signalling the end of CPU access. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` the framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hj h]hstruct drm_framebuffer *fb}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5 hMhj6 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj5 hMhj ubjn)}(h,``enum dma_data_direction dir`` access mode h](jt)}(h``enum dma_data_direction dir``h]jz)}(hjY h]henum dma_data_direction dir}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjS ubj)}(hhh]h)}(h access modeh]h access mode}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn hMhjo ubah}(h]h ]h"]h$]h&]uh1jhjS ubeh}(h]h ]h"]h$]h&]uh1jmhjn hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubh)}(hPrepares a framebuffer's GEM buffer objects for CPU access. This function must be called before accessing the BO data within the kernel. For imported BOs, the function calls dma_buf_begin_cpu_access().h]hPrepares a framebuffer’s GEM buffer objects for CPU access. This function must be called before accessing the BO data within the kernel. For imported BOs, the function calls dma_buf_begin_cpu_access().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubh)}(hESee drm_gem_fb_end_cpu_access() for signalling the end of CPU access.h]hESee drm_gem_fb_end_cpu_access() for signalling the end of CPU access.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_gem_fb_end_cpu_access (C function)c.drm_gem_fb_end_cpu_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hXvoid drm_gem_fb_end_cpu_access (struct drm_framebuffer *fb, enum dma_data_direction dir)h]j)}(hWvoid drm_gem_fb_end_cpu_access(struct drm_framebuffer *fb, enum dma_data_direction dir)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hdrm_gem_fb_end_cpu_accessh]j)}(hdrm_gem_fb_end_cpu_accessh]hdrm_gem_fb_end_cpu_access}(hj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj, ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h9(struct drm_framebuffer *fb, enum dma_data_direction dir)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubj)}(h h]h }(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjl modnameN classnameNjj)}j]j%)}jj2 sbc.drm_gem_fb_end_cpu_accessasbuh1hhjH ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjH ubj)}(hfbh]hfb}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD ubj)}(henum dma_data_direction dirh](j)}(hjl h]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_gem_fb_end_cpu_accessasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdirh]hdir}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjD ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h)}(h/signals end of CPU access to GEM buffer objectsh]h/signals end of CPU access to GEM buffer objects}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj/ hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJ jjJ jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_framebuffer *fb`` the framebuffer ``enum dma_data_direction dir`` access mode **Description** Signals the end of CPU access to the given framebuffer's GEM buffer objects. This function must be paired with a corresponding call to drm_gem_fb_begin_cpu_access(). For imported BOs, the function calls dma_buf_end_cpu_access(). See also drm_gem_fb_begin_cpu_access().h](h)}(h**Parameters**h]j%)}(hjT h]h Parameters}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjR ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjN ubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` the framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjs h]hstruct drm_framebuffer *fb}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjm ubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjm ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjj ubjn)}(h,``enum dma_data_direction dir`` access mode h](jt)}(h``enum dma_data_direction dir``h]jz)}(hj h]henum dma_data_direction dir}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj ubj)}(hhh]h)}(h access modeh]h access mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjj ubeh}(h]h ]h"]h$]h&]uh1jhhjN ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjN ubh)}(hSignals the end of CPU access to the given framebuffer's GEM buffer objects. This function must be paired with a corresponding call to drm_gem_fb_begin_cpu_access(). For imported BOs, the function calls dma_buf_end_cpu_access().h]hSignals the end of CPU access to the given framebuffer’s GEM buffer objects. This function must be paired with a corresponding call to drm_gem_fb_begin_cpu_access(). For imported BOs, the function calls dma_buf_end_cpu_access().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjN ubh)}(h'See also drm_gem_fb_begin_cpu_access().h]h'See also drm_gem_fb_begin_cpu_access().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjN ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_gem_fb_afbc_init (C function)c.drm_gem_fb_afbc_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_gem_fb_afbc_init (struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_afbc_framebuffer *afbc_fb)h]j)}(hint drm_gem_fb_afbc_init(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_afbc_framebuffer *afbc_fb)h](j)}(hinth]hint}(hj; hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7 hhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMQubj)}(h h]h }(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7 hhhjI hMQubj)}(hdrm_gem_fb_afbc_inith]j)}(hdrm_gem_fb_afbc_inith]hdrm_gem_fb_afbc_init}(hj\ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7 hhhjI hMQubj)}(hg(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_afbc_framebuffer *afbc_fb)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jj^ sbc.drm_gem_fb_afbc_initasbuh1hhjt ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjt ubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjp ubj)}(h'const struct drm_mode_fb_cmd2 *mode_cmdh](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_mode_fb_cmd2h]hdrm_mode_fb_cmd2}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j c.drm_gem_fb_afbc_initasbuh1hhj ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjOhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hmode_cmdh]hmode_cmd}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjp ubj)}(h$struct drm_afbc_framebuffer *afbc_fbh](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(hdrm_afbc_framebufferh]hdrm_afbc_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_gem_fb_afbc_initasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(hafbc_fbh]hafbc_fb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjp ubeh}(h]h ]h"]h$]h&]jjuh1jhj7 hhhjI hMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3 hhhjI hMQubah}(h]j. ah ](jjeh"]h$]h&]jj)jhuh1jhjI hMQhj0 hhubj)}(hhh]h)}(huHelper function for drivers using afbc to fill and validate all the afbc-specific struct drm_afbc_framebuffer membersh]huHelper function for drivers using afbc to fill and validate all the afbc-specific struct drm_afbc_framebuffer members}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhj0 hhhjI hMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXc**Parameters** ``struct drm_device *dev`` DRM device ``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request ``struct drm_afbc_framebuffer *afbc_fb`` afbc framebuffer **Description** This function can be used by drivers which support afbc to complete the preparation of struct drm_afbc_framebuffer. It must be called after allocating the said struct and calling drm_gem_fb_init_with_funcs(). It is caller's responsibility to put afbc_fb->base.obj objects in case the call is unsuccessful. **Return** Zero on success or a negative error value on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMChjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj7h]hstruct drm_device *dev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMChj1ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMChjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhMChj.ubjn)}(he``const struct drm_mode_fb_cmd2 *mode_cmd`` Metadata from the userspace framebuffer creation request h](jt)}(h+``const struct drm_mode_fb_cmd2 *mode_cmd``h]jz)}(hjph]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMEhjjubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjhMEhj.ubjn)}(h:``struct drm_afbc_framebuffer *afbc_fb`` afbc framebuffer h](jt)}(h(``struct drm_afbc_framebuffer *afbc_fb``h]jz)}(hjh]h$struct drm_afbc_framebuffer *afbc_fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMFhjubj)}(hhh]h)}(hafbc framebufferh]hafbc framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMFhj.ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMHhjubh)}(hX1This function can be used by drivers which support afbc to complete the preparation of struct drm_afbc_framebuffer. It must be called after allocating the said struct and calling drm_gem_fb_init_with_funcs(). It is caller's responsibility to put afbc_fb->base.obj objects in case the call is unsuccessful.h]hX3This function can be used by drivers which support afbc to complete the preparation of struct drm_afbc_framebuffer. It must be called after allocating the said struct and calling drm_gem_fb_init_with_funcs(). It is caller’s responsibility to put afbc_fb->base.obj objects in case the call is unsuccessful.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMHhjubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMNhjubh)}(h5Zero on success or a negative error value on failure.h]h5Zero on success or a negative error value on failure.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj:)}(h.. _drm_bridges:h]h}(h]h ]h"]h$]h&]j: drm-bridgesuh1j:hKhjhhhhubeh}(h] framebuffer-gem-helper-referenceah ]h"] framebuffer gem helper referenceah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hBridgesh]hBridges}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(hOverviewh]hOverview}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hhhhhKubh)}(h:c:type:`struct drm_bridge ` represents a device that hangs on to an encoder. These are handy when a regular :c:type:`drm_encoder` entity isn't enough to represent the entire encoder chain.h](h)}(h(:c:type:`struct drm_bridge `h]jz)}(hjrh]hstruct drm_bridge}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK)hjlubhQ represents a device that hangs on to an encoder. These are handy when a regular }(hjlhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjh]h drm_encoder}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hhjhK)hjlubh= entity isn’t enough to represent the entire encoder chain.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK)hj[hhubh)}(hA bridge is always attached to a single :c:type:`drm_encoder` at a time, but can be either connected to it directly, or through a chain of bridges::h](h(A bridge is always attached to a single }(hjhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjh]h drm_encoder}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK-hjubhV at a time, but can be either connected to it directly, or through a chain of bridges:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK-hj[hhubj@)}(h1[ CRTC ---> ] Encoder ---> Bridge A ---> Bridge Bh]h1[ CRTC ---> ] Encoder ---> Bridge A ---> Bridge B}hjsbah}(h]h ]h"]h$]h&]jjuh1j?ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK0hj[hhubh)}(hXHere, the output of the encoder feeds to bridge A, and that furthers feeds to bridge B. Bridge chains can be arbitrarily long, and shall be fully linear: Chaining multiple bridges to the output of a bridge, or the same bridge to the output of different bridges, is not supported.h]hXHere, the output of the encoder feeds to bridge A, and that furthers feeds to bridge B. Bridge chains can be arbitrarily long, and shall be fully linear: Chaining multiple bridges to the output of a bridge, or the same bridge to the output of different bridges, is not supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK2hj[hhubh)}(hX :c:type:`drm_bridge`, like :c:type:`drm_panel`, aren't :c:type:`drm_mode_object` entities like planes, CRTCs, encoders or connectors and hence are not visible to userspace. They just provide additional hooks to get the desired output at the end of the encoder chain.h](h)}(h:c:type:`drm_bridge`h]jz)}(hjh]h drm_bridge}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK7hj ubh, like }(hj hhhNhNubh)}(h:c:type:`drm_panel`h]jz)}(hj7h]h drm_panel}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_paneluh1hhj0hK7hj ubh , aren’t }(hj hhhNhNubh)}(h:c:type:`drm_mode_object`h]jz)}(hjZh]hdrm_mode_object}(hj\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_objectuh1hhj0hK7hj ubh entities like planes, CRTCs, encoders or connectors and hence are not visible to userspace. They just provide additional hooks to get the desired output at the end of the encoder chain.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hK7hj[hhubeh}(h]id1ah ]h"]h$]j;ah&]uh1hhjJhhhhhKj;Kubh)}(hhh](h)}(hDisplay Driver Integrationh]hDisplay Driver Integration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXDisplay drivers are responsible for linking encoders with the first bridge in the chains. This is done by acquiring the appropriate bridge with devm_drm_of_get_bridge(). Once acquired, the bridge shall be attached to the encoder with a call to drm_bridge_attach().h]hXDisplay drivers are responsible for linking encoders with the first bridge in the chains. This is done by acquiring the appropriate bridge with devm_drm_of_get_bridge(). Once acquired, the bridge shall be attached to the encoder with a call to drm_bridge_attach().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:157: ./drivers/gpu/drm/drm_bridge.chK@hjhhubh)}(hBridges are responsible for linking themselves with the next bridge in the chain, if any. This is done the same way as for encoders, with the call to drm_bridge_attach() occurring in the :c:type:`drm_bridge_funcs.attach ` operation.h](hBridges are responsible for linking themselves with the next bridge in the chain, if any. This is done the same way as for encoders, with the call to drm_bridge_attach() occurring in the }(hjhhhNhNubh)}(h4:c:type:`drm_bridge_funcs.attach `h]jz)}(hjh]hdrm_bridge_funcs.attach}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:157: ./drivers/gpu/drm/drm_bridge.chKEhjubh operation.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKEhjhhubh)}(hX>Once these links are created, the bridges can participate along with encoder functions to perform mode validation and fixup (through drm_bridge_chain_mode_valid() and drm_atomic_bridge_chain_check()), mode setting (through drm_bridge_chain_mode_set()), enable (through drm_atomic_bridge_chain_pre_enable() and drm_atomic_bridge_chain_enable()) and disable (through drm_atomic_bridge_chain_disable() and drm_atomic_bridge_chain_post_disable()). Those functions call the corresponding operations provided in :c:type:`drm_bridge_funcs` in sequence for all bridges in the chain.h](hXOnce these links are created, the bridges can participate along with encoder functions to perform mode validation and fixup (through drm_bridge_chain_mode_valid() and drm_atomic_bridge_chain_check()), mode setting (through drm_bridge_chain_mode_set()), enable (through drm_atomic_bridge_chain_pre_enable() and drm_atomic_bridge_chain_enable()) and disable (through drm_atomic_bridge_chain_disable() and drm_atomic_bridge_chain_post_disable()). Those functions call the corresponding operations provided in }(hjhhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hjh]hdrm_bridge_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:157: ./drivers/gpu/drm/drm_bridge.chKIhjubh* in sequence for all bridges in the chain.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKIhjhhubh)}(hXFor display drivers that use the atomic helpers drm_atomic_helper_check_modeset(), drm_atomic_helper_commit_modeset_enables() and drm_atomic_helper_commit_modeset_disables() (either directly in hand-rolled commit check and commit tail handlers, or through the higher-level drm_atomic_helper_check() and drm_atomic_helper_commit_tail() or drm_atomic_helper_commit_tail_rpm() helpers), this is done transparently and requires no intervention from the driver. For other drivers, the relevant DRM bridge chain functions shall be called manually.h]hXFor display drivers that use the atomic helpers drm_atomic_helper_check_modeset(), drm_atomic_helper_commit_modeset_enables() and drm_atomic_helper_commit_modeset_disables() (either directly in hand-rolled commit check and commit tail handlers, or through the higher-level drm_atomic_helper_check() and drm_atomic_helper_commit_tail() or drm_atomic_helper_commit_tail_rpm() helpers), this is done transparently and requires no intervention from the driver. For other drivers, the relevant DRM bridge chain functions shall be called manually.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:157: ./drivers/gpu/drm/drm_bridge.chKShjhhubh)}(hXlBridges also participate in implementing the :c:type:`drm_connector` at the end of the bridge chain. Display drivers may use the drm_bridge_connector_init() helper to create the :c:type:`drm_connector`, or implement it manually on top of the connector-related operations exposed by the bridge (see the overview documentation of bridge operations for more details).h](h-Bridges also participate in implementing the }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj%h]h drm_connector}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:157: ./drivers/gpu/drm/drm_bridge.chK]hjubhn at the end of the bridge chain. Display drivers may use the drm_bridge_connector_init() helper to create the }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjIh]h drm_connector}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjBhK]hjubh, or implement it manually on top of the connector-related operations exposed by the bridge (see the overview documentation of bridge operations for more details).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhK]hjhhubeh}(h]display-driver-integrationah ]h"]display driver integrationah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(h"Special Care with MIPI-DSI bridgesh]h"Special Care with MIPI-DSI bridges}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhhhhhKubh)}(hThe interaction between the bridges and other frameworks involved in the probing of the upstream driver and the bridge driver can be challenging. Indeed, there's multiple cases that needs to be considered:h]hThe interaction between the bridges and other frameworks involved in the probing of the upstream driver and the bridge driver can be challenging. Indeed, there’s multiple cases that needs to be considered:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKghjxhhubh)}(hhh](h)}(hXThe upstream driver doesn't use the component framework and isn't a MIPI-DSI host. In this case, the bridge driver will probe at some point and the upstream driver should try to probe again by returning EPROBE_DEFER as long as the bridge driver hasn't probed. h]h)}(hXThe upstream driver doesn't use the component framework and isn't a MIPI-DSI host. In this case, the bridge driver will probe at some point and the upstream driver should try to probe again by returning EPROBE_DEFER as long as the bridge driver hasn't probed.h]hX The upstream driver doesn’t use the component framework and isn’t a MIPI-DSI host. In this case, the bridge driver will probe at some point and the upstream driver should try to probe again by returning EPROBE_DEFER as long as the bridge driver hasn’t probed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKlhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hXThe upstream driver doesn't use the component framework, but is a MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be controlled. In this case, the bridge device is a child of the display device and when it will probe it's assured that the display device (and MIPI-DSI host) is present. The upstream driver will be assured that the bridge driver is connected between the :c:type:`mipi_dsi_host_ops.attach ` and :c:type:`mipi_dsi_host_ops.detach ` operations. Therefore, it must run mipi_dsi_host_register() in its probe function, and then run drm_bridge_attach() in its :c:type:`mipi_dsi_host_ops.attach ` hook. h]h)}(hXThe upstream driver doesn't use the component framework, but is a MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be controlled. In this case, the bridge device is a child of the display device and when it will probe it's assured that the display device (and MIPI-DSI host) is present. The upstream driver will be assured that the bridge driver is connected between the :c:type:`mipi_dsi_host_ops.attach ` and :c:type:`mipi_dsi_host_ops.detach ` operations. Therefore, it must run mipi_dsi_host_register() in its probe function, and then run drm_bridge_attach() in its :c:type:`mipi_dsi_host_ops.attach ` hook.h](hXThe upstream driver doesn’t use the component framework, but is a MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be controlled. In this case, the bridge device is a child of the display device and when it will probe it’s assured that the display device (and MIPI-DSI host) is present. The upstream driver will be assured that the bridge driver is connected between the }(hjhhhNhNubh)}(h6:c:type:`mipi_dsi_host_ops.attach `h]jz)}(hjh]hmipi_dsi_host_ops.attach}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dsi_host_opsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKqhjubh and }(hjhhhNhNubh)}(h6:c:type:`mipi_dsi_host_ops.detach `h]jz)}(hjh]hmipi_dsi_host_ops.detach}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dsi_host_opsuh1hhjhKqhjubh| operations. Therefore, it must run mipi_dsi_host_register() in its probe function, and then run drm_bridge_attach() in its }(hjhhhNhNubh)}(h6:c:type:`mipi_dsi_host_ops.attach `h]jz)}(hj h]hmipi_dsi_host_ops.attach}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dsi_host_opsuh1hhjhKqhjubh hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hThe upstream driver uses the component framework and is a MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be controlled. This is the same situation than above, and can run mipi_dsi_host_register() in either its probe or bind hooks. h]h)}(hThe upstream driver uses the component framework and is a MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be controlled. This is the same situation than above, and can run mipi_dsi_host_register() in either its probe or bind hooks.h]hThe upstream driver uses the component framework and is a MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be controlled. This is the same situation than above, and can run mipi_dsi_host_register() in either its probe or bind hooks.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chK|hj6ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hXXThe upstream driver uses the component framework and is a MIPI-DSI host. The bridge device uses a separate bus (such as I2C) to be controlled. In this case, there's no correlation between the probe of the bridge and upstream drivers, so care must be taken to avoid an endless EPROBE_DEFER loop, with each driver waiting for the other to probe. h]h)}(hXWThe upstream driver uses the component framework and is a MIPI-DSI host. The bridge device uses a separate bus (such as I2C) to be controlled. In this case, there's no correlation between the probe of the bridge and upstream drivers, so care must be taken to avoid an endless EPROBE_DEFER loop, with each driver waiting for the other to probe.h]hXYThe upstream driver uses the component framework and is a MIPI-DSI host. The bridge device uses a separate bus (such as I2C) to be controlled. In this case, there’s no correlation between the probe of the bridge and upstream drivers, so care must be taken to avoid an endless EPROBE_DEFER loop, with each driver waiting for the other to probe.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjOubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhKlhjxhhubh)}(hThe ideal pattern to cover the last item (and all the others in the MIPI-DSI host driver case) is to split the operations like this:h]hThe ideal pattern to cover the last item (and all the others in the MIPI-DSI host driver case) is to split the operations like this:}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjxhhubh)}(hhh](h)}(hThe MIPI-DSI host driver must run mipi_dsi_host_register() in its probe hook. It will make sure that the MIPI-DSI host sticks around, and that the driver's bind can be called. h]h)}(hThe MIPI-DSI host driver must run mipi_dsi_host_register() in its probe hook. It will make sure that the MIPI-DSI host sticks around, and that the driver's bind can be called.h]hThe MIPI-DSI host driver must run mipi_dsi_host_register() in its probe hook. It will make sure that the MIPI-DSI host sticks around, and that the driver’s bind can be called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjubah}(h]h ]h"]h$]h&]uh1hhj}ubh)}(hIn its probe hook, the bridge driver must try to find its MIPI-DSI host, register as a MIPI-DSI device and attach the MIPI-DSI device to its host. The bridge driver is now functional. h]h)}(hIn its probe hook, the bridge driver must try to find its MIPI-DSI host, register as a MIPI-DSI device and attach the MIPI-DSI device to its host. The bridge driver is now functional.h]hIn its probe hook, the bridge driver must try to find its MIPI-DSI host, register as a MIPI-DSI device and attach the MIPI-DSI device to its host. The bridge driver is now functional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjubah}(h]h ]h"]h$]h&]uh1hhj}ubh)}(hIn its :c:type:`struct mipi_dsi_host_ops `.attach hook, the MIPI-DSI host can now add its component. Its bind hook will now be called and since the bridge driver is attached and registered, we can now look for and attach it. h]h)}(hIn its :c:type:`struct mipi_dsi_host_ops `.attach hook, the MIPI-DSI host can now add its component. Its bind hook will now be called and since the bridge driver is attached and registered, we can now look for and attach it.h](hIn its }(hjhhhNhNubh)}(h6:c:type:`struct mipi_dsi_host_ops `h]jz)}(hjh]hstruct mipi_dsi_host_ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dsi_host_opsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjubh.attach hook, the MIPI-DSI host can now add its component. Its bind hook will now be called and since the bridge driver is attached and registered, we can now look for and attach it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhKhjxhhubh)}(hAt this point, we're now certain that both the upstream driver and the bridge driver are functional and we can't have a deadlock-like situation when probing.h]hAt this point, we’re now certain that both the upstream driver and the bridge driver are functional and we can’t have a deadlock-like situation when probing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjxhhubeh}(h]"special-care-with-mipi-dsi-bridgesah ]h"]"special care with mipi-dsi bridgesah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(hBridge Operationsh]hBridge Operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hX&Bridge drivers expose operations through the :c:type:`drm_bridge_funcs` structure. The DRM internals (atomic and CRTC helpers) use the helpers defined in drm_bridge.c to call bridge operations. Those operations are divided in three big categories to support different parts of the bridge usage.h](h-Bridge drivers expose operations through the }(hjhhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hj&h]hdrm_bridge_funcs}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjubh structure. The DRM internals (atomic and CRTC helpers) use the helpers defined in drm_bridge.c to call bridge operations. Those operations are divided in three big categories to support different parts of the bridge usage.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMhj hhubh)}(hhh](h)}(hXJThe encoder-related operations support control of the bridges in the chain, and are roughly counterparts to the :c:type:`drm_encoder_helper_funcs` operations. They are used by the legacy CRTC and the atomic modeset helpers to perform mode validation, fixup and setting, and enable and disable the bridge automatically. The enable and disable operations are split in :c:type:`drm_bridge_funcs.pre_enable `, :c:type:`drm_bridge_funcs.enable `, :c:type:`drm_bridge_funcs.disable ` and :c:type:`drm_bridge_funcs.post_disable ` to provide finer-grained control. Bridge drivers may implement the legacy version of those operations, or the atomic version (prefixed with atomic\_), in which case they shall also implement the atomic state bookkeeping operations (:c:type:`drm_bridge_funcs.atomic_duplicate_state `, :c:type:`drm_bridge_funcs.atomic_destroy_state ` and :c:type:`drm_bridge_funcs.reset `). Mixing atomic and non-atomic versions of the operations is not supported. h](h)}(hX>The encoder-related operations support control of the bridges in the chain, and are roughly counterparts to the :c:type:`drm_encoder_helper_funcs` operations. They are used by the legacy CRTC and the atomic modeset helpers to perform mode validation, fixup and setting, and enable and disable the bridge automatically.h](hpThe encoder-related operations support control of the bridges in the chain, and are roughly counterparts to the }(hjUhhhNhNubh)}(h":c:type:`drm_encoder_helper_funcs`h]jz)}(hj_h]hdrm_encoder_helper_funcs}(hjahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjUubh operations. They are used by the legacy CRTC and the atomic modeset helpers to perform mode validation, fixup and setting, and enable and disable the bridge automatically.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hMhjQubh)}(hX5The enable and disable operations are split in :c:type:`drm_bridge_funcs.pre_enable `, :c:type:`drm_bridge_funcs.enable `, :c:type:`drm_bridge_funcs.disable ` and :c:type:`drm_bridge_funcs.post_disable ` to provide finer-grained control.h](h/The enable and disable operations are split in }(hjhhhNhNubh)}(h8:c:type:`drm_bridge_funcs.pre_enable `h]jz)}(hjh]hdrm_bridge_funcs.pre_enable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjubh, }(hjhhhNhNubh)}(h4:c:type:`drm_bridge_funcs.enable `h]jz)}(hjh]hdrm_bridge_funcs.enable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubh, }(hjhhhNhNubh)}(h5:c:type:`drm_bridge_funcs.disable `h]jz)}(hjh]hdrm_bridge_funcs.disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubh and }(hjhhhNhNubh)}(h::c:type:`drm_bridge_funcs.post_disable `h]jz)}(hjh]hdrm_bridge_funcs.post_disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubh" to provide finer-grained control.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjQubh)}(hXBridge drivers may implement the legacy version of those operations, or the atomic version (prefixed with atomic\_), in which case they shall also implement the atomic state bookkeeping operations (:c:type:`drm_bridge_funcs.atomic_duplicate_state `, :c:type:`drm_bridge_funcs.atomic_destroy_state ` and :c:type:`drm_bridge_funcs.reset `). Mixing atomic and non-atomic versions of the operations is not supported.h](hBridge drivers may implement the legacy version of those operations, or the atomic version (prefixed with atomic_), in which case they shall also implement the atomic state bookkeeping operations (}(hj"hhhNhNubh)}(hD:c:type:`drm_bridge_funcs.atomic_duplicate_state `h]jz)}(hj,h]h'drm_bridge_funcs.atomic_duplicate_state}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhj"ubh, }(hj"hhhNhNubh)}(hB:c:type:`drm_bridge_funcs.atomic_destroy_state `h]jz)}(hjPh]h%drm_bridge_funcs.atomic_destroy_state}(hjRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjIhMhj"ubh and }(hj"hhhNhNubh)}(h3:c:type:`drm_bridge_funcs.reset `h]jz)}(hjsh]hdrm_bridge_funcs.reset}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjIhMhj"ubhL). Mixing atomic and non-atomic versions of the operations is not supported.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMhjQubeh}(h]h ]h"]h$]h&]uh1hhjNubh)}(hXThe bus format negotiation operations :c:type:`drm_bridge_funcs.atomic_get_output_bus_fmts ` and :c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts ` allow bridge drivers to negotiate the formats transmitted between bridges in the chain when multiple formats are supported. Negotiation for formats is performed transparently for display drivers by the atomic modeset helpers. Only atomic versions of those operations exist, bridge drivers that need to implement them shall thus also implement the atomic version of the encoder-related operations. This feature is not supported by the legacy CRTC helpers. h]h)}(hXThe bus format negotiation operations :c:type:`drm_bridge_funcs.atomic_get_output_bus_fmts ` and :c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts ` allow bridge drivers to negotiate the formats transmitted between bridges in the chain when multiple formats are supported. Negotiation for formats is performed transparently for display drivers by the atomic modeset helpers. Only atomic versions of those operations exist, bridge drivers that need to implement them shall thus also implement the atomic version of the encoder-related operations. This feature is not supported by the legacy CRTC helpers.h](h&The bus format negotiation operations }(hjhhhNhNubh)}(hH:c:type:`drm_bridge_funcs.atomic_get_output_bus_fmts `h]jz)}(hjh]h+drm_bridge_funcs.atomic_get_output_bus_fmts}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjubh and }(hjhhhNhNubh)}(hG:c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts `h]jz)}(hjh]h*drm_bridge_funcs.atomic_get_input_bus_fmts}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubhX allow bridge drivers to negotiate the formats transmitted between bridges in the chain when multiple formats are supported. Negotiation for formats is performed transparently for display drivers by the atomic modeset helpers. Only atomic versions of those operations exist, bridge drivers that need to implement them shall thus also implement the atomic version of the encoder-related operations. This feature is not supported by the legacy CRTC helpers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1hhjNubh)}(hX The connector-related operations support implementing a :c:type:`drm_connector` based on a chain of bridges. DRM bridges traditionally create a :c:type:`drm_connector` for bridges meant to be used at the end of the chain. This puts additional burden on bridge drivers, especially for bridges that may be used in the middle of a chain or at the end of it. Furthermore, it requires all operations of the :c:type:`drm_connector` to be handled by a single bridge, which doesn't always match the hardware architecture. To simplify bridge drivers and make the connector implementation more flexible, a new model allows bridges to unconditionally skip creation of :c:type:`drm_connector` and instead expose :c:type:`drm_bridge_funcs` operations to support an externally-implemented :c:type:`drm_connector`. Those operations are :c:type:`drm_bridge_funcs.detect `, :c:type:`drm_bridge_funcs.get_modes `, :c:type:`drm_bridge_funcs.get_edid `, :c:type:`drm_bridge_funcs.hpd_notify `, :c:type:`drm_bridge_funcs.hpd_enable ` and :c:type:`drm_bridge_funcs.hpd_disable `. When implemented, display drivers shall create a :c:type:`drm_connector` instance for each chain of bridges, and implement those connector instances based on the bridge connector operations. Bridge drivers shall implement the connector-related operations for all the features that the bridge hardware support. For instance, if a bridge supports reading EDID, the :c:type:`drm_bridge_funcs.get_edid ` shall be implemented. This however doesn't mean that the DDC lines are wired to the bridge on a particular platform, as they could also be connected to an I2C controller of the SoC. Support for the connector-related operations on the running platform is reported through the :c:type:`drm_bridge.ops ` flags. Bridge drivers shall detect which operations they can support on the platform (usually this information is provided by ACPI or DT), and set the :c:type:`drm_bridge.ops ` flags for all supported operations. A flag shall only be set if the corresponding :c:type:`drm_bridge_funcs` operation is implemented, but an implemented operation doesn't necessarily imply that the corresponding flag will be set. Display drivers shall use the :c:type:`drm_bridge.ops ` flags to decide which bridge to delegate a connector operation to. This mechanism allows providing a single static const :c:type:`drm_bridge_funcs` instance in bridge drivers, improving security by storing function pointers in read-only memory. In order to ease transition, bridge drivers may support both the old and new models by making connector creation optional and implementing the connected-related bridge operations. Connector creation is then controlled by the flags argument to the drm_bridge_attach() function. Display drivers that support the new model and create connectors themselves shall set the ``DRM_BRIDGE_ATTACH_NO_CONNECTOR`` flag, and bridge drivers shall then skip connector creation. For intermediate bridges in the chain, the flag shall be passed to the drm_bridge_attach() call for the downstream bridge. Bridge drivers that implement the new model only shall return an error from their :c:type:`drm_bridge_funcs.attach ` handler when the ``DRM_BRIDGE_ATTACH_NO_CONNECTOR`` flag is not set. New display drivers should use the new model, and convert the bridge drivers they use if needed, in order to gradually transition to the new model. :h](h)}(hXThe connector-related operations support implementing a :c:type:`drm_connector` based on a chain of bridges. DRM bridges traditionally create a :c:type:`drm_connector` for bridges meant to be used at the end of the chain. This puts additional burden on bridge drivers, especially for bridges that may be used in the middle of a chain or at the end of it. Furthermore, it requires all operations of the :c:type:`drm_connector` to be handled by a single bridge, which doesn't always match the hardware architecture.h](h8The connector-related operations support implementing a }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj h]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjubhA based on a chain of bridges. DRM bridges traditionally create a }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj1h]h drm_connector}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj*hMhjubh for bridges meant to be used at the end of the chain. This puts additional burden on bridge drivers, especially for bridges that may be used in the middle of a chain or at the end of it. Furthermore, it requires all operations of the }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjTh]h drm_connector}(hjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj*hMhjubhZ to be handled by a single bridge, which doesn’t always match the hardware architecture.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hMhjubh)}(hXJTo simplify bridge drivers and make the connector implementation more flexible, a new model allows bridges to unconditionally skip creation of :c:type:`drm_connector` and instead expose :c:type:`drm_bridge_funcs` operations to support an externally-implemented :c:type:`drm_connector`. Those operations are :c:type:`drm_bridge_funcs.detect `, :c:type:`drm_bridge_funcs.get_modes `, :c:type:`drm_bridge_funcs.get_edid `, :c:type:`drm_bridge_funcs.hpd_notify `, :c:type:`drm_bridge_funcs.hpd_enable ` and :c:type:`drm_bridge_funcs.hpd_disable `. When implemented, display drivers shall create a :c:type:`drm_connector` instance for each chain of bridges, and implement those connector instances based on the bridge connector operations.h](hTo simplify bridge drivers and make the connector implementation more flexible, a new model allows bridges to unconditionally skip creation of }(hj{hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhj{ubh and instead expose }(hj{hhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hjh]hdrm_bridge_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh1 operations to support an externally-implemented }(hj{hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjhMhj{ubh. Those operations are }(hj{hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.detect `h]jz)}(hjh]hdrm_bridge_funcs.detect}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh, }(hj{hhhNhNubh)}(h7:c:type:`drm_bridge_funcs.get_modes `h]jz)}(hjh]hdrm_bridge_funcs.get_modes}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh, }(hj{hhhNhNubh)}(h6:c:type:`drm_bridge_funcs.get_edid `h]jz)}(hj5h]hdrm_bridge_funcs.get_edid}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh, }hj{sbh)}(h8:c:type:`drm_bridge_funcs.hpd_notify `h]jz)}(hjXh]hdrm_bridge_funcs.hpd_notify}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh, }hj{sbh)}(h8:c:type:`drm_bridge_funcs.hpd_enable `h]jz)}(hj{h]hdrm_bridge_funcs.hpd_enable}(hj}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh and }(hj{hhhNhNubh)}(h9:c:type:`drm_bridge_funcs.hpd_disable `h]jz)}(hjh]hdrm_bridge_funcs.hpd_disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhj{ubh3. When implemented, display drivers shall create a }(hj{hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjhMhj{ubhv instance for each chain of bridges, and implement those connector instances based on the bridge connector operations.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hXBridge drivers shall implement the connector-related operations for all the features that the bridge hardware support. For instance, if a bridge supports reading EDID, the :c:type:`drm_bridge_funcs.get_edid ` shall be implemented. This however doesn't mean that the DDC lines are wired to the bridge on a particular platform, as they could also be connected to an I2C controller of the SoC. Support for the connector-related operations on the running platform is reported through the :c:type:`drm_bridge.ops ` flags. Bridge drivers shall detect which operations they can support on the platform (usually this information is provided by ACPI or DT), and set the :c:type:`drm_bridge.ops ` flags for all supported operations. A flag shall only be set if the corresponding :c:type:`drm_bridge_funcs` operation is implemented, but an implemented operation doesn't necessarily imply that the corresponding flag will be set. Display drivers shall use the :c:type:`drm_bridge.ops ` flags to decide which bridge to delegate a connector operation to. This mechanism allows providing a single static const :c:type:`drm_bridge_funcs` instance in bridge drivers, improving security by storing function pointers in read-only memory.h](hBridge drivers shall implement the connector-related operations for all the features that the bridge hardware support. For instance, if a bridge supports reading EDID, the }(hjhhhNhNubh)}(h6:c:type:`drm_bridge_funcs.get_edid `h]jz)}(hjh]hdrm_bridge_funcs.get_edid}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjubhX shall be implemented. This however doesn’t mean that the DDC lines are wired to the bridge on a particular platform, as they could also be connected to an I2C controller of the SoC. Support for the connector-related operations on the running platform is reported through the }(hjhhhNhNubh)}(h%:c:type:`drm_bridge.ops `h]jz)}(hjh]hdrm_bridge.ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhMhjubh flags. Bridge drivers shall detect which operations they can support on the platform (usually this information is provided by ACPI or DT), and set the }(hjhhhNhNubh)}(h%:c:type:`drm_bridge.ops `h]jz)}(hj9h]hdrm_bridge.ops}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhMhjubhS flags for all supported operations. A flag shall only be set if the corresponding }(hjhhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hj\h]hdrm_bridge_funcs}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubh operation is implemented, but an implemented operation doesn’t necessarily imply that the corresponding flag will be set. Display drivers shall use the }(hjhhhNhNubh)}(h%:c:type:`drm_bridge.ops `h]jz)}(hjh]hdrm_bridge.ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhMhjubhz flags to decide which bridge to delegate a connector operation to. This mechanism allows providing a single static const }(hjhhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hjh]hdrm_bridge_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubha instance in bridge drivers, improving security by storing function pointers in read-only memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hXIn order to ease transition, bridge drivers may support both the old and new models by making connector creation optional and implementing the connected-related bridge operations. Connector creation is then controlled by the flags argument to the drm_bridge_attach() function. Display drivers that support the new model and create connectors themselves shall set the ``DRM_BRIDGE_ATTACH_NO_CONNECTOR`` flag, and bridge drivers shall then skip connector creation. For intermediate bridges in the chain, the flag shall be passed to the drm_bridge_attach() call for the downstream bridge. Bridge drivers that implement the new model only shall return an error from their :c:type:`drm_bridge_funcs.attach ` handler when the ``DRM_BRIDGE_ATTACH_NO_CONNECTOR`` flag is not set. New display drivers should use the new model, and convert the bridge drivers they use if needed, in order to gradually transition to the new model.h](hXoIn order to ease transition, bridge drivers may support both the old and new models by making connector creation optional and implementing the connected-related bridge operations. Connector creation is then controlled by the flags argument to the drm_bridge_attach() function. Display drivers that support the new model and create connectors themselves shall set the }(hjhhhNhNubjz)}(h"``DRM_BRIDGE_ATTACH_NO_CONNECTOR``h]hDRM_BRIDGE_ATTACH_NO_CONNECTOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhX  flag, and bridge drivers shall then skip connector creation. For intermediate bridges in the chain, the flag shall be passed to the drm_bridge_attach() call for the downstream bridge. Bridge drivers that implement the new model only shall return an error from their }(hjhhhNhNubh)}(h4:c:type:`drm_bridge_funcs.attach `h]jz)}(hjh]hdrm_bridge_funcs.attach}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhjubh handler when the }(hjhhhNhNubjz)}(h"``DRM_BRIDGE_ATTACH_NO_CONNECTOR``h]hDRM_BRIDGE_ATTACH_NO_CONNECTOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh flag is not set. New display drivers should use the new model, and convert the bridge drivers they use if needed, in order to gradually transition to the new model.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjNubeh}(h]h ]h"]h$]h&]j8j4uh1hhj|hMhj hhubeh}(h]bridge-operationsah ]h"]bridge operationsah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(hBridge Connector Helperh]hBridge Connector Helper}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hhhhhKubh)}(hXDThe DRM bridge connector helper object provides a DRM connector implementation that wraps a chain of :c:type:`struct drm_bridge `. The connector operations are fully implemented based on the operations of the bridges in the chain, and don't require any intervention from the display controller driver at runtime.h](heThe DRM bridge connector helper object provides a DRM connector implementation that wraps a chain of }(hjDhhhNhNubh)}(h(:c:type:`struct drm_bridge `h]jz)}(hjNh]hstruct drm_bridge}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:175: ./drivers/gpu/drm/display/drm_bridge_connector.chKhjDubh. The connector operations are fully implemented based on the operations of the bridges in the chain, and don’t require any intervention from the display controller driver at runtime.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhKhj3hhubh)}(hXHTo use the helper, display controller drivers create a bridge connector with a call to drm_bridge_connector_init(). This associates the newly created connector with the chain of bridges passed to the function and registers it with the DRM device. At that point the connector becomes fully usable, no further operation is needed.h]hXHTo use the helper, display controller drivers create a bridge connector with a call to drm_bridge_connector_init(). This associates the newly created connector with the chain of bridges passed to the function and registers it with the DRM device. At that point the connector becomes fully usable, no further operation is needed.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:175: ./drivers/gpu/drm/display/drm_bridge_connector.chK!hj3hhubh)}(hXThe DRM bridge connector operations are implemented based on the operations provided by the bridges in the chain. Each connector operation is delegated to the bridge closest to the connector (at the end of the chain) that provides the relevant functionality.h]hXThe DRM bridge connector operations are implemented based on the operations provided by the bridges in the chain. Each connector operation is delegated to the bridge closest to the connector (at the end of the chain) that provides the relevant functionality.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:175: ./drivers/gpu/drm/display/drm_bridge_connector.chK'hj3hhubh)}(hX:To make use of this helper, all bridges in the chain shall report bridge operation flags (:c:type:`drm_bridge->ops `) and bridge output type (:c:type:`drm_bridge->type `), as well as the DRM_BRIDGE_ATTACH_NO_CONNECTOR attach flag (none of the bridges shall create a DRM connector directly).h](hZTo make use of this helper, all bridges in the chain shall report bridge operation flags (}(hjhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjh]hdrm_bridge->ops}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:175: ./drivers/gpu/drm/display/drm_bridge_connector.chK,hjubh) and bridge output type (}(hjhhhNhNubh)}(h':c:type:`drm_bridge->type `h]jz)}(hjh]hdrm_bridge->type}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhK,hjubhy), as well as the DRM_BRIDGE_ATTACH_NO_CONNECTOR attach flag (none of the bridges shall create a DRM connector directly).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK,hj3hhubeh}(h]bridge-connector-helperah ]h"]bridge connector helperah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(hBridge Helper Referenceh]hBridge Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_bridge_attach_flags (C enum)c.drm_bridge_attach_flagshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_bridge_attach_flagsh]j)}(henum drm_bridge_attach_flagsh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hKubj)}(hdrm_bridge_attach_flagsh]j)}(hjh]hdrm_bridge_attach_flags}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj(hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj(hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj(hKhjhhubj)}(hhh]h)}(h>Flags for :c:type:`drm_bridge_funcs.attach `h](h Flags for }(hj]hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.attach `h]jz)}(hjgh]hdrm_bridge_funcs.attach}(hjihhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j%)}jjsbc.drm_bridge_attach_flagsasbjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj]ubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK1hjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hKubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hx**Constants** ``DRM_BRIDGE_ATTACH_NO_CONNECTOR`` When this flag is set the bridge shall not create a drm_connector.h](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK5hjubji)}(hhh]jn)}(he``DRM_BRIDGE_ATTACH_NO_CONNECTOR`` When this flag is set the bridge shall not create a drm_connector.h](jt)}(h"``DRM_BRIDGE_ATTACH_NO_CONNECTOR``h]jz)}(hjh]hDRM_BRIDGE_ATTACH_NO_CONNECTOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK8hjubj)}(hhh]h)}(hBWhen this flag is set the bridge shall not create a drm_connector.h]hBWhen this flag is set the bridge shall not create a drm_connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_funcs (C struct)c.drm_bridge_funcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_bridge_funcsh]j)}(hstruct drm_bridge_funcsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK?ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hK?ubj)}(hdrm_bridge_funcsh]j)}(hjh]hdrm_bridge_funcs}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hK?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj+hK?ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj+hK?hjhhubj)}(hhh]h)}(hdrm_bridge control functionsh]hdrm_bridge control functions}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK` for more details. This is the only hook that allows a bridge to reject a modeset. If this function passes all other callbacks must succeed for this configuration. The mode_fixup callback is optional. :c:type:`drm_bridge_funcs.mode_fixup\(\) ` is not called when :c:type:`drm_bridge_funcs.atomic_check\(\) ` is implemented, so only one of them should be provided. NOTE: This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in **state** parameter. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any bridge constraints and limits checks into **mode_valid**. RETURNS: True if an acceptable configuration is possible, false if the modeset operation should be rejected. ``disable`` This callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called before that bridge's **disable** vfunc. If the preceding element is a :c:type:`drm_encoder` it's called right before the :c:type:`drm_encoder_helper_funcs.disable `, :c:type:`drm_encoder_helper_funcs.prepare ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. The **disable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_disable `. ``post_disable`` This callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called after that bridge's **post_disable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.disable `, :c:type:`drm_encoder_helper_funcs.prepare ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called. The **post_disable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_post_disable `. ``mode_set`` This callback should set the given mode on the bridge. It is called after the **mode_set** callback for the preceding element in the display pipeline has been called already. If the bridge is the first element then this would be :c:type:`drm_encoder_helper_funcs.mode_set `. The display pipe (i.e. clocks and timing signals) is off when this function is called. The adjusted_mode parameter is the mode output by the CRTC for the first bridge in the chain. It can be different from the mode parameter that contains the desired mode for the connector at the end of the bridges chain, for instance when the first bridge in the chain performs scaling. The adjusted mode is mostly useful for the first bridge in the chain and is likely irrelevant for the other bridges. For atomic drivers the adjusted_mode is the mode stored in :c:type:`drm_crtc_state.adjusted_mode `. NOTE: This is deprecated, do not use! New drivers shall set their mode in the :c:type:`drm_bridge_funcs.atomic_enable ` operation. ``pre_enable`` This callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called before that bridge's **pre_enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right before the encoder's :c:type:`drm_encoder_helper_funcs.enable `, :c:type:`drm_encoder_helper_funcs.commit ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called. The **pre_enable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_pre_enable `. ``enable`` This callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called after that bridge's **enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.enable `, :c:type:`drm_encoder_helper_funcs.commit ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one. The **enable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_enable `. ``atomic_pre_enable`` This callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called before that bridge's **atomic_pre_enable** or **pre_enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right before the encoder's :c:type:`drm_encoder_helper_funcs.atomic_enable ` hook. The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called. The **atomic_pre_enable** callback is optional. ``atomic_enable`` This callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called after that bridge's **atomic_enable** or **enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.atomic_enable ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one. The **atomic_enable** callback is optional. ``atomic_disable`` This callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called before that bridge's **atomic_disable** or **disable** vfunc. If the preceding element is a :c:type:`drm_encoder` it's called right before the :c:type:`drm_encoder_helper_funcs.atomic_disable ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. The **atomic_disable** callback is optional. ``atomic_post_disable`` This callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called after that bridge's **atomic_post_disable** or **post_disable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.atomic_disable ` hook. The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called. The **atomic_post_disable** callback is optional. ``atomic_duplicate_state`` Duplicate the current bridge state object (which is guaranteed to be non-NULL). The atomic_duplicate_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_duplicate_state() helper function shall be used to implement this hook. RETURNS: A valid drm_bridge_state object or NULL if the allocation fails. ``atomic_destroy_state`` Destroy a bridge state object previously allocated by :c:type:`drm_bridge_funcs.atomic_duplicate_state\(\) `. The atomic_destroy_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_destroy_state() helper function shall be used to implement this hook. ``atomic_get_output_bus_fmts`` Return the supported bus formats on the output end of a bridge. The returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_output_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works). This method is only called on the last element of the bridge chain as part of the bus format negotiation process that happens in :c:type:`drm_atomic_bridge_chain_select_bus_fmts`(). This method is optional. When not implemented, the core will fall back to :c:type:`drm_connector.display_info `.bus_formats[0] if :c:type:`drm_connector.display_info `.num_bus_formats > 0, or to MEDIA_BUS_FMT_FIXED otherwise. ``atomic_get_input_bus_fmts`` Return the supported bus formats on the input end of a bridge for a specific output bus format. The returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_input_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works). When the format is not supported NULL should be returned and num_input_fmts should be set to 0. This method is called on all elements of the bridge chain as part of the bus format negotiation process that happens in drm_atomic_bridge_chain_select_bus_fmts(). This method is optional. When not implemented, the core will bypass bus format negotiation on this element of the bridge without failing, and the previous element in the chain will be passed MEDIA_BUS_FMT_FIXED as its output bus format. Bridge drivers that need to support being linked to bridges that are not supporting bus format negotiation should handle the output_fmt == MEDIA_BUS_FMT_FIXED case appropriately, by selecting a sensible default value or extracting this information from somewhere else (FW property, :c:type:`drm_display_mode`, :c:type:`drm_display_info`, ...) Note: Even if input format selection on the first bridge has no impact on the negotiation process (bus format negotiation stops once we reach the first element of the chain), drivers are expected to return accurate input formats as the input format may be used to configure the CRTC output appropriately. ``atomic_check`` This method is responsible for checking bridge state correctness. It can also check the state of the surrounding components in chain to make sure the whole pipeline can work properly. :c:type:`drm_bridge_funcs.atomic_check\(\) ` hooks are called in reverse order (from the last to the first bridge). This method is optional. :c:type:`drm_bridge_funcs.mode_fixup\(\) ` is not called when :c:type:`drm_bridge_funcs.atomic_check\(\) ` is implemented, so only one of them should be provided. If drivers need to tweak :c:type:`drm_bridge_state.input_bus_cfg `.flags or :c:type:`drm_bridge_state.output_bus_cfg `.flags it should happen in this function. By default the :c:type:`drm_bridge_state.output_bus_cfg `.flags field is set to the next bridge :c:type:`drm_bridge_state.input_bus_cfg `.flags value or :c:type:`drm_connector.display_info `.bus_flags if the bridge is the last element in the chain. RETURNS: zero if the check passed, a negative error code otherwise. ``atomic_reset`` Reset the bridge to a predefined state (or retrieve its current state) and return a :c:type:`drm_bridge_state` object matching this state. This function is called at attach time. The atomic_reset hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_reset() helper function shall be used to implement this hook. Note that the atomic_reset() semantics is not exactly matching the reset() semantics found on other components (connector, plane, ...). 1. The reset operation happens when the bridge is attached, not when drm_mode_config_reset() is called 2. It's meant to be used exclusively on bridges that have been converted to the ATOMIC API RETURNS: A valid drm_bridge_state object in case of success, an ERR_PTR() giving the reason of the failure otherwise. ``detect`` Check if anything is attached to the bridge output. This callback is optional, if not implemented the bridge will be considered as always having a component attached to its output. Bridges that implement this callback shall set the DRM_BRIDGE_OP_DETECT flag in their :c:type:`drm_bridge->ops `. RETURNS: drm_connector_status indicating the bridge output status. ``get_modes`` Fill all modes currently valid for the sink into the :c:type:`drm_connector` with drm_mode_probed_add(). The **get_modes** callback is mostly intended to support non-probeable displays such as many fixed panels. Bridges that support reading EDID shall leave **get_modes** unimplemented and implement the :c:type:`drm_bridge_funcs->edid_read ` callback instead. This callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_MODES flag in their :c:type:`drm_bridge->ops `. The connector parameter shall be used for the sole purpose of filling modes, and shall not be stored internally by bridge drivers for future usage. RETURNS: The number of modes added by calling drm_mode_probed_add(). ``edid_read`` Read the EDID data of the connected display. The **edid_read** callback is the preferred way of reporting mode information for a display connected to the bridge output. Bridges that support reading EDID shall implement this callback and leave the **get_modes** callback unimplemented. The caller of this operation shall first verify the output connection status and refrain from reading EDID from a disconnected output. This callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_EDID flag in their :c:type:`drm_bridge->ops `. The connector parameter shall be used for the sole purpose of EDID retrieval, and shall not be stored internally by bridge drivers for future usage. RETURNS: An edid structure newly allocated with drm_edid_alloc() or returned from drm_edid_read() family of functions on success, or NULL otherwise. The caller is responsible for freeing the returned edid structure with drm_edid_free(). ``hpd_notify`` Notify the bridge of hot plug detection. This callback is optional, it may be implemented by bridges that need to be notified of display connection or disconnection for internal reasons. One use case is to reset the internal state of CEC controllers for HDMI bridges. ``hpd_enable`` Enable hot plug detection. From now on the bridge shall call drm_bridge_hpd_notify() each time a change is detected in the output connection status, until hot plug detection gets disabled with **hpd_disable**. This callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the **hpd_disable** callback and set the DRM_BRIDGE_OP_HPD flag in their :c:type:`drm_bridge->ops `. ``hpd_disable`` Disable hot plug detection. Once this function returns the bridge shall not call drm_bridge_hpd_notify() when a change in the output connection status occurs. This callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the **hpd_enable** callback and set the DRM_BRIDGE_OP_HPD flag in their :c:type:`drm_bridge->ops `. ``hdmi_tmds_char_rate_valid`` Check whether a particular TMDS character rate is supported by the driver. This callback is optional and should only be implemented by the bridges that take part in the HDMI connector implementation. Bridges that implement it shall set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `. Returns: Either :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `. ``hdmi_clear_infoframe`` This callback clears the infoframes in the hardware during commit. It will be called multiple times, once for every disabled infoframe type. This callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `. ``hdmi_write_infoframe`` Program the infoframe into the hardware. It will be called multiple times, once for every updated infoframe type. This callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `. ``hdmi_audio_startup`` Called when ASoC starts an audio stream setup. The **hdmi_audio_startup\(\)** is optional. Returns: 0 on success, a negative error code otherwise ``hdmi_audio_prepare`` Configures HDMI-encoder for audio stream. Can be called multiple times for each setup. Mandatory if HDMI audio is enabled in the bridge's configuration. Returns: 0 on success, a negative error code otherwise ``hdmi_audio_shutdown`` Shut down the audio stream. Mandatory if HDMI audio is enabled in the bridge's configuration. Returns: 0 on success, a negative error code otherwise ``hdmi_audio_mute_stream`` Mute/unmute HDMI audio stream. The **hdmi_audio_mute_stream** callback is optional. Returns: 0 on success, a negative error code otherwise ``debugfs_init`` Allows bridges to create bridge-specific debugfs files.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK@hj|ubj@)}(hX struct drm_bridge_funcs { int (*attach)(struct drm_bridge *bridge, enum drm_bridge_attach_flags flags); void (*detach)(struct drm_bridge *bridge); enum drm_mode_status (*mode_valid)(struct drm_bridge *bridge,const struct drm_display_info *info, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_bridge *bridge,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*disable)(struct drm_bridge *bridge); void (*post_disable)(struct drm_bridge *bridge); void (*mode_set)(struct drm_bridge *bridge,const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode); void (*pre_enable)(struct drm_bridge *bridge); void (*enable)(struct drm_bridge *bridge); void (*atomic_pre_enable)(struct drm_bridge *bridge, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_bridge *bridge, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_bridge *bridge, struct drm_atomic_state *state); void (*atomic_post_disable)(struct drm_bridge *bridge, struct drm_atomic_state *state); struct drm_bridge_state *(*atomic_duplicate_state)(struct drm_bridge *bridge); void (*atomic_destroy_state)(struct drm_bridge *bridge, struct drm_bridge_state *state); u32 *(*atomic_get_output_bus_fmts)(struct drm_bridge *bridge,struct drm_bridge_state *bridge_state,struct drm_crtc_state *crtc_state,struct drm_connector_state *conn_state, unsigned int *num_output_fmts); u32 *(*atomic_get_input_bus_fmts)(struct drm_bridge *bridge,struct drm_bridge_state *bridge_state,struct drm_crtc_state *crtc_state,struct drm_connector_state *conn_state,u32 output_fmt, unsigned int *num_input_fmts); int (*atomic_check)(struct drm_bridge *bridge,struct drm_bridge_state *bridge_state,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); struct drm_bridge_state *(*atomic_reset)(struct drm_bridge *bridge); enum drm_connector_status (*detect)(struct drm_bridge *bridge); int (*get_modes)(struct drm_bridge *bridge, struct drm_connector *connector); const struct drm_edid *(*edid_read)(struct drm_bridge *bridge, struct drm_connector *connector); void (*hpd_notify)(struct drm_bridge *bridge, enum drm_connector_status status); void (*hpd_enable)(struct drm_bridge *bridge); void (*hpd_disable)(struct drm_bridge *bridge); enum drm_mode_status(*hdmi_tmds_char_rate_valid)(const struct drm_bridge *bridge,const struct drm_display_mode *mode, unsigned long long tmds_rate); int (*hdmi_clear_infoframe)(struct drm_bridge *bridge, enum hdmi_infoframe_type type); int (*hdmi_write_infoframe)(struct drm_bridge *bridge,enum hdmi_infoframe_type type, const u8 *buffer, size_t len); int (*hdmi_audio_startup)(struct drm_connector *connector, struct drm_bridge *bridge); int (*hdmi_audio_prepare)(struct drm_connector *connector,struct drm_bridge *bridge,struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*hdmi_audio_shutdown)(struct drm_connector *connector, struct drm_bridge *bridge); int (*hdmi_audio_mute_stream)(struct drm_connector *connector,struct drm_bridge *bridge, bool enable, int direction); void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root); };h]hX struct drm_bridge_funcs { int (*attach)(struct drm_bridge *bridge, enum drm_bridge_attach_flags flags); void (*detach)(struct drm_bridge *bridge); enum drm_mode_status (*mode_valid)(struct drm_bridge *bridge,const struct drm_display_info *info, const struct drm_display_mode *mode); bool (*mode_fixup)(struct drm_bridge *bridge,const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*disable)(struct drm_bridge *bridge); void (*post_disable)(struct drm_bridge *bridge); void (*mode_set)(struct drm_bridge *bridge,const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode); void (*pre_enable)(struct drm_bridge *bridge); void (*enable)(struct drm_bridge *bridge); void (*atomic_pre_enable)(struct drm_bridge *bridge, struct drm_atomic_state *state); void (*atomic_enable)(struct drm_bridge *bridge, struct drm_atomic_state *state); void (*atomic_disable)(struct drm_bridge *bridge, struct drm_atomic_state *state); void (*atomic_post_disable)(struct drm_bridge *bridge, struct drm_atomic_state *state); struct drm_bridge_state *(*atomic_duplicate_state)(struct drm_bridge *bridge); void (*atomic_destroy_state)(struct drm_bridge *bridge, struct drm_bridge_state *state); u32 *(*atomic_get_output_bus_fmts)(struct drm_bridge *bridge,struct drm_bridge_state *bridge_state,struct drm_crtc_state *crtc_state,struct drm_connector_state *conn_state, unsigned int *num_output_fmts); u32 *(*atomic_get_input_bus_fmts)(struct drm_bridge *bridge,struct drm_bridge_state *bridge_state,struct drm_crtc_state *crtc_state,struct drm_connector_state *conn_state,u32 output_fmt, unsigned int *num_input_fmts); int (*atomic_check)(struct drm_bridge *bridge,struct drm_bridge_state *bridge_state,struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state); struct drm_bridge_state *(*atomic_reset)(struct drm_bridge *bridge); enum drm_connector_status (*detect)(struct drm_bridge *bridge); int (*get_modes)(struct drm_bridge *bridge, struct drm_connector *connector); const struct drm_edid *(*edid_read)(struct drm_bridge *bridge, struct drm_connector *connector); void (*hpd_notify)(struct drm_bridge *bridge, enum drm_connector_status status); void (*hpd_enable)(struct drm_bridge *bridge); void (*hpd_disable)(struct drm_bridge *bridge); enum drm_mode_status(*hdmi_tmds_char_rate_valid)(const struct drm_bridge *bridge,const struct drm_display_mode *mode, unsigned long long tmds_rate); int (*hdmi_clear_infoframe)(struct drm_bridge *bridge, enum hdmi_infoframe_type type); int (*hdmi_write_infoframe)(struct drm_bridge *bridge,enum hdmi_infoframe_type type, const u8 *buffer, size_t len); int (*hdmi_audio_startup)(struct drm_connector *connector, struct drm_bridge *bridge); int (*hdmi_audio_prepare)(struct drm_connector *connector,struct drm_bridge *bridge,struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*hdmi_audio_shutdown)(struct drm_connector *connector, struct drm_bridge *bridge); int (*hdmi_audio_mute_stream)(struct drm_connector *connector,struct drm_bridge *bridge, bool enable, int direction); void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKBhj|ubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKfhj|ubji)}(hhh](jn)}(hX``attach`` This callback is invoked whenever our bridge is being attached to a :c:type:`drm_encoder`. The flags argument tunes the behaviour of the attach operation (see DRM_BRIDGE_ATTACH_*). The **attach** callback is optional. RETURNS: Zero on success, error code on failure. h](jt)}(h ``attach``h]jz)}(hjh]hattach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKIhjubj)}(hhh](h)}(hThis callback is invoked whenever our bridge is being attached to a :c:type:`drm_encoder`. The flags argument tunes the behaviour of the attach operation (see DRM_BRIDGE_ATTACH_*).h](hDThis callback is invoked whenever our bridge is being attached to a }(hjhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjh]h drm_encoder}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKAhjubh[. The flags argument tunes the behaviour of the attach operation (see DRM_BRIDGE_ATTACH_*).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKAhjubh)}(h$The **attach** callback is optional.h](hThe }(hjhhhNhNubj%)}(h **attach**h]hattach}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh callback is optional.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKEhjubh)}(hRETURNS:h]hRETURNS:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKGhjubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKIhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKIhjubjn)}(h``detach`` This callback is invoked whenever our bridge is being detached from a :c:type:`drm_encoder`. The **detach** callback is optional. h](jt)}(h ``detach``h]jz)}(hjhh]hdetach}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKThjbubj)}(hhh](h)}(h\This callback is invoked whenever our bridge is being detached from a :c:type:`drm_encoder`.h](hFThis callback is invoked whenever our bridge is being detached from a }(hjhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjh]h drm_encoder}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKQhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKQhj~ubh)}(h$The **detach** callback is optional.h](hThe }(hjhhhNhNubj%)}(h **detach**h]hdetach}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh callback is optional.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hKThj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hKThjubjn)}(hX?``mode_valid`` This callback is used to check if a specific mode is valid in this bridge. This should be implemented if the bridge has some sort of restriction in the modes it can display. For example, a given bridge may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed. This hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset(). The **mode_valid** callback is optional. NOTE: Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup**. RETURNS: drm_mode_status Enum h](jt)}(h``mode_valid``h]jz)}(hjh]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKuhjubj)}(hhh](h)}(hXThis callback is used to check if a specific mode is valid in this bridge. This should be implemented if the bridge has some sort of restriction in the modes it can display. For example, a given bridge may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed.h]hXThis callback is used to check if a specific mode is valid in this bridge. This should be implemented if the bridge has some sort of restriction in the modes it can display. For example, a given bridge may be responsible to set a clock value. If the clock can not produce all the values for the available modes then this callback can be used to restrict the number of modes to only the ones that can be displayed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK[hjubh)}(hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().h]hThis hook is used by the probe helpers to filter the mode list in drm_helper_probe_single_connector_modes(), and it is used by the atomic helpers to validate modes supplied by userspace in drm_atomic_helper_check_modeset().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKchjubh)}(h(The **mode_valid** callback is optional.h](hThe }(hjhhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh callback is optional.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhhjubh)}(hNOTE:h]hNOTE:}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKjhjubh)}(hX^Since this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in **mode_fixup**.h](hXOSince this function is both called from the check phase of an atomic commit, and the mode validation in the probe paths it is not allowed to look at anything else but the passed-in mode, and validate it against configuration-invariant hardware constraints. Any further limits which depend upon the configuration can only be checked in }(hjLhhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKlhjubh)}(hRETURNS:h]hRETURNS:}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKshjubh)}(hdrm_mode_status Enumh]hdrm_mode_status Enum}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKuhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKuhjubjn)}(hXS``mode_fixup`` This callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final :c:type:`drm_connector` or the next :c:type:`drm_bridge`. The parameter adjusted_mode is the input mode the bridge requires. It can be modified by this callback and does not need to match mode. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details. This is the only hook that allows a bridge to reject a modeset. If this function passes all other callbacks must succeed for this configuration. The mode_fixup callback is optional. :c:type:`drm_bridge_funcs.mode_fixup\(\) ` is not called when :c:type:`drm_bridge_funcs.atomic_check\(\) ` is implemented, so only one of them should be provided. NOTE: This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in **state** parameter. Also beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any bridge constraints and limits checks into **mode_valid**. RETURNS: True if an acceptable configuration is possible, false if the modeset operation should be rejected. h](jt)}(h``mode_fixup``h]jz)}(hjh]h mode_fixup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubj)}(hhh](h)}(hXThis callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final :c:type:`drm_connector` or the next :c:type:`drm_bridge`. The parameter adjusted_mode is the input mode the bridge requires. It can be modified by this callback and does not need to match mode. See also :c:type:`drm_crtc_state.adjusted_mode ` for more details.h](hThis callback is used to validate and adjust a mode. The parameter mode is the display mode that should be fed to the next element in the display chain, either the final }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK~hjubh or the next }(hjhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjh]h drm_bridge}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhK~hjubh. The parameter adjusted_mode is the input mode the bridge requires. It can be modified by this callback and does not need to match mode. See also }(hjhhhNhNubh)}(h7:c:type:`drm_crtc_state.adjusted_mode `h]jz)}(hjh]hdrm_crtc_state.adjusted_mode}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjhK~hjubh for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK~hjubh)}(hThis is the only hook that allows a bridge to reject a modeset. If this function passes all other callbacks must succeed for this configuration.h]hThis is the only hook that allows a bridge to reject a modeset. If this function passes all other callbacks must succeed for this configuration.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubh)}(hThe mode_fixup callback is optional. :c:type:`drm_bridge_funcs.mode_fixup\(\) ` is not called when :c:type:`drm_bridge_funcs.atomic_check\(\) ` is implemented, so only one of them should be provided.h](h%The mode_fixup callback is optional. }(hj<hhhNhNubh)}(h<:c:type:`drm_bridge_funcs.mode_fixup\(\) `h]jz)}(hjFh]hdrm_bridge_funcs.mode_fixup()}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj<ubh is not called when }(hj<hhhNhNubh)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hjjh]hdrm_bridge_funcs.atomic_check()}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjchKhj<ubh8 is implemented, so only one of them should be provided.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchKhjubh)}(hNOTE:h]hNOTE:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubh)}(hX>This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace's request to just check whether a configuration would be possible). Drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in **state** parameter.h](hX,This function is called in the check phase of atomic modesets, which can be aborted for any reason (including on userspace’s request to just check whether a configuration would be possible). Drivers MUST NOT touch any persistent state (hardware or software) or data structures except the passed in }(hjhhhNhNubj%)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubh)}(hXNAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in :c:type:`drm_connector.modes `. To ensure that modes are filtered consistently put any bridge constraints and limits checks into **mode_valid**.h](hAlso beware that userspace can request its own custom modes, neither core nor helpers filter modes to the list of probe modes reported by the GETCONNECTOR IOCTL and stored in }(hjhhhNhNubh)}(h-:c:type:`drm_connector.modes `h]jz)}(hjh]hdrm_connector.modes}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubhc. To ensure that modes are filtered consistently put any bridge constraints and limits checks into }(hjhhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(hRETURNS:h]hRETURNS:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubh)}(hcTrue if an acceptable configuration is possible, false if the modeset operation should be rejected.h]hcTrue if an acceptable configuration is possible, false if the modeset operation should be rejected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hX?``disable`` This callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called before that bridge's **disable** vfunc. If the preceding element is a :c:type:`drm_encoder` it's called right before the :c:type:`drm_encoder_helper_funcs.disable `, :c:type:`drm_encoder_helper_funcs.prepare ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. The **disable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_disable `. h](jt)}(h ``disable``h]jz)}(hj5h]hdisable}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj/ubj)}(hhh](h)}(hXThis callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called before that bridge's **disable** vfunc. If the preceding element is a :c:type:`drm_encoder` it's called right before the :c:type:`drm_encoder_helper_funcs.disable `, :c:type:`drm_encoder_helper_funcs.prepare ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook.h](hThis callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it’s called before that bridge’s }(hjNhhhNhNubj%)}(h **disable**h]hdisable}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubh& vfunc. If the preceding element is a }(hjNhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjjh]h drm_encoder}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjNubh it’s called right before the }(hjNhhhNhNubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]jz)}(hjh]h drm_encoder_helper_funcs.disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhKhjNubh, }(hjNhhhNhNubh)}(hE:c:type:`drm_encoder_helper_funcs.prepare `h]jz)}(hjh]h drm_encoder_helper_funcs.prepare}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhKhjNubh or }(hjNhhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hjh]hdrm_encoder_helper_funcs.dpms}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhKhjNubh hook.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjKubh)}(hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called.h]hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjKubh)}(h%The **disable** callback is optional.h](hThe }(hj hhhNhNubj%)}(h **disable**h]hdisable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh callback is optional.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjKubh)}(hNOTE:h]hNOTE:}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjKubh)}(hsThis is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_disable `.h](h6This is deprecated, do not use! New drivers shall use }(hj: hhhNhNubh)}(h<:c:type:`drm_bridge_funcs.atomic_disable `h]jz)}(hjD h]hdrm_bridge_funcs.atomic_disable}(hjF hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjB ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj: ubh.}(hj: hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhja hKhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhKhjubjn)}(hXb``post_disable`` This callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called after that bridge's **post_disable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.disable `, :c:type:`drm_encoder_helper_funcs.prepare ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called. The **post_disable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_post_disable `. h](jt)}(h``post_disable``h]jz)}(hj~ h]h post_disable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj| ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjx ubj)}(hhh](h)}(hXThis callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called after that bridge's **post_disable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.disable `, :c:type:`drm_encoder_helper_funcs.prepare ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook.h](hThis callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it’s called after that bridge’s }(hj hhhNhNubj%)}(h**post_disable**h]h post_disable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh) function. If the preceding element is a }(hj hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj h]h drm_encoder}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj ubh+ it’s called right after the encoder’s }(hj hhhNhNubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]jz)}(hj h]h drm_encoder_helper_funcs.disable}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj hKhj ubh, }(hj hhhNhNubh)}(hE:c:type:`drm_encoder_helper_funcs.prepare `h]jz)}(hj h]h drm_encoder_helper_funcs.prepare}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj hKhj ubh or }(hj hhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hj!h]hdrm_encoder_helper_funcs.dpms}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj hKhj ubh hook.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubh)}(hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called.h]hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called.}(hjD!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj ubh)}(h*The **post_disable** callback is optional.h](hThe }(hjS!hhhNhNubj%)}(h**post_disable**h]h post_disable}(hj[!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjS!ubh callback is optional.}(hjS!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj ubh)}(hNOTE:h]hNOTE:}(hjt!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj ubh)}(hxThis is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_post_disable `.h](h6This is deprecated, do not use! New drivers shall use }(hj!hhhNhNubh)}(hA:c:type:`drm_bridge_funcs.atomic_post_disable `h]jz)}(hj!h]h$drm_bridge_funcs.atomic_post_disable}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hKhj ubeh}(h]h ]h"]h$]h&]uh1jhjx ubeh}(h]h ]h"]h$]h&]uh1jmhj hKhjubjn)}(hX2``mode_set`` This callback should set the given mode on the bridge. It is called after the **mode_set** callback for the preceding element in the display pipeline has been called already. If the bridge is the first element then this would be :c:type:`drm_encoder_helper_funcs.mode_set `. The display pipe (i.e. clocks and timing signals) is off when this function is called. The adjusted_mode parameter is the mode output by the CRTC for the first bridge in the chain. It can be different from the mode parameter that contains the desired mode for the connector at the end of the bridges chain, for instance when the first bridge in the chain performs scaling. The adjusted mode is mostly useful for the first bridge in the chain and is likely irrelevant for the other bridges. For atomic drivers the adjusted_mode is the mode stored in :c:type:`drm_crtc_state.adjusted_mode `. NOTE: This is deprecated, do not use! New drivers shall set their mode in the :c:type:`drm_bridge_funcs.atomic_enable ` operation. h](jt)}(h ``mode_set``h]jz)}(hj!h]hmode_set}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj!ubj)}(hhh](h)}(hXThis callback should set the given mode on the bridge. It is called after the **mode_set** callback for the preceding element in the display pipeline has been called already. If the bridge is the first element then this would be :c:type:`drm_encoder_helper_funcs.mode_set `. The display pipe (i.e. clocks and timing signals) is off when this function is called.h](hNThis callback should set the given mode on the bridge. It is called after the }(hj!hhhNhNubj%)}(h **mode_set**h]hmode_set}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubh callback for the preceding element in the display pipeline has been called already. If the bridge is the first element then this would be }(hj!hhhNhNubh)}(hF:c:type:`drm_encoder_helper_funcs.mode_set `h]jz)}(hj!h]h!drm_encoder_helper_funcs.mode_set}(hj!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj!ubhY. The display pipe (i.e. clocks and timing signals) is off when this function is called.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hKhj!ubh)}(hXThe adjusted_mode parameter is the mode output by the CRTC for the first bridge in the chain. It can be different from the mode parameter that contains the desired mode for the connector at the end of the bridges chain, for instance when the first bridge in the chain performs scaling. The adjusted mode is mostly useful for the first bridge in the chain and is likely irrelevant for the other bridges.h]hXThe adjusted_mode parameter is the mode output by the CRTC for the first bridge in the chain. It can be different from the mode parameter that contains the desired mode for the connector at the end of the bridges chain, for instance when the first bridge in the chain performs scaling. The adjusted mode is mostly useful for the first bridge in the chain and is likely irrelevant for the other bridges.}(hj$"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj!ubh)}(hsFor atomic drivers the adjusted_mode is the mode stored in :c:type:`drm_crtc_state.adjusted_mode `.h](h;For atomic drivers the adjusted_mode is the mode stored in }(hj3"hhhNhNubh)}(h7:c:type:`drm_crtc_state.adjusted_mode `h]jz)}(hj="h]hdrm_crtc_state.adjusted_mode}(hj?"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj3"ubh.}(hj3"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZ"hKhj!ubh)}(hNOTE:h]hNOTE:}(hje"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj!ubh)}(hThis is deprecated, do not use! New drivers shall set their mode in the :c:type:`drm_bridge_funcs.atomic_enable ` operation.h](hHThis is deprecated, do not use! New drivers shall set their mode in the }(hjt"hhhNhNubh)}(h;:c:type:`drm_bridge_funcs.atomic_enable `h]jz)}(hj~"h]hdrm_bridge_funcs.atomic_enable}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj|"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjt"ubh operation.}(hjt"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hKhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hKhjubjn)}(hX``pre_enable`` This callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called before that bridge's **pre_enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right before the encoder's :c:type:`drm_encoder_helper_funcs.enable `, :c:type:`drm_encoder_helper_funcs.commit ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called. The **pre_enable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_pre_enable `. h](jt)}(h``pre_enable``h]jz)}(hj"h]h pre_enable}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj"ubj)}(hhh](h)}(hXThis callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called before that bridge's **pre_enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right before the encoder's :c:type:`drm_encoder_helper_funcs.enable `, :c:type:`drm_encoder_helper_funcs.commit ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook.h](hThis callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it’s called before that bridge’s }(hj"hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubh) function. If the preceding element is a }(hj"hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj"h]h drm_encoder}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj"ubh, it’s called right before the encoder’s }(hj"hhhNhNubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]jz)}(hj#h]hdrm_encoder_helper_funcs.enable}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj #hKhj"ubh, }(hj"hhhNhNubh)}(hD:c:type:`drm_encoder_helper_funcs.commit `h]jz)}(hj4#h]hdrm_encoder_helper_funcs.commit}(hj6#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj #hKhj"ubh or }(hj"hhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hjW#h]hdrm_encoder_helper_funcs.dpms}(hjY#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjU#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj #hKhj"ubh hook.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj #hKhj"ubh)}(hThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called.h]hThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called.}(hj~#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj"ubh)}(h(The **pre_enable** callback is optional.h](hThe }(hj#hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubh callback is optional.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj"ubh)}(hNOTE:h]hNOTE:}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj"ubh)}(hvThis is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_pre_enable `.h](h6This is deprecated, do not use! New drivers shall use }(hj#hhhNhNubh)}(h?:c:type:`drm_bridge_funcs.atomic_pre_enable `h]jz)}(hj#h]h"drm_bridge_funcs.atomic_pre_enable}(hj#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjubjn)}(hX``enable`` This callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called after that bridge's **enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.enable `, :c:type:`drm_encoder_helper_funcs.commit ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one. The **enable** callback is optional. NOTE: This is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_enable `. h](jt)}(h ``enable``h]jz)}(hj$h]henable}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj#ubj)}(hhh](h)}(hX This callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called after that bridge's **enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.enable `, :c:type:`drm_encoder_helper_funcs.commit ` or :c:type:`drm_encoder_helper_funcs.dpms ` hook.h](hThis callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it’s called after that bridge’s }(hj$hhhNhNubj%)}(h **enable**h]henable}(hj"$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubh) function. If the preceding element is a }(hj$hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj6$h]h drm_encoder}(hj8$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM hj$ubh+ it’s called right after the encoder’s }(hj$hhhNhNubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]jz)}(hjZ$h]hdrm_encoder_helper_funcs.enable}(hj\$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjX$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjS$hM hj$ubh, }(hj$hhhNhNubh)}(hD:c:type:`drm_encoder_helper_funcs.commit `h]jz)}(hj}$h]hdrm_encoder_helper_funcs.commit}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjS$hM hj$ubh or }(hj$hhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hj$h]hdrm_encoder_helper_funcs.dpms}(hj$hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjS$hM hj$ubh hook.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS$hM hj$ubh)}(hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one.h]hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj$ubh)}(h$The **enable** callback is optional.h](hThe }(hj$hhhNhNubj%)}(h **enable**h]henable}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubh callback is optional.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj$ubh)}(hNOTE:h]hNOTE:}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj$ubh)}(hrThis is deprecated, do not use! New drivers shall use :c:type:`drm_bridge_funcs.atomic_enable `.h](h6This is deprecated, do not use! New drivers shall use }(hj%hhhNhNubh)}(h;:c:type:`drm_bridge_funcs.atomic_enable `h]jz)}(hj%h]hdrm_bridge_funcs.atomic_enable}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-%hMhj$ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhjubjn)}(hX``atomic_pre_enable`` This callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called before that bridge's **atomic_pre_enable** or **pre_enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right before the encoder's :c:type:`drm_encoder_helper_funcs.atomic_enable ` hook. The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called. The **atomic_pre_enable** callback is optional. h](jt)}(h``atomic_pre_enable``h]jz)}(hjJ%h]hatomic_pre_enable}(hjL%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH%ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM0hjD%ubj)}(hhh](h)}(hXThis callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called before that bridge's **atomic_pre_enable** or **pre_enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right before the encoder's :c:type:`drm_encoder_helper_funcs.atomic_enable ` hook.h](hThis callback should enable the bridge. It is called right before the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it’s called before that bridge’s }(hjc%hhhNhNubj%)}(h**atomic_pre_enable**h]hatomic_pre_enable}(hjk%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjc%ubh or }(hjc%hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj}%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjc%ubh) function. If the preceding element is a }(hjc%hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj%h]h drm_encoder}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM$hjc%ubh, it’s called right before the encoder’s }(hjc%hhhNhNubh)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]jz)}(hj%h]h&drm_encoder_helper_funcs.atomic_enable}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj%hM$hjc%ubh hook.}(hjc%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hM$hj`%ubh)}(hThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called.h]hThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when this callback is called. The bridge must not enable the display link feeding the next bridge in the chain (if there is one) when this callback is called.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM+hj`%ubh)}(h/The **atomic_pre_enable** callback is optional.h](hThe }(hj%hhhNhNubj%)}(h**atomic_pre_enable**h]hatomic_pre_enable}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubh callback is optional.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_%hM0hj`%ubeh}(h]h ]h"]h$]h&]uh1jhjD%ubeh}(h]h ]h"]h$]h&]uh1jmhj_%hM0hjubjn)}(hX``atomic_enable`` This callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called after that bridge's **atomic_enable** or **enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.atomic_enable ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one. The **atomic_enable** callback is optional. h](jt)}(h``atomic_enable``h]jz)}(hj&h]h atomic_enable}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMDhj&ubj)}(hhh](h)}(hXThis callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it's called after that bridge's **atomic_enable** or **enable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.atomic_enable ` hook.h](hThis callback should enable the bridge. It is called right after the preceding element in the display pipe is enabled. If the preceding element is a bridge this means it’s called after that bridge’s }(hj6&hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj>&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6&ubh or }(hj6&hhhNhNubj%)}(h **enable**h]henable}(hjP&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6&ubh) function. If the preceding element is a }(hj6&hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjd&h]h drm_encoder}(hjf&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjb&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM8hj6&ubh+ it’s called right after the encoder’s }(hj6&hhhNhNubh)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]jz)}(hj&h]h&drm_encoder_helper_funcs.atomic_enable}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj&hM8hj6&ubh hook.}(hj6&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hM8hj3&ubh)}(hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one.h]hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is running when this callback is called. This callback must enable the display link feeding the next bridge in the chain if there is one.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM?hj3&ubh)}(h+The **atomic_enable** callback is optional.h](hThe }(hj&hhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubh callback is optional.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2&hMDhj3&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj2&hMDhjubjn)}(hXa``atomic_disable`` This callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called before that bridge's **atomic_disable** or **disable** vfunc. If the preceding element is a :c:type:`drm_encoder` it's called right before the :c:type:`drm_encoder_helper_funcs.atomic_disable ` hook. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. The **atomic_disable** callback is optional. h](jt)}(h``atomic_disable``h]jz)}(hj&h]hatomic_disable}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMUhj&ubj)}(hhh](h)}(hXThis callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called before that bridge's **atomic_disable** or **disable** vfunc. If the preceding element is a :c:type:`drm_encoder` it's called right before the :c:type:`drm_encoder_helper_funcs.atomic_disable ` hook.h](hThis callback should disable the bridge. It is called right before the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it’s called before that bridge’s }(hj 'hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj 'ubh or }(hj 'hhhNhNubj%)}(h **disable**h]hdisable}(hj#'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj 'ubh& vfunc. If the preceding element is a }(hj 'hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj7'h]h drm_encoder}(hj9'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj5'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMKhj 'ubh it’s called right before the }(hj 'hhhNhNubh)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]jz)}(hj['h]h'drm_encoder_helper_funcs.atomic_disable}(hj]'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjY'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjT'hMKhj 'ubh hook.}(hj 'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjT'hMKhj'ubh)}(hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called.h]hThe bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMRhj'ubh)}(h,The **atomic_disable** callback is optional.h](hThe }(hj'hhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubh callback is optional.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hMUhj'ubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMUhjubjn)}(hX``atomic_post_disable`` This callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called after that bridge's **atomic_post_disable** or **post_disable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.atomic_disable ` hook. The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called. The **atomic_post_disable** callback is optional. h](jt)}(h``atomic_post_disable``h]jz)}(hj'h]hatomic_post_disable}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhhj'ubj)}(hhh](h)}(hXThis callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it's called after that bridge's **atomic_post_disable** or **post_disable** function. If the preceding element is a :c:type:`drm_encoder` it's called right after the encoder's :c:type:`drm_encoder_helper_funcs.atomic_disable ` hook.h](hThis callback should disable the bridge. It is called right after the preceding element in the display pipe is disabled. If the preceding element is a bridge this means it’s called after that bridge’s }(hj'hhhNhNubj%)}(h**atomic_post_disable**h]hatomic_post_disable}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubh or }(hj'hhhNhNubj%)}(h**post_disable**h]h post_disable}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubh) function. If the preceding element is a }(hj'hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj (h]h drm_encoder}(hj (hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM]hj'ubh+ it’s called right after the encoder’s }(hj'hhhNhNubh)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]jz)}(hj.(h]h'drm_encoder_helper_funcs.atomic_disable}(hj0(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj'(hM]hj'ubh hook.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'(hM]hj'ubh)}(hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called.h]hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding it is no longer running when this callback is called.}(hjU(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMdhj'ubh)}(h1The **atomic_post_disable** callback is optional.h](hThe }(hjd(hhhNhNubj%)}(h**atomic_post_disable**h]hatomic_post_disable}(hjl(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjd(ubh callback is optional.}(hjd(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hMhhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhhjubjn)}(hX``atomic_duplicate_state`` Duplicate the current bridge state object (which is guaranteed to be non-NULL). The atomic_duplicate_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_duplicate_state() helper function shall be used to implement this hook. RETURNS: A valid drm_bridge_state object or NULL if the allocation fails. h](jt)}(h``atomic_duplicate_state``h]jz)}(hj(h]hatomic_duplicate_state}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMzhj(ubj)}(hhh](h)}(hODuplicate the current bridge state object (which is guaranteed to be non-NULL).h]hODuplicate the current bridge state object (which is guaranteed to be non-NULL).}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMphj(ubh)}(hX(The atomic_duplicate_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_duplicate_state() helper function shall be used to implement this hook.h](hThe atomic_duplicate_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don’t subclass }(hj(hhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hj(h]hdrm_bridge_state}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMshj(ubhf, the drm_atomic_helper_bridge_duplicate_state() helper function shall be used to implement this hook.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hMshj(ubh)}(hIRETURNS: A valid drm_bridge_state object or NULL if the allocation fails.h]hIRETURNS: A valid drm_bridge_state object or NULL if the allocation fails.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMyhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMzhjubjn)}(hX``atomic_destroy_state`` Destroy a bridge state object previously allocated by :c:type:`drm_bridge_funcs.atomic_duplicate_state\(\) `. The atomic_destroy_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_destroy_state() helper function shall be used to implement this hook. h](jt)}(h``atomic_destroy_state``h]jz)}(hj)h]hatomic_destroy_state}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj )ubj)}(hhh](h)}(hDestroy a bridge state object previously allocated by :c:type:`drm_bridge_funcs.atomic_duplicate_state\(\) `.h](h6Destroy a bridge state object previously allocated by }(hj*)hhhNhNubh)}(hH:c:type:`drm_bridge_funcs.atomic_duplicate_state\(\) `h]jz)}(hj4)h]h)drm_bridge_funcs.atomic_duplicate_state()}(hj6)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj*)ubh.}(hj*)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQ)hMhj')ubh)}(hX$The atomic_destroy_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_destroy_state() helper function shall be used to implement this hook.h](hThe atomic_destroy_state hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don’t subclass }(hj\)hhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hjf)h]hdrm_bridge_state}(hjh)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjd)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj\)ubhd, the drm_atomic_helper_bridge_destroy_state() helper function shall be used to implement this hook.}(hj\)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhj')ubeh}(h]h ]h"]h$]h&]uh1jhj )ubeh}(h]h ]h"]h$]h&]uh1jmhj&)hMhjubjn)}(hXi``atomic_get_output_bus_fmts`` Return the supported bus formats on the output end of a bridge. The returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_output_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works). This method is only called on the last element of the bridge chain as part of the bus format negotiation process that happens in :c:type:`drm_atomic_bridge_chain_select_bus_fmts`(). This method is optional. When not implemented, the core will fall back to :c:type:`drm_connector.display_info `.bus_formats[0] if :c:type:`drm_connector.display_info `.num_bus_formats > 0, or to MEDIA_BUS_FMT_FIXED otherwise. h](jt)}(h``atomic_get_output_bus_fmts``h]jz)}(hj)h]hatomic_get_output_bus_fmts}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj)ubj)}(hhh](h)}(hXReturn the supported bus formats on the output end of a bridge. The returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_output_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works).h]hXReturn the supported bus formats on the output end of a bridge. The returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_output_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works).}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj)ubh)}(hXThis method is only called on the last element of the bridge chain as part of the bus format negotiation process that happens in :c:type:`drm_atomic_bridge_chain_select_bus_fmts`(). This method is optional. When not implemented, the core will fall back to :c:type:`drm_connector.display_info `.bus_formats[0] if :c:type:`drm_connector.display_info `.num_bus_formats > 0, or to MEDIA_BUS_FMT_FIXED otherwise.h](hThis method is only called on the last element of the bridge chain as part of the bus format negotiation process that happens in }(hj)hhhNhNubh)}(h:c:type:`drm_atomic_bridge_chain_select_bus_fmts`(). This method is optional. When not implemented, the core will fall back to :c:type:`drm_connector.display_info `h]jz)}(hj)h]hdrm_atomic_bridge_chain_select_bus_fmts`(). This method is optional. When not implemented, the core will fall back to :c:type:`drm_connector.display_info}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMh"j)ubh.bus_formats[0] if }(hj)hhhNhNubh)}(h4:c:type:`drm_connector.display_info `h]jz)}(hj)h]hdrm_connector.display_info}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj)hMhj)ubh:.num_bus_formats > 0, or to MEDIA_BUS_FMT_FIXED otherwise.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhj)hMhjubjn)}(hXL``atomic_get_input_bus_fmts`` Return the supported bus formats on the input end of a bridge for a specific output bus format. The returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_input_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works). When the format is not supported NULL should be returned and num_input_fmts should be set to 0. This method is called on all elements of the bridge chain as part of the bus format negotiation process that happens in drm_atomic_bridge_chain_select_bus_fmts(). This method is optional. When not implemented, the core will bypass bus format negotiation on this element of the bridge without failing, and the previous element in the chain will be passed MEDIA_BUS_FMT_FIXED as its output bus format. Bridge drivers that need to support being linked to bridges that are not supporting bus format negotiation should handle the output_fmt == MEDIA_BUS_FMT_FIXED case appropriately, by selecting a sensible default value or extracting this information from somewhere else (FW property, :c:type:`drm_display_mode`, :c:type:`drm_display_info`, ...) Note: Even if input format selection on the first bridge has no impact on the negotiation process (bus format negotiation stops once we reach the first element of the chain), drivers are expected to return accurate input formats as the input format may be used to configure the CRTC output appropriately. h](jt)}(h``atomic_get_input_bus_fmts``h]jz)}(hj/*h]hatomic_get_input_bus_fmts}(hj1*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-*ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj)*ubj)}(hhh](h)}(h_Return the supported bus formats on the input end of a bridge for a specific output bus format.h]h_Return the supported bus formats on the input end of a bridge for a specific output bus format.}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjE*ubh)}(hXThe returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_input_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works). When the format is not supported NULL should be returned and num_input_fmts should be set to 0.h]hXThe returned array must be allocated with kmalloc() and will be freed by the caller. If the allocation fails, NULL should be returned. num_input_fmts must be set to the returned array size. Formats listed in the returned array should be listed in decreasing preference order (the core will try all formats until it finds one that works). When the format is not supported NULL should be returned and num_input_fmts should be set to 0.}(hjW*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjE*ubh)}(hXThis method is called on all elements of the bridge chain as part of the bus format negotiation process that happens in drm_atomic_bridge_chain_select_bus_fmts(). This method is optional. When not implemented, the core will bypass bus format negotiation on this element of the bridge without failing, and the previous element in the chain will be passed MEDIA_BUS_FMT_FIXED as its output bus format.h]hXThis method is called on all elements of the bridge chain as part of the bus format negotiation process that happens in drm_atomic_bridge_chain_select_bus_fmts(). This method is optional. When not implemented, the core will bypass bus format negotiation on this element of the bridge without failing, and the previous element in the chain will be passed MEDIA_BUS_FMT_FIXED as its output bus format.}(hjf*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjE*ubh)}(hXVBridge drivers that need to support being linked to bridges that are not supporting bus format negotiation should handle the output_fmt == MEDIA_BUS_FMT_FIXED case appropriately, by selecting a sensible default value or extracting this information from somewhere else (FW property, :c:type:`drm_display_mode`, :c:type:`drm_display_info`, ...)h](hXBridge drivers that need to support being linked to bridges that are not supporting bus format negotiation should handle the output_fmt == MEDIA_BUS_FMT_FIXED case appropriately, by selecting a sensible default value or extracting this information from somewhere else (FW property, }(hju*hhhNhNubh)}(h:c:type:`drm_display_mode`h]jz)}(hj*h]hdrm_display_mode}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj}*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_modeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhju*ubh, }(hju*hhhNhNubh)}(h:c:type:`drm_display_info`h]jz)}(hj*h]hdrm_display_info}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hhj*hMhju*ubh, ...)}(hju*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hMhjE*ubh)}(hX0Note: Even if input format selection on the first bridge has no impact on the negotiation process (bus format negotiation stops once we reach the first element of the chain), drivers are expected to return accurate input formats as the input format may be used to configure the CRTC output appropriately.h]hX0Note: Even if input format selection on the first bridge has no impact on the negotiation process (bus format negotiation stops once we reach the first element of the chain), drivers are expected to return accurate input formats as the input format may be used to configure the CRTC output appropriately.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjE*ubeh}(h]h ]h"]h$]h&]uh1jhj)*ubeh}(h]h ]h"]h$]h&]uh1jmhjD*hMhjubjn)}(hXg``atomic_check`` This method is responsible for checking bridge state correctness. It can also check the state of the surrounding components in chain to make sure the whole pipeline can work properly. :c:type:`drm_bridge_funcs.atomic_check\(\) ` hooks are called in reverse order (from the last to the first bridge). This method is optional. :c:type:`drm_bridge_funcs.mode_fixup\(\) ` is not called when :c:type:`drm_bridge_funcs.atomic_check\(\) ` is implemented, so only one of them should be provided. If drivers need to tweak :c:type:`drm_bridge_state.input_bus_cfg `.flags or :c:type:`drm_bridge_state.output_bus_cfg `.flags it should happen in this function. By default the :c:type:`drm_bridge_state.output_bus_cfg `.flags field is set to the next bridge :c:type:`drm_bridge_state.input_bus_cfg `.flags value or :c:type:`drm_connector.display_info `.bus_flags if the bridge is the last element in the chain. RETURNS: zero if the check passed, a negative error code otherwise. h](jt)}(h``atomic_check``h]jz)}(hj*h]h atomic_check}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj*ubj)}(hhh](h)}(hThis method is responsible for checking bridge state correctness. It can also check the state of the surrounding components in chain to make sure the whole pipeline can work properly.h]hThis method is responsible for checking bridge state correctness. It can also check the state of the surrounding components in chain to make sure the whole pipeline can work properly.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj+ubh)}(h:c:type:`drm_bridge_funcs.atomic_check\(\) ` hooks are called in reverse order (from the last to the first bridge).h](h)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hj+h]hdrm_bridge_funcs.atomic_check()}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj+ubhG hooks are called in reverse order (from the last to the first bridge).}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6+hMhj+ubh)}(hThis method is optional. :c:type:`drm_bridge_funcs.mode_fixup\(\) ` is not called when :c:type:`drm_bridge_funcs.atomic_check\(\) ` is implemented, so only one of them should be provided.h](hThis method is optional. }(hjA+hhhNhNubh)}(h<:c:type:`drm_bridge_funcs.mode_fixup\(\) `h]jz)}(hjK+h]hdrm_bridge_funcs.mode_fixup()}(hjM+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjI+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjA+ubh is not called when }(hjA+hhhNhNubh)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hjo+h]hdrm_bridge_funcs.atomic_check()}(hjq+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjm+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjh+hMhjA+ubh8 is implemented, so only one of them should be provided.}(hjA+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjh+hMhj+ubh)}(hXIf drivers need to tweak :c:type:`drm_bridge_state.input_bus_cfg `.flags or :c:type:`drm_bridge_state.output_bus_cfg `.flags it should happen in this function. By default the :c:type:`drm_bridge_state.output_bus_cfg `.flags field is set to the next bridge :c:type:`drm_bridge_state.input_bus_cfg `.flags value or :c:type:`drm_connector.display_info `.bus_flags if the bridge is the last element in the chain.h](hIf drivers need to tweak }(hj+hhhNhNubh)}(h;:c:type:`drm_bridge_state.input_bus_cfg `h]jz)}(hj+h]hdrm_bridge_state.input_bus_cfg}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj+ubh .flags or }(hj+hhhNhNubh)}(h<:c:type:`drm_bridge_state.output_bus_cfg `h]jz)}(hj+h]hdrm_bridge_state.output_bus_cfg}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hhj+hMhj+ubh9.flags it should happen in this function. By default the }(hj+hhhNhNubh)}(h<:c:type:`drm_bridge_state.output_bus_cfg `h]jz)}(hj+h]hdrm_bridge_state.output_bus_cfg}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hhj+hMhj+ubh'.flags field is set to the next bridge }(hj+hhhNhNubh)}(h;:c:type:`drm_bridge_state.input_bus_cfg `h]jz)}(hj ,h]hdrm_bridge_state.input_bus_cfg}(hj ,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hhj+hMhj+ubh.flags value or }(hj+hhhNhNubh)}(h4:c:type:`drm_connector.display_info `h]jz)}(hj-,h]hdrm_connector.display_info}(hj/,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj+hMhj+ubh:.bus_flags if the bridge is the last element in the chain.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubh)}(hCRETURNS: zero if the check passed, a negative error code otherwise.h]hCRETURNS: zero if the check passed, a negative error code otherwise.}(hjT,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj+ubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhj+hMhjubjn)}(hX``atomic_reset`` Reset the bridge to a predefined state (or retrieve its current state) and return a :c:type:`drm_bridge_state` object matching this state. This function is called at attach time. The atomic_reset hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_reset() helper function shall be used to implement this hook. Note that the atomic_reset() semantics is not exactly matching the reset() semantics found on other components (connector, plane, ...). 1. The reset operation happens when the bridge is attached, not when drm_mode_config_reset() is called 2. It's meant to be used exclusively on bridges that have been converted to the ATOMIC API RETURNS: A valid drm_bridge_state object in case of success, an ERR_PTR() giving the reason of the failure otherwise. h](jt)}(h``atomic_reset``h]jz)}(hju,h]h atomic_reset}(hjw,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs,ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjo,ubj)}(hhh](h)}(hReset the bridge to a predefined state (or retrieve its current state) and return a :c:type:`drm_bridge_state` object matching this state. This function is called at attach time.h](hTReset the bridge to a predefined state (or retrieve its current state) and return a }(hj,hhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hj,h]hdrm_bridge_state}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj,ubhD object matching this state. This function is called at attach time.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubh)}(hXThe atomic_reset hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don't subclass :c:type:`drm_bridge_state`, the drm_atomic_helper_bridge_reset() helper function shall be used to implement this hook.h](hThe atomic_reset hook is mandatory if the bridge implements any of the atomic hooks, and should be left unassigned otherwise. For bridges that don’t subclass }(hj,hhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hj,h]hdrm_bridge_state}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj,ubh\, the drm_atomic_helper_bridge_reset() helper function shall be used to implement this hook.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubh)}(hNote that the atomic_reset() semantics is not exactly matching the reset() semantics found on other components (connector, plane, ...).h]hNote that the atomic_reset() semantics is not exactly matching the reset() semantics found on other components (connector, plane, ...).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj,ubjQH)}(hhh](h)}(hcThe reset operation happens when the bridge is attached, not when drm_mode_config_reset() is calledh]h)}(hcThe reset operation happens when the bridge is attached, not when drm_mode_config_reset() is calledh]hcThe reset operation happens when the bridge is attached, not when drm_mode_config_reset() is called}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj-ubah}(h]h ]h"]h$]h&]uh1hhj-ubh)}(hXIt's meant to be used exclusively on bridges that have been converted to the ATOMIC API h]h)}(hWIt's meant to be used exclusively on bridges that have been converted to the ATOMIC APIh]hYIt’s meant to be used exclusively on bridges that have been converted to the ATOMIC API}(hj!-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj-ubah}(h]h ]h"]h$]h&]uh1hhj-ubeh}(h]h ]h"]h$]h&]jMJjNJjOJhjPJjQJuh1jPHhj,ubh)}(huRETURNS: A valid drm_bridge_state object in case of success, an ERR_PTR() giving the reason of the failure otherwise.h]huRETURNS: A valid drm_bridge_state object in case of success, an ERR_PTR() giving the reason of the failure otherwise.}(hj<-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjo,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hMhjubjn)}(hX``detect`` Check if anything is attached to the bridge output. This callback is optional, if not implemented the bridge will be considered as always having a component attached to its output. Bridges that implement this callback shall set the DRM_BRIDGE_OP_DETECT flag in their :c:type:`drm_bridge->ops `. RETURNS: drm_connector_status indicating the bridge output status. h](jt)}(h ``detect``h]jz)}(hj]-h]hdetect}(hj_-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[-ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjW-ubj)}(hhh](h)}(h3Check if anything is attached to the bridge output.h]h3Check if anything is attached to the bridge output.}(hjv-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM hjs-ubh)}(hThis callback is optional, if not implemented the bridge will be considered as always having a component attached to its output. Bridges that implement this callback shall set the DRM_BRIDGE_OP_DETECT flag in their :c:type:`drm_bridge->ops `.h](hThis callback is optional, if not implemented the bridge will be considered as always having a component attached to its output. Bridges that implement this callback shall set the DRM_BRIDGE_OP_DETECT flag in their }(hj-hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj-h]hdrm_bridge->ops}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM hj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hM hjs-ubh)}(hRETURNS:h]hRETURNS:}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjs-ubh)}(h9drm_connector_status indicating the bridge output status.h]h9drm_connector_status indicating the bridge output status.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr-hMhjs-ubeh}(h]h ]h"]h$]h&]uh1jhjW-ubeh}(h]h ]h"]h$]h&]uh1jmhjr-hMhjubjn)}(hX``get_modes`` Fill all modes currently valid for the sink into the :c:type:`drm_connector` with drm_mode_probed_add(). The **get_modes** callback is mostly intended to support non-probeable displays such as many fixed panels. Bridges that support reading EDID shall leave **get_modes** unimplemented and implement the :c:type:`drm_bridge_funcs->edid_read ` callback instead. This callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_MODES flag in their :c:type:`drm_bridge->ops `. The connector parameter shall be used for the sole purpose of filling modes, and shall not be stored internally by bridge drivers for future usage. RETURNS: The number of modes added by calling drm_mode_probed_add(). h](jt)}(h ``get_modes``h]jz)}(hj-h]h get_modes}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM,hj-ubj)}(hhh](h)}(hhFill all modes currently valid for the sink into the :c:type:`drm_connector` with drm_mode_probed_add().h](h5Fill all modes currently valid for the sink into the }(hj-hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj .h]h drm_connector}(hj .hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj-ubh with drm_mode_probed_add().}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&.hMhj-ubh)}(hXThe **get_modes** callback is mostly intended to support non-probeable displays such as many fixed panels. Bridges that support reading EDID shall leave **get_modes** unimplemented and implement the :c:type:`drm_bridge_funcs->edid_read ` callback instead.h](hThe }(hj1.hhhNhNubj%)}(h **get_modes**h]h get_modes}(hj9.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1.ubh callback is mostly intended to support non-probeable displays such as many fixed panels. Bridges that support reading EDID shall leave }(hj1.hhhNhNubj%)}(h **get_modes**h]h get_modes}(hjK.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1.ubh! unimplemented and implement the }(hj1.hhhNhNubh)}(h8:c:type:`drm_bridge_funcs->edid_read `h]jz)}(hj_.h]hdrm_bridge_funcs->edid_read}(hja.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj].ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj1.ubh callback instead.}(hj1.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|.hMhj-ubh)}(hThis callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_MODES flag in their :c:type:`drm_bridge->ops `.h](heThis callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_MODES flag in their }(hj.hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj.h]hdrm_bridge->ops}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM#hj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hM#hj-ubh)}(hThe connector parameter shall be used for the sole purpose of filling modes, and shall not be stored internally by bridge drivers for future usage.h]hThe connector parameter shall be used for the sole purpose of filling modes, and shall not be stored internally by bridge drivers for future usage.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM&hj-ubh)}(hRETURNS:h]hRETURNS:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM*hj-ubh)}(h;The number of modes added by calling drm_mode_probed_add().h]h;The number of modes added by calling drm_mode_probed_add().}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM,hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj-hM,hjubjn)}(hX``edid_read`` Read the EDID data of the connected display. The **edid_read** callback is the preferred way of reporting mode information for a display connected to the bridge output. Bridges that support reading EDID shall implement this callback and leave the **get_modes** callback unimplemented. The caller of this operation shall first verify the output connection status and refrain from reading EDID from a disconnected output. This callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_EDID flag in their :c:type:`drm_bridge->ops `. The connector parameter shall be used for the sole purpose of EDID retrieval, and shall not be stored internally by bridge drivers for future usage. RETURNS: An edid structure newly allocated with drm_edid_alloc() or returned from drm_edid_read() family of functions on success, or NULL otherwise. The caller is responsible for freeing the returned edid structure with drm_edid_free(). h](jt)}(h ``edid_read``h]jz)}(hj.h]h edid_read}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMKhj.ubj)}(hhh](h)}(h,Read the EDID data of the connected display.h]h,Read the EDID data of the connected display.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM4hj /ubh)}(hThe **edid_read** callback is the preferred way of reporting mode information for a display connected to the bridge output. Bridges that support reading EDID shall implement this callback and leave the **get_modes** callback unimplemented.h](hThe }(hj/hhhNhNubj%)}(h **edid_read**h]h edid_read}(hj'/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubh callback is the preferred way of reporting mode information for a display connected to the bridge output. Bridges that support reading EDID shall implement this callback and leave the }(hj/hhhNhNubj%)}(h **get_modes**h]h get_modes}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubh callback unimplemented.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM6hj /ubh)}(hThe caller of this operation shall first verify the output connection status and refrain from reading EDID from a disconnected output.h]hThe caller of this operation shall first verify the output connection status and refrain from reading EDID from a disconnected output.}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM;hj /ubh)}(hThis callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_EDID flag in their :c:type:`drm_bridge->ops `.h](hdThis callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_EDID flag in their }(hja/hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjk/h]hdrm_bridge->ops}(hjm/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhji/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM?hja/ubh.}(hja/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hM?hj /ubh)}(hThe connector parameter shall be used for the sole purpose of EDID retrieval, and shall not be stored internally by bridge drivers for future usage.h]hThe connector parameter shall be used for the sole purpose of EDID retrieval, and shall not be stored internally by bridge drivers for future usage.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMBhj /ubh)}(hRETURNS:h]hRETURNS:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMFhj /ubh)}(hAn edid structure newly allocated with drm_edid_alloc() or returned from drm_edid_read() family of functions on success, or NULL otherwise. The caller is responsible for freeing the returned edid structure with drm_edid_free().h]hAn edid structure newly allocated with drm_edid_alloc() or returned from drm_edid_read() family of functions on success, or NULL otherwise. The caller is responsible for freeing the returned edid structure with drm_edid_free().}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMHhj /ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj /hMKhjubjn)}(hX``hpd_notify`` Notify the bridge of hot plug detection. This callback is optional, it may be implemented by bridges that need to be notified of display connection or disconnection for internal reasons. One use case is to reset the internal state of CEC controllers for HDMI bridges. h](jt)}(h``hpd_notify``h]jz)}(hj/h]h hpd_notify}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMXhj/ubj)}(hhh](h)}(h(Notify the bridge of hot plug detection.h]h(Notify the bridge of hot plug detection.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMShj/ubh)}(hThis callback is optional, it may be implemented by bridges that need to be notified of display connection or disconnection for internal reasons. One use case is to reset the internal state of CEC controllers for HDMI bridges.h]hThis callback is optional, it may be implemented by bridges that need to be notified of display connection or disconnection for internal reasons. One use case is to reset the internal state of CEC controllers for HDMI bridges.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMUhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hMXhjubjn)}(hX``hpd_enable`` Enable hot plug detection. From now on the bridge shall call drm_bridge_hpd_notify() each time a change is detected in the output connection status, until hot plug detection gets disabled with **hpd_disable**. This callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the **hpd_disable** callback and set the DRM_BRIDGE_OP_HPD flag in their :c:type:`drm_bridge->ops `. h](jt)}(h``hpd_enable``h]jz)}(hj0h]h hpd_enable}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhhj0ubj)}(hhh](h)}(hEnable hot plug detection. From now on the bridge shall call drm_bridge_hpd_notify() each time a change is detected in the output connection status, until hot plug detection gets disabled with **hpd_disable**.h](hEnable hot plug detection. From now on the bridge shall call drm_bridge_hpd_notify() each time a change is detected in the output connection status, until hot plug detection gets disabled with }(hj40hhhNhNubj%)}(h**hpd_disable**h]h hpd_disable}(hj<0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj40ubh.}(hj40hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM`hj10ubh)}(hXThis callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the **hpd_disable** callback and set the DRM_BRIDGE_OP_HPD flag in their :c:type:`drm_bridge->ops `.h](hThis callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the }(hjU0hhhNhNubj%)}(h**hpd_disable**h]h hpd_disable}(hj]0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjU0ubh6 callback and set the DRM_BRIDGE_OP_HPD flag in their }(hjU0hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjq0h]hdrm_bridge->ops}(hjs0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjo0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMehjU0ubh.}(hjU0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMehj10ubeh}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj00hMhhjubjn)}(hX``hpd_disable`` Disable hot plug detection. Once this function returns the bridge shall not call drm_bridge_hpd_notify() when a change in the output connection status occurs. This callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the **hpd_enable** callback and set the DRM_BRIDGE_OP_HPD flag in their :c:type:`drm_bridge->ops `. h](jt)}(h``hpd_disable``h]jz)}(hj0h]h hpd_disable}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMvhj0ubj)}(hhh](h)}(hDisable hot plug detection. Once this function returns the bridge shall not call drm_bridge_hpd_notify() when a change in the output connection status occurs.h]hDisable hot plug detection. Once this function returns the bridge shall not call drm_bridge_hpd_notify() when a change in the output connection status occurs.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMohj0ubh)}(hXThis callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the **hpd_enable** callback and set the DRM_BRIDGE_OP_HPD flag in their :c:type:`drm_bridge->ops `.h](hThis callback is optional and shall only be implemented by bridges that support hot-plug notification without polling. Bridges that implement it shall also implement the }(hj0hhhNhNubj%)}(h**hpd_enable**h]h hpd_enable}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubh6 callback and set the DRM_BRIDGE_OP_HPD flag in their }(hj0hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj0h]hdrm_bridge->ops}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMshj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj 1hMshj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hMvhjubjn)}(hX``hdmi_tmds_char_rate_valid`` Check whether a particular TMDS character rate is supported by the driver. This callback is optional and should only be implemented by the bridges that take part in the HDMI connector implementation. Bridges that implement it shall set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `. Returns: Either :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `. h](jt)}(h``hdmi_tmds_char_rate_valid``h]jz)}(hj)1h]hhdmi_tmds_char_rate_valid}(hj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'1ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj#1ubj)}(hhh](h)}(hJCheck whether a particular TMDS character rate is supported by the driver.h]hJCheck whether a particular TMDS character rate is supported by the driver.}(hjB1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM}hj?1ubh)}(hThis callback is optional and should only be implemented by the bridges that take part in the HDMI connector implementation. Bridges that implement it shall set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `.h](hThis callback is optional and should only be implemented by the bridges that take part in the HDMI connector implementation. Bridges that implement it shall set the DRM_BRIDGE_OP_HDMI flag in their }(hjQ1hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj[1h]hdrm_bridge->ops}(hj]1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjY1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjQ1ubh.}(hjQ1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjx1hMhj?1ubh)}(hReturns:h]hReturns:}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj?1ubh)}(hEither :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `.h](hEither }(hj1hhhNhNubh)}(h3:c:type:`drm_mode_status.MODE_OK `h]jz)}(hj1h]hdrm_mode_status.MODE_OK}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_statusuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj1ubh" or one of the failure reasons in }(hj1hhhNhNubh)}(h0:c:type:`enum drm_mode_status `h]jz)}(hj1h]henum drm_mode_status}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_statusuh1hhj1hMhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMhj?1ubeh}(h]h ]h"]h$]h&]uh1jhj#1ubeh}(h]h ]h"]h$]h&]uh1jmhj>1hMhjubjn)}(hX=``hdmi_clear_infoframe`` This callback clears the infoframes in the hardware during commit. It will be called multiple times, once for every disabled infoframe type. This callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `. h](jt)}(h``hdmi_clear_infoframe``h]jz)}(hj1h]hhdmi_clear_infoframe}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj1ubj)}(hhh](h)}(hThis callback clears the infoframes in the hardware during commit. It will be called multiple times, once for every disabled infoframe type.h]hThis callback clears the infoframes in the hardware during commit. It will be called multiple times, once for every disabled infoframe type.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj2ubh)}(hThis callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `.h](hnThis callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their }(hj!2hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj+2h]hdrm_bridge->ops}(hj-2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj!2ubh.}(hj!2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjH2hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhjubjn)}(hX"``hdmi_write_infoframe`` Program the infoframe into the hardware. It will be called multiple times, once for every updated infoframe type. This callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `. h](jt)}(h``hdmi_write_infoframe``h]jz)}(hje2h]hhdmi_write_infoframe}(hjg2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjc2ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj_2ubj)}(hhh](h)}(hqProgram the infoframe into the hardware. It will be called multiple times, once for every updated infoframe type.h]hqProgram the infoframe into the hardware. It will be called multiple times, once for every updated infoframe type.}(hj~2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj{2ubh)}(hThis callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their :c:type:`drm_bridge->ops `.h](hnThis callback is optional but it must be implemented by bridges that set the DRM_BRIDGE_OP_HDMI flag in their }(hj2hhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj2h]hdrm_bridge->ops}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hMhj{2ubeh}(h]h ]h"]h$]h&]uh1jhj_2ubeh}(h]h ]h"]h$]h&]uh1jmhjz2hMhjubjn)}(h``hdmi_audio_startup`` Called when ASoC starts an audio stream setup. The **hdmi_audio_startup\(\)** is optional. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_startup``h]jz)}(hj2h]hhdmi_audio_startup}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj2ubj)}(hhh](h)}(hZCalled when ASoC starts an audio stream setup. The **hdmi_audio_startup\(\)** is optional.h](h3Called when ASoC starts an audio stream setup. The }(hj2hhhNhNubj%)}(h**hdmi_audio_startup\(\)**h]hhdmi_audio_startup()}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh is optional.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj2ubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhjubjn)}(h``hdmi_audio_prepare`` Configures HDMI-encoder for audio stream. Can be called multiple times for each setup. Mandatory if HDMI audio is enabled in the bridge's configuration. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_prepare``h]jz)}(hj,3h]hhdmi_audio_prepare}(hj.3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*3ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj&3ubj)}(hhh](h)}(hConfigures HDMI-encoder for audio stream. Can be called multiple times for each setup. Mandatory if HDMI audio is enabled in the bridge's configuration.h]hConfigures HDMI-encoder for audio stream. Can be called multiple times for each setup. Mandatory if HDMI audio is enabled in the bridge’s configuration.}(hjE3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjB3ubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjT3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjB3ubeh}(h]h ]h"]h$]h&]uh1jhj&3ubeh}(h]h ]h"]h$]h&]uh1jmhjA3hMhjubjn)}(h``hdmi_audio_shutdown`` Shut down the audio stream. Mandatory if HDMI audio is enabled in the bridge's configuration. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_shutdown``h]jz)}(hju3h]hhdmi_audio_shutdown}(hjw3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs3ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjo3ubj)}(hhh](h)}(h]Shut down the audio stream. Mandatory if HDMI audio is enabled in the bridge's configuration.h]h_Shut down the audio stream. Mandatory if HDMI audio is enabled in the bridge’s configuration.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3ubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjo3ubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhjubjn)}(h``hdmi_audio_mute_stream`` Mute/unmute HDMI audio stream. The **hdmi_audio_mute_stream** callback is optional. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_mute_stream``h]jz)}(hj3h]hhdmi_audio_mute_stream}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3ubj)}(hhh](h)}(hSMute/unmute HDMI audio stream. The **hdmi_audio_mute_stream** callback is optional.h](h#Mute/unmute HDMI audio stream. The }(hj3hhhNhNubj%)}(h**hdmi_audio_mute_stream**h]hhdmi_audio_mute_stream}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubh callback is optional.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3ubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhjubjn)}(hH``debugfs_init`` Allows bridges to create bridge-specific debugfs files.h](jt)}(h``debugfs_init``h]jz)}(hj4h]h debugfs_init}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj4ubj)}(hhh]h)}(h7Allows bridges to create bridge-specific debugfs files.h]h7Allows bridges to create bridge-specific debugfs files.}(hj24hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj/4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhj.4hMhjubeh}(h]h ]h"]h$]h&]uh1jhhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_timings (C struct)c.drm_bridge_timingshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_bridge_timingsh]j)}(hstruct drm_bridge_timingsh](j)}(hjh]hstruct}(hjs4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo4hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo4hhhj4hMubj)}(hdrm_bridge_timingsh]j)}(hjm4h]hdrm_bridge_timings}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjo4hhhj4hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjk4hhhj4hMubah}(h]jf4ah ](jjeh"]h$]h&]jj)jhuh1jhj4hMhjh4hhubj)}(hhh]h)}(h!timing information for the bridgeh]h!timing information for the bridge}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhjh4hhhj4hMubeh}(h]h ](jstructeh"]h$]h&]jjjj4jj4jjjuh1jhhhjhNhNubj)}(hX2**Definition**:: struct drm_bridge_timings { u32 input_bus_flags; u32 setup_time_ps; u32 hold_time_ps; bool dual_link; }; **Members** ``input_bus_flags`` Tells what additional settings for the pixel data on the bus this bridge requires (like pixel signal polarity). See also :c:type:`drm_display_info->bus_flags `. ``setup_time_ps`` Defines the time in picoseconds the input data lines must be stable before the clock edge. ``hold_time_ps`` Defines the time in picoseconds taken for the bridge to sample the input signal after the clock edge. ``dual_link`` True if the bus operates in dual-link mode. The exact meaning is dependent on the bus type. For LVDS buses, this indicates that even- and odd-numbered pixels are received on separate links.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubh:}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj4ubj@)}(hxstruct drm_bridge_timings { u32 input_bus_flags; u32 setup_time_ps; u32 hold_time_ps; bool dual_link; };h]hxstruct drm_bridge_timings { u32 input_bus_flags; u32 setup_time_ps; u32 hold_time_ps; bool dual_link; };}hj4sbah}(h]h ]h"]h$]h&]jjuh1j?h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj4ubh)}(h **Members**h]j%)}(hj5h]hMembers}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj4ubji)}(hhh](jn)}(h``input_bus_flags`` Tells what additional settings for the pixel data on the bus this bridge requires (like pixel signal polarity). See also :c:type:`drm_display_info->bus_flags `. h](jt)}(h``input_bus_flags``h]jz)}(hj"5h]hinput_bus_flags}(hj$5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 5ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj5ubj)}(hhh]h)}(hTells what additional settings for the pixel data on the bus this bridge requires (like pixel signal polarity). See also :c:type:`drm_display_info->bus_flags `.h](hyTells what additional settings for the pixel data on the bus this bridge requires (like pixel signal polarity). See also }(hj;5hhhNhNubh)}(h8:c:type:`drm_display_info->bus_flags `h]jz)}(hjE5h]hdrm_display_info->bus_flags}(hjG5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjC5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj;5ubh.}(hj;5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb5hMhj85ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj75hMhj5ubjn)}(hm``setup_time_ps`` Defines the time in picoseconds the input data lines must be stable before the clock edge. h](jt)}(h``setup_time_ps``h]jz)}(hj5h]h setup_time_ps}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}5ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjy5ubj)}(hhh]h)}(hZDefines the time in picoseconds the input data lines must be stable before the clock edge.h]hZDefines the time in picoseconds the input data lines must be stable before the clock edge.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jhjy5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hMhj5ubjn)}(hw``hold_time_ps`` Defines the time in picoseconds taken for the bridge to sample the input signal after the clock edge. h](jt)}(h``hold_time_ps``h]jz)}(hj5h]h hold_time_ps}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj5ubj)}(hhh]h)}(heDefines the time in picoseconds taken for the bridge to sample the input signal after the clock edge.h]heDefines the time in picoseconds taken for the bridge to sample the input signal after the clock edge.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hMhj5ubjn)}(h``dual_link`` True if the bus operates in dual-link mode. The exact meaning is dependent on the bus type. For LVDS buses, this indicates that even- and odd-numbered pixels are received on separate links.h](jt)}(h ``dual_link``h]jz)}(hj5h]h dual_link}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj5ubj)}(hhh]h)}(hTrue if the bus operates in dual-link mode. The exact meaning is dependent on the bus type. For LVDS buses, this indicates that even- and odd-numbered pixels are received on separate links.h]hTrue if the bus operates in dual-link mode. The exact meaning is dependent on the bus type. For LVDS buses, this indicates that even- and odd-numbered pixels are received on separate links.}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj 6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj6hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_ops (C enum)c.drm_bridge_opshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_bridge_opsh]j)}(henum drm_bridge_opsh](j)}(hjl h]henum}(hjM6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI6hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hj[6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI6hhhjZ6hMubj)}(hdrm_bridge_opsh]j)}(hjG6h]hdrm_bridge_ops}(hjm6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjI6hhhjZ6hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjE6hhhjZ6hMubah}(h]j@6ah ](jjeh"]h$]h&]jj)jhuh1jhjZ6hMhjB6hhubj)}(hhh]h)}(h-Bitmask of operations supported by the bridgeh]h-Bitmask of operations supported by the bridge}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM hj6hhubah}(h]h ]h"]h$]h&]uh1jhjB6hhhjZ6hMubeh}(h]h ](jenumeh"]h$]h&]jjjj6jj6jjjuh1jhhhjhNhNubj)}(hX**Constants** ``DRM_BRIDGE_OP_DETECT`` The bridge can detect displays connected to its output. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->detect ` callback. ``DRM_BRIDGE_OP_EDID`` The bridge can retrieve the EDID of the display connected to its output. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->edid_read ` callback. ``DRM_BRIDGE_OP_HPD`` The bridge can detect hot-plug and hot-unplug without requiring polling. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->hpd_enable ` and :c:type:`drm_bridge_funcs->hpd_disable ` callbacks if they support enabling and disabling hot-plug detection dynamically. ``DRM_BRIDGE_OP_MODES`` The bridge can retrieve the modes supported by the display at its output. This does not include reading EDID which is separately covered by **DRM_BRIDGE_OP_EDID**. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->get_modes ` callback. ``DRM_BRIDGE_OP_HDMI`` The bridge provides HDMI connector operations, including infoframes support. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->write_infoframe ` callback. Note: currently there can be at most one bridge in a chain that sets this bit. This is to simplify corresponding glue code in connector drivers.h](h)}(h **Constants**h]j%)}(hj6h]h Constants}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM hj6ubji)}(hhh](jn)}(h``DRM_BRIDGE_OP_DETECT`` The bridge can detect displays connected to its output. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->detect ` callback. h](jt)}(h``DRM_BRIDGE_OP_DETECT``h]jz)}(hj6h]hDRM_BRIDGE_OP_DETECT}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj6ubj)}(hhh]h)}(hThe bridge can detect displays connected to its output. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->detect ` callback.h](hgThe bridge can detect displays connected to its output. Bridges that set this flag shall implement the }(hj6hhhNhNubh)}(h5:c:type:`drm_bridge_funcs->detect `h]jz)}(hj6h]hdrm_bridge_funcs->detect}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj6ubh callback.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhj6hMhj6ubjn)}(h``DRM_BRIDGE_OP_EDID`` The bridge can retrieve the EDID of the display connected to its output. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->edid_read ` callback. h](jt)}(h``DRM_BRIDGE_OP_EDID``h]jz)}(hj-7h]hDRM_BRIDGE_OP_EDID}(hj/7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+7ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj'7ubj)}(hhh]h)}(hThe bridge can retrieve the EDID of the display connected to its output. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->edid_read ` callback.h](hxThe bridge can retrieve the EDID of the display connected to its output. Bridges that set this flag shall implement the }(hjF7hhhNhNubh)}(h8:c:type:`drm_bridge_funcs->edid_read `h]jz)}(hjP7h]hdrm_bridge_funcs->edid_read}(hjR7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjN7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjF7ubh callback.}(hjF7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjm7hMhjC7ubah}(h]h ]h"]h$]h&]uh1jhj'7ubeh}(h]h ]h"]h$]h&]uh1jmhjB7hMhj6ubjn)}(hXX``DRM_BRIDGE_OP_HPD`` The bridge can detect hot-plug and hot-unplug without requiring polling. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->hpd_enable ` and :c:type:`drm_bridge_funcs->hpd_disable ` callbacks if they support enabling and disabling hot-plug detection dynamically. h](jt)}(h``DRM_BRIDGE_OP_HPD``h]jz)}(hj7h]hDRM_BRIDGE_OP_HPD}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj7ubj)}(hhh]h)}(hXAThe bridge can detect hot-plug and hot-unplug without requiring polling. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->hpd_enable ` and :c:type:`drm_bridge_funcs->hpd_disable ` callbacks if they support enabling and disabling hot-plug detection dynamically.h](hxThe bridge can detect hot-plug and hot-unplug without requiring polling. Bridges that set this flag shall implement the }(hj7hhhNhNubh)}(h9:c:type:`drm_bridge_funcs->hpd_enable `h]jz)}(hj7h]hdrm_bridge_funcs->hpd_enable}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj7ubh and }(hj7hhhNhNubh)}(h::c:type:`drm_bridge_funcs->hpd_disable `h]jz)}(hj7h]hdrm_bridge_funcs->hpd_disable}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj7hMhj7ubhQ callbacks if they support enabling and disabling hot-plug detection dynamically.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhj6ubjn)}(hX.``DRM_BRIDGE_OP_MODES`` The bridge can retrieve the modes supported by the display at its output. This does not include reading EDID which is separately covered by **DRM_BRIDGE_OP_EDID**. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->get_modes ` callback. h](jt)}(h``DRM_BRIDGE_OP_MODES``h]jz)}(hj 8h]hDRM_BRIDGE_OP_MODES}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM$hj8ubj)}(hhh]h)}(hXThe bridge can retrieve the modes supported by the display at its output. This does not include reading EDID which is separately covered by **DRM_BRIDGE_OP_EDID**. Bridges that set this flag shall implement the :c:type:`drm_bridge_funcs->get_modes ` callback.h](hThe bridge can retrieve the modes supported by the display at its output. This does not include reading EDID which is separately covered by }(hj#8hhhNhNubj%)}(h**DRM_BRIDGE_OP_EDID**h]hDRM_BRIDGE_OP_EDID}(hj+8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#8ubh1. Bridges that set this flag shall implement the }(hj#8hhhNhNubh)}(h8:c:type:`drm_bridge_funcs->get_modes `h]jz)}(hj?8h]hdrm_bridge_funcs->get_modes}(hjA8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj=8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM!hj#8ubh callback.}(hj#8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\8hM!hj 8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj8hM$hj6ubjn)}(hXl``DRM_BRIDGE_OP_HDMI`` The bridge provides HDMI connector operations, including infoframes support. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->write_infoframe ` callback. Note: currently there can be at most one bridge in a chain that sets this bit. This is to simplify corresponding glue code in connector drivers.h](jt)}(h``DRM_BRIDGE_OP_HDMI``h]jz)}(hjy8h]hDRM_BRIDGE_OP_HDMI}(hj{8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjw8ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM,hjs8ubj)}(hhh](h)}(hThe bridge provides HDMI connector operations, including infoframes support. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->write_infoframe ` callback.h](h{The bridge provides HDMI connector operations, including infoframes support. Bridges that set this flag must implement the }(hj8hhhNhNubh)}(h>:c:type:`drm_bridge_funcs->write_infoframe `h]jz)}(hj8h]h!drm_bridge_funcs->write_infoframe}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM'hj8ubh callback.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hM'hj8ubh)}(hNote: currently there can be at most one bridge in a chain that sets this bit. This is to simplify corresponding glue code in connector drivers.h]hNote: currently there can be at most one bridge in a chain that sets this bit. This is to simplify corresponding glue code in connector drivers.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM+hj8ubeh}(h]h ]h"]h$]h&]uh1jhjs8ubeh}(h]h ]h"]h$]h&]uh1jmhj8hM,hj6ubeh}(h]h ]h"]h$]h&]uh1jhhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge (C struct) c.drm_bridgehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_bridgeh]j)}(hstruct drm_bridgeh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM3ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hM3ubj)}(h drm_bridgeh]j)}(hj8h]h drm_bridge}(hj%9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhj9hM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj9hM3ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj9hM3hj8hhubj)}(hhh]h)}(h$central DRM bridge control structureh]h$central DRM bridge control structure}(hjG9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM4hjD9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj9hM3ubeh}(h]h ](jstructeh"]h$]h&]jjjj_9jj_9jjjuh1jhhhjhNhNubj)}(hX **Definition**:: struct drm_bridge { struct drm_private_obj base; struct drm_device *dev; struct drm_encoder *encoder; struct list_head chain_node; struct device_node *of_node; struct list_head list; const struct drm_bridge_timings *timings; const struct drm_bridge_funcs *funcs; void *driver_private; enum drm_bridge_ops ops; int type; bool interlace_allowed; bool ycbcr_420_allowed; bool pre_enable_prev_first; struct i2c_adapter *ddc; struct mutex hpd_mutex; void (*hpd_cb)(void *data, enum drm_connector_status status); void *hpd_data; const char *vendor; const char *product; unsigned int supported_formats; unsigned int max_bpc; struct device *hdmi_audio_dev; int hdmi_audio_max_i2s_playback_channels; unsigned int hdmi_audio_spdif_playback : 1; int hdmi_audio_dai_port; }; **Members** ``base`` inherit from :c:type:`drm_private_object` ``dev`` DRM device this bridge belongs to ``encoder`` encoder to which this bridge is connected ``chain_node`` used to form a bridge chain ``of_node`` device node pointer to the bridge ``list`` to keep track of all added bridges ``timings`` the timing specification for the bridge, if any (may be NULL) ``funcs`` control functions ``driver_private`` pointer to the bridge driver's internal context ``ops`` bitmask of operations supported by the bridge ``type`` Type of the connection at the bridge output (DRM_MODE_CONNECTOR_*). For bridges at the end of this chain this identifies the type of connected display. ``interlace_allowed`` Indicate that the bridge can handle interlaced modes. ``ycbcr_420_allowed`` Indicate that the bridge can handle YCbCr 420 output. ``pre_enable_prev_first`` The bridge requires that the prev bridge **pre_enable** function is called before its **pre_enable**, and conversely for post_disable. This is most frequently a requirement for DSI devices which need the host to be initialised before the peripheral. ``ddc`` Associated I2C adapter for DDC access, if any. ``hpd_mutex`` Protects the **hpd_cb** and **hpd_data** fields. ``hpd_cb`` Hot plug detection callback, registered with drm_bridge_hpd_enable(). ``hpd_data`` Private data passed to the Hot plug detection callback **hpd_cb**. ``vendor`` Vendor of the product to be used for the SPD InfoFrame generation. This is required if **DRM_BRIDGE_OP_HDMI** is set. ``product`` Name of the product to be used for the SPD InfoFrame generation. This is required if **DRM_BRIDGE_OP_HDMI** is set. ``supported_formats`` Bitmask of **hdmi_colorspace** listing supported output formats. This is only relevant if **DRM_BRIDGE_OP_HDMI** is set. ``max_bpc`` Maximum bits per char the HDMI bridge supports. Allowed values are 8, 10 and 12. This is only relevant if **DRM_BRIDGE_OP_HDMI** is set. ``hdmi_audio_dev`` device to be used as a parent for the HDMI Codec ``hdmi_audio_max_i2s_playback_channels`` maximum number of playback I2S channels for the HDMI codec ``hdmi_audio_spdif_playback`` set if HDMI codec has S/PDIF playback port ``hdmi_audio_dai_port`` sound DAI port, -1 if it is not enabledh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjk9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjg9ubh:}(hjg9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM8hjc9ubj@)}(hXbstruct drm_bridge { struct drm_private_obj base; struct drm_device *dev; struct drm_encoder *encoder; struct list_head chain_node; struct device_node *of_node; struct list_head list; const struct drm_bridge_timings *timings; const struct drm_bridge_funcs *funcs; void *driver_private; enum drm_bridge_ops ops; int type; bool interlace_allowed; bool ycbcr_420_allowed; bool pre_enable_prev_first; struct i2c_adapter *ddc; struct mutex hpd_mutex; void (*hpd_cb)(void *data, enum drm_connector_status status); void *hpd_data; const char *vendor; const char *product; unsigned int supported_formats; unsigned int max_bpc; struct device *hdmi_audio_dev; int hdmi_audio_max_i2s_playback_channels; unsigned int hdmi_audio_spdif_playback : 1; int hdmi_audio_dai_port; };h]hXbstruct drm_bridge { struct drm_private_obj base; struct drm_device *dev; struct drm_encoder *encoder; struct list_head chain_node; struct device_node *of_node; struct list_head list; const struct drm_bridge_timings *timings; const struct drm_bridge_funcs *funcs; void *driver_private; enum drm_bridge_ops ops; int type; bool interlace_allowed; bool ycbcr_420_allowed; bool pre_enable_prev_first; struct i2c_adapter *ddc; struct mutex hpd_mutex; void (*hpd_cb)(void *data, enum drm_connector_status status); void *hpd_data; const char *vendor; const char *product; unsigned int supported_formats; unsigned int max_bpc; struct device *hdmi_audio_dev; int hdmi_audio_max_i2s_playback_channels; unsigned int hdmi_audio_spdif_playback : 1; int hdmi_audio_dai_port; };}hj9sbah}(h]h ]h"]h$]h&]jjuh1j?h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM:hjc9ubh)}(h **Members**h]j%)}(hj9h]hMembers}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMWhjc9ubji)}(hhh](jn)}(h3``base`` inherit from :c:type:`drm_private_object` h](jt)}(h``base``h]jz)}(hj9h]hbase}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM7hj9ubj)}(hhh]h)}(h)inherit from :c:type:`drm_private_object`h](h inherit from }(hj9hhhNhNubh)}(h:c:type:`drm_private_object`h]jz)}(hj9h]hdrm_private_object}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_private_objectuh1hhj9hM7hj9ubeh}(h]h ]h"]h$]h&]uh1hhj9hM7hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhj9hM7hj9ubjn)}(h*``dev`` DRM device this bridge belongs to h](jt)}(h``dev``h]jz)}(hj :h]hdev}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj :ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj:ubj)}(hhh]h)}(h!DRM device this bridge belongs toh]h!DRM device this bridge belongs to}(hj%:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!:hKhj":ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj!:hKhj9ubjn)}(h6``encoder`` encoder to which this bridge is connected h](jt)}(h ``encoder``h]jz)}(hjE:h]hencoder}(hjG:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC:ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj?:ubj)}(hhh]h)}(h)encoder to which this bridge is connectedh]h)encoder to which this bridge is connected}(hj^:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ:hKhj[:ubah}(h]h ]h"]h$]h&]uh1jhj?:ubeh}(h]h ]h"]h$]h&]uh1jmhjZ:hKhj9ubjn)}(h+``chain_node`` used to form a bridge chain h](jt)}(h``chain_node``h]jz)}(hj~:h]h chain_node}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|:ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjx:ubj)}(hhh]h)}(hused to form a bridge chainh]hused to form a bridge chain}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1jhjx:ubeh}(h]h ]h"]h$]h&]uh1jmhj:hKhj9ubjn)}(h.``of_node`` device node pointer to the bridge h](jt)}(h ``of_node``h]jz)}(hj:h]hof_node}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj:ubj)}(hhh]h)}(h!device node pointer to the bridgeh]h!device node pointer to the bridge}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj:hKhj9ubjn)}(h,``list`` to keep track of all added bridges h](jt)}(h``list``h]jz)}(hj:h]hlist}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj:ubj)}(hhh]h)}(h"to keep track of all added bridgesh]h"to keep track of all added bridges}(hj ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKhj9ubjn)}(hJ``timings`` the timing specification for the bridge, if any (may be NULL) h](jt)}(h ``timings``h]jz)}(hj);h]htimings}(hj+;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj';ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMEhj#;ubj)}(hhh]h)}(h=the timing specification for the bridge, if any (may be NULL)h]h=the timing specification for the bridge, if any (may be NULL)}(hjB;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>;hMEhj?;ubah}(h]h ]h"]h$]h&]uh1jhj#;ubeh}(h]h ]h"]h$]h&]uh1jmhj>;hMEhj9ubjn)}(h``funcs`` control functions h](jt)}(h ``funcs``h]jz)}(hjb;h]hfuncs}(hjd;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`;ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj\;ubj)}(hhh]h)}(hcontrol functionsh]hcontrol functions}(hj{;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw;hKhjx;ubah}(h]h ]h"]h$]h&]uh1jhj\;ubeh}(h]h ]h"]h$]h&]uh1jmhjw;hKhj9ubjn)}(hC``driver_private`` pointer to the bridge driver's internal context h](jt)}(h``driver_private``h]jz)}(hj;h]hdriver_private}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj;ubj)}(hhh]h)}(h/pointer to the bridge driver's internal contexth]h1pointer to the bridge driver’s internal context}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKhj9ubjn)}(h6``ops`` bitmask of operations supported by the bridge h](jt)}(h``ops``h]jz)}(hj;h]hops}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj;ubj)}(hhh]h)}(h-bitmask of operations supported by the bridgeh]h-bitmask of operations supported by the bridge}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKhj9ubjn)}(h``type`` Type of the connection at the bridge output (DRM_MODE_CONNECTOR_*). For bridges at the end of this chain this identifies the type of connected display. h](jt)}(h``type``h]jz)}(hj <h]htype}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj <ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMShj<ubj)}(hhh]h)}(hType of the connection at the bridge output (DRM_MODE_CONNECTOR_*). For bridges at the end of this chain this identifies the type of connected display.h]hType of the connection at the bridge output (DRM_MODE_CONNECTOR_*). For bridges at the end of this chain this identifies the type of connected display.}(hj&<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMQhj#<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj"<hMShj9ubjn)}(hL``interlace_allowed`` Indicate that the bridge can handle interlaced modes. h](jt)}(h``interlace_allowed``h]jz)}(hjG<h]hinterlace_allowed}(hjI<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE<ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMXhjA<ubj)}(hhh]h)}(h5Indicate that the bridge can handle interlaced modes.h]h5Indicate that the bridge can handle interlaced modes.}(hj`<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMWhj]<ubah}(h]h ]h"]h$]h&]uh1jhjA<ubeh}(h]h ]h"]h$]h&]uh1jmhj\<hMXhj9ubjn)}(hL``ycbcr_420_allowed`` Indicate that the bridge can handle YCbCr 420 output. h](jt)}(h``ycbcr_420_allowed``h]jz)}(hj<h]hycbcr_420_allowed}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM]hj{<ubj)}(hhh]h)}(h5Indicate that the bridge can handle YCbCr 420 output.h]h5Indicate that the bridge can handle YCbCr 420 output.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM\hj<ubah}(h]h ]h"]h$]h&]uh1jhj{<ubeh}(h]h ]h"]h$]h&]uh1jmhj<hM]hj9ubjn)}(hX``pre_enable_prev_first`` The bridge requires that the prev bridge **pre_enable** function is called before its **pre_enable**, and conversely for post_disable. This is most frequently a requirement for DSI devices which need the host to be initialised before the peripheral. h](jt)}(h``pre_enable_prev_first``h]jz)}(hj<h]hpre_enable_prev_first}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMehj<ubj)}(hhh]h)}(hThe bridge requires that the prev bridge **pre_enable** function is called before its **pre_enable**, and conversely for post_disable. This is most frequently a requirement for DSI devices which need the host to be initialised before the peripheral.h](h)The bridge requires that the prev bridge }(hj<hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubh function is called before its }(hj<hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubh, and conversely for post_disable. This is most frequently a requirement for DSI devices which need the host to be initialised before the peripheral.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMahj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj<hMehj9ubjn)}(h7``ddc`` Associated I2C adapter for DDC access, if any. h](jt)}(h``ddc``h]jz)}(hj=h]hddc}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMihj=ubj)}(hhh]h)}(h.Associated I2C adapter for DDC access, if any.h]h.Associated I2C adapter for DDC access, if any.}(hj2=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.=hMihj/=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj.=hMihj9ubjn)}(h?``hpd_mutex`` Protects the **hpd_cb** and **hpd_data** fields. h](jt)}(h ``hpd_mutex``h]jz)}(hjR=h]h hpd_mutex}(hjT=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP=ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMnhjL=ubj)}(hhh]h)}(h0Protects the **hpd_cb** and **hpd_data** fields.h](h Protects the }(hjk=hhhNhNubj%)}(h **hpd_cb**h]hhpd_cb}(hjs=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjk=ubh and }(hjk=hhhNhNubj%)}(h **hpd_data**h]hhpd_data}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjk=ubh fields.}(hjk=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjg=hMnhjh=ubah}(h]h ]h"]h$]h&]uh1jhjL=ubeh}(h]h ]h"]h$]h&]uh1jmhjg=hMnhj9ubjn)}(hQ``hpd_cb`` Hot plug detection callback, registered with drm_bridge_hpd_enable(). h](jt)}(h ``hpd_cb``h]jz)}(hj=h]hhpd_cb}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMshj=ubj)}(hhh]h)}(hEHot plug detection callback, registered with drm_bridge_hpd_enable().h]hEHot plug detection callback, registered with drm_bridge_hpd_enable().}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMrhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMshj9ubjn)}(hP``hpd_data`` Private data passed to the Hot plug detection callback **hpd_cb**. h](jt)}(h ``hpd_data``h]jz)}(hj=h]hhpd_data}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMxhj=ubj)}(hhh]h)}(hBPrivate data passed to the Hot plug detection callback **hpd_cb**.h](h7Private data passed to the Hot plug detection callback }(hj>hhhNhNubj%)}(h **hpd_cb**h]hhpd_cb}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMwhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMxhj9ubjn)}(h``vendor`` Vendor of the product to be used for the SPD InfoFrame generation. This is required if **DRM_BRIDGE_OP_HDMI** is set. h](jt)}(h ``vendor``h]jz)}(hj5>h]hvendor}(hj7>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3>ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM~hj/>ubj)}(hhh]h)}(huVendor of the product to be used for the SPD InfoFrame generation. This is required if **DRM_BRIDGE_OP_HDMI** is set.h](hWVendor of the product to be used for the SPD InfoFrame generation. This is required if }(hjN>hhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI**h]hDRM_BRIDGE_OP_HDMI}(hjV>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjN>ubh is set.}(hjN>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM}hjK>ubah}(h]h ]h"]h$]h&]uh1jhj/>ubeh}(h]h ]h"]h$]h&]uh1jmhjJ>hM~hj9ubjn)}(h``product`` Name of the product to be used for the SPD InfoFrame generation. This is required if **DRM_BRIDGE_OP_HDMI** is set. h](jt)}(h ``product``h]jz)}(hj>h]hproduct}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj{>ubj)}(hhh]h)}(hsName of the product to be used for the SPD InfoFrame generation. This is required if **DRM_BRIDGE_OP_HDMI** is set.h](hUName of the product to be used for the SPD InfoFrame generation. This is required if }(hj>hhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI**h]hDRM_BRIDGE_OP_HDMI}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubh is set.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj>ubah}(h]h ]h"]h$]h&]uh1jhj{>ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj9ubjn)}(h``supported_formats`` Bitmask of **hdmi_colorspace** listing supported output formats. This is only relevant if **DRM_BRIDGE_OP_HDMI** is set. h](jt)}(h``supported_formats``h]jz)}(hj>h]hsupported_formats}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj>ubj)}(hhh]h)}(hxBitmask of **hdmi_colorspace** listing supported output formats. This is only relevant if **DRM_BRIDGE_OP_HDMI** is set.h](h Bitmask of }(hj>hhhNhNubj%)}(h**hdmi_colorspace**h]hhdmi_colorspace}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubh< listing supported output formats. This is only relevant if }(hj>hhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI**h]hDRM_BRIDGE_OP_HDMI}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubh is set.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj9ubjn)}(h``max_bpc`` Maximum bits per char the HDMI bridge supports. Allowed values are 8, 10 and 12. This is only relevant if **DRM_BRIDGE_OP_HDMI** is set. h](jt)}(h ``max_bpc``h]jz)}(hj+?h]hmax_bpc}(hj-?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)?ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj%?ubj)}(hhh]h)}(hMaximum bits per char the HDMI bridge supports. Allowed values are 8, 10 and 12. This is only relevant if **DRM_BRIDGE_OP_HDMI** is set.h](hjMaximum bits per char the HDMI bridge supports. Allowed values are 8, 10 and 12. This is only relevant if }(hjD?hhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI**h]hDRM_BRIDGE_OP_HDMI}(hjL?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjD?ubh is set.}(hjD?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjA?ubah}(h]h ]h"]h$]h&]uh1jhj%?ubeh}(h]h ]h"]h$]h&]uh1jmhj@?hMhj9ubjn)}(hD``hdmi_audio_dev`` device to be used as a parent for the HDMI Codec h](jt)}(h``hdmi_audio_dev``h]jz)}(hjw?h]hhdmi_audio_dev}(hjy?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhju?ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjq?ubj)}(hhh]h)}(h0device to be used as a parent for the HDMI Codech]h0device to be used as a parent for the HDMI Codec}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjq?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhj9ubjn)}(hd``hdmi_audio_max_i2s_playback_channels`` maximum number of playback I2S channels for the HDMI codec h](jt)}(h(``hdmi_audio_max_i2s_playback_channels``h]jz)}(hj?h]h$hdmi_audio_max_i2s_playback_channels}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj?ubj)}(hhh]h)}(h:maximum number of playback I2S channels for the HDMI codech]h:maximum number of playback I2S channels for the HDMI codec}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhj9ubjn)}(hI``hdmi_audio_spdif_playback`` set if HDMI codec has S/PDIF playback port h](jt)}(h``hdmi_audio_spdif_playback``h]jz)}(hj?h]hhdmi_audio_spdif_playback}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj?ubj)}(hhh]h)}(h*set if HDMI codec has S/PDIF playback porth]h*set if HDMI codec has S/PDIF playback port}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhj9ubjn)}(h?``hdmi_audio_dai_port`` sound DAI port, -1 if it is not enabledh](jt)}(h``hdmi_audio_dai_port``h]jz)}(hj#@h]hhdmi_audio_dai_port}(hj%@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!@ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj@ubj)}(hhh]h)}(h'sound DAI port, -1 if it is not enabledh]h'sound DAI port, -1 if it is not enabled}(hj<@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj9@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj8@hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhhjc9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_bridge_get_next_bridge (C function)c.drm_bridge_get_next_bridgehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJstruct drm_bridge * drm_bridge_get_next_bridge (struct drm_bridge *bridge)h]j)}(hHstruct drm_bridge *drm_bridge_get_next_bridge(struct drm_bridge *bridge)h](j)}(hjh]hstruct}(hj}@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy@hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy@hhhj@hMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j%)}jdrm_bridge_get_next_bridgesbc.drm_bridge_get_next_bridgeasbuh1hhjy@hhhj@hMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy@hhhj@hMubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjy@hhhj@hMubj)}(hdrm_bridge_get_next_bridgeh]j)}(hj@h]hdrm_bridge_get_next_bridge}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjy@hhhj@hMubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j@c.drm_bridge_get_next_bridgeasbuh1hhj@ubj)}(h h]h }(hj3AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hjAAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(hbridgeh]hbridge}(hjNAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubah}(h]h ]h"]h$]h&]jjuh1jhjy@hhhj@hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhju@hhhj@hMubah}(h]jp@ah ](jjeh"]h$]h&]jj)jhuh1jhj@hMhjr@hhubj)}(hhh]h)}(h Get the next bridge in the chainh]h Get the next bridge in the chain}(hjxAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjuAhhubah}(h]h ]h"]h$]h&]uh1jhjr@hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_bridge *bridge`` bridge object **Return** the next bridge in the chain after **bridge**, or NULL if **bridge** is the last.h](h)}(h**Parameters**h]j%)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjAubji)}(hhh]jn)}(h,``struct drm_bridge *bridge`` bridge object h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjAh]hstruct drm_bridge *bridge}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjAubj)}(hhh]h)}(h bridge objecth]h bridge object}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhhjAubh)}(h **Return**h]j%)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjAubh)}(hQthe next bridge in the chain after **bridge**, or NULL if **bridge** is the last.h](h#the next bridge in the chain after }(hj BhhhNhNubj%)}(h **bridge**h]hbridge}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Bubh , or NULL if }(hj BhhhNhNubj%)}(h **bridge**h]hbridge}(hj$BhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Bubh is the last.}(hj BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_bridge_get_prev_bridge (C function)c.drm_bridge_get_prev_bridgehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJstruct drm_bridge * drm_bridge_get_prev_bridge (struct drm_bridge *bridge)h]j)}(hHstruct drm_bridge *drm_bridge_get_prev_bridge(struct drm_bridge *bridge)h](j)}(hjh]hstruct}(hj]BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hjkBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBhhhjjBhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj|BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~BmodnameN classnameNjj)}j]j%)}jdrm_bridge_get_prev_bridgesbc.drm_bridge_get_prev_bridgeasbuh1hhjYBhhhjjBhMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYBhhhjjBhMubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYBhhhjjBhMubj)}(hdrm_bridge_get_prev_bridgeh]j)}(hjBh]hdrm_bridge_get_prev_bridge}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYBhhhjjBhMubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jBc.drm_bridge_get_prev_bridgeasbuh1hhjBubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hj!ChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hbridgeh]hbridge}(hj.ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubah}(h]h ]h"]h$]h&]jjuh1jhjYBhhhjjBhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUBhhhjjBhMubah}(h]jPBah ](jjeh"]h$]h&]jj)jhuh1jhjjBhMhjRBhhubj)}(hhh]h)}(h$Get the previous bridge in the chainh]h$Get the previous bridge in the chain}(hjXChhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjUChhubah}(h]h ]h"]h$]h&]uh1jhjRBhhhjjBhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpCjjpCjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_bridge *bridge`` bridge object **Return** the previous bridge in the chain, or NULL if **bridge** is the first.h](h)}(h**Parameters**h]j%)}(hjzCh]h Parameters}(hj|ChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxCubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjtCubji)}(hhh]jn)}(h,``struct drm_bridge *bridge`` bridge object h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjCh]hstruct drm_bridge *bridge}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjCubj)}(hhh]h)}(h bridge objecth]h bridge object}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhhjtCubh)}(h **Return**h]j%)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjtCubh)}(hEthe previous bridge in the chain, or NULL if **bridge** is the first.h](h-the previous bridge in the chain, or NULL if }(hjChhhNhNubj%)}(h **bridge**h]hbridge}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh is the first.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjtCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_bridge_chain_get_first_bridge (C function)#c.drm_bridge_chain_get_first_bridgehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hSstruct drm_bridge * drm_bridge_chain_get_first_bridge (struct drm_encoder *encoder)h]j)}(hQstruct drm_bridge *drm_bridge_chain_get_first_bridge(struct drm_encoder *encoder)h](j)}(hjh]hstruct}(hj+DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Dhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hj9DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Dhhhj8DhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjJDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLDmodnameN classnameNjj)}j]j%)}j!drm_bridge_chain_get_first_bridgesb#c.drm_bridge_chain_get_first_bridgeasbuh1hhj'Dhhhj8DhMubj)}(h h]h }(hjkDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Dhhhj8DhMubj9)}(hj9h]h*}(hjyDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj'Dhhhj8DhMubj)}(h!drm_bridge_chain_get_first_bridgeh]j)}(hjhDh]h!drm_bridge_chain_get_first_bridge}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'Dhhhj8DhMubj)}(h(struct drm_encoder *encoder)h]j)}(hstruct drm_encoder *encoderh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(h drm_encoderh]h drm_encoder}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jfD#c.drm_bridge_chain_get_first_bridgeasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hencoderh]hencoder}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubah}(h]h ]h"]h$]h&]jjuh1jhj'Dhhhj8DhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#Dhhhj8DhMubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhj8DhMhj Dhhubj)}(hhh]h)}(h!Get the first bridge in the chainh]h!Get the first bridge in the chain}(hj&EhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj#Ehhubah}(h]h ]h"]h$]h&]uh1jhj Dhhhj8DhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>Ejj>Ejjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_encoder *encoder`` encoder object **Return** the first bridge in the chain, or NULL if **encoder** has no bridge attached to it.h](h)}(h**Parameters**h]j%)}(hjHEh]h Parameters}(hjJEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjBEubji)}(hhh]jn)}(h/``struct drm_encoder *encoder`` encoder object h](jt)}(h``struct drm_encoder *encoder``h]jz)}(hjgEh]hstruct drm_encoder *encoder}(hjiEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeEubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjaEubj)}(hhh]h)}(hencoder objecth]hencoder object}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|EhMhj}Eubah}(h]h ]h"]h$]h&]uh1jhjaEubeh}(h]h ]h"]h$]h&]uh1jmhj|EhMhj^Eubah}(h]h ]h"]h$]h&]uh1jhhjBEubh)}(h **Return**h]j%)}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjBEubh)}(hSthe first bridge in the chain, or NULL if **encoder** has no bridge attached to it.h](h*the first bridge in the chain, or NULL if }(hjEhhhNhNubj%)}(h **encoder**h]hencoder}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh has no bridge attached to it.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjBEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_for_each_bridge_in_chain (C macro)c.drm_for_each_bridge_in_chainhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_for_each_bridge_in_chainh]j)}(hdrm_for_each_bridge_in_chainh]j)}(hdrm_for_each_bridge_in_chainh]j)}(hjEh]hdrm_for_each_bridge_in_chain}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjEhhhjFhMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhjFhMhjEhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjEhhhjFhMubeh}(h]h ](jmacroeh"]h$]h&]jjjj)Fjj)Fjjjuh1jhhhjhNhNubh)}(h2``drm_for_each_bridge_in_chain (encoder, bridge)``h]jz)}(hj/Fh]h.drm_for_each_bridge_in_chain (encoder, bridge)}(hj1FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Fubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhhubjb=)}(h,Iterate over all bridges present in a chain h]h)}(h+Iterate over all bridges present in a chainh]h+Iterate over all bridges present in a chain}(hjIFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjEFubah}(h]h ]h"]h$]h&]uh1ja=hjWFhMhjhhubj)}(h**Parameters** ``encoder`` the encoder to iterate bridges on ``bridge`` a bridge pointer updated to point to the current bridge at each iteration **Description** Iterate over all bridges present in the bridge chain attached to **encoder**.h](h)}(h**Parameters**h]j%)}(hjdFh]h Parameters}(hjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbFubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj^Fubji)}(hhh](jn)}(h.``encoder`` the encoder to iterate bridges on h](jt)}(h ``encoder``h]jz)}(hjFh]hencoder}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj}Fubj)}(hhh]h)}(h!the encoder to iterate bridges onh]h!the encoder to iterate bridges on}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhj}Fubeh}(h]h ]h"]h$]h&]uh1jmhjFhMhjzFubjn)}(hU``bridge`` a bridge pointer updated to point to the current bridge at each iteration h](jt)}(h ``bridge``h]jz)}(hjFh]hbridge}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjFubj)}(hhh]h)}(hIa bridge pointer updated to point to the current bridge at each iterationh]hIa bridge pointer updated to point to the current bridge at each iteration}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjFhMhjzFubeh}(h]h ]h"]h$]h&]uh1jhhj^Fubh)}(h**Description**h]j%)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj^Fubh)}(hMIterate over all bridges present in the bridge chain attached to **encoder**.h](hAIterate over all bridges present in the bridge chain attached to }(hjGhhhNhNubj%)}(h **encoder**h]hencoder}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj^Fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_add (C function)c.drm_bridge_addhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h/void drm_bridge_add (struct drm_bridge *bridge)h]j)}(h.void drm_bridge_add(struct drm_bridge *bridge)h](j)}(hvoidh]hvoid}(hjOGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKGhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKubj)}(h h]h }(hj^GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKGhhhj]GhKubj)}(hdrm_bridge_addh]j)}(hdrm_bridge_addh]hdrm_bridge_add}(hjpGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKGhhhj]GhKubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]j%)}jjrGsbc.drm_bridge_addasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubj)}(hbridgeh]hbridge}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubah}(h]h ]h"]h$]h&]jjuh1jhjKGhhhj]GhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGGhhhj]GhKubah}(h]jBGah ](jjeh"]h$]h&]jj)jhuh1jhj]GhKhjDGhhubj)}(hhh]h)}(h.add the given bridge to the global bridge listh]h.add the given bridge to the global bridge list}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhj Hhhubah}(h]h ]h"]h$]h&]uh1jhjDGhhhj]GhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'Hjj'Hjjjuh1jhhhjhNhNubj)}(hH**Parameters** ``struct drm_bridge *bridge`` bridge control structureh](h)}(h**Parameters**h]j%)}(hj1Hh]h Parameters}(hj3HhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/Hubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhj+Hubji)}(hhh]jn)}(h6``struct drm_bridge *bridge`` bridge control structureh](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjPHh]hstruct drm_bridge *bridge}(hjRHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNHubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjJHubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjiHhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjfHubah}(h]h ]h"]h$]h&]uh1jhjJHubeh}(h]h ]h"]h$]h&]uh1jmhjeHhKhjGHubah}(h]h ]h"]h$]h&]uh1jhhj+Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j devm_drm_bridge_add (C function)c.devm_drm_bridge_addhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hGint devm_drm_bridge_add (struct device *dev, struct drm_bridge *bridge)h]j)}(hFint devm_drm_bridge_add(struct device *dev, struct drm_bridge *bridge)h](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhKubj)}(hdevm_drm_bridge_addh]j)}(hdevm_drm_bridge_addh]hdevm_drm_bridge_add}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjHhKubj)}(h/(struct device *dev, struct drm_bridge *bridge)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hdeviceh]hdevice}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jjHsbc.devm_drm_bridge_addasbuh1hhjHubj)}(h h]h }(hj%IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(hj9h]h*}(hj3IhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubj)}(hdevh]hdev}(hj@IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjYIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUIubj)}(h h]h }(hjfIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUIubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjwIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjyImodnameN classnameNjj)}j]j!Ic.devm_drm_bridge_addasbuh1hhjUIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUIubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUIubj)}(hbridgeh]hbridge}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjHhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhjHhKubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhjHhKhjHhhubj)}(hhh]h)}(h(devm managed version of drm_bridge_add()h]h(devm managed version of drm_bridge_add()}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjIjjIjjjuh1jhhhjhNhNubj)}(hXC**Parameters** ``struct device *dev`` device to tie the bridge lifetime to ``struct drm_bridge *bridge`` bridge control structure **Description** This is the managed version of drm_bridge_add() which automatically calls drm_bridge_remove() when **dev** is unbound. **Return** 0 if no error or negative error code.h](h)}(h**Parameters**h]j%)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjIubji)}(hhh](jn)}(h<``struct device *dev`` device to tie the bridge lifetime to h](jt)}(h``struct device *dev``h]jz)}(hjJh]hstruct device *dev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjJubj)}(hhh]h)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hj4JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0JhKhj1Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhj0JhKhjJubjn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjTJh]hstruct drm_bridge *bridge}(hjVJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRJubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjNJubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjmJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiJhKhjjJubah}(h]h ]h"]h$]h&]uh1jhjNJubeh}(h]h ]h"]h$]h&]uh1jmhjiJhKhjJubeh}(h]h ]h"]h$]h&]uh1jhhjIubh)}(h**Description**h]j%)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjIubh)}(hvThis is the managed version of drm_bridge_add() which automatically calls drm_bridge_remove() when **dev** is unbound.h](hcThis is the managed version of drm_bridge_add() which automatically calls drm_bridge_remove() when }(hjJhhhNhNubj%)}(h**dev**h]hdev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh is unbound.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjIubh)}(h **Return**h]j%)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjIubh)}(h%0 if no error or negative error code.h]h%0 if no error or negative error code.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_remove (C function)c.drm_bridge_removehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h2void drm_bridge_remove (struct drm_bridge *bridge)h]j)}(h1void drm_bridge_remove(struct drm_bridge *bridge)h](j)}(hvoidh]hvoid}(hj KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Khhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj KhhhjKhKubj)}(hdrm_bridge_removeh]j)}(hdrm_bridge_removeh]hdrm_bridge_remove}(hj.KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Kubah}(h]h ](jjeh"]h$]h&]jjuh1jhj KhhhjKhKubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjJKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFKubj)}(h h]h }(hjWKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFKubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjKmodnameN classnameNjj)}j]j%)}jj0Ksbc.drm_bridge_removeasbuh1hhjFKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFKubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFKubj)}(hbridgeh]hbridge}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBKubah}(h]h ]h"]h$]h&]jjuh1jhj KhhhjKhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjKhKubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjKhKhjKhhubj)}(hhh]h)}(h3remove the given bridge from the global bridge listh]h3remove the given bridge from the global bridge list}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjKhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhjhNhNubj)}(hH**Parameters** ``struct drm_bridge *bridge`` bridge control structureh](h)}(h**Parameters**h]j%)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjKubji)}(hhh]jn)}(h6``struct drm_bridge *bridge`` bridge control structureh](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjLh]hstruct drm_bridge *bridge}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Lubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjLubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hj'LhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhj$Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhj#LhKhjLubah}(h]h ]h"]h$]h&]uh1jhhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_attach (C function)c.drm_bridge_attachhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_bridge_attach (struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous, enum drm_bridge_attach_flags flags)h]j)}(hint drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous, enum drm_bridge_attach_flags flags)h](j)}(hinth]hint}(hjhLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdLhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM2ubj)}(h h]h }(hjwLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdLhhhjvLhM2ubj)}(hdrm_bridge_attachh]j)}(hdrm_bridge_attachh]hdrm_bridge_attach}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdLhhhjvLhM2ubj)}(hy(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous, enum drm_bridge_attach_flags flags)h](j)}(hstruct drm_encoder *encoderh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(h drm_encoderh]h drm_encoder}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j%)}jjLsbc.drm_bridge_attachasbuh1hhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hencoderh]hencoder}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj$MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj5MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7MmodnameN classnameNjj)}j]jLc.drm_bridge_attachasbuh1hhjMubj)}(h h]h }(hjSMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjaMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hbridgeh]hbridge}(hjnMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(hstruct drm_bridge *previoush](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jLc.drm_bridge_attachasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hprevioush]hprevious}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(h"enum drm_bridge_attach_flags flagsh](j)}(hjl h]henum}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hdrm_bridge_attach_flagsh]hdrm_bridge_attach_flags}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jLc.drm_bridge_attachasbuh1hhjMubj)}(h h]h }(hj3NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hflagsh]hflags}(hjANhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(h]h ]h"]h$]h&]jjuh1jhjdLhhhjvLhM2ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`LhhhjvLhM2ubah}(h]j[Lah ](jjeh"]h$]h&]jj)jhuh1jhjvLhM2hj]Lhhubj)}(hhh]h)}(h'attach the bridge to an encoder's chainh]h)attach the bridge to an encoder’s chain}(hjkNhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjhNhhubah}(h]h ]h"]h$]h&]uh1jhj]LhhhjvLhM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1jhhhjhNhNubj)}(hXe**Parameters** ``struct drm_encoder *encoder`` DRM encoder ``struct drm_bridge *bridge`` bridge to attach ``struct drm_bridge *previous`` previous bridge in the chain (optional) ``enum drm_bridge_attach_flags flags`` DRM_BRIDGE_ATTACH_* flags **Description** Called by a kms driver to link the bridge to an encoder's chain. The previous argument specifies the previous bridge in the chain. If NULL, the bridge is linked directly at the encoder's output. Otherwise it is linked at the previous bridge's output. If non-NULL the previous bridge must be already attached by a call to this function. Note that bridges attached to encoders are auto-detached during encoder cleanup in drm_encoder_cleanup(), so drm_bridge_attach() should generally *not* be balanced with a drm_bridge_detach() in driver code. **Return** Zero on success, error code on failureh](h)}(h**Parameters**h]j%)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM hjNubji)}(hhh](jn)}(h,``struct drm_encoder *encoder`` DRM encoder h](jt)}(h``struct drm_encoder *encoder``h]jz)}(hjNh]hstruct drm_encoder *encoder}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNubj)}(hhh]h)}(h DRM encoderh]h DRM encoder}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjNhMhjNubjn)}(h/``struct drm_bridge *bridge`` bridge to attach h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjNh]hstruct drm_bridge *bridge}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNubj)}(hhh]h)}(hbridge to attachh]hbridge to attach}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjNhMhjNubjn)}(hH``struct drm_bridge *previous`` previous bridge in the chain (optional) h](jt)}(h``struct drm_bridge *previous``h]jz)}(hjOh]hstruct drm_bridge *previous}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM hjOubj)}(hhh]h)}(h'previous bridge in the chain (optional)h]h'previous bridge in the chain (optional)}(hj7OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3OhM hj4Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhj3OhM hjNubjn)}(hA``enum drm_bridge_attach_flags flags`` DRM_BRIDGE_ATTACH_* flags h](jt)}(h&``enum drm_bridge_attach_flags flags``h]jz)}(hjWOh]h"enum drm_bridge_attach_flags flags}(hjYOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUOubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM!hjQOubj)}(hhh]h)}(hDRM_BRIDGE_ATTACH_* flagsh]hDRM_BRIDGE_ATTACH_* flags}(hjpOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlOhM!hjmOubah}(h]h ]h"]h$]h&]uh1jhjQOubeh}(h]h ]h"]h$]h&]uh1jmhjlOhM!hjNubeh}(h]h ]h"]h$]h&]uh1jhhjNubh)}(h**Description**h]j%)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM#hjNubh)}(hCalled by a kms driver to link the bridge to an encoder's chain. The previous argument specifies the previous bridge in the chain. If NULL, the bridge is linked directly at the encoder's output. Otherwise it is linked at the previous bridge's output.h]hXCalled by a kms driver to link the bridge to an encoder’s chain. The previous argument specifies the previous bridge in the chain. If NULL, the bridge is linked directly at the encoder’s output. Otherwise it is linked at the previous bridge’s output.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM#hjNubh)}(hTIf non-NULL the previous bridge must be already attached by a call to this function.h]hTIf non-NULL the previous bridge must be already attached by a call to this function.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM(hjNubh)}(hNote that bridges attached to encoders are auto-detached during encoder cleanup in drm_encoder_cleanup(), so drm_bridge_attach() should generally *not* be balanced with a drm_bridge_detach() in driver code.h](hNote that bridges attached to encoders are auto-detached during encoder cleanup in drm_encoder_cleanup(), so drm_bridge_attach() should generally }(hjOhhhNhNubj4>)}(h*not*h]hnot}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j3>hjOubh7 be balanced with a drm_bridge_detach() in driver code.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM+hjNubh)}(h **Return**h]j%)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM/hjNubh)}(h&Zero on success, error code on failureh]h&Zero on success, error code on failure}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM/hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_bridge_chain_mode_valid (C function)c.drm_bridge_chain_mode_validhNtauh1jxhjhhhNhNubj)}(hhh](j)}(henum drm_mode_status drm_bridge_chain_mode_valid (struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode)h]j)}(henum drm_mode_status drm_bridge_chain_mode_valid(struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode)h](j)}(hjl h]henum}(hj.PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Phhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hj` for all the bridges in the encoder chain, starting from the first bridge to the last. If at least one bridge does not accept the mode the function returns the error code. **Note** the bridge passed should be the one closest to the encoder. **Return** MODE_OK on success, drm_mode_status Enum error code on failureh](h)}(h**Parameters**h]j%)}(hjTRh]h Parameters}(hjVRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRRubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNRubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjsRh]hstruct drm_bridge *bridge}(hjuRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqRubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjmRubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjmRubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhjjRubjn)}(h_``const struct drm_display_info *info`` display info against which the mode shall be validated h](jt)}(h'``const struct drm_display_info *info``h]jz)}(hjRh]h#const struct drm_display_info *info}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjRubj)}(hhh]h)}(h6display info against which the mode shall be validatedh]h6display info against which the mode shall be validated}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhjjRubjn)}(hE``const struct drm_display_mode *mode`` desired mode to be validated h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjRh]h#const struct drm_display_mode *mode}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjRubj)}(hhh]h)}(hdesired mode to be validatedh]hdesired mode to be validated}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhjjRubeh}(h]h ]h"]h$]h&]uh1jhhjNRubh)}(h**Description**h]j%)}(hj Sh]h Description}(hj"ShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNRubh)}(hCalls :c:type:`drm_bridge_funcs.mode_valid ` for all the bridges in the encoder chain, starting from the first bridge to the last. If at least one bridge does not accept the mode the function returns the error code.h](hCalls }(hj6ShhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_valid `h]jz)}(hj@Sh]hdrm_bridge_funcs.mode_valid}(hjBShhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>Subah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj6Subh for all the bridges in the encoder chain, starting from the first bridge to the last. If at least one bridge does not accept the mode the function returns the error code.}(hj6ShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]ShMhjNRubh)}(h**Note**h]j%)}(hjjSh]hNote}(hjlShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhSubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNRubh)}(h;the bridge passed should be the one closest to the encoder.h]h;the bridge passed should be the one closest to the encoder.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNRubh)}(h **Return**h]j%)}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNRubh)}(h>MODE_OK on success, drm_mode_status Enum error code on failureh]h>MODE_OK on success, drm_mode_status Enum error code on failure}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjNRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_bridge_chain_mode_set (C function)c.drm_bridge_chain_mode_sethNtauh1jxhjhhhNhNubj)}(hhh](j)}(hvoid drm_bridge_chain_mode_set (struct drm_bridge *bridge, const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode)h]j)}(hvoid drm_bridge_chain_mode_set(struct drm_bridge *bridge, const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMubj)}(hdrm_bridge_chain_mode_seth]j)}(hdrm_bridge_chain_mode_seth]hdrm_bridge_chain_mode_set}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMubj)}(hn(struct drm_bridge *bridge, const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj1ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3TmodnameN classnameNjj)}j]j%)}jjSsbc.drm_bridge_chain_mode_setasbuh1hhjTubj)}(h h]h }(hjQThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hj_ThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(hbridgeh]hbridge}(hjlThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Tubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jMTc.drm_bridge_chain_mode_setasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(hmodeh]hmode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Tubj)}(h,const struct drm_display_mode *adjusted_modeh](j)}(hjch]hconst}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubj)}(hjh]hstruct}(hj+UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubj)}(h h]h }(hj8UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjIUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKUmodnameN classnameNjj)}j]jMTc.drm_bridge_chain_mode_setasbuh1hhj Uubj)}(h h]h }(hjgUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubj9)}(hj9h]h*}(hjuUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj Uubj)}(h adjusted_modeh]h adjusted_mode}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Tubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjShMhjShhubj)}(hhh]h)}(h6set proposed mode for all bridges in the encoder chainh]h6set proposed mode for all bridges in the encoder chain}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM hjUhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``const struct drm_display_mode *mode`` desired mode to be set for the encoder chain ``const struct drm_display_mode *adjusted_mode`` updated mode that works for this encoder chain **Description** Calls :c:type:`drm_bridge_funcs.mode_set ` op for all the bridges in the encoder chain, starting from the first bridge to the last. **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjUubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjUh]hstruct drm_bridge *bridge}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM hjUubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjVhM hjUubjn)}(hU``const struct drm_display_mode *mode`` desired mode to be set for the encoder chain h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hj&Vh]h#const struct drm_display_mode *mode}(hj(VhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$Vubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM hj Vubj)}(hhh]h)}(h,desired mode to be set for the encoder chainh]h,desired mode to be set for the encoder chain}(hj?VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;VhM hj` op for all the bridges in the encoder chain, starting from the first bridge to the last.h](hCalls }(hjVhhhNhNubh)}(h6:c:type:`drm_bridge_funcs.mode_set `h]jz)}(hjVh]hdrm_bridge_funcs.mode_set}(hjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjVubhY op for all the bridges in the encoder chain, starting from the first bridge to the last.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMhjUubh)}(h**Note**h]j%)}(hjVh]hNote}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjUubh)}(h:the bridge passed should be the one closest to the encoderh]h:the bridge passed should be the one closest to the encoder}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_atomic_bridge_chain_disable (C function)!c.drm_atomic_bridge_chain_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h`void drm_atomic_bridge_chain_disable (struct drm_bridge *bridge, struct drm_atomic_state *state)h]j)}(h_void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj)WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Whhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM2ubj)}(h h]h }(hj8WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Whhhj7WhM2ubj)}(hdrm_atomic_bridge_chain_disableh]j)}(hdrm_atomic_bridge_chain_disableh]hdrm_atomic_bridge_chain_disable}(hjJWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%Whhhj7WhM2ubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjfWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbWubj)}(h h]h }(hjsWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbWubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j%)}jjLWsb!c.drm_atomic_bridge_chain_disableasbuh1hhjbWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbWubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbWubj)}(hbridgeh]hbridge}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^Wubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jW!c.drm_atomic_bridge_chain_disableasbuh1hhjWubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(hj9h]h*}(hj"XhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWubj)}(hstateh]hstate}(hj/XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^Wubeh}(h]h ]h"]h$]h&]jjuh1jhj%Whhhj7WhM2ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!Whhhj7WhM2ubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhj7WhM2hjWhhubj)}(hhh]h)}(h)disables all bridges in the encoder chainh]h)disables all bridges in the encoder chain}(hjYXhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM'hjVXhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhj7WhM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqXjjqXjjjuh1jhhhjhNhNubj)}(hX2**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_atomic_state *state`` atomic state being committed **Description** Calls :c:type:`drm_bridge_funcs.atomic_disable ` (falls back on :c:type:`drm_bridge_funcs.disable `) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling :c:type:`drm_encoder_helper_funcs.atomic_disable ` **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hj{Xh]h Parameters}(hj}XhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyXubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM+hjuXubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjXh]hstruct drm_bridge *bridge}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM(hjXubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM(hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhM(hjXubjn)}(h@``struct drm_atomic_state *state`` atomic state being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjXh]hstruct drm_atomic_state *state}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM)hjXubj)}(hhh]h)}(hatomic state being committedh]hatomic state being committed}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM)hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhM)hjXubeh}(h]h ]h"]h$]h&]uh1jhhjuXubh)}(h**Description**h]j%)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Yubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM+hjuXubh)}(hXNCalls :c:type:`drm_bridge_funcs.atomic_disable ` (falls back on :c:type:`drm_bridge_funcs.disable `) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling :c:type:`drm_encoder_helper_funcs.atomic_disable `h](hCalls }(hj$YhhhNhNubh)}(h<:c:type:`drm_bridge_funcs.atomic_disable `h]jz)}(hj.Yh]hdrm_bridge_funcs.atomic_disable}(hj0YhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,Yubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM+hj$Yubh (falls back on }(hj$YhhhNhNubh)}(h5:c:type:`drm_bridge_funcs.disable `h]jz)}(hjRYh]hdrm_bridge_funcs.disable}(hjTYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjKYhM+hj$Yubh{) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling }(hj$YhhhNhNubh)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]jz)}(hjuYh]h'drm_encoder_helper_funcs.atomic_disable}(hjwYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjsYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjKYhM+hj$Yubeh}(h]h ]h"]h$]h&]uh1hhjKYhM+hjuXubh)}(h**Note**h]j%)}(hjYh]hNote}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM0hjuXubh)}(h:the bridge passed should be the one closest to the encoderh]h:the bridge passed should be the one closest to the encoder}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM0hjuXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_bridge_chain_post_disable (C function)&c.drm_atomic_bridge_chain_post_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hevoid drm_atomic_bridge_chain_post_disable (struct drm_bridge *bridge, struct drm_atomic_state *state)h]j)}(hdvoid drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjYhMjubj)}(h$drm_atomic_bridge_chain_post_disableh]j)}(h$drm_atomic_bridge_chain_post_disableh]h$drm_atomic_bridge_chain_post_disable}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjYhMjubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj)ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj:ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj` (falls back on :c:type:`drm_bridge_funcs.post_disable `) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing :c:type:`drm_encoder_helper_funcs.atomic_disable ` If a bridge sets **pre_enable_prev_first**, then the **post_disable** for that bridge will be called before the previous one to reverse the **pre_enable** calling direction. With pre_enable_prev_first flag enable in Bridge B, D, E then the resulting **post_disable** order would be, Bridge B, Bridge A, Bridge E, Bridge D, Bridge C. **Example** Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hj1[h]h Parameters}(hj3[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/[ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMWhj+[ubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjP[h]hstruct drm_bridge *bridge}(hjR[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN[ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMUhjJ[ubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hji[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje[hMUhjf[ubah}(h]h ]h"]h$]h&]uh1jhjJ[ubeh}(h]h ]h"]h$]h&]uh1jmhje[hMUhjG[ubjn)}(h@``struct drm_atomic_state *state`` atomic state being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj[h]hstruct drm_atomic_state *state}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMVhj[ubj)}(hhh]h)}(hatomic state being committedh]hatomic state being committed}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMVhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMVhjG[ubeh}(h]h ]h"]h$]h&]uh1jhhj+[ubh)}(h**Description**h]j%)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMXhj+[ubh)}(hXZCalls :c:type:`drm_bridge_funcs.atomic_post_disable ` (falls back on :c:type:`drm_bridge_funcs.post_disable `) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing :c:type:`drm_encoder_helper_funcs.atomic_disable `h](hCalls }(hj[hhhNhNubh)}(hA:c:type:`drm_bridge_funcs.atomic_post_disable `h]jz)}(hj[h]h$drm_bridge_funcs.atomic_post_disable}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMXhj[ubh (falls back on }(hj[hhhNhNubh)}(h::c:type:`drm_bridge_funcs.post_disable `h]jz)}(hj\h]hdrm_bridge_funcs.post_disable}(hj \hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj\hMXhj[ubh}) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing }(hj[hhhNhNubh)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]jz)}(hj+\h]h'drm_encoder_helper_funcs.atomic_disable}(hj-\hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)\ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj\hMXhj[ubeh}(h]h ]h"]h$]h&]uh1hhj\hMXhj+[ubh)}(hIf a bridge sets **pre_enable_prev_first**, then the **post_disable** for that bridge will be called before the previous one to reverse the **pre_enable** calling direction.h](hIf a bridge sets }(hjN\hhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjV\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjN\ubh , then the }(hjN\hhhNhNubj%)}(h**post_disable**h]h post_disable}(hjh\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjN\ubhG for that bridge will be called before the previous one to reverse the }(hjN\hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hjz\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjN\ubh calling direction.}(hjN\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM]hj+[ubh)}(hWith pre_enable_prev_first flag enable in Bridge B, D, E then the resulting **post_disable** order would be, Bridge B, Bridge A, Bridge E, Bridge D, Bridge C.h](hLWith pre_enable_prev_first flag enable in Bridge B, D, E then the resulting }(hj\hhhNhNubj%)}(h**post_disable**h]h post_disable}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubhB order would be, Bridge B, Bridge A, Bridge E, Bridge D, Bridge C.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMahj+[ubh)}(h **Example**h]j%)}(hj\h]hExample}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMehj+[ubh)}(h@Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge Eh]h@Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMahj+[ubh)}(h**Note**h]j%)}(hj\h]hNote}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMchj+[ubh)}(h:the bridge passed should be the one closest to the encoderh]h:the bridge passed should be the one closest to the encoder}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhhj+[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_atomic_bridge_chain_pre_enable (C function)$c.drm_atomic_bridge_chain_pre_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcvoid drm_atomic_bridge_chain_pre_enable (struct drm_bridge *bridge, struct drm_atomic_state *state)h]j)}(hbvoid drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hj"]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hj1]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhj0]hMubj)}(h"drm_atomic_bridge_chain_pre_enableh]j)}(h"drm_atomic_bridge_chain_pre_enableh]h"drm_atomic_bridge_chain_pre_enable}(hjC]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhj0]hMubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hj_]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[]ubj)}(h h]h }(hjl]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[]ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj}]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j%)}jjE]sb$c.drm_atomic_bridge_chain_pre_enableasbuh1hhj[]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[]ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[]ubj)}(hbridgeh]hbridge}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW]ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j]$c.drm_atomic_bridge_chain_pre_enableasbuh1hhj]ubj)}(h h]h }(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hstateh]hstate}(hj(^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW]ubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhj0]hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj]hhhj0]hMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhj0]hMhj]hhubj)}(hhh]h)}(h6prepares for enabling all bridges in the encoder chainh]h6prepares for enabling all bridges in the encoder chain}(hjR^hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjO^hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj0]hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjj^jjj^jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_atomic_state *state`` atomic state being committed **Description** Calls :c:type:`drm_bridge_funcs.atomic_pre_enable ` (falls back on :c:type:`drm_bridge_funcs.pre_enable `) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling :c:type:`drm_encoder_helper_funcs.atomic_enable ` If a bridge sets **pre_enable_prev_first**, then the pre_enable for the prev bridge will be called before pre_enable of this bridge. With pre_enable_prev_first flag enable in Bridge B, D, E then the resulting **pre_enable** order would be, Bridge C, Bridge D, Bridge E, Bridge A, Bridge B. **Example** Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hjt^h]h Parameters}(hjv^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr^ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj^h]hstruct drm_bridge *bridge}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj^ubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhj^ubjn)}(h@``struct drm_atomic_state *state`` atomic state being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj^h]hstruct drm_atomic_state *state}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj^ubj)}(hhh]h)}(hatomic state being committedh]hatomic state being committed}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhj^ubeh}(h]h ]h"]h$]h&]uh1jhhjn^ubh)}(h**Description**h]j%)}(hj_h]h Description}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubh)}(hXSCalls :c:type:`drm_bridge_funcs.atomic_pre_enable ` (falls back on :c:type:`drm_bridge_funcs.pre_enable `) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling :c:type:`drm_encoder_helper_funcs.atomic_enable `h](hCalls }(hj_hhhNhNubh)}(h?:c:type:`drm_bridge_funcs.atomic_pre_enable `h]jz)}(hj'_h]h"drm_bridge_funcs.atomic_pre_enable}(hj)_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%_ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj_ubh (falls back on }(hj_hhhNhNubh)}(h8:c:type:`drm_bridge_funcs.pre_enable `h]jz)}(hjK_h]hdrm_bridge_funcs.pre_enable}(hjM_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjI_ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjD_hMhj_ubh{) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling }(hj_hhhNhNubh)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]jz)}(hjn_h]h&drm_encoder_helper_funcs.atomic_enable}(hjp_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjl_ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjD_hMhj_ubeh}(h]h ]h"]h$]h&]uh1hhjD_hMhjn^ubh)}(hIf a bridge sets **pre_enable_prev_first**, then the pre_enable for the prev bridge will be called before pre_enable of this bridge.h](hIf a bridge sets }(hj_hhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubhZ, then the pre_enable for the prev bridge will be called before pre_enable of this bridge.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubh)}(hWith pre_enable_prev_first flag enable in Bridge B, D, E then the resulting **pre_enable** order would be, Bridge C, Bridge D, Bridge E, Bridge A, Bridge B.h](hLWith pre_enable_prev_first flag enable in Bridge B, D, E then the resulting }(hj_hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubhB order would be, Bridge C, Bridge D, Bridge E, Bridge A, Bridge B.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubh)}(h **Example**h]j%)}(hj_h]hExample}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubh)}(h@Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge Eh]h@Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubh)}(h**Note**h]j%)}(hj_h]hNote}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubh)}(h:the bridge passed should be the one closest to the encoderh]h:the bridge passed should be the one closest to the encoder}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjn^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_atomic_bridge_chain_enable (C function) c.drm_atomic_bridge_chain_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h_void drm_atomic_bridge_chain_enable (struct drm_bridge *bridge, struct drm_atomic_state *state)h]j)}(h^void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjA`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=`hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM ubj)}(h h]h }(hjP`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=`hhhjO`hM ubj)}(hdrm_atomic_bridge_chain_enableh]j)}(hdrm_atomic_bridge_chain_enableh]hdrm_atomic_bridge_chain_enable}(hjb`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=`hhhjO`hM ubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hj~`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz`ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j%)}jjd`sb c.drm_atomic_bridge_chain_enableasbuh1hhjz`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz`ubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjz`ubj)}(hbridgeh]hbridge}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv`ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j` c.drm_atomic_bridge_chain_enableasbuh1hhj`ubj)}(h h]h }(hj,ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hj:ahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hstateh]hstate}(hjGahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv`ubeh}(h]h ]h"]h$]h&]jjuh1jhj=`hhhjO`hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9`hhhjO`hM ubah}(h]j4`ah ](jjeh"]h$]h&]jj)jhuh1jhjO`hM hj6`hhubj)}(hhh]h)}(h(enables all bridges in the encoder chainh]h(enables all bridges in the encoder chain}(hjqahhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjnahhubah}(h]h ]h"]h$]h&]uh1jhj6`hhhjO`hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjhNhNubj)}(hX1**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_atomic_state *state`` atomic state being committed **Description** Calls :c:type:`drm_bridge_funcs.atomic_enable ` (falls back on :c:type:`drm_bridge_funcs.enable `) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing :c:type:`drm_encoder_helper_funcs.atomic_enable ` **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjaubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjah]hstruct drm_bridge *bridge}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjaubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjaubjn)}(h@``struct drm_atomic_state *state`` atomic state being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjah]hstruct drm_atomic_state *state}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjaubj)}(hhh]h)}(hatomic state being committedh]hatomic state being committed}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjaubeh}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hj&bh]h Description}(hj(bhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$bubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjaubh)}(hXMCalls :c:type:`drm_bridge_funcs.atomic_enable ` (falls back on :c:type:`drm_bridge_funcs.enable `) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing :c:type:`drm_encoder_helper_funcs.atomic_enable `h](hCalls }(hj`h]jz)}(hjFbh]hdrm_bridge_funcs.atomic_enable}(hjHbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjDbubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj`h]jz)}(hjjbh]hdrm_bridge_funcs.enable}(hjlbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhbubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjcbhMhj`h]jz)}(hjbh]h&drm_encoder_helper_funcs.atomic_enable}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjcbhMhj` (falls back on :c:type:`drm_bridge_funcs.mode_fixup\(\) `) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling :c:type:`drm_encoder_helper_funcs.atomic_check\(\) ` **Return** 0 on success, a negative error code on failureh](h)}(h**Parameters**h]j%)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM'hjdubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjdh]hstruct drm_bridge *bridge}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM$hjdubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM$hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjdhM$hjdubjn)}(h5``struct drm_crtc_state *crtc_state`` new CRTC state h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjeh]h!struct drm_crtc_state *crtc_state}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM%hj eubj)}(hhh]h)}(hnew CRTC stateh]hnew CRTC state}(hj*ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ehM%hj'eubah}(h]h ]h"]h$]h&]uh1jhj eubeh}(h]h ]h"]h$]h&]uh1jmhj&ehM%hjdubjn)}(h?``struct drm_connector_state *conn_state`` new connector state h](jt)}(h*``struct drm_connector_state *conn_state``h]jz)}(hjJeh]h&struct drm_connector_state *conn_state}(hjLehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHeubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM&hjDeubj)}(hhh]h)}(hnew connector stateh]hnew connector state}(hjcehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ehM&hj`eubah}(h]h ]h"]h$]h&]uh1jhjDeubeh}(h]h ]h"]h$]h&]uh1jmhj_ehM&hjdubeh}(h]h ]h"]h$]h&]uh1jhhjdubh)}(h**Description**h]j%)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM(hjdubh)}(hXFirst trigger a bus format negotiation before calling :c:type:`drm_bridge_funcs.atomic_check\(\) ` (falls back on :c:type:`drm_bridge_funcs.mode_fixup\(\) `) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling :c:type:`drm_encoder_helper_funcs.atomic_check\(\) `h](h6First trigger a bus format negotiation before calling }(hjehhhNhNubh)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hjeh]hdrm_bridge_funcs.atomic_check()}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM(hjeubh (falls back on }(hjehhhNhNubh)}(h<:c:type:`drm_bridge_funcs.mode_fixup\(\) `h]jz)}(hjeh]hdrm_bridge_funcs.mode_fixup()}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjehM(hjeubh{) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling }(hjehhhNhNubh)}(hN:c:type:`drm_encoder_helper_funcs.atomic_check\(\) `h]jz)}(hjeh]h'drm_encoder_helper_funcs.atomic_check()}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjehM(hjeubeh}(h]h ]h"]h$]h&]uh1hhjehM(hjdubh)}(h **Return**h]j%)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM.hjdubh)}(h.0 on success, a negative error code on failureh]h.0 on success, a negative error code on failure}(hj'fhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM.hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_detect (C function)c.drm_bridge_detecthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hGenum drm_connector_status drm_bridge_detect (struct drm_bridge *bridge)h]j)}(hFenum drm_connector_status drm_bridge_detect(struct drm_bridge *bridge)h](j)}(hjl h]henum}(hjVfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRfhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMiubj)}(h h]h }(hjdfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRfhhhjcfhMiubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hjufhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwfmodnameN classnameNjj)}j]j%)}jdrm_bridge_detectsbc.drm_bridge_detectasbuh1hhjRfhhhjcfhMiubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRfhhhjcfhMiubj)}(hdrm_bridge_detecth]j)}(hjfh]hdrm_bridge_detect}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRfhhhjcfhMiubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jfc.drm_bridge_detectasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(hj9h]h*}(hj ghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubj)}(hbridgeh]hbridge}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubah}(h]h ]h"]h$]h&]jjuh1jhjRfhhhjcfhMiubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjNfhhhjcfhMiubah}(h]jIfah ](jjeh"]h$]h&]jj)jhuh1jhjcfhMihjKfhhubj)}(hhh]h)}(h2check if anything is attached to the bridge outputh]h2check if anything is attached to the bridge output}(hjDghhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM]hjAghhubah}(h]h ]h"]h$]h&]uh1jhjKfhhhjcfhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\gjj\gjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure **Description** If the bridge supports output detection, as reported by the DRM_BRIDGE_OP_DETECT bridge ops flag, call :c:type:`drm_bridge_funcs.detect ` for the bridge and return the connection status. Otherwise return connector_status_unknown. **Return** The detection status on success, or connector_status_unknown if the bridge doesn't support output detection.h](h)}(h**Parameters**h]j%)}(hjfgh]h Parameters}(hjhghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdgubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMahj`gubji)}(hhh]jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjgh]hstruct drm_bridge *bridge}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM^hjgubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM^hjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjghM^hj|gubah}(h]h ]h"]h$]h&]uh1jhhj`gubh)}(h**Description**h]j%)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM`hj`gubh)}(hIf the bridge supports output detection, as reported by the DRM_BRIDGE_OP_DETECT bridge ops flag, call :c:type:`drm_bridge_funcs.detect ` for the bridge and return the connection status. Otherwise return connector_status_unknown.h](hgIf the bridge supports output detection, as reported by the DRM_BRIDGE_OP_DETECT bridge ops flag, call }(hjghhhNhNubh)}(h4:c:type:`drm_bridge_funcs.detect `h]jz)}(hjgh]hdrm_bridge_funcs.detect}(hjghhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM`hjgubh\ for the bridge and return the connection status. Otherwise return connector_status_unknown.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghM`hj`gubh)}(h **Return**h]j%)}(hj hh]hReturn}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMehj`gubh)}(hlThe detection status on success, or connector_status_unknown if the bridge doesn't support output detection.h]hnThe detection status on success, or connector_status_unknown if the bridge doesn’t support output detection.}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMehj`gubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_bridge_get_modes (C function)c.drm_bridge_get_modeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hUint drm_bridge_get_modes (struct drm_bridge *bridge, struct drm_connector *connector)h]j)}(hTint drm_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hinth]hint}(hjOhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hj^hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhhj]hhMubj)}(hdrm_bridge_get_modesh]j)}(hdrm_bridge_get_modesh]hdrm_bridge_get_modes}(hjphhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhhj]hhMubj)}(h<(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j%)}jjrhsbc.drm_bridge_get_modesasbuh1hhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(hbridgeh]hbridge}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]jhc.drm_bridge_get_modesasbuh1hhjhubj)}(h h]h }(hj:ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjHihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(h connectorh]h connector}(hjUihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubeh}(h]h ]h"]h$]h&]jjuh1jhjKhhhhj]hhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhhj]hhMubah}(h]jBhah ](jjeh"]h$]h&]jj)jhuh1jhj]hhMhjDhhhubj)}(hhh]h)}(hBfill all modes currently valid for the sink into the **connector**h](h5fill all modes currently valid for the sink into the }(hjihhhNhNubj%)}(h **connector**h]h connector}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMshj|ihhubah}(h]h ]h"]h$]h&]uh1jhjDhhhhj]hhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_connector *connector`` the connector to fill with modes **Description** If the bridge supports output modes retrieval, as reported by the DRM_BRIDGE_OP_MODES bridge ops flag, call :c:type:`drm_bridge_funcs.get_modes ` to fill the connector with all valid modes and return the number of modes added. Otherwise return 0. **Return** The number of modes added to the connector.h](h)}(h**Parameters**h]j%)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMwhjiubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjih]hstruct drm_bridge *bridge}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMuhjiubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMuhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjihMuhjiubjn)}(hE``struct drm_connector *connector`` the connector to fill with modes h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjjh]hstruct drm_connector *connector}(hj jhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMvhjjubj)}(hhh]h)}(h the connector to fill with modesh]h the connector to fill with modes}(hj jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMvhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMvhjiubeh}(h]h ]h"]h$]h&]uh1jhhjiubh)}(h**Description**h]j%)}(hjBjh]h Description}(hjDjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@jubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMxhjiubh)}(hXIf the bridge supports output modes retrieval, as reported by the DRM_BRIDGE_OP_MODES bridge ops flag, call :c:type:`drm_bridge_funcs.get_modes ` to fill the connector with all valid modes and return the number of modes added. Otherwise return 0.h](hlIf the bridge supports output modes retrieval, as reported by the DRM_BRIDGE_OP_MODES bridge ops flag, call }(hjXjhhhNhNubh)}(h7:c:type:`drm_bridge_funcs.get_modes `h]jz)}(hjbjh]hdrm_bridge_funcs.get_modes}(hjdjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`jubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMxhjXjubhe to fill the connector with all valid modes and return the number of modes added. Otherwise return 0.}(hjXjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjhMxhjiubh)}(h **Return**h]j%)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM}hjiubh)}(h+The number of modes added to the connector.h]h+The number of modes added to the connector.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM}hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_bridge_edid_read (C function)c.drm_bridge_edid_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hiconst struct drm_edid * drm_bridge_edid_read (struct drm_bridge *bridge, struct drm_connector *connector)h]j)}(hgconst struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hjch]hconst}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubj)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj kmodnameN classnameNjj)}j]j%)}jdrm_bridge_edid_readsbc.drm_bridge_edid_readasbuh1hhjjhhhjjhMubj)}(h h]h }(hj,khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubj9)}(hj9h]h*}(hj:khhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjhhhjjhMubj)}(hdrm_bridge_edid_readh]j)}(hj)kh]hdrm_bridge_edid_read}(hjKkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjjhMubj)}(h<(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjfkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbkubj)}(h h]h }(hjskhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbkubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j'kc.drm_bridge_edid_readasbuh1hhjbkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbkubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbkubj)}(hbridgeh]hbridge}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^kubj)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j'kc.drm_bridge_edid_readasbuh1hhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hj lhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(h connectorh]h connector}(hj-lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^kubeh}(h]h ]h"]h$]h&]jjuh1jhjjhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjjhMhjjhhubj)}(hhh]h)}(h+read the EDID data of the connected displayh]h+read the EDID data of the connected display}(hjWlhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjTlhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjoljjoljjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_connector *connector`` the connector to read EDID for **Description** If the bridge supports output EDID retrieval, as reported by the DRM_BRIDGE_OP_EDID bridge ops flag, call :c:type:`drm_bridge_funcs.edid_read ` to get the EDID and return it. Otherwise return NULL. **Return** The retrieved EDID on success, or NULL otherwise.h](h)}(h**Parameters**h]j%)}(hjylh]h Parameters}(hj{lhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwlubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjslubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjlh]hstruct drm_bridge *bridge}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjlubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjlubjn)}(hC``struct drm_connector *connector`` the connector to read EDID for h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjlh]hstruct drm_connector *connector}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjlubj)}(hhh]h)}(hthe connector to read EDID forh]hthe connector to read EDID for}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjlubeh}(h]h ]h"]h$]h&]uh1jhhjslubh)}(h**Description**h]j%)}(hj mh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj mubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjslubh)}(hIf the bridge supports output EDID retrieval, as reported by the DRM_BRIDGE_OP_EDID bridge ops flag, call :c:type:`drm_bridge_funcs.edid_read ` to get the EDID and return it. Otherwise return NULL.h](hjIf the bridge supports output EDID retrieval, as reported by the DRM_BRIDGE_OP_EDID bridge ops flag, call }(hj"mhhhNhNubh)}(h7:c:type:`drm_bridge_funcs.edid_read `h]jz)}(hj,mh]hdrm_bridge_funcs.edid_read}(hj.mhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*mubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj"mubh6 to get the EDID and return it. Otherwise return NULL.}(hj"mhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjImhMhjslubh)}(h **Return**h]j%)}(hjVmh]hReturn}(hjXmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTmubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjslubh)}(h1The retrieved EDID on success, or NULL otherwise.h]h1The retrieved EDID on success, or NULL otherwise.}(hjlmhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjslubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_bridge_hpd_enable (C function)c.drm_bridge_hpd_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h|void drm_bridge_hpd_enable (struct drm_bridge *bridge, void (*cb)(void *data, enum drm_connector_status status), void *data)h]j)}(h{void drm_bridge_hpd_enable(struct drm_bridge *bridge, void (*cb)(void *data, enum drm_connector_status status), void *data)h](j)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhMubj)}(hdrm_bridge_hpd_enableh]j)}(hdrm_bridge_hpd_enableh]hdrm_bridge_hpd_enable}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjmhMubj)}(ha(struct drm_bridge *bridge, void (*cb)(void *data, enum drm_connector_status status), void *data)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j%)}jjmsbc.drm_bridge_hpd_enableasbuh1hhjmubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hj$nhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hbridgeh]hbridge}(hj1nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(h8void (*cb)(void *data, enum drm_connector_status status)h](j)}(hvoidh]hvoid}(hjJnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj)}(h h]h }(hjXnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj9)}(h(h]h(}(hjfnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubj9)}(hj9h]h*}(hjtnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubj)}(hcbh]hcb}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj9)}(h)h]h)}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubj9)}(hjhnh]h(}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubj)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj9)}(hj9h]h*}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubj)}(hdatah]hdata}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj9)}(h,h]h,}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj)}(hjl h]henum}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj)}(h h]h }(hj ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jnc.drm_bridge_hpd_enableasbuh1hhjFnubj)}(h h]h }(hj9ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj)}(hstatush]hstatus}(hjGohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFnubj9)}(hjnh]h)}(hjUohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(h void *datah](j)}(hvoidh]hvoid}(hjmohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjioubj)}(h h]h }(hj{ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjioubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjioubj)}(hdatah]hdata}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjioubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubeh}(h]h ]h"]h$]h&]jjuh1jhjmhhhjmhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjmhhhjmhMubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjmhMhjmhhubj)}(hhh]h)}(h(enable hot plug detection for the bridgeh]h(enable hot plug detection for the bridge}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjohhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``void (*cb)(void *data, enum drm_connector_status status)`` hot-plug detection callback ``void *data`` data to be passed to the hot-plug detection callback **Description** Call :c:type:`drm_bridge_funcs.hpd_enable ` if implemented and register the given **cb** and **data** as hot plug notification callback. From now on the **cb** will be called with **data** when an output status change is detected by the bridge, until hot plug notification gets disabled with drm_bridge_hpd_disable(). Hot plug detection is supported only if the DRM_BRIDGE_OP_HPD flag is set in bridge->ops. This function shall not be called when the flag is not set. Only one hot plug detection callback can be registered at a time, it is an error to call this function when hot plug detection is already enabled for the bridge.h](h)}(h**Parameters**h]j%)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjoubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjph]hstruct drm_bridge *bridge}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjoubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjoubjn)}(hY``void (*cb)(void *data, enum drm_connector_status status)`` hot-plug detection callback h](jt)}(h<``void (*cb)(void *data, enum drm_connector_status status)``h]jz)}(hj:ph]h8void (*cb)(void *data, enum drm_connector_status status)}(hj` if implemented and register the given **cb** and **data** as hot plug notification callback. From now on the **cb** will be called with **data** when an output status change is detected by the bridge, until hot plug notification gets disabled with drm_bridge_hpd_disable().h](hCall }(hjphhhNhNubh)}(h8:c:type:`drm_bridge_funcs.hpd_enable `h]jz)}(hjph]hdrm_bridge_funcs.hpd_enable}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjpubh' if implemented and register the given }(hjphhhNhNubj%)}(h**cb**h]hcb}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubh and }(hjphhhNhNubj%)}(h**data**h]hdata}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubh4 as hot plug notification callback. From now on the }(hjphhhNhNubj%)}(h**cb**h]hcb}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubh will be called with }(hjphhhNhNubj%)}(h**data**h]hdata}(hj&qhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubh when an output status change is detected by the bridge, until hot plug notification gets disabled with drm_bridge_hpd_disable().}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjoubh)}(hHot plug detection is supported only if the DRM_BRIDGE_OP_HPD flag is set in bridge->ops. This function shall not be called when the flag is not set.h]hHot plug detection is supported only if the DRM_BRIDGE_OP_HPD flag is set in bridge->ops. This function shall not be called when the flag is not set.}(hj>qhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjoubh)}(hOnly one hot plug detection callback can be registered at a time, it is an error to call this function when hot plug detection is already enabled for the bridge.h]hOnly one hot plug detection callback can be registered at a time, it is an error to call this function when hot plug detection is already enabled for the bridge.}(hjMqhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_bridge_hpd_disable (C function)c.drm_bridge_hpd_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h7void drm_bridge_hpd_disable (struct drm_bridge *bridge)h]j)}(h6void drm_bridge_hpd_disable(struct drm_bridge *bridge)h](j)}(hvoidh]hvoid}(hj|qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxqhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxqhhhjqhMubj)}(hdrm_bridge_hpd_disableh]j)}(hdrm_bridge_hpd_disableh]hdrm_bridge_hpd_disable}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxqhhhjqhMubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j%)}jjqsbc.drm_bridge_hpd_disableasbuh1hhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(hbridgeh]hbridge}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubah}(h]h ]h"]h$]h&]jjuh1jhjxqhhhjqhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjtqhhhjqhMubah}(h]joqah ](jjeh"]h$]h&]jj)jhuh1jhjqhMhjqqhhubj)}(hhh]h)}(h)disable hot plug detection for the bridgeh]h)disable hot plug detection for the bridge}(hj` if implemented and unregister the hot plug detection callback previously registered with drm_bridge_hpd_enable(). Once this function returns the callback will not be called by the bridge when an output status change occurs. Hot plug detection is supported only if the DRM_BRIDGE_OP_HPD flag is set in bridge->ops. This function shall not be called when the flag is not set.h](h)}(h**Parameters**h]j%)}(hj^rh]h Parameters}(hj`rhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\rubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjXrubji)}(hhh]jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj}rh]hstruct drm_bridge *bridge}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{rubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjwrubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjwrubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjtrubah}(h]h ]h"]h$]h&]uh1jhhjXrubh)}(h**Description**h]j%)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjXrubh)}(hXCall :c:type:`drm_bridge_funcs.hpd_disable ` if implemented and unregister the hot plug detection callback previously registered with drm_bridge_hpd_enable(). Once this function returns the callback will not be called by the bridge when an output status change occurs.h](hCall }(hjrhhhNhNubh)}(h9:c:type:`drm_bridge_funcs.hpd_disable `h]jz)}(hjrh]hdrm_bridge_funcs.hpd_disable}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjrubh if implemented and unregister the hot plug detection callback previously registered with drm_bridge_hpd_enable(). Once this function returns the callback will not be called by the bridge when an output status change occurs.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjXrubh)}(hHot plug detection is supported only if the DRM_BRIDGE_OP_HPD flag is set in bridge->ops. This function shall not be called when the flag is not set.h]hHot plug detection is supported only if the DRM_BRIDGE_OP_HPD flag is set in bridge->ops. This function shall not be called when the flag is not set.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjXrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_bridge_hpd_notify (C function)c.drm_bridge_hpd_notifyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hXvoid drm_bridge_hpd_notify (struct drm_bridge *bridge, enum drm_connector_status status)h]j)}(hWvoid drm_bridge_hpd_notify(struct drm_bridge *bridge, enum drm_connector_status status)h](j)}(hvoidh]hvoid}(hj/shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+shhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hj>shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+shhhj=shMubj)}(hdrm_bridge_hpd_notifyh]j)}(hdrm_bridge_hpd_notifyh]hdrm_bridge_hpd_notify}(hjPshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLsubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+shhhj=shMubj)}(h=(struct drm_bridge *bridge, enum drm_connector_status status)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjlshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhsubj)}(h h]h }(hjyshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhsubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j%)}jjRssbc.drm_bridge_hpd_notifyasbuh1hhjhsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhsubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhsubj)}(hbridgeh]hbridge}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdsubj)}(h enum drm_connector_status statush](j)}(hjl h]henum}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]jsc.drm_bridge_hpd_notifyasbuh1hhjsubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hstatush]hstatus}(hj(thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdsubeh}(h]h ]h"]h$]h&]jjuh1jhj+shhhj=shMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'shhhj=shMubah}(h]j"sah ](jjeh"]h$]h&]jj)jhuh1jhj=shMhj$shhubj)}(hhh]h)}(h notify hot plug detection eventsh]h notify hot plug detection events}(hjRthhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjOthhubah}(h]h ]h"]h$]h&]uh1jhj$shhhj=shMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjtjjjtjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``enum drm_connector_status status`` output connection status **Description** Bridge drivers shall call this function to report hot plug events when they detect a change in the output status, when hot plug detection has been enabled by drm_bridge_hpd_enable(). This function shall be called in a context that can sleep.h](h)}(h**Parameters**h]j%)}(hjtth]h Parameters}(hjvthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrtubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjntubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjth]hstruct drm_bridge *bridge}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjtubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthMhjtubjn)}(h>``enum drm_connector_status status`` output connection status h](jt)}(h$``enum drm_connector_status status``h]jz)}(hjth]h enum drm_connector_status status}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjtubj)}(hhh]h)}(houtput connection statush]houtput connection status}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthMhjtubeh}(h]h ]h"]h$]h&]uh1jhhjntubh)}(h**Description**h]j%)}(hjuh]h Description}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjntubh)}(hBridge drivers shall call this function to report hot plug events when they detect a change in the output status, when hot plug detection has been enabled by drm_bridge_hpd_enable().h]hBridge drivers shall call this function to report hot plug events when they detect a change in the output status, when hot plug detection has been enabled by drm_bridge_hpd_enable().}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjntubh)}(h:This function shall be called in a context that can sleep.h]h:This function shall be called in a context that can sleep.}(hj,uhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjntubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jof_drm_find_bridge (C function)c.of_drm_find_bridgehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h?struct drm_bridge * of_drm_find_bridge (struct device_node *np)h]j)}(h=struct drm_bridge *of_drm_find_bridge(struct device_node *np)h](j)}(hjh]hstruct}(hj[uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWuhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjiuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWuhhhjhuhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjzuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|umodnameN classnameNjj)}j]j%)}jof_drm_find_bridgesbc.of_drm_find_bridgeasbuh1hhjWuhhhjhuhMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWuhhhjhuhMubj9)}(hj9h]h*}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWuhhhjhuhMubj)}(hof_drm_find_bridgeh]j)}(hjuh]hof_drm_find_bridge}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWuhhhjhuhMubj)}(h(struct device_node *np)h]j)}(hstruct device_node *nph](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h device_nodeh]h device_node}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]juc.of_drm_find_bridgeasbuh1hhjuubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubj)}(hnph]hnp}(hj,vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubah}(h]h ]h"]h$]h&]jjuh1jhjWuhhhjhuhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjSuhhhjhuhMubah}(h]jNuah ](jjeh"]h$]h&]jj)jhuh1jhjhuhMhjPuhhubj)}(hhh]h)}(hJfind the bridge corresponding to the device node in the global bridge listh]hJfind the bridge corresponding to the device node in the global bridge list}(hjVvhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjSvhhubah}(h]h ]h"]h$]h&]uh1jhjPuhhhjhuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnvjjnvjjjuh1jhhhjhNhNubj)}(h{**Parameters** ``struct device_node *np`` device node **Return** drm_bridge control struct on success, NULL on failureh](h)}(h**Parameters**h]j%)}(hjxvh]h Parameters}(hjzvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvvubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjrvubji)}(hhh]jn)}(h'``struct device_node *np`` device node h](jt)}(h``struct device_node *np``h]jz)}(hjvh]hstruct device_node *np}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjvubj)}(hhh]h)}(h device nodeh]h device node}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhhjrvubh)}(h **Return**h]j%)}(hjvh]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjrvubh)}(h5drm_bridge control struct on success, NULL on failureh]h5drm_bridge control struct on success, NULL on failure}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjrvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]bridge-helper-referenceah ]h"]bridge helper referenceah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(hMIPI-DSI bridge operationh]hMIPI-DSI bridge operation}(hj whhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhhhhhKubh)}(hDSI host interfaces are expected to be implemented as bridges rather than encoders, however there are a few aspects of their operation that need to be defined in order to provide a consistent interface.h]hDSI host interfaces are expected to be implemented as bridges rather than encoders, however there are a few aspects of their operation that need to be defined in order to provide a consistent interface.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjwhhubh)}(hXgA DSI host should keep the PHY powered down until the pre_enable operation is called. All lanes are in an undefined idle state up to this point, and it must not be assumed that it is LP-11. pre_enable should initialise the PHY, set the data lanes to LP-11, and the clock lane to either LP-11 or HS depending on the mode_flag ``MIPI_DSI_CLOCK_NON_CONTINUOUS``.h](hXEA DSI host should keep the PHY powered down until the pre_enable operation is called. All lanes are in an undefined idle state up to this point, and it must not be assumed that it is LP-11. pre_enable should initialise the PHY, set the data lanes to LP-11, and the clock lane to either LP-11 or HS depending on the mode_flag }(hj&whhhNhNubjz)}(h!``MIPI_DSI_CLOCK_NON_CONTINUOUS``h]hMIPI_DSI_CLOCK_NON_CONTINUOUS}(hj.whhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&wubh.}(hj&whhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjwhhubh)}(hX^Ordinarily the downstream bridge DSI peripheral pre_enable will have been called before the DSI host. If the DSI peripheral requires LP-11 and/or the clock lane to be in HS mode prior to pre_enable, then it can set the :c:type:`pre_enable_prev_first` flag to request the pre_enable (and post_disable) order to be altered to enable the DSI host first.h](hOrdinarily the downstream bridge DSI peripheral pre_enable will have been called before the DSI host. If the DSI peripheral requires LP-11 and/or the clock lane to be in HS mode prior to pre_enable, then it can set the }(hjGwhhhNhNubh)}(h:c:type:`pre_enable_prev_first`h]jz)}(hjQwh]hpre_enable_prev_first}(hjSwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpre_enable_prev_firstuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjGwubhd flag to request the pre_enable (and post_disable) order to be altered to enable the DSI host first.}(hjGwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnwhKhjwhhubh)}(hEither the CRTC being enabled, or the DSI host enable operation should switch the host to actively transmitting video on the data lanes.h]hEither the CRTC being enabled, or the DSI host enable operation should switch the host to actively transmitting video on the data lanes.}(hjywhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjwhhubh)}(hXThe reverse also applies. The DSI host disable operation or stopping the CRTC should stop transmitting video, and the data lanes should return to the LP-11 state. The DSI host :c:type:`post_disable` operation should disable the PHY. If the :c:type:`pre_enable_prev_first` flag is set, then the DSI peripheral's bridge :c:type:`post_disable` will be called before the DSI host's post_disable.h](hThe reverse also applies. The DSI host disable operation or stopping the CRTC should stop transmitting video, and the data lanes should return to the LP-11 state. The DSI host }(hjwhhhNhNubh)}(h:c:type:`post_disable`h]jz)}(hjwh]h post_disable}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj post_disableuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjwubh* operation should disable the PHY. If the }(hjwhhhNhNubh)}(h:c:type:`pre_enable_prev_first`h]jz)}(hjwh]hpre_enable_prev_first}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpre_enable_prev_firstuh1hhjwhKhjwubh1 flag is set, then the DSI peripheral’s bridge }(hjwhhhNhNubh)}(h:c:type:`post_disable`h]jz)}(hjwh]h post_disable}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj post_disableuh1hhjwhKhjwubh5 will be called before the DSI host’s post_disable.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhKhjwhhubh)}(hWhilst it is valid to call :c:type:`host_transfer` prior to pre_enable or after post_disable, the exact state of the lanes is undefined at this point. The DSI host should initialise the interface, transmit the data, and then disable the interface again.h](hWhilst it is valid to call }(hjxhhhNhNubh)}(h:c:type:`host_transfer`h]jz)}(hj xh]h host_transfer}(hj xhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj host_transferuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjxubh prior to pre_enable or after post_disable, the exact state of the lanes is undefined at this point. The DSI host should initialise the interface, transmit the data, and then disable the interface again.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'xhKhjwhhubh)}(hUltra Low Power State (ULPS) is not explicitly supported by DRM. If implemented, it therefore needs to be handled entirely within the DSI Host driver.h]hUltra Low Power State (ULPS) is not explicitly supported by DRM. If implemented, it therefore needs to be handled entirely within the DSI Host driver.}(hj2xhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjwhhubeh}(h]mipi-dsi-bridge-operationah ]h"]mipi-dsi bridge operationah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(h!Bridge Connector Helper Referenceh]h!Bridge Connector Helper Reference}(hjLxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIxhhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_bridge_connector_init (C function)c.drm_bridge_connector_inithNtauh1jxhjIxhhhNhNubj)}(hhh](j)}(hfstruct drm_connector * drm_bridge_connector_init (struct drm_device *drm, struct drm_encoder *encoder)h]j)}(hdstruct drm_connector *drm_bridge_connector_init(struct drm_device *drm, struct drm_encoder *encoder)h](j)}(hjh]hstruct}(hjsxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoxhhhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoxhhhjxhMubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j%)}jdrm_bridge_connector_initsbc.drm_bridge_connector_initasbuh1hhjoxhhhjxhMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoxhhhjxhMubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoxhhhjxhMubj)}(hdrm_bridge_connector_inith]j)}(hjxh]hdrm_bridge_connector_init}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjoxhhhjxhMubj)}(h5(struct drm_device *drm, struct drm_encoder *encoder)h](j)}(hstruct drm_device *drmh](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj ymodnameN classnameNjj)}j]jxc.drm_bridge_connector_initasbuh1hhjxubj)}(h h]h }(hj)yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hj7yhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hdrmh]hdrm}(hjDyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hstruct drm_encoder *encoderh](j)}(hjh]hstruct}(hj]yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYyubj)}(h h]h }(hjjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYyubh)}(hhh]j)}(h drm_encoderh]h drm_encoder}(hj{yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}ymodnameN classnameNjj)}j]jxc.drm_bridge_connector_initasbuh1hhjYyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYyubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYyubj)}(hencoderh]hencoder}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhjoxhhhjxhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkxhhhjxhMubah}(h]jfxah ](jjeh"]h$]h&]jj)jhuh1jhjxhMhjhxhhubj)}(hhh]h)}(h-Initialise a connector for a chain of bridgesh]h-Initialise a connector for a chain of bridges}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jhjhxhhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jhhhjIxhNhNubj)}(hX**Parameters** ``struct drm_device *drm`` the DRM device ``struct drm_encoder *encoder`` the encoder where the bridge chain starts **Description** Allocate, initialise and register a :c:type:`drm_bridge_connector` with the **drm** device. The connector is associated with a chain of bridges that starts at the **encoder**. All bridges in the chain shall report bridge operation flags (:c:type:`drm_bridge->ops `) and bridge output type (:c:type:`drm_bridge->type `), and none of them may create a DRM connector directly. Returns a pointer to the new connector on success, or a negative error pointer otherwise.h](h)}(h**Parameters**h]j%)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjyubji)}(hhh](jn)}(h*``struct drm_device *drm`` the DRM device h](jt)}(h``struct drm_device *drm``h]jz)}(hjzh]hstruct drm_device *drm}(hj!zhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjzubj)}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hj8zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4zhMhj5zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhj4zhMhjzubjn)}(hJ``struct drm_encoder *encoder`` the encoder where the bridge chain starts h](jt)}(h``struct drm_encoder *encoder``h]jz)}(hjXzh]hstruct drm_encoder *encoder}(hjZzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVzubah}(h]h ]h"]h$]h&]uh1jshs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjRzubj)}(hhh]h)}(h)the encoder where the bridge chain startsh]h)the encoder where the bridge chain starts}(hjqzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmzhMhjnzubah}(h]h ]h"]h$]h&]uh1jhjRzubeh}(h]h ]h"]h$]h&]uh1jmhjmzhMhjzubeh}(h]h ]h"]h$]h&]uh1jhhjyubh)}(h**Description**h]j%)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjyubh)}(hXAllocate, initialise and register a :c:type:`drm_bridge_connector` with the **drm** device. The connector is associated with a chain of bridges that starts at the **encoder**. All bridges in the chain shall report bridge operation flags (:c:type:`drm_bridge->ops `) and bridge output type (:c:type:`drm_bridge->type `), and none of them may create a DRM connector directly.h](h$Allocate, initialise and register a }(hjzhhhNhNubh)}(h:c:type:`drm_bridge_connector`h]jz)}(hjzh]hdrm_bridge_connector}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_connectoruh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjzubh with the }(hjzhhhNhNubj%)}(h**drm**h]hdrm}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubhP device. The connector is associated with a chain of bridges that starts at the }(hjzhhhNhNubj%)}(h **encoder**h]hencoder}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubh@. All bridges in the chain shall report bridge operation flags (}(hjzhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjzh]hdrm_bridge->ops}(hjzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjzhMhjzubh) and bridge output type (}(hjzhhhNhNubh)}(h':c:type:`drm_bridge->type `h]jz)}(hj{h]hdrm_bridge->type}(hj {hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjzhMhjzubh8), and none of them may create a DRM connector directly.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhMhjyubh)}(hYReturns a pointer to the new connector on success, or a negative error pointer otherwise.h]hYReturns a pointer to the new connector on success, or a negative error pointer otherwise.}(hjE{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIxhhhNhNubeh}(h]!bridge-connector-helper-referenceah ]h"]!bridge connector helper referenceah$]h&]uh1hhjJhhhhhKubh)}(hhh](h)}(hPanel-Bridge Helper Referenceh]hPanel-Bridge Helper Reference}(hjf{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc{hhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_bridge_is_panel (C function)c.drm_bridge_is_panelhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(h:bool drm_bridge_is_panel (const struct drm_bridge *bridge)h]j)}(h9bool drm_bridge_is_panel(const struct drm_bridge *bridge)h](j)}(hjAh]hbool}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hKubj)}(hdrm_bridge_is_panelh]j)}(hdrm_bridge_is_panelh]hdrm_bridge_is_panel}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj{hKubj)}(h!(const struct drm_bridge *bridge)h]j)}(hconst struct drm_bridge *bridgeh](j)}(hjch]hconst}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j%)}jj{sbc.drm_bridge_is_panelasbuh1hhj{ubj)}(h h]h }(hj"|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hj0|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(hbridgeh]hbridge}(hj=|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhj{hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhj{hKubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj{hKhj{hhubj)}(hhh]h)}(h)Checks if a drm_bridge is a panel_bridge.h]h)Checks if a drm_bridge is a panel_bridge.}(hjg|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhjd|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjc{hNhNubj)}(h**Parameters** ``const struct drm_bridge *bridge`` The drm_bridge to be checked. **Description** Returns true if the bridge is a panel bridge, or false otherwise.h](h)}(h**Parameters**h]j%)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj|ubji)}(hhh]jn)}(hB``const struct drm_bridge *bridge`` The drm_bridge to be checked. h](jt)}(h#``const struct drm_bridge *bridge``h]jz)}(hj|h]hconst struct drm_bridge *bridge}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj|ubj)}(hhh]h)}(hThe drm_bridge to be checked.h]hThe drm_bridge to be checked.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj|hKhj|ubah}(h]h ]h"]h$]h&]uh1jhhj|ubh)}(h**Description**h]j%)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj|ubh)}(hAReturns true if the bridge is a panel bridge, or false otherwise.h]hAReturns true if the bridge is a panel bridge, or false otherwise.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_panel_bridge_add (C function)c.drm_panel_bridge_addhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(hBstruct drm_bridge * drm_panel_bridge_add (struct drm_panel *panel)h]j)}(h@struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel)h](j)}(hjh]hstruct}(hj(}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$}hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hj6}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$}hhhj5}hMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjG}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjI}modnameN classnameNjj)}j]j%)}jdrm_panel_bridge_addsbc.drm_panel_bridge_addasbuh1hhj$}hhhj5}hMubj)}(h h]h }(hjh}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$}hhhj5}hMubj9)}(hj9h]h*}(hjv}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj$}hhhj5}hMubj)}(hdrm_panel_bridge_addh]j)}(hje}h]hdrm_panel_bridge_add}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$}hhhj5}hMubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]jc}c.drm_panel_bridge_addasbuh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubj)}(hpanelh]hpanel}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubah}(h]h ]h"]h$]h&]jjuh1jhj$}hhhj5}hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj }hhhj5}hMubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1jhj5}hMhj}hhubj)}(hhh]h)}(h~Creates a :c:type:`drm_bridge` and :c:type:`drm_connector` that just calls the appropriate functions from :c:type:`drm_panel`.h](h Creates a }(hj#~hhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj-~h]h drm_bridge}(hj/~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+~ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc}c.drm_panel_bridge_addasbj drm_bridgeuh1hhj{hKhj#~ubh and }(hj#~hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjU~h]h drm_connector}(hjW~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjS~ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjI~j drm_connectoruh1hhj{hKhj#~ubh0 that just calls the appropriate functions from }(hj#~hhhNhNubh)}(h:c:type:`drm_panel`h]jz)}(hjx~h]h drm_panel}(hjz~hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjv~ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjI~j drm_paneluh1hhj{hKhj#~ubh.}(hj#~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj ~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj5}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjc{hNhNubj)}(hX;**Parameters** ``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. **Description** For drivers converting from directly using drm_panel: The expected usage pattern is that during either encoder module probe or DSI host attach, a drm_panel will be looked up through drm_of_find_panel_or_bridge(). drm_panel_bridge_add() is used to wrap that panel in the new bridge, and the result can then be passed to drm_bridge_attach(). The drm_panel_prepare() and related functions can be dropped from the encoder driver (they're now called by the KMS helpers before calling into the encoder), along with connector creation. When done with the bridge (after drm_mode_config_cleanup() if the bridge has already been attached), then drm_panel_bridge_remove() to free it. The connector type is set to **panel->connector_type**, which must be set to a known type. Calling this function with a panel whose connector type is DRM_MODE_CONNECTOR_Unknown will return ERR_PTR(-EINVAL). See devm_drm_panel_bridge_add() for an automatically managed version of this function.h](h)}(h**Parameters**h]j%)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj~ubji)}(hhh]jn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hj~h]hstruct drm_panel *panel}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj~ubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1jhhj~ubh)}(h**Description**h]j%)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj~ubh)}(hXFor drivers converting from directly using drm_panel: The expected usage pattern is that during either encoder module probe or DSI host attach, a drm_panel will be looked up through drm_of_find_panel_or_bridge(). drm_panel_bridge_add() is used to wrap that panel in the new bridge, and the result can then be passed to drm_bridge_attach(). The drm_panel_prepare() and related functions can be dropped from the encoder driver (they're now called by the KMS helpers before calling into the encoder), along with connector creation. When done with the bridge (after drm_mode_config_cleanup() if the bridge has already been attached), then drm_panel_bridge_remove() to free it.h]hXFor drivers converting from directly using drm_panel: The expected usage pattern is that during either encoder module probe or DSI host attach, a drm_panel will be looked up through drm_of_find_panel_or_bridge(). drm_panel_bridge_add() is used to wrap that panel in the new bridge, and the result can then be passed to drm_bridge_attach(). The drm_panel_prepare() and related functions can be dropped from the encoder driver (they’re now called by the KMS helpers before calling into the encoder), along with connector creation. When done with the bridge (after drm_mode_config_cleanup() if the bridge has already been attached), then drm_panel_bridge_remove() to free it.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj~ubh)}(hThe connector type is set to **panel->connector_type**, which must be set to a known type. Calling this function with a panel whose connector type is DRM_MODE_CONNECTOR_Unknown will return ERR_PTR(-EINVAL).h](hThe connector type is set to }(hj2hhhNhNubj%)}(h**panel->connector_type**h]hpanel->connector_type}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh, which must be set to a known type. Calling this function with a panel whose connector type is DRM_MODE_CONNECTOR_Unknown will return ERR_PTR(-EINVAL).}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhj~ubh)}(hVSee devm_drm_panel_bridge_add() for an automatically managed version of this function.h]hVSee devm_drm_panel_bridge_add() for an automatically managed version of this function.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_panel_bridge_add_typed (C function)c.drm_panel_bridge_add_typedhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(h\struct drm_bridge * drm_panel_bridge_add_typed (struct drm_panel *panel, u32 connector_type)h]j)}(hZstruct drm_bridge *drm_panel_bridge_add_typed(struct drm_panel *panel, u32 connector_type)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_panel_bridge_add_typedsbc.drm_panel_bridge_add_typedasbuh1hhj~hhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~hhhjhMubj)}(hdrm_panel_bridge_add_typedh]j)}(hjh]hdrm_panel_bridge_add_typed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhMubj)}(h-(struct drm_panel *panel, u32 connector_type)h](j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_panel_bridge_add_typedasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 connector_typeh](h)}(hhh]j)}(hu32h]hu32}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.drm_panel_bridge_add_typedasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hconnector_typeh]hconnector_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjwhhubj)}(hhh]h)}(h[Creates a :c:type:`drm_bridge` and :c:type:`drm_connector` with an explicit connector type.h](h Creates a }(hjŀhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjπh]h drm_bridge}(hjрhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj̀ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_panel_bridge_add_typedasbj drm_bridgeuh1hhj{hKhjŀubh and }(hjŀhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj{hKhjŀubh! with an explicit connector type.}(hjŀhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hj€hhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjc{hNhNubj)}(hX**Parameters** ``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. ``u32 connector_type`` The connector type (DRM_MODE_CONNECTOR_*) **Description** This is just like drm_panel_bridge_add(), but forces the connector type to **connector_type** instead of infering it from the panel. This function is deprecated and should not be used in new drivers. Use drm_panel_bridge_add() instead, and fix panel drivers as necessary if they don't report a connector type.h](h)}(h**Parameters**h]j%)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj,ubji)}(hhh](jn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hjQh]hstruct drm_panel *panel}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjKubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjHubjn)}(hA``u32 connector_type`` The connector type (DRM_MODE_CONNECTOR_*) h](jt)}(h``u32 connector_type``h]jz)}(hjh]hu32 connector_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(h)The connector type (DRM_MODE_CONNECTOR_*)h]h)The connector type (DRM_MODE_CONNECTOR_*)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjHubeh}(h]h ]h"]h$]h&]uh1jhhj,ubh)}(h**Description**h]j%)}(hjŁh]h Description}(hjǁhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjÁubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj,ubh)}(hThis is just like drm_panel_bridge_add(), but forces the connector type to **connector_type** instead of infering it from the panel.h](hKThis is just like drm_panel_bridge_add(), but forces the connector type to }(hjہhhhNhNubj%)}(h**connector_type**h]hconnector_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjہubh' instead of infering it from the panel.}(hjہhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj,ubh)}(hThis function is deprecated and should not be used in new drivers. Use drm_panel_bridge_add() instead, and fix panel drivers as necessary if they don't report a connector type.h]hThis function is deprecated and should not be used in new drivers. Use drm_panel_bridge_add() instead, and fix panel drivers as necessary if they don’t report a connector type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_panel_bridge_remove (C function)c.drm_panel_bridge_removehNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(h8void drm_panel_bridge_remove (struct drm_bridge *bridge)h]j)}(h7void drm_panel_bridge_remove(struct drm_bridge *bridge)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hM:ubj)}(hdrm_panel_bridge_removeh]j)}(hdrm_panel_bridge_removeh]hdrm_panel_bridge_remove}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hM:ubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjNsbc.drm_panel_bridge_removeasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubah}(h]h ]h"]h$]h&]jjuh1jhj'hhhj9hM:ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hM:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj9hM:hj hhubj)}(hhh]h)}(hEUnregisters and frees a drm_bridge created by drm_panel_bridge_add().h]hEUnregisters and frees a drm_bridge created by drm_panel_bridge_add().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjc{hNhNubj)}(hK**Parameters** ``struct drm_bridge *bridge`` The drm_bridge being freed.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM9hjubji)}(hhh]jn)}(h9``struct drm_bridge *bridge`` The drm_bridge being freed.h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj,h]hstruct drm_bridge *bridge}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM;hj&ubj)}(hhh]h)}(hThe drm_bridge being freed.h]hThe drm_bridge being freed.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM8hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhM;hj#ubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_panel_bridge_set_orientation (C function)"c.drm_panel_bridge_set_orientationhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(haint drm_panel_bridge_set_orientation (struct drm_connector *connector, struct drm_bridge *bridge)h]j)}(h`int drm_panel_bridge_set_orientation(struct drm_connector *connector, struct drm_bridge *bridge)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMVubj)}(h drm_panel_bridge_set_orientationh]j)}(h drm_panel_bridge_set_orientationh]h drm_panel_bridge_set_orientation}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMVubj)}(h<(struct drm_connector *connector, struct drm_bridge *bridge)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjÃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjЃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjރubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb"c.drm_panel_bridge_set_orientationasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j"c.drm_panel_bridge_set_orientationasbuh1hhj1ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1ubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhjhMVubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1jhjhMVhj{hhubj)}(hhh]h)}(h^Set the connector's panel orientation from the bridge that can be transformed to panel bridge.h]h`Set the connector’s panel orientation from the bridge that can be transformed to panel bridge.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj΄jj΄jjjuh1jhhhjc{hNhNubj)}(h**Parameters** ``struct drm_connector *connector`` The connector to be set panel orientation. ``struct drm_bridge *bridge`` The drm_bridge to be transformed to panel bridge. **Description** Returns 0 on success, negative errno on failure.h](h)}(h**Parameters**h]j%)}(hj؄h]h Parameters}(hjڄhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjքubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMRhj҄ubji)}(hhh](jn)}(hO``struct drm_connector *connector`` The connector to be set panel orientation. h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMQhjubj)}(hhh]h)}(h*The connector to be set panel orientation.h]h*The connector to be set panel orientation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMQhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMQhjubjn)}(hP``struct drm_bridge *bridge`` The drm_bridge to be transformed to panel bridge. h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj0h]hstruct drm_bridge *bridge}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMRhj*ubj)}(hhh]h)}(h1The drm_bridge to be transformed to panel bridge.h]h1The drm_bridge to be transformed to panel bridge.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMRhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhjEhMRhjubeh}(h]h ]h"]h$]h&]uh1jhhj҄ubh)}(h**Description**h]j%)}(hjkh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMThj҄ubh)}(h0Returns 0 on success, negative errno on failure.h]h0Returns 0 on success, negative errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMThj҄ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&devm_drm_panel_bridge_add (C function)c.devm_drm_panel_bridge_addhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(h[struct drm_bridge * devm_drm_panel_bridge_add (struct device *dev, struct drm_panel *panel)h]j)}(hYstruct drm_bridge *devm_drm_panel_bridge_add(struct device *dev, struct drm_panel *panel)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMuubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjυhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̅ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjхmodnameN classnameNjj)}j]j%)}jdevm_drm_panel_bridge_addsbc.devm_drm_panel_bridge_addasbuh1hhjhhhjhMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMuubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMuubj)}(hdevm_drm_panel_bridge_addh]j)}(hjh]hdevm_drm_panel_bridge_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMuubj)}(h-(struct device *dev, struct drm_panel *panel)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(hdeviceh]hdevice}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jc.devm_drm_panel_bridge_addasbuh1hhj&ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.devm_drm_panel_bridge_addasbuh1hhjubj)}(h h]h }(hjֆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMuhjhhubj)}(hhh]h)}(hCreates a managed :c:type:`drm_bridge` and :c:type:`drm_connector` that just calls the appropriate functions from :c:type:`drm_panel`.h](hCreates a managed }(hjhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj%h]h drm_bridge}(hj'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.devm_drm_panel_bridge_addasbj drm_bridgeuh1hhj{hKhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjMh]h drm_connector}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjAj drm_connectoruh1hhj{hKhjubh0 that just calls the appropriate functions from }(hjhhhNhNubh)}(h:c:type:`drm_panel`h]jz)}(hjph]h drm_panel}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjAj drm_paneluh1hhj{hKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjc{hNhNubj)}(hX1**Parameters** ``struct device *dev`` device to tie the bridge lifetime to ``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. **Description** This is the managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when **dev** is unbound.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMqhjubji)}(hhh](jn)}(h<``struct device *dev`` device to tie the bridge lifetime to h](jt)}(h``struct device *dev``h]jz)}(hjʇh]hstruct device *dev}(hj̇hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjȇubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMohjćubj)}(hhh]h)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj߇hMohjubah}(h]h ]h"]h$]h&]uh1jhjćubeh}(h]h ]h"]h$]h&]uh1jmhj߇hMohjubjn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hjh]hstruct drm_panel *panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMphjubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMphjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMrhjubh)}(hThis is the managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when **dev** is unbound.h](hoThis is the managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when }(hjThhhNhNubj%)}(h**dev**h]hdev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh is unbound.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMrhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,devm_drm_panel_bridge_add_typed (C function)!c.devm_drm_panel_bridge_add_typedhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(hustruct drm_bridge * devm_drm_panel_bridge_add_typed (struct device *dev, struct drm_panel *panel, u32 connector_type)h]j)}(hsstruct drm_bridge *devm_drm_panel_bridge_add_typed(struct device *dev, struct drm_panel *panel, u32 connector_type)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdevm_drm_panel_bridge_add_typedsb!c.devm_drm_panel_bridge_add_typedasbuh1hhjhhhjhMubj)}(h h]h }(hjՈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdevm_drm_panel_bridge_add_typedh]j)}(hj҈h]hdevm_drm_panel_bridge_add_typed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hA(struct device *dev, struct drm_panel *panel, u32 connector_type)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]jЈ!c.devm_drm_panel_bridge_add_typedasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjYhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdevh]hdev}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jЈ!c.devm_drm_panel_bridge_add_typedasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hjɉhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(hpanelh]hpanel}(hj։hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 connector_typeh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jЈ!c.devm_drm_panel_bridge_add_typedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hconnector_typeh]hconnector_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hcCreates a managed :c:type:`drm_bridge` and :c:type:`drm_connector` with an explicit connector type.h](hCreates a managed }(hjHhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjRh]h drm_bridge}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jЈ!c.devm_drm_panel_bridge_add_typedasbj drm_bridgeuh1hhj{hKhjHubh and }(hjHhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjzh]h drm_connector}(hj|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjnj drm_connectoruh1hhj{hKhjHubh! with an explicit connector type.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjc{hNhNubj)}(hX3**Parameters** ``struct device *dev`` device to tie the bridge lifetime to ``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. ``u32 connector_type`` The connector type (DRM_MODE_CONNECTOR_*) **Description** This is just like devm_drm_panel_bridge_add(), but forces the connector type to **connector_type** instead of infering it from the panel. This function is deprecated and should not be used in new drivers. Use devm_drm_panel_bridge_add() instead, and fix panel drivers as necessary if they don't report a connector type.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubji)}(hhh](jn)}(h<``struct device *dev`` device to tie the bridge lifetime to h](jt)}(h``struct device *dev``h]jz)}(hjԊh]hstruct device *dev}(hj֊hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҊubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjΊubj)}(hhh]h)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjΊubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjˊubjn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hj h]hstruct drm_panel *panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjˊubjn)}(hA``u32 connector_type`` The connector type (DRM_MODE_CONNECTOR_*) h](jt)}(h``u32 connector_type``h]jz)}(hjFh]hu32 connector_type}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj@ubj)}(hhh]h)}(h)The connector type (DRM_MODE_CONNECTOR_*)h]h)The connector type (DRM_MODE_CONNECTOR_*)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjˊubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubh)}(hThis is just like devm_drm_panel_bridge_add(), but forces the connector type to **connector_type** instead of infering it from the panel.h](hPThis is just like devm_drm_panel_bridge_add(), but forces the connector type to }(hjhhhNhNubj%)}(h**connector_type**h]hconnector_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh' instead of infering it from the panel.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubh)}(hThis function is deprecated and should not be used in new drivers. Use devm_drm_panel_bridge_add() instead, and fix panel drivers as necessary if they don't report a connector type.h]hThis function is deprecated and should not be used in new drivers. Use devm_drm_panel_bridge_add() instead, and fix panel drivers as necessary if they don’t report a connector type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drmm_panel_bridge_add (C function)c.drmm_panel_bridge_addhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(h[struct drm_bridge * drmm_panel_bridge_add (struct drm_device *drm, struct drm_panel *panel)h]j)}(hYstruct drm_bridge *drmm_panel_bridge_add(struct drm_device *drm, struct drm_panel *panel)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrmm_panel_bridge_addsbc.drmm_panel_bridge_addasbuh1hhjhhhjhMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdrmm_panel_bridge_addh]j)}(hj$h]hdrmm_panel_bridge_add}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h1(struct drm_device *drm, struct drm_panel *panel)h](j)}(hstruct drm_device *drmh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drmm_panel_bridge_addasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjьhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͌ubj)}(h h]h }(hjތhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͌ubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drmm_panel_bridge_addasbuh1hhj͌ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͌ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj͌ubj)}(hpanelh]hpanel}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͌ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjߋhhhjhMubah}(h]jڋah ](jjeh"]h$]h&]jj)jhuh1jhjhMhj܋hhubj)}(hhh]h)}(hCreates a DRM-managed :c:type:`drm_bridge` and :c:type:`drm_connector` that just calls the appropriate functions from :c:type:`drm_panel`.h](hCreates a DRM-managed }(hjRhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj\h]h drm_bridge}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j"c.drmm_panel_bridge_addasbj drm_bridgeuh1hhj{hKhjRubh and }(hjRhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjh]h drm_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjxj drm_connectoruh1hhj{hKhjRubh0 that just calls the appropriate functions from }(hjRhhhNhNubh)}(h:c:type:`drm_panel`h]jz)}(hjh]h drm_panel}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjxj drm_paneluh1hhj{hKhjRubh.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhj܋hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj؍jj؍jjjuh1jhhhjc{hNhNubj)}(hX@**Parameters** ``struct drm_device *drm`` DRM device to tie the bridge lifetime to ``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. **Description** This is the DRM-managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when **dev** is cleaned up.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj܍ubji)}(hhh](jn)}(hD``struct drm_device *drm`` DRM device to tie the bridge lifetime to h](jt)}(h``struct drm_device *drm``h]jz)}(hjh]hstruct drm_device *drm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(h(DRM device to tie the bridge lifetime toh]h(DRM device to tie the bridge lifetime to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hj:h]hstruct drm_panel *panel}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj4ubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhMhjubeh}(h]h ]h"]h$]h&]uh1jhhj܍ubh)}(h**Description**h]j%)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj܍ubh)}(hThis is the DRM-managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when **dev** is cleaned up.h](hsThis is the DRM-managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is cleaned up.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj܍ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_panel_bridge_connector (C function)c.drm_panel_bridge_connectorhNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(hMstruct drm_connector * drm_panel_bridge_connector (struct drm_bridge *bridge)h]j)}(hKstruct drm_connector *drm_panel_bridge_connector(struct drm_bridge *bridge)h](j)}(hjh]hstruct}(hj̎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȎhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hjڎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȎhhhjَhMubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_panel_bridge_connectorsbc.drm_panel_bridge_connectorasbuh1hhjȎhhhjَhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȎhhhjَhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjȎhhhjَhMubj)}(hdrm_panel_bridge_connectorh]j)}(hj h]hdrm_panel_bridge_connector}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjȎhhhjَhMubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jc.drm_panel_bridge_connectorasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubah}(h]h ]h"]h$]h&]jjuh1jhjȎhhhjَhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjĎhhhjَhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjَhMhjhhubj)}(hhh]h)}(h)return the connector for the panel bridgeh]h)return the connector for the panel bridge}(hjǏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjďhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjَhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjߏjjߏjjjuh1jhhhjc{hNhNubj)}(h**Parameters** ``struct drm_bridge *bridge`` The drm_bridge. **Description** drm_panel_bridge creates the connector. This function gives external access to the connector. **Return** Pointer to drm_connectorh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubji)}(hhh]jn)}(h.``struct drm_bridge *bridge`` The drm_bridge. h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjh]hstruct drm_bridge *bridge}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(hThe drm_bridge.h]hThe drm_bridge.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubh)}(h]drm_panel_bridge creates the connector. This function gives external access to the connector.h]h]drm_panel_bridge creates the connector. This function gives external access to the connector.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubh)}(h **Return**h]j%)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubh)}(hPointer to drm_connectorh]hPointer to drm_connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#devm_drm_of_get_bridge (C function)c.devm_drm_of_get_bridgehNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(hostruct drm_bridge * devm_drm_of_get_bridge (struct device *dev, struct device_node *np, u32 port, u32 endpoint)h]j)}(hmstruct drm_bridge *devm_drm_of_get_bridge(struct device *dev, struct device_node *np, u32 port, u32 endpoint)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjΐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjːubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjАmodnameN classnameNjj)}j]j%)}jdevm_drm_of_get_bridgesbc.devm_drm_of_get_bridgeasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdevm_drm_of_get_bridgeh]j)}(hjh]hdevm_drm_of_get_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hD(struct device *dev, struct device_node *np, u32 port, u32 endpoint)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(hdeviceh]hdevice}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jc.devm_drm_of_get_bridgeasbuh1hhj%ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj%ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hstruct device_node *nph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.devm_drm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hjՑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hu32 porth](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.devm_drm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(h u32 endpointh](h)}(hhh]j)}(hu32h]hu32}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]jc.devm_drm_of_get_bridgeasbuh1hhjMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hendpointh]hendpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hReturn next bridge in the chainh]hReturn next bridge in the chain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj’jj’jjjuh1jhhhjc{hNhNubj)}(hX**Parameters** ``struct device *dev`` device to tie the bridge lifetime to ``struct device_node *np`` device tree node containing encoder output ports ``u32 port`` port in the device tree node ``u32 endpoint`` endpoint in the device tree node **Description** Given a DT node's port and endpoint number, finds the connected node and returns the associated bridge if any, or creates and returns a drm panel bridge instance if a panel is connected. Returns a pointer to the bridge if successful, or an error pointer otherwise.h](h)}(h**Parameters**h]j%)}(hj̒h]h Parameters}(hjΒhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjʒubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjƒubji)}(hhh](jn)}(h<``struct device *dev`` device to tie the bridge lifetime to h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hL``struct device_node *np`` device tree node containing encoder output ports h](jt)}(h``struct device_node *np``h]jz)}(hj$h]hstruct device_node *np}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(h0device tree node containing encoder output portsh]h0device tree node containing encoder output ports}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhjubjn)}(h*``u32 port`` port in the device tree node h](jt)}(h ``u32 port``h]jz)}(hj]h]hu32 port}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjWubj)}(hhh]h)}(hport in the device tree nodeh]hport in the device tree node}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjubjn)}(h2``u32 endpoint`` endpoint in the device tree node h](jt)}(h``u32 endpoint``h]jz)}(hjh]h u32 endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjubj)}(hhh]h)}(h endpoint in the device tree nodeh]h endpoint in the device tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjƒubh)}(h**Description**h]j%)}(hjѓh]h Description}(hjӓhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjϓubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjƒubh)}(hGiven a DT node's port and endpoint number, finds the connected node and returns the associated bridge if any, or creates and returns a drm panel bridge instance if a panel is connected.h]hGiven a DT node’s port and endpoint number, finds the connected node and returns the associated bridge if any, or creates and returns a drm panel bridge instance if a panel is connected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjƒubh)}(hMReturns a pointer to the bridge if successful, or an error pointer otherwise.h]hMReturns a pointer to the bridge if successful, or an error pointer otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjƒubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrmm_of_get_bridge (C function)c.drmm_of_get_bridgehNtauh1jxhjc{hhhNhNubj)}(hhh](j)}(hostruct drm_bridge * drmm_of_get_bridge (struct drm_device *drm, struct device_node *np, u32 port, u32 endpoint)h]j)}(hmstruct drm_bridge *drmm_of_get_bridge(struct drm_device *drm, struct device_node *np, u32 port, u32 endpoint)h](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj2hMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j%)}jdrmm_of_get_bridgesbc.drmm_of_get_bridgeasbuh1hhj!hhhj2hMubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj2hMubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!hhhj2hMubj)}(hdrmm_of_get_bridgeh]j)}(hjbh]hdrmm_of_get_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj2hMubj)}(hH(struct drm_device *drm, struct device_node *np, u32 port, u32 endpoint)h](j)}(hstruct drm_device *drmh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j`c.drmm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hj۔hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device_node *nph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h device_nodeh]h device_node}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j`c.drmm_of_get_bridgeasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjYhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hnph]hnp}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 porth](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j`c.drmm_of_get_bridgeasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 endpointh](h)}(hhh]j)}(hu32h]hu32}(hjʕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǕubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj̕modnameN classnameNjj)}j]j`c.drmm_of_get_bridgeasbuh1hhjÕubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÕubj)}(hendpointh]hendpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÕubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj2hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj2hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj2hMhjhhubj)}(hhh]h)}(hReturn next bridge in the chainh]hReturn next bridge in the chain}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1jhhhjc{hNhNubj)}(hX+**Parameters** ``struct drm_device *drm`` device to tie the bridge lifetime to ``struct device_node *np`` device tree node containing encoder output ports ``u32 port`` port in the device tree node ``u32 endpoint`` endpoint in the device tree node **Description** Given a DT node's port and endpoint number, finds the connected node and returns the associated bridge if any, or creates and returns a drm panel bridge instance if a panel is connected. Returns a drmm managed pointer to the bridge if successful, or an error pointer otherwise.h](h)}(h**Parameters**h]j%)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hj<ubji)}(hhh](jn)}(h@``struct drm_device *drm`` device to tie the bridge lifetime to h](jt)}(h``struct drm_device *drm``h]jz)}(hjah]hstruct drm_device *drm}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj[ubj)}(hhh]h)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhjvhMhjXubjn)}(hL``struct device_node *np`` device tree node containing encoder output ports h](jt)}(h``struct device_node *np``h]jz)}(hjh]hstruct device_node *np}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hjubj)}(hhh]h)}(h0device tree node containing encoder output portsh]h0device tree node containing encoder output ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjXubjn)}(h*``u32 port`` port in the device tree node h](jt)}(h ``u32 port``h]jz)}(hjӖh]hu32 port}(hjՖhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjіubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hj͖ubj)}(hhh]h)}(hport in the device tree nodeh]hport in the device tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj͖ubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjXubjn)}(h2``u32 endpoint`` endpoint in the device tree node h](jt)}(h``u32 endpoint``h]jz)}(hj h]h u32 endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hjubj)}(hhh]h)}(h endpoint in the device tree nodeh]h endpoint in the device tree node}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hM hjXubeh}(h]h ]h"]h$]h&]uh1jhhj<ubh)}(h**Description**h]j%)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hj<ubh)}(hGiven a DT node's port and endpoint number, finds the connected node and returns the associated bridge if any, or creates and returns a drm panel bridge instance if a panel is connected.h]hGiven a DT node’s port and endpoint number, finds the connected node and returns the associated bridge if any, or creates and returns a drm panel bridge instance if a panel is connected.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM hj<ubh)}(hZReturns a drmm managed pointer to the bridge if successful, or an error pointer otherwise.h]hZReturns a drmm managed pointer to the bridge if successful, or an error pointer otherwise.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjc{hhhNhNubj:)}(h.. _drm_panel_helper:h]h}(h]h ]h"]h$]h&]j:drm-panel-helperuh1j:hKhjc{hhhhubeh}(h]panel-bridge-helper-referenceah ]h"]panel-bridge helper referenceah$]h&]uh1hhjJhhhhhKubeh}(h](bridgesjAeh ]h"](bridges drm_bridgeseh$]h&]uh1hhhhhhhhKj}jj7sj}jAj7subh)}(hhh](h)}(hPanel Helper Referenceh]hPanel Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThe DRM panel helpers allow drivers to register panel objects with a central registry and provide functions to retrieve those panels in display drivers.h]hThe DRM panel helpers allow drivers to register panel objects with a central registry and provide functions to retrieve those panels in display drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:212: ./drivers/gpu/drm/drm_panel.chK%hjhhubh)}(hFor easy integration into drivers using the :c:type:`drm_bridge` infrastructure please take look at drm_panel_bridge_add() and devm_drm_panel_bridge_add().h](h,For easy integration into drivers using the }(hjhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjʗh]h drm_bridge}(hj̗hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjȗubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:212: ./drivers/gpu/drm/drm_panel.chK)hjubh[ infrastructure please take look at drm_panel_bridge_add() and devm_drm_panel_bridge_add().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK)hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_funcs (C struct)c.drm_panel_funcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_panel_funcsh]j)}(hstruct drm_panel_funcsh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_panel_funcsh]j)}(hjh]hdrm_panel_funcs}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h#perform operations on a given panelh]h#perform operations on a given panel}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK+hjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjejjejjjuh1jhhhjhNhNubj)}(hXl**Definition**:: struct drm_panel_funcs { int (*prepare)(struct drm_panel *panel); int (*enable)(struct drm_panel *panel); int (*disable)(struct drm_panel *panel); int (*unprepare)(struct drm_panel *panel); int (*get_modes)(struct drm_panel *panel, struct drm_connector *connector); enum drm_panel_orientation (*get_orientation)(struct drm_panel *panel); int (*get_timings)(struct drm_panel *panel, unsigned int num_timings, struct display_timing *timings); void (*debugfs_init)(struct drm_panel *panel, struct dentry *root); }; **Members** ``prepare`` Turn on panel and perform set up. This function is optional. ``enable`` Enable panel (turn on back light, etc.). This function is optional. ``disable`` Disable panel (turn off back light, etc.). This function is optional. ``unprepare`` Turn off panel. This function is optional. ``get_modes`` Add modes to the connector that the panel is attached to and returns the number of modes added. This function is mandatory. ``get_orientation`` Return the panel orientation set by device tree or EDID. This function is optional. ``get_timings`` Copy display timings into the provided array and return the number of display timings available. This function is optional. ``debugfs_init`` Allows panels to create panels-specific debugfs files.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubh:}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK/hjiubj@)}(hXstruct drm_panel_funcs { int (*prepare)(struct drm_panel *panel); int (*enable)(struct drm_panel *panel); int (*disable)(struct drm_panel *panel); int (*unprepare)(struct drm_panel *panel); int (*get_modes)(struct drm_panel *panel, struct drm_connector *connector); enum drm_panel_orientation (*get_orientation)(struct drm_panel *panel); int (*get_timings)(struct drm_panel *panel, unsigned int num_timings, struct display_timing *timings); void (*debugfs_init)(struct drm_panel *panel, struct dentry *root); };h]hXstruct drm_panel_funcs { int (*prepare)(struct drm_panel *panel); int (*enable)(struct drm_panel *panel); int (*disable)(struct drm_panel *panel); int (*unprepare)(struct drm_panel *panel); int (*get_modes)(struct drm_panel *panel, struct drm_connector *connector); enum drm_panel_orientation (*get_orientation)(struct drm_panel *panel); int (*get_timings)(struct drm_panel *panel, unsigned int num_timings, struct display_timing *timings); void (*debugfs_init)(struct drm_panel *panel, struct dentry *root); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK1hjiubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK]hj6ubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hj[h]hstruct drm_panel *panel}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKZhjUubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKZhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphKZhjRubah}(h]h ]h"]h$]h&]uh1jhhj6ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK\hj6ubh)}(h)Removes a panel from the global registry.h]h)Removes a panel from the global registry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK\hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_prepare (C function)c.drm_panel_preparehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h/int drm_panel_prepare (struct drm_panel *panel)h]j)}(h.int drm_panel_prepare(struct drm_panel *panel)h](j)}(hinth]hint}(hjۤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjפhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjפhhhjhKpubj)}(hdrm_panel_prepareh]j)}(hdrm_panel_prepareh]hdrm_panel_prepare}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjפhhhjhKpubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j%)}jjsbc.drm_panel_prepareasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjdhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjפhhhjhKpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjӤhhhjhKpubah}(h]jΤah ](jjeh"]h$]h&]jj)jhuh1jhjhKphjФhhubj)}(hhh]h)}(hpower on a panelh]hpower on a panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKghjhhubah}(h]h ]h"]h$]h&]uh1jhjФhhhjhKpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXE**Parameters** ``struct drm_panel *panel`` DRM panel **Description** Calling this function will enable power and deassert any reset signals to the panel. After this has completed it is possible to communicate with any integrated circuitry via a command bus. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKkhjubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjܥh]hstruct drm_panel *panel}(hjޥhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjڥubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhhj֥ubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhj֥ubeh}(h]h ]h"]h$]h&]uh1jmhjhKhhjӥubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKjhjubh)}(hCalling this function will enable power and deassert any reset signals to the panel. After this has completed it is possible to communicate with any integrated circuitry via a command bus.h]hCalling this function will enable power and deassert any reset signals to the panel. After this has completed it is possible to communicate with any integrated circuitry via a command bus.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKjhjubh)}(h **Return**h]j%)}(hj>h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKnhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_panel_unprepare (C function)c.drm_panel_unpreparehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h1int drm_panel_unprepare (struct drm_panel *panel)h]j)}(h0int drm_panel_unprepare(struct drm_panel *panel)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_panel_unprepareh]j)}(hdrm_panel_unprepareh]hdrm_panel_unprepare}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjͦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjަhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۦubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_panel_unprepareasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhKubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjxhhubj)}(hhh]h)}(hpower off a panelh]hpower off a panel}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj@hhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_panel *panel`` DRM panel **Description** Calling this function will completely power off a panel (assert the panel's reset, turn off power supplies, ...). After this function has completed, it is usually no longer possible to communicate with the panel until another call to drm_panel_prepare(). **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj_ubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjh]hstruct drm_panel *panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj~ubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj{ubah}(h]h ]h"]h$]h&]uh1jhhj_ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj_ubh)}(hCalling this function will completely power off a panel (assert the panel's reset, turn off power supplies, ...). After this function has completed, it is usually no longer possible to communicate with the panel until another call to drm_panel_prepare().h]hXCalling this function will completely power off a panel (assert the panel’s reset, turn off power supplies, ...). After this function has completed, it is usually no longer possible to communicate with the panel until another call to drm_panel_prepare().}(hjէhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj_ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj_ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_enable (C function)c.drm_panel_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h.int drm_panel_enable (struct drm_panel *panel)h]j)}(h-int drm_panel_enable(struct drm_panel *panel)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hKubj)}(hdrm_panel_enableh]j)}(hdrm_panel_enableh]hdrm_panel_enable}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hKubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjNsbc.drm_panel_enableasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubah}(h]h ]h"]h$]h&]jjuh1jhj'hhhj9hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj9hKhj hhubj)}(hhh]h)}(henable a panelh]henable a panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX1**Parameters** ``struct drm_panel *panel`` DRM panel **Description** Calling this function will cause the panel display drivers to be turned on and the backlight to be enabled. Content will be visible on screen after this call completes. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hj,h]hstruct drm_panel *panel}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj&ubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhKhj#ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(hCalling this function will cause the panel display drivers to be turned on and the backlight to be enabled. Content will be visible on screen after this call completes.h]hCalling this function will cause the panel display drivers to be turned on and the backlight to be enabled. Content will be visible on screen after this call completes.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_disable (C function)c.drm_panel_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h/int drm_panel_disable (struct drm_panel *panel)h]j)}(h.int drm_panel_disable(struct drm_panel *panel)h](j)}(hinth]hint}(hjөhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϩhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϩhhhjhKubj)}(hdrm_panel_disableh]j)}(hdrm_panel_disableh]hdrm_panel_disable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjϩhhhjhKubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jjsbc.drm_panel_disableasbuh1hhj ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hpanelh]hpanel}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjϩhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj˩hhhjhKubah}(h]jƩah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjȩhhubj)}(hhh]h)}(hdisable a panelh]hdisable a panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjȩhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXZ**Parameters** ``struct drm_panel *panel`` DRM panel **Description** This will typically turn off the panel's backlight or disable the display drivers. For smart panels it should still be possible to communicate with the integrated circuitry via any command bus after this call. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjԪh]hstruct drm_panel *panel}(hj֪hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҪubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjΪubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjΪubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj˪ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(hThis will typically turn off the panel's backlight or disable the display drivers. For smart panels it should still be possible to communicate with the integrated circuitry via any command bus after this call.h]hThis will typically turn off the panel’s backlight or disable the display drivers. For smart panels it should still be possible to communicate with the integrated circuitry via any command bus after this call.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(h **Return**h]j%)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_panel_get_modes (C function)c.drm_panel_get_modeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hRint drm_panel_get_modes (struct drm_panel *panel, struct drm_connector *connector)h]j)}(hQint drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector)h](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM.ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjhM.ubj)}(hdrm_panel_get_modesh]j)}(hdrm_panel_get_modesh]hdrm_panel_get_modes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjhM.ubj)}(h:(struct drm_panel *panel, struct drm_connector *connector)h](j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjūhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hj֫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӫubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjثmodnameN classnameNjj)}j]j%)}jjsbc.drm_panel_get_modesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jc.drm_panel_get_modesasbuh1hhj&ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjwhhhjhM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjhM.ubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjhM.hjphhubj)}(hhh]h)}(h,probe the available display modes of a panelh]h,probe the available display modes of a panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjìjjìjjjuh1jhhhjhNhNubj)}(hXH**Parameters** ``struct drm_panel *panel`` DRM panel ``struct drm_connector *connector`` DRM connector **Description** The modes probed from the panel are automatically added to the connector that the panel is attached to. **Return** The number of modes available from the panel on success, or 0 on failure (no modes).h](h)}(h**Parameters**h]j%)}(hjͬh]h Parameters}(hjϬhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjˬubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM(hjǬubji)}(hhh](jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjh]hstruct drm_panel *panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM%hjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM%hjubjn)}(h2``struct drm_connector *connector`` DRM connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj%h]hstruct drm_connector *connector}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM&hjubj)}(hhh]h)}(h DRM connectorh]h DRM connector}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM&hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hM&hjubeh}(h]h ]h"]h$]h&]uh1jhhjǬubh)}(h**Description**h]j%)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM(hjǬubh)}(hgThe modes probed from the panel are automatically added to the connector that the panel is attached to.h]hgThe modes probed from the panel are automatically added to the connector that the panel is attached to.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM(hjǬubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM+hjǬubh)}(hTThe number of modes available from the panel on success, or 0 on failure (no modes).h]hTThe number of modes available from the panel on success, or 0 on failure (no modes).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM+hjǬubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jof_drm_find_panel (C function)c.of_drm_find_panelhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hCstruct drm_panel * of_drm_find_panel (const struct device_node *np)h]j)}(hAstruct drm_panel *of_drm_find_panel(const struct device_node *np)h](j)}(hjh]hstruct}(hj̭hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȭhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMQubj)}(h h]h }(hjڭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȭhhhj٭hMQubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jof_drm_find_panelsbc.of_drm_find_panelasbuh1hhjȭhhhj٭hMQubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȭhhhj٭hMQubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjȭhhhj٭hMQubj)}(hof_drm_find_panelh]j)}(hj h]hof_drm_find_panel}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjȭhhhj٭hMQubj)}(h(const struct device_node *np)h]j)}(hconst struct device_node *nph](j)}(hjch]hconst}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.of_drm_find_panelasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubah}(h]h ]h"]h$]h&]jjuh1jhjȭhhhj٭hMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjĭhhhj٭hMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj٭hMQhjhhubj)}(hhh]h)}(h(look up a panel using a device tree nodeh]h(look up a panel using a device tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMBhj߮hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj٭hMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXZ**Parameters** ``const struct device_node *np`` device tree node of the panel **Description** Searches the set of registered panels for one that matches the given device tree node. If a matching panel is found, return a pointer to it. Possible error codes returned by this function: - EPROBE_DEFER: the panel device has not been probed yet, and the caller should retry later - ENODEV: the device is not available (status != "okay" or "ok") **Return** A pointer to the panel registered for the specified device tree node or an ERR_PTR() if no panel matching the device tree node can be found.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMFhjubji)}(hhh]jn)}(h?``const struct device_node *np`` device tree node of the panel h](jt)}(h ``const struct device_node *np``h]jz)}(hj#h]hconst struct device_node *np}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMChjubj)}(hhh]h)}(hdevice tree node of the panelh]hdevice tree node of the panel}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMChj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hMChjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMEhjubh)}(hSearches the set of registered panels for one that matches the given device tree node. If a matching panel is found, return a pointer to it.h]hSearches the set of registered panels for one that matches the given device tree node. If a matching panel is found, return a pointer to it.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMEhjubh)}(h/Possible error codes returned by this function:h]h/Possible error codes returned by this function:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMHhjubh)}(hhh](h)}(hYEPROBE_DEFER: the panel device has not been probed yet, and the caller should retry laterh]h)}(hYEPROBE_DEFER: the panel device has not been probed yet, and the caller should retry laterh]hYEPROBE_DEFER: the panel device has not been probed yet, and the caller should retry later}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMJhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h?ENODEV: the device is not available (status != "okay" or "ok") h]h)}(h>ENODEV: the device is not available (status != "okay" or "ok")h]hFENODEV: the device is not available (status != “okay” or “ok”)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMLhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhMJhjubh)}(h **Return**h]j%)}(hjϯh]hReturn}(hjѯhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjͯubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMNhjubh)}(hA pointer to the panel registered for the specified device tree node or an ERR_PTR() if no panel matching the device tree node can be found.h]hA pointer to the panel registered for the specified device tree node or an ERR_PTR() if no panel matching the device tree node can be found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)of_drm_get_panel_orientation (C function)c.of_drm_get_panel_orientationhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hhint of_drm_get_panel_orientation (const struct device_node *np, enum drm_panel_orientation *orientation)h]j)}(hgint of_drm_get_panel_orientation(const struct device_node *np, enum drm_panel_orientation *orientation)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMsubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMsubj)}(hof_drm_get_panel_orientationh]j)}(hof_drm_get_panel_orientationh]hof_drm_get_panel_orientation}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hMsubj)}(hG(const struct device_node *np, enum drm_panel_orientation *orientation)h](j)}(hconst struct device_node *nph](j)}(hjch]hconst}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj7sbc.of_drm_get_panel_orientationasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hnph]hnp}(hjŰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(h'enum drm_panel_orientation *orientationh](j)}(hjl h]henum}(hjްhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڰubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڰubh)}(hhh]j)}(hdrm_panel_orientationh]hdrm_panel_orientation}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.of_drm_get_panel_orientationasbuh1hhjڰubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڰubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjڰubj)}(h orientationh]h orientation}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڰubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj"hMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj"hMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj"hMshj hhubj)}(hhh]h)}(h[look up the orientation of the panel through the "rotation" binding from a device tree nodeh]h_look up the orientation of the panel through the “rotation” binding from a device tree node}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMghj\hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct device_node *np`` device tree node of the panel ``enum drm_panel_orientation *orientation`` orientation enum to be filled in **Description** Looks up the rotation of a panel in the device tree. The orientation of the panel is expressed as a property name "rotation" in the device tree. The rotation in the device tree is counter clockwise. **Return** 0 when a valid rotation value (0, 90, 180, or 270) is read or the rotation property doesn't exist. Return a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMkhj{ubji)}(hhh](jn)}(h?``const struct device_node *np`` device tree node of the panel h](jt)}(h ``const struct device_node *np``h]jz)}(hjh]hconst struct device_node *np}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMihjubj)}(hhh]h)}(hdevice tree node of the panelh]hdevice tree node of the panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMihjubjn)}(hM``enum drm_panel_orientation *orientation`` orientation enum to be filled in h](jt)}(h+``enum drm_panel_orientation *orientation``h]jz)}(hjٱh]h'enum drm_panel_orientation *orientation}(hj۱hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjױubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMjhjӱubj)}(hhh]h)}(h orientation enum to be filled inh]h orientation enum to be filled in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjӱubeh}(h]h ]h"]h$]h&]uh1jmhjhMjhjubeh}(h]h ]h"]h$]h&]uh1jhhj{ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMlhj{ubh)}(hLooks up the rotation of a panel in the device tree. The orientation of the panel is expressed as a property name "rotation" in the device tree. The rotation in the device tree is counter clockwise.h]hLooks up the rotation of a panel in the device tree. The orientation of the panel is expressed as a property name “rotation” in the device tree. The rotation in the device tree is counter clockwise.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMlhj{ubh)}(h **Return**h]j%)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMphj{ubh)}(h0 when a valid rotation value (0, 90, 180, or 270) is read or the rotation property doesn't exist. Return a negative error code on failure.h]h0 when a valid rotation value (0, 90, 180, or 270) is read or the rotation property doesn’t exist. Return a negative error code on failure.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMphj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_is_panel_follower (C function)c.drm_is_panel_followerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h/bool drm_is_panel_follower (struct device *dev)h]j)}(h.bool drm_is_panel_follower(struct device *dev)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMubj)}(hdrm_is_panel_followerh]j)}(hdrm_is_panel_followerh]hdrm_is_panel_follower}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhMubj)}(h(struct device *dev)h]j)}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjɲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjڲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjײubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjܲmodnameN classnameNjj)}j]j%)}jjsbc.drm_is_panel_followerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjuhhubj)}(hhh]h)}(h'Check if the device is a panel followerh]h'Check if the device is a panel follower}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` The 'struct device' to check **Description** This checks to see if a device needs to be power sequenced together with a panel using the panel follower API. At the moment panels can only be followed on device tree enabled systems. The "panel" property of the follower points to the panel to be followed. **Return** true if we should be power sequenced with a panel; false otherwise.h](h)}(h**Parameters**h]j%)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj[ubji)}(hhh]jn)}(h4``struct device *dev`` The 'struct device' to check h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjzubj)}(hhh]h)}(hThe 'struct device' to checkh]h The ‘struct device’ to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjwubah}(h]h ]h"]h$]h&]uh1jhhj[ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj[ubh)}(hXThis checks to see if a device needs to be power sequenced together with a panel using the panel follower API. At the moment panels can only be followed on device tree enabled systems. The "panel" property of the follower points to the panel to be followed.h]hXThis checks to see if a device needs to be power sequenced together with a panel using the panel follower API. At the moment panels can only be followed on device tree enabled systems. The “panel” property of the follower points to the panel to be followed.}(hjѳhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj[ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj[ubh)}(hCtrue if we should be power sequenced with a panel; false otherwise.h]hCtrue if we should be power sequenced with a panel; false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panel_add_follower (C function)c.drm_panel_add_followerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h]int drm_panel_add_follower (struct device *follower_dev, struct drm_panel_follower *follower)h]j)}(h\int drm_panel_add_follower(struct device *follower_dev, struct drm_panel_follower *follower)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj5hMubj)}(hdrm_panel_add_followerh]j)}(hdrm_panel_add_followerh]hdrm_panel_add_follower}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj5hMubj)}(hB(struct device *follower_dev, struct drm_panel_follower *follower)h](j)}(hstruct device *follower_devh](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjJsbc.drm_panel_add_followerasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(h follower_devh]h follower_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(h#struct drm_panel_follower *followerh](j)}(hjh]hstruct}(hjִhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҴubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҴubh)}(hhh]j)}(hdrm_panel_followerh]hdrm_panel_follower}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_panel_add_followerasbuh1hhjҴubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҴubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjҴubj)}(hfollowerh]hfollower}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҴubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj5hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj5hMhjhhubj)}(hhh]h)}(h)Register something to follow panel state.h]h)Register something to follow panel state.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjThhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct device *follower_dev`` The 'struct device' for the follower. ``struct drm_panel_follower *follower`` The panel follower descriptor for the follower. **Description** A panel follower is called right after preparing the panel and right before unpreparing the panel. It's primary intention is to power on an associated touchscreen, though it could be used for any similar devices. Multiple devices are allowed the follow the same panel. If a follower is added to a panel that's already been turned on, the follower's prepare callback is called right away. At the moment panels can only be followed on device tree enabled systems. The "panel" property of the follower points to the panel to be followed. **Return** 0 or an error code. Note that -ENODEV means that we detected that follower_dev is not actually following a panel. The caller may choose to ignore this return value if following a panel is optional.h](h)}(h**Parameters**h]j%)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubji)}(hhh](jn)}(hF``struct device *follower_dev`` The 'struct device' for the follower. h](jt)}(h``struct device *follower_dev``h]jz)}(hjh]hstruct device *follower_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubj)}(hhh]h)}(h%The 'struct device' for the follower.h]h)The ‘struct device’ for the follower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hX``struct drm_panel_follower *follower`` The panel follower descriptor for the follower. h](jt)}(h'``struct drm_panel_follower *follower``h]jz)}(hjѵh]h#struct drm_panel_follower *follower}(hjӵhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjϵubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj˵ubj)}(hhh]h)}(h/The panel follower descriptor for the follower.h]h/The panel follower descriptor for the follower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj˵ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjsubh)}(h**Description**h]j%)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubh)}(hX A panel follower is called right after preparing the panel and right before unpreparing the panel. It's primary intention is to power on an associated touchscreen, though it could be used for any similar devices. Multiple devices are allowed the follow the same panel.h]hXA panel follower is called right after preparing the panel and right before unpreparing the panel. It’s primary intention is to power on an associated touchscreen, though it could be used for any similar devices. Multiple devices are allowed the follow the same panel.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubh)}(hvIf a follower is added to a panel that's already been turned on, the follower's prepare callback is called right away.h]hzIf a follower is added to a panel that’s already been turned on, the follower’s prepare callback is called right away.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubh)}(hAt the moment panels can only be followed on device tree enabled systems. The "panel" property of the follower points to the panel to be followed.h]hAt the moment panels can only be followed on device tree enabled systems. The “panel” property of the follower points to the panel to be followed.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubh)}(h **Return**h]j%)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubji)}(hhh]jn)}(h0 or an error code. Note that -ENODEV means that we detected that follower_dev is not actually following a panel. The caller may choose to ignore this return value if following a panel is optional.h](jt)}(hA0 or an error code. Note that -ENODEV means that we detected thath]hA0 or an error code. Note that -ENODEV means that we detected that}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjjubj)}(hhh]h)}(hfollower_dev is not actually following a panel. The caller may choose to ignore this return value if following a panel is optional.h]hfollower_dev is not actually following a panel. The caller may choose to ignore this return value if following a panel is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhj|hMhjgubah}(h]h ]h"]h$]h&]uh1jhhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_panel_remove_follower (C function)c.drm_panel_remove_followerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDvoid drm_panel_remove_follower (struct drm_panel_follower *follower)h]j)}(hCvoid drm_panel_remove_follower(struct drm_panel_follower *follower)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMubj)}(h h]h }(hj϶hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjζhMubj)}(hdrm_panel_remove_followerh]j)}(hdrm_panel_remove_followerh]hdrm_panel_remove_follower}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݶubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjζhMubj)}(h%(struct drm_panel_follower *follower)h]j)}(h#struct drm_panel_follower *followerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_panel_followerh]hdrm_panel_follower}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_panel_remove_followerasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfollowerh]hfollower}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjζhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjζhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjζhMhjhhubj)}(hhh]h)}(h!Reverse drm_panel_add_follower().h]h!Reverse drm_panel_add_follower().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjζhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX,**Parameters** ``struct drm_panel_follower *follower`` The panel follower descriptor for the follower. **Description** Undo drm_panel_add_follower(). This includes calling the follower's unprepare function if we're removed from a panel that's currently prepared. **Return** 0 or an error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubji)}(hhh]jn)}(hX``struct drm_panel_follower *follower`` The panel follower descriptor for the follower. h](jt)}(h'``struct drm_panel_follower *follower``h]jz)}(hjh]h#struct drm_panel_follower *follower}(hj÷hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubj)}(hhh]h)}(h/The panel follower descriptor for the follower.h]h/The panel follower descriptor for the follower.}(hjڷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjַhMhj׷ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjַhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(hUndo drm_panel_add_follower(). This includes calling the follower's unprepare function if we're removed from a panel that's currently prepared.h]hUndo drm_panel_add_follower(). This includes calling the follower’s unprepare function if we’re removed from a panel that’s currently prepared.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(h **Return**h]j%)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(h0 or an error code.h]h0 or an error code.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(devm_drm_panel_add_follower (C function)c.devm_drm_panel_add_followerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbint devm_drm_panel_add_follower (struct device *follower_dev, struct drm_panel_follower *follower)h]j)}(haint devm_drm_panel_add_follower(struct device *follower_dev, struct drm_panel_follower *follower)h](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhM ubj)}(hdevm_drm_panel_add_followerh]j)}(hdevm_drm_panel_add_followerh]hdevm_drm_panel_add_follower}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjvhM ubj)}(hB(struct device *follower_dev, struct drm_panel_follower *follower)h](j)}(hstruct device *follower_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjøhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjŸmodnameN classnameNjj)}j]j%)}jjsbc.devm_drm_panel_add_followerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h follower_devh]h follower_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_panel_follower *followerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_panel_followerh]hdrm_panel_follower}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j߸c.devm_drm_panel_add_followerasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfollowerh]hfollower}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjdhhhjvhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhjvhM ubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jhjvhM hj]hhubj)}(hhh]h)}(h(devm version of drm_panel_add_follower()h]h(devm version of drm_panel_add_follower()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjvhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX1**Parameters** ``struct device *follower_dev`` The 'struct device' for the follower. ``struct drm_panel_follower *follower`` The panel follower descriptor for the follower. **Description** Handles calling drm_panel_remove_follower() using devm on the follower_dev. **Return** 0 or an error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubji)}(hhh](jn)}(hF``struct device *follower_dev`` The 'struct device' for the follower. h](jt)}(h``struct device *follower_dev``h]jz)}(hjٹh]hstruct device *follower_dev}(hj۹hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj׹ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjӹubj)}(hhh]h)}(h%The 'struct device' for the follower.h]h)The ‘struct device’ for the follower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӹubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjйubjn)}(hX``struct drm_panel_follower *follower`` The panel follower descriptor for the follower. h](jt)}(h'``struct drm_panel_follower *follower``h]jz)}(hjh]h#struct drm_panel_follower *follower}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj ubj)}(hhh]h)}(h/The panel follower descriptor for the follower.h]h/The panel follower descriptor for the follower.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhjйubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(hKHandles calling drm_panel_remove_follower() using devm on the follower_dev.h]hKHandles calling drm_panel_remove_follower() using devm on the follower_dev.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(h **Return**h]j%)}(hjth]hReturn}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM hjubh)}(h0 or an error code.h]h0 or an error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panel_of_backlight (C function)c.drm_panel_of_backlighthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4int drm_panel_of_backlight (struct drm_panel *panel)h]j)}(h3int drm_panel_of_backlight(struct drm_panel *panel)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM.ubj)}(h h]h }(hjȺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjǺhM.ubj)}(hdrm_panel_of_backlighth]j)}(hdrm_panel_of_backlighth]hdrm_panel_of_backlight}(hjںhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֺubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjǺhM.ubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjܺsbc.drm_panel_of_backlightasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjǺhM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjǺhM.ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjǺhM.hjhhubj)}(hhh]h)}(h'use backlight device node for backlighth]h'use backlight device node for backlight}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjǺhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_panel *panel`` DRM panel **Description** Use this function to enable backlight handling if your panel uses device tree and has a backlight phandle. When the panel is enabled backlight will be enabled after a successful call to :c:type:`drm_panel_funcs.enable\(\) ` When the panel is disabled backlight will be disabled before the call to :c:type:`drm_panel_funcs.disable\(\) `. A typical implementation for a panel driver supporting device tree will call this function at probe time. Backlight will then be handled transparently without requiring any intervention from the driver. drm_panel_of_backlight() must be called after the call to drm_panel_init(). **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjh]hstruct drm_panel *panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjӻhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϻhMhjлubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjϻhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(hjUse this function to enable backlight handling if your panel uses device tree and has a backlight phandle.h]hjUse this function to enable backlight handling if your panel uses device tree and has a backlight phandle.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(hWhen the panel is enabled backlight will be enabled after a successful call to :c:type:`drm_panel_funcs.enable\(\) `h](hOWhen the panel is enabled backlight will be enabled after a successful call to }(hjhhhNhNubh)}(h6:c:type:`drm_panel_funcs.enable\(\) `h]jz)}(hj$h]hdrm_panel_funcs.enable()}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_panel_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM!hjubeh}(h]h ]h"]h$]h&]uh1hhjAhM!hjubh)}(hWhen the panel is disabled backlight will be disabled before the call to :c:type:`drm_panel_funcs.disable\(\) `.h](hIWhen the panel is disabled backlight will be disabled before the call to }(hjHhhhNhNubh)}(h7:c:type:`drm_panel_funcs.disable\(\) `h]jz)}(hjRh]hdrm_panel_funcs.disable()}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_panel_funcsuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM$hjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohM$hjubh)}(hXA typical implementation for a panel driver supporting device tree will call this function at probe time. Backlight will then be handled transparently without requiring any intervention from the driver. drm_panel_of_backlight() must be called after the call to drm_panel_init().h]hXA typical implementation for a panel driver supporting device tree will call this function at probe time. Backlight will then be handled transparently without requiring any intervention from the driver. drm_panel_of_backlight() must be called after the call to drm_panel_init().}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM'hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM,hjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_get_panel_orientation_quirk (C function)!c.drm_get_panel_orientation_quirkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h;int drm_get_panel_orientation_quirk (int width, int height)h]j)}(h:int drm_get_panel_orientation_quirk(int width, int height)h](j)}(hinth]hint}(hjмhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̼hhhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chM'ubj)}(h h]h }(hj߼hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̼hhhj޼hM'ubj)}(hdrm_get_panel_orientation_quirkh]j)}(hdrm_get_panel_orientation_quirkh]hdrm_get_panel_orientation_quirk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj̼hhhj޼hM'ubj)}(h(int width, int height)h](j)}(h int widthh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hwidthh]hwidth}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int heighth](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hheighth]hheight}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj̼hhhj޼hM'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjȼhhhj޼hM'ubah}(h]jüah ](jjeh"]h$]h&]jj)jhuh1jhj޼hM'hjżhhubj)}(hhh]h)}(h"Check for panel orientation quirksh]h"Check for panel orientation quirks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjżhhhj޼hM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``int width`` width in pixels of the panel ``int height`` height in pixels of the panel **Description** This function checks for platform specific (e.g. DMI based) quirks providing info on panel_orientation for systems where this cannot be probed from the hard-/firm-ware. To avoid false-positive this function takes the panel resolution as argument and checks that against the resolution expected by the quirk-table entry. Note this function is also used outside of the drm-subsys, by for example the efifb code. Because of this this function gets compiled into its own kernel-module when built as a module. **Return** A DRM_MODE_PANEL_ORIENTATION_* value if there is a quirk for this system, or DRM_MODE_PANEL_ORIENTATION_UNKNOWN if there is no quirk.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjubji)}(hhh](jn)}(h+``int width`` width in pixels of the panel h](jt)}(h ``int width``h]jz)}(hjɽh]h int width}(hj˽hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjǽubah}(h]h ]h"]h$]h&]uh1jshs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjýubj)}(hhh]h)}(hwidth in pixels of the panelh]hwidth in pixels of the panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj޽hMhj߽ubah}(h]h ]h"]h$]h&]uh1jhjýubeh}(h]h ]h"]h$]h&]uh1jmhj޽hMhjubjn)}(h-``int height`` height in pixels of the panel h](jt)}(h``int height``h]jz)}(hjh]h int height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjubj)}(hhh]h)}(hheight in pixels of the panelh]hheight in pixels of the panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjubh)}(hX?This function checks for platform specific (e.g. DMI based) quirks providing info on panel_orientation for systems where this cannot be probed from the hard-/firm-ware. To avoid false-positive this function takes the panel resolution as argument and checks that against the resolution expected by the quirk-table entry.h]hX?This function checks for platform specific (e.g. DMI based) quirks providing info on panel_orientation for systems where this cannot be probed from the hard-/firm-ware. To avoid false-positive this function takes the panel resolution as argument and checks that against the resolution expected by the quirk-table entry.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjubh)}(hNote this function is also used outside of the drm-subsys, by for example the efifb code. Because of this this function gets compiled into its own kernel-module when built as a module.h]hNote this function is also used outside of the drm-subsys, by for example the efifb code. Because of this this function gets compiled into its own kernel-module when built as a module.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMhjubh)}(h **Return**h]j%)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chM#hjubh)}(hA DRM_MODE_PANEL_ORIENTATION_* value if there is a quirk for this system, or DRM_MODE_PANEL_ORIENTATION_UNKNOWN if there is no quirk.h]hA DRM_MODE_PANEL_ORIENTATION_* value if there is a quirk for this system, or DRM_MODE_PANEL_ORIENTATION_UNKNOWN if there is no quirk.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chM#hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_get_panel_min_brightness_quirk (C function)$c.drm_get_panel_min_brightness_quirkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDint drm_get_panel_min_brightness_quirk (const struct drm_edid *edid)h]j)}(hCint drm_get_panel_min_brightness_quirk(const struct drm_edid *edid)h](j)}(hinth]hint}(hjhhhN2hNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chKGubj)}(h h]h }(hjǾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjƾhKGubj)}(h"drm_get_panel_min_brightness_quirkh]j)}(h"drm_get_panel_min_brightness_quirkh]h"drm_get_panel_min_brightness_quirk}(hjپhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjվubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjƾhKGubj)}(h(const struct drm_edid *edid)h]j)}(hconst struct drm_edid *edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jj۾sb$c.drm_get_panel_min_brightness_quirkasbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hedidh]hedid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjƾhKGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjƾhKGubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjƾhKGhjhhubj)}(hhh]h)}(h3Get minimum supported brightness level for a panel.h]h3Get minimum supported brightness level for a panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chK;hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjƾhKGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct drm_edid *edid`` EDID of the panel to check **Description** This function checks for platform specific (e.g. DMI based) quirks providing info on the minimum backlight brightness for systems where this cannot be probed correctly from the hard-/firm-ware. **Return** A negative error value or an override value in the range [0, 255] representing 0-100% to be scaled to the drivers target range.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chK?hjubji)}(hhh]jn)}(h;``const struct drm_edid *edid`` EDID of the panel to check h](jt)}(h``const struct drm_edid *edid``h]jz)}(hjԿh]hconst struct drm_edid *edid}(hjֿhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjҿubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chKhjubh)}(hThis function checks for platform specific (e.g. DMI based) quirks providing info on the minimum backlight brightness for systems where this cannot be probed correctly from the hard-/firm-ware.h]hThis function checks for platform specific (e.g. DMI based) quirks providing info on the minimum backlight brightness for systems where this cannot be probed correctly from the hard-/firm-ware.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chK>hjubh)}(h **Return**h]j%)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chKBhjubh)}(hA negative error value or an override value in the range [0, 255] representing 0-100% to be scaled to the drivers target range.h]hA negative error value or an override value in the range [0, 255] representing 0-100% to be scaled to the drivers target range.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chKBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h](panel-helper-referencejeh ]h"](panel helper referencedrm_panel_helpereh$]h&]uh1hhhhhhhhKj}jhjsj}jjsubh)}(hhh](h)}(h#Panel Self Refresh Helper Referenceh]h#Panel Self Refresh Helper Reference}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhhhhKubh)}(hXThis helper library provides an easy way for drivers to leverage the atomic framework to implement panel self refresh (SR) support. Drivers are responsible for initializing and cleaning up the SR helpers on load/unload (see :c:type:`drm_self_refresh_helper_init`/:c:type:`drm_self_refresh_helper_cleanup`). The connector is responsible for setting :c:type:`drm_connector_state.self_refresh_aware ` to true at runtime if it is SR-aware (meaning it knows how to initiate self refresh on the panel).h](hThis helper library provides an easy way for drivers to leverage the atomic framework to implement panel self refresh (SR) support. Drivers are responsible for initializing and cleaning up the SR helpers on load/unload (see }(hj~hhhNhNubh)}(h&:c:type:`drm_self_refresh_helper_init`h]jz)}(hjh]hdrm_self_refresh_helper_init}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_self_refresh_helper_inituh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:230: ./drivers/gpu/drm/drm_self_refresh_helper.chKhj~ubh/}(hj~hhhNhNubh)}(h):c:type:`drm_self_refresh_helper_cleanup`h]jz)}(hjh]hdrm_self_refresh_helper_cleanup}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_self_refresh_helper_cleanupuh1hhjhKhj~ubh,). The connector is responsible for setting }(hj~hhhNhNubh)}(hF:c:type:`drm_connector_state.self_refresh_aware `h]jz)}(hjh]h&drm_connector_state.self_refresh_aware}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_stateuh1hhjhKhj~ubhc to true at runtime if it is SR-aware (meaning it knows how to initiate self refresh on the panel).}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjmhhubh)}(hXOnce a crtc has enabled SR using :c:type:`drm_self_refresh_helper_init`, the helpers will monitor activity and call back into the driver to enable/disable SR as appropriate. The best way to think about this is that it's a DPMS on/off request with :c:type:`drm_crtc_state.self_refresh_active ` set in crtc state that tells you to disable/enable SR on the panel instead of power-cycling it.h](h!Once a crtc has enabled SR using }(hjhhhNhNubh)}(h&:c:type:`drm_self_refresh_helper_init`h]jz)}(hjh]hdrm_self_refresh_helper_init}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_self_refresh_helper_inituh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:230: ./drivers/gpu/drm/drm_self_refresh_helper.chK hjubh, the helpers will monitor activity and call back into the driver to enable/disable SR as appropriate. The best way to think about this is that it’s a DPMS on/off request with }(hjhhhNhNubh)}(h=:c:type:`drm_crtc_state.self_refresh_active `h]jz)}(hj$h]h"drm_crtc_state.self_refresh_active}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjhK hjubh` set in crtc state that tells you to disable/enable SR on the panel instead of power-cycling it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK hjmhhubh)}(hX9During SR, drivers may choose to fully disable their crtc/encoder/bridge hardware (in which case no driver changes are necessary), or they can inspect :c:type:`drm_crtc_state.self_refresh_active ` if they want to enter low power mode without full disable (in case full disable/enable is too slow).h](hDuring SR, drivers may choose to fully disable their crtc/encoder/bridge hardware (in which case no driver changes are necessary), or they can inspect }(hjKhhhNhNubh)}(h=:c:type:`drm_crtc_state.self_refresh_active `h]jz)}(hjUh]h"drm_crtc_state.self_refresh_active}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:230: ./drivers/gpu/drm/drm_self_refresh_helper.chK&hjKubhe if they want to enter low power mode without full disable (in case full disable/enable is too slow).}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhK&hjmhhubh)}(hSR will be deactivated if there are any atomic updates affecting the pipe that is in SR mode. If a crtc is driving multiple connectors, all connectors must be SR aware and all will enter/exit SR mode at the same time.h]hSR will be deactivated if there are any atomic updates affecting the pipe that is in SR mode. If a crtc is driving multiple connectors, all connectors must be SR aware and all will enter/exit SR mode at the same time.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:230: ./drivers/gpu/drm/drm_self_refresh_helper.chK+hjmhhubh)}(hIf the crtc and connector are SR aware, but the panel connected does not support it (or is otherwise unable to enter SR), the driver should fail atomic_check when :c:type:`drm_crtc_state.self_refresh_active ` is true.h](hIf the crtc and connector are SR aware, but the panel connected does not support it (or is otherwise unable to enter SR), the driver should fail atomic_check when }(hjhhhNhNubh)}(h=:c:type:`drm_crtc_state.self_refresh_active `h]jz)}(hjh]h"drm_crtc_state.self_refresh_active}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:230: ./drivers/gpu/drm/drm_self_refresh_helper.chK/hjubh is true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK/hjmhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_self_refresh_helper_update_avg_times (C function)*c.drm_self_refresh_helper_update_avg_timeshNtauh1jxhjmhhhNhNubj)}(hhh](j)}(hvoid drm_self_refresh_helper_update_avg_times (struct drm_atomic_state *state, unsigned int commit_time_ms, unsigned int new_self_refresh_mask)h]j)}(hvoid drm_self_refresh_helper_update_avg_times(struct drm_atomic_state *state, unsigned int commit_time_ms, unsigned int new_self_refresh_mask)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h(drm_self_refresh_helper_update_avg_timesh]j)}(h(drm_self_refresh_helper_update_avg_timesh]h(drm_self_refresh_helper_update_avg_times}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(ha(struct drm_atomic_state *state, unsigned int commit_time_ms, unsigned int new_self_refresh_mask)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j%)}jjsb*c.drm_self_refresh_helper_update_avg_timesasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int commit_time_msh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcommit_time_msh]hcommit_time_ms}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h"unsigned int new_self_refresh_maskh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnew_self_refresh_maskh]hnew_self_refresh_mask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h!Updates a crtc's SR time averagesh]h#Updates a crtc’s SR time averages}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhj6hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jhhhjmhNhNubj)}(hXj**Parameters** ``struct drm_atomic_state *state`` the state which has just been applied to hardware ``unsigned int commit_time_ms`` the amount of time in ms that this commit took to complete ``unsigned int new_self_refresh_mask`` bitmask of crtc's that have self_refresh_active in new state **Description** Called after :c:type:`drm_mode_config_funcs.atomic_commit_tail `, this function will update the average entry/exit self refresh times on self refresh transitions. These averages will be used when calculating how long to delay before entering self refresh mode after activity.h](h)}(h**Parameters**h]j%)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjUubji)}(hhh](jn)}(hU``struct drm_atomic_state *state`` the state which has just been applied to hardware h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjzh]hstruct drm_atomic_state *state}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjtubj)}(hhh]h)}(h1the state which has just been applied to hardwareh]h1the state which has just been applied to hardware}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjqubjn)}(h[``unsigned int commit_time_ms`` the amount of time in ms that this commit took to complete h](jt)}(h``unsigned int commit_time_ms``h]jz)}(hjh]hunsigned int commit_time_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubj)}(hhh]h)}(h:the amount of time in ms that this commit took to completeh]h:the amount of time in ms that this commit took to complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjqubjn)}(hd``unsigned int new_self_refresh_mask`` bitmask of crtc's that have self_refresh_active in new state h](jt)}(h&``unsigned int new_self_refresh_mask``h]jz)}(hjh]h"unsigned int new_self_refresh_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubj)}(hhh]h)}(hbitmask of crtc’s that have self_refresh_active in new state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjqubeh}(h]h ]h"]h$]h&]uh1jhhjUubh)}(h**Description**h]j%)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjUubh)}(hX*Called after :c:type:`drm_mode_config_funcs.atomic_commit_tail `, this function will update the average entry/exit self refresh times on self refresh transitions. These averages will be used when calculating how long to delay before entering self refresh mode after activity.h](h Called after }(hj>hhhNhNubh)}(hJ:c:type:`drm_mode_config_funcs.atomic_commit_tail `h]jz)}(hjHh]h(drm_mode_config_funcs.atomic_commit_tail}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhj>ubh, this function will update the average entry/exit self refresh times on self refresh transitions. These averages will be used when calculating how long to delay before entering self refresh mode after activity.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehKhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_self_refresh_helper_alter_state (C function)%c.drm_self_refresh_helper_alter_statehNtauh1jxhjmhhhNhNubj)}(hhh](j)}(hIvoid drm_self_refresh_helper_alter_state (struct drm_atomic_state *state)h]j)}(hHvoid drm_self_refresh_helper_alter_state(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h#drm_self_refresh_helper_alter_stateh]j)}(h#drm_self_refresh_helper_alter_stateh]h#drm_self_refresh_helper_alter_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb%c.drm_self_refresh_helper_alter_stateasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h#Alters the atomic state for SR exith]h#Alters the atomic state for SR exit}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jhhhjmhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` the state currently being checked **Description** Called at the end of atomic check. This function checks the state for flags incompatible with self refresh exit and changes them. This is a bit disingenuous since userspace is expecting one thing and we're giving it another. However in order to keep self refresh entirely hidden from userspace, this is required. At the end, we queue up the self refresh entry work so we can enter PSR after the desired delay.h](h)}(h**Parameters**h]j%)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjlubji)}(hhh]jn)}(hE``struct drm_atomic_state *state`` the state currently being checked h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjh]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubj)}(hhh]h)}(h!the state currently being checkedh]h!the state currently being checked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjlubh)}(hX8Called at the end of atomic check. This function checks the state for flags incompatible with self refresh exit and changes them. This is a bit disingenuous since userspace is expecting one thing and we're giving it another. However in order to keep self refresh entirely hidden from userspace, this is required.h]hX:Called at the end of atomic check. This function checks the state for flags incompatible with self refresh exit and changes them. This is a bit disingenuous since userspace is expecting one thing and we’re giving it another. However in order to keep self refresh entirely hidden from userspace, this is required.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjlubh)}(h`At the end, we queue up the self refresh entry work so we can enter PSR after the desired delay.h]h`At the end, we queue up the self refresh entry work so we can enter PSR after the desired delay.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_self_refresh_helper_init (C function)c.drm_self_refresh_helper_inithNtauh1jxhjmhhhNhNubj)}(hhh](j)}(h8int drm_self_refresh_helper_init (struct drm_crtc *crtc)h]j)}(h7int drm_self_refresh_helper_init(struct drm_crtc *crtc)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hKubj)}(hdrm_self_refresh_helper_inith]j)}(hdrm_self_refresh_helper_inith]hdrm_self_refresh_helper_init}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hKubj)}(h(struct drm_crtc *crtc)h]j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjCsbc.drm_self_refresh_helper_initasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hKhjhhubj)}(hhh]h)}(h+Initializes self refresh helpers for a crtch]h+Initializes self refresh helpers for a crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct drm_crtc *crtc`` the crtc which supports self refresh supported displays **Description** Returns zero if successful or -errno on failureh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubji)}(hhh]jn)}(hR``struct drm_crtc *crtc`` the crtc which supports self refresh supported displays h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj!h]hstruct drm_crtc *crtc}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubj)}(hhh]h)}(h7the crtc which supports self refresh supported displaysh]h7the crtc which supports self refresh supported displays}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubh)}(h/Returns zero if successful or -errno on failureh]h/Returns zero if successful or -errno on failure}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_self_refresh_helper_cleanup (C function)!c.drm_self_refresh_helper_cleanuphNtauh1jxhjmhhhNhNubj)}(hhh](j)}(hhhhNhNubj%)}(h**ksvs**h]hksvs}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chM hjubh)}(hX1This function reads the HDCP System renewability Message(SRM Table) from userspace as a firmware and parses it for the revoked HDCP KSVs(Receiver IDs) detected by DCP LLC. Once the revoked KSVs are known, revoked state of the KSVs in the list passed in by display drivers are decided and response is sent.h]hX1This function reads the HDCP System renewability Message(SRM Table) from userspace as a firmware and parses it for the revoked HDCP KSVs(Receiver IDs) detected by DCP LLC. Once the revoked KSVs are known, revoked state of the KSVs in the list passed in by display drivers are decided and response is sent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chM hjubh)}(h>SRM should be presented in the name of "display_hdcp_srm.bin".h]hBSRM should be presented in the name of “display_hdcp_srm.bin”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubh)}(hXFormat of the SRM table, that userspace needs to write into the binary file, is defined at: 1. Renewability chapter on 55th page of HDCP 1.4 specification https://www.digital-cp.com/sites/default/files/specifications/HDCP``20Specification````20Rev1_4_Secure``.pdf 2. Renewability chapter on 63rd page of HDCP 2.2 specification https://www.digital-cp.com/sites/default/files/specifications/HDCP``20on````20HDMI````20Specification````20Rev2_2_Final1``.pdfh](hFormat of the SRM table, that userspace needs to write into the binary file, is defined at: 1. Renewability chapter on 55th page of HDCP 1.4 specification }(hjhhhNhNubh reference)}(h=https://www.digital-cp.com/sites/default/files/specificationsh]h=https://www.digital-cp.com/sites/default/files/specifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubho/HDCP``20Specification````20Rev1_4_Secure``.pdf 2. Renewability chapter on 63rd page of HDCP 2.2 specification }(hjhhhNhNubj)}(h=https://www.digital-cp.com/sites/default/files/specificationsh]h=https://www.digital-cp.com/sites/default/files/specifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubhA/HDCP``20on````20HDMI````20Specification````20Rev2_2_Final1``.pdf}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubh)}(hECount of the revoked KSVs or -ve error number in case of the failure.h]hECount of the revoked KSVs or -ve error number in case of the failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j=drm_connector_attach_content_protection_property (C function)2c.drm_connector_attach_content_protection_propertyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hnint drm_connector_attach_content_protection_property (struct drm_connector *connector, bool hdcp_content_type)h]j)}(hmint drm_connector_attach_content_protection_property(struct drm_connector *connector, bool hdcp_content_type)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMcubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hMcubj)}(h0drm_connector_attach_content_protection_propertyh]j)}(h0drm_connector_attach_content_protection_propertyh]h0drm_connector_attach_content_protection_property}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hMcubj)}(h9(struct drm_connector *connector, bool hdcp_content_type)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjCsb2c.drm_connector_attach_content_protection_propertyasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hbool hdcp_content_typeh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdcp_content_typeh]hhdcp_content_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hMcubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hMcubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hMchjhhubj)}(hhh]h)}(h"attach content protection propertyh]h"attach content protection property}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMFhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector to attach CP property on. ``bool hdcp_content_type`` is HDCP Content Type property needed for connector **Description** This is used to add support for content protection on select connectors. Content Protection is intentionally vague to allow for different underlying technologies, however it is most implemented by HDCP. When hdcp_content_type is true enum property called HDCP Content Type is created (if it is not already) and attached to the connector. This property is used for sending the protected content's stream type from userspace to kernel on selected connectors. Protected content provider will decide their type of their content and declare the same to kernel. Content type will be used during the HDCP 2.2 authentication. Content type will be set to :c:type:`drm_connector_state.hdcp_content_type `. The content protection will be set to :c:type:`drm_connector_state.content_protection ` When kernel triggered content protection state change like DESIRED->ENABLED and ENABLED->DESIRED, will use drm_hdcp_update_content_protection() to update the content protection state of a connector. **Return** Zero on success, negative errno on failure.h](h)}(h**Parameters**h]j%)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMJhj0ubji)}(hhh](jn)}(hH``struct drm_connector *connector`` connector to attach CP property on. h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjUh]hstruct drm_connector *connector}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMIhjOubj)}(hhh]h)}(h#connector to attach CP property on.h]h#connector to attach CP property on.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMIhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMIhjLubjn)}(hN``bool hdcp_content_type`` is HDCP Content Type property needed for connector h](jt)}(h``bool hdcp_content_type``h]jz)}(hjh]hbool hdcp_content_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMJhjubj)}(hhh]h)}(h2is HDCP Content Type property needed for connectorh]h2is HDCP Content Type property needed for connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMJhjLubeh}(h]h ]h"]h$]h&]uh1jhhj0ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMLhj0ubh)}(hThis is used to add support for content protection on select connectors. Content Protection is intentionally vague to allow for different underlying technologies, however it is most implemented by HDCP.h]hThis is used to add support for content protection on select connectors. Content Protection is intentionally vague to allow for different underlying technologies, however it is most implemented by HDCP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMLhj0ubh)}(hWhen hdcp_content_type is true enum property called HDCP Content Type is created (if it is not already) and attached to the connector.h]hWhen hdcp_content_type is true enum property called HDCP Content Type is created (if it is not already) and attached to the connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMPhj0ubh)}(hThis property is used for sending the protected content's stream type from userspace to kernel on selected connectors. Protected content provider will decide their type of their content and declare the same to kernel.h]hThis property is used for sending the protected content’s stream type from userspace to kernel on selected connectors. Protected content provider will decide their type of their content and declare the same to kernel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMShj0ubh)}(hContent type will be used during the HDCP 2.2 authentication. Content type will be set to :c:type:`drm_connector_state.hdcp_content_type `.h](hZContent type will be used during the HDCP 2.2 authentication. Content type will be set to }(hj hhhNhNubh)}(hE:c:type:`drm_connector_state.hdcp_content_type `h]jz)}(hjh]h%drm_connector_state.hdcp_content_type}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_stateuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMWhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMWhj0ubh)}(hlThe content protection will be set to :c:type:`drm_connector_state.content_protection `h](h&The content protection will be set to }(hj>hhhNhNubh)}(hF:c:type:`drm_connector_state.content_protection `h]jz)}(hjHh]h&drm_connector_state.content_protection}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_stateuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMZhj>ubeh}(h]h ]h"]h$]h&]uh1hhjehMZhj0ubh)}(hWhen kernel triggered content protection state change like DESIRED->ENABLED and ENABLED->DESIRED, will use drm_hdcp_update_content_protection() to update the content protection state of a connector.h]hWhen kernel triggered content protection state change like DESIRED->ENABLED and ENABLED->DESIRED, will use drm_hdcp_update_content_protection() to update the content protection state of a connector.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chM\hj0ubh)}(h **Return**h]j%)}(hj}h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chM`hj0ubh)}(h+Zero on success, negative errno on failure.h]h+Zero on success, negative errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chM`hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_hdcp_update_content_protection (C function)$c.drm_hdcp_update_content_protectionhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hRvoid drm_hdcp_update_content_protection (struct drm_connector *connector, u64 val)h]j)}(hQvoid drm_hdcp_update_content_protection(struct drm_connector *connector, u64 val)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h"drm_hdcp_update_content_protectionh]j)}(h"drm_hdcp_update_content_protectionh]h"drm_hdcp_update_content_protection}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h*(struct drm_connector *connector, u64 val)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb$c.drm_hdcp_update_content_protectionasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 valh](h)}(hhh]j)}(hu64h]hu64}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j9$c.drm_hdcp_update_content_protectionasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hvalh]hval}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h3Updates the content protection state of a connectorh]h3Updates the content protection state of a connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXz**Parameters** ``struct drm_connector *connector`` drm_connector on which content protection state needs an update ``u64 val`` New state of the content protection property **Description** This function can be used by display drivers, to update the kernel triggered content protection state changes of a drm_connector such as DESIRED->ENABLED and ENABLED->DESIRED. No uevent for DESIRED->UNDESIRED or ENABLED->UNDESIRED, as userspace is triggering such state change and kernel performs it without fail.This function update the new state of the property into the connector's state and generate an uevent to notify the userspace.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubji)}(hhh](jn)}(hd``struct drm_connector *connector`` drm_connector on which content protection state needs an update h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj h]hstruct drm_connector *connector}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubj)}(hhh]h)}(h?drm_connector on which content protection state needs an update h]h?drm_connector on which content protection state needs an update}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubjn)}(h9``u64 val`` New state of the content protection property h](jt)}(h ``u64 val``h]jz)}(hjDh]hu64 val}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhj>ubj)}(hhh]h)}(h,New state of the content protection propertyh]h,New state of the content protection property}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubh)}(hXThis function can be used by display drivers, to update the kernel triggered content protection state changes of a drm_connector such as DESIRED->ENABLED and ENABLED->DESIRED. No uevent for DESIRED->UNDESIRED or ENABLED->UNDESIRED, as userspace is triggering such state change and kernel performs it without fail.This function update the new state of the property into the connector's state and generate an uevent to notify the userspace.h]hXThis function can be used by display drivers, to update the kernel triggered content protection state changes of a drm_connector such as DESIRED->ENABLED and ENABLED->DESIRED. No uevent for DESIRED->UNDESIRED or ENABLED->UNDESIRED, as userspace is triggering such state change and kernel performs it without fail.This function update the new state of the property into the connector’s state and generate an uevent to notify the userspace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:239: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]hdcp-helper-functions-referenceah ]h"]hdcp helper functions referenceah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h'Display Port Helper Functions Referenceh]h'Display Port Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThese functions contain some common logic and helpers at various abstraction levels to deal with Display Port sink devices and related things like DP aux channel transfers, EDID reading over DP aux channels, decoding certain DPCD blocks, ...h]hThese functions contain some common logic and helpers at various abstraction levels to deal with Display Port sink devices and related things like DP aux channel transfers, EDID reading over DP aux channels, decoding certain DPCD blocks, ...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:245: ./drivers/gpu/drm/display/drm_dp_helper.chKBhjhhubh)}(hThe DisplayPort AUX channel is an abstraction to allow generic, driver- independent access to AUX functionality. Drivers can take advantage of this by filling in the fields of the drm_dp_aux structure.h]hThe DisplayPort AUX channel is an abstraction to allow generic, driver- independent access to AUX functionality. Drivers can take advantage of this by filling in the fields of the drm_dp_aux structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:245: ./drivers/gpu/drm/display/drm_dp_helper.chM9hjhhubh)}(hTransactions are described using a hardware-independent drm_dp_aux_msg structure, which is passed into a driver's .transfer() implementation. Both native and I2C-over-AUX transactions are supported.h]hTransactions are described using a hardware-independent drm_dp_aux_msg structure, which is passed into a driver’s .transfer() implementation. Both native and I2C-over-AUX transactions are supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:245: ./drivers/gpu/drm/display/drm_dp_helper.chM=hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_sdp_header (C struct)c.dp_sdp_headerhNtauh1jxhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhNubj)}(hhh](j)}(h dp_sdp_headerh]j)}(hstruct dp_sdp_headerh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h dp_sdp_headerh]j)}(hjh]h dp_sdp_header}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hDP secondary data packet headerh]hDP secondary data packet header}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjejjejjjuh1jhhhjhjhNubj)}(hX0**Definition**:: struct dp_sdp_header { u8 HB0; u8 HB1; u8 HB2; u8 HB3; }; **Members** ``HB0`` Secondary Data Packet ID ``HB1`` Secondary Data Packet Type ``HB2`` Secondary Data Packet Specific header, Byte 0 ``HB3`` Secondary Data packet Specific header, Byte 1h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubh:}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjiubj@)}(hIstruct dp_sdp_header { u8 HB0; u8 HB1; u8 HB2; u8 HB3; };h]hIstruct dp_sdp_header { u8 HB0; u8 HB1; u8 HB2; u8 HB3; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjiubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjiubji)}(hhh](jn)}(h!``HB0`` Secondary Data Packet ID h](jt)}(h``HB0``h]jz)}(hjh]hHB0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hSecondary Data Packet IDh]hSecondary Data Packet ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h#``HB1`` Secondary Data Packet Type h](jt)}(h``HB1``h]jz)}(hjh]hHB1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hSecondary Data Packet Typeh]hSecondary Data Packet Type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h6``HB2`` Secondary Data Packet Specific header, Byte 0 h](jt)}(h``HB2``h]jz)}(hj,h]hHB2}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj&ubj)}(hhh]h)}(h-Secondary Data Packet Specific header, Byte 0h]h-Secondary Data Packet Specific header, Byte 0}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjubjn)}(h5``HB3`` Secondary Data packet Specific header, Byte 1h](jt)}(h``HB3``h]jz)}(hjeh]hHB3}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj_ubj)}(hhh]h)}(h-Secondary Data packet Specific header, Byte 1h]h-Secondary Data packet Specific header, Byte 1}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_sdp (C struct)c.dp_sdphNtauh1jxhjhhhjhNubj)}(hhh](j)}(hdp_sdph]j)}(h struct dp_sdph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdp_sdph]j)}(hjh]hdp_sdp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hDP secondary data packeth]hDP secondary data packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhjhNubj)}(hXz**Definition**:: struct dp_sdp { struct dp_sdp_header sdp_header; u8 db[32]; }; **Members** ``sdp_header`` DP secondary data packet header ``db`` DP secondaray data packet data blocks VSC SDP Payload for PSR db[0]: Stereo Interface db[1]: 0 - PSR State; 1 - Update RFB; 2 - CRC Valid db[2]: CRC value bits 7:0 of the R or Cr component db[3]: CRC value bits 15:8 of the R or Cr component db[4]: CRC value bits 7:0 of the G or Y component db[5]: CRC value bits 15:8 of the G or Y component db[6]: CRC value bits 7:0 of the B or Cb component db[7]: CRC value bits 15:8 of the B or Cb component db[8] - db[31]: Reserved VSC SDP Payload for Pixel Encoding/Colorimetry Format db[0] - db[15]: Reserved db[16]: Pixel Encoding and Colorimetry Formats db[17]: Dynamic Range and Component Bit Depth db[18]: Content Type db[19] - db[31]: Reservedh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj@)}(hFstruct dp_sdp { struct dp_sdp_header sdp_header; u8 db[32]; };h]hFstruct dp_sdp { struct dp_sdp_header sdp_header; u8 db[32]; };}hj>sbah}(h]h ]h"]h$]h&]jjuh1j?ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubh)}(h **Members**h]j%)}(hjOh]hMembers}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubji)}(hhh](jn)}(h/``sdp_header`` DP secondary data packet header h](jt)}(h``sdp_header``h]jz)}(hjnh]h sdp_header}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhubj)}(hhh]h)}(hDP secondary data packet headerh]hDP secondary data packet header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjeubjn)}(hX``db`` DP secondaray data packet data blocks VSC SDP Payload for PSR db[0]: Stereo Interface db[1]: 0 - PSR State; 1 - Update RFB; 2 - CRC Valid db[2]: CRC value bits 7:0 of the R or Cr component db[3]: CRC value bits 15:8 of the R or Cr component db[4]: CRC value bits 7:0 of the G or Y component db[5]: CRC value bits 15:8 of the G or Y component db[6]: CRC value bits 7:0 of the B or Cb component db[7]: CRC value bits 15:8 of the B or Cb component db[8] - db[31]: Reserved VSC SDP Payload for Pixel Encoding/Colorimetry Format db[0] - db[15]: Reserved db[16]: Pixel Encoding and Colorimetry Formats db[17]: Dynamic Range and Component Bit Depth db[18]: Content Type db[19] - db[31]: Reservedh](jt)}(h``db``h]jz)}(hjh]hdb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hXDP secondaray data packet data blocks VSC SDP Payload for PSR db[0]: Stereo Interface db[1]: 0 - PSR State; 1 - Update RFB; 2 - CRC Valid db[2]: CRC value bits 7:0 of the R or Cr component db[3]: CRC value bits 15:8 of the R or Cr component db[4]: CRC value bits 7:0 of the G or Y component db[5]: CRC value bits 15:8 of the G or Y component db[6]: CRC value bits 7:0 of the B or Cb component db[7]: CRC value bits 15:8 of the B or Cb component db[8] - db[31]: Reserved VSC SDP Payload for Pixel Encoding/Colorimetry Format db[0] - db[15]: Reserved db[16]: Pixel Encoding and Colorimetry Formats db[17]: Dynamic Range and Component Bit Depth db[18]: Content Type db[19] - db[31]: Reservedh]hXDP secondaray data packet data blocks VSC SDP Payload for PSR db[0]: Stereo Interface db[1]: 0 - PSR State; 1 - Update RFB; 2 - CRC Valid db[2]: CRC value bits 7:0 of the R or Cr component db[3]: CRC value bits 15:8 of the R or Cr component db[4]: CRC value bits 7:0 of the G or Y component db[5]: CRC value bits 15:8 of the G or Y component db[6]: CRC value bits 7:0 of the B or Cb component db[7]: CRC value bits 15:8 of the B or Cb component db[8] - db[31]: Reserved VSC SDP Payload for Pixel Encoding/Colorimetry Format db[0] - db[15]: Reserved db[16]: Pixel Encoding and Colorimetry Formats db[17]: Dynamic Range and Component Bit Depth db[18]: Content Type db[19] - db[31]: Reserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjeubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_pixelformat (C enum)c.dp_pixelformathNtauh1jxhjhhhjhNubj)}(hhh](j)}(hdp_pixelformath]j)}(henum dp_pixelformath](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdp_pixelformath]j)}(hjh]hdp_pixelformat}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hdrm DP Pixel encoding formatsh]hdrm DP Pixel encoding formats}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jenumeh"]h$]h&]jjjj[jj[jjjuh1jhhhjhjhNubj)}(hX**Constants** ``DP_PIXELFORMAT_RGB`` RGB pixel encoding format ``DP_PIXELFORMAT_YUV444`` YCbCr 4:4:4 pixel encoding format ``DP_PIXELFORMAT_YUV422`` YCbCr 4:2:2 pixel encoding format ``DP_PIXELFORMAT_YUV420`` YCbCr 4:2:0 pixel encoding format ``DP_PIXELFORMAT_Y_ONLY`` Y Only pixel encoding format ``DP_PIXELFORMAT_RAW`` RAW pixel encoding format ``DP_PIXELFORMAT_RESERVED`` Reserved pixel encoding formath](h)}(h **Constants**h]j%)}(hjeh]h Constants}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj_ubji)}(hhh](jn)}(h1``DP_PIXELFORMAT_RGB`` RGB pixel encoding format h](jt)}(h``DP_PIXELFORMAT_RGB``h]jz)}(hjh]hDP_PIXELFORMAT_RGB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj~ubj)}(hhh]h)}(hRGB pixel encoding formath]hRGB pixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubjn)}(h<``DP_PIXELFORMAT_YUV444`` YCbCr 4:4:4 pixel encoding format h](jt)}(h``DP_PIXELFORMAT_YUV444``h]jz)}(hjh]hDP_PIXELFORMAT_YUV444}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h!YCbCr 4:4:4 pixel encoding formath]h!YCbCr 4:4:4 pixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubjn)}(h<``DP_PIXELFORMAT_YUV422`` YCbCr 4:2:2 pixel encoding format h](jt)}(h``DP_PIXELFORMAT_YUV422``h]jz)}(hjh]hDP_PIXELFORMAT_YUV422}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h!YCbCr 4:2:2 pixel encoding formath]h!YCbCr 4:2:2 pixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj{ubjn)}(h<``DP_PIXELFORMAT_YUV420`` YCbCr 4:2:0 pixel encoding format h](jt)}(h``DP_PIXELFORMAT_YUV420``h]jz)}(hj/h]hDP_PIXELFORMAT_YUV420}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj)ubj)}(hhh]h)}(h!YCbCr 4:2:0 pixel encoding formath]h!YCbCr 4:2:0 pixel encoding format}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhj{ubjn)}(h7``DP_PIXELFORMAT_Y_ONLY`` Y Only pixel encoding format h](jt)}(h``DP_PIXELFORMAT_Y_ONLY``h]jz)}(hjhh]hDP_PIXELFORMAT_Y_ONLY}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjbubj)}(hhh]h)}(hY Only pixel encoding formath]hY Only pixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hMhj{ubjn)}(h1``DP_PIXELFORMAT_RAW`` RAW pixel encoding format h](jt)}(h``DP_PIXELFORMAT_RAW``h]jz)}(hjh]hDP_PIXELFORMAT_RAW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hRAW pixel encoding formath]hRAW pixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubjn)}(h:``DP_PIXELFORMAT_RESERVED`` Reserved pixel encoding formath](jt)}(h``DP_PIXELFORMAT_RESERVED``h]jz)}(hjh]hDP_PIXELFORMAT_RESERVED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hReserved pixel encoding formath]hReserved pixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubeh}(h]h ]h"]h$]h&]uh1jhhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubh)}(hThis enum is used to indicate DP VSC SDP Pixel encoding formats. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18]h]hThis enum is used to indicate DP VSC SDP Pixel encoding formats. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18]}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_colorimetry (C enum)c.dp_colorimetryhNtauh1jxhjhhhjhNubj)}(hhh](j)}(hdp_colorimetryh]j)}(henum dp_colorimetryh](j)}(hjl h]henum}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjhhMubj)}(hdp_colorimetryh]j)}(hjUh]hdp_colorimetry}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjhhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjhhMubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhjhhMhjPhhubj)}(hhh]h)}(hdrm DP Colorimetry formatsh]hdrm DP Colorimetry formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjhhMubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhjhNubj)}(hX **Constants** ``DP_COLORIMETRY_DEFAULT`` sRGB (IEC 61966-2-1) or ITU-R BT.601 colorimetry format ``DP_COLORIMETRY_RGB_WIDE_FIXED`` RGB wide gamut fixed point colorimetry format ``DP_COLORIMETRY_BT709_YCC`` ITU-R BT.709 colorimetry format ``DP_COLORIMETRY_RGB_WIDE_FLOAT`` RGB wide gamut floating point (scRGB (IEC 61966-2-2)) colorimetry format ``DP_COLORIMETRY_XVYCC_601`` xvYCC601 colorimetry format ``DP_COLORIMETRY_OPRGB`` OpRGB colorimetry format ``DP_COLORIMETRY_XVYCC_709`` xvYCC709 colorimetry format ``DP_COLORIMETRY_DCI_P3_RGB`` DCI-P3 (SMPTE RP 431-2) colorimetry format ``DP_COLORIMETRY_SYCC_601`` sYCC601 colorimetry format ``DP_COLORIMETRY_RGB_CUSTOM`` RGB Custom Color Profile colorimetry format ``DP_COLORIMETRY_OPYCC_601`` opYCC601 colorimetry format ``DP_COLORIMETRY_BT2020_RGB`` ITU-R BT.2020 R' G' B' colorimetry format ``DP_COLORIMETRY_BT2020_CYCC`` ITU-R BT.2020 Y'c C'bc C'rc colorimetry format ``DP_COLORIMETRY_BT2020_YCC`` ITU-R BT.2020 Y' C'b C'r colorimetry formath](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubji)}(hhh](jn)}(hS``DP_COLORIMETRY_DEFAULT`` sRGB (IEC 61966-2-1) or ITU-R BT.601 colorimetry format h](jt)}(h``DP_COLORIMETRY_DEFAULT``h]jz)}(hjh]hDP_COLORIMETRY_DEFAULT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h7sRGB (IEC 61966-2-1) or ITU-R BT.601 colorimetry formath]h7sRGB (IEC 61966-2-1) or ITU-R BT.601 colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hP``DP_COLORIMETRY_RGB_WIDE_FIXED`` RGB wide gamut fixed point colorimetry format h](jt)}(h!``DP_COLORIMETRY_RGB_WIDE_FIXED``h]jz)}(hjh]hDP_COLORIMETRY_RGB_WIDE_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h-RGB wide gamut fixed point colorimetry formath]h-RGB wide gamut fixed point colorimetry format}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hMhjubjn)}(h=``DP_COLORIMETRY_BT709_YCC`` ITU-R BT.709 colorimetry format h](jt)}(h``DP_COLORIMETRY_BT709_YCC``h]jz)}(hjQh]hDP_COLORIMETRY_BT709_YCC}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjKubj)}(hhh]h)}(hITU-R BT.709 colorimetry formath]hITU-R BT.709 colorimetry format}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjubjn)}(hk``DP_COLORIMETRY_RGB_WIDE_FLOAT`` RGB wide gamut floating point (scRGB (IEC 61966-2-2)) colorimetry format h](jt)}(h!``DP_COLORIMETRY_RGB_WIDE_FLOAT``h]jz)}(hjh]hDP_COLORIMETRY_RGB_WIDE_FLOAT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hHRGB wide gamut floating point (scRGB (IEC 61966-2-2)) colorimetry formath]hHRGB wide gamut floating point (scRGB (IEC 61966-2-2)) colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h9``DP_COLORIMETRY_XVYCC_601`` xvYCC601 colorimetry format h](jt)}(h``DP_COLORIMETRY_XVYCC_601``h]jz)}(hjh]hDP_COLORIMETRY_XVYCC_601}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hxvYCC601 colorimetry formath]hxvYCC601 colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h2``DP_COLORIMETRY_OPRGB`` OpRGB colorimetry format h](jt)}(h``DP_COLORIMETRY_OPRGB``h]jz)}(hjh]hDP_COLORIMETRY_OPRGB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hOpRGB colorimetry formath]hOpRGB colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h9``DP_COLORIMETRY_XVYCC_709`` xvYCC709 colorimetry format h](jt)}(h``DP_COLORIMETRY_XVYCC_709``h]jz)}(hj6h]hDP_COLORIMETRY_XVYCC_709}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhj0ubj)}(hhh]h)}(hxvYCC709 colorimetry formath]hxvYCC709 colorimetry format}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhMhjubjn)}(hI``DP_COLORIMETRY_DCI_P3_RGB`` DCI-P3 (SMPTE RP 431-2) colorimetry format h](jt)}(h``DP_COLORIMETRY_DCI_P3_RGB``h]jz)}(hjoh]hDP_COLORIMETRY_DCI_P3_RGB}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjiubj)}(hhh]h)}(h*DCI-P3 (SMPTE RP 431-2) colorimetry formath]h*DCI-P3 (SMPTE RP 431-2) colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h7``DP_COLORIMETRY_SYCC_601`` sYCC601 colorimetry format h](jt)}(h``DP_COLORIMETRY_SYCC_601``h]jz)}(hjh]hDP_COLORIMETRY_SYCC_601}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM hjubj)}(hhh]h)}(hsYCC601 colorimetry formath]hsYCC601 colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hJ``DP_COLORIMETRY_RGB_CUSTOM`` RGB Custom Color Profile colorimetry format h](jt)}(h``DP_COLORIMETRY_RGB_CUSTOM``h]jz)}(hjh]hDP_COLORIMETRY_RGB_CUSTOM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM hjubj)}(hhh]h)}(h+RGB Custom Color Profile colorimetry formath]h+RGB Custom Color Profile colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h9``DP_COLORIMETRY_OPYCC_601`` opYCC601 colorimetry format h](jt)}(h``DP_COLORIMETRY_OPYCC_601``h]jz)}(hjh]hDP_COLORIMETRY_OPYCC_601}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hopYCC601 colorimetry formath]hopYCC601 colorimetry format}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhjubjn)}(hH``DP_COLORIMETRY_BT2020_RGB`` ITU-R BT.2020 R' G' B' colorimetry format h](jt)}(h``DP_COLORIMETRY_BT2020_RGB``h]jz)}(hjSh]hDP_COLORIMETRY_BT2020_RGB}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjMubj)}(hhh]h)}(h)ITU-R BT.2020 R' G' B' colorimetry formath]h/ITU-R BT.2020 R’ G’ B’ colorimetry format}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjubjn)}(hN``DP_COLORIMETRY_BT2020_CYCC`` ITU-R BT.2020 Y'c C'bc C'rc colorimetry format h](jt)}(h``DP_COLORIMETRY_BT2020_CYCC``h]jz)}(hjh]hDP_COLORIMETRY_BT2020_CYCC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h.ITU-R BT.2020 Y'c C'bc C'rc colorimetry formath]h4ITU-R BT.2020 Y’c C’bc C’rc colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hI``DP_COLORIMETRY_BT2020_YCC`` ITU-R BT.2020 Y' C'b C'r colorimetry formath](jt)}(h``DP_COLORIMETRY_BT2020_YCC``h]jz)}(hjh]hDP_COLORIMETRY_BT2020_YCC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h+ITU-R BT.2020 Y' C'b C'r colorimetry formath]h1ITU-R BT.2020 Y’ C’b C’r colorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubh)}(hThis enum is used to indicate DP VSC SDP Colorimetry formats. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18] and a name of enum member follows enum drm_colorimetry definition.h]hThis enum is used to indicate DP VSC SDP Colorimetry formats. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18] and a name of enum member follows enum drm_colorimetry definition.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_dynamic_range (C enum)c.dp_dynamic_rangehNtauh1jxhjhhhjhNubj)}(hhh](j)}(hdp_dynamic_rangeh]j)}(henum dp_dynamic_rangeh](j)}(hjl h]henum}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjShMubj)}(hdp_dynamic_rangeh]j)}(hj@h]hdp_dynamic_range}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhjShMubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhjShMhj;hhubj)}(hhh]h)}(hdrm DP Dynamic Rangeh]hdrm DP Dynamic Range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjShMubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhjhNubj)}(h[**Constants** ``DP_DYNAMIC_RANGE_VESA`` VESA range ``DP_DYNAMIC_RANGE_CTA`` CTA rangeh](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubji)}(hhh](jn)}(h%``DP_DYNAMIC_RANGE_VESA`` VESA range h](jt)}(h``DP_DYNAMIC_RANGE_VESA``h]jz)}(hjh]hDP_DYNAMIC_RANGE_VESA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h VESA rangeh]h VESA range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h"``DP_DYNAMIC_RANGE_CTA`` CTA rangeh](jt)}(h``DP_DYNAMIC_RANGE_CTA``h]jz)}(hjh]hDP_DYNAMIC_RANGE_CTA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h CTA rangeh]h CTA range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubh)}(hThis enum is used to indicate DP VSC SDP Dynamic Range. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18]h]hThis enum is used to indicate DP VSC SDP Dynamic Range. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18]}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_content_type (C enum)c.dp_content_typehNtauh1jxhjhhhjhNubj)}(hhh](j)}(hdp_content_typeh]j)}(henum dp_content_typeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdp_content_typeh]j)}(hj}h]hdp_content_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjxhhubj)}(hhh]h)}(hdrm DP Content Typeh]hdrm DP Content Type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhjhNubj)}(h**Constants** ``DP_CONTENT_TYPE_NOT_DEFINED`` Not defined type ``DP_CONTENT_TYPE_GRAPHICS`` Graphics type ``DP_CONTENT_TYPE_PHOTO`` Photo type ``DP_CONTENT_TYPE_VIDEO`` Video type ``DP_CONTENT_TYPE_GAME`` Game typeh](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM$hjubji)}(hhh](jn)}(h1``DP_CONTENT_TYPE_NOT_DEFINED`` Not defined type h](jt)}(h``DP_CONTENT_TYPE_NOT_DEFINED``h]jz)}(hjh]hDP_CONTENT_TYPE_NOT_DEFINED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM'hjubj)}(hhh]h)}(hNot defined typeh]hNot defined type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM'hjubjn)}(h+``DP_CONTENT_TYPE_GRAPHICS`` Graphics type h](jt)}(h``DP_CONTENT_TYPE_GRAPHICS``h]jz)}(hj?h]hDP_CONTENT_TYPE_GRAPHICS}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM*hj9ubj)}(hhh]h)}(h Graphics typeh]h Graphics type}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThM*hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThM*hjubjn)}(h%``DP_CONTENT_TYPE_PHOTO`` Photo type h](jt)}(h``DP_CONTENT_TYPE_PHOTO``h]jz)}(hjxh]hDP_CONTENT_TYPE_PHOTO}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM-hjrubj)}(hhh]h)}(h Photo typeh]h Photo type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhM-hjubjn)}(h%``DP_CONTENT_TYPE_VIDEO`` Video type h](jt)}(h``DP_CONTENT_TYPE_VIDEO``h]jz)}(hjh]hDP_CONTENT_TYPE_VIDEO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM0hjubj)}(hhh]h)}(h Video typeh]h Video type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM0hjubjn)}(h"``DP_CONTENT_TYPE_GAME`` Game typeh](jt)}(h``DP_CONTENT_TYPE_GAME``h]jz)}(hjh]hDP_CONTENT_TYPE_GAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM2hjubj)}(hhh]h)}(h Game typeh]h Game type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM2hjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM6hjhhubh)}(hThis enum is used to indicate DP VSC SDP Content Types. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18] CTA-861-G defines content types and expected processing by a sink deviceh]hThis enum is used to indicate DP VSC SDP Content Types. It is based on DP 1.4 spec [Table 2-117: VSC SDP Payload for DB16 through DB18] CTA-861-G defines content types and expected processing by a sink device}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./include/drm/display/drm_dp.hhM!hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_vsc_sdp (C struct)c.drm_dp_vsc_sdphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_vsc_sdph]j)}(hstruct drm_dp_vsc_sdph](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjxhKubj)}(hdrm_dp_vsc_sdph]j)}(hjeh]hdrm_dp_vsc_sdp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjxhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjchhhjxhKubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhjxhKhj`hhubj)}(hhh]h)}(hdrm DP VSC SDPh]hdrm DP VSC SDP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKKhjhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjxhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_vsc_sdp { unsigned char sdp_type; unsigned char revision; unsigned char length; enum dp_pixelformat pixelformat; enum dp_colorimetry colorimetry; int bpc; enum dp_dynamic_range dynamic_range; enum dp_content_type content_type; }; **Members** ``sdp_type`` secondary-data packet type ``revision`` revision number ``length`` number of valid data bytes ``pixelformat`` pixel encoding format ``colorimetry`` colorimetry format ``bpc`` bit per color ``dynamic_range`` dynamic range information ``content_type`` CTA-861-G defines content types and expected processing by a sink deviceh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKOhjubj@)}(hXstruct drm_dp_vsc_sdp { unsigned char sdp_type; unsigned char revision; unsigned char length; enum dp_pixelformat pixelformat; enum dp_colorimetry colorimetry; int bpc; enum dp_dynamic_range dynamic_range; enum dp_content_type content_type; };h]hXstruct drm_dp_vsc_sdp { unsigned char sdp_type; unsigned char revision; unsigned char length; enum dp_pixelformat pixelformat; enum dp_colorimetry colorimetry; int bpc; enum dp_dynamic_range dynamic_range; enum dp_content_type content_type; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKQhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhK\hjubji)}(hhh](jn)}(h(``sdp_type`` secondary-data packet type h](jt)}(h ``sdp_type``h]jz)}(hjh]hsdp_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKRhjubj)}(hhh]h)}(hsecondary-data packet typeh]hsecondary-data packet type}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKRhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hKRhjubjn)}(h``revision`` revision number h](jt)}(h ``revision``h]jz)}(hjSh]hrevision}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKShjMubj)}(hhh]h)}(hrevision numberh]hrevision number}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKShjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhKShjubjn)}(h&``length`` number of valid data bytes h](jt)}(h ``length``h]jz)}(hjh]hlength}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKThjubj)}(hhh]h)}(hnumber of valid data bytesh]hnumber of valid data bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKThjubjn)}(h&``pixelformat`` pixel encoding format h](jt)}(h``pixelformat``h]jz)}(hjh]h pixelformat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKUhjubj)}(hhh]h)}(hpixel encoding formath]hpixel encoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKUhjubjn)}(h#``colorimetry`` colorimetry format h](jt)}(h``colorimetry``h]jz)}(hjh]h colorimetry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKVhjubj)}(hhh]h)}(hcolorimetry formath]hcolorimetry format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKVhjubjn)}(h``bpc`` bit per color h](jt)}(h``bpc``h]jz)}(hj7h]hbpc}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKWhj1ubj)}(hhh]h)}(h bit per colorh]h bit per color}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKWhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhKWhjubjn)}(h,``dynamic_range`` dynamic range information h](jt)}(h``dynamic_range``h]jz)}(hjph]h dynamic_range}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKXhjjubj)}(hhh]h)}(hdynamic range informationh]hdynamic range information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjhKXhjubjn)}(hY``content_type`` CTA-861-G defines content types and expected processing by a sink deviceh](jt)}(h``content_type``h]jz)}(hjh]h content_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKXhjubj)}(hhh]h)}(hHCTA-861-G defines content types and expected processing by a sink deviceh]hHCTA-861-G defines content types and expected processing by a sink device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKXhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhK\hjhhubh)}(hThis structure represents a DP VSC SDP of drm It is based on DP 1.4 spec [Table 2-116: VSC SDP Header Bytes] and [Table 2-117: VSC SDP Payload for DB16 through DB18]h]hThis structure represents a DP VSC SDP of drm It is based on DP 1.4 spec [Table 2-116: VSC SDP Header Bytes] and [Table 2-117: VSC SDP Payload for DB16 through DB18]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKLhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_as_sdp (C struct)c.drm_dp_as_sdphNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_dp_as_sdph]j)}(hstruct drm_dp_as_sdph](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKSubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hKSubj)}(h drm_dp_as_sdph]j)}(hj$h]h drm_dp_as_sdp}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj7hKSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj7hKSubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hKShjhhubj)}(hhh]h)}(hdrm DP Adaptive Sync SDPh]hdrm DP Adaptive Sync SDP}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKfhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hKSubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_as_sdp { unsigned char sdp_type; unsigned char revision; unsigned char length; int vtotal; int target_rr; int duration_incr_ms; int duration_decr_ms; bool target_rr_divider; enum operation_mode mode; }; **Members** ``sdp_type`` Secondary-data packet type ``revision`` Revision Number ``length`` Number of valid data bytes ``vtotal`` Minimum Vertical Vtotal ``target_rr`` Target Refresh ``duration_incr_ms`` Successive frame duration increase ``duration_decr_ms`` Successive frame duration decrease ``target_rr_divider`` Target refresh rate divider ``mode`` Adaptive Sync Operation Modeh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKjhjubj@)}(hstruct drm_dp_as_sdp { unsigned char sdp_type; unsigned char revision; unsigned char length; int vtotal; int target_rr; int duration_incr_ms; int duration_decr_ms; bool target_rr_divider; enum operation_mode mode; };h]hstruct drm_dp_as_sdp { unsigned char sdp_type; unsigned char revision; unsigned char length; int vtotal; int target_rr; int duration_incr_ms; int duration_decr_ms; bool target_rr_divider; enum operation_mode mode; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKlhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKxhjubji)}(hhh](jn)}(h(``sdp_type`` Secondary-data packet type h](jt)}(h ``sdp_type``h]jz)}(hjh]hsdp_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKmhjubj)}(hhh]h)}(hSecondary-data packet typeh]hSecondary-data packet type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKmhjubjn)}(h``revision`` Revision Number h](jt)}(h ``revision``h]jz)}(hjh]hrevision}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKnhj ubj)}(hhh]h)}(hRevision Numberh]hRevision Number}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKnhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hKnhjubjn)}(h&``length`` Number of valid data bytes h](jt)}(h ``length``h]jz)}(hjKh]hlength}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKohjEubj)}(hhh]h)}(hNumber of valid data bytesh]hNumber of valid data bytes}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKohjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hKohjubjn)}(h#``vtotal`` Minimum Vertical Vtotal h](jt)}(h ``vtotal``h]jz)}(hjh]hvtotal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKphj~ubj)}(hhh]h)}(hMinimum Vertical Vtotalh]hMinimum Vertical Vtotal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhKphjubjn)}(h``target_rr`` Target Refresh h](jt)}(h ``target_rr``h]jz)}(hjh]h target_rr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKqhjubj)}(hhh]h)}(hTarget Refreshh]hTarget Refresh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKqhjubjn)}(h8``duration_incr_ms`` Successive frame duration increase h](jt)}(h``duration_incr_ms``h]jz)}(hjh]hduration_incr_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKrhjubj)}(hhh]h)}(h"Successive frame duration increaseh]h"Successive frame duration increase }(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKrhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKrhjubjn)}(h8``duration_decr_ms`` Successive frame duration decrease h](jt)}(h``duration_decr_ms``h]jz)}(hj/h]hduration_decr_ms}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKshj)ubj)}(hhh]h)}(h"Successive frame duration decreaseh]h"Successive frame duration decrease}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKshjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhKshjubjn)}(h2``target_rr_divider`` Target refresh rate divider h](jt)}(h``target_rr_divider``h]jz)}(hjhh]htarget_rr_divider}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKthjbubj)}(hhh]h)}(hTarget refresh rate dividerh]hTarget refresh rate divider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKthj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hKthjubjn)}(h%``mode`` Adaptive Sync Operation Modeh](jt)}(h``mode``h]jz)}(hjh]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKthjubj)}(hhh]h)}(hAdaptive Sync Operation Modeh]hAdaptive Sync Operation Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKthjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKxhjhhubh)}(hThis structure represents a DP AS SDP of drm It is based on DP 2.1 spec [Table 2-126: Adaptive-Sync SDP Header Bytes] and [Table 2-127: Adaptive-Sync SDP Payload for DB0 through DB8]h]hThis structure represents a DP AS SDP of drm It is based on DP 2.1 spec [Table 2-126: Adaptive-Sync SDP Header Bytes] and [Table 2-127: Adaptive-Sync SDP Payload for DB0 through DB8]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKghjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_dsc_sink_supports_format (C function)!c.drm_dp_dsc_sink_supports_formathNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdbool drm_dp_dsc_sink_supports_format (const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 output_format)h]j)}(hcbool drm_dp_dsc_sink_supports_format(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 output_format)h](j)}(hjAh]hbool}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hKubj)}(hdrm_dp_dsc_sink_supports_formath]j)}(hdrm_dp_dsc_sink_supports_formath]hdrm_dp_dsc_sink_supports_format}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hKubj)}(h?(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 output_format)h](j)}(h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hu8h]hu8}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjDsb!c.drm_dp_dsc_sink_supports_formatasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hdsc_dpcdh]hdsc_dpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(h[h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubh)}(hhh]j)}(hDP_DSC_RECEIVER_CAP_SIZEh]hDP_DSC_RECEIVER_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_dp_dsc_sink_supports_formatasbuh1hhjZubj9)}(h]h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hu8 output_formath](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_dp_dsc_sink_supports_formatasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h output_formath]h output_format}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj/hKhjhhubj)}(hhh]h)}(h3check if sink supports DSC with given output formath]h3check if sink supports DSC with given output format}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKhjVhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC-capability DPCDs of the sink ``u8 output_format`` output_format which is to be checked **Description** Returns true if the sink supports DSC with the given output_format, false otherwise.h](h)}(h**Parameters**h]j%)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKhjuubji)}(hhh](jn)}(hQ``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC-capability DPCDs of the sink h](jt)}(h/``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]``h]jz)}(hjh]h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKhjubj)}(hhh]h)}(h DSC-capability DPCDs of the sinkh]h DSC-capability DPCDs of the sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h:``u8 output_format`` output_format which is to be checked h](jt)}(h``u8 output_format``h]jz)}(hjh]hu8 output_format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKhjubj)}(hhh]h)}(h$output_format which is to be checkedh]h$output_format which is to be checked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjuubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKhjuubh)}(hTReturns true if the sink supports DSC with the given output_format, false otherwise.h]hTReturns true if the sink supports DSC with the given output_format, false otherwise.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhKhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_edp_backlight_supported (C function)c.drm_edp_backlight_supportedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hNbool drm_edp_backlight_supported (const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE])h]j)}(hMbool drm_edp_backlight_supported(const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE])h](j)}(hjAh]hbool}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhj`hM ubj)}(hdrm_edp_backlight_supportedh]j)}(hdrm_edp_backlight_supportedh]hdrm_edp_backlight_supported}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhj`hM ubj)}(h-(const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE])h]j)}(h+const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjusbc.drm_edp_backlight_supportedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hedp_dpcdh]hedp_dpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hEDP_DISPLAY_CTL_CAP_SIZEh]hEDP_DISPLAY_CTL_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edp_backlight_supportedasbuh1hhjubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjOhhhj`hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhj`hM ubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1jhj`hM hjHhhubj)}(hhh]h)}(h,Check an eDP DPCD for VESA backlight supporth]h,Check an eDP DPCD for VESA backlight support}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jhjHhhhj`hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]`` The DPCD to check **Description** Note that currently this function will return ``false`` for panels which support various DPCD backlight features but which require the brightness be set through PWM, and don't support setting the brightness level via the DPCD. **Return** ``True`` if **edp_dpcd** indicates that VESA backlight controls are supported, ``false`` otherwiseh](h)}(h**Parameters**h]j%)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj\ubji)}(hhh]jn)}(hB``const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]`` The DPCD to check h](jt)}(h/``const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]``h]jz)}(hjh]h+const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj{ubj)}(hhh]h)}(hThe DPCD to checkh]hThe DPCD to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjxubah}(h]h ]h"]h$]h&]uh1jhhj\ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj\ubh)}(hNote that currently this function will return ``false`` for panels which support various DPCD backlight features but which require the brightness be set through PWM, and don't support setting the brightness level via the DPCD.h](h.Note that currently this function will return }(hjhhhNhNubjz)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh for panels which support various DPCD backlight features but which require the brightness be set through PWM, and don’t support setting the brightness level via the DPCD.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj\ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj\ubh)}(hb``True`` if **edp_dpcd** indicates that VESA backlight controls are supported, ``false`` otherwiseh](jz)}(h``True``h]hTrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh if }(hj hhhNhNubj%)}(h **edp_dpcd**h]hedp_dpcd}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh7 indicates that VESA backlight controls are supported, }(hj hhhNhNubjz)}(h ``false``h]hfalse}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh otherwise}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dp_is_uhbr_rate (C function)c.drm_dp_is_uhbr_ratehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h(bool drm_dp_is_uhbr_rate (int link_rate)h]j)}(h'bool drm_dp_is_uhbr_rate(int link_rate)h](j)}(hjAh]hbool}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM.ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjyhM.ubj)}(hdrm_dp_is_uhbr_rateh]j)}(hdrm_dp_is_uhbr_rateh]hdrm_dp_is_uhbr_rate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjyhM.ubj)}(h(int link_rate)h]j)}(h int link_rateh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h link_rateh]h link_rate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhjyhM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjdhhhjyhM.ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhjyhM.hjahhubj)}(hhh]h)}(h Determine if a link rate is UHBRh]h Determine if a link rate is UHBR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM'hjhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjyhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``int link_rate`` link rate in 10kbits/s units **Description** Determine if the provided link rate is an UHBR rate. **Return** ``True`` if **link_rate** is an UHBR rate.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM+hj ubji)}(hhh]jn)}(h/``int link_rate`` link rate in 10kbits/s units h](jt)}(h``int link_rate``h]jz)}(hj/h]h int link_rate}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM(hj)ubj)}(hhh]h)}(hlink rate in 10kbits/s unitsh]hlink rate in 10kbits/s units}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM(hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhM(hj&ubah}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM*hj ubh)}(h4Determine if the provided link rate is an UHBR rate.h]h4Determine if the provided link rate is an UHBR rate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM*hj ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM,hj ubh)}(h*``True`` if **link_rate** is an UHBR rate.h](jz)}(h``True``h]hTrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubj%)}(h **link_rate**h]h link_rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is an UHBR rate.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM,hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_aux_msg (C struct)c.drm_dp_aux_msghNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_aux_msgh]j)}(hstruct drm_dp_aux_msgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM1ubj)}(hdrm_dp_aux_msgh]j)}(hjh]hdrm_dp_aux_msg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM1ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM1hjhhubj)}(hhh]h)}(h#DisplayPort AUX channel transactionh]h#DisplayPort AUX channel transaction}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM8hj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM1ubeh}(h]h ](jstructeh"]h$]h&]jjjjPjjPjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_aux_msg { unsigned int address; u8 request; u8 reply; void *buffer; size_t size; }; **Members** ``address`` address of the (first) register to access ``request`` contains the type of transaction (see DP_AUX_* macros) ``reply`` upon completion, contains the reply type of the transaction ``buffer`` pointer to a transmission or reception buffer ``size`` size of **buffer**h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubh:}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM<hjTubj@)}(hustruct drm_dp_aux_msg { unsigned int address; u8 request; u8 reply; void *buffer; size_t size; };h]hustruct drm_dp_aux_msg { unsigned int address; u8 request; u8 reply; void *buffer; size_t size; };}hjusbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM>hjTubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMFhjTubji)}(hhh](jn)}(h6``address`` address of the (first) register to access h](jt)}(h ``address``h]jz)}(hjh]haddress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM:hjubj)}(hhh]h)}(h)address of the (first) register to accessh]h)address of the (first) register to access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM:hjubjn)}(hC``request`` contains the type of transaction (see DP_AUX_* macros) h](jt)}(h ``request``h]jz)}(hjh]hrequest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM;hjubj)}(hhh]h)}(h6contains the type of transaction (see DP_AUX_* macros)h]h6contains the type of transaction (see DP_AUX_* macros)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM;hjubjn)}(hF``reply`` upon completion, contains the reply type of the transaction h](jt)}(h ``reply``h]jz)}(hjh]hreply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM<hjubj)}(hhh]h)}(h;upon completion, contains the reply type of the transactionh]h;upon completion, contains the reply type of the transaction}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM<hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj,hM<hjubjn)}(h9``buffer`` pointer to a transmission or reception buffer h](jt)}(h ``buffer``h]jz)}(hjPh]hbuffer}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM=hjJubj)}(hhh]h)}(h-pointer to a transmission or reception bufferh]h-pointer to a transmission or reception buffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehM=hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehM=hjubjn)}(h``size`` size of **buffer**h](jt)}(h``size``h]jz)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM=hjubj)}(hhh]h)}(hsize of **buffer**h](hsize of }(hjhhhNhNubj%)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM=hjubeh}(h]h ]h"]h$]h&]uh1jhhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_aux_cec (C struct)c.drm_dp_aux_cechNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_aux_cech]j)}(hstruct drm_dp_aux_cech](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMDubj)}(hdrm_dp_aux_cech]j)}(hjh]hdrm_dp_aux_cec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMDubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMDhjhhubj)}(hhh]h)}(h"DisplayPort CEC-Tunneling-over-AUXh]h"DisplayPort CEC-Tunneling-over-AUX}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMLhj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMDubeh}(h]h ](jstructeh"]h$]h&]jjjjKjjKjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_aux_cec { struct mutex lock; struct cec_adapter *adap; struct drm_connector *connector; struct delayed_work unregister_work; }; **Members** ``lock`` mutex protecting this struct ``adap`` the CEC adapter for CEC-Tunneling-over-AUX support. ``connector`` the connector this CEC adapter is associated with ``unregister_work`` unregister the CEC adapterh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMPhjOubj@)}(hstruct drm_dp_aux_cec { struct mutex lock; struct cec_adapter *adap; struct drm_connector *connector; struct delayed_work unregister_work; };h]hstruct drm_dp_aux_cec { struct mutex lock; struct cec_adapter *adap; struct drm_connector *connector; struct delayed_work unregister_work; };}hjpsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMRhjOubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMYhjOubji)}(hhh](jn)}(h&``lock`` mutex protecting this struct h](jt)}(h``lock``h]jz)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMNhjubj)}(hhh]h)}(hmutex protecting this structh]hmutex protecting this struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMNhjubjn)}(h=``adap`` the CEC adapter for CEC-Tunneling-over-AUX support. h](jt)}(h``adap``h]jz)}(hjh]hadap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMOhjubj)}(hhh]h)}(h3the CEC adapter for CEC-Tunneling-over-AUX support.h]h3the CEC adapter for CEC-Tunneling-over-AUX support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMOhjubjn)}(h@``connector`` the connector this CEC adapter is associated with h](jt)}(h ``connector``h]jz)}(hjh]h connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMPhj ubj)}(hhh]h)}(h1the connector this CEC adapter is associated withh]h1the connector this CEC adapter is associated with}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMPhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMPhjubjn)}(h.``unregister_work`` unregister the CEC adapterh](jt)}(h``unregister_work``h]jz)}(hjKh]hunregister_work}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMPhjEubj)}(hhh]h)}(hunregister the CEC adapterh]hunregister the CEC adapter}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMQhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hMPhjubeh}(h]h ]h"]h$]h&]uh1jhhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_aux (C struct) c.drm_dp_auxhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_dp_auxh]j)}(hstruct drm_dp_auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMWubj)}(h drm_dp_auxh]j)}(hjh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMWubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMWubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMWhjhhubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMWubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX{**Definition**:: struct drm_dp_aux { const char *name; struct i2c_adapter ddc; struct device *dev; struct drm_device *drm_dev; struct drm_crtc *crtc; struct mutex hw_mutex; struct work_struct crc_work; u8 crc_count; ssize_t (*transfer)(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg); int (*wait_hpd_asserted)(struct drm_dp_aux *aux, unsigned long wait_us); unsigned i2c_nack_count; unsigned i2c_defer_count; struct drm_dp_aux_cec cec; bool is_remote; bool powered_down; }; **Members** ``name`` user-visible name of this AUX channel and the I2C-over-AUX adapter. It's also used to specify the name of the I2C adapter. If set to ``NULL``, dev_name() of **dev** will be used. ``ddc`` I2C adapter that can be used for I2C-over-AUX communication ``dev`` pointer to struct device that is the parent for this AUX channel. ``drm_dev`` pointer to the :c:type:`drm_device` that owns this AUX channel. Beware, this may be ``NULL`` before drm_dp_aux_register() has been called. It should be set to the :c:type:`drm_device` that will be using this AUX channel as early as possible. For many graphics drivers this should happen before drm_dp_aux_init(), however it's perfectly fine to set this field later so long as it's assigned before calling drm_dp_aux_register(). ``crtc`` backpointer to the crtc that is currently using this AUX channel ``hw_mutex`` internal mutex used for locking transfers. Note that if the underlying hardware is shared among multiple channels, the driver needs to do additional locking to prevent concurrent access. ``crc_work`` worker that captures CRCs for each frame ``crc_count`` counter of captured frame CRCs ``transfer`` transfers a message representing a single AUX transaction. This is a hardware-specific implementation of how transactions are executed that the drivers must provide. A pointer to a :c:type:`drm_dp_aux_msg` structure describing the transaction is passed into this function. Upon success, the implementation should return the number of payload bytes that were transferred, or a negative error-code on failure. Helpers will propagate these errors, with the exception of the ``-EBUSY`` error, which causes a transaction to be retried. On a short, helpers will return ``-EPROTO`` to make it simpler to check for failure. The **transfer\(\)** function must only modify the reply field of the :c:type:`drm_dp_aux_msg` structure. The retry logic and i2c helpers assume this is the case. Also note that this callback can be called no matter the state **dev** is in and also no matter what state the panel is in. It's expected: - If the **dev** providing the AUX bus is currently unpowered then it will power itself up for the transfer. - If we're on eDP (using a drm_panel) and the panel is not in a state where it can respond (it's not powered or it's in a low power state) then this function may return an error, but not crash. It's up to the caller of this code to make sure that the panel is powered on if getting an error back is not OK. If a drm_panel driver is initiating a DP AUX transfer it may power itself up however it wants. All other code should ensure that the pre_enable() bridge chain (which eventually calls the drm_panel prepare function) has powered the panel. ``wait_hpd_asserted`` wait for HPD to be asserted This is mainly useful for eDP panels drivers to wait for an eDP panel to finish powering on. It is optional for DP AUX controllers to implement this function. It is required for DP AUX endpoints (panel drivers) to call this function after powering up but before doing AUX transfers unless the DP AUX endpoint driver knows that we're not using the AUX controller's HPD. One example of the panel driver not needing to call this is if HPD is hooked up to a GPIO that the panel driver can read directly. If a DP AUX controller does not implement this function then it may still support eDP panels that use the AUX controller's built-in HPD signal by implementing a long wait for HPD in the transfer() callback, though this is deprecated. This function will efficiently wait for the HPD signal to be asserted. The `wait_us` parameter that is passed in says that we know that the HPD signal is expected to be asserted within `wait_us` microseconds. This function could wait for longer than `wait_us` if the logic in the DP controller has a long debouncing time. The important thing is that if this function returns success that the DP controller is ready to send AUX transactions. This function returns 0 if HPD was asserted or -ETIMEDOUT if time expired and HPD wasn't asserted. This function should not print timeout errors to the log. The semantics of this function are designed to match the readx_poll_timeout() function. That means a `wait_us` of 0 means to wait forever. Like readx_poll_timeout(), this function may sleep. NOTE: this function specifically reports the state of the HPD pin that's associated with the DP AUX channel. This is different from the HPD concept in much of the rest of DRM which is more about physical presence of a display. For eDP, for instance, a display is assumed always present even if the HPD pin is deasserted. ``i2c_nack_count`` Counts I2C NACKs, used for DP validation. ``i2c_defer_count`` Counts I2C DEFERs, used for DP validation. ``cec`` struct containing fields used for CEC-Tunneling-over-AUX. ``is_remote`` Is this AUX CH actually using sideband messaging. ``powered_down`` If true then the remote endpoint is powered down.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM^hjubj@)}(hXstruct drm_dp_aux { const char *name; struct i2c_adapter ddc; struct device *dev; struct drm_device *drm_dev; struct drm_crtc *crtc; struct mutex hw_mutex; struct work_struct crc_work; u8 crc_count; ssize_t (*transfer)(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg); int (*wait_hpd_asserted)(struct drm_dp_aux *aux, unsigned long wait_us); unsigned i2c_nack_count; unsigned i2c_defer_count; struct drm_dp_aux_cec cec; bool is_remote; bool powered_down; };h]hXstruct drm_dp_aux { const char *name; struct i2c_adapter ddc; struct device *dev; struct drm_device *drm_dev; struct drm_crtc *crtc; struct mutex hw_mutex; struct work_struct crc_work; u8 crc_count; ssize_t (*transfer)(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg); int (*wait_hpd_asserted)(struct drm_dp_aux *aux, unsigned long wait_us); unsigned i2c_nack_count; unsigned i2c_defer_count; struct drm_dp_aux_cec cec; bool is_remote; bool powered_down; };}hj$sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM`hjubh)}(h **Members**h]j%)}(hj5h]hMembers}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMrhjubji)}(hhh](jn)}(h``name`` user-visible name of this AUX channel and the I2C-over-AUX adapter. It's also used to specify the name of the I2C adapter. If set to ``NULL``, dev_name() of **dev** will be used. h](jt)}(h``name``h]jz)}(hjTh]hname}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMmhjNubj)}(hhh](h)}(hCuser-visible name of this AUX channel and the I2C-over-AUX adapter.h]hCuser-visible name of this AUX channel and the I2C-over-AUX adapter.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMihjjubh)}(hnIt's also used to specify the name of the I2C adapter. If set to ``NULL``, dev_name() of **dev** will be used.h](hCIt’s also used to specify the name of the I2C adapter. If set to }(hj|hhhNhNubjz)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubh, dev_name() of }(hj|hhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubh will be used.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMlhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihMmhjKubjn)}(hD``ddc`` I2C adapter that can be used for I2C-over-AUX communication h](jt)}(h``ddc``h]jz)}(hjh]hddc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMshjubj)}(hhh]h)}(h;I2C adapter that can be used for I2C-over-AUX communicationh]h;I2C adapter that can be used for I2C-over-AUX communication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMshjKubjn)}(hJ``dev`` pointer to struct device that is the parent for this AUX channel. h](jt)}(h``dev``h]jz)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMyhjubj)}(hhh]h)}(hApointer to struct device that is the parent for this AUX channel.h]hApointer to struct device that is the parent for this AUX channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMyhjKubjn)}(hX``drm_dev`` pointer to the :c:type:`drm_device` that owns this AUX channel. Beware, this may be ``NULL`` before drm_dp_aux_register() has been called. It should be set to the :c:type:`drm_device` that will be using this AUX channel as early as possible. For many graphics drivers this should happen before drm_dp_aux_init(), however it's perfectly fine to set this field later so long as it's assigned before calling drm_dp_aux_register(). h](jt)}(h ``drm_dev``h]jz)}(hj5h]hdrm_dev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj/ubj)}(hhh](h)}(hpointer to the :c:type:`drm_device` that owns this AUX channel. Beware, this may be ``NULL`` before drm_dp_aux_register() has been called.h](hpointer to the }(hjNhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hjXh]h drm_device}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM~hjNubh1 that owns this AUX channel. Beware, this may be }(hjNhhhNhNubjz)}(h``NULL``h]hNULL}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubh. before drm_dp_aux_register() has been called.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhM~hjKubh)}(hX It should be set to the :c:type:`drm_device` that will be using this AUX channel as early as possible. For many graphics drivers this should happen before drm_dp_aux_init(), however it's perfectly fine to set this field later so long as it's assigned before calling drm_dp_aux_register().h](hIt should be set to the }(hjhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hjh]h drm_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh that will be using this AUX channel as early as possible. For many graphics drivers this should happen before drm_dp_aux_init(), however it’s perfectly fine to set this field later so long as it’s assigned before calling drm_dp_aux_register().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhMhjKubjn)}(hJ``crtc`` backpointer to the crtc that is currently using this AUX channel h](jt)}(h``crtc``h]jz)}(hjh]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h@backpointer to the crtc that is currently using this AUX channelh]h@backpointer to the crtc that is currently using this AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(h``hw_mutex`` internal mutex used for locking transfers. Note that if the underlying hardware is shared among multiple channels, the driver needs to do additional locking to prevent concurrent access. h](jt)}(h ``hw_mutex``h]jz)}(hjh]hhw_mutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj ubj)}(hhh](h)}(h*internal mutex used for locking transfers.h]h*internal mutex used for locking transfers.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj&ubh)}(hNote that if the underlying hardware is shared among multiple channels, the driver needs to do additional locking to prevent concurrent access.h]hNote that if the underlying hardware is shared among multiple channels, the driver needs to do additional locking to prevent concurrent access.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj%hMhjKubjn)}(h6``crc_work`` worker that captures CRCs for each frame h](jt)}(h ``crc_work``h]jz)}(hjYh]hcrc_work}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjSubj)}(hhh]h)}(h(worker that captures CRCs for each frameh]h(worker that captures CRCs for each frame}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhjKubjn)}(h-``crc_count`` counter of captured frame CRCs h](jt)}(h ``crc_count``h]jz)}(hjh]h crc_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hcounter of captured frame CRCsh]hcounter of captured frame CRCs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(hXJ``transfer`` transfers a message representing a single AUX transaction. This is a hardware-specific implementation of how transactions are executed that the drivers must provide. A pointer to a :c:type:`drm_dp_aux_msg` structure describing the transaction is passed into this function. Upon success, the implementation should return the number of payload bytes that were transferred, or a negative error-code on failure. Helpers will propagate these errors, with the exception of the ``-EBUSY`` error, which causes a transaction to be retried. On a short, helpers will return ``-EPROTO`` to make it simpler to check for failure. The **transfer\(\)** function must only modify the reply field of the :c:type:`drm_dp_aux_msg` structure. The retry logic and i2c helpers assume this is the case. Also note that this callback can be called no matter the state **dev** is in and also no matter what state the panel is in. It's expected: - If the **dev** providing the AUX bus is currently unpowered then it will power itself up for the transfer. - If we're on eDP (using a drm_panel) and the panel is not in a state where it can respond (it's not powered or it's in a low power state) then this function may return an error, but not crash. It's up to the caller of this code to make sure that the panel is powered on if getting an error back is not OK. If a drm_panel driver is initiating a DP AUX transfer it may power itself up however it wants. All other code should ensure that the pre_enable() bridge chain (which eventually calls the drm_panel prepare function) has powered the panel. h](jt)}(h ``transfer``h]jz)}(hjh]htransfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh](h)}(h:transfers a message representing a single AUX transaction.h]h:transfers a message representing a single AUX transaction.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(hjThis is a hardware-specific implementation of how transactions are executed that the drivers must provide.h]hjThis is a hardware-specific implementation of how transactions are executed that the drivers must provide.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(hA pointer to a :c:type:`drm_dp_aux_msg` structure describing the transaction is passed into this function. Upon success, the implementation should return the number of payload bytes that were transferred, or a negative error-code on failure.h](hA pointer to a }(hjhhhNhNubh)}(h:c:type:`drm_dp_aux_msg`h]jz)}(hj h]hdrm_dp_aux_msg}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_aux_msguh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh structure describing the transaction is passed into this function. Upon success, the implementation should return the number of payload bytes that were transferred, or a negative error-code on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhjubh)}(hHelpers will propagate these errors, with the exception of the ``-EBUSY`` error, which causes a transaction to be retried. On a short, helpers will return ``-EPROTO`` to make it simpler to check for failure.h](h?Helpers will propagate these errors, with the exception of the }(hj4hhhNhNubjz)}(h ``-EBUSY``h]h-EBUSY}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubhR error, which causes a transaction to be retried. On a short, helpers will return }(hj4hhhNhNubjz)}(h ``-EPROTO``h]h-EPROTO}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubh) to make it simpler to check for failure.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(hThe **transfer\(\)** function must only modify the reply field of the :c:type:`drm_dp_aux_msg` structure. The retry logic and i2c helpers assume this is the case.h](hThe }(hjghhhNhNubj%)}(h**transfer\(\)**h]h transfer()}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubh2 function must only modify the reply field of the }(hjghhhNhNubh)}(h:c:type:`drm_dp_aux_msg`h]jz)}(hjh]hdrm_dp_aux_msg}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_aux_msguh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjgubhD structure. The retry logic and i2c helpers assume this is the case.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hAlso note that this callback can be called no matter the state **dev** is in and also no matter what state the panel is in. It's expected:h](h?Also note that this callback can be called no matter the state }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhF is in and also no matter what state the panel is in. It’s expected:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(hhh](h)}(hkIf the **dev** providing the AUX bus is currently unpowered then it will power itself up for the transfer. h]h)}(hjIf the **dev** providing the AUX bus is currently unpowered then it will power itself up for the transfer.h](hIf the }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh\ providing the AUX bus is currently unpowered then it will power itself up for the transfer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hXIf we're on eDP (using a drm_panel) and the panel is not in a state where it can respond (it's not powered or it's in a low power state) then this function may return an error, but not crash. It's up to the caller of this code to make sure that the panel is powered on if getting an error back is not OK. If a drm_panel driver is initiating a DP AUX transfer it may power itself up however it wants. All other code should ensure that the pre_enable() bridge chain (which eventually calls the drm_panel prepare function) has powered the panel. h]h)}(hXIf we're on eDP (using a drm_panel) and the panel is not in a state where it can respond (it's not powered or it's in a low power state) then this function may return an error, but not crash. It's up to the caller of this code to make sure that the panel is powered on if getting an error back is not OK. If a drm_panel driver is initiating a DP AUX transfer it may power itself up however it wants. All other code should ensure that the pre_enable() bridge chain (which eventually calls the drm_panel prepare function) has powered the panel.h]hX&If we’re on eDP (using a drm_panel) and the panel is not in a state where it can respond (it’s not powered or it’s in a low power state) then this function may return an error, but not crash. It’s up to the caller of this code to make sure that the panel is powered on if getting an error back is not OK. If a drm_panel driver is initiating a DP AUX transfer it may power itself up however it wants. All other code should ensure that the pre_enable() bridge chain (which eventually calls the drm_panel prepare function) has powered the panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(hXl``wait_hpd_asserted`` wait for HPD to be asserted This is mainly useful for eDP panels drivers to wait for an eDP panel to finish powering on. It is optional for DP AUX controllers to implement this function. It is required for DP AUX endpoints (panel drivers) to call this function after powering up but before doing AUX transfers unless the DP AUX endpoint driver knows that we're not using the AUX controller's HPD. One example of the panel driver not needing to call this is if HPD is hooked up to a GPIO that the panel driver can read directly. If a DP AUX controller does not implement this function then it may still support eDP panels that use the AUX controller's built-in HPD signal by implementing a long wait for HPD in the transfer() callback, though this is deprecated. This function will efficiently wait for the HPD signal to be asserted. The `wait_us` parameter that is passed in says that we know that the HPD signal is expected to be asserted within `wait_us` microseconds. This function could wait for longer than `wait_us` if the logic in the DP controller has a long debouncing time. The important thing is that if this function returns success that the DP controller is ready to send AUX transactions. This function returns 0 if HPD was asserted or -ETIMEDOUT if time expired and HPD wasn't asserted. This function should not print timeout errors to the log. The semantics of this function are designed to match the readx_poll_timeout() function. That means a `wait_us` of 0 means to wait forever. Like readx_poll_timeout(), this function may sleep. NOTE: this function specifically reports the state of the HPD pin that's associated with the DP AUX channel. This is different from the HPD concept in much of the rest of DRM which is more about physical presence of a display. For eDP, for instance, a display is assumed always present even if the HPD pin is deasserted. h](jt)}(h``wait_hpd_asserted``h]jz)}(hj+h]hwait_hpd_asserted}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj%ubj)}(hhh](h)}(hwait for HPD to be assertedh]hwait for HPD to be asserted}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubh)}(hXThis is mainly useful for eDP panels drivers to wait for an eDP panel to finish powering on. It is optional for DP AUX controllers to implement this function. It is required for DP AUX endpoints (panel drivers) to call this function after powering up but before doing AUX transfers unless the DP AUX endpoint driver knows that we're not using the AUX controller's HPD. One example of the panel driver not needing to call this is if HPD is hooked up to a GPIO that the panel driver can read directly.h]hXThis is mainly useful for eDP panels drivers to wait for an eDP panel to finish powering on. It is optional for DP AUX controllers to implement this function. It is required for DP AUX endpoints (panel drivers) to call this function after powering up but before doing AUX transfers unless the DP AUX endpoint driver knows that we’re not using the AUX controller’s HPD. One example of the panel driver not needing to call this is if HPD is hooked up to a GPIO that the panel driver can read directly.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubh)}(hIf a DP AUX controller does not implement this function then it may still support eDP panels that use the AUX controller's built-in HPD signal by implementing a long wait for HPD in the transfer() callback, though this is deprecated.h]hIf a DP AUX controller does not implement this function then it may still support eDP panels that use the AUX controller’s built-in HPD signal by implementing a long wait for HPD in the transfer() callback, though this is deprecated.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubh)}(hXThis function will efficiently wait for the HPD signal to be asserted. The `wait_us` parameter that is passed in says that we know that the HPD signal is expected to be asserted within `wait_us` microseconds. This function could wait for longer than `wait_us` if the logic in the DP controller has a long debouncing time. The important thing is that if this function returns success that the DP controller is ready to send AUX transactions.h](hKThis function will efficiently wait for the HPD signal to be asserted. The }(hjqhhhNhNubhtitle_reference)}(h `wait_us`h]hwait_us}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubhe parameter that is passed in says that we know that the HPD signal is expected to be asserted within }(hjqhhhNhNubjz)}(h `wait_us`h]hwait_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh8 microseconds. This function could wait for longer than }(hjqhhhNhNubjz)}(h `wait_us`h]hwait_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubh if the logic in the DP controller has a long debouncing time. The important thing is that if this function returns success that the DP controller is ready to send AUX transactions.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubh)}(hThis function returns 0 if HPD was asserted or -ETIMEDOUT if time expired and HPD wasn't asserted. This function should not print timeout errors to the log.h]hThis function returns 0 if HPD was asserted or -ETIMEDOUT if time expired and HPD wasn’t asserted. This function should not print timeout errors to the log.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubh)}(hThe semantics of this function are designed to match the readx_poll_timeout() function. That means a `wait_us` of 0 means to wait forever. Like readx_poll_timeout(), this function may sleep.h](heThe semantics of this function are designed to match the readx_poll_timeout() function. That means a }(hjhhhNhNubjz)}(h `wait_us`h]hwait_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhP of 0 means to wait forever. Like readx_poll_timeout(), this function may sleep.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubh)}(hX@NOTE: this function specifically reports the state of the HPD pin that's associated with the DP AUX channel. This is different from the HPD concept in much of the rest of DRM which is more about physical presence of a display. For eDP, for instance, a display is assumed always present even if the HPD pin is deasserted.h]hXBNOTE: this function specifically reports the state of the HPD pin that’s associated with the DP AUX channel. This is different from the HPD concept in much of the rest of DRM which is more about physical presence of a display. For eDP, for instance, a display is assumed always present even if the HPD pin is deasserted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj@hMhjKubjn)}(h=``i2c_nack_count`` Counts I2C NACKs, used for DP validation. h](jt)}(h``i2c_nack_count``h]jz)}(hj h]hi2c_nack_count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h)Counts I2C NACKs, used for DP validation.h]h)Counts I2C NACKs, used for DP validation.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(h?``i2c_defer_count`` Counts I2C DEFERs, used for DP validation. h](jt)}(h``i2c_defer_count``h]jz)}(hjBh]hi2c_defer_count}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj<ubj)}(hhh]h)}(h*Counts I2C DEFERs, used for DP validation.h]h*Counts I2C DEFERs, used for DP validation.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhjWhMhjKubjn)}(hB``cec`` struct containing fields used for CEC-Tunneling-over-AUX. h](jt)}(h``cec``h]jz)}(hj{h]hcec}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjuubj)}(hhh]h)}(h9struct containing fields used for CEC-Tunneling-over-AUX.h]h9struct containing fields used for CEC-Tunneling-over-AUX.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(h@``is_remote`` Is this AUX CH actually using sideband messaging. h](jt)}(h ``is_remote``h]jz)}(hjh]h is_remote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h1Is this AUX CH actually using sideband messaging.h]h1Is this AUX CH actually using sideband messaging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(hB``powered_down`` If true then the remote endpoint is powered down.h](jt)}(h``powered_down``h]jz)}(hjh]h powered_down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h1If true then the remote endpoint is powered down.h]h1If true then the remote endpoint is powered down.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM hjhhubh)}(hXRAn AUX channel can also be used to transport I2C messages to a sink. A typical application of that is to access an EDID that's present in the sink device. The **transfer\(\)** function can also be used to execute such transactions. The drm_dp_aux_register() function registers an I2C adapter that can be passed to drm_probe_ddc(). Upon removal, drivers should call drm_dp_aux_unregister() to remove the I2C adapter. The I2C adapter uses long transfers by default; if a partial response is received, the adapter will drop down to the size given by the partial response for this transaction only.h](hAn AUX channel can also be used to transport I2C messages to a sink. A typical application of that is to access an EDID that’s present in the sink device. The }(hjFhhhNhNubj%)}(h**transfer\(\)**h]h transfer()}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubhX function can also be used to execute such transactions. The drm_dp_aux_register() function registers an I2C adapter that can be passed to drm_probe_ddc(). Upon removal, drivers should call drm_dp_aux_unregister() to remove the I2C adapter. The I2C adapter uses long transfers by default; if a partial response is received, the adapter will drop down to the size given by the partial response for this transaction only.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM[hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_dpcd_readb (C function)c.drm_dp_dpcd_readbhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hSssize_t drm_dp_dpcd_readb (struct drm_dp_aux *aux, unsigned int offset, u8 *valuep)h]j)}(hRssize_t drm_dp_dpcd_readb(struct drm_dp_aux *aux, unsigned int offset, u8 *valuep)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_readbsbc.drm_dp_dpcd_readbasbuh1hhj|hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMubj)}(hdrm_dp_dpcd_readbh]j)}(hjh]hdrm_dp_dpcd_readb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhMubj)}(h9(struct drm_dp_aux *aux, unsigned int offset, u8 *valuep)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_dpcd_readbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hoffseth]hoffset}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 *valueph](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_dpcd_readbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvalueph]hvaluep}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjuhhubj)}(hhh]h)}(h read a single byte from the DPCDh]h read a single byte from the DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX8**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``unsigned int offset`` address of the register to read ``u8 *valuep`` location where the value of the register will be stored **Description** Returns the number of bytes transferred (1) on success, or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj:h]hstruct drm_dp_aux *aux}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj4ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhMhj1ubjn)}(h8``unsigned int offset`` address of the register to read h](jt)}(h``unsigned int offset``h]jz)}(hjsh]hunsigned int offset}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjmubj)}(hhh]h)}(haddress of the register to readh]haddress of the register to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj1ubjn)}(hG``u8 *valuep`` location where the value of the register will be stored h](jt)}(h``u8 *valuep``h]jz)}(hjh]h u8 *valuep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h7location where the value of the register will be storedh]h7location where the value of the register will be stored}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj1ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(h\Returns the number of bytes transferred (1) on success, or a negative error code on failure.h]h\Returns the number of bytes transferred (1) on success, or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_dpcd_writeb (C function)c.drm_dp_dpcd_writebhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hRssize_t drm_dp_dpcd_writeb (struct drm_dp_aux *aux, unsigned int offset, u8 value)h]j)}(hQssize_t drm_dp_dpcd_writeb(struct drm_dp_aux *aux, unsigned int offset, u8 value)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_writebsbc.drm_dp_dpcd_writebasbuh1hhj(hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM*ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhjPhM*ubj)}(hdrm_dp_dpcd_writebh]j)}(hjMh]hdrm_dp_dpcd_writeb}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhjPhM*ubj)}(h7(struct drm_dp_aux *aux, unsigned int offset, u8 value)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jKc.drm_dp_dpcd_writebasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hoffseth]hoffset}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu8 valueh](h)}(hhh]j)}(hu8h]hu8}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jKc.drm_dp_dpcd_writebasbuh1hhj;ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hvalueh]hvalue}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhjPhM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhjPhM*ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjPhM*hj!hhubj)}(hhh]h)}(hwrite a single byte to the DPCDh]hwrite a single byte to the DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM"hjhhubah}(h]h ]h"]h$]h&]uh1jhj!hhhjPhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``unsigned int offset`` address of the register to write ``u8 value`` value to write to the register **Description** Returns the number of bytes transferred (1) on success, or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM&hjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM#hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM#hjubjn)}(h9``unsigned int offset`` address of the register to write h](jt)}(h``unsigned int offset``h]jz)}(hjh]hunsigned int offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM$hj ubj)}(hhh]h)}(h address of the register to writeh]h address of the register to write}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hM$hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hM$hjubjn)}(h,``u8 value`` value to write to the register h](jt)}(h ``u8 value``h]jz)}(hjKh]hu8 value}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM%hjEubj)}(hhh]h)}(hvalue to write to the registerh]hvalue to write to the register}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM%hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hM%hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM'hjubh)}(h\Returns the number of bytes transferred (1) on success, or a negative error code on failure.h]h\Returns the number of bytes transferred (1) on success, or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_desc (C struct) c.drm_dp_deschNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_dp_desch]j)}(hstruct drm_dp_desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM-ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM-ubj)}(h drm_dp_desch]j)}(hjh]h drm_dp_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM-ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM-ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM-hjhhubj)}(hhh]h)}(h DP branch/sink device descriptorh]h DP branch/sink device descriptor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM-ubeh}(h]h ](jstructeh"]h$]h&]jjjj%jj%jjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_desc { struct drm_dp_dpcd_ident ident; u32 quirks; }; **Members** ``ident`` DP device identification from DPCD 0x400 (sink) or 0x500 (branch). ``quirks`` Quirks; use drm_dp_has_quirk() to query for the quirks.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubh:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj)ubj@)}(hKstruct drm_dp_desc { struct drm_dp_dpcd_ident ident; u32 quirks; };h]hKstruct drm_dp_desc { struct drm_dp_dpcd_ident ident; u32 quirks; };}hjJsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj)ubh)}(h **Members**h]j%)}(hj[h]hMembers}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj)ubji)}(hhh](jn)}(hM``ident`` DP device identification from DPCD 0x400 (sink) or 0x500 (branch). h](jt)}(h ``ident``h]jz)}(hjzh]hident}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjtubj)}(hhh]h)}(hBDP device identification from DPCD 0x400 (sink) or 0x500 (branch).h]hBDP device identification from DPCD 0x400 (sink) or 0x500 (branch).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjqubjn)}(hB``quirks`` Quirks; use drm_dp_has_quirk() to query for the quirks.h](jt)}(h ``quirks``h]jz)}(hjh]hquirks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h7Quirks; use drm_dp_has_quirk() to query for the quirks.h]h7Quirks; use drm_dp_has_quirk() to query for the quirks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjqubeh}(h]h ]h"]h$]h&]uh1jhhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_quirk (C enum)c.drm_dp_quirkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_dp_quirkh]j)}(henum drm_dp_quirkh](j)}(hjl h]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(h drm_dp_quirkh]j)}(hjh]h drm_dp_quirk}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h/Display Port sink/branch device specific quirksh]h/Display Port sink/branch device specific quirks}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jenumeh"]h$]h&]jjjjgjjgjjjuh1jhhhjhNhNubj)}(hX+**Constants** ``DP_DPCD_QUIRK_CONSTANT_N`` The device requires main link attributes Mvid and Nvid to be limited to 16 bits. So will give a constant value (0x8000) for compatability. ``DP_DPCD_QUIRK_NO_PSR`` The device does not support PSR even if reports that it supports or driver still need to implement proper handling for such device. ``DP_DPCD_QUIRK_NO_SINK_COUNT`` The device does not set SINK_COUNT to a non-zero value. The driver should ignore SINK_COUNT during detection. Note that drm_dp_read_sink_count_cap() automatically checks for this quirk. ``DP_DPCD_QUIRK_DSC_WITHOUT_VIRTUAL_DPCD`` The device supports MST DSC despite not supporting Virtual DPCD. The DSC caps can be read from the physical aux instead. ``DP_DPCD_QUIRK_CAN_DO_MAX_LINK_RATE_3_24_GBPS`` The device supports a link rate of 3.24 Gbps (multiplier 0xc) despite the DP_MAX_LINK_RATE register reporting a lower max multiplier. ``DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC`` The device applies HBLANK expansion for some modes, but this requires enabling DSC.h](h)}(h **Constants**h]j%)}(hjqh]h Constants}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjkubji)}(hhh](jn)}(h``DP_DPCD_QUIRK_CONSTANT_N`` The device requires main link attributes Mvid and Nvid to be limited to 16 bits. So will give a constant value (0x8000) for compatability. h](jt)}(h``DP_DPCD_QUIRK_CONSTANT_N``h]jz)}(hjh]hDP_DPCD_QUIRK_CONSTANT_N}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hThe device requires main link attributes Mvid and Nvid to be limited to 16 bits. So will give a constant value (0x8000) for compatability.h]hThe device requires main link attributes Mvid and Nvid to be limited to 16 bits. So will give a constant value (0x8000) for compatability.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``DP_DPCD_QUIRK_NO_PSR`` The device does not support PSR even if reports that it supports or driver still need to implement proper handling for such device. h](jt)}(h``DP_DPCD_QUIRK_NO_PSR``h]jz)}(hjh]hDP_DPCD_QUIRK_NO_PSR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hThe device does not support PSR even if reports that it supports or driver still need to implement proper handling for such device.h]hThe device does not support PSR even if reports that it supports or driver still need to implement proper handling for such device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``DP_DPCD_QUIRK_NO_SINK_COUNT`` The device does not set SINK_COUNT to a non-zero value. The driver should ignore SINK_COUNT during detection. Note that drm_dp_read_sink_count_cap() automatically checks for this quirk. h](jt)}(h``DP_DPCD_QUIRK_NO_SINK_COUNT``h]jz)}(hjh]hDP_DPCD_QUIRK_NO_SINK_COUNT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hThe device does not set SINK_COUNT to a non-zero value. The driver should ignore SINK_COUNT during detection. Note that drm_dp_read_sink_count_cap() automatically checks for this quirk.h]hThe device does not set SINK_COUNT to a non-zero value. The driver should ignore SINK_COUNT during detection. Note that drm_dp_read_sink_count_cap() automatically checks for this quirk.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``DP_DPCD_QUIRK_DSC_WITHOUT_VIRTUAL_DPCD`` The device supports MST DSC despite not supporting Virtual DPCD. The DSC caps can be read from the physical aux instead. h](jt)}(h*``DP_DPCD_QUIRK_DSC_WITHOUT_VIRTUAL_DPCD``h]jz)}(hj>h]h&DP_DPCD_QUIRK_DSC_WITHOUT_VIRTUAL_DPCD}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj8ubj)}(hhh]h)}(hxThe device supports MST DSC despite not supporting Virtual DPCD. The DSC caps can be read from the physical aux instead.h]hxThe device supports MST DSC despite not supporting Virtual DPCD. The DSC caps can be read from the physical aux instead.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShMhjubjn)}(h``DP_DPCD_QUIRK_CAN_DO_MAX_LINK_RATE_3_24_GBPS`` The device supports a link rate of 3.24 Gbps (multiplier 0xc) despite the DP_MAX_LINK_RATE register reporting a lower max multiplier. h](jt)}(h0``DP_DPCD_QUIRK_CAN_DO_MAX_LINK_RATE_3_24_GBPS``h]jz)}(hjxh]h,DP_DPCD_QUIRK_CAN_DO_MAX_LINK_RATE_3_24_GBPS}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjrubj)}(hhh]h)}(hThe device supports a link rate of 3.24 Gbps (multiplier 0xc) despite the DP_MAX_LINK_RATE register reporting a lower max multiplier.h]hThe device supports a link rate of 3.24 Gbps (multiplier 0xc) despite the DP_MAX_LINK_RATE register reporting a lower max multiplier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC`` The device applies HBLANK expansion for some modes, but this requires enabling DSC.h](jt)}(h/``DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC``h]jz)}(hjh]h+DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hSThe device applies HBLANK expansion for some modes, but this requires enabling DSC.h]hSThe device applies HBLANK expansion for some modes, but this requires enabling DSC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjhhubh)}(hDisplay Port sink and branch devices in the wild have a variety of bugs, try to collect them here. The quirks are shared, but it's up to the drivers to implement workarounds for them.h]hDisplay Port sink and branch devices in the wild have a variety of bugs, try to collect them here. The quirks are shared, but it’s up to the drivers to implement workarounds for them.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_has_quirk (C function)c.drm_dp_has_quirkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hObool drm_dp_has_quirk (const struct drm_dp_desc *desc, enum drm_dp_quirk quirk)h]j)}(hNbool drm_dp_has_quirk(const struct drm_dp_desc *desc, enum drm_dp_quirk quirk)h](j)}(hjAh]hbool}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj?hMubj)}(hdrm_dp_has_quirkh]j)}(hdrm_dp_has_quirkh]hdrm_dp_has_quirk}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj?hMubj)}(h9(const struct drm_dp_desc *desc, enum drm_dp_quirk quirk)h](j)}(hconst struct drm_dp_desc *desch](j)}(hjch]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(h drm_dp_desch]h drm_dp_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjTsbc.drm_dp_has_quirkasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(henum drm_dp_quirk quirkh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_quirkh]h drm_dp_quirk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_has_quirkasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hquirkh]hquirk}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj?hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhj?hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhj?hMhj'hhubj)}(hhh]h)}(h(does the DP device have a specific quirkh]h(does the DP device have a specific quirk}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjlhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_dp_desc *desc`` Device descriptor filled by drm_dp_read_desc() ``enum drm_dp_quirk quirk`` Quirk to query for **Description** Return true if DP device identified by **desc** has **quirk**.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubji)}(hhh](jn)}(hR``const struct drm_dp_desc *desc`` Device descriptor filled by drm_dp_read_desc() h](jt)}(h"``const struct drm_dp_desc *desc``h]jz)}(hjh]hconst struct drm_dp_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h.Device descriptor filled by drm_dp_read_desc()h]h.Device descriptor filled by drm_dp_read_desc()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h/``enum drm_dp_quirk quirk`` Quirk to query for h](jt)}(h``enum drm_dp_quirk quirk``h]jz)}(hjh]henum drm_dp_quirk quirk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hQuirk to query forh]hQuirk to query for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(h>Return true if DP device identified by **desc** has **quirk**.h](h'Return true if DP device identified by }(hj:hhhNhNubj%)}(h**desc**h]hdesc}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh has }(hj:hhhNhNubj%)}(h **quirk**h]hquirk}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_edp_backlight_info (C struct)c.drm_edp_backlight_infohNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_edp_backlight_infoh]j)}(hstruct drm_edp_backlight_infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_edp_backlight_infoh]j)}(hjh]hdrm_edp_backlight_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h Probed eDP backlight info structh]h Probed eDP backlight info struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_edp_backlight_info { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; u16 max; bool lsb_reg_used : 1; bool aux_enable : 1; bool aux_set : 1; }; **Members** ``pwmgen_bit_count`` The pwmgen bit count ``pwm_freq_pre_divider`` The PWM frequency pre-divider value being used for this backlight, if any ``max`` The maximum backlight level that may be set ``lsb_reg_used`` Do we also write values to the DP_EDP_BACKLIGHT_BRIGHTNESS_LSB register? ``aux_enable`` Does the panel support the AUX enable cap? ``aux_set`` Does the panel support setting the brightness through AUX?h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj@)}(hstruct drm_edp_backlight_info { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; u16 max; bool lsb_reg_used : 1; bool aux_enable : 1; bool aux_set : 1; };h]hstruct drm_edp_backlight_info { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; u16 max; bool lsb_reg_used : 1; bool aux_enable : 1; bool aux_set : 1; };}hj sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubji)}(hhh](jn)}(h*``pwmgen_bit_count`` The pwmgen bit count h](jt)}(h``pwmgen_bit_count``h]jz)}(hj<h]hpwmgen_bit_count}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhj6ubj)}(hhh]h)}(hThe pwmgen bit counth]hThe pwmgen bit count}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhMhj3ubjn)}(hc``pwm_freq_pre_divider`` The PWM frequency pre-divider value being used for this backlight, if any h](jt)}(h``pwm_freq_pre_divider``h]jz)}(hjuh]hpwm_freq_pre_divider}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjoubj)}(hhh]h)}(hIThe PWM frequency pre-divider value being used for this backlight, if anyh]hIThe PWM frequency pre-divider value being used for this backlight, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj3ubjn)}(h4``max`` The maximum backlight level that may be set h](jt)}(h``max``h]jz)}(hjh]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h+The maximum backlight level that may be seth]h+The maximum backlight level that may be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj3ubjn)}(hZ``lsb_reg_used`` Do we also write values to the DP_EDP_BACKLIGHT_BRIGHTNESS_LSB register? h](jt)}(h``lsb_reg_used``h]jz)}(hjh]h lsb_reg_used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(hHDo we also write values to the DP_EDP_BACKLIGHT_BRIGHTNESS_LSB register?h]hHDo we also write values to the DP_EDP_BACKLIGHT_BRIGHTNESS_LSB register?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj3ubjn)}(h:``aux_enable`` Does the panel support the AUX enable cap? h](jt)}(h``aux_enable``h]jz)}(hj h]h aux_enable}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjubj)}(hhh]h)}(h*Does the panel support the AUX enable cap?h]h*Does the panel support the AUX enable cap?}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hMhj3ubjn)}(hF``aux_set`` Does the panel support setting the brightness through AUX?h](jt)}(h ``aux_set``h]jz)}(hjYh]haux_set}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjSubj)}(hhh]h)}(h:Does the panel support setting the brightness through AUX?h]h:Does the panel support setting the brightness through AUX?}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjhhubh)}(hvThis structure contains various data about an eDP backlight, which can be populated by using drm_edp_backlight_init().h]hvThis structure contains various data about an eDP backlight, which can be populated by using drm_edp_backlight_init().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_phy_test_params (C struct)c.drm_dp_phy_test_paramshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_phy_test_paramsh]j)}(hstruct drm_dp_phy_test_paramsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_phy_test_paramsh]j)}(hjh]hdrm_dp_phy_test_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hDP Phy Compliance parametersh]hDP Phy Compliance parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjj4jj4jjjuh1jhhhjhNhNubj)}(hX]**Definition**:: struct drm_dp_phy_test_params { int link_rate; u8 num_lanes; u8 phy_pattern; u8 hbr2_reset[2]; u8 custom80[10]; bool enhanced_frame_cap; }; **Members** ``link_rate`` Requested Link rate from DPCD 0x219 ``num_lanes`` Number of lanes requested by sing through DPCD 0x220 ``phy_pattern`` DP Phy test pattern from DPCD 0x248 ``hbr2_reset`` DP HBR2_COMPLIANCE_SCRAMBLER_RESET from DCPD 0x24A and 0x24B ``custom80`` DP Test_80BIT_CUSTOM_PATTERN from DPCDs 0x250 through 0x259 ``enhanced_frame_cap`` flag for enhanced frame capability.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubh:}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM<hj8ubj@)}(hstruct drm_dp_phy_test_params { int link_rate; u8 num_lanes; u8 phy_pattern; u8 hbr2_reset[2]; u8 custom80[10]; bool enhanced_frame_cap; };h]hstruct drm_dp_phy_test_params { int link_rate; u8 num_lanes; u8 phy_pattern; u8 hbr2_reset[2]; u8 custom80[10]; bool enhanced_frame_cap; };}hjYsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM>hj8ubh)}(h **Members**h]j%)}(hjjh]hMembers}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhMGhj8ubji)}(hhh](jn)}(h2``link_rate`` Requested Link rate from DPCD 0x219 h](jt)}(h ``link_rate``h]jz)}(hjh]h link_rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM:hjubj)}(hhh]h)}(h#Requested Link rate from DPCD 0x219h]h#Requested Link rate from DPCD 0x219}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM:hjubjn)}(hC``num_lanes`` Number of lanes requested by sing through DPCD 0x220 h](jt)}(h ``num_lanes``h]jz)}(hjh]h num_lanes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM;hjubj)}(hhh]h)}(h4Number of lanes requested by sing through DPCD 0x220h]h4Number of lanes requested by sing through DPCD 0x220}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM;hjubjn)}(h4``phy_pattern`` DP Phy test pattern from DPCD 0x248 h](jt)}(h``phy_pattern``h]jz)}(hjh]h phy_pattern}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM<hjubj)}(hhh]h)}(h#DP Phy test pattern from DPCD 0x248h]h#DP Phy test pattern from DPCD 0x248}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM<hjubjn)}(hL``hbr2_reset`` DP HBR2_COMPLIANCE_SCRAMBLER_RESET from DCPD 0x24A and 0x24B h](jt)}(h``hbr2_reset``h]jz)}(hj4h]h hbr2_reset}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM=hj.ubj)}(hhh]h)}(hhjgubj)}(hhh]h)}(h;DP Test_80BIT_CUSTOM_PATTERN from DPCDs 0x250 through 0x259h]h;DP Test_80BIT_CUSTOM_PATTERN from DPCDs 0x250 through 0x259}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhM>hjubjn)}(h:``enhanced_frame_cap`` flag for enhanced frame capability.h](jt)}(h``enhanced_frame_cap``h]jz)}(hjh]henhanced_frame_cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM>hjubj)}(hhh]h)}(h#flag for enhanced frame capability.h]h#flag for enhanced frame capability.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:251: ./include/drm/display/drm_dp_helper.hhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM>hjubeh}(h]h ]h"]h$]h&]uh1jhhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_phy_name (C function)c.drm_dp_phy_namehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h5const char * drm_dp_phy_name (enum drm_dp_phy dp_phy)h]j)}(h3const char *drm_dp_phy_name(enum drm_dp_phy dp_phy)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj hMubj)}(hdrm_dp_phy_nameh]j)}(hdrm_dp_phy_nameh]hdrm_dp_phy_name}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h(enum drm_dp_phy dp_phy)h]j)}(henum drm_dp_phy dp_phyh](j)}(hjl h]henum}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(h drm_dp_phyh]h drm_dp_phy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjKsbc.drm_dp_phy_nameasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hdp_phyh]hdp_phy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(h Get the name of the given DP PHYRh]h Get the name of the given DP PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX$**Parameters** ``enum drm_dp_phy dp_phy`` The DP PHY identifier **Description** Given the **dp_phy**, get a user friendly name of the DP PHY, either "DPRX" or "LTTPR ", or "" on errors. The returned string is always non-NULL and valid. **Return** Name of the DP PHY.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh]jn)}(h1``enum drm_dp_phy dp_phy`` The DP PHY identifier h](jt)}(h``enum drm_dp_phy dp_phy``h]jz)}(hjh]henum drm_dp_phy dp_phy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hThe DP PHY identifierh]hThe DP PHY identifier}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hGiven the **dp_phy**, get a user friendly name of the DP PHY, either "DPRX" or "LTTPR ", or "" on errors. The returned string is always non-NULL and valid.h](h Given the }(hjmhhhNhNubj%)}(h **dp_phy**h]hdp_phy}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubh, get a user friendly name of the DP PHY, either “DPRX” or “LTTPR ”, or “” on errors. The returned string is always non-NULL and valid.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hName of the DP PHY.h]hName of the DP PHY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_lttpr_wake_timeout_setup (C function)!c.drm_dp_lttpr_wake_timeout_setuphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hTvoid drm_dp_lttpr_wake_timeout_setup (struct drm_dp_aux *aux, bool transparent_mode)h]j)}(hSvoid drm_dp_lttpr_wake_timeout_setup(struct drm_dp_aux *aux, bool transparent_mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_lttpr_wake_timeout_setuph]j)}(hdrm_dp_lttpr_wake_timeout_setuph]hdrm_dp_lttpr_wake_timeout_setup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h/(struct drm_dp_aux *aux, bool transparent_mode)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsb!c.drm_dp_lttpr_wake_timeout_setupasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hbool transparent_modeh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htransparent_modeh]htransparent_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h'Grant extended time for sink to wake uph]h'Grant extended time for sink to wake up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` The DP AUX channel to use ``bool transparent_mode`` This is true if lttpr is in transparent mode **Description** This function checks if the sink needs any extended wake time, if it does it grants this request. Post this setup the source device can keep trying the Aux transaction till the granted wake timeout. If this function is not called all Aux transactions are expected to take a default of 1ms before they throw an error.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(h5``struct drm_dp_aux *aux`` The DP AUX channel to use h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj h]hstruct drm_dp_aux *aux}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``bool transparent_mode`` This is true if lttpr is in transparent mode h](jt)}(h``bool transparent_mode``h]jz)}(hjCh]hbool transparent_mode}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj=ubj)}(hhh]h)}(h,This is true if lttpr is in transparent modeh]h,This is true if lttpr is in transparent mode}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hX<This function checks if the sink needs any extended wake time, if it does it grants this request. Post this setup the source device can keep trying the Aux transaction till the granted wake timeout. If this function is not called all Aux transactions are expected to take a default of 1ms before they throw an error.h]hX<This function checks if the sink needs any extended wake time, if it does it grants this request. Post this setup the source device can keep trying the Aux transaction till the granted wake timeout. If this function is not called all Aux transactions are expected to take a default of 1ms before they throw an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_dpcd_probe (C function)c.drm_dp_dpcd_probehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hCint drm_dp_dpcd_probe (struct drm_dp_aux *aux, unsigned int offset)h]j)}(hBint drm_dp_dpcd_probe(struct drm_dp_aux *aux, unsigned int offset)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_dpcd_probeh]j)}(hdrm_dp_dpcd_probeh]hdrm_dp_dpcd_probe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h-(struct drm_dp_aux *aux, unsigned int offset)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_dpcd_probeasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h4probe a given DPCD address with a 1-byte read accessh]h4probe a given DPCD address with a 1-byte read access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST) ``unsigned int offset`` address of the register to probe **Description** Probe the provided DPCD address by reading 1 byte from it. The function can be used to trigger some side-effect the read access has, like waking up the sink, without the need for the read-out value. Returns 0 if the read access suceeded, or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(h9``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST) h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hDisplayPort AUX channel (SST)h]hDisplayPort AUX channel (SST)}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj*hMhj ubjn)}(h9``unsigned int offset`` address of the register to probe h](jt)}(h``unsigned int offset``h]jz)}(hjNh]hunsigned int offset}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjHubj)}(hhh]h)}(h address of the register to probeh]h address of the register to probe}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchMhj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hProbe the provided DPCD address by reading 1 byte from it. The function can be used to trigger some side-effect the read access has, like waking up the sink, without the need for the read-out value.h]hProbe the provided DPCD address by reading 1 byte from it. The function can be used to trigger some side-effect the read access has, like waking up the sink, without the need for the read-out value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hKReturns 0 if the read access suceeded, or a negative error code on failure.h]hKReturns 0 if the read access suceeded, or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_dpcd_set_powered (C function)c.drm_dp_dpcd_set_poweredhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hCvoid drm_dp_dpcd_set_powered (struct drm_dp_aux *aux, bool powered)h]j)}(hBvoid drm_dp_dpcd_set_powered(struct drm_dp_aux *aux, bool powered)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_dpcd_set_poweredh]j)}(hdrm_dp_dpcd_set_poweredh]hdrm_dp_dpcd_set_powered}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h&(struct drm_dp_aux *aux, bool powered)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj' hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj: modnameN classnameNjj)}j]j%)}jj sbc.drm_dp_dpcd_set_poweredasbuh1hhj ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjf hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hauxh]haux}(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h bool poweredh](j)}(hjAh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hpoweredh]hpowered}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h$Set whether the DP device is poweredh]h$Set whether the DP device is powered}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel; for convenience it's OK to pass NULL here and the function will be a no-op. ``bool powered`` true if powered; false if not **Description** If the endpoint device on the DP AUX bus is known to be powered down then this function can be called to make future transfers fail immediately instead of needing to time out. If this function is never called then a device defaults to being powered.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubji)}(hhh](jn)}(h``struct drm_dp_aux *aux`` DisplayPort AUX channel; for convenience it's OK to pass NULL here and the function will be a no-op. h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj h]hstruct drm_dp_aux *aux}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubj)}(hhh]h)}(hdDisplayPort AUX channel; for convenience it's OK to pass NULL here and the function will be a no-op.h]hfDisplayPort AUX channel; for convenience it’s OK to pass NULL here and the function will be a no-op.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj( ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj' hMhj ubjn)}(h/``bool powered`` true if powered; false if not h](jt)}(h``bool powered``h]jz)}(hjL h]h bool powered}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjF ubj)}(hhh]h)}(htrue if powered; false if noth]htrue if powered; false if not}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja hMhjb ubah}(h]h ]h"]h$]h&]uh1jhjF ubeh}(h]h ]h"]h$]h&]uh1jmhja hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(hIf the endpoint device on the DP AUX bus is known to be powered down then this function can be called to make future transfers fail immediately instead of needing to time out.h]hIf the endpoint device on the DP AUX bus is known to be powered down then this function can be called to make future transfers fail immediately instead of needing to time out.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(hIIf this function is never called then a device defaults to being powered.h]hIIf this function is never called then a device defaults to being powered.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_dpcd_read (C function)c.drm_dp_dpcd_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hassize_t drm_dp_dpcd_read (struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h]j)}(h`ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_readsbc.drm_dp_dpcd_readasbuh1hhj hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hdrm_dp_dpcd_readh]j)}(hj h]hdrm_dp_dpcd_read}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(hH(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj- hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubj)}(h h]h }(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjM modnameN classnameNjj)}j]j c.drm_dp_dpcd_readasbuh1hhj) ubj)}(h h]h }(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubj9)}(hj9h]h*}(hjw hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj) ubj)}(hauxh]haux}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj% ubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hoffseth]hoffset}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj% ubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hbufferh]hbuffer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj% ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj3 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5 modnameN classnameNjj)}j]j c.drm_dp_dpcd_readasbuh1hhj, ubj)}(h h]h }(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj, ubj)}(hsizeh]hsize}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj% ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h)}(h$read a series of bytes from the DPCDh]h$read a series of bytes from the DPCD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST or MST) ``unsigned int offset`` address of the (first) register to read ``void *buffer`` buffer to store the register values ``size_t size`` number of bytes in **buffer** **Description** Returns the number of bytes transferred on success, or a negative error code on failure. -EIO is returned if the request was NAKed by the sink or if the retry count was exceeded. If not all bytes were transferred, this function returns -EPROTO. Errors from the underlying AUX channel transfer function, with the exception of -EBUSY (which causes the transaction to be retried), are propagated to the caller.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubji)}(hhh](jn)}(h@``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST or MST) h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj h]hstruct drm_dp_aux *aux}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubj)}(hhh]h)}(h$DisplayPort AUX channel (SST or MST)h]h$DisplayPort AUX channel (SST or MST)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(h@``unsigned int offset`` address of the (first) register to read h](jt)}(h``unsigned int offset``h]jz)}(hj h]hunsigned int offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubj)}(hhh]h)}(h'address of the (first) register to readh]h'address of the (first) register to read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(h5``void *buffer`` buffer to store the register values h](jt)}(h``void *buffer``h]jz)}(hj< h]h void *buffer}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj: ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj6 ubj)}(hhh]h)}(h#buffer to store the register valuesh]h#buffer to store the register values}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ hMhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jmhjQ hMhj ubjn)}(h.``size_t size`` number of bytes in **buffer** h](jt)}(h``size_t size``h]jz)}(hju h]h size_t size}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjo ubj)}(hhh]h)}(hnumber of bytes in **buffer**h](hnumber of bytes in }(hj hhhNhNubj%)}(h **buffer**h]hbuffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjo ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(hXReturns the number of bytes transferred on success, or a negative error code on failure. -EIO is returned if the request was NAKed by the sink or if the retry count was exceeded. If not all bytes were transferred, this function returns -EPROTO. Errors from the underlying AUX channel transfer function, with the exception of -EBUSY (which causes the transaction to be retried), are propagated to the caller.h]hXReturns the number of bytes transferred on success, or a negative error code on failure. -EIO is returned if the request was NAKed by the sink or if the retry count was exceeded. If not all bytes were transferred, this function returns -EPROTO. Errors from the underlying AUX channel transfer function, with the exception of -EBUSY (which causes the transaction to be retried), are propagated to the caller.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_dpcd_write (C function)c.drm_dp_dpcd_writehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbssize_t drm_dp_dpcd_write (struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h]j)}(hassize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_writesbc.drm_dp_dpcd_writeasbuh1hhj hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj'hMubj)}(hdrm_dp_dpcd_writeh]j)}(hj$h]hdrm_dp_dpcd_write}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj'hMubj)}(hH(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j"c.drm_dp_dpcd_writeasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjQubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbufferh]hbuffer}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j"c.drm_dp_dpcd_writeasbuh1hhjTubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj'hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj'hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMhj hhubj)}(hhh]h)}(h#write a series of bytes to the DPCDh]h#write a series of bytes to the DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj'hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST or MST) ``unsigned int offset`` address of the (first) register to write ``void *buffer`` buffer containing the values to write ``size_t size`` number of bytes in **buffer** **Description** Returns the number of bytes transferred on success, or a negative error code on failure. -EIO is returned if the request was NAKed by the sink or if the retry count was exceeded. If not all bytes were transferred, this function returns -EPROTO. Errors from the underlying AUX channel transfer function, with the exception of -EBUSY (which causes the transaction to be retried), are propagated to the caller.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(h@``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST or MST) h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h$DisplayPort AUX channel (SST or MST)h]h$DisplayPort AUX channel (SST or MST)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hA``unsigned int offset`` address of the (first) register to write h](jt)}(h``unsigned int offset``h]jz)}(hj+h]hunsigned int offset}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj%ubj)}(hhh]h)}(h(address of the (first) register to writeh]h(address of the (first) register to write}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj@hMhjubjn)}(h7``void *buffer`` buffer containing the values to write h](jt)}(h``void *buffer``h]jz)}(hjdh]h void *buffer}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj^ubj)}(hhh]h)}(h%buffer containing the values to writeh]h%buffer containing the values to write}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjubjn)}(h.``size_t size`` number of bytes in **buffer** h](jt)}(h``size_t size``h]jz)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hnumber of bytes in **buffer**h](hnumber of bytes in }(hjhhhNhNubj%)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hXReturns the number of bytes transferred on success, or a negative error code on failure. -EIO is returned if the request was NAKed by the sink or if the retry count was exceeded. If not all bytes were transferred, this function returns -EPROTO. Errors from the underlying AUX channel transfer function, with the exception of -EBUSY (which causes the transaction to be retried), are propagated to the caller.h]hXReturns the number of bytes transferred on success, or a negative error code on failure. -EIO is returned if the request was NAKed by the sink or if the retry count was exceeded. If not all bytes were transferred, this function returns -EPROTO. Errors from the underlying AUX channel transfer function, with the exception of -EBUSY (which causes the transaction to be retried), are propagated to the caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_dpcd_read_link_status (C function)c.drm_dp_dpcd_read_link_statushNtauh1jxhjhhhNhNubj)}(hhh](j)}(hYint drm_dp_dpcd_read_link_status (struct drm_dp_aux *aux, u8 status[DP_LINK_STATUS_SIZE])h]j)}(hXint drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux, u8 status[DP_LINK_STATUS_SIZE])h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hM ubj)}(hdrm_dp_dpcd_read_link_statush]j)}(hdrm_dp_dpcd_read_link_statush]hdrm_dp_dpcd_read_link_status}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hM ubj)}(h8(struct drm_dp_aux *aux, u8 status[DP_LINK_STATUS_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjNsbc.drm_dp_dpcd_read_link_statusasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hu8 status[DP_LINK_STATUS_SIZE]h](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_dpcd_read_link_statusasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstatush]hstatus}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_LINK_STATUS_SIZEh]hDP_LINK_STATUS_SIZE}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]jc.drm_dp_dpcd_read_link_statusasbuh1hhjubj9)}(hjh]h]}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhj'hhhj9hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj9hM hj hhubj)}(hhh]h)}(h)read DPCD link status (bytes 0x202-0x207)h]h)read DPCD link status (bytes 0x202-0x207)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``u8 status[DP_LINK_STATUS_SIZE]`` buffer to store the link status in (must be at least 6 bytes) **Description** Returns the number of bytes transferred on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(ha``u8 status[DP_LINK_STATUS_SIZE]`` buffer to store the link status in (must be at least 6 bytes) h](jt)}(h"``u8 status[DP_LINK_STATUS_SIZE]``h]jz)}(hjh]hu8 status[DP_LINK_STATUS_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h=buffer to store the link status in (must be at least 6 bytes)h]h=buffer to store the link status in (must be at least 6 bytes)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(hWReturns the number of bytes transferred on success or a negative error code on failure.h]hWReturns the number of bytes transferred on success or a negative error code on failure.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_dpcd_read_phy_link_status (C function)"c.drm_dp_dpcd_read_phy_link_statushNtauh1jxhjhhhNhNubj)}(hhh](j)}(hzint drm_dp_dpcd_read_phy_link_status (struct drm_dp_aux *aux, enum drm_dp_phy dp_phy, u8 link_status[DP_LINK_STATUS_SIZE])h]j)}(hyint drm_dp_dpcd_read_phy_link_status(struct drm_dp_aux *aux, enum drm_dp_phy dp_phy, u8 link_status[DP_LINK_STATUS_SIZE])h](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM!ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhM!ubj)}(h drm_dp_dpcd_read_phy_link_statush]j)}(h drm_dp_dpcd_read_phy_link_statush]h drm_dp_dpcd_read_phy_link_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjvhM!ubj)}(hU(struct drm_dp_aux *aux, enum drm_dp_phy dp_phy, u8 link_status[DP_LINK_STATUS_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb"c.drm_dp_dpcd_read_phy_link_statusasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_dp_phy dp_phyh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_phyh]h drm_dp_phy}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j"c.drm_dp_dpcd_read_phy_link_statusasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdp_phyh]hdp_phy}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#u8 link_status[DP_LINK_STATUS_SIZE]h](h)}(hhh]j)}(hu8h]hu8}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_dp_dpcd_read_phy_link_statusasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h link_statush]h link_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubh)}(hhh]j)}(hDP_LINK_STATUS_SIZEh]hDP_LINK_STATUS_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_dp_dpcd_read_phy_link_statusasbuh1hhjvubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjdhhhjvhM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhjvhM!ubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jhjvhM!hj]hhubj)}(hhh]h)}(h,get the link status information for a DP PHYh]h,get the link status information for a DP PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhjvhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``enum drm_dp_phy dp_phy`` the DP PHY to get the link status for ``u8 link_status[DP_LINK_STATUS_SIZE]`` buffer to return the status in **Description** Fetch the AUX DPCD registers for the DPRX or an LTTPR PHY link status. The layout of the returned **link_status** matches the DPCD register layout of the DPRX PHY link status. Returns 0 if the information was read successfully or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjOh]hstruct drm_dp_aux *aux}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjIubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjFubjn)}(hA``enum drm_dp_phy dp_phy`` the DP PHY to get the link status for h](jt)}(h``enum drm_dp_phy dp_phy``h]jz)}(hjh]henum drm_dp_phy dp_phy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h%the DP PHY to get the link status forh]h%the DP PHY to get the link status for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjFubjn)}(hG``u8 link_status[DP_LINK_STATUS_SIZE]`` buffer to return the status in h](jt)}(h'``u8 link_status[DP_LINK_STATUS_SIZE]``h]jz)}(hjh]h#u8 link_status[DP_LINK_STATUS_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hbuffer to return the status inh]hbuffer to return the status in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjFubeh}(h]h ]h"]h$]h&]uh1jhhj*ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubh)}(hFetch the AUX DPCD registers for the DPRX or an LTTPR PHY link status. The layout of the returned **link_status** matches the DPCD register layout of the DPRX PHY link status.h](hbFetch the AUX DPCD registers for the DPRX or an LTTPR PHY link status. The layout of the returned }(hjhhhNhNubj%)}(h**link_status**h]h link_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh> matches the DPCD register layout of the DPRX PHY link status.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubh)}(hWReturns 0 if the information was read successfully or a negative error code on failure.h]hWReturns 0 if the information was read successfully or a negative error code on failure.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_dpcd_write_payload (C function)c.drm_dp_dpcd_write_payloadhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hiint drm_dp_dpcd_write_payload (struct drm_dp_aux *aux, int vcpid, u8 start_time_slot, u8 time_slot_count)h]j)}(hhint drm_dp_dpcd_write_payload(struct drm_dp_aux *aux, int vcpid, u8 start_time_slot, u8 time_slot_count)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMbubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjphMbubj)}(hdrm_dp_dpcd_write_payloadh]j)}(hdrm_dp_dpcd_write_payloadh]hdrm_dp_dpcd_write_payload}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjphMbubj)}(hK(struct drm_dp_aux *aux, int vcpid, u8 start_time_slot, u8 time_slot_count)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_dpcd_write_payloadasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int vcpidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hvcpidh]hvcpid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 start_time_sloth](h)}(hhh]j)}(hu8h]hu8}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]jc.drm_dp_dpcd_write_payloadasbuh1hhjBubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hstart_time_sloth]hstart_time_slot}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 time_slot_counth](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_dpcd_write_payloadasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htime_slot_counth]htime_slot_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhjphMbubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjphMbubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjphMbhjWhhubj)}(hhh]h)}(h2Write Virtual Channel information to payload tableh]h2Write Virtual Channel information to payload table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMVhjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``int vcpid`` Virtual Channel Payload ID ``u8 start_time_slot`` Starting time slot ``u8 time_slot_count`` Time slot count **Description** Write the Virtual Channel payload allocation table, checking the payload update status and retrying as necessary. **Return** 0 on success, negative error otherwiseh](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMZhjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj(h]hstruct drm_dp_aux *aux}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMWhj"ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMWhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMWhjubjn)}(h)``int vcpid`` Virtual Channel Payload ID h](jt)}(h ``int vcpid``h]jz)}(hjah]h int vcpid}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMXhj[ubj)}(hhh]h)}(hVirtual Channel Payload IDh]hVirtual Channel Payload ID}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMXhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhjvhMXhjubjn)}(h*``u8 start_time_slot`` Starting time slot h](jt)}(h``u8 start_time_slot``h]jz)}(hjh]hu8 start_time_slot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMYhjubj)}(hhh]h)}(hStarting time sloth]hStarting time slot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMYhjubjn)}(h'``u8 time_slot_count`` Time slot count h](jt)}(h``u8 time_slot_count``h]jz)}(hjh]hu8 time_slot_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMZhjubj)}(hhh]h)}(hTime slot counth]hTime slot count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMZhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM\hjubh)}(hqWrite the Virtual Channel payload allocation table, checking the payload update status and retrying as necessary.h]hqWrite the Virtual Channel payload allocation table, checking the payload update status and retrying as necessary.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM\hjubh)}(h **Return**h]j%)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM_hjubh)}(h&0 on success, negative error otherwiseh]h&0 on success, negative error otherwise}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_dpcd_clear_payload (C function)c.drm_dp_dpcd_clear_payloadhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6int drm_dp_dpcd_clear_payload (struct drm_dp_aux *aux)h]j)}(h5int drm_dp_dpcd_clear_payload(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhMubj)}(hdrm_dp_dpcd_clear_payloadh]j)}(hdrm_dp_dpcd_clear_payloadh]hdrm_dp_dpcd_clear_payload}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjhMubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_dpcd_clear_payloadasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhjhMubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjohhubj)}(hhh]h)}(h$Clear the entire VC Payload ID tableh]h$Clear the entire VC Payload ID table}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Clear the entire VC Payload ID table. **Return** 0 on success, negative error code on errors.h](h)}(h**Parameters**h]j%)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjVubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj{h]hstruct drm_dp_aux *aux}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjuubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjrubah}(h]h ]h"]h$]h&]uh1jhhjVubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjVubh)}(h%Clear the entire VC Payload ID table.h]h%Clear the entire VC Payload ID table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjVubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjVubh)}(h,0 on success, negative error code on errors.h]h,0 on success, negative error code on errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_dpcd_poll_act_handled (C function)c.drm_dp_dpcd_poll_act_handledhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIint drm_dp_dpcd_poll_act_handled (struct drm_dp_aux *aux, int timeout_ms)h]j)}(hHint drm_dp_dpcd_poll_act_handled(struct drm_dp_aux *aux, int timeout_ms)h](j)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hMubj)}(hdrm_dp_dpcd_poll_act_handledh]j)}(hdrm_dp_dpcd_poll_act_handledh]hdrm_dp_dpcd_poll_act_handled}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj0hMubj)}(h((struct drm_dp_aux *aux, int timeout_ms)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjEsbc.drm_dp_dpcd_poll_act_handledasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[ubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hint timeout_msh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h timeout_msh]h timeout_ms}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj0hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj0hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj0hMhjhhubj)}(hhh]h)}(hPoll for ACT handled statush]hPoll for ACT handled status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``int timeout_ms`` Timeout in ms **Description** Try waiting for the sink to finish updating its payload table by polling for the ACT handled bit of DP_PAYLOAD_TABLE_UPDATE_STATUS for up to **timeout_ms** milliseconds, defaulting to 3000 ms if 0. **Return** 0 if the ACT was handled in time, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjXh]hstruct drm_dp_aux *aux}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjRubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhMhjOubjn)}(h!``int timeout_ms`` Timeout in ms h](jt)}(h``int timeout_ms``h]jz)}(hjh]hint timeout_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h Timeout in msh]h Timeout in ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjOubeh}(h]h ]h"]h$]h&]uh1jhhj3ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3ubh)}(hTry waiting for the sink to finish updating its payload table by polling for the ACT handled bit of DP_PAYLOAD_TABLE_UPDATE_STATUS for up to **timeout_ms** milliseconds, defaulting to 3000 ms if 0.h](hTry waiting for the sink to finish updating its payload table by polling for the ACT handled bit of DP_PAYLOAD_TABLE_UPDATE_STATUS for up to }(hjhhhNhNubj%)}(h**timeout_ms**h]h timeout_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh* milliseconds, defaulting to 3000 ms if 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3ubh)}(hA0 if the ACT was handled in time, negative error code on failure.h]hA0 if the ACT was handled in time, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_downstream_is_type (C function)c.drm_dp_downstream_is_typehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcbool drm_dp_downstream_is_type (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], u8 type)h]j)}(hbbool drm_dp_downstream_is_type(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], u8 type)h](j)}(hjAh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhMubj)}(hdrm_dp_downstream_is_typeh]j)}(hdrm_dp_downstream_is_typeh]hdrm_dp_downstream_is_type}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjWhMubj)}(hD(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], u8 type)h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjlsbc.drm_dp_downstream_is_typeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_downstream_is_typeasbuh1hhjubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hu8h]hu8}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]jc.drm_dp_downstream_is_typeasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hport_caph]hport_cap}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hjh]h[}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubhdesc_sig_literal_number)}(h4h]h4}(hjhhhNhNubah}(h]h ]mah"]h$]h&]uh1jhj"ubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hu8 typeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_downstream_is_typeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjWhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjWhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhjWhMhj?hhubj)}(hhh]h)}(h.is the downstream facing port of certain type?h]h.is the downstream facing port of certain type?}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjWhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities ``u8 type`` port type to be checked. Can be: ``DP_DS_PORT_TYPE_DP``, ``DP_DS_PORT_TYPE_VGA``, ``DP_DS_PORT_TYPE_DVI``, ``DP_DS_PORT_TYPE_HDMI``, ``DP_DS_PORT_TYPE_NON_EDID``, ``DP_DS_PORT_TYPE_DP_DUALMODE`` or ``DP_DS_PORT_TYPE_WIRELESS``. **Description** Caveat: Only works with DPCD 1.1+ port caps. **Return** whether the downstream facing port matches the type.h](h)}(h**Parameters**h]j%)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hjNh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjHubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchMhjEubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjh]hconst u8 port_cap[4]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjEubjn)}(h``u8 type`` port type to be checked. Can be: ``DP_DS_PORT_TYPE_DP``, ``DP_DS_PORT_TYPE_VGA``, ``DP_DS_PORT_TYPE_DVI``, ``DP_DS_PORT_TYPE_HDMI``, ``DP_DS_PORT_TYPE_NON_EDID``, ``DP_DS_PORT_TYPE_DP_DUALMODE`` or ``DP_DS_PORT_TYPE_WIRELESS``. h](jt)}(h ``u8 type``h]jz)}(hjh]hu8 type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hport type to be checked. Can be: ``DP_DS_PORT_TYPE_DP``, ``DP_DS_PORT_TYPE_VGA``, ``DP_DS_PORT_TYPE_DVI``, ``DP_DS_PORT_TYPE_HDMI``, ``DP_DS_PORT_TYPE_NON_EDID``, ``DP_DS_PORT_TYPE_DP_DUALMODE`` or ``DP_DS_PORT_TYPE_WIRELESS``.h](h!port type to be checked. Can be: }(hjhhhNhNubjz)}(h``DP_DS_PORT_TYPE_DP``h]hDP_DS_PORT_TYPE_DP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, }(hjhhhNhNubjz)}(h``DP_DS_PORT_TYPE_VGA``h]hDP_DS_PORT_TYPE_VGA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, }hjsbjz)}(h``DP_DS_PORT_TYPE_DVI``h]hDP_DS_PORT_TYPE_DVI}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, }(hjhhhNhNubjz)}(h``DP_DS_PORT_TYPE_HDMI``h]hDP_DS_PORT_TYPE_HDMI}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, }hjsbjz)}(h``DP_DS_PORT_TYPE_NON_EDID``h]hDP_DS_PORT_TYPE_NON_EDID}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, }hjsbjz)}(h``DP_DS_PORT_TYPE_DP_DUALMODE``h]hDP_DS_PORT_TYPE_DP_DUALMODE}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh or }(hjhhhNhNubjz)}(h``DP_DS_PORT_TYPE_WIRELESS``h]hDP_DS_PORT_TYPE_WIRELESS}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjEubeh}(h]h ]h"]h$]h&]uh1jhhj)ubh)}(h**Description**h]j%)}(hjz h]h Description}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjx ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubh)}(h,Caveat: Only works with DPCD 1.1+ port caps.h]h,Caveat: Only works with DPCD 1.1+ port caps.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubh)}(h4whether the downstream facing port matches the type.h]h4whether the downstream facing port matches the type.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_downstream_is_tmds (C function)c.drm_dp_downstream_is_tmdshNtauh1jxhjhhhNhNubj)}(hhh](j)}(h{bool drm_dp_downstream_is_tmds (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h]j)}(hzbool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(hjAh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hdrm_dp_downstream_is_tmdsh]j)}(hdrm_dp_downstream_is_tmdsh]hdrm_dp_downstream_is_tmds}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h\(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj"!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj/!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hu8h]hu8}(hj@!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjB!modnameN classnameNjj)}j]j%)}jj!sbc.drm_dp_downstream_is_tmdsasbuh1hhj!ubj)}(h h]h }(hj`!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hdpcdh]hdpcd}(hjn!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hjh]h[}(hj|!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j\!c.drm_dp_downstream_is_tmdsasbuh1hhj!ubj9)}(hjh]h]}(hj!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hu8h]hu8}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j\!c.drm_dp_downstream_is_tmdsasbuh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hport_caph]hport_cap}(hj "hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hjh]h[}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubj)}(hjh]h4}(hj'"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hjh]h]}(hj4"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjL"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubj)}(h h]h }(hjY"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubj)}(hjh]hstruct}(hjg"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubj)}(h h]h }(hjt"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j\!c.drm_dp_downstream_is_tmdsasbuh1hhjH"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubj9)}(hj9h]h*}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjH"ubj)}(hdrm_edidh]hdrm_edid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h)}(h#is the downstream facing port TMDS?h]h#is the downstream facing port TMDS?}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities ``const struct drm_edid *drm_edid`` EDID **Return** whether the downstream facing port is TMDS (HDMI/DVI).h](h)}(h**Parameters**h]j%)}(hj #h]h Parameters}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj)#h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj##ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>#hMhj?#ubah}(h]h ]h"]h$]h&]uh1jhj##ubeh}(h]h ]h"]h$]h&]uh1jmhj>#hMhj #ubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjb#h]hconst u8 port_cap[4]}(hjd#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj\#ubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hj{#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw#hMhjx#ubah}(h]h ]h"]h$]h&]uh1jhj\#ubeh}(h]h ]h"]h$]h&]uh1jmhjw#hMhj #ubjn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj#h]hconst struct drm_edid *drm_edid}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#ubj)}(hhh]h)}(hEDIDh]hEDID}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj#hMhj #ubeh}(h]h ]h"]h$]h&]uh1jhhj#ubh)}(h **Return**h]j%)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#ubh)}(h6whether the downstream facing port is TMDS (HDMI/DVI).h]h6whether the downstream facing port is TMDS (HDMI/DVI).}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_send_real_edid_checksum (C function) c.drm_dp_send_real_edid_checksumhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hSbool drm_dp_send_real_edid_checksum (struct drm_dp_aux *aux, u8 real_edid_checksum)h]j)}(hRbool drm_dp_send_real_edid_checksum(struct drm_dp_aux *aux, u8 real_edid_checksum)h](j)}(hjAh]hbool}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj)$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj($hMubj)}(hdrm_dp_send_real_edid_checksumh]j)}(hdrm_dp_send_real_edid_checksumh]hdrm_dp_send_real_edid_checksum}(hj;$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj($hMubj)}(h/(struct drm_dp_aux *aux, u8 real_edid_checksum)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjW$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS$ubj)}(h h]h }(hjd$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS$ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hju$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjw$modnameN classnameNjj)}j]j%)}jj=$sb c.drm_dp_send_real_edid_checksumasbuh1hhjS$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS$ubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjS$ubj)}(hauxh]haux}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjO$ubj)}(hu8 real_edid_checksumh](h)}(hhh]j)}(hu8h]hu8}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j$ c.drm_dp_send_real_edid_checksumasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hreal_edid_checksumh]hreal_edid_checksum}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjO$ubeh}(h]h ]h"]h$]h&]jjuh1jhj$hhhj($hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhj($hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj($hMhj$hhubj)}(hhh]h)}(h"send back real edid checksum valueh]h"send back real edid checksum value}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj($hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:%jj:%jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``u8 real_edid_checksum`` real edid checksum for the last block **Return** True on successh](h)}(h**Parameters**h]j%)}(hjD%h]h Parameters}(hjF%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjB%ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj>%ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjc%h]hstruct drm_dp_aux *aux}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhja%ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj]%ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj|%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx%hMhjy%ubah}(h]h ]h"]h$]h&]uh1jhj]%ubeh}(h]h ]h"]h$]h&]uh1jmhjx%hMhjZ%ubjn)}(h@``u8 real_edid_checksum`` real edid checksum for the last block h](jt)}(h``u8 real_edid_checksum``h]jz)}(hj%h]hu8 real_edid_checksum}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj%ubj)}(hhh]h)}(h%real edid checksum for the last blockh]h%real edid checksum for the last block}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj%hM hjZ%ubeh}(h]h ]h"]h$]h&]uh1jhhj>%ubh)}(h **Return**h]j%)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj>%ubh)}(hTrue on successh]hTrue on success}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj>%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_read_dpcd_caps (C function)c.drm_dp_read_dpcd_capshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hQint drm_dp_read_dpcd_caps (struct drm_dp_aux *aux, u8 dpcd[DP_RECEIVER_CAP_SIZE])h]j)}(hPint drm_dp_read_dpcd_caps(struct drm_dp_aux *aux, u8 dpcd[DP_RECEIVER_CAP_SIZE])h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj+&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj*&hMubj)}(hdrm_dp_read_dpcd_capsh]j)}(hdrm_dp_read_dpcd_capsh]hdrm_dp_read_dpcd_caps}(hj=&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj*&hMubj)}(h7(struct drm_dp_aux *aux, u8 dpcd[DP_RECEIVER_CAP_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjY&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU&ubj)}(h h]h }(hjf&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU&ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjw&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjy&modnameN classnameNjj)}j]j%)}jj?&sbc.drm_dp_read_dpcd_capsasbuh1hhjU&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU&ubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjU&ubj)}(hauxh]haux}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ&ubj)}(hu8 dpcd[DP_RECEIVER_CAP_SIZE]h](h)}(hhh]j)}(hu8h]hu8}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j&c.drm_dp_read_dpcd_capsasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hdpcdh]hdpcd}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hjh]h[}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j&c.drm_dp_read_dpcd_capsasbuh1hhj&ubj9)}(hjh]h]}(hj6'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ&ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj*&hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj&hhhj*&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhj*&hMhj&hhubj)}(hhh]h)}(h2read DPCD caps and extended DPCD caps if availableh]h2read DPCD caps and extended DPCD caps if available}(hj_'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMvhj\'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj*&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjw'jjw'jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``u8 dpcd[DP_RECEIVER_CAP_SIZE]`` Buffer to store the resulting DPCD in **Description** Attempts to read the base DPCD caps for **aux**. Additionally, this function checks for and reads the extended DPRX caps (``DP_DP13_DPCD_REV``) if present. **Return** ``0`` if the DPCD was read successfully, negative error code otherwise.h](h)}(h**Parameters**h]j%)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMzhj{'ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj'h]hstruct drm_dp_aux *aux}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMxhj'ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMxhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMxhj'ubjn)}(hH``u8 dpcd[DP_RECEIVER_CAP_SIZE]`` Buffer to store the resulting DPCD in h](jt)}(h!``u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj'h]hu8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMyhj'ubj)}(hhh]h)}(h%Buffer to store the resulting DPCD inh]h%Buffer to store the resulting DPCD in}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMyhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMyhj'ubeh}(h]h ]h"]h$]h&]uh1jhhj{'ubh)}(h**Description**h]j%)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM{hj{'ubh)}(hAttempts to read the base DPCD caps for **aux**. Additionally, this function checks for and reads the extended DPRX caps (``DP_DP13_DPCD_REV``) if present.h](h(Attempts to read the base DPCD caps for }(hj*(hhhNhNubj%)}(h**aux**h]haux}(hj2(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*(ubhK. Additionally, this function checks for and reads the extended DPRX caps (}(hj*(hhhNhNubjz)}(h``DP_DP13_DPCD_REV``h]hDP_DP13_DPCD_REV}(hjD(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*(ubh ) if present.}(hj*(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM{hj{'ubh)}(h **Return**h]j%)}(hj_(h]hReturn}(hja(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj](ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj{'ubh)}(hG``0`` if the DPCD was read successfully, negative error code otherwise.h](jz)}(h``0``h]h0}(hjy(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhju(ubhB if the DPCD was read successfully, negative error code otherwise.}(hju(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj{'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_read_downstream_info (C function)c.drm_dp_read_downstream_infohNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_read_downstream_info (struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS])h]j)}(hint drm_dp_read_downstream_info(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS])h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hMubj)}(hdrm_dp_read_downstream_infoh]j)}(hdrm_dp_read_downstream_infoh]hdrm_dp_read_downstream_info}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj(hMubj)}(hk(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj )hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj )ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j%)}jj(sbc.drm_dp_read_downstream_infoasbuh1hhj(ubj)}(h h]h }(hj-)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hj;)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(hauxh]haux}(hjH)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hja)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj])ubj)}(h h]h }(hjn)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj])ubh)}(hhh]j)}(hu8h]hu8}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j))c.drm_dp_read_downstream_infoasbuh1hhj])ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj])ubj)}(hdpcdh]hdpcd}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj])ubj9)}(hjh]h[}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj])ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j))c.drm_dp_read_downstream_infoasbuh1hhj])ubj9)}(hjh]h]}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj])ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h,u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]h](h)}(hhh]j)}(hu8h]hu8}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j))c.drm_dp_read_downstream_infoasbuh1hhj)ubj)}(h h]h }(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hdownstream_portsh]hdownstream_ports}(hj.*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj9)}(hjh]h[}(hj<*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)ubh)}(hhh]j)}(hDP_MAX_DOWNSTREAM_PORTSh]hDP_MAX_DOWNSTREAM_PORTS}(hjL*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjN*modnameN classnameNjj)}j]j))c.drm_dp_read_downstream_infoasbuh1hhj)ubj9)}(hjh]h]}(hjj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj(hhhj(hMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jhj(hMhj(hhubj)}(hhh]h)}(h+read DPCD downstream port info if availableh]h+read DPCD downstream port info if available}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` A cached copy of the port's DPCD ``u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]`` buffer to store the downstream port info in **Description** See also: drm_dp_downstream_max_clock() drm_dp_downstream_max_bpc() **Return** 0 if either the downstream port info was read successfully or there was no downstream info to read, or a negative error code otherwise.h](h)}(h**Parameters**h]j%)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj*h]hstruct drm_dp_aux *aux}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhj*hMhj*ubjn)}(hI``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` A cached copy of the port's DPCD h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj +h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj +ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj+ubj)}(hhh]h)}(h A cached copy of the port's DPCDh]h"A cached copy of the port’s DPCD}(hj&+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"+hMhj#+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj"+hMhj*ubjn)}(h]``u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]`` buffer to store the downstream port info in h](jt)}(h0``u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]``h]jz)}(hjF+h]h,u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]}(hjH+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD+ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj@+ubj)}(hhh]h)}(h+buffer to store the downstream port info inh]h+buffer to store the downstream port info in}(hj_+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[+hMhj\+ubah}(h]h ]h"]h$]h&]uh1jhj@+ubeh}(h]h ]h"]h$]h&]uh1jmhj[+hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhhj*ubh)}(h**Description**h]j%)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubh)}(hCSee also: drm_dp_downstream_max_clock() drm_dp_downstream_max_bpc()h]hCSee also: drm_dp_downstream_max_clock() drm_dp_downstream_max_bpc()}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubh)}(h **Return**h]j%)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubh)}(h0 if either the downstream port info was read successfully or there was no downstream info to read, or a negative error code otherwise.h]h0 if either the downstream port info was read successfully or there was no downstream info to read, or a negative error code otherwise.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_downstream_max_dotclock (C function) c.drm_dp_downstream_max_dotclockhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h^int drm_dp_downstream_max_dotclock (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h]j)}(h]int drm_dp_downstream_max_dotclock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hMubj)}(hdrm_dp_downstream_max_dotclockh]j)}(hdrm_dp_downstream_max_dotclockh]hdrm_dp_downstream_max_dotclock}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hMubj)}(h;(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj*,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&,ubj)}(h h]h }(hj7,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&,ubh)}(hhh]j)}(hu8h]hu8}(hjH,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJ,modnameN classnameNjj)}j]j%)}jj,sb c.drm_dp_downstream_max_dotclockasbuh1hhj&,ubj)}(h h]h }(hjh,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&,ubj)}(hdpcdh]hdpcd}(hjv,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&,ubj9)}(hjh]h[}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&,ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]jd, c.drm_dp_downstream_max_dotclockasbuh1hhj&,ubj9)}(hjh]h]}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj",ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hu8h]hu8}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]jd, c.drm_dp_downstream_max_dotclockasbuh1hhj,ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hport_caph]hport_cap}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj9)}(hjh]h[}(hj"-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubj)}(hjh]h4}(hj/-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj9)}(hjh]h]}(hj<-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj",ubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhj+hMhj+hhubj)}(hhh]h)}(h,extract downstream facing port max dot clockh]h,extract downstream facing port max dot clock}(hje-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjb-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}-jj}-jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities **Return** Downstream facing port max dot clock in kHz on success, or 0 if max clock not definedh](h)}(h**Parameters**h]j%)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj-ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj-h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj-ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj-hMhj-ubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hj-h]hconst u8 port_cap[4]}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj-ubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj-hMhj-ubeh}(h]h ]h"]h$]h&]uh1jhhj-ubh)}(h **Return**h]j%)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj-ubh)}(hUDownstream facing port max dot clock in kHz on success, or 0 if max clock not definedh]hUDownstream facing port max dot clock in kHz on success, or 0 if max clock not defined}(hj0.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_downstream_max_tmds_clock (C function)"c.drm_dp_downstream_max_tmds_clockhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_downstream_max_tmds_clock (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h]j)}(hint drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(hinth]hint}(hj_.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[.hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjn.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[.hhhjm.hMubj)}(h drm_dp_downstream_max_tmds_clockh]j)}(h drm_dp_downstream_max_tmds_clockh]h drm_dp_downstream_max_tmds_clock}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[.hhhjm.hMubj)}(h\(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j%)}jj.sb"c.drm_dp_downstream_max_tmds_clockasbuh1hhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hdpcdh]hdpcd}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hjh]h[}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j."c.drm_dp_downstream_max_tmds_clockasbuh1hhj.ubj9)}(hjh]h]}(hj$/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj2modnameN classnameNjj)}j]j 2"c.drm_dp_downstream_min_tmds_clockasbuh1hhj1ubj9)}(hjh]h]}(hjZ2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hjr2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2ubh)}(hhh]j)}(hu8h]hu8}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j 2"c.drm_dp_downstream_min_tmds_clockasbuh1hhjn2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2ubj)}(hport_caph]hport_cap}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2ubj9)}(hjh]h[}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjn2ubj)}(hjh]h4}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2ubj9)}(hjh]h]}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjn2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj 3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj$3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj53hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj23ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj73modnameN classnameNjj)}j]j 2"c.drm_dp_downstream_min_tmds_clockasbuh1hhj2ubj)}(h h]h }(hjS3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(hj9h]h*}(hja3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubj)}(hdrm_edidh]hdrm_edid}(hjn3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhj1hM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1hhhj1hM.ubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1jhj1hM.hj1hhubj)}(hhh]h)}(h-extract downstream facing port min TMDS clockh]h-extract downstream facing port min TMDS clock}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM&hj3hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhjhNhNubj)}(hX$**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities ``const struct drm_edid *drm_edid`` EDID **Return** HDMI/DVI downstream facing port min TMDS clock in kHz on success, or 0 if max TMDS clock not definedh](h)}(h**Parameters**h]j%)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM*hj3ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj3h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM'hj3ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM'hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhj3hM'hj3ubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hj4h]hconst u8 port_cap[4]}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM(hj 4ubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hj+4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'4hM(hj(4ubah}(h]h ]h"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]uh1jmhj'4hM(hj3ubjn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjK4h]hconst struct drm_edid *drm_edid}(hjM4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjI4ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM)hjE4ubj)}(hhh]h)}(hEDIDh]hEDID}(hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`4hM)hja4ubah}(h]h ]h"]h$]h&]uh1jhjE4ubeh}(h]h ]h"]h$]h&]uh1jmhj`4hM)hj3ubeh}(h]h ]h"]h$]h&]uh1jhhj3ubh)}(h **Return**h]j%)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM+hj3ubh)}(hdHDMI/DVI downstream facing port min TMDS clock in kHz on success, or 0 if max TMDS clock not definedh]hdHDMI/DVI downstream facing port min TMDS clock in kHz on success, or 0 if max TMDS clock not defined}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM+hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_downstream_max_bpc (C function)c.drm_dp_downstream_max_bpchNtauh1jxhjhhhNhNubj)}(hhh](j)}(hzint drm_dp_downstream_max_bpc (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h]j)}(hyint drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMYubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hMYubj)}(hdrm_dp_downstream_max_bpch]j)}(hdrm_dp_downstream_max_bpch]hdrm_dp_downstream_max_bpc}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhj4hMYubj)}(h\(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hu8h]hu8}(hj&5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(5modnameN classnameNjj)}j]j%)}jj4sbc.drm_dp_downstream_max_bpcasbuh1hhj5ubj)}(h h]h }(hjF5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hdpcdh]hdpcd}(hjT5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hjh]h[}(hjb5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjr5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjt5modnameN classnameNjj)}j]jB5c.drm_dp_downstream_max_bpcasbuh1hhj5ubj9)}(hjh]h]}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hu8h]hu8}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]jB5c.drm_dp_downstream_max_bpcasbuh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hport_caph]hport_cap}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hjh]h[}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hjh]h4}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hjh]h]}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hj26hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.6ubj)}(h h]h }(hj?6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.6ubj)}(hjh]hstruct}(hjM6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.6ubj)}(h h]h }(hjZ6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.6ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjk6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm6modnameN classnameNjj)}j]jB5c.drm_dp_downstream_max_bpcasbuh1hhj.6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.6ubj9)}(hj9h]h*}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.6ubj)}(hdrm_edidh]hdrm_edid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhj4hMYubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhj4hMYubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhj4hMYhj4hhubj)}(hhh]h)}(h5extract downstream facing port max bits per componenth]h5extract downstream facing port max bits per component}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMQhj6hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMYubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` downstream facing port capabilities ``const struct drm_edid *drm_edid`` EDID **Return** Max bpc on success or 0 if max bpc not definedh](h)}(h**Parameters**h]j%)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMUhj6ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj7h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 7ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMShj 7ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj(7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$7hMShj%7ubah}(h]h ]h"]h$]h&]uh1jhj 7ubeh}(h]h ]h"]h$]h&]uh1jmhj$7hMShj7ubjn)}(h=``const u8 port_cap[4]`` downstream facing port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjH7h]hconst u8 port_cap[4]}(hjJ7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF7ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMThjB7ubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(hja7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]7hMThj^7ubah}(h]h ]h"]h$]h&]uh1jhjB7ubeh}(h]h ]h"]h$]h&]uh1jmhj]7hMThj7ubjn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj7h]hconst struct drm_edid *drm_edid}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMUhj{7ubj)}(hhh]h)}(hEDIDh]hEDID}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMUhj7ubah}(h]h ]h"]h$]h&]uh1jhj{7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMUhj7ubeh}(h]h ]h"]h$]h&]uh1jhhj6ubh)}(h **Return**h]j%)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMWhj6ubh)}(h.Max bpc on success or 0 if max bpc not definedh]h.Max bpc on success or 0 if max bpc not defined}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMWhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_dp_downstream_420_passthrough (C function)#c.drm_dp_downstream_420_passthroughhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbbool drm_dp_downstream_420_passthrough (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h]j)}(habool drm_dp_downstream_420_passthrough(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(hjAh]hbool}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj8hMubj)}(h!drm_dp_downstream_420_passthroughh]j)}(h!drm_dp_downstream_420_passthroughh]h!drm_dp_downstream_420_passthrough}(hj!8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhj8hMubj)}(h;(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj=8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj98ubj)}(h h]h }(hjJ8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj98ubh)}(hhh]j)}(hu8h]hu8}(hj[8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]8modnameN classnameNjj)}j]j%)}jj#8sb#c.drm_dp_downstream_420_passthroughasbuh1hhj98ubj)}(h h]h }(hj{8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj98ubj)}(hdpcdh]hdpcd}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj98ubj9)}(hjh]h[}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj98ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]jw8#c.drm_dp_downstream_420_passthroughasbuh1hhj98ubj9)}(hjh]h]}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj98ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj58ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hu8h]hu8}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]jw8#c.drm_dp_downstream_420_passthroughasbuh1hhj8ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hport_caph]hport_cap}(hj'9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hjh]h[}(hj59hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hjh]h4}(hjB9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hjh]h]}(hjO9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj58ubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhj8hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhj8hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhj8hMhj7hhubj)}(hhh]h)}(hDdetermine downstream facing port YCbCr 4:2:0 pass-through capabilityh]hDdetermine downstream facing port YCbCr 4:2:0 pass-through capability}(hjx9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhju9hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` downstream facing port capabilities **Return** whether the downstream facing port can pass through YCbCr 4:2:0h](h)}(h**Parameters**h]j%)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj9ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj9h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj9ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhj9ubjn)}(h=``const u8 port_cap[4]`` downstream facing port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hj9h]hconst u8 port_cap[4]}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj9ubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhhj9ubh)}(h **Return**h]j%)}(hj-:h]hReturn}(hj/:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+:ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj9ubh)}(h?whether the downstream facing port can pass through YCbCr 4:2:0h]h?whether the downstream facing port can pass through YCbCr 4:2:0}(hjC:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_dp_downstream_444_to_420_conversion (C function))c.drm_dp_downstream_444_to_420_conversionhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hhbool drm_dp_downstream_444_to_420_conversion (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h]j)}(hgbool drm_dp_downstream_444_to_420_conversion(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(hjAh]hbool}(hjr:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn:hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn:hhhj:hMubj)}(h'drm_dp_downstream_444_to_420_conversionh]j)}(h'drm_dp_downstream_444_to_420_conversionh]h'drm_dp_downstream_444_to_420_conversion}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjn:hhhj:hMubj)}(h;(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hu8h]hu8}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j%)}jj:sb)c.drm_dp_downstream_444_to_420_conversionasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hdpcdh]hdpcd}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hjh]h[}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j:)c.drm_dp_downstream_444_to_420_conversionasbuh1hhj:ubj9)}(hjh]h]}(hj6;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hjN;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ;ubj)}(h h]h }(hj[;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ;ubh)}(hhh]j)}(hu8h]hu8}(hjl;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjn;modnameN classnameNjj)}j]j:)c.drm_dp_downstream_444_to_420_conversionasbuh1hhjJ;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ;ubj)}(hport_caph]hport_cap}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ;ubj9)}(hjh]h[}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJ;ubj)}(hjh]h4}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ;ubj9)}(hjh]h]}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJ;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubeh}(h]h ]h"]h$]h&]jjuh1jhjn:hhhj:hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjj:hhhj:hMubah}(h]je:ah ](jjeh"]h$]h&]jj)jhuh1jhj:hMhjg:hhubj)}(hhh]h)}(hIdetermine downstream facing port YCbCr 4:4:4->4:2:0 conversion capabilityh]hIdetermine downstream facing port YCbCr 4:4:4->4:2:0 conversion capability}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj;hhubah}(h]h ]h"]h$]h&]uh1jhjg:hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` downstream facing port capabilities **Return** whether the downstream facing port can convert YCbCr 4:4:4 to 4:2:0h](h)}(h**Parameters**h]j%)}(hj <h]h Parameters}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj <ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj<ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj*<h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj,<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(<ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj$<ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjC<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?<hMhj@<ubah}(h]h ]h"]h$]h&]uh1jhj$<ubeh}(h]h ]h"]h$]h&]uh1jmhj?<hMhj!<ubjn)}(h=``const u8 port_cap[4]`` downstream facing port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjc<h]hconst u8 port_cap[4]}(hje<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhja<ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj]<ubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(hj|<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx<hMhjy<ubah}(h]h ]h"]h$]h&]uh1jhj]<ubeh}(h]h ]h"]h$]h&]uh1jmhjx<hMhj!<ubeh}(h]h ]h"]h$]h&]uh1jhhj<ubh)}(h **Return**h]j%)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj<ubh)}(hCwhether the downstream facing port can convert YCbCr 4:4:4 to 4:2:0h]hCwhether the downstream facing port can convert YCbCr 4:4:4 to 4:2:0}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_dp_downstream_rgb_to_ycbcr_conversion (C function)+c.drm_dp_downstream_rgb_to_ycbcr_conversionhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hxbool drm_dp_downstream_rgb_to_ycbcr_conversion (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], u8 color_spc)h]j)}(hwbool drm_dp_downstream_rgb_to_ycbcr_conversion(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], u8 color_spc)h](j)}(hjAh]hbool}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hMubj)}(h)drm_dp_downstream_rgb_to_ycbcr_conversionh]j)}(h)drm_dp_downstream_rgb_to_ycbcr_conversionh]h)drm_dp_downstream_rgb_to_ycbcr_conversion}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhj<hMubj)}(hI(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], u8 color_spc)h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj,=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(hu8h]hu8}(hj==hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?=modnameN classnameNjj)}j]j%)}jj=sb+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhj=ubj)}(h h]h }(hj]=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hdpcdh]hdpcd}(hjk=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hjh]h[}(hjy=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]jY=+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhj=ubj9)}(hjh]h]}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(hu8h]hu8}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]jY=+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hport_caph]hport_cap}(hj >hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hjh]h[}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubj)}(hjh]h4}(hj$>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hjh]h]}(hj1>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h u8 color_spch](h)}(hhh]j)}(hu8h]hu8}(hjL>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjN>modnameN classnameNjj)}j]jY=+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhjE>ubj)}(h h]h }(hjj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE>ubj)}(h color_spch]h color_spc}(hjx>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhj<hhhj<hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj<hhhj<hMubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhj<hMhj<hhubj)}(hhh]h)}(hAdetermine downstream facing port RGB->YCbCr conversion capabilityh]hAdetermine downstream facing port RGB->YCbCr conversion capability}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhjhNhNubj)}(hX9**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` downstream facing port capabilities ``u8 color_spc`` Colorspace for which conversion cap is sought **Return** whether the downstream facing port can convert RGB->YCbCr for a given colorspace.h](h)}(h**Parameters**h]j%)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj>ubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj>h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj>ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj>ubjn)}(h=``const u8 port_cap[4]`` downstream facing port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hj?h]hconst u8 port_cap[4]}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj?ubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(hj5?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1?hMhj2?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj1?hMhj>ubjn)}(h?``u8 color_spc`` Colorspace for which conversion cap is sought h](jt)}(h``u8 color_spc``h]jz)}(hjU?h]h u8 color_spc}(hjW?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjS?ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjO?ubj)}(hhh]h)}(h-Colorspace for which conversion cap is soughth]h-Colorspace for which conversion cap is sought}(hjn?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj?hMhjk?ubah}(h]h ]h"]h$]h&]uh1jhjO?ubeh}(h]h ]h"]h$]h&]uh1jmhjj?hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhhj>ubh)}(h **Return**h]j%)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj>ubh)}(hQwhether the downstream facing port can convert RGB->YCbCr for a given colorspace.h]hQwhether the downstream facing port can convert RGB->YCbCr for a given colorspace.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_downstream_mode (C function)c.drm_dp_downstream_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_display_mode * drm_dp_downstream_mode (struct drm_device *dev, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h]j)}(hstruct drm_display_mode *drm_dp_downstream_mode(struct drm_device *dev, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hMubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j%)}jdrm_dp_downstream_modesbc.drm_dp_downstream_modeasbuh1hhj?hhhj?hMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj?hMubj9)}(hj9h]h*}(hj#@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?hhhj?hMubj)}(hdrm_dp_downstream_modeh]j)}(hj@h]hdrm_dp_downstream_mode}(hj4@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj?hMubj)}(hS(struct drm_device *dev, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjO@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK@ubj)}(h h]h }(hj\@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK@ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjm@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjo@modnameN classnameNjj)}j]j@c.drm_dp_downstream_modeasbuh1hhjK@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK@ubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjK@ubj)}(hdevh]hdev}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjG@ubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hu8h]hu8}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j@c.drm_dp_downstream_modeasbuh1hhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hdpcdh]hdpcd}(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hjh]h[}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj'AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)AmodnameN classnameNjj)}j]j@c.drm_dp_downstream_modeasbuh1hhj@ubj9)}(hjh]h]}(hjEAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjG@ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj]AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYAubj)}(h h]h }(hjjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYAubh)}(hhh]j)}(hu8h]hu8}(hj{AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}AmodnameN classnameNjj)}j]j@c.drm_dp_downstream_modeasbuh1hhjYAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYAubj)}(hport_caph]hport_cap}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYAubj9)}(hjh]h[}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYAubj)}(hjh]h4}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYAubj9)}(hjh]h]}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjG@ubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhj?hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhj?hMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhj?hMhj?hhubj)}(hhh]h)}(h(return a mode for downstream facing porth]h(return a mode for downstream facing port}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhjhNhNubj)}(hXF**Parameters** ``struct drm_device *dev`` DRM device ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities **Description** Provides a suitable mode for downstream facing ports without EDID. **Return** A new drm_display_mode on success or NULL on failureh](h)}(h**Parameters**h]j%)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj9Bh]hstruct drm_device *dev}(hj;BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7Bubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3Bubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjRBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNBhMhjOBubah}(h]h ]h"]h$]h&]uh1jhj3Bubeh}(h]h ]h"]h$]h&]uh1jmhjNBhMhj0Bubjn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hjrBh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjtBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpBubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjlBubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjlBubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhj0Bubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjBh]hconst u8 port_cap[4]}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhj0Bubeh}(h]h ]h"]h$]h&]uh1jhhjBubh)}(h**Description**h]j%)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBubh)}(hBProvides a suitable mode for downstream facing ports without EDID.h]hBProvides a suitable mode for downstream facing ports without EDID.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBubh)}(h **Return**h]j%)}(hj Ch]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Cubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBubh)}(h4A new drm_display_mode on success or NULL on failureh]h4A new drm_display_mode on success or NULL on failure}(hj#ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_downstream_id (C function)c.drm_dp_downstream_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=int drm_dp_downstream_id (struct drm_dp_aux *aux, char id[6])h]j)}(hShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Shhhj=ShMubj)}(hdrm_dp_read_sink_counth]j)}(hdrm_dp_read_sink_counth]hdrm_dp_read_sink_count}(hjPShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLSubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+Shhhj=ShMubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjlShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhSubj)}(h h]h }(hjyShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhSubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j%)}jjRSsbc.drm_dp_read_sink_countasbuh1hhjhSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhSubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhSubj)}(hauxh]haux}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdSubah}(h]h ]h"]h$]h&]jjuh1jhj+Shhhj=ShMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'Shhhj=ShMubah}(h]j"Sah ](jjeh"]h$]h&]jj)jhuh1jhj=ShMhj$Shhubj)}(hhh]h)}(h(Retrieve the sink count for a given sinkh]h(Retrieve the sink count for a given sink}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjShhubah}(h]h ]h"]h$]h&]uh1jhj$Shhhj=ShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` The DP AUX channel to use **Description** See also: drm_dp_read_sink_count_cap() **Return** The current sink count reported by **aux**, or a negative error code otherwise.h](h)}(h**Parameters**h]j%)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj Tubji)}(hhh]jn)}(h5``struct drm_dp_aux *aux`` The DP AUX channel to use h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj0Th]hstruct drm_dp_aux *aux}(hj2ThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.Tubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*Tubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjIThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEThMhjFTubah}(h]h ]h"]h$]h&]uh1jhj*Tubeh}(h]h ]h"]h$]h&]uh1jmhjEThMhj'Tubah}(h]h ]h"]h$]h&]uh1jhhj Tubh)}(h**Description**h]j%)}(hjkTh]h Description}(hjmThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiTubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj Tubh)}(h&See also: drm_dp_read_sink_count_cap()h]h&See also: drm_dp_read_sink_count_cap()}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj Tubh)}(h **Return**h]j%)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj Tubh)}(hOThe current sink count reported by **aux**, or a negative error code otherwise.h](h#The current sink count reported by }(hjThhhNhNubj%)}(h**aux**h]haux}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh%, or a negative error code otherwise.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_remote_aux_init (C function)c.drm_dp_remote_aux_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4void drm_dp_remote_aux_init (struct drm_dp_aux *aux)h]j)}(h3void drm_dp_remote_aux_init(struct drm_dp_aux *aux)h](j)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjThMubj)}(hdrm_dp_remote_aux_inith]j)}(hdrm_dp_remote_aux_inith]hdrm_dp_remote_aux_init}(hj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjThMubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj&UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Uubj)}(h h]h }(hj3UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Uubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjDUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFUmodnameN classnameNjj)}j]j%)}jj Usbc.drm_dp_remote_aux_initasbuh1hhj"Uubj)}(h h]h }(hjdUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Uubj9)}(hj9h]h*}(hjrUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"Uubj)}(hauxh]haux}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Uubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjThhhjThMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjThhhjThMubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjThMhjThhubj)}(hhh]h)}(h)minimally initialise a remote aux channelh]h)minimally initialise a remote aux channel}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Used for remote aux channel in general. Merely initialize the crc work struct.h](h)}(h**Parameters**h]j%)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjUubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjUh]hstruct drm_dp_aux *aux}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjUubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhhjUubh)}(h**Description**h]j%)}(hj%Vh]h Description}(hj'VhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#Vubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjUubh)}(hNUsed for remote aux channel in general. Merely initialize the crc work struct.h]hNUsed for remote aux channel in general. Merely initialize the crc work struct.}(hj;VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_aux_init (C function)c.drm_dp_aux_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(h-void drm_dp_aux_init (struct drm_dp_aux *aux)h]j)}(h,void drm_dp_aux_init(struct drm_dp_aux *aux)h](j)}(hvoidh]hvoid}(hjjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfVhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjyVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfVhhhjxVhMubj)}(hdrm_dp_aux_inith]j)}(hdrm_dp_aux_inith]hdrm_dp_aux_init}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfVhhhjxVhMubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j%)}jjVsbc.drm_dp_aux_initasbuh1hhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjVhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hauxh]haux}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubah}(h]h ]h"]h$]h&]jjuh1jhjfVhhhjxVhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjbVhhhjxVhMubah}(h]j]Vah ](jjeh"]h$]h&]jj)jhuh1jhjxVhMhj_Vhhubj)}(hhh]h)}(h#minimally initialise an aux channelh]h#minimally initialise an aux channel}(hj*WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj'Whhubah}(h]h ]h"]h$]h&]uh1jhj_VhhhjxVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBWjjBWjjjuh1jhhhjhNhNubj)}(hXK**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** If you need to use the drm_dp_aux's i2c adapter prior to registering it with the outside world, call drm_dp_aux_init() first. For drivers which are grandparents to their AUX adapters (e.g. the AUX adapter is parented by a :c:type:`drm_connector`), you must still call drm_dp_aux_register() once the connector has been registered to allow userspace access to the auxiliary DP channel. Likewise, for such drivers you should also assign :c:type:`drm_dp_aux.drm_dev ` as early as possible so that the :c:type:`drm_device` that corresponds to the AUX adapter may be mentioned in debugging output from the DRM DP helpers. For devices which use a separate platform device for their AUX adapters, this may be called as early as required by the driver.h](h)}(h**Parameters**h]j%)}(hjLWh]h Parameters}(hjNWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJWubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjFWubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjkWh]hstruct drm_dp_aux *aux}(hjmWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiWubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjeWubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjeWubeh}(h]h ]h"]h$]h&]uh1jmhjWhMhjbWubah}(h]h ]h"]h$]h&]uh1jhhjFWubh)}(h**Description**h]j%)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjFWubh)}(hXsIf you need to use the drm_dp_aux's i2c adapter prior to registering it with the outside world, call drm_dp_aux_init() first. For drivers which are grandparents to their AUX adapters (e.g. the AUX adapter is parented by a :c:type:`drm_connector`), you must still call drm_dp_aux_register() once the connector has been registered to allow userspace access to the auxiliary DP channel. Likewise, for such drivers you should also assign :c:type:`drm_dp_aux.drm_dev ` as early as possible so that the :c:type:`drm_device` that corresponds to the AUX adapter may be mentioned in debugging output from the DRM DP helpers.h](hIf you need to use the drm_dp_aux’s i2c adapter prior to registering it with the outside world, call drm_dp_aux_init() first. For drivers which are grandparents to their AUX adapters (e.g. the AUX adapter is parented by a }(hjWhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjWh]h drm_connector}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjWubh), you must still call drm_dp_aux_register() once the connector has been registered to allow userspace access to the auxiliary DP channel. Likewise, for such drivers you should also assign }(hjWhhhNhNubh)}(h):c:type:`drm_dp_aux.drm_dev `h]jz)}(hjWh]hdrm_dp_aux.drm_dev}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhjWhMhjWubh" as early as possible so that the }(hjWhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hj Xh]h drm_device}(hjXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj Xubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjWhMhjWubhb that corresponds to the AUX adapter may be mentioned in debugging output from the DRM DP helpers.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhMhjFWubh)}(hFor devices which use a separate platform device for their AUX adapters, this may be called as early as required by the driver.h]hFor devices which use a separate platform device for their AUX adapters, this may be called as early as required by the driver.}(hj4XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjFWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dp_aux_register (C function)c.drm_dp_aux_registerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h0int drm_dp_aux_register (struct drm_dp_aux *aux)h]j)}(h/int drm_dp_aux_register(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hjcXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Xhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjrXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_XhhhjqXhM ubj)}(hdrm_dp_aux_registerh]j)}(hdrm_dp_aux_registerh]hdrm_dp_aux_register}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_XhhhjqXhM ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j%)}jjXsbc.drm_dp_aux_registerasbuh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hauxh]haux}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhj_XhhhjqXhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[XhhhjqXhM ubah}(h]jVXah ](jjeh"]h$]h&]jj)jhuh1jhjqXhM hjXXhhubj)}(hhh]h)}(h#initialise and register aux channelh]h#initialise and register aux channel}(hj#YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj Yhhubah}(h]h ]h"]h$]h&]uh1jhjXXhhhjqXhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;Yjj;Yjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Automatically calls drm_dp_aux_init() if this hasn't been done yet. This should only be called once the parent of **aux**, :c:type:`drm_dp_aux.dev `, is initialized. For devices which are grandparents of their AUX channels, :c:type:`drm_dp_aux.dev ` will typically be the :c:type:`drm_connector` :c:type:`device` which corresponds to **aux**. For these devices, it's advised to call drm_dp_aux_register() in :c:type:`drm_connector_funcs.late_register `, and likewise to call drm_dp_aux_unregister() in :c:type:`drm_connector_funcs.early_unregister `. Functions which don't follow this will likely Oops when ``CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV`` is enabled. For devices where the AUX channel is a device that exists independently of the :c:type:`drm_device` that uses it, such as SoCs and bridge devices, it is recommended to call drm_dp_aux_register() after a :c:type:`drm_device` has been assigned to :c:type:`drm_dp_aux.drm_dev `, and likewise to call drm_dp_aux_unregister() once the :c:type:`drm_device` should no longer be associated with the AUX channel (e.g. on bridge detach). Drivers which need to use the aux channel before either of the two points mentioned above need to call drm_dp_aux_init() in order to use the AUX channel before registration. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjEYh]h Parameters}(hjGYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCYubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj?Yubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjdYh]hstruct drm_dp_aux *aux}(hjfYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbYubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj^Yubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj}YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyYhMhjzYubah}(h]h ]h"]h$]h&]uh1jhj^Yubeh}(h]h ]h"]h$]h&]uh1jmhjyYhMhj[Yubah}(h]h ]h"]h$]h&]uh1jhhj?Yubh)}(h**Description**h]j%)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj?Yubh)}(hXAutomatically calls drm_dp_aux_init() if this hasn't been done yet. This should only be called once the parent of **aux**, :c:type:`drm_dp_aux.dev `, is initialized. For devices which are grandparents of their AUX channels, :c:type:`drm_dp_aux.dev ` will typically be the :c:type:`drm_connector` :c:type:`device` which corresponds to **aux**. For these devices, it's advised to call drm_dp_aux_register() in :c:type:`drm_connector_funcs.late_register `, and likewise to call drm_dp_aux_unregister() in :c:type:`drm_connector_funcs.early_unregister `. Functions which don't follow this will likely Oops when ``CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV`` is enabled.h](htAutomatically calls drm_dp_aux_init() if this hasn’t been done yet. This should only be called once the parent of }(hjYhhhNhNubj%)}(h**aux**h]haux}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubh, }(hjYhhhNhNubh)}(h%:c:type:`drm_dp_aux.dev `h]jz)}(hjYh]hdrm_dp_aux.dev}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjYubhL, is initialized. For devices which are grandparents of their AUX channels, }(hjYhhhNhNubh)}(h%:c:type:`drm_dp_aux.dev `h]jz)}(hjYh]hdrm_dp_aux.dev}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhjYhMhjYubh will typically be the }(hjYhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjZh]h drm_connector}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjYhMhjYubh }(hjYhhhNhNubh)}(h:c:type:`device`h]jz)}(hj;Zh]hdevice}(hj=ZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9Zubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdeviceuh1hhjYhMhjYubh which corresponds to }(hjYhhhNhNubj%)}(h**aux**h]haux}(hj\ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubhE. For these devices, it’s advised to call drm_dp_aux_register() in }(hjYhhhNhNubh)}(hA:c:type:`drm_connector_funcs.late_register `h]jz)}(hjpZh]h!drm_connector_funcs.late_register}(hjrZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjnZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhjYhMhjYubh2, and likewise to call drm_dp_aux_unregister() in }(hjYhhhNhNubh)}(hD:c:type:`drm_connector_funcs.early_unregister `h]jz)}(hjZh]h$drm_connector_funcs.early_unregister}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhjYhMhjYubh<. Functions which don’t follow this will likely Oops when }(hjYhhhNhNubjz)}(h%``CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV``h]h!CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubh is enabled.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhMhj?Yubh)}(hXFor devices where the AUX channel is a device that exists independently of the :c:type:`drm_device` that uses it, such as SoCs and bridge devices, it is recommended to call drm_dp_aux_register() after a :c:type:`drm_device` has been assigned to :c:type:`drm_dp_aux.drm_dev `, and likewise to call drm_dp_aux_unregister() once the :c:type:`drm_device` should no longer be associated with the AUX channel (e.g. on bridge detach).h](hOFor devices where the AUX channel is a device that exists independently of the }(hjZhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hjZh]h drm_device}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjZubhh that uses it, such as SoCs and bridge devices, it is recommended to call drm_dp_aux_register() after a }(hjZhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hjZh]h drm_device}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjZhMhjZubh has been assigned to }(hjZhhhNhNubh)}(h):c:type:`drm_dp_aux.drm_dev `h]jz)}(hj[h]hdrm_dp_aux.drm_dev}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhjZhMhjZubh8, and likewise to call drm_dp_aux_unregister() once the }(hjZhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hj@[h]h drm_device}(hjB[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>[ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjZhMhjZubhM should no longer be associated with the AUX channel (e.g. on bridge detach).}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhj?Yubh)}(hDrivers which need to use the aux channel before either of the two points mentioned above need to call drm_dp_aux_init() in order to use the AUX channel before registration.h]hDrivers which need to use the aux channel before either of the two points mentioned above need to call drm_dp_aux_init() in order to use the AUX channel before registration.}(hjg[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj?Yubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjv[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj?Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_aux_unregister (C function)c.drm_dp_aux_unregisterhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h3void drm_dp_aux_unregister (struct drm_dp_aux *aux)h]j)}(h2void drm_dp_aux_unregister(struct drm_dp_aux *aux)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM* ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhj[hM* ubj)}(hdrm_dp_aux_unregisterh]j)}(hdrm_dp_aux_unregisterh]hdrm_dp_aux_unregister}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[hhhj[hM* ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j%)}jj[sbc.drm_dp_aux_unregisterasbuh1hhj[ubj)}(h h]h }(hj \hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj9)}(hj9h]h*}(hj.\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[ubj)}(hauxh]haux}(hj;\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubah}(h]h ]h"]h$]h&]jjuh1jhj[hhhj[hM* ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhj[hM* ubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jhj[hM* hj[hhubj)}(hhh]h)}(hunregister an AUX adapterh]hunregister an AUX adapter}(hje\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM' hjb\hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj[hM* ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}\jj}\jjjuh1jhhhjhNhNubj)}(hD**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channelh](h)}(h**Parameters**h]j%)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM+ hj\ubji)}(hhh]jn)}(h2``struct drm_dp_aux *aux`` DisplayPort AUX channelh](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj\h]hstruct drm_dp_aux *aux}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM- hj\ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM( hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhj\hM- hj\ubah}(h]h ]h"]h$]h&]uh1jhhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_psr_setup_time (C function)c.drm_dp_psr_setup_timehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hGint drm_dp_psr_setup_time (const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE])h]j)}(hFint drm_dp_psr_setup_time(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE])h](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM; ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj]hM; ubj)}(hdrm_dp_psr_setup_timeh]j)}(hdrm_dp_psr_setup_timeh]hdrm_dp_psr_setup_time}(hj!]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj]hM; ubj)}(h-(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE])h]j)}(h+const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj=]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]ubj)}(h h]h }(hjJ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]ubh)}(hhh]j)}(hu8h]hu8}(hj[]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]]modnameN classnameNjj)}j]j%)}jj#]sbc.drm_dp_psr_setup_timeasbuh1hhj9]ubj)}(h h]h }(hj{]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]ubj)}(hpsr_caph]hpsr_cap}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9]ubj9)}(hjh]h[}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9]ubh)}(hhh]j)}(hEDP_PSR_RECEIVER_CAP_SIZEh]hEDP_PSR_RECEIVER_CAP_SIZE}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]jw]c.drm_dp_psr_setup_timeasbuh1hhj9]ubj9)}(hjh]h]}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5]ubah}(h]h ]h"]h$]h&]jjuh1jhj\hhhj]hM; ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj]hM; ubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhj]hM; hj\hhubj)}(hhh]h)}(hPSR setup in time usech]hPSR setup in time usec}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM4 hj]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj]hM; ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]`` PSR capabilities from DPCD **Return** PSR setup time for the panel in microseconds, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM8 hj ^ubji)}(hhh]jn)}(hK``const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]`` PSR capabilities from DPCD h](jt)}(h/``const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]``h]jz)}(hj/^h]h+const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]}(hj1^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-^ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM5 hj)^ubj)}(hhh]h)}(hPSR capabilities from DPCDh]hPSR capabilities from DPCD}(hjH^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD^hM5 hjE^ubah}(h]h ]h"]h$]h&]uh1jhj)^ubeh}(h]h ]h"]h$]h&]uh1jmhjD^hM5 hj&^ubah}(h]h ]h"]h$]h&]uh1jhhj ^ubh)}(h **Return**h]j%)}(hjj^h]hReturn}(hjl^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjh^ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM7 hj ^ubh)}(hNPSR setup time for the panel in microseconds, negative error code on failure.h]hNPSR setup time for the panel in microseconds, negative error code on failure.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM7 hj ^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_start_crc (C function)c.drm_dp_start_crchNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDint drm_dp_start_crc (struct drm_dp_aux *aux, struct drm_crtc *crtc)h]j)}(hCint drm_dp_start_crc(struct drm_dp_aux *aux, struct drm_crtc *crtc)h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMY ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMY ubj)}(hdrm_dp_start_crch]j)}(hdrm_dp_start_crch]hdrm_dp_start_crc}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj^hMY ubj)}(h/(struct drm_dp_aux *aux, struct drm_crtc *crtc)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj _modnameN classnameNjj)}j]j%)}jj^sbc.drm_dp_start_crcasbuh1hhj^ubj)}(h h]h }(hj*_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(hj9h]h*}(hj8_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^ubj)}(hauxh]haux}(hjE_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^ubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hj^_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ_ubj)}(h h]h }(hjk_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ_ubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hj|_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~_modnameN classnameNjj)}j]j&_c.drm_dp_start_crcasbuh1hhjZ_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ_ubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZ_ubj)}(hcrtch]hcrtc}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^ubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhj^hMY ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj^hMY ubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhj^hMY hj^hhubj)}(hhh]h)}(hstart capture of frame CRCsh]hstart capture of frame CRCs}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMS hj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMY ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``struct drm_crtc *crtc`` CRTC displaying the frames whose CRCs are to be captured **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMW hj_ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj `h]hstruct drm_dp_aux *aux}(hj"`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMT hj`ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj9`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5`hMT hj6`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj5`hMT hj`ubjn)}(hS``struct drm_crtc *crtc`` CRTC displaying the frames whose CRCs are to be captured h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjY`h]hstruct drm_crtc *crtc}(hj[`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW`ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMU hjS`ubj)}(hhh]h)}(h8CRTC displaying the frames whose CRCs are to be capturedh]h8CRTC displaying the frames whose CRCs are to be captured}(hjr`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn`hMU hjo`ubah}(h]h ]h"]h$]h&]uh1jhjS`ubeh}(h]h ]h"]h$]h&]uh1jmhjn`hMU hj`ubeh}(h]h ]h"]h$]h&]uh1jhhj_ubh)}(h**Description**h]j%)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMW hj_ubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMW hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_stop_crc (C function)c.drm_dp_stop_crchNtauh1jxhjhhhNhNubj)}(hhh](j)}(h,int drm_dp_stop_crc (struct drm_dp_aux *aux)h]j)}(h+int drm_dp_stop_crc(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMt ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMt ubj)}(hdrm_dp_stop_crch]j)}(hdrm_dp_stop_crch]hdrm_dp_stop_crc}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj`hMt ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hj#ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj4ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6amodnameN classnameNjj)}j]j%)}jj`sbc.drm_dp_stop_crcasbuh1hhjaubj)}(h h]h }(hjTahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjbahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hauxh]haux}(hjoahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhj`hMt ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`hhhj`hMt ubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1jhj`hMt hj`hhubj)}(hhh]h)}(hstop capture of frame CRCsh]hstop capture of frame CRCs}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMo hjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMt ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMs hjaubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjah]hstruct drm_dp_aux *aux}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMp hjaubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMp hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjahMp hjaubah}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMr hjaubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj+bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMr hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_read_desc (C function)c.drm_dp_read_deschNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWint drm_dp_read_desc (struct drm_dp_aux *aux, struct drm_dp_desc *desc, bool is_branch)h]j)}(hVint drm_dp_read_desc(struct drm_dp_aux *aux, struct drm_dp_desc *desc, bool is_branch)h](j)}(hinth]hint}(hjZbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVbhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjibhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVbhhhjhbhM ubj)}(hdrm_dp_read_desch]j)}(hdrm_dp_read_desch]hdrm_dp_read_desc}(hj{bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVbhhhjhbhM ubj)}(hB(struct drm_dp_aux *aux, struct drm_dp_desc *desc, bool is_branch)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j%)}jj}bsbc.drm_dp_read_descasbuh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbubj)}(hauxh]haux}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hstruct drm_dp_desc *desch](j)}(hjh]hstruct}(hj chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(h drm_dp_desch]h drm_dp_desc}(hj'chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)cmodnameN classnameNjj)}j]jbc.drm_dp_read_descasbuh1hhjcubj)}(h h]h }(hjEchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj9)}(hj9h]h*}(hjSchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcubj)}(hdesch]hdesc}(hj`chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hbool is_branchh](j)}(hjAh]hbool}(hjychhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjucubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjucubj)}(h is_branchh]h is_branch}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjucubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhjVbhhhjhbhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRbhhhjhbhM ubah}(h]jMbah ](jjeh"]h$]h&]jj)jhuh1jhjhbhM hjObhhubj)}(hhh]h)}(h%read sink/branch descriptor from DPCDh]h%read sink/branch descriptor from DPCD}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjchhubah}(h]h ]h"]h$]h&]uh1jhjObhhhjhbhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhjhNhNubj)}(hXv**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``struct drm_dp_desc *desc`` Device descriptor to fill from DPCD ``bool is_branch`` true for branch devices, false for sink devices **Description** Read DPCD 0x400 (sink) or 0x500 (branch) into **desc**. Also debug log the identification. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjcubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjch]hstruct drm_dp_aux *aux}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjcubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM hjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhjdhM hjcubjn)}(hA``struct drm_dp_desc *desc`` Device descriptor to fill from DPCD h](jt)}(h``struct drm_dp_desc *desc``h]jz)}(hj8dh]hstruct drm_dp_desc *desc}(hj:dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6dubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj2dubj)}(hhh]h)}(h#Device descriptor to fill from DPCDh]h#Device descriptor to fill from DPCD}(hjQdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMdhM hjNdubah}(h]h ]h"]h$]h&]uh1jhj2dubeh}(h]h ]h"]h$]h&]uh1jmhjMdhM hjcubjn)}(hC``bool is_branch`` true for branch devices, false for sink devices h](jt)}(h``bool is_branch``h]jz)}(hjqdh]hbool is_branch}(hjsdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjodubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjkdubj)}(hhh]h)}(h/true for branch devices, false for sink devicesh]h/true for branch devices, false for sink devices}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM hjdubah}(h]h ]h"]h$]h&]uh1jhjkdubeh}(h]h ]h"]h$]h&]uh1jmhjdhM hjcubeh}(h]h ]h"]h$]h&]uh1jhhjcubh)}(h**Description**h]j%)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjcubh)}(hZRead DPCD 0x400 (sink) or 0x500 (branch) into **desc**. Also debug log the identification.h](h.Read DPCD 0x400 (sink) or 0x500 (branch) into }(hjdhhhNhNubj%)}(h**desc**h]hdesc}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubh$. Also debug log the identification.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjcubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_dump_lttpr_desc (C function)c.drm_dp_dump_lttpr_deschNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint drm_dp_dump_lttpr_desc (struct drm_dp_aux *aux, enum drm_dp_phy dp_phy)h]j)}(hJint drm_dp_dump_lttpr_desc(struct drm_dp_aux *aux, enum drm_dp_phy dp_phy)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj!ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhj ehM ubj)}(hdrm_dp_dump_lttpr_desch]j)}(hdrm_dp_dump_lttpr_desch]hdrm_dp_dump_lttpr_desc}(hj3ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/eubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhj ehM ubj)}(h0(struct drm_dp_aux *aux, enum drm_dp_phy dp_phy)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjOehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKeubj)}(h h]h }(hj\ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKeubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjmehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjoemodnameN classnameNjj)}j]j%)}jj5esbc.drm_dp_dump_lttpr_descasbuh1hhjKeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKeubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKeubj)}(hauxh]haux}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGeubj)}(henum drm_dp_phy dp_phyh](j)}(hjl h]henum}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(h drm_dp_phyh]h drm_dp_phy}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jec.drm_dp_dump_lttpr_descasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hdp_phyh]hdp_phy}(hj fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGeubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhj ehM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj ehhhj ehM ubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jhj ehM hjehhubj)}(hhh]h)}(h2read and dump the DPCD descriptor for an LTTPR PHYh]h2read and dump the DPCD descriptor for an LTTPR PHY}(hj5fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj2fhhubah}(h]h ]h"]h$]h&]uh1jhjehhhj ehM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMfjjMfjjjuh1jhhhjhNhNubj)}(hX)**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``enum drm_dp_phy dp_phy`` LTTPR PHY instance **Description** Read the DPCD LTTPR PHY descriptor for **dp_phy** and print a debug message with its details to dmesg. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjWfh]h Parameters}(hjYfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUfubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjQfubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjvfh]hstruct drm_dp_aux *aux}(hjxfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtfubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjpfubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjpfubeh}(h]h ]h"]h$]h&]uh1jmhjfhM hjmfubjn)}(h.``enum drm_dp_phy dp_phy`` LTTPR PHY instance h](jt)}(h``enum drm_dp_phy dp_phy``h]jz)}(hjfh]henum drm_dp_phy dp_phy}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjfubj)}(hhh]h)}(hLTTPR PHY instanceh]hLTTPR PHY instance}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjfhM hjmfubeh}(h]h ]h"]h$]h&]uh1jhhjQfubh)}(h**Description**h]j%)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjQfubh)}(hfRead the DPCD LTTPR PHY descriptor for **dp_phy** and print a debug message with its details to dmesg.h](h'Read the DPCD LTTPR PHY descriptor for }(hjghhhNhNubj%)}(h **dp_phy**h]hdp_phy}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubh5 and print a debug message with its details to dmesg.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjQfubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj!ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjQfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_dsc_sink_bpp_incr (C function)c.drm_dp_dsc_sink_bpp_incrhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIu8 drm_dp_dsc_sink_bpp_incr (const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])h]j)}(hHu8 drm_dp_dsc_sink_bpp_incr(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])h](h)}(hhh]j)}(hu8h]hu8}(hjSghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUgmodnameN classnameNjj)}j]j%)}jdrm_dp_dsc_sink_bpp_incrsbc.drm_dp_dsc_sink_bpp_incrasbuh1hhjLghhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM) ubj)}(h h]h }(hjughhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLghhhjtghM) ubj)}(hdrm_dp_dsc_sink_bpp_incrh]j)}(hjqgh]hdrm_dp_dsc_sink_bpp_incr}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLghhhjtghM) ubj)}(h-(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])h]j)}(h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(hu8h]hu8}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]jogc.drm_dp_dsc_sink_bpp_incrasbuh1hhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hdsc_dpcdh]hdsc_dpcd}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(hjh]h[}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjgubh)}(hhh]j)}(hDP_DSC_RECEIVER_CAP_SIZEh]hDP_DSC_RECEIVER_CAP_SIZE}(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj hmodnameN classnameNjj)}j]jogc.drm_dp_dsc_sink_bpp_incrasbuh1hhjgubj9)}(hjh]h]}(hj(hhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubah}(h]h ]h"]h$]h&]jjuh1jhjLghhhjtghM) ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHghhhjtghM) ubah}(h]jCgah ](jjeh"]h$]h&]jj)jhuh1jhjtghM) hjEghhubj)}(hhh]h)}(hGet bits per pixel incrementh]hGet bits per pixel increment}(hjQhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM$ hjNhhhubah}(h]h ]h"]h$]h&]uh1jhjEghhhjtghM) ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjihjjihjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD **Description** Returns the bpp precision supported by the DP sink.h](h)}(h**Parameters**h]j%)}(hjshh]h Parameters}(hjuhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqhubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM( hjmhubji)}(hhh]jn)}(hK``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD h](jt)}(h/``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]``h]jz)}(hjhh]h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM% hjhubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM% hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhhM% hjhubah}(h]h ]h"]h$]h&]uh1jhhjmhubh)}(h**Description**h]j%)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM' hjmhubh)}(h3Returns the bpp precision supported by the DP sink.h]h3Returns the bpp precision supported by the DP sink.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM' hjmhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_dsc_sink_max_slice_count (C function)!c.drm_dp_dsc_sink_max_slice_counthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h]u8 drm_dp_dsc_sink_max_slice_count (const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], bool is_edp)h]j)}(h\u8 drm_dp_dsc_sink_max_slice_count(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], bool is_edp)h](h)}(hhh]j)}(hu8h]hu8}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j%)}jdrm_dp_dsc_sink_max_slice_countsb!c.drm_dp_dsc_sink_max_slice_countasbuh1hhjihhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMN ubj)}(h h]h }(hj7ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj6ihMN ubj)}(hdrm_dp_dsc_sink_max_slice_counth]j)}(hj3ih]hdrm_dp_dsc_sink_max_slice_count}(hjIihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhj6ihMN ubj)}(h:(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], bool is_edp)h](j)}(h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjdihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`iubj)}(h h]h }(hjqihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`iubh)}(hhh]j)}(hu8h]hu8}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j1i!c.drm_dp_dsc_sink_max_slice_countasbuh1hhj`iubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`iubj)}(hdsc_dpcdh]hdsc_dpcd}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`iubj9)}(hjh]h[}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`iubh)}(hhh]j)}(hDP_DSC_RECEIVER_CAP_SIZEh]hDP_DSC_RECEIVER_CAP_SIZE}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j1i!c.drm_dp_dsc_sink_max_slice_countasbuh1hhj`iubj9)}(hjh]h]}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`iubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\iubj)}(h bool is_edph](j)}(hjAh]hbool}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(his_edph]his_edp}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\iubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhj6ihMN ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj ihhhj6ihMN ubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhj6ihMN hjihhubj)}(hhh]h)}(h2Get the max slice count supported by the DSC sink.h]h2Get the max slice count supported by the DSC sink.}(hjGjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM? hjDjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhj6ihMN ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jjj_jjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD ``bool is_edp`` true if its eDP, false for DP **Description** Read the slice capabilities DPCD register from DSC sink to get the maximum slice count supported. This is used to populate the DSC parameters in the :c:type:`struct drm_dsc_config ` by the driver. Driver creates an infoframe using these parameters to populate :c:type:`struct drm_dsc_pps_infoframe `. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack() **Return** Maximum slice count supported by DSC sink or 0 its invalidh](h)}(h**Parameters**h]j%)}(hjijh]h Parameters}(hjkjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMC hjcjubji)}(hhh](jn)}(hK``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD h](jt)}(h/``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]``h]jz)}(hjjh]h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMA hjjubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMA hjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMA hjjubjn)}(h.``bool is_edp`` true if its eDP, false for DP h](jt)}(h``bool is_edp``h]jz)}(hjjh]h bool is_edp}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMB hjjubj)}(hhh]h)}(htrue if its eDP, false for DPh]htrue if its eDP, false for DP}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMB hjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMB hjjubeh}(h]h ]h"]h$]h&]uh1jhhjcjubh)}(h**Description**h]j%)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMD hjcjubh)}(hXRead the slice capabilities DPCD register from DSC sink to get the maximum slice count supported. This is used to populate the DSC parameters in the :c:type:`struct drm_dsc_config ` by the driver. Driver creates an infoframe using these parameters to populate :c:type:`struct drm_dsc_pps_infoframe `. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()h](hRead the slice capabilities DPCD register from DSC sink to get the maximum slice count supported. This is used to populate the DSC parameters in the }(hjkhhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hjkh]hstruct drm_dsc_config}(hjkhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMD hjkubhO by the driver. Driver creates an infoframe using these parameters to populate }(hjkhhhNhNubh)}(h>:c:type:`struct drm_dsc_pps_infoframe `h]jz)}(hj@kh]hstruct drm_dsc_pps_infoframe}(hjBkhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>kubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_pps_infoframeuh1hhj9khMD hjkubhg. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9khMD hjcjubh)}(h **Return**h]j%)}(hjikh]hReturn}(hjkkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgkubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMK hjcjubh)}(h:Maximum slice count supported by DSC sink or 0 its invalidh]h:Maximum slice count supported by DSC sink or 0 its invalid}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMK hjcjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_dsc_sink_line_buf_depth (C function) c.drm_dp_dsc_sink_line_buf_depthhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hOu8 drm_dp_dsc_sink_line_buf_depth (const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])h]j)}(hNu8 drm_dp_dsc_sink_line_buf_depth(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])h](h)}(hhh]j)}(hu8h]hu8}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j%)}jdrm_dp_dsc_sink_line_buf_depthsb c.drm_dp_dsc_sink_line_buf_depthasbuh1hhjkhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhM ubj)}(hdrm_dp_dsc_sink_line_buf_depthh]j)}(hjkh]hdrm_dp_dsc_sink_line_buf_depth}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhjkhM ubj)}(h-(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])h]j)}(h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hu8h]hu8}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj lmodnameN classnameNjj)}j]jk c.drm_dp_dsc_sink_line_buf_depthasbuh1hhjkubj)}(h h]h }(hj` by the driver. Driver creates an infoframe using these parameters to populate :c:type:`struct drm_dsc_pps_infoframe `. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack() **Return** Line buffer depth supported by DSC panel or 0 its invalidh](h)}(h**Parameters**h]j%)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM~ hjlubji)}(hhh]jn)}(hK``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD h](jt)}(h/``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]``h]jz)}(hjlh]h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM{ hjlubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM{ hjmubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjmhM{ hjlubah}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hj+mh]h Description}(hj-mhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)mubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM} hjlubh)}(hXRead the DSC DPCD register to parse the line buffer depth in bits which is number of bits of precision within the decoder line buffer supported by the DSC sink. This is used to populate the DSC parameters in the :c:type:`struct drm_dsc_config ` by the driver. Driver creates an infoframe using these parameters to populate :c:type:`struct drm_dsc_pps_infoframe `. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()h](hRead the DSC DPCD register to parse the line buffer depth in bits which is number of bits of precision within the decoder line buffer supported by the DSC sink. This is used to populate the DSC parameters in the }(hjAmhhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hjKmh]hstruct drm_dsc_config}(hjMmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjImubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM} hjAmubhO by the driver. Driver creates an infoframe using these parameters to populate }(hjAmhhhNhNubh)}(h>:c:type:`struct drm_dsc_pps_infoframe `h]jz)}(hjomh]hstruct drm_dsc_pps_infoframe}(hjqmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_pps_infoframeuh1hhjhmhM} hjAmubhg. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()}(hjAmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhmhM} hjlubh)}(h **Return**h]j%)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjlubh)}(h9Line buffer depth supported by DSC panel or 0 its invalidh]h9Line buffer depth supported by DSC panel or 0 its invalid}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_dp_dsc_sink_supported_input_bpcs (C function)&c.drm_dp_dsc_sink_supported_input_bpcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(heint drm_dp_dsc_sink_supported_input_bpcs (const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 dsc_bpc[3])h]j)}(hdint drm_dp_dsc_sink_supported_input_bpcs(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 dsc_bpc[3])h](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhM ubj)}(h$drm_dp_dsc_sink_supported_input_bpcsh]j)}(h$drm_dp_dsc_sink_supported_input_bpcsh]h$drm_dp_dsc_sink_supported_input_bpcs}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjmhM ubj)}(h<(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE], u8 dsc_bpc[3])h](j)}(h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hj'nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hu8h]hu8}(hj8nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:nmodnameN classnameNjj)}j]j%)}jjnsb&c.drm_dp_dsc_sink_supported_input_bpcsasbuh1hhjnubj)}(h h]h }(hjXnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hdsc_dpcdh]hdsc_dpcd}(hjfnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hjh]h[}(hjtnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubh)}(hhh]j)}(hDP_DSC_RECEIVER_CAP_SIZEh]hDP_DSC_RECEIVER_CAP_SIZE}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jTn&c.drm_dp_dsc_sink_supported_input_bpcsasbuh1hhjnubj9)}(hjh]h]}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(h u8 dsc_bpc[3]h](h)}(hhh]j)}(hu8h]hu8}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jTn&c.drm_dp_dsc_sink_supported_input_bpcsasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hdsc_bpch]hdsc_bpc}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hjh]h[}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubj)}(h3h]h3}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hjh]h]}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1jhjmhhhjmhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjmhhhjmhM ubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjmhM hjmhhubj)}(hhh]h)}(hFGet all the input bits per component values supported by the DSC sink.h]hFGet all the input bits per component values supported by the DSC sink.}(hj;ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj8ohhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSojjSojjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD ``u8 dsc_bpc[3]`` An array to be filled by this helper with supported input bpcs. **Description** Read the DSC DPCD from the sink device to parse the supported bits per component values. This is used to populate the DSC parameters in the :c:type:`struct drm_dsc_config ` by the driver. Driver creates an infoframe using these parameters to populate :c:type:`struct drm_dsc_pps_infoframe `. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack() **Return** Number of input BPC values parsed from the DPCDh](h)}(h**Parameters**h]j%)}(hj]oh]h Parameters}(hj_ohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj[oubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjWoubji)}(hhh](jn)}(hK``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD h](jt)}(h/``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]``h]jz)}(hj|oh]h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]}(hj~ohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzoubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjvoubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjoubah}(h]h ]h"]h$]h&]uh1jhjvoubeh}(h]h ]h"]h$]h&]uh1jmhjohM hjsoubjn)}(hR``u8 dsc_bpc[3]`` An array to be filled by this helper with supported input bpcs. h](jt)}(h``u8 dsc_bpc[3]``h]jz)}(hjoh]h u8 dsc_bpc[3]}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjoubj)}(hhh]h)}(h?An array to be filled by this helper with supported input bpcs.h]h?An array to be filled by this helper with supported input bpcs.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjohM hjsoubeh}(h]h ]h"]h$]h&]uh1jhhjWoubh)}(h**Description**h]j%)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjWoubh)}(hXRead the DSC DPCD from the sink device to parse the supported bits per component values. This is used to populate the DSC parameters in the :c:type:`struct drm_dsc_config ` by the driver. Driver creates an infoframe using these parameters to populate :c:type:`struct drm_dsc_pps_infoframe `. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()h](hRead the DSC DPCD from the sink device to parse the supported bits per component values. This is used to populate the DSC parameters in the }(hjphhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hjph]hstruct drm_dsc_config}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjpubhO by the driver. Driver creates an infoframe using these parameters to populate }(hjphhhNhNubh)}(h>:c:type:`struct drm_dsc_pps_infoframe `h]jz)}(hj5ph]hstruct drm_dsc_pps_infoframe}(hj7phhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3pubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_pps_infoframeuh1hhj.phM hjpubhg. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.phM hjWoubh)}(h **Return**h]j%)}(hj^ph]hReturn}(hj`phhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\pubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjWoubh)}(h/Number of input BPC values parsed from the DPCDh]h/Number of input BPC values parsed from the DPCD}(hjtphhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjWoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dp_read_lttpr_common_caps (C function)c.drm_dp_read_lttpr_common_capshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_read_lttpr_common_caps (struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(hint drm_dp_read_lttpr_common_caps(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphM ubj)}(hdrm_dp_read_lttpr_common_capsh]j)}(hdrm_dp_read_lttpr_common_capsh]hdrm_dp_read_lttpr_common_caps}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjphM ubj)}(h`(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j%)}jjpsbc.drm_dp_read_lttpr_common_capsasbuh1hhjpubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hj,qhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hauxh]haux}(hj9qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjRqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNqubj)}(h h]h }(hj_qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNqubh)}(hhh]j)}(hu8h]hu8}(hjpqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrqmodnameN classnameNjj)}j]jqc.drm_dp_read_lttpr_common_capsasbuh1hhjNqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNqubj)}(hdpcdh]hdpcd}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNqubj9)}(hjh]h[}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNqubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jqc.drm_dp_read_lttpr_common_capsasbuh1hhjNqubj9)}(hjh]h]}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(h!u8 caps[DP_LTTPR_COMMON_CAP_SIZE]h](h)}(hhh]j)}(hu8h]hu8}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jqc.drm_dp_read_lttpr_common_capsasbuh1hhjqubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hcapsh]hcaps}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hjh]h[}(hj-rhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hj=rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?rmodnameN classnameNjj)}j]jqc.drm_dp_read_lttpr_common_capsasbuh1hhjqubj9)}(hjh]h]}(hj[rhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhjphhhjphM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjphM ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjphM hjphhubj)}(hhh]h)}(h"read the LTTPR common capabilitiesh]h"read the LTTPR common capabilities}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1jhhhjhNhNubj)}(hXT**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` buffer to return the capability info in **Description** Read capabilities common to all LTTPRs. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjrh]hstruct drm_dp_aux *aux}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjrhM hjrubjn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hjrh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjshM hjrubjn)}(hN``u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` buffer to return the capability info in h](jt)}(h%``u8 caps[DP_LTTPR_COMMON_CAP_SIZE]``h]jz)}(hj7sh]h!u8 caps[DP_LTTPR_COMMON_CAP_SIZE]}(hj9shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5subah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj1subj)}(hhh]h)}(h'buffer to return the capability info inh]h'buffer to return the capability info in}(hjPshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLshM hjMsubah}(h]h ]h"]h$]h&]uh1jhj1subeh}(h]h ]h"]h$]h&]uh1jmhjLshM hjrubeh}(h]h ]h"]h$]h&]uh1jhhjrubh)}(h**Description**h]j%)}(hjrsh]h Description}(hjtshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpsubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrubh)}(h'Read capabilities common to all LTTPRs.h]h'Read capabilities common to all LTTPRs.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_read_lttpr_phy_caps (C function)c.drm_dp_read_lttpr_phy_capshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_read_lttpr_phy_caps (struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], enum drm_dp_phy dp_phy, u8 caps[DP_LTTPR_PHY_CAP_SIZE])h]j)}(hint drm_dp_read_lttpr_phy_caps(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], enum drm_dp_phy dp_phy, u8 caps[DP_LTTPR_PHY_CAP_SIZE])h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshM ubj)}(hdrm_dp_read_lttpr_phy_capsh]j)}(hdrm_dp_read_lttpr_phy_capsh]hdrm_dp_read_lttpr_phy_caps}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjshM ubj)}(hu(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE], enum drm_dp_phy dp_phy, u8 caps[DP_LTTPR_PHY_CAP_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj!thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#tmodnameN classnameNjj)}j]j%)}jjssbc.drm_dp_read_lttpr_phy_capsasbuh1hhjsubj)}(h h]h }(hjAthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjOthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hauxh]haux}(hj\thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjuthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqtubh)}(hhh]j)}(hu8h]hu8}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j=tc.drm_dp_read_lttpr_phy_capsasbuh1hhjqtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqtubj)}(hdpcdh]hdpcd}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqtubj9)}(hjh]h[}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqtubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j=tc.drm_dp_read_lttpr_phy_capsasbuh1hhjqtubj9)}(hjh]h]}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(henum drm_dp_phy dp_phyh](j)}(hjl h]henum}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hj uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h drm_dp_phyh]h drm_dp_phy}(hj1uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.uubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3umodnameN classnameNjj)}j]j=tc.drm_dp_read_lttpr_phy_capsasbuh1hhjuubj)}(h h]h }(hjOuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hdp_phyh]hdp_phy}(hj]uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hu8 caps[DP_LTTPR_PHY_CAP_SIZE]h](h)}(hhh]j)}(hu8h]hu8}(hjyuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{umodnameN classnameNjj)}j]j=tc.drm_dp_read_lttpr_phy_capsasbuh1hhjruubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjruubj)}(hcapsh]hcaps}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjruubj9)}(hjh]h[}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjruubh)}(hhh]j)}(hDP_LTTPR_PHY_CAP_SIZEh]hDP_LTTPR_PHY_CAP_SIZE}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j=tc.drm_dp_read_lttpr_phy_capsasbuh1hhjruubj9)}(hjh]h]}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjruubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhjshhhjshM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjshM ubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjshM hjshhubj)}(hhh]h)}(h+read the capabilities for a given LTTPR PHYh]h+read the capabilities for a given LTTPR PHY}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"vjj"vjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``enum drm_dp_phy dp_phy`` LTTPR PHY to read the capabilities for ``u8 caps[DP_LTTPR_PHY_CAP_SIZE]`` buffer to return the capability info in **Description** Read the capabilities for the given LTTPR PHY. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj,vh]h Parameters}(hj.vhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*vubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj&vubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjKvh]hstruct drm_dp_aux *aux}(hjMvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIvubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjEvubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjdvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`vhM hjavubah}(h]h ]h"]h$]h&]uh1jhjEvubeh}(h]h ]h"]h$]h&]uh1jmhj`vhM hjBvubjn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hjvh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj~vubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM hjvubah}(h]h ]h"]h$]h&]uh1jhj~vubeh}(h]h ]h"]h$]h&]uh1jmhjvhM hjBvubjn)}(hB``enum drm_dp_phy dp_phy`` LTTPR PHY to read the capabilities for h](jt)}(h``enum drm_dp_phy dp_phy``h]jz)}(hjvh]henum drm_dp_phy dp_phy}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjvubj)}(hhh]h)}(h<TPR PHY to read the capabilities forh]h<TPR PHY to read the capabilities for}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjvhM hjBvubjn)}(hK``u8 caps[DP_LTTPR_PHY_CAP_SIZE]`` buffer to return the capability info in h](jt)}(h"``u8 caps[DP_LTTPR_PHY_CAP_SIZE]``h]jz)}(hjvh]hu8 caps[DP_LTTPR_PHY_CAP_SIZE]}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjvubj)}(hhh]h)}(h'buffer to return the capability info inh]h'buffer to return the capability info in}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj whM hj wubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhj whM hjBvubeh}(h]h ]h"]h$]h&]uh1jhhj&vubh)}(h**Description**h]j%)}(hj1wh]h Description}(hj3whhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/wubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj&vubh)}(h.Read the capabilities for the given LTTPR PHY.h]h.Read the capabilities for the given LTTPR PHY.}(hjGwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj&vubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjVwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj&vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_lttpr_count (C function)c.drm_dp_lttpr_counthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h@int drm_dp_lttpr_count (const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(h?int drm_dp_lttpr_count(const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjwhM ubj)}(hdrm_dp_lttpr_counth]j)}(hdrm_dp_lttpr_counth]hdrm_dp_lttpr_count}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjwhM ubj)}(h)(const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]h](j)}(hjch]hconst}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(hu8h]hu8}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j%)}jjwsbc.drm_dp_lttpr_countasbuh1hhjwubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hcapsh]hcaps}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hjh]h[}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hj,xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.xmodnameN classnameNjj)}j]jwc.drm_dp_lttpr_countasbuh1hhjwubj9)}(hjh]h]}(hjJxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubah}(h]h ]h"]h$]h&]jjuh1jhjwhhhjwhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}whhhjwhM ubah}(h]jxwah ](jjeh"]h$]h&]jj)jhuh1jhjwhM hjzwhhubj)}(hhh]h)}(h!get the number of detected LTTPRsh]h!get the number of detected LTTPRs}(hjsxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjpxhhubah}(h]h ]h"]h$]h&]uh1jhjzwhhhjwhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjhNhNubj)}(hXv**Parameters** ``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` LTTPR common capabilities **Description** Get the number of detected LTTPRs from the LTTPR common capabilities info. **Return** -ERANGE if more than supported number (8) of LTTPRs are detected -EINVAL if the DP_PHY_REPEATER_CNT register contains an invalid value otherwise the number of detected LTTPRsh](h)}(h**Parameters**h]j%)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjxubji)}(hhh]jn)}(hF``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` LTTPR common capabilities h](jt)}(h+``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]``h]jz)}(hjxh]h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjxubj)}(hhh]h)}(hLTTPR common capabilitiesh]hLTTPR common capabilities}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjxhM hjxubah}(h]h ]h"]h$]h&]uh1jhhjxubh)}(h**Description**h]j%)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjxubh)}(hJGet the number of detected LTTPRs from the LTTPR common capabilities info.h]hJGet the number of detected LTTPRs from the LTTPR common capabilities info.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjxubh)}(h **Return**h]j%)}(hjyh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjxubjb=)}(h-ERANGE if more than supported number (8) of LTTPRs are detected -EINVAL if the DP_PHY_REPEATER_CNT register contains an invalid value otherwise the number of detected LTTPRsh]h)}(h-ERANGE if more than supported number (8) of LTTPRs are detected -EINVAL if the DP_PHY_REPEATER_CNT register contains an invalid value otherwise the number of detected LTTPRsh]h-ERANGE if more than supported number (8) of LTTPRs are detected -EINVAL if the DP_PHY_REPEATER_CNT register contains an invalid value otherwise the number of detected LTTPRs}(hj0yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj,yubah}(h]h ]h"]h$]h&]uh1ja=hj>yhM hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_lttpr_max_link_rate (C function)c.drm_dp_lttpr_max_link_ratehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hHint drm_dp_lttpr_max_link_rate (const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(hGint drm_dp_lttpr_max_link_rate(const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h](j)}(hinth]hint}(hjeyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjayhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM6 ubj)}(h h]h }(hjtyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjayhhhjsyhM6 ubj)}(hdrm_dp_lttpr_max_link_rateh]j)}(hdrm_dp_lttpr_max_link_rateh]hdrm_dp_lttpr_max_link_rate}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjayhhhjsyhM6 ubj)}(h)(const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]h](j)}(hjch]hconst}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(hu8h]hu8}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j%)}jjysbc.drm_dp_lttpr_max_link_rateasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hcapsh]hcaps}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(hjh]h[}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hj zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]jyc.drm_dp_lttpr_max_link_rateasbuh1hhjyubj9)}(hjh]h]}(hj*zhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhjayhhhjsyhM6 ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj]yhhhjsyhM6 ubah}(h]jXyah ](jjeh"]h$]h&]jj)jhuh1jhjsyhM6 hjZyhhubj)}(hhh]h)}(h1get the maximum link rate supported by all LTTPRsh]h1get the maximum link rate supported by all LTTPRs}(hjSzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM1 hjPzhhubah}(h]h ]h"]h$]h&]uh1jhjZyhhhjsyhM6 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkzjjkzjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` LTTPR common capabilities **Description** Returns the maximum link rate supported by all detected LTTPRs.h](h)}(h**Parameters**h]j%)}(hjuzh]h Parameters}(hjwzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjszubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM5 hjozubji)}(hhh]jn)}(hF``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` LTTPR common capabilities h](jt)}(h+``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]``h]jz)}(hjzh]h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM2 hjzubj)}(hhh]h)}(hLTTPR common capabilitiesh]hLTTPR common capabilities}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhM2 hjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjzhM2 hjzubah}(h]h ]h"]h$]h&]uh1jhhjozubh)}(h**Description**h]j%)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM4 hjozubh)}(h?Returns the maximum link rate supported by all detected LTTPRs.h]h?Returns the maximum link rate supported by all detected LTTPRs.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM4 hjozubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_dp_lttpr_set_transparent_mode (C function)#c.drm_dp_lttpr_set_transparent_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint drm_dp_lttpr_set_transparent_mode (struct drm_dp_aux *aux, bool enable)h]j)}(hJint drm_dp_lttpr_set_transparent_mode(struct drm_dp_aux *aux, bool enable)h](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chME ubj)}(h h]h }(hj#{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj"{hME ubj)}(h!drm_dp_lttpr_set_transparent_modeh]j)}(h!drm_dp_lttpr_set_transparent_modeh]h!drm_dp_lttpr_set_transparent_mode}(hj5{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj"{hME ubj)}(h%(struct drm_dp_aux *aux, bool enable)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjQ{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM{ubj)}(h h]h }(hj^{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM{ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjo{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq{modnameN classnameNjj)}j]j%)}jj7{sb#c.drm_dp_lttpr_set_transparent_modeasbuh1hhjM{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM{ubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjM{ubj)}(hauxh]haux}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjI{ubj)}(h bool enableh](j)}(hjAh]hbool}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(henableh]henable}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjI{ubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhj"{hME ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj {hhhj"{hME ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj"{hME hj {hhubj)}(hhh]h)}(h!set the LTTPR in transparent modeh]h!set the LTTPR in transparent mode}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM? hj|hhubah}(h]h ]h"]h$]h&]uh1jhj {hhhj"{hME ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj |jj |jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``bool enable`` Enable or disable transparent mode **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj*|h]h Parameters}(hj,|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(|ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMC hj$|ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjI|h]hstruct drm_dp_aux *aux}(hjK|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjG|ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM@ hjC|ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjb|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^|hM@ hj_|ubah}(h]h ]h"]h$]h&]uh1jhjC|ubeh}(h]h ]h"]h$]h&]uh1jmhj^|hM@ hj@|ubjn)}(h3``bool enable`` Enable or disable transparent mode h](jt)}(h``bool enable``h]jz)}(hj|h]h bool enable}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMA hj||ubj)}(hhh]h)}(h"Enable or disable transparent modeh]h"Enable or disable transparent mode}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMA hj|ubah}(h]h ]h"]h$]h&]uh1jhj||ubeh}(h]h ]h"]h$]h&]uh1jmhj|hMA hj@|ubeh}(h]h ]h"]h$]h&]uh1jhhj$|ubh)}(h **Return**h]j%)}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMC hj$|ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMC hj$|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_lttpr_init (C function)c.drm_dp_lttpr_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(h?int drm_dp_lttpr_init (struct drm_dp_aux *aux, int lttpr_count)h]j)}(h>int drm_dp_lttpr_init(struct drm_dp_aux *aux, int lttpr_count)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM[ ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj}hM[ ubj)}(hdrm_dp_lttpr_inith]j)}(hdrm_dp_lttpr_inith]hdrm_dp_lttpr_init}(hj#}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhj}hM[ ubj)}(h)(struct drm_dp_aux *aux, int lttpr_count)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj?}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;}ubj)}(h h]h }(hjL}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;}ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj]}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_}modnameN classnameNjj)}j]j%)}jj%}sbc.drm_dp_lttpr_initasbuh1hhj;}ubj)}(h h]h }(hj}}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;}ubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;}ubj)}(hauxh]haux}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7}ubj)}(hint lttpr_counth](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h lttpr_counth]h lttpr_count}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7}ubeh}(h]h ]h"]h$]h&]jjuh1jhj|hhhj}hM[ ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|hhhj}hM[ ubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jhj}hM[ hj|hhubj)}(hhh]h)}(h5init LTTPR transparency mode according to DP standardh]h5init LTTPR transparency mode according to DP standard}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMS hj}hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhj}hM[ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjhNhNubj)}(hX#**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``int lttpr_count`` Number of LTTPRs. Between 0 and 8, according to DP standard. Negative error code for any non-valid number. See drm_dp_lttpr_count(). **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMW hj~ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj8~h]hstruct drm_dp_aux *aux}(hj:~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6~ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMT hj2~ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjQ~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM~hMT hjN~ubah}(h]h ]h"]h$]h&]uh1jhj2~ubeh}(h]h ]h"]h$]h&]uh1jmhjM~hMT hj/~ubjn)}(h``int lttpr_count`` Number of LTTPRs. Between 0 and 8, according to DP standard. Negative error code for any non-valid number. See drm_dp_lttpr_count(). h](jt)}(h``int lttpr_count``h]jz)}(hjq~h]hint lttpr_count}(hjs~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo~ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMW hjk~ubj)}(hhh]h)}(hNumber of LTTPRs. Between 0 and 8, according to DP standard. Negative error code for any non-valid number. See drm_dp_lttpr_count().h]hNumber of LTTPRs. Between 0 and 8, according to DP standard. Negative error code for any non-valid number. See drm_dp_lttpr_count().}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMU hj~ubah}(h]h ]h"]h$]h&]uh1jhjk~ubeh}(h]h ]h"]h$]h&]uh1jmhj~hMW hj/~ubeh}(h]h ]h"]h$]h&]uh1jhhj~ubh)}(h **Return**h]j%)}(hj~h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMY hj~ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMY hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_lttpr_max_lane_count (C function)c.drm_dp_lttpr_max_lane_counthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIint drm_dp_lttpr_max_lane_count (const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(hHint drm_dp_lttpr_max_lane_count(const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhM ubj)}(hdrm_dp_lttpr_max_lane_counth]j)}(hdrm_dp_lttpr_max_lane_counth]hdrm_dp_lttpr_max_lane_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhM ubj)}(h)(const u8 caps[DP_LTTPR_COMMON_CAP_SIZE])h]j)}(h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]h](j)}(hjch]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hu8h]hu8}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_lttpr_max_lane_countasbuh1hhj+ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hcapsh]hcaps}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jic.drm_dp_lttpr_max_lane_countasbuh1hhj+ubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubah}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhjhM ubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jhjhM hj~hhubj)}(hhh]h)}(h2get the maximum lane count supported by all LTTPRsh]h2get the maximum lane count supported by all LTTPRs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM| hjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` LTTPR common capabilities **Description** Returns the maximum lane count supported by all detected LTTPRs.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh]jn)}(hF``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]`` LTTPR common capabilities h](jt)}(h+``const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]``h]jz)}(hj!h]h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM} hjubj)}(hhh]h)}(hLTTPR common capabilitiesh]hLTTPR common capabilities}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM} hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hM} hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h@Returns the maximum lane count supported by all detected LTTPRs.h]h@Returns the maximum lane count supported by all detected LTTPRs.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j9drm_dp_lttpr_voltage_swing_level_3_supported (C function).c.drm_dp_lttpr_voltage_swing_level_3_supportedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hXbool drm_dp_lttpr_voltage_swing_level_3_supported (const u8 caps[DP_LTTPR_PHY_CAP_SIZE])h]j)}(hWbool drm_dp_lttpr_voltage_swing_level_3_supported(const u8 caps[DP_LTTPR_PHY_CAP_SIZE])h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h,drm_dp_lttpr_voltage_swing_level_3_supportedh]j)}(h,drm_dp_lttpr_voltage_swing_level_3_supportedh]h,drm_dp_lttpr_voltage_swing_level_3_supported}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h&(const u8 caps[DP_LTTPR_PHY_CAP_SIZE])h]j)}(h$const u8 caps[DP_LTTPR_PHY_CAP_SIZE]h](j)}(hjch]hconst}(hj݀hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjـubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjـubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjÀsb.c.drm_dp_lttpr_voltage_swing_level_3_supportedasbuh1hhjـubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjـubj)}(hcapsh]hcaps}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjـubj9)}(hjh]h[}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjـubh)}(hhh]j)}(hDP_LTTPR_PHY_CAP_SIZEh]hDP_LTTPR_PHY_CAP_SIZE}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j.c.drm_dp_lttpr_voltage_swing_level_3_supportedasbuh1hhjـubj9)}(hjh]h]}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjـubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjՀubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hcheck for LTTPR vswing3 supporth]hcheck for LTTPR vswing3 support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 caps[DP_LTTPR_PHY_CAP_SIZE]`` LTTPR PHY capabilities **Description** Returns true if the **caps** for an LTTPR TX PHY indicate support for voltage swing level 3.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh]jn)}(h@``const u8 caps[DP_LTTPR_PHY_CAP_SIZE]`` LTTPR PHY capabilities h](jt)}(h(``const u8 caps[DP_LTTPR_PHY_CAP_SIZE]``h]jz)}(hjρh]h$const u8 caps[DP_LTTPR_PHY_CAP_SIZE]}(hjсhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj́ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjɁubj)}(hhh]h)}(hLTTPR PHY capabilitiesh]hLTTPR PHY capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjɁubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjƁubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h\Returns true if the **caps** for an LTTPR TX PHY indicate support for voltage swing level 3.h](hReturns true if the }(hj hhhNhNubj%)}(h**caps**h]hcaps}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh@ for an LTTPR TX PHY indicate support for voltage swing level 3.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j8drm_dp_lttpr_pre_emphasis_level_3_supported (C function)-c.drm_dp_lttpr_pre_emphasis_level_3_supportedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWbool drm_dp_lttpr_pre_emphasis_level_3_supported (const u8 caps[DP_LTTPR_PHY_CAP_SIZE])h]j)}(hVbool drm_dp_lttpr_pre_emphasis_level_3_supported(const u8 caps[DP_LTTPR_PHY_CAP_SIZE])h](j)}(hjAh]hbool}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjnhM ubj)}(h+drm_dp_lttpr_pre_emphasis_level_3_supportedh]j)}(h+drm_dp_lttpr_pre_emphasis_level_3_supportedh]h+drm_dp_lttpr_pre_emphasis_level_3_supported}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhjnhM ubj)}(h&(const u8 caps[DP_LTTPR_PHY_CAP_SIZE])h]j)}(h$const u8 caps[DP_LTTPR_PHY_CAP_SIZE]h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb-c.drm_dp_lttpr_pre_emphasis_level_3_supportedasbuh1hhjubj)}(h h]h }(hjۂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_LTTPR_PHY_CAP_SIZEh]hDP_LTTPR_PHY_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jׂ-c.drm_dp_lttpr_pre_emphasis_level_3_supportedasbuh1hhjubj9)}(hjh]h]}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj]hhhjnhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjnhM ubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjnhM hjVhhubj)}(hhh]h)}(h check for LTTPR preemph3 supporth]h check for LTTPR preemph3 support}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjKhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjnhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 caps[DP_LTTPR_PHY_CAP_SIZE]`` LTTPR PHY capabilities **Description** Returns true if the **caps** for an LTTPR TX PHY indicate support for pre-emphasis level 3.h](h)}(h**Parameters**h]j%)}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjjubji)}(hhh]jn)}(h@``const u8 caps[DP_LTTPR_PHY_CAP_SIZE]`` LTTPR PHY capabilities h](jt)}(h(``const u8 caps[DP_LTTPR_PHY_CAP_SIZE]``h]jz)}(hjh]h$const u8 caps[DP_LTTPR_PHY_CAP_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hLTTPR PHY capabilitiesh]hLTTPR PHY capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubah}(h]h ]h"]h$]h&]uh1jhhjjubh)}(h**Description**h]j%)}(hjʃh]h Description}(hj̃hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjȃubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjjubh)}(h[Returns true if the **caps** for an LTTPR TX PHY indicate support for pre-emphasis level 3.h](hReturns true if the }(hjhhhNhNubj%)}(h**caps**h]hcaps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh? for an LTTPR TX PHY indicate support for pre-emphasis level 3.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_get_phy_test_pattern (C function)c.drm_dp_get_phy_test_patternhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h]int drm_dp_get_phy_test_pattern (struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data)h]j)}(h\int drm_dp_get_phy_test_pattern(struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hM ubj)}(hdrm_dp_get_phy_test_patternh]j)}(hdrm_dp_get_phy_test_patternh]hdrm_dp_get_phy_test_pattern}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hM ubj)}(h=(struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjDsbc.drm_dp_get_phy_test_patternasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(h#struct drm_dp_phy_test_params *datah](j)}(hjh]hstruct}(hjЄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̄ubj)}(h h]h }(hj݄hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̄ubh)}(hhh]j)}(hdrm_dp_phy_test_paramsh]hdrm_dp_phy_test_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_get_phy_test_patternasbuh1hhj̄ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̄ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj̄ubj)}(hdatah]hdata}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̄ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj/hM hjhhubj)}(hhh]h)}(h(get the requested pattern from the sink.h]h(get the requested pattern from the sink.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjNhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``struct drm_dp_phy_test_params *data`` DP phy compliance test parameters. **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjmubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hK``struct drm_dp_phy_test_params *data`` DP phy compliance test parameters. h](jt)}(h'``struct drm_dp_phy_test_params *data``h]jz)}(hj˅h]h#struct drm_dp_phy_test_params *data}(hjͅhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjɅubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjŅubj)}(hhh]h)}(h"DP phy compliance test parameters.h]h"DP phy compliance test parameters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjŅubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjmubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjmubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_set_phy_test_pattern (C function)c.drm_dp_set_phy_test_patternhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hhint drm_dp_set_phy_test_pattern (struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data, u8 dp_rev)h]j)}(hgint drm_dp_set_phy_test_pattern(struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data, u8 dp_rev)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjYhM ubj)}(hdrm_dp_set_phy_test_patternh]j)}(hdrm_dp_set_phy_test_patternh]hdrm_dp_set_phy_test_pattern}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjYhM ubj)}(hH(struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data, u8 dp_rev)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjnsbc.drm_dp_set_phy_test_patternasbuh1hhjubj)}(h h]h }(hjƆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjԆhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_dp_phy_test_params *datah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_phy_test_paramsh]hdrm_dp_phy_test_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j†c.drm_dp_set_phy_test_patternasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdatah]hdata}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 dp_revh](h)}(hhh]j)}(hu8h]hu8}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j†c.drm_dp_set_phy_test_patternasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hdp_revh]hdp_rev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjGhhhjYhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjChhhjYhM ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhjYhM hj@hhubj)}(hhh]h)}(hset the pattern to the sink.h]hset the pattern to the sink.}(hjÇhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjۇjjۇjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``struct drm_dp_phy_test_params *data`` DP phy compliance test parameters. ``u8 dp_rev`` DP revision to use for compliance testing **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj߇ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hK``struct drm_dp_phy_test_params *data`` DP phy compliance test parameters. h](jt)}(h'``struct drm_dp_phy_test_params *data``h]jz)}(hj=h]h#struct drm_dp_phy_test_params *data}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj7ubj)}(hhh]h)}(h"DP phy compliance test parameters.h]h"DP phy compliance test parameters.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhM hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhM hjubjn)}(h8``u8 dp_rev`` DP revision to use for compliance testing h](jt)}(h ``u8 dp_rev``h]jz)}(hjvh]h u8 dp_rev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjpubj)}(hhh]h)}(h)DP revision to use for compliance testingh]h)DP revision to use for compliance testing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhj߇ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj߇ubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjLjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj߇ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_as_sdp_supported (C function)c.drm_dp_as_sdp_supportedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hZbool drm_dp_as_sdp_supported (struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])h]j)}(hYbool drm_dp_as_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_as_sdp_supportedh]j)}(hdrm_dp_as_sdp_supportedh]hdrm_dp_as_sdp_supported}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h=(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_as_sdp_supportedasbuh1hhj.ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hj‰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjĉmodnameN classnameNjj)}j]jlc.drm_dp_as_sdp_supportedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jlc.drm_dp_as_sdp_supportedasbuh1hhjubj9)}(hjh]h]}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h'check if adaptive sync sdp is supportedh]h'check if adaptive sync sdp is supported}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjPhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data **Description** Returns true if adaptive sync sdp is supported, else returns falseh](h)}(h**Parameters**h]j%)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjoubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj͊h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjϊhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjˊubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjNJubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjNJubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjoubh)}(h**Description**h]j%)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjoubh)}(hBReturns true if adaptive sync sdp is supported, else returns falseh]hBReturns true if adaptive sync sdp is supported, else returns false}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_vsc_sdp_supported (C function)c.drm_dp_vsc_sdp_supportedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h[bool drm_dp_vsc_sdp_supported (struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])h]j)}(hZbool drm_dp_vsc_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])h](j)}(hjAh]hbool}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhM ubj)}(hdrm_dp_vsc_sdp_supportedh]j)}(hdrm_dp_vsc_sdp_supportedh]hdrm_dp_vsc_sdp_supported}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjZhM ubj)}(h=(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjosbc.drm_dp_vsc_sdp_supportedasbuh1hhjubj)}(h h]h }(hjNjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjՋhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jËc.drm_dp_vsc_sdp_supportedasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jËc.drm_dp_vsc_sdp_supportedasbuh1hhjubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjZhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjEhhhjZhM ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jhjZhM hjBhhubj)}(hhh]h)}(hcheck if vsc sdp is supportedh]hcheck if vsc sdp is supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjZhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjŒjjŒjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data **Description** Returns true if vsc sdp is supported, else returns falseh](h)}(h**Parameters**h]j%)}(hǰh]h Parameters}(hjΌhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjʌubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjƌubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hj$h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hM hjubeh}(h]h ]h"]h$]h&]uh1jhhjƌubh)}(h**Description**h]j%)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjƌubh)}(h8Returns true if vsc sdp is supported, else returns falseh]h8Returns true if vsc sdp is supported, else returns false}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjƌubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dp_vsc_sdp_pack (C function)c.drm_dp_vsc_sdp_packhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hRssize_t drm_dp_vsc_sdp_pack (const struct drm_dp_vsc_sdp *vsc, struct dp_sdp *sdp)h]j)}(hQssize_t drm_dp_vsc_sdp_pack(const struct drm_dp_vsc_sdp *vsc, struct dp_sdp *sdp)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dp_vsc_sdp_packsbc.drm_dp_vsc_sdp_packasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjɍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjȍhM ubj)}(hdrm_dp_vsc_sdp_packh]j)}(hjōh]hdrm_dp_vsc_sdp_pack}(hjۍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׍ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjȍhM ubj)}(h6(const struct drm_dp_vsc_sdp *vsc, struct dp_sdp *sdp)h](j)}(h const struct drm_dp_vsc_sdp *vsch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_vsc_sdph]hdrm_dp_vsc_sdp}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jÍc.drm_dp_vsc_sdp_packasbuh1hhjubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvsch]hvsc}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct dp_sdp *sdph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hdp_sdph]hdp_sdp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jÍc.drm_dp_vsc_sdp_packasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj9h]h*}(hjˎhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubj)}(hsdph]hsdp}(hj؎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjȍhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjȍhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjȍhM hjhhubj)}(hhh]h)}(h(pack a given vsc sdp into generic dp_sdph]h(pack a given vsc sdp into generic dp_sdp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjȍhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXE**Parameters** ``const struct drm_dp_vsc_sdp *vsc`` vsc sdp initialized according to its purpose as defined in table 2-118 - table 2-120 in DP 1.4a specification ``struct dp_sdp *sdp`` valid handle to the generic dp_sdp which will be packed **Description** Returns length of sdp on success and error code on failureh](h)}(h**Parameters**h]j%)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh](jn)}(h``const struct drm_dp_vsc_sdp *vsc`` vsc sdp initialized according to its purpose as defined in table 2-118 - table 2-120 in DP 1.4a specification h](jt)}(h$``const struct drm_dp_vsc_sdp *vsc``h]jz)}(hjCh]h const struct drm_dp_vsc_sdp *vsc}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj=ubj)}(hhh]h)}(hmvsc sdp initialized according to its purpose as defined in table 2-118 - table 2-120 in DP 1.4a specificationh]hmvsc sdp initialized according to its purpose as defined in table 2-118 - table 2-120 in DP 1.4a specification}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhM hj:ubjn)}(hO``struct dp_sdp *sdp`` valid handle to the generic dp_sdp which will be packed h](jt)}(h``struct dp_sdp *sdp``h]jz)}(hj}h]hstruct dp_sdp *sdp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjwubj)}(hhh]h)}(h7valid handle to the generic dp_sdp which will be packedh]h7valid handle to the generic dp_sdp which will be packed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj:ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h:Returns length of sdp on success and error code on failureh]h:Returns length of sdp on success and error code on failure}(hjΏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_get_pcon_max_frl_bw (C function)c.drm_dp_get_pcon_max_frl_bwhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hZint drm_dp_get_pcon_max_frl_bw (const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h]j)}(hYint drm_dp_get_pcon_max_frl_bw(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM8 ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM8 ubj)}(hdrm_dp_get_pcon_max_frl_bwh]j)}(hdrm_dp_get_pcon_max_frl_bwh]hdrm_dp_get_pcon_max_frl_bw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM8 ubj)}(h;(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4])h](j)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(hu8h]hu8}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j%)}jj sbc.drm_dp_get_pcon_max_frl_bwasbuh1hhj6ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jtc.drm_dp_get_pcon_max_frl_bwasbuh1hhj6ubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hjڐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֐ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֐ubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jtc.drm_dp_get_pcon_max_frl_bwasbuh1hhj֐ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֐ubj)}(hport_caph]hport_cap}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֐ubj9)}(hjh]h[}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj֐ubj)}(hjh]h4}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֐ubj9)}(hjh]h]}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj֐ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hM8 ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hM8 ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hM8 hjhhubj)}(hhh]h)}(hmaximum frl supported by PCONh]hmaximum frl supported by PCON}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM1 hjrhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM8 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities **Description** Returns maximum frl bandwidth supported by PCON in GBPS, returns 0 if not supported.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM5 hjubji)}(hhh](jn)}(hG``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` DisplayPort configuration data h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hjh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM2 hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjϑhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjˑhM2 hj̑ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjˑhM2 hjubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjh]hconst u8 port_cap[4]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM3 hjubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM3 hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM5 hjubh)}(hTReturns maximum frl bandwidth supported by PCON in GBPS, returns 0 if not supported.h]hTReturns maximum frl bandwidth supported by PCON in GBPS, returns 0 if not supported.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM5 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_pcon_frl_prepare (C function)c.drm_dp_pcon_frl_preparehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hOint drm_dp_pcon_frl_prepare (struct drm_dp_aux *aux, bool enable_frl_ready_hpd)h]j)}(hNint drm_dp_pcon_frl_prepare(struct drm_dp_aux *aux, bool enable_frl_ready_hpd)h](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM^ ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj}hM^ ubj)}(hdrm_dp_pcon_frl_prepareh]j)}(hdrm_dp_pcon_frl_prepareh]hdrm_dp_pcon_frl_prepare}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhj}hM^ ubj)}(h3(struct drm_dp_aux *aux, bool enable_frl_ready_hpd)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjʒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǒubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj̒modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_frl_prepareasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hbool enable_frl_ready_hpdh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henable_frl_ready_hpdh]henable_frl_ready_hpd}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjkhhhj}hM^ ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhj}hM^ ubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj}hM^ hjdhhubj)}(hhh]h)}(hPrepare PCON for FRL.h]hPrepare PCON for FRL.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMX hj`hhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hM^ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``bool enable_frl_ready_hpd`` Configure DP_PCON_ENABLE_HPD_READY. **Description** Returns 0 if success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM\ hjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMY hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMY hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMY hjubjn)}(hB``bool enable_frl_ready_hpd`` Configure DP_PCON_ENABLE_HPD_READY. h](jt)}(h``bool enable_frl_ready_hpd``h]jz)}(hjݓh]hbool enable_frl_ready_hpd}(hjߓhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjۓubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMZ hjדubj)}(hhh]h)}(h#Configure DP_PCON_ENABLE_HPD_READY.h]h#Configure DP_PCON_ENABLE_HPD_READY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZ hjubah}(h]h ]h"]h$]h&]uh1jhjדubeh}(h]h ]h"]h$]h&]uh1jmhjhMZ hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM\ hjubh)}(h7Returns 0 if success, else returns negative error code.h]h7Returns 0 if success, else returns negative error code.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM\ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_pcon_is_frl_ready (C function)c.drm_dp_pcon_is_frl_readyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6bool drm_dp_pcon_is_frl_ready (struct drm_dp_aux *aux)h]j)}(h5bool drm_dp_pcon_is_frl_ready(struct drm_dp_aux *aux)h](j)}(hjAh]hbool}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMs ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjjhMs ubj)}(hdrm_dp_pcon_is_frl_readyh]j)}(hdrm_dp_pcon_is_frl_readyh]hdrm_dp_pcon_is_frl_ready}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjjhMs ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_is_frl_readyasbuh1hhjubj)}(h h]h }(hjהhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjYhhhjjhMs ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjjhMs ubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhjjhMs hjRhhubj)}(hhh]h)}(hIs PCON ready for FRLh]hIs PCON ready for FRL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMn hjhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjjhMs ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns true if success, else returns false.h](h)}(h**Parameters**h]j%)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMr hj8ubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj]h]hstruct drm_dp_aux *aux}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMo hjWubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMo hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhMo hjTubah}(h]h ]h"]h$]h&]uh1jhhj8ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMq hj8ubh)}(h,Returns true if success, else returns false.h]h,Returns true if success, else returns false.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMq hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_pcon_frl_configure_1 (C function)c.drm_dp_pcon_frl_configure_1hNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWint drm_dp_pcon_frl_configure_1 (struct drm_dp_aux *aux, int max_frl_gbps, u8 frl_mode)h]j)}(hVint drm_dp_pcon_frl_configure_1(struct drm_dp_aux *aux, int max_frl_gbps, u8 frl_mode)h](j)}(hinth]hint}(hjݕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٕhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٕhhhjhM ubj)}(hdrm_dp_pcon_frl_configure_1h]j)}(hdrm_dp_pcon_frl_configure_1h]hdrm_dp_pcon_frl_configure_1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjٕhhhjhM ubj)}(h7(struct drm_dp_aux *aux, int max_frl_gbps, u8 frl_mode)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_frl_configure_1asbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint max_frl_gbpsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h max_frl_gbpsh]h max_frl_gbps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 frl_modeh](h)}(hhh]j)}(hu8h]hu8}(hjĖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjƖmodnameN classnameNjj)}j]jTc.drm_dp_pcon_frl_configure_1asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfrl_modeh]hfrl_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjٕhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjՕhhhjhM ubah}(h]jЕah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjҕhhubj)}(hhh]h)}(h!Set HDMI LINK Configuration-Step1h]h!Set HDMI LINK Configuration-Step1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjҕhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``int max_frl_gbps`` maximum frl bw to be configured between PCON and HDMI sink ``u8 frl_mode`` FRL Training mode, it can be either Concurrent or Sequential. In Concurrent Mode, the FRL link bring up can be done along with DP Link training. In Sequential mode, the FRL link bring up is done prior to the DP Link training. **Description** Returns 0 if success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj6ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj[h]hstruct drm_dp_aux *aux}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjUubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphM hjRubjn)}(hP``int max_frl_gbps`` maximum frl bw to be configured between PCON and HDMI sink h](jt)}(h``int max_frl_gbps``h]jz)}(hjh]hint max_frl_gbps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(h:maximum frl bw to be configured between PCON and HDMI sinkh]h:maximum frl bw to be configured between PCON and HDMI sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjRubjn)}(h``u8 frl_mode`` FRL Training mode, it can be either Concurrent or Sequential. In Concurrent Mode, the FRL link bring up can be done along with DP Link training. In Sequential mode, the FRL link bring up is done prior to the DP Link training. h](jt)}(h``u8 frl_mode``h]jz)}(hj͗h]h u8 frl_mode}(hjϗhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj˗ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjǗubj)}(hhh]h)}(hFRL Training mode, it can be either Concurrent or Sequential. In Concurrent Mode, the FRL link bring up can be done along with DP Link training. In Sequential mode, the FRL link bring up is done prior to the DP Link training.h]hFRL Training mode, it can be either Concurrent or Sequential. In Concurrent Mode, the FRL link bring up can be done along with DP Link training. In Sequential mode, the FRL link bring up is done prior to the DP Link training.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubah}(h]h ]h"]h$]h&]uh1jhjǗubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjRubeh}(h]h ]h"]h$]h&]uh1jhhj6ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj6ubh)}(h7Returns 0 if success, else returns negative error code.h]h7Returns 0 if success, else returns negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_pcon_frl_configure_2 (C function)c.drm_dp_pcon_frl_configure_2hNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWint drm_dp_pcon_frl_configure_2 (struct drm_dp_aux *aux, int max_frl_mask, u8 frl_type)h]j)}(hVint drm_dp_pcon_frl_configure_2(struct drm_dp_aux *aux, int max_frl_mask, u8 frl_type)h](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj\hM ubj)}(hdrm_dp_pcon_frl_configure_2h]j)}(hdrm_dp_pcon_frl_configure_2h]hdrm_dp_pcon_frl_configure_2}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj\hM ubj)}(h7(struct drm_dp_aux *aux, int max_frl_mask, u8 frl_type)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjqsbc.drm_dp_pcon_frl_configure_2asbuh1hhjubj)}(h h]h }(hjɘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjטhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint max_frl_maskh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h max_frl_maskh]h max_frl_mask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 frl_typeh](h)}(hhh]j)}(hu8h]hu8}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]jŘc.drm_dp_pcon_frl_configure_2asbuh1hhj.ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hfrl_typeh]hfrl_type}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj\hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhj\hM ubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhj\hM hjChhubj)}(hhh]h)}(h"Set HDMI Link configuration Step-2h]h"Set HDMI Link configuration Step-2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjChhhj\hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``int max_frl_mask`` Max FRL BW to be tried by the PCON with HDMI Sink ``u8 frl_type`` FRL training type, can be Extended, or Normal. In Normal FRL training, the PCON tries each frl bw from the max_frl_mask starting from min, and stops when link training is successful. In Extended FRL training, all frl bw selected in the mask are trained by the PCON. **Description** Returns 0 if success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj̙h]hstruct drm_dp_aux *aux}(hjΙhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjʙubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjƙubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjƙubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjÙubjn)}(hG``int max_frl_mask`` Max FRL BW to be tried by the PCON with HDMI Sink h](jt)}(h``int max_frl_mask``h]jz)}(hjh]hint max_frl_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(h1Max FRL BW to be tried by the PCON with HDMI Sinkh]h1Max FRL BW to be tried by the PCON with HDMI Sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjÙubjn)}(hX``u8 frl_type`` FRL training type, can be Extended, or Normal. In Normal FRL training, the PCON tries each frl bw from the max_frl_mask starting from min, and stops when link training is successful. In Extended FRL training, all frl bw selected in the mask are trained by the PCON. h](jt)}(h``u8 frl_type``h]jz)}(hj>h]h u8 frl_type}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj8ubj)}(hhh]h)}(hX FRL training type, can be Extended, or Normal. In Normal FRL training, the PCON tries each frl bw from the max_frl_mask starting from min, and stops when link training is successful. In Extended FRL training, all frl bw selected in the mask are trained by the PCON.h]hX FRL training type, can be Extended, or Normal. In Normal FRL training, the PCON tries each frl bw from the max_frl_mask starting from min, and stops when link training is successful. In Extended FRL training, all frl bw selected in the mask are trained by the PCON.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShM hjÙubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h7Returns 0 if success, else returns negative error code.h]h7Returns 0 if success, else returns negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_pcon_reset_frl_config (C function)c.drm_dp_pcon_reset_frl_confighNtauh1jxhjhhhNhNubj)}(hhh](j)}(h9int drm_dp_pcon_reset_frl_config (struct drm_dp_aux *aux)h]j)}(h8int drm_dp_pcon_reset_frl_config(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjΚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj͚hM ubj)}(hdrm_dp_pcon_reset_frl_configh]j)}(hdrm_dp_pcon_reset_frl_configh]hdrm_dp_pcon_reset_frl_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܚubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj͚hM ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_reset_frl_configasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj͚hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj͚hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj͚hM hjhhubj)}(hhh]h)}(hRe-Set HDMI Link configuration.h]hRe-Set HDMI Link configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj|hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj͚hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns 0 if success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hj›hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjٛhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj՛hM hj֛ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj՛hM hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h7Returns 0 if success, else returns negative error code.h]h7Returns 0 if success, else returns negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_pcon_frl_enable (C function)c.drm_dp_pcon_frl_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h3int drm_dp_pcon_frl_enable (struct drm_dp_aux *aux)h]j)}(h2int drm_dp_pcon_frl_enable(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjNhM ubj)}(hdrm_dp_pcon_frl_enableh]j)}(hdrm_dp_pcon_frl_enableh]hdrm_dp_pcon_frl_enable}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhjNhM ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjcsbc.drm_dp_pcon_frl_enableasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(hj9h]h*}(hjɜhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubj)}(hauxh]haux}(hj֜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubah}(h]h ]h"]h$]h&]jjuh1jhj<hhhjNhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhjNhM ubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jhjNhM hj5hhubj)}(hhh]h)}(hEnable HDMI link through FRLh]hEnable HDMI link through FRL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjNhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns 0 if success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjAh]hstruct drm_dp_aux *aux}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj;ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhM hj8ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h7Returns 0 if success, else returns negative error code.h]h7Returns 0 if success, else returns negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_pcon_hdmi_link_active (C function)c.drm_dp_pcon_hdmi_link_activehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:bool drm_dp_pcon_hdmi_link_active (struct drm_dp_aux *aux)h]j)}(h9bool drm_dp_pcon_hdmi_link_active(struct drm_dp_aux *aux)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjϝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjΝhMubj)}(hdrm_dp_pcon_hdmi_link_activeh]j)}(hdrm_dp_pcon_hdmi_link_activeh]hdrm_dp_pcon_hdmi_link_active}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݝubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjΝhMubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_hdmi_link_activeasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjΝhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjΝhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjΝhMhjhhubj)}(hhh]h)}(h-check if the PCON HDMI LINK status is active.h]h-check if the PCON HDMI LINK status is active.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjΝhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns true if link is active else returns false.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjÞhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjڞhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֞hMhjמubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj֞hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h2Returns true if link is active else returns false.h]h2Returns true if link is active else returns false.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_pcon_hdmi_link_mode (C function)c.drm_dp_pcon_hdmi_link_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMint drm_dp_pcon_hdmi_link_mode (struct drm_dp_aux *aux, u8 *frl_trained_mask)h]j)}(hLint drm_dp_pcon_hdmi_link_mode(struct drm_dp_aux *aux, u8 *frl_trained_mask)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM*ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhM*ubj)}(hdrm_dp_pcon_hdmi_link_modeh]j)}(hdrm_dp_pcon_hdmi_link_modeh]hdrm_dp_pcon_hdmi_link_mode}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhM*ubj)}(h.(struct drm_dp_aux *aux, u8 *frl_trained_mask)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjdsbc.drm_dp_pcon_hdmi_link_modeasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjʟhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hauxh]haux}(hjןhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu8 *frl_trained_maskh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_pcon_hdmi_link_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfrl_trained_maskh]hfrl_trained_mask}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhM*ubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhM*hj6hhubj)}(hhh]h)}(hget the PCON HDMI LINK MODEh]hget the PCON HDMI LINK MODE}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM hjShhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``u8 *frl_trained_mask`` pointer to store bitmask of the trained bw configuration. Valid only if the MODE returned is FRL. For Normal Link training mode only 1 of the bits will be set, but in case of Extended mode, more than one bits can be set. **Description** Returns the link mode : TMDS or FRL on success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM$hjrubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM!hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM!hjubjn)}(h``u8 *frl_trained_mask`` pointer to store bitmask of the trained bw configuration. Valid only if the MODE returned is FRL. For Normal Link training mode only 1 of the bits will be set, but in case of Extended mode, more than one bits can be set. h](jt)}(h``u8 *frl_trained_mask``h]jz)}(hjРh]hu8 *frl_trained_mask}(hjҠhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjΠubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM%hjʠubj)}(hhh]h)}(hpointer to store bitmask of the trained bw configuration. Valid only if the MODE returned is FRL. For Normal Link training mode only 1 of the bits will be set, but in case of Extended mode, more than one bits can be set.h]hpointer to store bitmask of the trained bw configuration. Valid only if the MODE returned is FRL. For Normal Link training mode only 1 of the bits will be set, but in case of Extended mode, more than one bits can be set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM"hjubah}(h]h ]h"]h$]h&]uh1jhjʠubeh}(h]h ]h"]h$]h&]uh1jmhjhM%hjubeh}(h]h ]h"]h$]h&]uh1jhhjrubh)}(h**Description**h]j%)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM'hjrubh)}(hQReturns the link mode : TMDS or FRL on success, else returns negative error code.h]hQReturns the link mode : TMDS or FRL on success, else returns negative error code.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM'hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_dp_pcon_hdmi_frl_link_error_count (C function)'c.drm_dp_pcon_hdmi_frl_link_error_counthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdvoid drm_dp_pcon_hdmi_frl_link_error_count (struct drm_dp_aux *aux, struct drm_connector *connector)h]j)}(hcvoid drm_dp_pcon_hdmi_frl_link_error_count(struct drm_dp_aux *aux, struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMDubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj_hMDubj)}(h%drm_dp_pcon_hdmi_frl_link_error_counth]j)}(h%drm_dp_pcon_hdmi_frl_link_error_counth]h%drm_dp_pcon_hdmi_frl_link_error_count}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhj_hMDubj)}(h9(struct drm_dp_aux *aux, struct drm_connector *connector)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjtsb'c.drm_dp_pcon_hdmi_frl_link_error_countasbuh1hhjubj)}(h h]h }(hj̡hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjڡhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jȡ'c.drm_dp_pcon_hdmi_frl_link_error_countasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjMhhhj_hMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhj_hMDubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhj_hMDhjFhhubj)}(hhh]h)}(hMprint the error count per lane during link failure between PCON and HDMI sinkh]hMprint the error count per lane during link failure between PCON and HDMI sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM>hj~hhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj_hMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``struct drm_connector *connector`` DRM connector code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMBhjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj¢h]hstruct drm_dp_aux *aux}(hjĢhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM@hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjۢhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjעhM@hjآubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjעhM@hjubjn)}(h7``struct drm_connector *connector`` DRM connector code.h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMAhjubj)}(hhh]h)}(hDRM connector code.h]hDRM connector code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMAhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_pcon_pps_default (C function)c.drm_dp_pcon_pps_defaulthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4int drm_dp_pcon_pps_default (struct drm_dp_aux *aux)h]j)}(h3int drm_dp_pcon_pps_default(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjbhMubj)}(hdrm_dp_pcon_pps_defaulth]j)}(hdrm_dp_pcon_pps_defaulth]hdrm_dp_pcon_pps_default}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjbhMubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjwsbc.drm_dp_pcon_pps_defaultasbuh1hhjubj)}(h h]h }(hjϣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjݣhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjbhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjLhhhjbhMubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjbhMhjIhhubj)}(hhh]h)}(hOLet PCON fill the default pps parameters for DSC1.2 between PCON & HDMI2.1 sinkh]hOLet PCON fill the default pps parameters for DSC1.2 between PCON & HDMI2.1 sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns 0 on success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj0ubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjUh]hstruct drm_dp_aux *aux}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjOubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhhj0ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj0ubh)}(h7Returns 0 on success, else returns negative error code.h]h7Returns 0 on success, else returns negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_pcon_pps_override_buf (C function)c.drm_dp_pcon_pps_override_bufhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJint drm_dp_pcon_pps_override_buf (struct drm_dp_aux *aux, u8 pps_buf[128])h]j)}(hIint drm_dp_pcon_pps_override_buf(struct drm_dp_aux *aux, u8 pps_buf[128])h](j)}(hinth]hint}(hjդhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѤhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѤhhhjhMubj)}(hdrm_dp_pcon_pps_override_bufh]j)}(hdrm_dp_pcon_pps_override_bufh]hdrm_dp_pcon_pps_override_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjѤhhhjhMubj)}(h)(struct drm_dp_aux *aux, u8 pps_buf[128])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_pps_override_bufasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu8 pps_buf[128]h](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jLc.drm_dp_pcon_pps_override_bufasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpps_bufh]hpps_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h128h]h128}(hjΥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h]}(hjܥhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjѤhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjͤhhhjhMubah}(h]jȤah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjʤhhubj)}(hhh]h)}(h3Configure PPS encoder override buffer for HDMI sinkh]h3Configure PPS encoder override buffer for HDMI sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjʤhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``u8 pps_buf[128]`` 128 bytes to be written into PPS buffer for HDMI sink by PCON. **Description** Returns 0 on success, else returns negative error code.h](h)}(h**Parameters**h]j%)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj!ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjFh]hstruct drm_dp_aux *aux}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj@ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj=ubjn)}(hS``u8 pps_buf[128]`` 128 bytes to be written into PPS buffer for HDMI sink by PCON. h](jt)}(h``u8 pps_buf[128]``h]jz)}(hjh]hu8 pps_buf[128]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjyubj)}(hhh]h)}(h>128 bytes to be written into PPS buffer for HDMI sink by PCON.h]h>128 bytes to be written into PPS buffer for HDMI sink by PCON.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhhj!ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj!ubh)}(h7Returns 0 on success, else returns negative error code.h]h7Returns 0 on success, else returns negative error code.}(hjЦhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_edp_backlight_set_level (C function)c.drm_edp_backlight_set_levelhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hlint drm_edp_backlight_set_level (struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, u16 level)h]j)}(hkint drm_edp_backlight_set_level(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, u16 level)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMXubj)}(hdrm_edp_backlight_set_levelh]j)}(hdrm_edp_backlight_set_levelh]hdrm_edp_backlight_set_level}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMXubj)}(hL(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, u16 level)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j%)}jj"sbc.drm_edp_backlight_set_levelasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(h'const struct drm_edp_backlight_info *blh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjɧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj֧hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edp_backlight_infoh]hdrm_edp_backlight_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jvc.drm_edp_backlight_set_levelasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hblh]hbl}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(h u16 levelh](h)}(hhh]j)}(hu16h]hu16}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]jvc.drm_edp_backlight_set_levelasbuh1hhj5ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hlevelh]hlevel}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMXubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMXhjhhubj)}(hhh]h)}(h/Set the backlight level of an eDP panel via AUXh]h/Set the backlight level of an eDP panel via AUX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` The DP AUX channel to use ``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() ``u16 level`` The brightness level to set **Description** Sets the brightness level of an eDP panel's backlight. Note that the panel's backlight must already have been enabled by the driver by calling drm_edp_backlight_enable(). **Return** ``0`` on success, negative error code on failureh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMRhjubji)}(hhh](jn)}(h5``struct drm_dp_aux *aux`` The DP AUX channel to use h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjӨh]hstruct drm_dp_aux *aux}(hjըhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjѨubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMOhjͨubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjͨubeh}(h]h ]h"]h$]h&]uh1jmhjhMOhjʨubjn)}(hd``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() h](jt)}(h+``const struct drm_edp_backlight_info *bl``h]jz)}(hj h]h'const struct drm_edp_backlight_info *bl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMPhjubj)}(hhh]h)}(h7Backlight capability info from drm_edp_backlight_init()h]h7Backlight capability info from drm_edp_backlight_init()}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMPhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMPhjʨubjn)}(h*``u16 level`` The brightness level to set h](jt)}(h ``u16 level``h]jz)}(hjEh]h u16 level}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMQhj?ubj)}(hhh]h)}(hThe brightness level to seth]hThe brightness level to set}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMQhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMQhjʨubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMShjubh)}(hSets the brightness level of an eDP panel's backlight. Note that the panel's backlight must already have been enabled by the driver by calling drm_edp_backlight_enable().h]hSets the brightness level of an eDP panel’s backlight. Note that the panel’s backlight must already have been enabled by the driver by calling drm_edp_backlight_enable().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMShjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMVhjubh)}(h0``0`` on success, negative error code on failureh](jz)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh+ on success, negative error code on failure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edp_backlight_enable (C function)c.drm_edp_backlight_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hoint drm_edp_backlight_enable (struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, const u16 level)h]j)}(hnint drm_edp_backlight_enable(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, const u16 level)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_edp_backlight_enableh]j)}(hdrm_edp_backlight_enableh]hdrm_edp_backlight_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hR(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, const u16 level)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j%)}jjsbc.drm_edp_backlight_enableasbuh1hhj3ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(h'const struct drm_edp_backlight_info *blh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjĪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjѪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edp_backlight_infoh]hdrm_edp_backlight_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߪubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jqc.drm_edp_backlight_enableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hblh]hbl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hconst u16 levelh](j)}(hjch]hconst}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hu16h]hu16}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jqc.drm_edp_backlight_enableasbuh1hhj0ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hlevelh]hlevel}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h*Enable an eDP panel's backlight using DPCDh]h,Enable an eDP panel’s backlight using DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` The DP AUX channel to use ``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() ``const u16 level`` The initial backlight level to set via AUX, if there is one **Description** This function handles enabling DPCD backlight controls on a panel over DPCD, while additionally restoring any important backlight state such as the given backlight level, the brightness byte count, backlight frequency, etc. Note that certain panels do not support being enabled or disabled via DPCD, but instead require that the driver handle enabling/disabling the panel through implementation-specific means using the EDP_BL_PWR GPIO. For such panels, :c:type:`drm_edp_backlight_info.aux_enable ` will be set to ``false``, this function becomes a no-op, and the driver is expected to handle powering the panel on using the EDP_BL_PWR GPIO. **Return** ``0`` on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjʫh]h Parameters}(hj̫hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjȫubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjīubji)}(hhh](jn)}(h5``struct drm_dp_aux *aux`` The DP AUX channel to use h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hd``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() h](jt)}(h+``const struct drm_edp_backlight_info *bl``h]jz)}(hj"h]h'const struct drm_edp_backlight_info *bl}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h7Backlight capability info from drm_edp_backlight_init()h]h7Backlight capability info from drm_edp_backlight_init()}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhjubjn)}(hP``const u16 level`` The initial backlight level to set via AUX, if there is one h](jt)}(h``const u16 level``h]jz)}(hj[h]hconst u16 level}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjUubj)}(hhh]h)}(h;The initial backlight level to set via AUX, if there is oneh]h;The initial backlight level to set via AUX, if there is one}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjubeh}(h]h ]h"]h$]h&]uh1jhhjīubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjīubh)}(hThis function handles enabling DPCD backlight controls on a panel over DPCD, while additionally restoring any important backlight state such as the given backlight level, the brightness byte count, backlight frequency, etc.h]hThis function handles enabling DPCD backlight controls on a panel over DPCD, while additionally restoring any important backlight state such as the given backlight level, the brightness byte count, backlight frequency, etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjīubh)}(hXNote that certain panels do not support being enabled or disabled via DPCD, but instead require that the driver handle enabling/disabling the panel through implementation-specific means using the EDP_BL_PWR GPIO. For such panels, :c:type:`drm_edp_backlight_info.aux_enable ` will be set to ``false``, this function becomes a no-op, and the driver is expected to handle powering the panel on using the EDP_BL_PWR GPIO.h](hNote that certain panels do not support being enabled or disabled via DPCD, but instead require that the driver handle enabling/disabling the panel through implementation-specific means using the EDP_BL_PWR GPIO. For such panels, }(hjhhhNhNubh)}(hD:c:type:`drm_edp_backlight_info.aux_enable `h]jz)}(hjŬh]h!drm_edp_backlight_info.aux_enable}(hjǬhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjìubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_edp_backlight_infouh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh will be set to }(hjhhhNhNubjz)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhv, this function becomes a no-op, and the driver is expected to handle powering the panel on using the EDP_BL_PWR GPIO.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjīubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjīubh)}(h1``0`` on success, negative error code on failure.h](jz)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh, on success, negative error code on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjīubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_edp_backlight_disable (C function)c.drm_edp_backlight_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h_int drm_edp_backlight_disable (struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl)h]j)}(h^int drm_edp_backlight_disable(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl)h](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjbhMubj)}(hdrm_edp_backlight_disableh]j)}(hdrm_edp_backlight_disableh]hdrm_edp_backlight_disable}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjbhMubj)}(hA(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjwsbc.drm_edp_backlight_disableasbuh1hhjubj)}(h h]h }(hjϭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjݭhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h'const struct drm_edp_backlight_info *blh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edp_backlight_infoh]hdrm_edp_backlight_info}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j˭c.drm_edp_backlight_disableasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hblh]hbl}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjbhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjLhhhjbhMubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjbhMhjIhhubj)}(hhh]h)}(h1Disable an eDP backlight using DPCD, if supportedh]h1Disable an eDP backlight using DPCD, if supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` The DP AUX channel to use ``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() **Description** This function handles disabling DPCD backlight controls on a panel over AUX. Note that certain panels do not support being enabled or disabled via DPCD, but instead require that the driver handle enabling/disabling the panel through implementation-specific means using the EDP_BL_PWR GPIO. For such panels, :c:type:`drm_edp_backlight_info.aux_enable ` will be set to ``false``, this function becomes a no-op, and the driver is expected to handle powering the panel off using the EDP_BL_PWR GPIO. **Return** ``0`` on success or no-op, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjîhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(h5``struct drm_dp_aux *aux`` The DP AUX channel to use h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjޮubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjڮubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڮubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj׮ubjn)}(hd``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() h](jt)}(h+``const struct drm_edp_backlight_info *bl``h]jz)}(hjh]h'const struct drm_edp_backlight_info *bl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h7Backlight capability info from drm_edp_backlight_init()h]h7Backlight capability info from drm_edp_backlight_init()}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj.hMhj׮ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hLThis function handles disabling DPCD backlight controls on a panel over AUX.h]hLThis function handles disabling DPCD backlight controls on a panel over AUX.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hXNote that certain panels do not support being enabled or disabled via DPCD, but instead require that the driver handle enabling/disabling the panel through implementation-specific means using the EDP_BL_PWR GPIO. For such panels, :c:type:`drm_edp_backlight_info.aux_enable ` will be set to ``false``, this function becomes a no-op, and the driver is expected to handle powering the panel off using the EDP_BL_PWR GPIO.h](hNote that certain panels do not support being enabled or disabled via DPCD, but instead require that the driver handle enabling/disabling the panel through implementation-specific means using the EDP_BL_PWR GPIO. For such panels, }(hjyhhhNhNubh)}(hD:c:type:`drm_edp_backlight_info.aux_enable `h]jz)}(hjh]h!drm_edp_backlight_info.aux_enable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_edp_backlight_infouh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjyubh will be set to }(hjyhhhNhNubjz)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubhw, this function becomes a no-op, and the driver is expected to handle powering the panel off using the EDP_BL_PWR GPIO.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h:``0`` on success or no-op, negative error code on failure.h](jz)}(h``0``h]h0}(hjٯhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjկubh5 on success or no-op, negative error code on failure.}(hjկhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_edp_backlight_init (C function)c.drm_edp_backlight_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_edp_backlight_init (struct drm_dp_aux *aux, struct drm_edp_backlight_info *bl, u16 driver_pwm_freq_hz, const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE], u16 *current_level, u8 *current_mode)h]j)}(hint drm_edp_backlight_init(struct drm_dp_aux *aux, struct drm_edp_backlight_info *bl, u16 driver_pwm_freq_hz, const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE], u16 *current_level, u8 *current_mode)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hdrm_edp_backlight_inith]j)}(hdrm_edp_backlight_inith]hdrm_edp_backlight_init}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h(struct drm_dp_aux *aux, struct drm_edp_backlight_info *bl, u16 driver_pwm_freq_hz, const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE], u16 *current_level, u8 *current_mode)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j%)}jj5sbc.drm_edp_backlight_initasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(h!struct drm_edp_backlight_info *blh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjΰhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edp_backlight_infoh]hdrm_edp_backlight_info}(hj߰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܰubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hblh]hbl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hu16 driver_pwm_freq_hzh](h)}(hhh]j)}(hu16h]hu16}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhj-ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hdriver_pwm_freq_hzh]hdriver_pwm_freq_hz}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(h+const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]h](j)}(hjch]hconst}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hedp_dpcdh]hedp_dpcd}(hjñhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hjh]h[}(hjѱhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubh)}(hhh]j)}(hEDP_DISPLAY_CTL_CAP_SIZEh]hEDP_DISPLAY_CTL_CAP_SIZE}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޱubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjuubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hu16 *current_levelh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h current_levelh]h current_level}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hu8 *current_modeh](h)}(hhh]j)}(hu8h]hu8}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(h current_modeh]h current_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(hMProbe a display panel's TCON using the standard VESA eDP backlight interface.h]hOProbe a display panel’s TCON using the standard VESA eDP backlight interface.}(hjҲhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMzhjϲhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` The DP aux device to use for probing ``struct drm_edp_backlight_info *bl`` The :c:type:`drm_edp_backlight_info` struct to fill out with information on the backlight ``u16 driver_pwm_freq_hz`` Optional PWM frequency from the driver in hz ``const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]`` A cached copy of the eDP DPCD ``u16 *current_level`` Where to store the probed brightness level, if any ``u8 *current_mode`` Where to store the currently set backlight control mode **Description** Initializes a :c:type:`drm_edp_backlight_info` struct by probing **aux** for it's backlight capabilities, along with also probing the current and maximum supported brightness levels. If **driver_pwm_freq_hz** is non-zero, this will be used as the backlight frequency. Otherwise, the default frequency from the panel is used. **Return** ``0`` on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM~hjubji)}(hhh](jn)}(h@``struct drm_dp_aux *aux`` The DP aux device to use for probing h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM|hj ubj)}(hhh]h)}(h$The DP aux device to use for probingh]h$The DP aux device to use for probing}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM|hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj(hM|hj ubjn)}(h``struct drm_edp_backlight_info *bl`` The :c:type:`drm_edp_backlight_info` struct to fill out with information on the backlight h](jt)}(h%``struct drm_edp_backlight_info *bl``h]jz)}(hjLh]h!struct drm_edp_backlight_info *bl}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM}hjFubj)}(hhh]h)}(hYThe :c:type:`drm_edp_backlight_info` struct to fill out with information on the backlighth](hThe }(hjehhhNhNubh)}(h :c:type:`drm_edp_backlight_info`h]jz)}(hjoh]hdrm_edp_backlight_info}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_edp_backlight_infouh1hhjahM}hjeubh5 struct to fill out with information on the backlight}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjahM}hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahM}hj ubjn)}(hH``u16 driver_pwm_freq_hz`` Optional PWM frequency from the driver in hz h](jt)}(h``u16 driver_pwm_freq_hz``h]jz)}(hjh]hu16 driver_pwm_freq_hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM~hjubj)}(hhh]h)}(h,Optional PWM frequency from the driver in hzh]h,Optional PWM frequency from the driver in hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM~hj ubjn)}(hN``const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]`` A cached copy of the eDP DPCD h](jt)}(h/``const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]``h]jz)}(hjh]h+const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj߳ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhj۳ubj)}(hhh]h)}(hA cached copy of the eDP DPCDh]hA cached copy of the eDP DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj۳ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj ubjn)}(hJ``u16 *current_level`` Where to store the probed brightness level, if any h](jt)}(h``u16 *current_level``h]jz)}(hjh]hu16 *current_level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h2Where to store the probed brightness level, if anyh]h2Where to store the probed brightness level, if any}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhj ubjn)}(hM``u8 *current_mode`` Where to store the currently set backlight control mode h](jt)}(h``u8 *current_mode``h]jz)}(hjSh]hu8 *current_mode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjMubj)}(hhh]h)}(h7Where to store the currently set backlight control modeh]h7Where to store the currently set backlight control mode}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hInitializes a :c:type:`drm_edp_backlight_info` struct by probing **aux** for it's backlight capabilities, along with also probing the current and maximum supported brightness levels.h](hInitializes a }(hjhhhNhNubh)}(h :c:type:`drm_edp_backlight_info`h]jz)}(hjh]hdrm_edp_backlight_info}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_edp_backlight_infouh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh struct by probing }(hjhhhNhNubj%)}(h**aux**h]haux}(hjдhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhp for it’s backlight capabilities, along with also probing the current and maximum supported brightness levels.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj˴hMhjubh)}(hIf **driver_pwm_freq_hz** is non-zero, this will be used as the backlight frequency. Otherwise, the default frequency from the panel is used.h](hIf }(hjhhhNhNubj%)}(h**driver_pwm_freq_hz**h]hdriver_pwm_freq_hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubht is non-zero, this will be used as the backlight frequency. Otherwise, the default frequency from the panel is used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h1``0`` on success, negative error code on failure.h](jz)}(h``0``h]h0}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubh, on success, negative error code on failure.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_panel_dp_aux_backlight (C function)c.drm_panel_dp_aux_backlighthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hPint drm_panel_dp_aux_backlight (struct drm_panel *panel, struct drm_dp_aux *aux)h]j)}(hOint drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux)h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubj)}(hdrm_panel_dp_aux_backlighth]j)}(hdrm_panel_dp_aux_backlighth]hdrm_panel_dp_aux_backlight}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMubj)}(h1(struct drm_panel *panel, struct drm_dp_aux *aux)h](j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_panel_dp_aux_backlightasbuh1hhjubj)}(h h]h }(hjٵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]jյc.drm_panel_dp_aux_backlightasbuh1hhj ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hauxh]haux}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjlhMhjShhubj)}(hhh]h)}(hcreate and use DP AUX backlighth]hcreate and use DP AUX backlight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_panel *panel`` DRM panel ``struct drm_dp_aux *aux`` The DP AUX channel to use **Description** Use this function to create and handle backlight if your panel supports backlight control over DP AUX channel using DPCD registers as per VESA's standard backlight control interface. When the panel is enabled backlight will be enabled after a successful call to :c:type:`drm_panel_funcs.enable\(\) ` When the panel is disabled backlight will be disabled before the call to :c:type:`drm_panel_funcs.disable\(\) `. A typical implementation for a panel driver supporting backlight control over DP AUX will call this function at probe time. Backlight will then be handled transparently without requiring any intervention from the driver. drm_panel_dp_aux_backlight() must be called after the call to drm_panel_init(). **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hj϶h]hstruct drm_panel *panel}(hjѶhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjͶubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjɶubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɶubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjƶubjn)}(h5``struct drm_dp_aux *aux`` The DP AUX channel to use h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjƶubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hUse this function to create and handle backlight if your panel supports backlight control over DP AUX channel using DPCD registers as per VESA's standard backlight control interface.h]hUse this function to create and handle backlight if your panel supports backlight control over DP AUX channel using DPCD registers as per VESA’s standard backlight control interface.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hWhen the panel is enabled backlight will be enabled after a successful call to :c:type:`drm_panel_funcs.enable\(\) `h](hOWhen the panel is enabled backlight will be enabled after a successful call to }(hjhhhhNhNubh)}(h6:c:type:`drm_panel_funcs.enable\(\) `h]jz)}(hjrh]hdrm_panel_funcs.enable()}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_panel_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hWhen the panel is disabled backlight will be disabled before the call to :c:type:`drm_panel_funcs.disable\(\) `.h](hIWhen the panel is disabled backlight will be disabled before the call to }(hjhhhNhNubh)}(h7:c:type:`drm_panel_funcs.disable\(\) `h]jz)}(hjh]hdrm_panel_funcs.disable()}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_panel_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hA typical implementation for a panel driver supporting backlight control over DP AUX will call this function at probe time. Backlight will then be handled transparently without requiring any intervention from the driver.h]hA typical implementation for a panel driver supporting backlight control over DP AUX will call this function at probe time. Backlight will then be handled transparently without requiring any intervention from the driver.}(hjȷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hOdrm_panel_dp_aux_backlight() must be called after the call to drm_panel_init().h]hOdrm_panel_dp_aux_backlight() must be called after the call to drm_panel_init().}(hj׷hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_bw_overhead (C function)c.drm_dp_bw_overheadhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hkint drm_dp_bw_overhead (int lane_count, int hactive, int dsc_slice_count, int bpp_x16, unsigned long flags)h]j)}(hjint drm_dp_bw_overhead(int lane_count, int hactive, int dsc_slice_count, int bpp_x16, unsigned long flags)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMQubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj;hMQubj)}(hdrm_dp_bw_overheadh]j)}(hdrm_dp_bw_overheadh]hdrm_dp_bw_overhead}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj;hMQubj)}(hT(int lane_count, int hactive, int dsc_slice_count, int bpp_x16, unsigned long flags)h](j)}(hint lane_counth](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h lane_counth]h lane_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(h int hactiveh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhactiveh]hhactive}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hint dsc_slice_counth](j)}(hinth]hint}(hjԸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjиubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjиubj)}(hdsc_slice_counth]hdsc_slice_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjиubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(h int bpp_x16h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbpp_x16h]hbpp_x16}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hflagsh]hflags}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhj)hhhj;hMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj%hhhj;hMQubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj;hMQhj"hhubj)}(hhh]h)}(h-Calculate the BW overhead of a DP link streamh]h-Calculate the BW overhead of a DP link stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM9hjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``int lane_count`` DP link lane count ``int hactive`` pixel count of the active period in one scanline of the stream ``int dsc_slice_count`` DSC slice count if **flags**/DRM_DP_LINK_BW_OVERHEAD_DSC is set ``int bpp_x16`` bits per pixel in .4 binary fixed point ``unsigned long flags`` DRM_DP_OVERHEAD_x flags **Description** Calculate the BW allocation overhead of a DP link stream, depending on the link's - **lane_count** - SST/MST mode (**flags** / ``DRM_DP_OVERHEAD_MST``) - symbol size (**flags** / ``DRM_DP_OVERHEAD_UHBR``) - FEC mode (**flags** / ``DRM_DP_OVERHEAD_FEC``) - SSC/REF_CLK mode (**flags** / ``DRM_DP_OVERHEAD_SSC_REF_CLK``) as well as the stream's - **hactive** timing - **bpp_x16** color depth - compression mode (**flags** / ``DRM_DP_OVERHEAD_DSC``). Note that this overhead doesn't account for the 8b/10b, 128b/132b channel coding efficiency, for that see **drm_dp_link_bw_channel_coding_efficiency\(\)**. Returns the overhead as 100% + overhead% in 1ppm units.h](h)}(h**Parameters**h]j%)}(hj¹h]h Parameters}(hjĹhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM=hjubji)}(hhh](jn)}(h&``int lane_count`` DP link lane count h](jt)}(h``int lane_count``h]jz)}(hjh]hint lane_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj߹ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM:hj۹ubj)}(hhh]h)}(hDP link lane counth]hDP link lane count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhj۹ubeh}(h]h ]h"]h$]h&]uh1jmhjhM:hjعubjn)}(hO``int hactive`` pixel count of the active period in one scanline of the stream h](jt)}(h``int hactive``h]jz)}(hjh]h int hactive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM;hjubj)}(hhh]h)}(h>pixel count of the active period in one scanline of the streamh]h>pixel count of the active period in one scanline of the stream}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM;hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hM;hjعubjn)}(hX``int dsc_slice_count`` DSC slice count if **flags**/DRM_DP_LINK_BW_OVERHEAD_DSC is set h](jt)}(h``int dsc_slice_count``h]jz)}(hjSh]hint dsc_slice_count}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM<hjMubj)}(hhh]h)}(h?DSC slice count if **flags**/DRM_DP_LINK_BW_OVERHEAD_DSC is seth](hDSC slice count if }(hjlhhhNhNubj%)}(h **flags**h]hflags}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubh#/DRM_DP_LINK_BW_OVERHEAD_DSC is set}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhM<hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhM<hjعubjn)}(h8``int bpp_x16`` bits per pixel in .4 binary fixed point h](jt)}(h``int bpp_x16``h]jz)}(hjh]h int bpp_x16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM=hjubj)}(hhh]h)}(h'bits per pixel in .4 binary fixed pointh]h'bits per pixel in .4 binary fixed point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM=hjعubjn)}(h0``unsigned long flags`` DRM_DP_OVERHEAD_x flags h](jt)}(h``unsigned long flags``h]jz)}(hj׺h]hunsigned long flags}(hjٺhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjպubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM>hjѺubj)}(hhh]h)}(hDRM_DP_OVERHEAD_x flagsh]hDRM_DP_OVERHEAD_x flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjѺubeh}(h]h ]h"]h$]h&]uh1jmhjhM>hjعubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM@hjubh)}(hX[Calculate the BW allocation overhead of a DP link stream, depending on the link's - **lane_count** - SST/MST mode (**flags** / ``DRM_DP_OVERHEAD_MST``) - symbol size (**flags** / ``DRM_DP_OVERHEAD_UHBR``) - FEC mode (**flags** / ``DRM_DP_OVERHEAD_FEC``) - SSC/REF_CLK mode (**flags** / ``DRM_DP_OVERHEAD_SSC_REF_CLK``) as well as the stream's - **hactive** timing - **bpp_x16** color depth - compression mode (**flags** / ``DRM_DP_OVERHEAD_DSC``). Note that this overhead doesn't account for the 8b/10b, 128b/132b channel coding efficiency, for that see **drm_dp_link_bw_channel_coding_efficiency\(\)**.h](hVCalculate the BW allocation overhead of a DP link stream, depending on the link’s - }(hj(hhhNhNubj%)}(h**lane_count**h]h lane_count}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh - SST/MST mode (}(hj(hhhNhNubj%)}(h **flags**h]hflags}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh / }(hj(hhhNhNubjz)}(h``DRM_DP_OVERHEAD_MST``h]hDRM_DP_OVERHEAD_MST}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh) - symbol size (}(hj(hhhNhNubj%)}(h **flags**h]hflags}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh / }hj(sbjz)}(h``DRM_DP_OVERHEAD_UHBR``h]hDRM_DP_OVERHEAD_UHBR}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh) - FEC mode (}(hj(hhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh / }hj(sbjz)}(h``DRM_DP_OVERHEAD_FEC``h]hDRM_DP_OVERHEAD_FEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh) - SSC/REF_CLK mode (}(hj(hhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh / }hj(sbjz)}(h``DRM_DP_OVERHEAD_SSC_REF_CLK``h]hDRM_DP_OVERHEAD_SSC_REF_CLK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh) as well as the stream’s - }(hj(hhhNhNubj%)}(h **hactive**h]hhactive}(hjһhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh timing - }(hj(hhhNhNubj%)}(h **bpp_x16**h]hbpp_x16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh! color depth - compression mode (}(hj(hhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh / }hj(sbjz)}(h``DRM_DP_OVERHEAD_DSC``h]hDRM_DP_OVERHEAD_DSC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubho). Note that this overhead doesn’t account for the 8b/10b, 128b/132b channel coding efficiency, for that see }(hj(hhhNhNubj%)}(h0**drm_dp_link_bw_channel_coding_efficiency\(\)**h]h,drm_dp_link_bw_channel_coding_efficiency()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chM@hjubh)}(h7Returns the overhead as 100% + overhead% in 1ppm units.h]h7Returns the overhead as 100% + overhead% in 1ppm units.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_dp_bw_channel_coding_efficiency (C function)%c.drm_dp_bw_channel_coding_efficiencyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6int drm_dp_bw_channel_coding_efficiency (bool is_uhbr)h]j)}(h5int drm_dp_bw_channel_coding_efficiency(bool is_uhbr)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjphMubj)}(h#drm_dp_bw_channel_coding_efficiencyh]j)}(h#drm_dp_bw_channel_coding_efficiencyh]h#drm_dp_bw_channel_coding_efficiency}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjphMubj)}(h(bool is_uhbr)h]j)}(h bool is_uhbrh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(his_uhbrh]his_uhbr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj^hhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjphMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjphMhjWhhubj)}(hhh]h)}(h)Get a DP link's channel coding efficiencyh]h+Get a DP link’s channel coding efficiency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``bool is_uhbr`` Whether the link has a 128b/132b channel coding **Description** Return the channel coding efficiency of the given DP link type, which is either 8b/10b or 128b/132b (aka UHBR). The corresponding overhead includes the 8b -> 10b, 128b -> 132b pixel data to link symbol conversion overhead and for 128b/132b any link or PHY level control symbol insertion overhead (LLCP, FEC, PHY sync, see DP Standard v2.1 3.5.2.18). For 8b/10b the corresponding FEC overhead is BW allocation specific, included in the value returned by drm_dp_bw_overhead(). Returns the efficiency in the 100%/coding-overhead% ratio in 1ppm units.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh]jn)}(hA``bool is_uhbr`` Whether the link has a 128b/132b channel coding h](jt)}(h``bool is_uhbr``h]jz)}(hj%h]h bool is_uhbr}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h/Whether the link has a 128b/132b channel codingh]h/Whether the link has a 128b/132b channel coding}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hXReturn the channel coding efficiency of the given DP link type, which is either 8b/10b or 128b/132b (aka UHBR). The corresponding overhead includes the 8b -> 10b, 128b -> 132b pixel data to link symbol conversion overhead and for 128b/132b any link or PHY level control symbol insertion overhead (LLCP, FEC, PHY sync, see DP Standard v2.1 3.5.2.18). For 8b/10b the corresponding FEC overhead is BW allocation specific, included in the value returned by drm_dp_bw_overhead().h]hXReturn the channel coding efficiency of the given DP link type, which is either 8b/10b or 128b/132b (aka UHBR). The corresponding overhead includes the 8b -> 10b, 128b -> 132b pixel data to link symbol conversion overhead and for 128b/132b any link or PHY level control symbol insertion overhead (LLCP, FEC, PHY sync, see DP Standard v2.1 3.5.2.18). For 8b/10b the corresponding FEC overhead is BW allocation specific, included in the value returned by drm_dp_bw_overhead().}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hHReturns the efficiency in the 100%/coding-overhead% ratio in 1ppm units.h]hHReturns the efficiency in the 100%/coding-overhead% ratio in 1ppm units.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_max_dprx_data_rate (C function)c.drm_dp_max_dprx_data_ratehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h@int drm_dp_max_dprx_data_rate (int max_link_rate, int max_lanes)h]j)}(h?int drm_dp_max_dprx_data_rate(int max_link_rate, int max_lanes)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjýhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj½hMubj)}(hdrm_dp_max_dprx_data_rateh]j)}(hdrm_dp_max_dprx_data_rateh]hdrm_dp_max_dprx_data_rate}(hjսhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѽubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj½hMubj)}(h"(int max_link_rate, int max_lanes)h](j)}(hint max_link_rateh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h max_link_rateh]h max_link_rate}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int max_lanesh](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h max_lanesh]h max_lanes}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj½hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj½hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj½hMhjhhubj)}(hhh]h)}(h)Get the max data bandwidth of a DPRX sinkh]h)Get the max data bandwidth of a DPRX sink}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhj½hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``int max_link_rate`` max DPRX link rate in 10kbps units ``int max_lanes`` max DPRX lane count **Description** Given a link rate and lanes, get the data bandwidth. Data bandwidth is the actual payload rate, which depends on the data bandwidth efficiency and the link rate. Note that protocol layers above the DPRX link level considered here can further limit the maximum data rate. Such layers are the MST topology (with limits on the link between the source and first branch device as well as on the whole MST path until the DPRX link) and (Thunderbolt) DP tunnels - which in turn can encapsulate an MST link with its own limit - with each SST or MST encapsulated tunnel sharing the BW of a tunnel group. Returns the maximum data rate in kBps units.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(h9``int max_link_rate`` max DPRX link rate in 10kbps units h](jt)}(h``int max_link_rate``h]jz)}(hjh]hint max_link_rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h"max DPRX link rate in 10kbps unitsh]h"max DPRX link rate in 10kbps units}(hjƾhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj¾hMhjþubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj¾hMhjubjn)}(h&``int max_lanes`` max DPRX lane count h](jt)}(h``int max_lanes``h]jz)}(hjh]h int max_lanes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hmax DPRX lane counth]hmax DPRX lane count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h4Given a link rate and lanes, get the data bandwidth.h]h4Given a link rate and lanes, get the data bandwidth.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hlData bandwidth is the actual payload rate, which depends on the data bandwidth efficiency and the link rate.h]hlData bandwidth is the actual payload rate, which depends on the data bandwidth efficiency and the link rate.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hXNote that protocol layers above the DPRX link level considered here can further limit the maximum data rate. Such layers are the MST topology (with limits on the link between the source and first branch device as well as on the whole MST path until the DPRX link) and (Thunderbolt) DP tunnels - which in turn can encapsulate an MST link with its own limit - with each SST or MST encapsulated tunnel sharing the BW of a tunnel group.h]hXNote that protocol layers above the DPRX link level considered here can further limit the maximum data rate. Such layers are the MST topology (with limits on the link between the source and first branch device as well as on the whole MST path until the DPRX link) and (Thunderbolt) DP tunnels - which in turn can encapsulate an MST link with its own limit - with each SST or MST encapsulated tunnel sharing the BW of a tunnel group.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h,Returns the maximum data rate in kBps units.h]h,Returns the maximum data rate in kBps units.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]'display-port-helper-functions-referenceah ]h"]'display port helper functions referenceah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h+Display Port CEC Helper Functions Referenceh]h+Display Port CEC Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hkThese functions take care of supporting the CEC-Tunneling-over-AUX feature of DisplayPort-to-HDMI adapters.h]hkThese functions take care of supporting the CEC-Tunneling-over-AUX feature of DisplayPort-to-HDMI adapters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:260: ./drivers/gpu/drm/display/drm_dp_cec.chK7hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_cec_irq (C function)c.drm_dp_cec_irqhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h,void drm_dp_cec_irq (struct drm_dp_aux *aux)h]j)}(h+void drm_dp_cec_irq(struct drm_dp_aux *aux)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chKubj)}(h h]h }(hjʿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjɿhKubj)}(hdrm_dp_cec_irqh]j)}(hdrm_dp_cec_irqh]hdrm_dp_cec_irq}(hjܿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؿubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjɿhKubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj޿sbc.drm_dp_cec_irqasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjɿhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjɿhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjɿhKhjhhubj)}(hhh]h)}(hhandle CEC interrupt, if anyh]hhandle CEC interrupt, if any}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chKhjxhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjɿhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Should be called when handling an IRQ_HPD request. If CEC-tunneling-over-AUX is present, then it will check for a CEC_IRQ and handle it accordingly.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chKhjubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chKhjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chKhjubh)}(hShould be called when handling an IRQ_HPD request. If CEC-tunneling-over-AUX is present, then it will check for a CEC_IRQ and handle it accordingly.h]hShould be called when handling an IRQ_HPD request. If CEC-tunneling-over-AUX is present, then it will check for a CEC_IRQ and handle it accordingly.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dp_cec_register_connector (C function)c.drm_dp_cec_register_connectorhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h\void drm_dp_cec_register_connector (struct drm_dp_aux *aux, struct drm_connector *connector)h]j)}(h[void drm_dp_cec_register_connector(struct drm_dp_aux *aux, struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhMubj)}(hdrm_dp_cec_register_connectorh]j)}(hdrm_dp_cec_register_connectorh]hdrm_dp_cec_register_connector}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhjJhMubj)}(h9(struct drm_dp_aux *aux, struct drm_connector *connector)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj_sbc.drm_dp_cec_register_connectorasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_dp_cec_register_connectorasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhjJhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjJhMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1jhjJhMhj1hhubj)}(hhh]h)}(hregister a new connectorh]hregister a new connector}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``struct drm_connector *connector`` drm connector **Description** A new connector was registered with associated CEC adapter name and CEC adapter parent device. After registering the name and parent drm_dp_cec_set_edid() is called to check if the connector supports CEC and to register a CEC adapter if that is the case.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjh]hstruct drm_dp_aux *aux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjubj)}(hhh]h)}(h drm connectorh]h drm connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjubh)}(hA new connector was registered with associated CEC adapter name and CEC adapter parent device. After registering the name and parent drm_dp_cec_set_edid() is called to check if the connector supports CEC and to register a CEC adapter if that is the case.h]hA new connector was registered with associated CEC adapter name and CEC adapter parent device. After registering the name and parent drm_dp_cec_set_edid() is called to check if the connector supports CEC and to register a CEC adapter if that is the case.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_cec_unregister_connector (C function)!c.drm_dp_cec_unregister_connectorhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=void drm_dp_cec_unregister_connector (struct drm_dp_aux *aux)h]j)}(hjj>jjjuh1jhhhjhNhNubj)}(hD**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channelh](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjBubji)}(hhh]jn)}(h2``struct drm_dp_aux *aux`` DisplayPort AUX channelh](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjgh]hstruct drm_dp_aux *aux}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhjaubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./drivers/gpu/drm/display/drm_dp_cec.chMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]+display-port-cec-helper-functions-referenceah ]h"]+display port cec helper functions referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h9Display Port Dual Mode Adaptor Helper Functions Referenceh]h9Display Port Dual Mode Adaptor Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM ubh)}(h@Helper functions to deal with DP dual mode (aka. DP++) adaptors.h]h@Helper functions to deal with DP dual mode (aka. DP++) adaptors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK#hjhhubh)}(hPType 1: Adaptor registers (if any) and the sink DDC bus may be accessed via I2C.h]hPType 1: Adaptor registers (if any) and the sink DDC bus may be accessed via I2C.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK%hjhhubh)}(hType 2: Adaptor registers and sink DDC bus can be accessed either via I2C or I2C-over-AUX. Source devices may choose to implement either of these access methods.h]hType 2: Adaptor registers and sink DDC bus can be accessed either via I2C or I2C-over-AUX. Source devices may choose to implement either of these access methods.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK(hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_lspcon_mode (C enum)c.drm_lspcon_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_lspcon_modeh]j)}(henum drm_lspcon_modeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_lspcon_modeh]j)}(hjh]hdrm_lspcon_mode}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jenumeh"]h$]h&]jjjjRjjRjjjuh1jhhhjhNhNubj)}(hX **Constants** ``DRM_LSPCON_MODE_INVALID`` No LSPCON. ``DRM_LSPCON_MODE_LS`` Level shifter mode of LSPCON which drives DP++ to HDMI 1.4 conversion. ``DRM_LSPCON_MODE_PCON`` Protocol converter mode of LSPCON which drives DP++ to HDMI 2.0 active conversion.h](h)}(h **Constants**h]j%)}(hj\h]h Constants}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKMhjVubji)}(hhh](jn)}(h'``DRM_LSPCON_MODE_INVALID`` No LSPCON. h](jt)}(h``DRM_LSPCON_MODE_INVALID``h]jz)}(hj{h]hDRM_LSPCON_MODE_INVALID}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKPhjuubj)}(hhh]h)}(h No LSPCON.h]h No LSPCON.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKPhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjhKPhjrubjn)}(h^``DRM_LSPCON_MODE_LS`` Level shifter mode of LSPCON which drives DP++ to HDMI 1.4 conversion. h](jt)}(h``DRM_LSPCON_MODE_LS``h]jz)}(hjh]hDRM_LSPCON_MODE_LS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKThjubj)}(hhh]h)}(hFLevel shifter mode of LSPCON which drives DP++ to HDMI 1.4 conversion.h]hFLevel shifter mode of LSPCON which drives DP++ to HDMI 1.4 conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKThjrubjn)}(hk``DRM_LSPCON_MODE_PCON`` Protocol converter mode of LSPCON which drives DP++ to HDMI 2.0 active conversion.h](jt)}(h``DRM_LSPCON_MODE_PCON``h]jz)}(hjh]hDRM_LSPCON_MODE_PCON}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKWhjubj)}(hhh]h)}(hRProtocol converter mode of LSPCON which drives DP++ to HDMI 2.0 active conversion.h]hRProtocol converter mode of LSPCON which drives DP++ to HDMI 2.0 active conversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKWhjrubeh}(h]h ]h"]h$]h&]uh1jhhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_dual_mode_type (C enum)c.drm_dp_dual_mode_typehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_dual_mode_typeh]j)}(henum drm_dp_dual_mode_typeh](j)}(hjl h]henum}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhK^ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjThK^ubj)}(hdrm_dp_dual_mode_typeh]j)}(hjAh]hdrm_dp_dual_mode_type}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjThK^ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhjThK^ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1jhjThK^hj<hhubj)}(hhh]h)}(h Type of the DP dual mode adaptorh]h Type of the DP dual mode adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKXhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjThK^ubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Constants** ``DRM_DP_DUAL_MODE_NONE`` No DP dual mode adaptor ``DRM_DP_DUAL_MODE_UNKNOWN`` Could be either none or type 1 DVI adaptor ``DRM_DP_DUAL_MODE_TYPE1_DVI`` Type 1 DVI adaptor ``DRM_DP_DUAL_MODE_TYPE1_HDMI`` Type 1 HDMI adaptor ``DRM_DP_DUAL_MODE_TYPE2_DVI`` Type 2 DVI adaptor ``DRM_DP_DUAL_MODE_TYPE2_HDMI`` Type 2 HDMI adaptor ``DRM_DP_DUAL_MODE_LSPCON`` Level shifter / protocol converterh](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhK\hjubji)}(hhh](jn)}(h2``DRM_DP_DUAL_MODE_NONE`` No DP dual mode adaptor h](jt)}(h``DRM_DP_DUAL_MODE_NONE``h]jz)}(hjh]hDRM_DP_DUAL_MODE_NONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhK_hjubj)}(hhh]h)}(hNo DP dual mode adaptorh]hNo DP dual mode adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK_hjubjn)}(hH``DRM_DP_DUAL_MODE_UNKNOWN`` Could be either none or type 1 DVI adaptor h](jt)}(h``DRM_DP_DUAL_MODE_UNKNOWN``h]jz)}(hjh]hDRM_DP_DUAL_MODE_UNKNOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKbhjubj)}(hhh]h)}(h*Could be either none or type 1 DVI adaptorh]h*Could be either none or type 1 DVI adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKbhjubjn)}(h2``DRM_DP_DUAL_MODE_TYPE1_DVI`` Type 1 DVI adaptor h](jt)}(h``DRM_DP_DUAL_MODE_TYPE1_DVI``h]jz)}(hj<h]hDRM_DP_DUAL_MODE_TYPE1_DVI}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKehj6ubj)}(hhh]h)}(hType 1 DVI adaptorh]hType 1 DVI adaptor}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKehjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhKehjubjn)}(h4``DRM_DP_DUAL_MODE_TYPE1_HDMI`` Type 1 HDMI adaptor h](jt)}(h``DRM_DP_DUAL_MODE_TYPE1_HDMI``h]jz)}(hjuh]hDRM_DP_DUAL_MODE_TYPE1_HDMI}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKhhjoubj)}(hhh]h)}(hType 1 HDMI adaptorh]hType 1 HDMI adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhKhhjubjn)}(h2``DRM_DP_DUAL_MODE_TYPE2_DVI`` Type 2 DVI adaptor h](jt)}(h``DRM_DP_DUAL_MODE_TYPE2_DVI``h]jz)}(hjh]hDRM_DP_DUAL_MODE_TYPE2_DVI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKkhjubj)}(hhh]h)}(hType 2 DVI adaptorh]hType 2 DVI adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKkhjubjn)}(h4``DRM_DP_DUAL_MODE_TYPE2_HDMI`` Type 2 HDMI adaptor h](jt)}(h``DRM_DP_DUAL_MODE_TYPE2_HDMI``h]jz)}(hjh]hDRM_DP_DUAL_MODE_TYPE2_HDMI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKnhjubj)}(hhh]h)}(hType 2 HDMI adaptorh]hType 2 HDMI adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKnhjubjn)}(h>``DRM_DP_DUAL_MODE_LSPCON`` Level shifter / protocol converterh](jt)}(h``DRM_DP_DUAL_MODE_LSPCON``h]jz)}(hj h]hDRM_DP_DUAL_MODE_LSPCON}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKphjubj)}(hhh]h)}(h"Level shifter / protocol converterh]h"Level shifter / protocol converter}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:272: ./include/drm/display/drm_dp_dual_mode_helper.hhKqhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hKphjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_dual_mode_read (C function)c.drm_dp_dual_mode_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hassize_t drm_dp_dual_mode_read (struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h]j)}(h`ssize_t drm_dp_dual_mode_read(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dp_dual_mode_readsbc.drm_dp_dual_mode_readasbuh1hhjvhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhK?ubj)}(hdrm_dp_dual_mode_readh]j)}(hjh]hdrm_dp_dual_mode_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjhK?ubj)}(hC(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h](j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_dual_mode_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hadapterh]hadapter}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]jc.drm_dp_dual_mode_readasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hoffseth]hoffset}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_dual_mode_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjvhhhjhK?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhjhK?ubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjhK?hjohhubj)}(hhh]h)}(h.Read from the DP dual mode adaptor register(s)h]h.Read from the DP dual mode adaptor register(s)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK3hjhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhK?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhjhNhNubj)}(hX`**Parameters** ``struct i2c_adapter *adapter`` I2C adapter for the DDC bus ``u8 offset`` register offset ``void *buffer`` buffer for return data ``size_t size`` size of the buffer **Description** Reads **size** bytes from the DP dual mode adaptor registers starting at **offset**. **Return** 0 on success, negative error code on failureh](h)}(h**Parameters**h]j%)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK7hj;ubji)}(hhh](jn)}(h<``struct i2c_adapter *adapter`` I2C adapter for the DDC bus h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj`h]hstruct i2c_adapter *adapter}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK4hjZubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhK4hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhK4hjWubjn)}(h``u8 offset`` register offset h](jt)}(h ``u8 offset``h]jz)}(hjh]h u8 offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK5hjubj)}(hhh]h)}(hregister offseth]hregister offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK5hjWubjn)}(h(``void *buffer`` buffer for return data h](jt)}(h``void *buffer``h]jz)}(hjh]h void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK6hjubj)}(hhh]h)}(hbuffer for return datah]hbuffer for return data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK6hjWubjn)}(h#``size_t size`` size of the buffer h](jt)}(h``size_t size``h]jz)}(hj h]h size_t size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK7hjubj)}(hhh]h)}(hsize of the bufferh]hsize of the buffer}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK7hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hK7hjWubeh}(h]h ]h"]h$]h&]uh1jhhj;ubh)}(h**Description**h]j%)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK9hj;ubh)}(hTReads **size** bytes from the DP dual mode adaptor registers starting at **offset**.h](hReads }(hj\hhhNhNubj%)}(h**size**h]hsize}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubh; bytes from the DP dual mode adaptor registers starting at }(hj\hhhNhNubj%)}(h **offset**h]hoffset}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK9hj;ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKAttempt to identify the type of the DP dual mode adaptor used.h]h>Attempt to identify the type of the DP dual mode adaptor used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjubh)}(hNote that when the answer is **DRM_DP_DUAL_MODE_UNKNOWN** it's not certain whether we're dealing with a native HDMI port or a type 1 DVI dual mode adaptor. The driver will have to use some other hardware/driver specific mechanism to make that distinction.h](hNote that when the answer is }(hjhhhNhNubj%)}(h**DRM_DP_DUAL_MODE_UNKNOWN**h]hDRM_DP_DUAL_MODE_UNKNOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh it’s not certain whether we’re dealing with a native HDMI port or a type 1 DVI dual mode adaptor. The driver will have to use some other hardware/driver specific mechanism to make that distinction.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjubh)}(h)The type of the DP dual mode adaptor usedh]h)The type of the DP dual mode adaptor used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_dual_mode_max_tmds_clock (C function)!c.drm_dp_dual_mode_max_tmds_clockhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_dual_mode_max_tmds_clock (const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter)h]j)}(hint drm_dp_dual_mode_max_tmds_clock(const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj5hMubj)}(hdrm_dp_dual_mode_max_tmds_clockh]j)}(hdrm_dp_dual_mode_max_tmds_clockh]hdrm_dp_dual_mode_max_tmds_clock}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj5hMubj)}(h\(const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter)h](j)}(hconst struct drm_device *devh](j)}(hjch]hconst}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjJsb!c.drm_dp_dual_mode_max_tmds_clockasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(henum drm_dp_dual_mode_type typeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_dp_dual_mode_max_tmds_clockasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j!c.drm_dp_dual_mode_max_tmds_clockasbuh1hhjPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj5hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj5hMhjhhubj)}(hhh]h)}(h'Max TMDS clock for DP dual mode adaptorh]h'Max TMDS clock for DP dual mode adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct drm_device *dev`` :c:type:`drm_device` to use ``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type ``struct i2c_adapter *adapter`` I2C adapter for the DDC bus **Description** Determine the max TMDS clock the adaptor supports based on the type of the dual mode adaptor and the DP_DUAL_MODE_MAX_TMDS_CLOCK register (on type2 adaptors). As some type 1 adaptors have problems with registers (see comments in drm_dp_dual_mode_detect()) we don't read the register on those, instead we simply assume a 165 MHz limit based on the specification. **Return** Maximum supported TMDS clock rate for the DP dual mode adaptor in kHz.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hjubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hjh]hconst struct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hj5h]h drm_device}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhj+hMhj/ubh to use}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj+hMhj ubjn)}(h>``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type h](jt)}(h#``enum drm_dp_dual_mode_type type``h]jz)}(hjnh]henum drm_dp_dual_mode_type type}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjhubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj ubjn)}(h<``struct i2c_adapter *adapter`` I2C adapter for the DDC bus h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjh]hstruct i2c_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hjubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hjubh)}(hXiDetermine the max TMDS clock the adaptor supports based on the type of the dual mode adaptor and the DP_DUAL_MODE_MAX_TMDS_CLOCK register (on type2 adaptors). As some type 1 adaptors have problems with registers (see comments in drm_dp_dual_mode_detect()) we don't read the register on those, instead we simply assume a 165 MHz limit based on the specification.h]hXkDetermine the max TMDS clock the adaptor supports based on the type of the dual mode adaptor and the DP_DUAL_MODE_MAX_TMDS_CLOCK register (on type2 adaptors). As some type 1 adaptors have problems with registers (see comments in drm_dp_dual_mode_detect()) we don’t read the register on those, instead we simply assume a 165 MHz limit based on the specification.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hjubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubh)}(hFMaximum supported TMDS clock rate for the DP dual mode adaptor in kHz.h]hFMaximum supported TMDS clock rate for the DP dual mode adaptor in kHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_dual_mode_get_tmds_output (C function)"c.drm_dp_dual_mode_get_tmds_outputhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_dual_mode_get_tmds_output (const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter, bool *enabled)h]j)}(hint drm_dp_dual_mode_get_tmds_output(const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter, bool *enabled)h](j)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMBubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj\hMBubj)}(h drm_dp_dual_mode_get_tmds_outputh]j)}(h drm_dp_dual_mode_get_tmds_outputh]h drm_dp_dual_mode_get_tmds_output}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jju h1jhjJhhhj\hMBubj)}(hk(const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter, bool *enabled)h](j)}(hconst struct drm_device *devh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjqsb"c.drm_dp_dual_mode_get_tmds_outputasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_dp_dual_mode_type typeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j"c.drm_dp_dual_mode_get_tmds_outputasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_dp_dual_mode_get_tmds_outputasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool *enabledh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(henabledh]henabled}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj\hMBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhj\hMBubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhj\hMBhjChhubj)}(hhh]h)}(hDGet the state of the TMDS output buffers in the DP dual mode adaptorh]hDGet the state of the TMDS output buffers in the DP dual mode adaptor}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM2hj:hhubah}(h]h ]h"]h$]h&]uh1jhjChhhj\hMBubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct drm_device *dev`` :c:type:`drm_device` to use ``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type ``struct i2c_adapter *adapter`` I2C adapter for the DDC bus ``bool *enabled`` current state of the TMDS output buffers **Description** Get the state of the TMDS output buffers in the adaptor. For type2 adaptors this is queried from the DP_DUAL_MODE_TMDS_OEN register. As some type 1 adaptors have problems with registers (see comments in drm_dp_dual_mode_detect()) we don't read the register on those, instead we simply assume that the buffers are always enabled. **Return** 0 on success, negative error code on failureh](h)}(h**Parameters**h]j%)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM6hjYubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hj~h]hconst struct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM3hjxubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hjh]h drm_device}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjhM3hjubh to use}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhM3hjuubjn)}(h>``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type h](jt)}(h#``enum drm_dp_dual_mode_type type``h]jz)}(hjh]henum drm_dp_dual_mode_type type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM4hjubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM4hjuubjn)}(h<``struct i2c_adapter *adapter`` I2C adapter for the DDC bus h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjh]hstruct i2c_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM5hj ubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM5hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hM5hjuubjn)}(h;``bool *enabled`` current state of the TMDS output buffers h](jt)}(h``bool *enabled``h]jz)}(hjHh]h bool *enabled}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM6hjBubj)}(hhh]h)}(h(current state of the TMDS output buffersh]h(current state of the TMDS output buffers}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hM6hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hM6hjuubeh}(h]h ]h"]h$]h&]uh1jhhjYubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM8hjYubh)}(hXHGet the state of the TMDS output buffers in the adaptor. For type2 adaptors this is queried from the DP_DUAL_MODE_TMDS_OEN register. As some type 1 adaptors have problems with registers (see comments in drm_dp_dual_mode_detect()) we don't read the register on those, instead we simply assume that the buffers are always enabled.h]hXJGet the state of the TMDS output buffers in the adaptor. For type2 adaptors this is queried from the DP_DUAL_MODE_TMDS_OEN register. As some type 1 adaptors have problems with registers (see comments in drm_dp_dual_mode_detect()) we don’t read the register on those, instead we simply assume that the buffers are always enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM8hjYubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM?hjYubh)}(h,0 on success, negative error code on failureh]h,0 on success, negative error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM?hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_dual_mode_set_tmds_output (C function)"c.drm_dp_dual_mode_set_tmds_outputhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_dual_mode_set_tmds_output (const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter, bool enable)h]j)}(hint drm_dp_dual_mode_set_tmds_output(const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter, bool enable)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMiubj)}(h drm_dp_dual_mode_set_tmds_outputh]j)}(h drm_dp_dual_mode_set_tmds_outputh]h drm_dp_dual_mode_set_tmds_output}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMiubj)}(hi(const struct drm_device *dev, enum drm_dp_dual_mode_type type, struct i2c_adapter *adapter, bool enable)h](j)}(hconst struct drm_device *devh](j)}(hjch]hconst}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j%)}jjsb"c.drm_dp_dual_mode_set_tmds_outputasbuh1hhj(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(henum drm_dp_dual_mode_type typeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_dp_dual_mode_set_tmds_outputasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j"c.drm_dp_dual_mode_set_tmds_outputasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hadapterh]hadapter}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(h bool enableh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henableh]henable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMiubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMiubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMihjhhubj)}(hhh]h)}(h>Enable/disable TMDS output buffers in the DP dual mode adaptorh]h>Enable/disable TMDS output buffers in the DP dual mode adaptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM\hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct drm_device *dev`` :c:type:`drm_device` to use ``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type ``struct i2c_adapter *adapter`` I2C adapter for the DDC bus ``bool enable`` enable (as opposed to disable) the TMDS output buffers **Description** Set the state of the TMDS output buffers in the adaptor. For type2 this is set via the DP_DUAL_MODE_TMDS_OEN register. Type1 adaptors do not support any register writes. **Return** 0 on success, negative error code on failureh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM`hjubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hjh]hconst struct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM]hj ubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hj1h]h drm_device}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhj'hM]hj+ubh to use}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hM]hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hM]hj ubjn)}(h>``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type h](jt)}(h#``enum drm_dp_dual_mode_type type``h]jz)}(hjjh]henum drm_dp_dual_mode_type type}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM^hjdubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjhM^hj ubjn)}(h<``struct i2c_adapter *adapter`` I2C adapter for the DDC bus h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjh]hstruct i2c_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM_hjubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM_hj ubjn)}(hG``bool enable`` enable (as opposed to disable) the TMDS output buffers h](jt)}(h``bool enable``h]jz)}(hjh]h bool enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM`hjubj)}(hhh]h)}(h6enable (as opposed to disable) the TMDS output buffersh]h6enable (as opposed to disable) the TMDS output buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM`hj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMbhjubh)}(hSet the state of the TMDS output buffers in the adaptor. For type2 this is set via the DP_DUAL_MODE_TMDS_OEN register. Type1 adaptors do not support any register writes.h]hSet the state of the TMDS output buffers in the adaptor. For type2 this is set via the DP_DUAL_MODE_TMDS_OEN register. Type1 adaptors do not support any register writes.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMbhjubh)}(h **Return**h]j%)}(hj>h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMfhjubh)}(h,0 on success, negative error code on failureh]h,0 on success, negative error code on failure}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_get_dual_mode_type_name (C function) c.drm_dp_get_dual_mode_type_namehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMconst char * drm_dp_get_dual_mode_type_name (enum drm_dp_dual_mode_type type)h]j)}(hKconst char *drm_dp_get_dual_mode_type_name(enum drm_dp_dual_mode_type type)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdrm_dp_get_dual_mode_type_nameh]j)}(hdrm_dp_get_dual_mode_type_nameh]hdrm_dp_get_dual_mode_type_name}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(enum drm_dp_dual_mode_type type)h]j)}(henum drm_dp_dual_mode_type typeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb c.drm_dp_get_dual_mode_type_nameasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjxhhubj)}(hhh]h)}(h9Get the name of the DP dual mode adaptor type as a stringh]h9Get the name of the DP dual mode adaptor type as a string}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjhNhNubj)}(h**Parameters** ``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type **Return** String representation of the DP dual mode adaptor typeh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjzubji)}(hhh]jn)}(h>``enum drm_dp_dual_mode_type type`` DP dual mode adaptor type h](jt)}(h#``enum drm_dp_dual_mode_type type``h]jz)}(hjh]henum drm_dp_dual_mode_type type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjzubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjzubh)}(h6String representation of the DP dual mode adaptor typeh]h6String representation of the DP dual mode adaptor type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_lspcon_get_mode (C function)c.drm_lspcon_get_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hoint drm_lspcon_get_mode (const struct drm_device *dev, struct i2c_adapter *adapter, enum drm_lspcon_mode *mode)h]j)}(hnint drm_lspcon_get_mode(const struct drm_device *dev, struct i2c_adapter *adapter, enum drm_lspcon_mode *mode)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hMubj)}(hdrm_lspcon_get_modeh]j)}(hdrm_lspcon_get_modeh]hdrm_lspcon_get_mode}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj-hMubj)}(hW(const struct drm_device *dev, struct i2c_adapter *adapter, enum drm_lspcon_mode *mode)h](j)}(hconst struct drm_device *devh](j)}(hjch]hconst}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjBsbc.drm_lspcon_get_modeasbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_lspcon_get_modeasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hadapterh]hadapter}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(henum drm_lspcon_mode *modeh](j)}(hjl h]henum}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hdrm_lspcon_modeh]hdrm_lspcon_mode}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]jc.drm_lspcon_get_modeasbuh1hhjUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj-hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj-hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj-hMhjhhubj)}(hhh]h)}(hEGet LSPCON's current mode of operation by reading offset (0x80, 0x41)h]hGGet LSPCON’s current mode of operation by reading offset (0x80, 0x41)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX6**Parameters** ``const struct drm_device *dev`` :c:type:`drm_device` to use ``struct i2c_adapter *adapter`` I2C-over-aux adapter ``enum drm_lspcon_mode *mode`` current lspcon mode of operation output variable **Return** 0 on success, sets the current_mode value to appropriate mode -error on failureh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hjh]hconst struct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hj:h]h drm_device}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhj0hMhj4ubh to use}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj0hMhjubjn)}(h5``struct i2c_adapter *adapter`` I2C-over-aux adapter h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjsh]hstruct i2c_adapter *adapter}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjmubj)}(hhh]h)}(hI2C-over-aux adapterh]hI2C-over-aux adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hP``enum drm_lspcon_mode *mode`` current lspcon mode of operation output variable h](jt)}(h``enum drm_lspcon_mode *mode``h]jz)}(hjh]henum drm_lspcon_mode *mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(h0current lspcon mode of operation output variableh]h0current lspcon mode of operation output variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubh)}(hO0 on success, sets the current_mode value to appropriate mode -error on failureh]hO0 on success, sets the current_mode value to appropriate mode -error on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_lspcon_set_mode (C function)c.drm_lspcon_set_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h|int drm_lspcon_set_mode (const struct drm_device *dev, struct i2c_adapter *adapter, enum drm_lspcon_mode mode, int time_out)h]j)}(h{int drm_lspcon_set_mode(const struct drm_device *dev, struct i2c_adapter *adapter, enum drm_lspcon_mode mode, int time_out)h](j)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj:hMubj)}(hdrm_lspcon_set_modeh]j)}(hdrm_lspcon_set_modeh]hdrm_lspcon_set_mode}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj:hMubj)}(hd(const struct drm_device *dev, struct i2c_adapter *adapter, enum drm_lspcon_mode mode, int time_out)h](j)}(hconst struct drm_device *devh](j)}(hjch]hconst}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjOsbc.drm_lspcon_set_modeasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_lspcon_set_modeasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hadapterh]hadapter}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(henum drm_lspcon_mode modeh](j)}(hjl h]henum}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(hdrm_lspcon_modeh]hdrm_lspcon_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_lspcon_set_modeasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(h int time_outh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htime_outh]htime_out}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj:hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhj:hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj:hMhj!hhubj)}(hhh]h)}(h@Change LSPCON's mode of operation by writing offset (0x80, 0x40)h]hBChange LSPCON’s mode of operation by writing offset (0x80, 0x40)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(hX-**Parameters** ``const struct drm_device *dev`` :c:type:`drm_device` to use ``struct i2c_adapter *adapter`` I2C-over-aux adapter ``enum drm_lspcon_mode mode`` required mode of operation ``int time_out`` LSPCON mode change settle timeout **Return** 0 on success, -error on failure/timeouth](h)}(h**Parameters**h]j%)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj+ubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hjPh]hconst struct drm_device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjJubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hjoh]h drm_device}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjehMhjiubh to use}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehMhjGubjn)}(h5``struct i2c_adapter *adapter`` I2C-over-aux adapter h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjh]hstruct i2c_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(hI2C-over-aux adapterh]hI2C-over-aux adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjGubjn)}(h9``enum drm_lspcon_mode mode`` required mode of operation h](jt)}(h``enum drm_lspcon_mode mode``h]jz)}(hjh]henum drm_lspcon_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(hrequired mode of operationh]hrequired mode of operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjGubjn)}(h3``int time_out`` LSPCON mode change settle timeout h](jt)}(h``int time_out``h]jz)}(hjh]h int time_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjubj)}(hhh]h)}(h!LSPCON mode change settle timeouth]h!LSPCON mode change settle timeout}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhjGubeh}(h]h ]h"]h$]h&]uh1jhhj+ubh)}(h **Return**h]j%)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj+ubh)}(h'0 on success, -error on failure/timeouth]h'0 on success, -error on failure/timeout}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]9display-port-dual-mode-adaptor-helper-functions-referenceah ]h"]9display port dual mode adaptor helper functions referenceah$]h&]uh1hhhhhhhhM ubh)}(hhh](h)}(hDisplay Port MST Helpersh]hDisplay Port MST Helpers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hOverviewh]hOverview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hThese functions contain parts of the DisplayPort 1.2a MultiStream Transport protocol. The helpers contain a topology manager and bandwidth manager. The helpers encapsulate the sending and received of sideband msgs.h]hThese functions contain parts of the DisplayPort 1.2a MultiStream Transport protocol. The helpers contain a topology manager and bandwidth manager. The helpers encapsulate the sending and received of sideband msgs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:284: ./drivers/gpu/drm/display/drm_dp_mst_topology.chK5hjhhubh)}(hhh](h)}(hTopology refcount overviewh]hTopology refcount overview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hXThe refcounting schemes for :c:type:`struct drm_dp_mst_branch ` and :c:type:`struct drm_dp_mst_port ` are somewhat unusual. Both ports and branch devices have two different kinds of refcounts: topology refcounts, and malloc refcounts.h](hThe refcounting schemes for }(hjhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMShjubh and }(hjhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjh]hstruct drm_dp_mst_port}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMShjubh are somewhat unusual. Both ports and branch devices have two different kinds of refcounts: topology refcounts, and malloc refcounts.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMShjubh)}(hXQTopology refcounts are not exposed to drivers, and are handled internally by the DP MST helpers. The helpers use them in order to prevent the in-memory topology state from being changed in the middle of critical operations like changing the internal state of payload allocations. This means each branch and port will be considered to be connected to the rest of the topology until its topology refcount reaches zero. Additionally, for ports this means that their associated :c:type:`struct drm_connector ` will stay registered with userspace until the port's refcount reaches 0.h](hXTopology refcounts are not exposed to drivers, and are handled internally by the DP MST helpers. The helpers use them in order to prevent the in-memory topology state from being changed in the middle of critical operations like changing the internal state of payload allocations. This means each branch and port will be considered to be connected to the rest of the topology until its topology refcount reaches zero. Additionally, for ports this means that their associated }(hj hhhNhNubh)}(h.:c:type:`struct drm_connector `h]jz)}(hj*h]hstruct drm_connector}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMWhj ubhK will stay registered with userspace until the port’s refcount reaches 0.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhMWhjubeh}(h]topology-refcount-overviewah ]h"]topology refcount overviewah$]h&]uh1hhjhhhNhNubh)}(hhh](h)}(hMalloc refcount overviewh]hMalloc refcount overview}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhNhNubh)}(hX?Malloc references are used to keep a :c:type:`struct drm_dp_mst_port ` or :c:type:`struct drm_dp_mst_branch ` allocated even after all of its topology references have been dropped, so that the driver or MST helpers can safely access each branch's last known state before it was disconnected from the topology. When the malloc refcount of a port or branch reaches 0, the memory allocation containing the :c:type:`struct drm_dp_mst_branch ` or :c:type:`struct drm_dp_mst_port ` respectively will be freed.h](h%Malloc references are used to keep a }(hjkhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjuh]hstruct drm_dp_mst_port}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMchjkubh or }(hjkhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhMchjkubhX( allocated even after all of its topology references have been dropped, so that the driver or MST helpers can safely access each branch’s last known state before it was disconnected from the topology. When the malloc refcount of a port or branch reaches 0, the memory allocation containing the }(hjkhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhMchjkubh or }hjksbh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjh]hstruct drm_dp_mst_port}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMchjkubh respectively will be freed.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMchjZubh)}(hXFor :c:type:`struct drm_dp_mst_branch `, malloc refcounts are not currently exposed to drivers. As of writing this documentation, there are no drivers that have a usecase for accessing :c:type:`struct drm_dp_mst_branch ` outside of the MST helpers. Exposing this API to drivers in a race-free manner would take more tweaking of the refcounting scheme, however patches are welcome provided there is a legitimate driver usecase for this.h](hFor }(hjhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMkhjubh, malloc refcounts are not currently exposed to drivers. As of writing this documentation, there are no drivers that have a usecase for accessing }(hjhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hj4h]hstruct drm_dp_mst_branch}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhj-hMkhjubh outside of the MST helpers. Exposing this API to drivers in a race-free manner would take more tweaking of the refcounting scheme, however patches are welcome provided there is a legitimate driver usecase for this.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMkhjZubeh}(h]malloc-refcount-overviewah ]h"]malloc refcount overviewah$]h&]uh1hhjhhhNhNubh)}(hhh](h)}(h$Refcount relationships in a topologyh]h$Refcount relationships in a topology}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchNhNubh)}(hjLet's take a look at why the relationship between topology and malloc refcounts is designed the way it is.h]hlLet’s take a look at why the relationship between topology and malloc refcounts is designed the way it is.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMuhjcubkfigure kernel_figure)}(hhh]hfigure)}(hhh](himage)}(hX.. kernel-figure:: dp-mst/topology-figure-1.dot An example of topology and malloc refs in a DP MST topology with two active payloads. Topology refcount increments are indicated by solid lines, and malloc refcount increments are indicated by dashed lines. Each starts from the branch which incremented the refcount, and ends at the branch to which the refcount belongs to, i.e. the arrow points the same way as the C pointers used to reference a structure. h]h}(h]h ]h"]h$]h&]uri gpu/dp-mst/topology-figure-1.dot candidates}j9jsuh1jhjhhhKubhcaption)}(hXAn example of topology and malloc refs in a DP MST topology with two active payloads. Topology refcount increments are indicated by solid lines, and malloc refcount increments are indicated by dashed lines. Each starts from the branch which incremented the refcount, and ends at the branch to which the refcount belongs to, i.e. the arrow points the same way as the C pointers used to reference a structure.h]hXAn example of topology and malloc refs in a DP MST topology with two active payloads. Topology refcount increments are indicated by solid lines, and malloc refcount increments are indicated by dashed lines. Each starts from the branch which incremented the refcount, and ends at the branch to which the refcount belongs to, i.e. the arrow points the same way as the C pointers used to reference a structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMzhjubeh}(h]id3ah ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjcubh)}(hAs you can see in the above figure, every branch increments the topology refcount of its children, and increments the malloc refcount of its parent. Additionally, every payload increments the malloc refcount of its assigned port by 1.h]hAs you can see in the above figure, every branch increments the topology refcount of its children, and increments the malloc refcount of its parent. Additionally, every payload increments the malloc refcount of its assigned port by 1.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubh)}(hSo, what would happen if MSTB #3 from the above figure was unplugged from the system, but the driver hadn't yet removed payload #2 from port #3? The topology would start to look like the figure below.h]hSo, what would happen if MSTB #3 from the above figure was unplugged from the system, but the driver hadn’t yet removed payload #2 from port #3? The topology would start to look like the figure below.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubj)}(hhh]j)}(hhh](j)}(h.. kernel-figure:: dp-mst/topology-figure-2.dot Ports and branch devices which have been released from memory are colored grey, and references which have been removed are colored red. h]h}(h]h ]h"]h$]h&]uri gpu/dp-mst/topology-figure-2.dotj}j9jsuh1jhjhhhKubj)}(hPorts and branch devices which have been released from memory are colored grey, and references which have been removed are colored red.h]hPorts and branch devices which have been released from memory are colored grey, and references which have been removed are colored red.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]id4ah ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjcubh)}(hXWhenever a port or branch device's topology refcount reaches zero, it will decrement the topology refcounts of all its children, the malloc refcount of its parent, and finally its own malloc refcount. For MSTB #4 and port #4, this means they both have been disconnected from the topology and freed from memory. But, because payload #2 is still holding a reference to port #3, port #3 is removed from the topology but its :c:type:`struct drm_dp_mst_port ` is still accessible from memory. This also means port #3 has not yet decremented the malloc refcount of MSTB #3, so its :c:type:`struct drm_dp_mst_branch ` will also stay allocated in memory until port #3's malloc refcount reaches 0.h](hXWhenever a port or branch device’s topology refcount reaches zero, it will decrement the topology refcounts of all its children, the malloc refcount of its parent, and finally its own malloc refcount. For MSTB #4 and port #4, this means they both have been disconnected from the topology and freed from memory. But, because payload #2 is still holding a reference to port #3, port #3 is removed from the topology but its }(hj hhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjh]hstruct drm_dp_mst_port}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj ubhy is still accessible from memory. This also means port #3 has not yet decremented the malloc refcount of MSTB #3, so its }(hj hhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hj7h]hstruct drm_dp_mst_branch}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhj0hMhj ubhP will also stay allocated in memory until port #3’s malloc refcount reaches 0.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMhjcubh)}(hThis relationship is necessary because in order to release payload #2, we need to be able to figure out the last relative of port #3 that's still connected to the topology. In this case, we would travel up the topology as shown below.h]hThis relationship is necessary because in order to release payload #2, we need to be able to figure out the last relative of port #3 that’s still connected to the topology. In this case, we would travel up the topology as shown below.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubj)}(hhh]j)}(hhh]j)}(h0.. kernel-figure:: dp-mst/topology-figure-3.dot h]h}(h]h ]h"]h$]h&]uri gpu/dp-mst/topology-figure-3.dotj}j9j~suh1jhjphhhKubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhjcubh)}(h[And finally, remove payload #2 by communicating with port #2 through sideband transactions.h]h[And finally, remove payload #2 by communicating with port #2 through sideband transactions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubeh}(h]$refcount-relationships-in-a-topologyah ]h"]$refcount relationships in a topologyah$]h&]uh1hhjhhhNhNubeh}(h]id2ah ]h"]h$]overviewah&]uh1hhjhhhhhMj;Kubh)}(hhh](h)}(hFunctions Referenceh]hFunctions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM#ubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_mst_port (C struct)c.drm_dp_mst_porthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_porth]j)}(hstruct drm_dp_mst_porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_dp_mst_porth]j)}(hjh]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hMST porth]hMST port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK`.lock. ``mcs`` message capability status - DP 1.2 spec. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``ddps`` DisplayPort Device Plug Status - DP 1.2. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``pdt`` Peer Device Type. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``ldps`` Legacy Device Plug Status. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``dpcd_rev`` DPCD revision of device on this port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``num_sdp_streams`` Number of simultaneous streams. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``num_sdp_stream_sinks`` Number of stream sinks. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``full_pbn`` Max possible bandwidth for this port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``next`` link to next port on this branch device ``mstb`` the branch device connected to this port, if there is one. This should be considered protected for reading by :c:type:`drm_dp_mst_topology_mgr.lock `. There are two exceptions to this: :c:type:`drm_dp_mst_topology_mgr.up_req_work ` and :c:type:`drm_dp_mst_topology_mgr.work `, which do not grab :c:type:`drm_dp_mst_topology_mgr.lock ` during reads but are the only updaters of this list and are protected from writing concurrently by :c:type:`drm_dp_mst_topology_mgr.probe_lock `. ``aux`` i2c aux transport to talk to device connected to this port, protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``passthrough_aux`` parent aux to which DSC pass-through requests should be sent, only set if DSC pass-through is possible. ``parent`` branch device parent of this port ``connector`` DRM connector this port is connected to. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. ``mgr`` topology manager this port lives under. ``cached_edid`` for DP logical ports - make tiling work by ensuring that the EDID for all connectors is read immediately. ``fec_capable`` bool indicating if FEC can be supported up to that point in the MST topology. h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubh:}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK@hj3ubj@)}(hXstruct drm_dp_mst_port { struct kref topology_kref; struct kref malloc_kref; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct drm_dp_mst_topology_ref_history topology_ref_history; #endif; u8 port_num; bool input; bool mcs; bool ddps; u8 pdt; bool ldps; u8 dpcd_rev; u8 num_sdp_streams; u8 num_sdp_stream_sinks; uint16_t full_pbn; struct list_head next; struct drm_dp_mst_branch *mstb; struct drm_dp_aux aux; struct drm_dp_aux *passthrough_aux; struct drm_dp_mst_branch *parent; struct drm_connector *connector; struct drm_dp_mst_topology_mgr *mgr; const struct drm_edid *cached_edid; bool fec_capable; };h]hXstruct drm_dp_mst_port { struct kref topology_kref; struct kref malloc_kref; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct drm_dp_mst_topology_ref_history topology_ref_history; #endif; u8 port_num; bool input; bool mcs; bool ddps; u8 pdt; bool ldps; u8 dpcd_rev; u8 num_sdp_streams; u8 num_sdp_stream_sinks; uint16_t full_pbn; struct list_head next; struct drm_dp_mst_branch *mstb; struct drm_dp_aux aux; struct drm_dp_aux *passthrough_aux; struct drm_dp_mst_branch *parent; struct drm_connector *connector; struct drm_dp_mst_topology_mgr *mgr; const struct drm_edid *cached_edid; bool fec_capable; };}hjTsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKBhj3ubh)}(h **Members**h]j%)}(hjeh]hMembers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK]hj3ubji)}(hhh](jn)}(hw``topology_kref`` refcount for this port's lifetime in the topology, only the DP MST helpers should need to touch this h](jt)}(h``topology_kref``h]jz)}(hjh]h topology_kref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKahj~ubj)}(hhh]h)}(hdrefcount for this port's lifetime in the topology, only the DP MST helpers should need to touch thish]hfrefcount for this port’s lifetime in the topology, only the DP MST helpers should need to touch this}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK`hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhKahj{ubjn)}(h``malloc_kref`` refcount for the memory allocation containing this structure. See drm_dp_mst_get_port_malloc() and drm_dp_mst_put_port_malloc(). h](jt)}(h``malloc_kref``h]jz)}(hjh]h malloc_kref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhhjubj)}(hhh]h)}(hrefcount for the memory allocation containing this structure. See drm_dp_mst_get_port_malloc() and drm_dp_mst_put_port_malloc().h]hrefcount for the memory allocation containing this structure. See drm_dp_mst_get_port_malloc() and drm_dp_mst_put_port_malloc().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhhj{ubjn)}(hv``topology_ref_history`` A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS. h](jt)}(h``topology_ref_history``h]jz)}(hjh]htopology_ref_history}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKohjubj)}(hhh]h)}(h\A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS.h]h\A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKohj{ubjn)}(h``port_num`` port number h](jt)}(h ``port_num``h]jz)}(hj2h]hport_num}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK>hj,ubj)}(hhh]h)}(h port numberh]h port number}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK>hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhK>hj{ubjn)}(h}``input`` if this port is an input port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h ``input``h]jz)}(hjkh]hinput}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK@hjeubj)}(hhh]h)}(hrif this port is an input port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h,if this port is an input port. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK?hjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK?hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhK@hj{ubjn)}(h``mcs`` message capability status - DP 1.2 spec. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``mcs``h]jz)}(hjh]hmcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKBhjubj)}(hhh]h)}(h|message capability status - DP 1.2 spec. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h6message capability status - DP 1.2 spec. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKAhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKBhj{ubjn)}(h``ddps`` DisplayPort Device Plug Status - DP 1.2. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``ddps``h]jz)}(hj%h]hddps}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKDhjubj)}(hhh]h)}(h|DisplayPort Device Plug Status - DP 1.2. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h6DisplayPort Device Plug Status - DP 1.2. Protected by }(hj>hhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjHh]hdrm_dp_mst_topology_mgr.base}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKChj>ubh.lock.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehKChj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hKDhj{ubjn)}(hn``pdt`` Peer Device Type. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``pdt``h]jz)}(hjh]hpdt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKFhj|ubj)}(hhh]h)}(hePeer Device Type. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](hPeer Device Type. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKEhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKEhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhjhKFhj{ubjn)}(hx``ldps`` Legacy Device Plug Status. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``ldps``h]jz)}(hjh]hldps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKHhjubj)}(hhh]h)}(hnLegacy Device Plug Status. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h(Legacy Device Plug Status. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKGhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKHhj{ubjn)}(h``dpcd_rev`` DPCD revision of device on this port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h ``dpcd_rev``h]jz)}(hj<h]hdpcd_rev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKJhj6ubj)}(hhh]h)}(hyDPCD revision of device on this port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h3DPCD revision of device on this port. Protected by }(hjUhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hj_h]hdrm_dp_mst_topology_mgr.base}(hjahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKIhjUubh.lock.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hKIhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhKJhj{ubjn)}(h``num_sdp_streams`` Number of simultaneous streams. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``num_sdp_streams``h]jz)}(hjh]hnum_sdp_streams}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKLhjubj)}(hhh]h)}(hsNumber of simultaneous streams. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h-Number of simultaneous streams. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKKhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKLhj{ubjn)}(h``num_sdp_stream_sinks`` Number of stream sinks. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``num_sdp_stream_sinks``h]jz)}(hjh]hnum_sdp_stream_sinks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKNhjubj)}(hhh]h)}(hkNumber of stream sinks. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h%Number of stream sinks. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKMhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hKMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKNhj{ubjn)}(h``full_pbn`` Max possible bandwidth for this port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h ``full_pbn``h]jz)}(hjSh]hfull_pbn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKPhjMubj)}(hhh]h)}(hyMax possible bandwidth for this port. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h3Max possible bandwidth for this port. Protected by }(hjlhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjvh]hdrm_dp_mst_topology_mgr.base}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKOhjlubh.lock.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKOhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhKPhj{ubjn)}(h1``next`` link to next port on this branch device h](jt)}(h``next``h]jz)}(hjh]hnext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKQhjubj)}(hhh]h)}(h'link to next port on this branch deviceh]h'link to next port on this branch device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKQhj{ubjn)}(hXg``mstb`` the branch device connected to this port, if there is one. This should be considered protected for reading by :c:type:`drm_dp_mst_topology_mgr.lock `. There are two exceptions to this: :c:type:`drm_dp_mst_topology_mgr.up_req_work ` and :c:type:`drm_dp_mst_topology_mgr.work `, which do not grab :c:type:`drm_dp_mst_topology_mgr.lock ` during reads but are the only updaters of this list and are protected from writing concurrently by :c:type:`drm_dp_mst_topology_mgr.probe_lock `. h](jt)}(h``mstb``h]jz)}(hjh]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hX]the branch device connected to this port, if there is one. This should be considered protected for reading by :c:type:`drm_dp_mst_topology_mgr.lock `. There are two exceptions to this: :c:type:`drm_dp_mst_topology_mgr.up_req_work ` and :c:type:`drm_dp_mst_topology_mgr.work `, which do not grab :c:type:`drm_dp_mst_topology_mgr.lock ` during reads but are the only updaters of this list and are protected from writing concurrently by :c:type:`drm_dp_mst_topology_mgr.probe_lock `.h](hnthe branch device connected to this port, if there is one. This should be considered protected for reading by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hj h]hdrm_dp_mst_topology_mgr.lock}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubh$. There are two exceptions to this: }(hjhhhNhNubh)}(hG:c:type:`drm_dp_mst_topology_mgr.up_req_work `h]jz)}(hj0h]h#drm_dp_mst_topology_mgr.up_req_work}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj)hKhjubh and }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.work `h]jz)}(hjSh]hdrm_dp_mst_topology_mgr.work}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj)hKhjubh, which do not grab }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hjvh]hdrm_dp_mst_topology_mgr.lock}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj)hKhjubhd during reads but are the only updaters of this list and are protected from writing concurrently by }(hjhhhNhNubh)}(hF:c:type:`drm_dp_mst_topology_mgr.probe_lock `h]jz)}(hjh]h"drm_dp_mst_topology_mgr.probe_lock}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj)hKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj{ubjn)}(h``aux`` i2c aux transport to talk to device connected to this port, protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``aux``h]jz)}(hjh]haux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKShjubj)}(hhh]h)}(hi2c aux transport to talk to device connected to this port, protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](hIi2c aux transport to talk to device connected to this port, protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKRhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKShj{ubjn)}(h|``passthrough_aux`` parent aux to which DSC pass-through requests should be sent, only set if DSC pass-through is possible. h](jt)}(h``passthrough_aux``h]jz)}(hj/h]hpassthrough_aux}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKUhj)ubj)}(hhh]h)}(hgparent aux to which DSC pass-through requests should be sent, only set if DSC pass-through is possible.h]hgparent aux to which DSC pass-through requests should be sent, only set if DSC pass-through is possible.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKThjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhKUhj{ubjn)}(h-``parent`` branch device parent of this port h](jt)}(h ``parent``h]jz)}(hjih]hparent}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKVhjcubj)}(hhh]h)}(h!branch device parent of this porth]h!branch device parent of this port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKVhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj~hKVhj{ubjn)}(h``connector`` DRM connector this port is connected to. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h ``connector``h]jz)}(hjh]h connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKXhjubj)}(hhh]h)}(h|DRM connector this port is connected to. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](h6DRM connector this port is connected to. Protected by }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.base}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKWhjubh.lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKXhj{ubjn)}(h0``mgr`` topology manager this port lives under. h](jt)}(h``mgr``h]jz)}(hjh]hmgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKYhjubj)}(hhh]h)}(h'topology manager this port lives under.h]h'topology manager this port lives under.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKYhj{ubjn)}(hz``cached_edid`` for DP logical ports - make tiling work by ensuring that the EDID for all connectors is read immediately. h](jt)}(h``cached_edid``h]jz)}(hj8h]h cached_edid}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj2ubj)}(hhh]h)}(hifor DP logical ports - make tiling work by ensuring that the EDID for all connectors is read immediately.h]hifor DP logical ports - make tiling work by ensuring that the EDID for all connectors is read immediately.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhKhj{ubjn)}(h]``fec_capable`` bool indicating if FEC can be supported up to that point in the MST topology.h](jt)}(h``fec_capable``h]jz)}(hjrh]h fec_capable}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjlubj)}(hhh]h)}(hMbool indicating if FEC can be supported up to that point in the MST topology.h]hMbool indicating if FEC can be supported up to that point in the MST topology.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj{ubeh}(h]h ]h"]h$]h&]uh1jhhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjhhubh)}(hYThis structure represents an MST port endpoint on a device somewhere in the MST topology.h]hYThis structure represents an MST port endpoint on a device somewhere in the MST topology.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKZhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_mst_branch (C struct)c.drm_dp_mst_branchhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_branchh]j)}(hstruct drm_dp_mst_branchh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhK`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK`ubj)}(hdrm_dp_mst_branchh]j)}(hjh]hdrm_dp_mst_branch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK`ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK`ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK`hjhhubj)}(hhh]h)}(hMST branch device.h]hMST branch device.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj1hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK`ubeh}(h]h ](jstructeh"]h$]h&]jjjjLjjLjjjuh1jhhhjhNhNubj)}(hX) **Definition**:: struct drm_dp_mst_branch { struct kref topology_kref; struct kref malloc_kref; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct drm_dp_mst_topology_ref_history topology_ref_history; #endif; struct list_head destroy_next; u8 rad[8]; u8 lct; int num_ports; struct list_head ports; struct drm_dp_mst_port *port_parent; struct drm_dp_mst_topology_mgr *mgr; bool link_address_sent; guid_t guid; }; **Members** ``topology_kref`` refcount for this branch device's lifetime in the topology, only the DP MST helpers should need to touch this ``malloc_kref`` refcount for the memory allocation containing this structure. See drm_dp_mst_get_mstb_malloc() and drm_dp_mst_put_mstb_malloc(). ``topology_ref_history`` A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS. ``destroy_next`` linked-list entry used by drm_dp_delayed_destroy_work() ``rad`` Relative Address of the MST branch. For :c:type:`drm_dp_mst_topology_mgr.mst_primary `, it's rad[8] are all 0, unset and unused. For MST branches connected after mst_primary, in each element of rad[] the nibbles are ordered by the most signifcant 4 bits first and the least significant 4 bits second. ``lct`` Link count total to talk to this branch device. ``num_ports`` number of ports on the branch. ``ports`` the list of ports on this branch device. This should be considered protected for reading by :c:type:`drm_dp_mst_topology_mgr.lock `. There are two exceptions to this: :c:type:`drm_dp_mst_topology_mgr.up_req_work ` and :c:type:`drm_dp_mst_topology_mgr.work `, which do not grab :c:type:`drm_dp_mst_topology_mgr.lock ` during reads but are the only updaters of this list and are protected from updating the list concurrently by **drm_dp_mst_topology_mgr.probe_lock** ``port_parent`` pointer to the port parent, NULL if toplevel. ``mgr`` topology manager for this branch device. ``link_address_sent`` if a link address message has been sent to this device yet. ``guid`` guid for DP 1.2 branch device. port under this branch can be identified by port #.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh:}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjPubj@)}(hXstruct drm_dp_mst_branch { struct kref topology_kref; struct kref malloc_kref; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct drm_dp_mst_topology_ref_history topology_ref_history; #endif; struct list_head destroy_next; u8 rad[8]; u8 lct; int num_ports; struct list_head ports; struct drm_dp_mst_port *port_parent; struct drm_dp_mst_topology_mgr *mgr; bool link_address_sent; guid_t guid; };h]hXstruct drm_dp_mst_branch { struct kref topology_kref; struct kref malloc_kref; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct drm_dp_mst_topology_ref_history topology_ref_history; #endif; struct list_head destroy_next; u8 rad[8]; u8 lct; int num_ports; struct list_head ports; struct drm_dp_mst_port *port_parent; struct drm_dp_mst_topology_mgr *mgr; bool link_address_sent; guid_t guid; };}hjqsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjPubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjPubji)}(hhh](jn)}(h``topology_kref`` refcount for this branch device's lifetime in the topology, only the DP MST helpers should need to touch this h](jt)}(h``topology_kref``h]jz)}(hjh]h topology_kref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hmrefcount for this branch device's lifetime in the topology, only the DP MST helpers should need to touch thish]horefcount for this branch device’s lifetime in the topology, only the DP MST helpers should need to touch this}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``malloc_kref`` refcount for the memory allocation containing this structure. See drm_dp_mst_get_mstb_malloc() and drm_dp_mst_put_mstb_malloc(). h](jt)}(h``malloc_kref``h]jz)}(hjh]h malloc_kref}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hrefcount for the memory allocation containing this structure. See drm_dp_mst_get_mstb_malloc() and drm_dp_mst_put_mstb_malloc().h]hrefcount for the memory allocation containing this structure. See drm_dp_mst_get_mstb_malloc() and drm_dp_mst_put_mstb_malloc().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hv``topology_ref_history`` A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS. h](jt)}(h``topology_ref_history``h]jz)}(hjh]htopology_ref_history}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h\A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS.h]h\A history of each topology reference/dereference. See CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj*hKhjubjn)}(hI``destroy_next`` linked-list entry used by drm_dp_delayed_destroy_work() h](jt)}(h``destroy_next``h]jz)}(hjOh]h destroy_next}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjIubj)}(hhh]h)}(h7linked-list entry used by drm_dp_delayed_destroy_work()h]h7linked-list entry used by drm_dp_delayed_destroy_work()}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhKhjubjn)}(hXN``rad`` Relative Address of the MST branch. For :c:type:`drm_dp_mst_topology_mgr.mst_primary `, it's rad[8] are all 0, unset and unused. For MST branches connected after mst_primary, in each element of rad[] the nibbles are ordered by the most signifcant 4 bits first and the least significant 4 bits second. h](jt)}(h``rad``h]jz)}(hjh]hrad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hXERelative Address of the MST branch. For :c:type:`drm_dp_mst_topology_mgr.mst_primary `, it's rad[8] are all 0, unset and unused. For MST branches connected after mst_primary, in each element of rad[] the nibbles are ordered by the most signifcant 4 bits first and the least significant 4 bits second.h](h(Relative Address of the MST branch. For }(hjhhhNhNubh)}(hG:c:type:`drm_dp_mst_topology_mgr.mst_primary `h]jz)}(hjh]h#drm_dp_mst_topology_mgr.mst_primary}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubh, it’s rad[8] are all 0, unset and unused. For MST branches connected after mst_primary, in each element of rad[] the nibbles are ordered by the most signifcant 4 bits first and the least significant 4 bits second.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h8``lct`` Link count total to talk to this branch device. h](jt)}(h``lct``h]jz)}(hjh]hlct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h/Link count total to talk to this branch device.h]h/Link count total to talk to this branch device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h-``num_ports`` number of ports on the branch. h](jt)}(h ``num_ports``h]jz)}(hjh]h num_ports}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hnumber of ports on the branch.h]hnumber of ports on the branch.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hKhjubjn)}(hX?``ports`` the list of ports on this branch device. This should be considered protected for reading by :c:type:`drm_dp_mst_topology_mgr.lock `. There are two exceptions to this: :c:type:`drm_dp_mst_topology_mgr.up_req_work ` and :c:type:`drm_dp_mst_topology_mgr.work `, which do not grab :c:type:`drm_dp_mst_topology_mgr.lock ` during reads but are the only updaters of this list and are protected from updating the list concurrently by **drm_dp_mst_topology_mgr.probe_lock** h](jt)}(h ``ports``h]jz)}(hjXh]hports}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjRubj)}(hhh]h)}(hX4the list of ports on this branch device. This should be considered protected for reading by :c:type:`drm_dp_mst_topology_mgr.lock `. There are two exceptions to this: :c:type:`drm_dp_mst_topology_mgr.up_req_work ` and :c:type:`drm_dp_mst_topology_mgr.work `, which do not grab :c:type:`drm_dp_mst_topology_mgr.lock ` during reads but are the only updaters of this list and are protected from updating the list concurrently by **drm_dp_mst_topology_mgr.probe_lock**h](h\the list of ports on this branch device. This should be considered protected for reading by }(hjqhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hj{h]hdrm_dp_mst_topology_mgr.lock}(hj}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjqubh$. There are two exceptions to this: }(hjqhhhNhNubh)}(hG:c:type:`drm_dp_mst_topology_mgr.up_req_work `h]jz)}(hjh]h#drm_dp_mst_topology_mgr.up_req_work}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjhKhjqubh and }(hjqhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.work `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.work}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjhKhjqubh, which do not grab }(hjqhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hjh]hdrm_dp_mst_topology_mgr.lock}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjhKhjqubhn during reads but are the only updaters of this list and are protected from updating the list concurrently by }(hjqhhhNhNubj%)}(h&**drm_dp_mst_topology_mgr.probe_lock**h]h"drm_dp_mst_topology_mgr.probe_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubeh}(h]h ]h"]h$]h&]uh1hhjhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhKhjubjn)}(h>``port_parent`` pointer to the port parent, NULL if toplevel. h](jt)}(h``port_parent``h]jz)}(hj,h]h port_parent}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj&ubj)}(hhh]h)}(h-pointer to the port parent, NULL if toplevel.h]h-pointer to the port parent, NULL if toplevel.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhKhjubjn)}(h1``mgr`` topology manager for this branch device. h](jt)}(h``mgr``h]jz)}(hjeh]hmgr}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj_ubj)}(hhh]h)}(h(topology manager for this branch device.h]h(topology manager for this branch device.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhKhjubjn)}(hR``link_address_sent`` if a link address message has been sent to this device yet. h](jt)}(h``link_address_sent``h]jz)}(hjh]hlink_address_sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h;if a link address message has been sent to this device yet.h]h;if a link address message has been sent to this device yet.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h[``guid`` guid for DP 1.2 branch device. port under this branch can be identified by port #.h](jt)}(h``guid``h]jz)}(hjh]hguid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hRguid for DP 1.2 branch device. port under this branch can be identified by port #.h]hRguid for DP 1.2 branch device. port under this branch can be identified by port #.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjhhubh)}(hThis structure represents an MST branch device, there is one primary branch device at the root, along with any other branches connected to downstream port of parent branches.h]hThis structure represents an MST branch device, there is one primary branch device at the root, along with any other branches connected to downstream port of parent branches.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_atomic_payload (C struct)c.drm_dp_mst_atomic_payloadhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_atomic_payloadh]j)}(h struct drm_dp_mst_atomic_payloadh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjdhKubj)}(hdrm_dp_mst_atomic_payloadh]j)}(hjQh]hdrm_dp_mst_atomic_payload}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjdhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjdhKubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jhjdhKhjLhhubj)}(hhh]h)}(h&Atomic state struct for an MST payloadh]h&Atomic state struct for an MST payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjdhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX **Definition**:: struct drm_dp_mst_atomic_payload { struct drm_dp_mst_port *port; s8 vc_start_slot; u8 vcpi; int time_slots; int pbn; bool delete : 1; bool dsc_enabled : 1; enum drm_dp_mst_payload_allocation payload_allocation_status; struct list_head next; }; **Members** ``port`` The MST port assigned to this payload ``vc_start_slot`` The time slot that this payload starts on. Because payload start slots can't be determined ahead of time, the contents of this value are UNDEFINED at atomic check time. This shouldn't usually matter, as the start slot should never be relevant for atomic state computations. Since this value is determined at commit time instead of check time, this value is protected by the MST helpers ensuring that async commits operating on the given topology never run in parallel. In the event that a driver does need to read this value (e.g. to inform hardware of the starting timeslot for a payload), the driver may either: * Read this field during the atomic commit after drm_dp_mst_atomic_wait_for_dependencies() has been called, which will ensure the previous MST states payload start slots have been copied over to the new state. Note that a new start slot won't be assigned/removed from this payload until drm_dp_add_payload_part1()/drm_dp_remove_payload_part2() have been called. * Acquire the MST modesetting lock, and then wait for any pending MST-related commits to get committed to hardware by calling drm_crtc_commit_wait() on each of the :c:type:`drm_crtc_commit` structs in :c:type:`drm_dp_mst_topology_state.commit_deps `. If neither of the two above solutions suffice (e.g. the driver needs to read the start slot in the middle of an atomic commit without waiting for some reason), then drivers should cache this value themselves after changing payloads. ``vcpi`` The Virtual Channel Payload Identifier ``time_slots`` The number of timeslots allocated to this payload from the source DP Tx to the immediate downstream DP Rx ``pbn`` The payload bandwidth for this payload ``delete`` Whether or not we intend to delete this payload during this atomic commit ``dsc_enabled`` Whether or not this payload has DSC enabled ``payload_allocation_status`` The allocation status of this payload ``next`` The list node for this payloadh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj@)}(hXstruct drm_dp_mst_atomic_payload { struct drm_dp_mst_port *port; s8 vc_start_slot; u8 vcpi; int time_slots; int pbn; bool delete : 1; bool dsc_enabled : 1; enum drm_dp_mst_payload_allocation payload_allocation_status; struct list_head next; };h]hXstruct drm_dp_mst_atomic_payload { struct drm_dp_mst_port *port; s8 vc_start_slot; u8 vcpi; int time_slots; int pbn; bool delete : 1; bool dsc_enabled : 1; enum drm_dp_mst_payload_allocation payload_allocation_status; struct list_head next; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM$hjubji)}(hhh](jn)}(h/``port`` The MST port assigned to this payload h](jt)}(h``port``h]jz)}(hjh]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h%The MST port assigned to this payloadh]h%The MST port assigned to this payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hX``vc_start_slot`` The time slot that this payload starts on. Because payload start slots can't be determined ahead of time, the contents of this value are UNDEFINED at atomic check time. This shouldn't usually matter, as the start slot should never be relevant for atomic state computations. Since this value is determined at commit time instead of check time, this value is protected by the MST helpers ensuring that async commits operating on the given topology never run in parallel. In the event that a driver does need to read this value (e.g. to inform hardware of the starting timeslot for a payload), the driver may either: * Read this field during the atomic commit after drm_dp_mst_atomic_wait_for_dependencies() has been called, which will ensure the previous MST states payload start slots have been copied over to the new state. Note that a new start slot won't be assigned/removed from this payload until drm_dp_add_payload_part1()/drm_dp_remove_payload_part2() have been called. * Acquire the MST modesetting lock, and then wait for any pending MST-related commits to get committed to hardware by calling drm_crtc_commit_wait() on each of the :c:type:`drm_crtc_commit` structs in :c:type:`drm_dp_mst_topology_state.commit_deps `. If neither of the two above solutions suffice (e.g. the driver needs to read the start slot in the middle of an atomic commit without waiting for some reason), then drivers should cache this value themselves after changing payloads. h](jt)}(h``vc_start_slot``h]jz)}(hj?h]h vc_start_slot}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM2hj9ubj)}(hhh](h)}(hXThe time slot that this payload starts on. Because payload start slots can't be determined ahead of time, the contents of this value are UNDEFINED at atomic check time. This shouldn't usually matter, as the start slot should never be relevant for atomic state computations.h]hXThe time slot that this payload starts on. Because payload start slots can’t be determined ahead of time, the contents of this value are UNDEFINED at atomic check time. This shouldn’t usually matter, as the start slot should never be relevant for atomic state computations.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjUubh)}(hXSSince this value is determined at commit time instead of check time, this value is protected by the MST helpers ensuring that async commits operating on the given topology never run in parallel. In the event that a driver does need to read this value (e.g. to inform hardware of the starting timeslot for a payload), the driver may either:h]hXSSince this value is determined at commit time instead of check time, this value is protected by the MST helpers ensuring that async commits operating on the given topology never run in parallel. In the event that a driver does need to read this value (e.g. to inform hardware of the starting timeslot for a payload), the driver may either:}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM"hjUubh)}(hhh](h)}(hXgRead this field during the atomic commit after drm_dp_mst_atomic_wait_for_dependencies() has been called, which will ensure the previous MST states payload start slots have been copied over to the new state. Note that a new start slot won't be assigned/removed from this payload until drm_dp_add_payload_part1()/drm_dp_remove_payload_part2() have been called.h]h)}(hXgRead this field during the atomic commit after drm_dp_mst_atomic_wait_for_dependencies() has been called, which will ensure the previous MST states payload start slots have been copied over to the new state. Note that a new start slot won't be assigned/removed from this payload until drm_dp_add_payload_part1()/drm_dp_remove_payload_part2() have been called.h]hXiRead this field during the atomic commit after drm_dp_mst_atomic_wait_for_dependencies() has been called, which will ensure the previous MST states payload start slots have been copied over to the new state. Note that a new start slot won’t be assigned/removed from this payload until drm_dp_add_payload_part1()/drm_dp_remove_payload_part2() have been called.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM'hjyubah}(h]h ]h"]h$]h&]uh1hhjvubh)}(hXAcquire the MST modesetting lock, and then wait for any pending MST-related commits to get committed to hardware by calling drm_crtc_commit_wait() on each of the :c:type:`drm_crtc_commit` structs in :c:type:`drm_dp_mst_topology_state.commit_deps `. h]h)}(hXAcquire the MST modesetting lock, and then wait for any pending MST-related commits to get committed to hardware by calling drm_crtc_commit_wait() on each of the :c:type:`drm_crtc_commit` structs in :c:type:`drm_dp_mst_topology_state.commit_deps `.h](hAcquire the MST modesetting lock, and then wait for any pending MST-related commits to get committed to hardware by calling drm_crtc_commit_wait() on each of the }(hjhhhNhNubh)}(h:c:type:`drm_crtc_commit`h]jz)}(hjh]hdrm_crtc_commit}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_commituh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM,hjubh structs in }(hjhhhNhNubh)}(hK:c:type:`drm_dp_mst_topology_state.commit_deps `h]jz)}(hjh]h%drm_dp_mst_topology_state.commit_deps}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhjhM,hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1hhjvubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhM'hjUubh)}(hIf neither of the two above solutions suffice (e.g. the driver needs to read the start slot in the middle of an atomic commit without waiting for some reason), then drivers should cache this value themselves after changing payloads.h]hIf neither of the two above solutions suffice (e.g. the driver needs to read the start slot in the middle of an atomic commit without waiting for some reason), then drivers should cache this value themselves after changing payloads.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM0hjUubeh}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThM2hjubjn)}(h0``vcpi`` The Virtual Channel Payload Identifier h](jt)}(h``vcpi``h]jz)}(hjh]hvcpi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h&The Virtual Channel Payload Identifierh]h&The Virtual Channel Payload Identifier}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hKhjubjn)}(hy``time_slots`` The number of timeslots allocated to this payload from the source DP Tx to the immediate downstream DP Rx h](jt)}(h``time_slots``h]jz)}(hjQh]h time_slotsE}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM:hjKubj)}(hhh]h)}(hiThe number of timeslots allocated to this payload from the source DP Tx to the immediate downstream DP Rxh]hiThe number of timeslots allocated to this payload from the source DP Tx to the immediate downstream DP Rx}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM9hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhM:hjubjn)}(h/``pbn`` The payload bandwidth for this payload h](jt)}(h``pbn``h]jz)}(hjh]hpbn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h&The payload bandwidth for this payloadh]h&The payload bandwidth for this payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hU``delete`` Whether or not we intend to delete this payload during this atomic commit h](jt)}(h ``delete``h]jz)}(hjh]hdelete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hIWhether or not we intend to delete this payload during this atomic commith]hIWhether or not we intend to delete this payload during this atomic commit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h<``dsc_enabled`` Whether or not this payload has DSC enabled h](jt)}(h``dsc_enabled``h]jz)}(hjh]h dsc_enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h+Whether or not this payload has DSC enabledh]h+Whether or not this payload has DSC enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hD``payload_allocation_status`` The allocation status of this payload h](jt)}(h``payload_allocation_status``h]jz)}(hj6h]hpayload_allocation_status}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj0ubj)}(hhh]h)}(h%The allocation status of this payloadh]h%The allocation status of this payload}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhKhjubjn)}(h'``next`` The list node for this payloadh](jt)}(h``next``h]jz)}(hjoh]hnext}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjiubj)}(hhh]h)}(hThe list node for this payloadh]hThe list node for this payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjhhubh)}(hThe primary atomic state structure for a given MST payload. Stores information like current bandwidth allocation, intended action for this payload, etc.h]hThe primary atomic state structure for a given MST payload. Stores information like current bandwidth allocation, intended action for this payload, etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_topology_state (C struct)c.drm_dp_mst_topology_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_topology_stateh]j)}(h struct drm_dp_mst_topology_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_mst_topology_stateh]j)}(hjh]hdrm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h%DisplayPort MST topology atomic stateh]h%DisplayPort MST topology atomic state}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMMhj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjJjjJjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_mst_topology_state { struct drm_private_state base; struct drm_dp_mst_topology_mgr *mgr; u32 pending_crtc_mask; struct drm_crtc_commit **commit_deps; size_t num_commit_deps; u32 payload_mask; struct list_head payloads; u8 total_avail_slots; u8 start_slot; fixed20_12 pbn_div; }; **Members** ``base`` Base private state for atomic ``mgr`` The topology manager ``pending_crtc_mask`` A bitmask of all CRTCs this topology state touches, drivers may modify this to add additional dependencies if needed. ``commit_deps`` A list of all CRTC commits affecting this topology, this field isn't populated until drm_dp_mst_atomic_wait_for_dependencies() is called. ``num_commit_deps`` The number of CRTC commits in **commit_deps** ``payload_mask`` A bitmask of allocated VCPIs, used for VCPI assignments ``payloads`` The list of payloads being created/destroyed in this state ``total_avail_slots`` The total number of slots this topology can handle (63 or 64) ``start_slot`` The first usable time slot in this topology (1 or 0) ``pbn_div`` The current PBN divisor for this topology. The driver is expected to fill this out itself.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubh:}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMQhjNubj@)}(hXLstruct drm_dp_mst_topology_state { struct drm_private_state base; struct drm_dp_mst_topology_mgr *mgr; u32 pending_crtc_mask; struct drm_crtc_commit **commit_deps; size_t num_commit_deps; u32 payload_mask; struct list_head payloads; u8 total_avail_slots; u8 start_slot; fixed20_12 pbn_div; };h]hXLstruct drm_dp_mst_topology_state { struct drm_private_state base; struct drm_dp_mst_topology_mgr *mgr; u32 pending_crtc_mask; struct drm_crtc_commit **commit_deps; size_t num_commit_deps; u32 payload_mask; struct list_head payloads; u8 total_avail_slots; u8 start_slot; fixed20_12 pbn_div; };}hjosbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMShjNubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM`hjNubji)}(hhh](jn)}(h'``base`` Base private state for atomic h](jt)}(h``base``h]jz)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMRhjubj)}(hhh]h)}(hBase private state for atomich]hBase private state for atomic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMRhjubjn)}(h``mgr`` The topology manager h](jt)}(h``mgr``h]jz)}(hjh]hmgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(hThe topology managerh]hThe topology manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``pending_crtc_mask`` A bitmask of all CRTCs this topology state touches, drivers may modify this to add additional dependencies if needed. h](jt)}(h``pending_crtc_mask``h]jz)}(hjh]hpending_crtc_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM[hj ubj)}(hhh]h)}(huA bitmask of all CRTCs this topology state touches, drivers may modify this to add additional dependencies if needed.h]huA bitmask of all CRTCs this topology state touches, drivers may modify this to add additional dependencies if needed.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMZhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj&hM[hjubjn)}(h``commit_deps`` A list of all CRTC commits affecting this topology, this field isn't populated until drm_dp_mst_atomic_wait_for_dependencies() is called. h](jt)}(h``commit_deps``h]jz)}(hjKh]h commit_deps}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM`hjEubj)}(hhh]h)}(hA list of all CRTC commits affecting this topology, this field isn't populated until drm_dp_mst_atomic_wait_for_dependencies() is called.h]hA list of all CRTC commits affecting this topology, this field isn’t populated until drm_dp_mst_atomic_wait_for_dependencies() is called.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM_hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hM`hjubjn)}(hB``num_commit_deps`` The number of CRTC commits in **commit_deps** h](jt)}(h``num_commit_deps``h]jz)}(hjh]hnum_commit_deps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h-The number of CRTC commits in **commit_deps**h](hThe number of CRTC commits in }(hjhhhNhNubj%)}(h**commit_deps**h]h commit_deps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hI``payload_mask`` A bitmask of allocated VCPIs, used for VCPI assignments h](jt)}(h``payload_mask``h]jz)}(hjh]h payload_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h7A bitmask of allocated VCPIs, used for VCPI assignmentsh]h7A bitmask of allocated VCPIs, used for VCPI assignments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hH``payloads`` The list of payloads being created/destroyed in this state h](jt)}(h ``payloads``h]jz)}(hjh]hpayloads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjubj)}(hhh]h)}(h:The list of payloads being created/destroyed in this stateh]h:The list of payloads being created/destroyed in this state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hT``total_avail_slots`` The total number of slots this topology can handle (63 or 64) h](jt)}(h``total_avail_slots``h]jz)}(hj>h]htotal_avail_slots}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhj8ubj)}(hhh]h)}(h=The total number of slots this topology can handle (63 or 64)h]h=The total number of slots this topology can handle (63 or 64)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShKhjubjn)}(hD``start_slot`` The first usable time slot in this topology (1 or 0) h](jt)}(h``start_slot``h]jz)}(hjwh]h start_slot}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhKhjqubj)}(hhh]h)}(h4The first usable time slot in this topology (1 or 0)h]h4The first usable time slot in this topology (1 or 0)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hf``pbn_div`` The current PBN divisor for this topology. The driver is expected to fill this out itself.h](jt)}(h ``pbn_div``h]jz)}(hjh]hpbn_div}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMqhjubj)}(hhh]h)}(hZThe current PBN divisor for this topology. The driver is expected to fill this out itself.h]hZThe current PBN divisor for this topology. The driver is expected to fill this out itself.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMqhjubeh}(h]h ]h"]h$]h&]uh1jhhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMuhjhhubh)}(hOThis struct represents the atomic state of the toplevel DisplayPort MST managerh]hOThis struct represents the atomic state of the toplevel DisplayPort MST manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMNhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_mst_topology_mgr (C struct)c.drm_dp_mst_topology_mgrhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_topology_mgrh]j)}(hstruct drm_dp_mst_topology_mgrh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMSubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj=hMSubj)}(hdrm_dp_mst_topology_mgrh]j)}(hj*h]hdrm_dp_mst_topology_mgr}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj=hMSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj(hhhj=hMSubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jhj=hMShj%hhubj)}(hhh]h)}(hDisplayPort MST managerh]hDisplayPort MST manager}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMyhjohhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj=hMSubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_dp_mst_topology_mgr { struct drm_private_obj base; struct drm_device *dev; const struct drm_dp_mst_topology_cbs *cbs; int max_dpcd_transaction_bytes; struct drm_dp_aux *aux; int max_payloads; int conn_base_id; struct drm_dp_sideband_msg_rx up_req_recv; struct drm_dp_sideband_msg_rx down_rep_recv; struct mutex lock; struct mutex probe_lock; bool mst_state : 1; bool payload_id_table_cleared : 1; bool reset_rx_state : 1; u8 payload_count; u8 next_start_slot; struct drm_dp_mst_branch *mst_primary; u8 dpcd[DP_RECEIVER_CAP_SIZE]; u8 sink_count; const struct drm_private_state_funcs *funcs; struct mutex qlock; struct list_head tx_msg_downq; wait_queue_head_t tx_waitq; struct work_struct work; struct work_struct tx_work; struct list_head destroy_port_list; struct list_head destroy_branch_device_list; struct mutex delayed_destroy_lock; struct workqueue_struct *delayed_destroy_wq; struct work_struct delayed_destroy_work; struct list_head up_req_list; struct mutex up_req_lock; struct work_struct up_req_work; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct mutex topology_ref_history_lock; #endif; }; **Members** ``base`` Base private object for atomic ``dev`` device pointer for adding i2c devices etc. ``cbs`` callbacks for connector addition and destruction. ``max_dpcd_transaction_bytes`` maximum number of bytes to read/write in one go. ``aux`` AUX channel for the DP MST connector this topolgy mgr is controlling. ``max_payloads`` maximum number of payloads the GPU can generate. ``conn_base_id`` DRM connector ID this mgr is connected to. Only used to build the MST connector path value. ``up_req_recv`` Message receiver state for up requests. ``down_rep_recv`` Message receiver state for replies to down requests. ``lock`` protects **mst_state**, **mst_primary**, **dpcd**, and **payload_id_table_cleared**. ``probe_lock`` Prevents **work** and **up_req_work**, the only writers of :c:type:`drm_dp_mst_port.mstb ` and :c:type:`drm_dp_mst_branch.ports `, from racing while they update the topology. ``mst_state`` If this manager is enabled for an MST capable port. False if no MST sink/branch devices is connected. ``payload_id_table_cleared`` Whether or not we've cleared the payload ID table for **mst_primary**. Protected by **lock**. ``reset_rx_state`` The down request's reply and up request message receiver state must be reset, after the topology manager got removed. Protected by **lock**. ``payload_count`` The number of currently active payloads in hardware. This value is only intended to be used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context. ``next_start_slot`` The starting timeslot to use for new VC payloads. This value is used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context. ``mst_primary`` Pointer to the primary/first branch device. ``dpcd`` Cache of DPCD for primary port. ``sink_count`` Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0. ``funcs`` Atomic helper callbacks ``qlock`` protects **tx_msg_downq** and :c:type:`drm_dp_sideband_msg_tx.state ` ``tx_msg_downq`` List of pending down requests ``tx_waitq`` Wait to queue stall for the tx worker. ``work`` Probe work. ``tx_work`` Sideband transmit worker. This can nest within the main **work** worker for each transaction **work** launches. ``destroy_port_list`` List of to be destroyed connectors. ``destroy_branch_device_list`` List of to be destroyed branch devices. ``delayed_destroy_lock`` Protects **destroy_port_list** and **destroy_branch_device_list**. ``delayed_destroy_wq`` Workqueue used for delayed_destroy_work items. A dedicated WQ makes it possible to drain any requeued work items on it. ``delayed_destroy_work`` Work item to destroy MST port and branch devices, needed to avoid locking inversion. ``up_req_list`` List of pending up requests from the topology that need to be processed, in chronological order. ``up_req_lock`` Protects **up_req_list** ``up_req_work`` Work item to process up requests received from the topology. Needed to avoid blocking hotplug handling and sideband transmissions. ``topology_ref_history_lock`` protects :c:type:`drm_dp_mst_port.topology_ref_history ` and :c:type:`drm_dp_mst_branch.topology_ref_history `.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM}hjubj@)}(hXstruct drm_dp_mst_topology_mgr { struct drm_private_obj base; struct drm_device *dev; const struct drm_dp_mst_topology_cbs *cbs; int max_dpcd_transaction_bytes; struct drm_dp_aux *aux; int max_payloads; int conn_base_id; struct drm_dp_sideband_msg_rx up_req_recv; struct drm_dp_sideband_msg_rx down_rep_recv; struct mutex lock; struct mutex probe_lock; bool mst_state : 1; bool payload_id_table_cleared : 1; bool reset_rx_state : 1; u8 payload_count; u8 next_start_slot; struct drm_dp_mst_branch *mst_primary; u8 dpcd[DP_RECEIVER_CAP_SIZE]; u8 sink_count; const struct drm_private_state_funcs *funcs; struct mutex qlock; struct list_head tx_msg_downq; wait_queue_head_t tx_waitq; struct work_struct work; struct work_struct tx_work; struct list_head destroy_port_list; struct list_head destroy_branch_device_list; struct mutex delayed_destroy_lock; struct workqueue_struct *delayed_destroy_wq; struct work_struct delayed_destroy_work; struct list_head up_req_list; struct mutex up_req_lock; struct work_struct up_req_work; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct mutex topology_ref_history_lock; #endif; };h]hXstruct drm_dp_mst_topology_mgr { struct drm_private_obj base; struct drm_device *dev; const struct drm_dp_mst_topology_cbs *cbs; int max_dpcd_transaction_bytes; struct drm_dp_aux *aux; int max_payloads; int conn_base_id; struct drm_dp_sideband_msg_rx up_req_recv; struct drm_dp_sideband_msg_rx down_rep_recv; struct mutex lock; struct mutex probe_lock; bool mst_state : 1; bool payload_id_table_cleared : 1; bool reset_rx_state : 1; u8 payload_count; u8 next_start_slot; struct drm_dp_mst_branch *mst_primary; u8 dpcd[DP_RECEIVER_CAP_SIZE]; u8 sink_count; const struct drm_private_state_funcs *funcs; struct mutex qlock; struct list_head tx_msg_downq; wait_queue_head_t tx_waitq; struct work_struct work; struct work_struct tx_work; struct list_head destroy_port_list; struct list_head destroy_branch_device_list; struct mutex delayed_destroy_lock; struct workqueue_struct *delayed_destroy_wq; struct work_struct delayed_destroy_work; struct list_head up_req_list; struct mutex up_req_lock; struct work_struct up_req_work; #if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS); struct mutex topology_ref_history_lock; #endif; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubji)}(hhh](jn)}(h(``base`` Base private object for atomic h](jt)}(h``base``h]jz)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hBase private object for atomich]hBase private object for atomic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h3``dev`` device pointer for adding i2c devices etc. h](jt)}(h``dev``h]jz)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h*device pointer for adding i2c devices etc.h]h*device pointer for adding i2c devices etc.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hMhjubjn)}(h:``cbs`` callbacks for connector addition and destruction. h](jt)}(h``cbs``h]jz)}(hjQh]hcbs}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjKubj)}(hhh]h)}(h1callbacks for connector addition and destruction.h]h1callbacks for connector addition and destruction.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjubjn)}(hP``max_dpcd_transaction_bytes`` maximum number of bytes to read/write in one go. h](jt)}(h``max_dpcd_transaction_bytes``h]jz)}(hjh]hmax_dpcd_transaction_bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h0maximum number of bytes to read/write in one go.h]h0maximum number of bytes to read/write in one go.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hN``aux`` AUX channel for the DP MST connector this topolgy mgr is controlling. h](jt)}(h``aux``h]jz)}(hjh]haux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hEAUX channel for the DP MST connector this topolgy mgr is controlling.h]hEAUX channel for the DP MST connector this topolgy mgr is controlling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hB``max_payloads`` maximum number of payloads the GPU can generate. h](jt)}(h``max_payloads``h]jz)}(hjh]h max_payloads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h0maximum number of payloads the GPU can generate.h]h0maximum number of payloads the GPU can generate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hm``conn_base_id`` DRM connector ID this mgr is connected to. Only used to build the MST connector path value. h](jt)}(h``conn_base_id``h]jz)}(hj7h]h conn_base_id}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj1ubj)}(hhh]h)}(h[DRM connector ID this mgr is connected to. Only used to build the MST connector path value.h]h[DRM connector ID this mgr is connected to. Only used to build the MST connector path value.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhMhjubjn)}(h8``up_req_recv`` Message receiver state for up requests. h](jt)}(h``up_req_recv``h]jz)}(hjqh]h up_req_recv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjkubj)}(hhh]h)}(h'Message receiver state for up requests.h]h'Message receiver state for up requests.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``down_rep_recv`` Message receiver state for replies to down requests. h](jt)}(h``down_rep_recv``h]jz)}(hjh]h down_rep_recv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h4Message receiver state for replies to down requests.h]h4Message receiver state for replies to down requests.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h^``lock`` protects **mst_state**, **mst_primary**, **dpcd**, and **payload_id_table_cleared**. h](jt)}(h``lock``h]jz)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hTprotects **mst_state**, **mst_primary**, **dpcd**, and **payload_id_table_cleared**.h](h protects }(hjhhhNhNubj%)}(h **mst_state**h]h mst_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h**mst_primary**h]h mst_primary}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }hjsbj%)}(h**dpcd**h]hdpcd}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, and }(hjhhhNhNubj%)}(h**payload_id_table_cleared**h]hpayload_id_table_cleared}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``probe_lock`` Prevents **work** and **up_req_work**, the only writers of :c:type:`drm_dp_mst_port.mstb ` and :c:type:`drm_dp_mst_branch.ports `, from racing while they update the topology. h](jt)}(h``probe_lock``h]jz)}(hjfh]h probe_lock}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj`ubj)}(hhh]h)}(hPrevents **work** and **up_req_work**, the only writers of :c:type:`drm_dp_mst_port.mstb ` and :c:type:`drm_dp_mst_branch.ports `, from racing while they update the topology.h](h Prevents }(hjhhhNhNubj%)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**up_req_work**h]h up_req_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, the only writers of }(hjhhhNhNubh)}(h0:c:type:`drm_dp_mst_port.mstb `h]jz)}(hjh]hdrm_dp_mst_port.mstb}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubh and }hjsbh)}(h5:c:type:`drm_dp_mst_branch.ports `h]jz)}(hjh]hdrm_dp_mst_branch.ports}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhMhjubh-, from racing while they update the topology.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMhjubjn)}(ht``mst_state`` If this manager is enabled for an MST capable port. False if no MST sink/branch devices is connected. h](jt)}(h ``mst_state``h]jz)}(hj h]h mst_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(heIf this manager is enabled for an MST capable port. False if no MST sink/branch devices is connected.h]heIf this manager is enabled for an MST capable port. False if no MST sink/branch devices is connected.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h{``payload_id_table_cleared`` Whether or not we've cleared the payload ID table for **mst_primary**. Protected by **lock**. h](jt)}(h``payload_id_table_cleared``h]jz)}(hjDh]hpayload_id_table_cleared}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj>ubj)}(hhh]h)}(h]Whether or not we've cleared the payload ID table for **mst_primary**. Protected by **lock**.h](h8Whether or not we’ve cleared the payload ID table for }(hj]hhhNhNubj%)}(h**mst_primary**h]h mst_primary}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubh. Protected by }(hj]hhhNhNubj%)}(h**lock**h]hlock}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhMhjubjn)}(h``reset_rx_state`` The down request's reply and up request message receiver state must be reset, after the topology manager got removed. Protected by **lock**. h](jt)}(h``reset_rx_state``h]jz)}(hjh]hreset_rx_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hThe down request's reply and up request message receiver state must be reset, after the topology manager got removed. Protected by **lock**.h](hThe down request’s reply and up request message receiver state must be reset, after the topology manager got removed. Protected by }(hjhhhNhNubj%)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``payload_count`` The number of currently active payloads in hardware. This value is only intended to be used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context. h](jt)}(h``payload_count``h]jz)}(hjh]h payload_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hThe number of currently active payloads in hardware. This value is only intended to be used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context.h]hThe number of currently active payloads in hardware. This value is only intended to be used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``next_start_slot`` The starting timeslot to use for new VC payloads. This value is used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context. h](jt)}(h``next_start_slot``h]jz)}(hj(h]hnext_start_slot}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj"ubj)}(hhh]h)}(hThe starting timeslot to use for new VC payloads. This value is used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context.h]hThe starting timeslot to use for new VC payloads. This value is used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMhjubjn)}(h<``mst_primary`` Pointer to the primary/first branch device. h](jt)}(h``mst_primary``h]jz)}(hjbh]h mst_primary}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj\ubj)}(hhh]h)}(h+Pointer to the primary/first branch device.h]h+Pointer to the primary/first branch device.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhjubjn)}(h)``dpcd`` Cache of DPCD for primary port. h](jt)}(h``dpcd``h]jz)}(hjh]hdpcd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hCache of DPCD for primary port.h]hCache of DPCD for primary port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h?``sink_count`` Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0. h](jt)}(h``sink_count``h]jz)}(hjh]h sink_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h/Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0.h]h/Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h"``funcs`` Atomic helper callbacks h](jt)}(h ``funcs``h]jz)}(hj h]hfuncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hAtomic helper callbacksh]hAtomic helper callbacks}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjubjn)}(hh``qlock`` protects **tx_msg_downq** and :c:type:`drm_dp_sideband_msg_tx.state ` h](jt)}(h ``qlock``h]jz)}(hjFh]hqlock}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj@ubj)}(hhh]h)}(h]protects **tx_msg_downq** and :c:type:`drm_dp_sideband_msg_tx.state `h](h protects }(hj_hhhNhNubj%)}(h**tx_msg_downq**h]h tx_msg_downq}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubh and }(hj_hhhNhNubh)}(h?:c:type:`drm_dp_sideband_msg_tx.state `h]jz)}(hj{h]hdrm_dp_sideband_msg_tx.state}(hj}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_sideband_msg_txuh1hhj[hMhj_ubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjubjn)}(h/``tx_msg_downq`` List of pending down requests h](jt)}(h``tx_msg_downq``h]jz)}(hjh]h tx_msg_downq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hList of pending down requestsh]hList of pending down requests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h4``tx_waitq`` Wait to queue stall for the tx worker. h](jt)}(h ``tx_waitq``h]jz)}(hjh]htx_waitq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h&Wait to queue stall for the tx worker.h]h&Wait to queue stall for the tx worker.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``work`` Probe work. h](jt)}(h``work``h]jz)}(hj"h]hwork}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h Probe work.h]h Probe work.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhjubjn)}(h|``tx_work`` Sideband transmit worker. This can nest within the main **work** worker for each transaction **work** launches. h](jt)}(h ``tx_work``h]jz)}(hj[h]htx_work}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjUubj)}(hhh]h)}(hoSideband transmit worker. This can nest within the main **work** worker for each transaction **work** launches.h](h8Sideband transmit worker. This can nest within the main }(hjthhhNhNubj%)}(h**work**h]hwork}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubh worker for each transaction }(hjthhhNhNubj%)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubh launches.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjubjn)}(h:``destroy_port_list`` List of to be destroyed connectors. h](jt)}(h``destroy_port_list``h]jz)}(hjh]hdestroy_port_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h#List of to be destroyed connectors.h]h#List of to be destroyed connectors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``destroy_branch_device_list`` List of to be destroyed branch devices. h](jt)}(h``destroy_branch_device_list``h]jz)}(hjh]hdestroy_branch_device_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM hjubj)}(hhh]h)}(h'List of to be destroyed branch devices.h]h'List of to be destroyed branch devices.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h\``delayed_destroy_lock`` Protects **destroy_port_list** and **destroy_branch_device_list**. h](jt)}(h``delayed_destroy_lock``h]jz)}(hj,h]hdelayed_destroy_lock}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj&ubj)}(hhh]h)}(hBProtects **destroy_port_list** and **destroy_branch_device_list**.h](h Protects }(hjEhhhNhNubj%)}(h**destroy_port_list**h]hdestroy_port_list}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh and }(hjEhhhNhNubj%)}(h**destroy_branch_device_list**h]hdestroy_branch_device_list}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjubjn)}(h``delayed_destroy_wq`` Workqueue used for delayed_destroy_work items. A dedicated WQ makes it possible to drain any requeued work items on it. h](jt)}(h``delayed_destroy_wq``h]jz)}(hjh]hdelayed_destroy_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hwWorkqueue used for delayed_destroy_work items. A dedicated WQ makes it possible to drain any requeued work items on it.h]hwWorkqueue used for delayed_destroy_work items. A dedicated WQ makes it possible to drain any requeued work items on it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hn``delayed_destroy_work`` Work item to destroy MST port and branch devices, needed to avoid locking inversion. h](jt)}(h``delayed_destroy_work``h]jz)}(hjh]hdelayed_destroy_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hTWork item to destroy MST port and branch devices, needed to avoid locking inversion.h]hTWork item to destroy MST port and branch devices, needed to avoid locking inversion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hq``up_req_list`` List of pending up requests from the topology that need to be processed, in chronological order. h](jt)}(h``up_req_list``h]jz)}(hjh]h up_req_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM$hjubj)}(hhh]h)}(h`List of pending up requests from the topology that need to be processed, in chronological order.h]h`List of pending up requests from the topology that need to be processed, in chronological order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM$hjubjn)}(h)``up_req_lock`` Protects **up_req_list** h](jt)}(h``up_req_lock``h]jz)}(hj8h]h up_req_lock}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM(hj2ubj)}(hhh]h)}(hProtects **up_req_list**h](h Protects }(hjQhhhNhNubj%)}(h**up_req_list**h]h up_req_list}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]uh1hhjMhM(hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhM(hjubjn)}(h``up_req_work`` Work item to process up requests received from the topology. Needed to avoid blocking hotplug handling and sideband transmissions. h](jt)}(h``up_req_work``h]jz)}(hjh]h up_req_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM.hjyubj)}(hhh]h)}(hWork item to process up requests received from the topology. Needed to avoid blocking hotplug handling and sideband transmissions.h]hWork item to process up requests received from the topology. Needed to avoid blocking hotplug handling and sideband transmissions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM,hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjhM.hjubjn)}(h``topology_ref_history_lock`` protects :c:type:`drm_dp_mst_port.topology_ref_history ` and :c:type:`drm_dp_mst_branch.topology_ref_history `.h](jt)}(h``topology_ref_history_lock``h]jz)}(hjh]htopology_ref_history_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM5hjubj)}(hhh]h)}(hprotects :c:type:`drm_dp_mst_port.topology_ref_history ` and :c:type:`drm_dp_mst_branch.topology_ref_history `.h](h protects }(hjhhhNhNubh)}(h@:c:type:`drm_dp_mst_port.topology_ref_history `h]jz)}(hjh]h$drm_dp_mst_port.topology_ref_history}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM4hjubh and }(hjhhhNhNubh)}(hD:c:type:`drm_dp_mst_branch.topology_ref_history `h]jz)}(hjh]h&drm_dp_mst_branch.topology_ref_history}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhM4hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM5hjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM9hjhhubh)}(hThis struct represents the toplevel displayport MST topology manager. There should be one instance of this for every MST capable DP connector on the GPU.h]hThis struct represents the toplevel displayport MST topology manager. There should be one instance of this for every MST capable DP connector on the GPU.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMzhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_mst_mode (C enum)c.drm_dp_mst_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_modeh]j)}(henum drm_dp_mst_modeh](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMubj)}(hdrm_dp_mst_modeh]j)}(hjzh]hdrm_dp_mst_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjuhhubj)}(hhh]h)}(hsink's MST mode capabilityh]hsink’s MST mode capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMChjhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX,**Constants** ``DRM_DP_SST`` The sink does not support MST nor single stream sideband messaging. ``DRM_DP_MST`` Sink supports MST, more than one stream and single stream sideband messaging. ``DRM_DP_SST_SIDEBAND_MSG`` Sink supports only one stream and single stream sideband messaging.h](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMGhjubji)}(hhh](jn)}(hS``DRM_DP_SST`` The sink does not support MST nor single stream sideband messaging. h](jt)}(h``DRM_DP_SST``h]jz)}(hjh]h DRM_DP_SST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMKhjubj)}(hhh]h)}(hCThe sink does not support MST nor single stream sideband messaging.h]hCThe sink does not support MST nor single stream sideband messaging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMKhjubjn)}(h]``DRM_DP_MST`` Sink supports MST, more than one stream and single stream sideband messaging. h](jt)}(h``DRM_DP_MST``h]jz)}(hj=h]h DRM_DP_MST}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMOhj7ubj)}(hhh]h)}(hMSink supports MST, more than one stream and single stream sideband messaging.h]hMSink supports MST, more than one stream and single stream sideband messaging.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMNhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhMOhjubjn)}(h_``DRM_DP_SST_SIDEBAND_MSG`` Sink supports only one stream and single stream sideband messaging.Vh](jt)}(h``DRM_DP_SST_SIDEBAND_MSG``h]jz)}(hjwh]hDRM_DP_SST_SIDEBAND_MSG}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMRhjqubj)}(hhh]h)}(hCSink supports only one stream and single stream sideband messaging.h]hCSink supports only one stream and single stream sideband messaging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhMRhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(__drm_dp_mst_state_iter_get (C function)c.__drm_dp_mst_state_iter_gethNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbool __drm_dp_mst_state_iter_get (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr **mgr, struct drm_dp_mst_topology_state **old_state, struct drm_dp_mst_topology_state **new_state, int i)h]j)}(hbool __drm_dp_mst_state_iter_get(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr **mgr, struct drm_dp_mst_topology_state **old_state, struct drm_dp_mst_topology_state **new_state, int i)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h__drm_dp_mst_state_iter_geth]j)}(h__drm_dp_mst_state_iter_geth]h__drm_dp_mst_state_iter_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr **mgr, struct drm_dp_mst_topology_state **old_state, struct drm_dp_mst_topology_state **new_state, int i)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j%)}jjsbc.__drm_dp_mst_state_iter_getasbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h$struct drm_dp_mst_topology_mgr **mgrh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jFc.__drm_dp_mst_state_iter_getasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h,struct drm_dp_mst_topology_state **old_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jFc.__drm_dp_mst_state_iter_getasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h old_stateh]h old_state}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h,struct drm_dp_mst_topology_state **new_stateh](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jFc.__drm_dp_mst_state_iter_getasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(h new_stateh]h new_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hih]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h=private atomic state iterator function for macro-internal useh]h=private atomic state iterator function for macro-internal use}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj8 hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjS jjS jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` :c:type:`struct drm_atomic_state ` pointer ``struct drm_dp_mst_topology_mgr **mgr`` pointer to the :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor ``struct drm_dp_mst_topology_state **old_state`` optional pointer to the old :c:type:`struct drm_dp_mst_topology_state ` iteration cursor ``struct drm_dp_mst_topology_state **new_state`` optional pointer to the new :c:type:`struct drm_dp_mst_topology_state ` iteration cursor ``int i`` int iteration cursor, for macro-internal use **Description** Used by for_each_oldnew_mst_mgr_in_state(), for_each_old_mst_mgr_in_state(), and for_each_new_mst_mgr_in_state(). Don't call this directly. **Return** True if the current :c:type:`struct drm_private_obj ` is a :c:type:`struct drm_dp_mst_topology_mgr `, false otherwise.h](h)}(h**Parameters**h]j%)}(hj] h]h Parameters}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj[ ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjW ubji)}(hhh](jn)}(h```struct drm_atomic_state *state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj| h]hstruct drm_atomic_state *state}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjz ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjv ubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hj h]hstruct drm_atomic_state}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhj hMhj ubh pointer}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjv ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjs ubjn)}(h``struct drm_dp_mst_topology_mgr **mgr`` pointer to the :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h(``struct drm_dp_mst_topology_mgr **mgr``h]jz)}(hj h]h$struct drm_dp_mst_topology_mgr **mgr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubj)}(hhh]h)}(hbpointer to the :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursorh](hpointer to the }(hj hhhNhNubh)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hj h]hstruct drm_dp_mst_topology_mgr}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj hMhj ubh iteration cursor}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjs ubjn)}(h``struct drm_dp_mst_topology_state **old_state`` optional pointer to the old :c:type:`struct drm_dp_mst_topology_state ` iteration cursor h](jt)}(h0``struct drm_dp_mst_topology_state **old_state``h]jz)}(hj0 h]h,struct drm_dp_mst_topology_state **old_state}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj. ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj* ubj)}(hhh]h)}(hsoptional pointer to the old :c:type:`struct drm_dp_mst_topology_state ` iteration cursorh](hoptional pointer to the old }(hjI hhhNhNubh)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hjS h]h struct drm_dp_mst_topology_state}(hjU hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjQ ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjI ubh iteration cursor}(hjI hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjp hMhjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1jmhjE hMhjs ubjn)}(h``struct drm_dp_mst_topology_state **new_state`` optional pointer to the new :c:type:`struct drm_dp_mst_topology_state ` iteration cursor h](jt)}(h0``struct drm_dp_mst_topology_state **new_state``h]jz)}(hj h]h,struct drm_dp_mst_topology_state **new_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubj)}(hhh]h)}(hsoptional pointer to the new :c:type:`struct drm_dp_mst_topology_state ` iteration cursorh](hoptional pointer to the new }(hj hhhNhNubh)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hj h]h struct drm_dp_mst_topology_state}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubh iteration cursor}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjs ubjn)}(h7``int i`` int iteration cursor, for macro-internal use h](jt)}(h ``int i``h]jz)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjs ubeh}(h]h ]h"]h$]h&]uh1jhhjW ubh)}(h**Description**h]j%)}(hj% h]h Description}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj# ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjW ubh)}(hUsed by for_each_oldnew_mst_mgr_in_state(), for_each_old_mst_mgr_in_state(), and for_each_new_mst_mgr_in_state(). Don't call this directly.h]hUsed by for_each_oldnew_mst_mgr_in_state(), for_each_old_mst_mgr_in_state(), and for_each_new_mst_mgr_in_state(). Don’t call this directly.}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjW ubh)}(h **Return**h]j%)}(hjL h]hReturn}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJ ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjW ubh)}(hTrue if the current :c:type:`struct drm_private_obj ` is a :c:type:`struct drm_dp_mst_topology_mgr `, false otherwise.h](hTrue if the current }(hjb hhhNhNubh)}(h2:c:type:`struct drm_private_obj `h]jz)}(hjl h]hstruct drm_private_obj}(hjn hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_private_objuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjb ubh is a }(hjb hhhNhNubh)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hj h]hstruct drm_dp_mst_topology_mgr}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj hMhjb ubh, false otherwise.}(hjb hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhjW ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*for_each_oldnew_mst_mgr_in_state (C macro)"c.for_each_oldnew_mst_mgr_in_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h for_each_oldnew_mst_mgr_in_stateh]j)}(h for_each_oldnew_mst_mgr_in_stateh]j)}(h for_each_oldnew_mst_mgr_in_stateh]j)}(hj h]h for_each_oldnew_mst_mgr_in_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hM hj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hM ubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubh)}(hN``for_each_oldnew_mst_mgr_in_state (__state, mgr, old_state, new_state, __i)``h]jz)}(hj h]hJfor_each_oldnew_mst_mgr_in_state (__state, mgr, old_state, new_state, __i)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjhhubjb=)}(h>iterate over all DP MST topology managers in an atomic update h]h)}(h=iterate over all DP MST topology managers in an atomic updateh]h=iterate over all DP MST topology managers in an atomic update}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj# ubah}(h]h ]h"]h$]h&]uh1ja=hj5 hMhjhhubj)}(hX**Parameters** ``__state`` :c:type:`struct drm_atomic_state ` pointer ``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor ``old_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old state ``new_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new state ``__i`` int iteration cursor, for macro-internal use **Description** This iterates over all DRM DP MST topology managers in an atomic update, tracking both old and new state. This is useful in places where the state delta needs to be considered, for example in atomic check functions.h](h)}(h**Parameters**h]j%)}(hjB h]h Parameters}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj< ubji)}(hhh](jn)}(hI``__state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h ``__state``h]jz)}(hja h]h__state}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj[ ubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hj h]hstruct drm_atomic_state}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj~ ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjv hMhjz ubh pointer}(hjz hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjv hMhjw ubah}(h]h ]h"]h$]h&]uh1jhj[ ubeh}(h]h ]h"]h$]h&]uh1jmhjv hMhjX ubjn)}(h\``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h``mgr``h]jz)}(hj h]hmgr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubj)}(hhh]h)}(hS:c:type:`struct drm_dp_mst_topology_mgr ` iteration cursorh](h)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hj h]hstruct drm_dp_mst_topology_mgr}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj hMhj ubh iteration cursor}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjX ubjn)}(hx``old_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old state h](jt)}(h ``old_state``h]jz)}(hj h]h old_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubj)}(hhh]h)}(hi:c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old stateh](h)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hj0 h]h struct drm_dp_mst_topology_state}(hj2 hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj. ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj* ubh# iteration cursor for the old state}(hj* hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjM hMhj' ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj& hMhjX ubjn)}(hx``new_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new state h](jt)}(h ``new_state``h]jz)}(hjj h]h new_state}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjh ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjd ubj)}(hhh]h)}(hi:c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new stateh](h)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hj h]h struct drm_dp_mst_topology_state}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubh# iteration cursor for the new state}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjd ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjX ubjn)}(h5``__i`` int iteration cursor, for macro-internal use h](jt)}(h``__i``h]jz)}(hj h]h__i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhj ubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjX ubeh}(h]h ]h"]h$]h&]uh1jhhj< ubh)}(h**Description**h]j%)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM hj< ubh)}(hThis iterates over all DRM DP MST topology managers in an atomic update, tracking both old and new state. This is useful in places where the state delta needs to be considered, for example in atomic check functions.h]hThis iterates over all DRM DP MST topology managers in an atomic update, tracking both old and new state. This is useful in places where the state delta needs to be considered, for example in atomic check functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM hj< ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'for_each_old_mst_mgr_in_state (C macro)c.for_each_old_mst_mgr_in_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hfor_each_old_mst_mgr_in_stateh]j)}(hfor_each_old_mst_mgr_in_stateh]j)}(hfor_each_old_mst_mgr_in_stateh]j)}(hj=h]hfor_each_old_mst_mgr_in_state}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhjZhMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhjZhMhj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj8hhhjZhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjsjjsjjjuh1jhhhjhNhNubh)}(h@``for_each_old_mst_mgr_in_state (__state, mgr, old_state, __i)``h]jz)}(hjyh]hiterate over all DP MST topology managers in an atomic update h]h)}(h=iterate over all DP MST topology managers in an atomic updateh]h=iterate over all DP MST topology managers in an atomic update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubah}(h]h ]h"]h$]h&]uh1ja=hjhMhjhhubj)}(hXA**Parameters** ``__state`` :c:type:`struct drm_atomic_state ` pointer ``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor ``old_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old state ``__i`` int iteration cursor, for macro-internal use **Description** This iterates over all DRM DP MST topology managers in an atomic update, tracking only the old state. This is useful in disable functions, where we need the old state the hardware is still in.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubji)}(hhh](jn)}(hI``__state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h ``__state``h]jz)}(hjh]h__state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hjh]hstruct drm_atomic_state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjhMhjubh pointer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h\``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h``mgr``h]jz)}(hj%h]hmgr}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(hS:c:type:`struct drm_dp_mst_topology_mgr ` iteration cursorh](h)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hjDh]hstruct drm_dp_mst_topology_mgr}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj:hMhj>ubh iteration cursor}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhjubjn)}(hx``old_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old state h](jt)}(h ``old_state``h]jz)}(hj}h]h old_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjwubj)}(hhh]h)}(hi:c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old stateh](h)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hjh]h struct drm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubh# iteration cursor for the old state}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h5``__i`` int iteration cursor, for macro-internal use h](jt)}(h``__i``h]jz)}(hjh]h__i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubh)}(hThis iterates over all DRM DP MST topology managers in an atomic update, tracking only the old state. This is useful in disable functions, where we need the old state the hardware is still in.h]hThis iterates over all DRM DP MST topology managers in an atomic update, tracking only the old state. This is useful in disable functions, where we need the old state the hardware is still in.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'for_each_new_mst_mgr_in_state (C macro)c.for_each_new_mst_mgr_in_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hfor_each_new_mst_mgr_in_stateh]j)}(hfor_each_new_mst_mgr_in_stateh]j)}(hfor_each_new_mst_mgr_in_stateh]j)}(hjPh]hfor_each_new_mst_mgr_in_state}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM0ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjNhhhjmhM0ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhjmhM0hjKhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjKhhhjmhM0ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h@``for_each_new_mst_mgr_in_state (__state, mgr, new_state, __i)``h]jz)}(hjh]hiterate over all DP MST topology managers in an atomic update h]h)}(h=iterate over all DP MST topology managers in an atomic updateh]h=iterate over all DP MST topology managers in an atomic update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM#hjubah}(h]h ]h"]h$]h&]uh1ja=hjhM#hjhhubj)}(hXp**Parameters** ``__state`` :c:type:`struct drm_atomic_state ` pointer ``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor ``new_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new state ``__i`` int iteration cursor, for macro-internal use **Description** This iterates over all DRM DP MST topology managers in an atomic update, tracking only the new state. This is useful in enable functions, where we need the new state the hardware should be in when the atomic commit operation has completed.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM'hjubji)}(hhh](jn)}(hI``__state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h ``__state``h]jz)}(hjh]h__state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM%hjubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hjh]hstruct drm_atomic_state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjhM%hjubh pointer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM%hjubjn)}(h\``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h``mgr``h]jz)}(hj8h]hmgr}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM&hj2ubj)}(hhh]h)}(hS:c:type:`struct drm_dp_mst_topology_mgr ` iteration cursorh](h)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hjWh]hstruct drm_dp_mst_topology_mgr}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjMhM&hjQubh iteration cursor}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhM&hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhM&hjubjn)}(hx``new_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new state h](jt)}(h ``new_state``h]jz)}(hjh]h new_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM(hjubj)}(hhh]h)}(hi:c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new stateh](h)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hjh]h struct drm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM'hjubh# iteration cursor for the new state}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM(hjubjn)}(h5``__i`` int iteration cursor, for macro-internal use h](jt)}(h``__i``h]jz)}(hjh]h__i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM)hjubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM)hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM+hjubh)}(hThis iterates over all DRM DP MST topology managers in an atomic update, tracking only the new state. This is useful in enable functions, where we need the new state the hardware should be in when the atomic commit operation has completed.h]hThis iterates over all DRM DP MST topology managers in an atomic update, tracking only the new state. This is useful in enable functions, where we need the new state the hardware should be in when the atomic commit operation has completed.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:293: ./include/drm/display/drm_dp_mst_helper.hhM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_get_port_malloc (C function)c.drm_dp_mst_get_port_mallochNtauh1jxhjhhhNhNubj)}(hhh](j)}(h>void drm_dp_mst_get_port_malloc (struct drm_dp_mst_port *port)h]j)}(h=void drm_dp_mst_get_port_malloc(struct drm_dp_mst_port *port)h](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjwhMubj)}(hdrm_dp_mst_get_port_malloch]j)}(hdrm_dp_mst_get_port_malloch]hdrm_dp_mst_get_port_malloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjwhMubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_get_port_mallocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhjwhMhj^hhubj)}(hhh]h)}(h,Increment the malloc refcount of an MST porth]h,Increment the malloc refcount of an MST port}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to increment the malloc refcount of **Description** Increments :c:type:`drm_dp_mst_port.malloc_kref `. When :c:type:`drm_dp_mst_port.malloc_kref ` reaches 0, the memory allocation for **port** will be released and **port** may no longer be used. Because **port** could potentially be freed at any time by the DP MST helpers if :c:type:`drm_dp_mst_port.malloc_kref ` reaches 0, including during a call to this function, drivers that which to make use of :c:type:`struct drm_dp_mst_port ` should ensure that they grab at least one main malloc reference to their MST ports in :c:type:`drm_dp_mst_topology_cbs.add_connector `. This callback is called before there is any chance for :c:type:`drm_dp_mst_port.malloc_kref ` to reach 0. See also: drm_dp_mst_put_port_malloc()h](h)}(h**Parameters**h]j%)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubji)}(hhh]jn)}(h|``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to increment the malloc refcount of h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hjjh]hstruct drm_dp_mst_port *port}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjdubj)}(hhh]h)}(hZThe :c:type:`struct drm_dp_mst_port ` to increment the malloc refcount ofh](hThe }(hjhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjh]hstruct drm_dp_mst_port}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMhjubh$ to increment the malloc refcount of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjaubah}(h]h ]h"]h$]h&]uh1jhhjEubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubh)}(hIncrements :c:type:`drm_dp_mst_port.malloc_kref `. When :c:type:`drm_dp_mst_port.malloc_kref ` reaches 0, the memory allocation for **port** will be released and **port** may no longer be used.h](h Increments }(hjhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjh]hdrm_dp_mst_port.malloc_kref}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh. When }(hjhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hj h]hdrm_dp_mst_port.malloc_kref}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMhjubh& reaches 0, the memory allocation for }(hjhhhNhNubj%)}(h**port**h]hport}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh will be released and }(hjhhhNhNubj%)}(h**port**h]hport}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh may no longer be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjEubh)}(hX.Because **port** could potentially be freed at any time by the DP MST helpers if :c:type:`drm_dp_mst_port.malloc_kref ` reaches 0, including during a call to this function, drivers that which to make use of :c:type:`struct drm_dp_mst_port ` should ensure that they grab at least one main malloc reference to their MST ports in :c:type:`drm_dp_mst_topology_cbs.add_connector `. This callback is called before there is any chance for :c:type:`drm_dp_mst_port.malloc_kref ` to reach 0.h](hBecause }(hjWhhhNhNubj%)}(h**port**h]hport}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubhA could potentially be freed at any time by the DP MST helpers if }(hjWhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjsh]hdrm_dp_mst_port.malloc_kref}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjWubhX reaches 0, including during a call to this function, drivers that which to make use of }(hjWhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjh]hstruct drm_dp_mst_port}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMhjWubhW should ensure that they grab at least one main malloc reference to their MST ports in }(hjWhhhNhNubh)}(hI:c:type:`drm_dp_mst_topology_cbs.add_connector `h]jz)}(hjh]h%drm_dp_mst_topology_cbs.add_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_cbsuh1hhjhMhjWubh9. This callback is called before there is any chance for }(hjWhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjh]hdrm_dp_mst_port.malloc_kref}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMhjWubh to reach 0.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjEubh)}(h&See also: drm_dp_mst_put_port_malloc()h]h&See also: drm_dp_mst_put_port_malloc()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_put_port_malloc (C function)c.drm_dp_mst_put_port_mallochNtauh1jxhjhhhNhNubj)}(hhh](j)}(h>void drm_dp_mst_put_port_malloc (struct drm_dp_mst_port *port)h]j)}(h=void drm_dp_mst_put_port_malloc(struct drm_dp_mst_port *port)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhMubj)}(hdrm_dp_mst_put_port_malloch]j)}(hdrm_dp_mst_put_port_malloch]hdrm_dp_mst_put_port_malloc}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhMubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjVsbc.drm_dp_mst_put_port_mallocasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubah}(h]h ]h"]h$]h&]jjuh1jhj/hhhjAhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhjAhMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhjAhMhj(hhubj)}(hhh]h)}(h,Decrement the malloc refcount of an MST porth]h,Decrement the malloc refcount of an MST port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to decrement the malloc refcount of **Description** Decrements :c:type:`drm_dp_mst_port.malloc_kref `. When :c:type:`drm_dp_mst_port.malloc_kref ` reaches 0, the memory allocation for **port** will be released and **port** may no longer be used. See also: drm_dp_mst_get_port_malloc()h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(h|``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to decrement the malloc refcount of h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj4h]hstruct drm_dp_mst_port *port}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj.ubj)}(hhh]h)}(hZThe :c:type:`struct drm_dp_mst_port ` to decrement the malloc refcount ofh](hThe }(hjMhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjWh]hstruct drm_dp_mst_port}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjIhMhjMubh$ to decrement the malloc refcount of}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhjIhMhj+ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hDecrements :c:type:`drm_dp_mst_port.malloc_kref `. When :c:type:`drm_dp_mst_port.malloc_kref ` reaches 0, the memory allocation for **port** will be released and **port** may no longer be used.h](h Decrements }(hjhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjh]hdrm_dp_mst_port.malloc_kref}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh. When }(hjhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjh]hdrm_dp_mst_port.malloc_kref}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjhMhjubh& reaches 0, the memory allocation for }(hjhhhNhNubj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh will be released and }(hjhhhNhNubj%)}(h**port**h]hport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh may no longer be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h&See also: drm_dp_mst_get_port_malloc()h]h&See also: drm_dp_mst_get_port_malloc()}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_dp_mst_connector_late_register (C function)$c.drm_dp_mst_connector_late_registerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hfint drm_dp_mst_connector_late_register (struct drm_connector *connector, struct drm_dp_mst_port *port)h]j)}(heint drm_dp_mst_connector_late_register(struct drm_connector *connector, struct drm_dp_mst_port *port)h](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj^hMubj)}(h"drm_dp_mst_connector_late_registerh]j)}(h"drm_dp_mst_connector_late_registerh]h"drm_dp_mst_connector_late_register}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj^hMubj)}(h?(struct drm_connector *connector, struct drm_dp_mst_port *port)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjssb$c.drm_dp_mst_connector_late_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j$c.drm_dp_mst_connector_late_registerasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhj^hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhj^hMubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jhj^hMhjEhhubj)}(hhh]h)}(hLate MST connector registrationh]hLate MST connector registration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXv**Parameters** ``struct drm_connector *connector`` The MST connector ``struct drm_dp_mst_port *port`` The MST port for this connector **Description** Helper to register the remote aux device for this MST port. Drivers should call this from their mst connector's late_register hook to enable MST aux devices. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h6``struct drm_connector *connector`` The MST connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.cjhMhjubj)}(hhh]h)}(hThe MST connectorh]hThe MST connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hA``struct drm_dp_mst_port *port`` The MST port for this connector h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hjh]hstruct drm_dp_mst_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hThe MST port for this connectorh]hThe MST port for this connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hHelper to register the remote aux device for this MST port. Drivers should call this from their mst connector's late_register hook to enable MST aux devices.h]hHelper to register the remote aux device for this MST port. Drivers should call this from their mst connector’s late_register hook to enable MST aux devices.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h **Return**h]j%)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_dp_mst_connector_early_unregister (C function)'c.drm_dp_mst_connector_early_unregisterhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hjvoid drm_dp_mst_connector_early_unregister (struct drm_connector *connector, struct drm_dp_mst_port *port)h]j)}(hivoid drm_dp_mst_connector_early_unregister(struct drm_connector *connector, struct drm_dp_mst_port *port)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h%drm_dp_mst_connector_early_unregisterh]j)}(h%drm_dp_mst_connector_early_unregisterh]h%drm_dp_mst_connector_early_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h?(struct drm_connector *connector, struct drm_dp_mst_port *port)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb'c.drm_dp_mst_connector_early_unregisterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j'c.drm_dp_mst_connector_early_unregisterasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h"Early MST connector unregistrationh]h"Early MST connector unregistration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXZ**Parameters** ``struct drm_connector *connector`` The MST connector ``struct drm_dp_mst_port *port`` The MST port for this connector **Description** Helper to unregister the remote aux device for this MST port, registered by drm_dp_mst_connector_late_register(). Drivers should call this from their mst connector's early_unregister hook.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h6``struct drm_connector *connector`` The MST connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj ubj)}(hhh]h)}(hThe MST connectorh]hThe MST connector}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhj ubjn)}(hA``struct drm_dp_mst_port *port`` The MST port for this connector h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hjKh]hstruct drm_dp_mst_port *port}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubj)}(hhh]h)}(hThe MST port for this connectorh]hThe MST port for this connector}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hHelper to unregister the remote aux device for this MST port, registered by drm_dp_mst_connector_late_register(). Drivers should call this from their mst connector's early_unregister hook.h]hHelper to unregister the remote aux device for this MST port, registered by drm_dp_mst_connector_late_register(). Drivers should call this from their mst connector’s early_unregister hook.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_add_payload_part1 (C function)c.drm_dp_add_payload_part1hNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_add_payload_part1 (struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_atomic_payload *payload)h]j)}(hint drm_dp_add_payload_part1(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_atomic_payload *payload)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_add_payload_part1h]j)}(hdrm_dp_add_payload_part1h]hdrm_dp_add_payload_part1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h}(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_atomic_payload *payload)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_add_payload_part1asbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h+struct drm_dp_mst_topology_state *mst_stateh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jBc.drm_dp_add_payload_part1asbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(h mst_stateh]h mst_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)struct drm_dp_mst_atomic_payload *payloadh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_atomic_payloadh]hdrm_dp_mst_atomic_payload}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jBc.drm_dp_add_payload_part1asbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpayloadh]hpayload}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hExecute payload update part 1h]hExecute payload update part 1}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjhhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. ``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state ``struct drm_dp_mst_atomic_payload *payload`` The payload to write **Description** Determines the starting time slot for the given payload, and programs the VCPI for this payload into the DPCD of DPRX. After calling this, the driver should generate ACT and payload packets. **Return** 0 on success, error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubji)}(hhh](jn)}(h8``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjh]h#struct drm_dp_mst_topology_mgr *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hE``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state h](jt)}(h/``struct drm_dp_mst_topology_state *mst_state``h]jz)}(hjh]h+struct drm_dp_mst_topology_state *mst_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubj)}(hhh]h)}(hThe MST atomic stateh]hThe MST atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(hC``struct drm_dp_mst_atomic_payload *payload`` The payload to write h](jt)}(h-``struct drm_dp_mst_atomic_payload *payload``h]jz)}(hjh]h)struct drm_dp_mst_atomic_payload *payload}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubj)}(hhh]h)}(hThe payload to writeh]hThe payload to write}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hM hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubh)}(hDetermines the starting time slot for the given payload, and programs the VCPI for this payload into the DPCD of DPRX. After calling this, the driver should generate ACT and payload packets.h]hDetermines the starting time slot for the given payload, and programs the VCPI for this payload into the DPCD of DPRX. After calling this, the driver should generate ACT and payload packets.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubh)}(h$0 on success, error code on failure.h]h$0 on success, error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_remove_payload_part1 (C function)c.drm_dp_remove_payload_part1hNtauh1jxhjhhhNhNubj)}(hhh](j)}(hvoid drm_dp_remove_payload_part1 (struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_atomic_payload *payload)h]j)}(hvoid drm_dp_remove_payload_part1(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_atomic_payload *payload)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM/ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM/ ubj)}(hdrm_dp_remove_payload_part1h]j)}(hdrm_dp_remove_payload_part1h]hdrm_dp_remove_payload_part1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM/ ubj)}(h}(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_atomic_payload *payload)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_remove_payload_part1asbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h+struct drm_dp_mst_topology_state *mst_stateh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j<c.drm_dp_remove_payload_part1asbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(h mst_stateh]h mst_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)struct drm_dp_mst_atomic_payload *payloadh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_atomic_payloadh]hdrm_dp_mst_atomic_payload}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j<c.drm_dp_remove_payload_part1asbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj. hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpayloadh]hpayload}(hj; hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM/ ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM/ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM/ hjhhubj)}(hhh]h)}(h/Remove an MST payload along the virtual channelh]h/Remove an MST payload along the virtual channel}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM& hjb hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj} jj} jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. ``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state ``struct drm_dp_mst_atomic_payload *payload`` The payload to remove **Description** Removes a payload along the virtual channel if it was successfully allocated. After calling this, the driver should set HW to generate ACT and then switch to new payload allocation state.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM* hj ubji)}(hhh](jn)}(h8``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj h]h#struct drm_dp_mst_topology_mgr *mgr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM' hj ubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM' hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hM' hj ubjn)}(hE``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state h](jt)}(h/``struct drm_dp_mst_topology_state *mst_state``h]jz)}(hj h]h+struct drm_dp_mst_topology_state *mst_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM( hj ubj)}(hhh]h)}(hThe MST atomic stateh]hThe MST atomic state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM( hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hM( hj ubjn)}(hD``struct drm_dp_mst_atomic_payload *payload`` The payload to remove h](jt)}(h-``struct drm_dp_mst_atomic_payload *payload``h]jz)}(hj!h]h)struct drm_dp_mst_atomic_payload *payload}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM) hj!ubj)}(hhh]h)}(hThe payload to removeh]hThe payload to remove}(hj1!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-!hM) hj.!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj-!hM) hj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hjS!h]h Description}(hjU!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQ!ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+ hj ubh)}(hRemoves a payload along the virtual channel if it was successfully allocated. After calling this, the driver should set HW to generate ACT and then switch to new payload allocation state.h]hRemoves a payload along the virtual channel if it was successfully allocated. After calling this, the driver should set HW to generate ACT and then switch to new payload allocation state.}(hji!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+ hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_remove_payload_part2 (C function)c.drm_dp_remove_payload_part2hNtauh1jxhjhhhNhNubj)}(hhh](j)}(hvoid drm_dp_remove_payload_part2 (struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, const struct drm_dp_mst_atomic_payload *old_payload, struct drm_dp_mst_atomic_payload *new_payload)h]j)}(hvoid drm_dp_remove_payload_part2(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, const struct drm_dp_mst_atomic_payload *old_payload, struct drm_dp_mst_atomic_payload *new_payload)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMP ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hMP ubj)}(hdrm_dp_remove_payload_part2h]j)}(hdrm_dp_remove_payload_part2h]hdrm_dp_remove_payload_part2}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj!hMP ubj)}(h(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, const struct drm_dp_mst_atomic_payload *old_payload, struct drm_dp_mst_atomic_payload *new_payload)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j%)}jj!sbc.drm_dp_remove_payload_part2asbuh1hhj!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hj9h]h*}(hj!"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubj)}(hmgrh]hmgr}(hj."hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(h+struct drm_dp_mst_topology_state *mst_stateh](j)}(hjh]hstruct}(hjG"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC"ubj)}(h h]h }(hjT"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC"ubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hje"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjg"modnameN classnameNjj)}j]j"c.drm_dp_remove_payload_part2asbuh1hhjC"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC"ubj9)}(hj9h]h*}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjC"ubj)}(h mst_stateh]h mst_state}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(h3const struct drm_dp_mst_atomic_payload *old_payloadh](j)}(hjch]hconst}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hdrm_dp_mst_atomic_payloadh]hdrm_dp_mst_atomic_payload}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j"c.drm_dp_remove_payload_part2asbuh1hhj"ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hj9h]h*}(hj#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubj)}(h old_payloadh]h old_payload}(hj)#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(h-struct drm_dp_mst_atomic_payload *new_payloadh](j)}(hjh]hstruct}(hjB#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>#ubj)}(h h]h }(hjO#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>#ubh)}(hhh]j)}(hdrm_dp_mst_atomic_payloadh]hdrm_dp_mst_atomic_payload}(hj`#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb#modnameN classnameNjj)}j]j"c.drm_dp_remove_payload_part2asbuh1hhj>#ubj)}(h h]h }(hj~#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>#ubj9)}(hj9h]h*}(hj#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>#ubj)}(h new_payloadh]h new_payload}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj!hMP ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!hhhj!hMP ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj!hMP hj!hhubj)}(hhh]h)}(hRemove an MST payload locallyh]hRemove an MST payload locally}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chME hj#hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hMP ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. ``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state ``const struct drm_dp_mst_atomic_payload *old_payload`` The payload with its old state ``struct drm_dp_mst_atomic_payload *new_payload`` The payload with its latest state **Description** Updates the starting time slots of all other payloads which would have been shifted towards the start of the payload ID table as a result of removing a payload. Driver should call this function whenever it removes a payload in its HW. It's independent to the result of payload allocation/deallocation at branch devices along the virtual channel.h](h)}(h**Parameters**h]j%)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMI hj#ubji)}(hhh](jn)}(h8``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj$h]h#struct drm_dp_mst_topology_mgr *mgr}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMF hj#ubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMF hj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMF hj#ubjn)}(hE``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state h](jt)}(h/``struct drm_dp_mst_topology_state *mst_state``h]jz)}(hj=$h]h+struct drm_dp_mst_topology_state *mst_state}(hj?$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;$ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMG hj7$ubj)}(hhh]h)}(hThe MST atomic stateh]hThe MST atomic state}(hjV$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR$hMG hjS$ubah}(h]h ]h"]h$]h&]uh1jhj7$ubeh}(h]h ]h"]h$]h&]uh1jmhjR$hMG hj#ubjn)}(hW``const struct drm_dp_mst_atomic_payload *old_payload`` The payload with its old state h](jt)}(h7``const struct drm_dp_mst_atomic_payload *old_payload``h]jz)}(hjv$h]h3const struct drm_dp_mst_atomic_payload *old_payload}(hjx$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt$ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMH hjp$ubj)}(hhh]h)}(hThe payload with its old stateh]hThe payload with its old state}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMH hj$ubah}(h]h ]h"]h$]h&]uh1jhjp$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMH hj#ubjn)}(hT``struct drm_dp_mst_atomic_payload *new_payload`` The payload with its latest state h](jt)}(h1``struct drm_dp_mst_atomic_payload *new_payload``h]jz)}(hj$h]h-struct drm_dp_mst_atomic_payload *new_payload}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMI hj$ubj)}(hhh]h)}(h!The payload with its latest stateh]h!The payload with its latest state}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMI hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMI hj#ubeh}(h]h ]h"]h$]h&]uh1jhhj#ubh)}(h**Description**h]j%)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMK hj#ubh)}(hXYUpdates the starting time slots of all other payloads which would have been shifted towards the start of the payload ID table as a result of removing a payload. Driver should call this function whenever it removes a payload in its HW. It's independent to the result of payload allocation/deallocation at branch devices along the virtual channel.h]hX[Updates the starting time slots of all other payloads which would have been shifted towards the start of the payload ID table as a result of removing a payload. Driver should call this function whenever it removes a payload in its HW. It’s independent to the result of payload allocation/deallocation at branch devices along the virtual channel.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMK hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_add_payload_part2 (C function)c.drm_dp_add_payload_part2hNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmint drm_dp_add_payload_part2 (struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_atomic_payload *payload)h]j)}(hlint drm_dp_add_payload_part2(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_atomic_payload *payload)h](j)}(hinth]hint}(hj/%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+%hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMq ubj)}(h h]h }(hj>%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+%hhhj=%hMq ubj)}(hdrm_dp_add_payload_part2h]j)}(hdrm_dp_add_payload_part2h]hdrm_dp_add_payload_part2}(hjP%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+%hhhj=%hMq ubj)}(hP(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_atomic_payload *payload)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjl%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh%ubj)}(h h]h }(hjy%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh%ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j%)}jjR%sbc.drm_dp_add_payload_part2asbuh1hhjh%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh%ubj9)}(hj9h]h*}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjh%ubj)}(hmgrh]hmgr}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjd%ubj)}(h)struct drm_dp_mst_atomic_payload *payloadh](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(hdrm_dp_mst_atomic_payloadh]hdrm_dp_mst_atomic_payload}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j%c.drm_dp_add_payload_part2asbuh1hhj%ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(hj9h]h*}(hj(&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj%ubj)}(hpayloadh]hpayload}(hj5&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjd%ubeh}(h]h ]h"]h$]h&]jjuh1jhj+%hhhj=%hMq ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'%hhhj=%hMq ubah}(h]j"%ah ](jjeh"]h$]h&]jj)jhuh1jhj=%hMq hj$%hhubj)}(hhh]h)}(hExecute payload update part 2h]hExecute payload update part 2}(hj_&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMh hj\&hhubah}(h]h ]h"]h$]h&]uh1jhj$%hhhj=%hMq ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjw&jjw&jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. ``struct drm_dp_mst_atomic_payload *payload`` The payload to update **Description** If **payload** was successfully assigned a starting time slot by drm_dp_add_payload_part1(), this function will send the sideband messages to finish allocating this payload. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMl hj{&ubji)}(hhh](jn)}(h8``struct drm_dp_mst_topology_mgr *mgr`` Manager to use. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj&h]h#struct drm_dp_mst_topology_mgr *mgr}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMi hj&ubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMi hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj&hMi hj&ubjn)}(hD``struct drm_dp_mst_atomic_payload *payload`` The payload to update h](jt)}(h-``struct drm_dp_mst_atomic_payload *payload``h]jz)}(hj&h]h)struct drm_dp_mst_atomic_payload *payload}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMj hj&ubj)}(hhh]h)}(hThe payload to updateh]hThe payload to update}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMj hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj&hMj hj&ubeh}(h]h ]h"]h$]h&]uh1jhhj{&ubh)}(h**Description**h]j%)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMl hj{&ubh)}(hIf **payload** was successfully assigned a starting time slot by drm_dp_add_payload_part1(), this function will send the sideband messages to finish allocating this payload.h](hIf }(hj*'hhhNhNubj%)}(h **payload**h]hpayload}(hj2'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*'ubh was successfully assigned a starting time slot by drm_dp_add_payload_part1(), this function will send the sideband messages to finish allocating this payload.}(hj*'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMl hj{&ubh)}(h **Return**h]j%)}(hjM'h]hReturn}(hjO'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjK'ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMo hj{&ubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjc'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMo hj{&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_get_vc_payload_bw (C function)c.drm_dp_get_vc_payload_bwhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hHfixed20_12 drm_dp_get_vc_payload_bw (int link_rate, int link_lane_count)h]j)}(hGfixed20_12 drm_dp_get_vc_payload_bw(int link_rate, int link_lane_count)h](h)}(hhh]j)}(h fixed20_12h]h fixed20_12}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j%)}jdrm_dp_get_vc_payload_bwsbc.drm_dp_get_vc_payload_bwasbuh1hhj'hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hM ubj)}(hdrm_dp_get_vc_payload_bwh]j)}(hj'h]hdrm_dp_get_vc_payload_bw}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj'hM ubj)}(h$(int link_rate, int link_lane_count)h](j)}(h int link_rateh](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h link_rateh]h link_rate}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubj)}(hint link_lane_counth](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj'(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hlink_lane_counth]hlink_lane_count}(hj5(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubeh}(h]h ]h"]h$]h&]jjuh1jhj'hhhj'hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'hhhj'hM ubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhj'hM hj'hhubj)}(hhh]h)}(h%get the VC payload BW for an MTP linkh]h%get the VC payload BW for an MTP link}(hj_(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj\(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjw(jjw(jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``int link_rate`` link rate in 10kbits/s units ``int link_lane_count`` lane count **Description** Calculate the total bandwidth of a MultiStream Transport link. The returned value is in units of PBNs/(timeslots/1 MTP). This value can be used to convert the number of PBNs required for a given stream to the number of timeslots this stream requires in each MTP. Returns the BW / timeslot value in 20.12 fixed point format.h](h)}(h**Parameters**h]j%)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{(ubji)}(hhh](jn)}(h/``int link_rate`` link rate in 10kbits/s units h](jt)}(h``int link_rate``h]jz)}(hj(h]h int link_rate}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj(ubj)}(hhh]h)}(hlink rate in 10kbits/s unitsh]hlink rate in 10kbits/s units}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMhj(ubjn)}(h#``int link_lane_count`` lane count h](jt)}(h``int link_lane_count``h]jz)}(hj(h]hint link_lane_count}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj(ubj)}(hhh]h)}(h lane counth]h lane count}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMhj(ubeh}(h]h ]h"]h$]h&]uh1jhhj{(ubh)}(h**Description**h]j%)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{(ubh)}(hXCalculate the total bandwidth of a MultiStream Transport link. The returned value is in units of PBNs/(timeslots/1 MTP). This value can be used to convert the number of PBNs required for a given stream to the number of timeslots this stream requires in each MTP.h]hXCalculate the total bandwidth of a MultiStream Transport link. The returned value is in units of PBNs/(timeslots/1 MTP). This value can be used to convert the number of PBNs required for a given stream to the number of timeslots this stream requires in each MTP.}(hj*)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{(ubh)}(hSW state after the MST link's parameters have changed in a way the state could've become out-of-sync. This is the case for instance when the link rate between the source and first downstream branch device has switched between UHBR and non-UHBR rates. Except of those cases - for instance when a sink gets plugged/unplugged to a port - the SW state will get updated automatically via MST UP message notifications.h](h)}(h**Parameters**h]j%)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj.ubji)}(hhh]jn)}(h9``struct drm_dp_mst_topology_mgr *mgr`` manager to probe h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj.h]h#struct drm_dp_mst_topology_mgr *mgr}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj.ubj)}(hhh]h)}(hmanager to probeh]hmanager to probe}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhhj.ubh)}(h**Description**h]j%)}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj.ubh)}(hXQueue a work to probe the MST topology. Driver's should call this only to sync the topology's HW->SW state after the MST link's parameters have changed in a way the state could've become out-of-sync. This is the case for instance when the link rate between the source and first downstream branch device has switched between UHBR and non-UHBR rates. Except of those cases - for instance when a sink gets plugged/unplugged to a port - the SW state will get updated automatically via MST UP message notifications.h]hXQueue a work to probe the MST topology. Driver’s should call this only to sync the topology’s HW->SW state after the MST link’s parameters have changed in a way the state could’ve become out-of-sync. This is the case for instance when the link rate between the source and first downstream branch device has switched between UHBR and non-UHBR rates. Except of those cases - for instance when a sink gets plugged/unplugged to a port - the SW state will get updated automatically via MST UP message notifications.}(hj./hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_mst_topology_mgr_suspend (C function)!c.drm_dp_mst_topology_mgr_suspendhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJvoid drm_dp_mst_topology_mgr_suspend (struct drm_dp_mst_topology_mgr *mgr)h]j)}(hIvoid drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr)h](j)}(hvoidh]hvoid}(hj]/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY/hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjl/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY/hhhjk/hMubj)}(hdrm_dp_mst_topology_mgr_suspendh]j)}(hdrm_dp_mst_topology_mgr_suspendh]hdrm_dp_mst_topology_mgr_suspend}(hj~/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjY/hhhjk/hMubj)}(h%(struct drm_dp_mst_topology_mgr *mgr)h]j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j%)}jj/sb!c.drm_dp_mst_topology_mgr_suspendasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hmgrh]hmgr}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubah}(h]h ]h"]h$]h&]jjuh1jhjY/hhhjk/hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjU/hhhjk/hMubah}(h]jP/ah ](jjeh"]h$]h&]jj)jhuh1jhjk/hMhjR/hhubj)}(hhh]h)}(hsuspend the MST managerh]hsuspend the MST manager}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jhjR/hhhjk/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj50jj50jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to suspend **Description** This function tells the MST device that we can't handle UP messages anymore. This should stop it from sending any since we are suspended.h](h)}(h**Parameters**h]j%)}(hj?0h]h Parameters}(hjA0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=0ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj90ubji)}(hhh]jn)}(h;``struct drm_dp_mst_topology_mgr *mgr`` manager to suspend h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj^0h]h#struct drm_dp_mst_topology_mgr *mgr}(hj`0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\0ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjX0ubj)}(hhh]h)}(hmanager to suspendh]hmanager to suspend}(hjw0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs0hMhjt0ubah}(h]h ]h"]h$]h&]uh1jhjX0ubeh}(h]h ]h"]h$]h&]uh1jmhjs0hMhjU0ubah}(h]h ]h"]h$]h&]uh1jhhj90ubh)}(h**Description**h]j%)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj90ubh)}(hThis function tells the MST device that we can't handle UP messages anymore. This should stop it from sending any since we are suspended.h]hThis function tells the MST device that we can’t handle UP messages anymore. This should stop it from sending any since we are suspended.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj90ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_mst_topology_mgr_resume (C function) c.drm_dp_mst_topology_mgr_resumehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hSint drm_dp_mst_topology_mgr_resume (struct drm_dp_mst_topology_mgr *mgr, bool sync)h]j)}(hRint drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr, bool sync)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hMubj)}(hdrm_dp_mst_topology_mgr_resumeh]j)}(hdrm_dp_mst_topology_mgr_resumeh]hdrm_dp_mst_topology_mgr_resume}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhj0hMubj)}(h0(struct drm_dp_mst_topology_mgr *mgr, bool sync)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj(1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj91hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj61ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;1modnameN classnameNjj)}j]j%)}jj1sb c.drm_dp_mst_topology_mgr_resumeasbuh1hhj1ubj)}(h h]h }(hjY1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj9)}(hj9h]h*}(hjg1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1ubj)}(hmgrh]hmgr}(hjt1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubj)}(h bool synch](j)}(hjAh]hbool}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hsynch]hsync}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubeh}(h]h ]h"]h$]h&]jjuh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhj0hMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhj0hMhj0hhubj)}(hhh]h)}(hresume the MST managerh]hresume the MST manager}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhjhNhNubj)}(hXT**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to resume ``bool sync`` whether or not to perform topology reprobing synchronously **Description** This will fetch DPCD and see if the device is still there, if it is, it will rewrite the MSTM control bits, and return. If the device fails this returns -1, and the driver should do a full MST reprobe, in case we were undocked. During system resume (where it is assumed that the driver will be calling drm_atomic_helper_resume()) this function should be called beforehand with **sync** set to true. In contexts like runtime resume where the driver is not expected to be calling drm_atomic_helper_resume(), this function should be called with **sync** set to false in order to avoid deadlocking. **Return** -1 if the MST topology was removed while we were suspended, 0 otherwise.h](h)}(h**Parameters**h]j%)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubji)}(hhh](jn)}(h:``struct drm_dp_mst_topology_mgr *mgr`` manager to resume h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj2h]h#struct drm_dp_mst_topology_mgr *mgr}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj 2ubj)}(hhh]h)}(hmanager to resumeh]hmanager to resume}(hj,2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(2hMhj)2ubah}(h]h ]h"]h$]h&]uh1jhj 2ubeh}(h]h ]h"]h$]h&]uh1jmhj(2hMhj 2ubjn)}(hI``bool sync`` whether or not to perform topology reprobing synchronously h](jt)}(h ``bool sync``h]jz)}(hjL2h]h bool sync}(hjN2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ2ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjF2ubj)}(hhh]h)}(h:whether or not to perform topology reprobing synchronouslyh]h:whether or not to perform topology reprobing synchronously}(hje2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja2hMhjb2ubah}(h]h ]h"]h$]h&]uh1jhjF2ubeh}(h]h ]h"]h$]h&]uh1jmhja2hMhj 2ubeh}(h]h ]h"]h$]h&]uh1jhhj1ubh)}(h**Description**h]j%)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubh)}(hwThis will fetch DPCD and see if the device is still there, if it is, it will rewrite the MSTM control bits, and return.h]hwThis will fetch DPCD and see if the device is still there, if it is, it will rewrite the MSTM control bits, and return.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubh)}(hkIf the device fails this returns -1, and the driver should do a full MST reprobe, in case we were undocked.h]hkIf the device fails this returns -1, and the driver should do a full MST reprobe, in case we were undocked.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubh)}(hXnDuring system resume (where it is assumed that the driver will be calling drm_atomic_helper_resume()) this function should be called beforehand with **sync** set to true. In contexts like runtime resume where the driver is not expected to be calling drm_atomic_helper_resume(), this function should be called with **sync** set to false in order to avoid deadlocking.h](hDuring system resume (where it is assumed that the driver will be calling drm_atomic_helper_resume()) this function should be called beforehand with }(hj2hhhNhNubj%)}(h**sync**h]hsync}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh set to true. In contexts like runtime resume where the driver is not expected to be calling drm_atomic_helper_resume(), this function should be called with }(hj2hhhNhNubj%)}(h**sync**h]hsync}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh, set to false in order to avoid deadlocking.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubh)}(h **Return**h]j%)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubh)}(hH-1 if the MST topology was removed while we were suspended, 0 otherwise.h]hH-1 if the MST topology was removed while we were suspended, 0 otherwise.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_mst_hpd_irq_handle_event (C function)!c.drm_dp_mst_hpd_irq_handle_eventhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hpint drm_dp_mst_hpd_irq_handle_event (struct drm_dp_mst_topology_mgr *mgr, const u8 *esi, u8 *ack, bool *handled)h]j)}(hoint drm_dp_mst_hpd_irq_handle_event(struct drm_dp_mst_topology_mgr *mgr, const u8 *esi, u8 *ack, bool *handled)h](j)}(hinth]hint}(hj53hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj13hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjD3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj13hhhjC3hMubj)}(hdrm_dp_mst_hpd_irq_handle_eventh]j)}(hdrm_dp_mst_hpd_irq_handle_eventh]hdrm_dp_mst_hpd_irq_handle_event}(hjV3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj13hhhjC3hMubj)}(hL(struct drm_dp_mst_topology_mgr *mgr, const u8 *esi, u8 *ack, bool *handled)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjr3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn3ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j%)}jjX3sb!c.drm_dp_mst_hpd_irq_handle_eventasbuh1hhjn3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn3ubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjn3ubj)}(hmgrh]hmgr}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjj3ubj)}(h const u8 *esih](j)}(hjch]hconst}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hu8h]hu8}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j3!c.drm_dp_mst_hpd_irq_handle_eventasbuh1hhj3ubj)}(h h]h }(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hj.4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hesih]hesi}(hj;4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjj3ubj)}(hu8 *ackh](h)}(hhh]j)}(hu8h]hu8}(hjW4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjY4modnameN classnameNjj)}j]j3!c.drm_dp_mst_hpd_irq_handle_eventasbuh1hhjP4ubj)}(h h]h }(hju4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP4ubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjP4ubj)}(hackh]hack}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjj3ubj)}(h bool *handledh](j)}(hjAh]hbool}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hhandledh]hhandled}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjj3ubeh}(h]h ]h"]h$]h&]jjuh1jhj13hhhjC3hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-3hhhjC3hMubah}(h]j(3ah ](jjeh"]h$]h&]jj)jhuh1jhjC3hMhj*3hhubj)}(hhh]h)}(h MST hotplug IRQ handle MST eventh]h MST hotplug IRQ handle MST event}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMxhj4hhubah}(h]h ]h"]h$]h&]uh1jhj*3hhhjC3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1jhhhjhNhNubj)}(hXn**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to notify irq for. ``const u8 *esi`` 4 bytes from SINK_COUNT_ESI ``u8 *ack`` 4 bytes used to ack events starting from SINK_COUNT_ESI ``bool *handled`` whether the hpd interrupt was consumed or not **Description** This should be called from the driver when it detects a HPD IRQ, along with the value of the DEVICE_SERVICE_IRQ_VECTOR_ESI0. The topology manager will process the sideband messages received as indicated in the DEVICE_SERVICE_IRQ_VECTOR_ESI0 and set the corresponding flags that Driver has to ack the DP receiver later. Note that driver shall also call drm_dp_mst_hpd_irq_send_new_request() if the 'handled' is set after calling this function, to try to kick off a new request in the queue if the previous message transaction is completed. See also: drm_dp_mst_hpd_irq_send_new_request()h](h)}(h**Parameters**h]j%)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM|hj5ubji)}(hhh](jn)}(hC``struct drm_dp_mst_topology_mgr *mgr`` manager to notify irq for. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj<5h]h#struct drm_dp_mst_topology_mgr *mgr}(hj>5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:5ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMyhj65ubj)}(hhh]h)}(hmanager to notify irq for.h]hmanager to notify irq for.}(hjU5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ5hMyhjR5ubah}(h]h ]h"]h$]h&]uh1jhj65ubeh}(h]h ]h"]h$]h&]uh1jmhjQ5hMyhj35ubjn)}(h.``const u8 *esi`` 4 bytes from SINK_COUNT_ESI h](jt)}(h``const u8 *esi``h]jz)}(hju5h]h const u8 *esi}(hjw5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs5ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMzhjo5ubj)}(hhh]h)}(h4 bytes from SINK_COUNT_ESIh]h4 bytes from SINK_COUNT_ESI}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMzhj5ubah}(h]h ]h"]h$]h&]uh1jhjo5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hMzhj35ubjn)}(hD``u8 *ack`` 4 bytes used to ack events starting from SINK_COUNT_ESI h](jt)}(h ``u8 *ack``h]jz)}(hj5h]hu8 *ack}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM{hj5ubj)}(hhh]h)}(h74 bytes used to ack events starting from SINK_COUNT_ESIh]h74 bytes used to ack events starting from SINK_COUNT_ESI}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM{hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hM{hj35ubjn)}(h@``bool *handled`` whether the hpd interrupt was consumed or not h](jt)}(h``bool *handled``h]jz)}(hj5h]h bool *handled}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM|hj5ubj)}(hhh]h)}(h-whether the hpd interrupt was consumed or noth]h-whether the hpd interrupt was consumed or not}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM|hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hM|hj35ubeh}(h]h ]h"]h$]h&]uh1jhhj5ubh)}(h**Description**h]j%)}(hj"6h]h Description}(hj$6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj 6ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM~hj5ubh)}(hX>This should be called from the driver when it detects a HPD IRQ, along with the value of the DEVICE_SERVICE_IRQ_VECTOR_ESI0. The topology manager will process the sideband messages received as indicated in the DEVICE_SERVICE_IRQ_VECTOR_ESI0 and set the corresponding flags that Driver has to ack the DP receiver later.h]hX>This should be called from the driver when it detects a HPD IRQ, along with the value of the DEVICE_SERVICE_IRQ_VECTOR_ESI0. The topology manager will process the sideband messages received as indicated in the DEVICE_SERVICE_IRQ_VECTOR_ESI0 and set the corresponding flags that Driver has to ack the DP receiver later.}(hj86hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM~hj5ubh)}(hNote that driver shall also call drm_dp_mst_hpd_irq_send_new_request() if the 'handled' is set after calling this function, to try to kick off a new request in the queue if the previous message transaction is completed.h]hNote that driver shall also call drm_dp_mst_hpd_irq_send_new_request() if the ‘handled’ is set after calling this function, to try to kick off a new request in the queue if the previous message transaction is completed.}(hjG6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj5ubh)}(h/See also: drm_dp_mst_hpd_irq_send_new_request()h]h/See also: drm_dp_mst_hpd_irq_send_new_request()}(hjV6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_dp_mst_hpd_irq_send_new_request (C function)%c.drm_dp_mst_hpd_irq_send_new_requesthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hNvoid drm_dp_mst_hpd_irq_send_new_request (struct drm_dp_mst_topology_mgr *mgr)h]j)}(hMvoid drm_dp_mst_hpd_irq_send_new_request(struct drm_dp_mst_topology_mgr *mgr)h](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj6hMubj)}(h#drm_dp_mst_hpd_irq_send_new_requesth]j)}(h#drm_dp_mst_hpd_irq_send_new_requesth]h#drm_dp_mst_hpd_irq_send_new_request}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhj6hMubj)}(h%(struct drm_dp_mst_topology_mgr *mgr)h]j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j%)}jj6sb%c.drm_dp_mst_hpd_irq_send_new_requestasbuh1hhj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(hmgrh]hmgr}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}6hhhj6hMubah}(h]jx6ah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhjz6hhubj)}(hhh]h)}(h$MST hotplug IRQ kick off new requesth]h$MST hotplug IRQ kick off new request}(hjE7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjB7hhubah}(h]h ]h"]h$]h&]uh1jhjz6hhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]7jj]7jjjuh1jhhhjhNhNubj)}(hXY**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to notify irq for. **Description** This should be called from the driver when mst irq event is handled and acked. Note that new down request should only be sent when previous message transaction is completed. Source is not supposed to generate interleaved message transactions.h](h)}(h**Parameters**h]j%)}(hjg7h]h Parameters}(hji7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hje7ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhja7ubji)}(hhh]jn)}(hC``struct drm_dp_mst_topology_mgr *mgr`` manager to notify irq for. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj7h]h#struct drm_dp_mst_topology_mgr *mgr}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj7ubj)}(hhh]h)}(hmanager to notify irq for.h]hmanager to notify irq for.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhj}7ubah}(h]h ]h"]h$]h&]uh1jhhja7ubh)}(h**Description**h]j%)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhja7ubh)}(hThis should be called from the driver when mst irq event is handled and acked. Note that new down request should only be sent when previous message transaction is completed. Source is not supposed to generate interleaved message transactions.h]hThis should be called from the driver when mst irq event is handled and acked. Note that new down request should only be sent when previous message transaction is completed. Source is not supposed to generate interleaved message transactions.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhja7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_mst_detect_port (C function)c.drm_dp_mst_detect_porthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_mst_detect_port (struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h]j)}(hint drm_dp_mst_detect_port(struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMubj)}(hdrm_dp_mst_detect_porth]j)}(hdrm_dp_mst_detect_porth]hdrm_dp_mst_detect_port}(hj'8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hMubj)}(h(struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjC8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?8ubj)}(h h]h }(hjP8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?8ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hja8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjc8modnameN classnameNjj)}j]j%)}jj)8sbc.drm_dp_mst_detect_portasbuh1hhj?8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?8ubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?8ubj)}(h connectorh]h connector}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;8ubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j}8c.drm_dp_mst_detect_portasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hctxh]hctx}(hj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;8ubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj%9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!9ubj)}(h h]h }(hj29hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!9ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjC9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE9modnameN classnameNjj)}j]j}8c.drm_dp_mst_detect_portasbuh1hhj!9ubj)}(h h]h }(hja9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!9ubj9)}(hj9h]h*}(hjo9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!9ubj)}(hmgrh]hmgr}(hj|9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;8ubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j}8c.drm_dp_mst_detect_portasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(hporth]hport}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;8ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhj8hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhj8hMhj7hhubj)}(hhh]h)}(h%get connection status for an MST porth]h%get connection status for an MST port}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.:jj.:jjjuh1jhhhjhNhNubj)}(hXm**Parameters** ``struct drm_connector *connector`` DRM connector for this port ``struct drm_modeset_acquire_ctx *ctx`` The acquisition context to use for grabbing locks ``struct drm_dp_mst_topology_mgr *mgr`` manager for this port ``struct drm_dp_mst_port *port`` pointer to a port **Description** This returns the current connection state for a port.h](h)}(h**Parameters**h]j%)}(hj8:h]h Parameters}(hj::hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6:ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj2:ubji)}(hhh](jn)}(h@``struct drm_connector *connector`` DRM connector for this port h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjW:h]hstruct drm_connector *connector}(hjY:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU:ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjQ:ubj)}(hhh]h)}(hDRM connector for this porth]hDRM connector for this port}(hjp:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl:hMhjm:ubah}(h]h ]h"]h$]h&]uh1jhjQ:ubeh}(h]h ]h"]h$]h&]uh1jmhjl:hMhjN:ubjn)}(hZ``struct drm_modeset_acquire_ctx *ctx`` The acquisition context to use for grabbing locks h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hj:h]h#struct drm_modeset_acquire_ctx *ctx}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj:ubj)}(hhh]h)}(h1The acquisition context to use for grabbing locksh]h1The acquisition context to use for grabbing locks}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhjN:ubjn)}(h>``struct drm_dp_mst_topology_mgr *mgr`` manager for this port h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj:h]h#struct drm_dp_mst_topology_mgr *mgr}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj:ubj)}(hhh]h)}(hmanager for this porth]hmanager for this port}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj:hMhjN:ubjn)}(h3``struct drm_dp_mst_port *port`` pointer to a port h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj;h]hstruct drm_dp_mst_port *port}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj:ubj)}(hhh]h)}(hpointer to a porth]hpointer to a port}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj;hMhjN:ubeh}(h]h ]h"]h$]h&]uh1jhhj2:ubh)}(h**Description**h]j%)}(hj=;h]h Description}(hj?;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;;ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj2:ubh)}(h5This returns the current connection state for a port.h]h5This returns the current connection state for a port.}(hjS;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj2:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_mst_edid_read (C function)c.drm_dp_mst_edid_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hconst struct drm_edid * drm_dp_mst_edid_read (struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h]j)}(hconst struct drm_edid *drm_dp_mst_edid_read(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hjch]hconst}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~;hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~;hhhj;hM ubj)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~;hhhj;hM ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~;hhhj;hM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j%)}jdrm_dp_mst_edid_readsbc.drm_dp_mst_edid_readasbuh1hhj~;hhhj;hM ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~;hhhj;hM ubj9)}(hj9h]h*}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~;hhhj;hM ubj)}(hdrm_dp_mst_edid_readh]j)}(hj;h]hdrm_dp_mst_edid_read}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~;hhhj;hM ubj)}(hd(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj$<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj5<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7<modnameN classnameNjj)}j]j;c.drm_dp_mst_edid_readasbuh1hhj<ubj)}(h h]h }(hjS<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(hj9h]h*}(hja<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubj)}(h connectorh]h connector}(hjn<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j;c.drm_dp_mst_edid_readasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(hj9h]h*}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubj)}(hmgrh]hmgr}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j;c.drm_dp_mst_edid_readasbuh1hhj<ubj)}(h h]h }(hj3=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(hj9h]h*}(hjA=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubj)}(hporth]hport}(hjN=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhj~;hhhj;hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjz;hhhj;hM ubah}(h]ju;ah ](jjeh"]h$]h&]jj)jhuh1jhj;hM hjw;hhubj)}(hhh]h)}(hget EDID for an MST porth]hget EDID for an MST port}(hjx=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhju=hhubah}(h]h ]h"]h$]h&]uh1jhjw;hhhj;hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1jhhhjhNhNubj)}(hXz**Parameters** ``struct drm_connector *connector`` toplevel connector to get EDID for ``struct drm_dp_mst_topology_mgr *mgr`` manager for this port ``struct drm_dp_mst_port *port`` unverified pointer to a port. **Description** This returns an EDID for the port connected to a connector, It validates the pointer still exists so the caller doesn't require a reference.h](h)}(h**Parameters**h]j%)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj=ubji)}(hhh](jn)}(hG``struct drm_connector *connector`` toplevel connector to get EDID for h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj=h]hstruct drm_connector *connector}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj=ubj)}(hhh]h)}(h"toplevel connector to get EDID forh]h"toplevel connector to get EDID for}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMhj=ubjn)}(h>``struct drm_dp_mst_topology_mgr *mgr`` manager for this port h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj=h]h#struct drm_dp_mst_topology_mgr *mgr}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj=ubj)}(hhh]h)}(hmanager for this porth]hmanager for this port}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj=ubjn)}(h?``struct drm_dp_mst_port *port`` unverified pointer to a port. h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj+>h]hstruct drm_dp_mst_port *port}(hj->hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)>ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj%>ubj)}(hhh]h)}(hunverified pointer to a port.h]hunverified pointer to a port.}(hjD>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@>hMhjA>ubah}(h]h ]h"]h$]h&]uh1jhj%>ubeh}(h]h ]h"]h$]h&]uh1jmhj@>hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhhj=ubh)}(h**Description**h]j%)}(hjf>h]h Description}(hjh>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjd>ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj=ubh)}(hThis returns an EDID for the port connected to a connector, It validates the pointer still exists so the caller doesn't require a reference.h]hThis returns an EDID for the port connected to a connector, It validates the pointer still exists so the caller doesn’t require a reference.}(hj|>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dp_mst_get_edid (C function)c.drm_dp_mst_get_edidhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct edid * drm_dp_mst_get_edid (struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h]j)}(hstruct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hM+ubh)}(hhh]j)}(hedidh]hedid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j%)}jdrm_dp_mst_get_edidsbc.drm_dp_mst_get_edidasbuh1hhj>hhhj>hM+ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hM+ubj9)}(hj9h]h*}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>hhhj>hM+ubj)}(hdrm_dp_mst_get_edidh]j)}(hj>h]hdrm_dp_mst_get_edid}(hj ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj>hM+ubj)}(hd(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj%?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!?ubj)}(h h]h }(hj2?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!?ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjC?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE?modnameN classnameNjj)}j]j>c.drm_dp_mst_get_edidasbuh1hhj!?ubj)}(h h]h }(hja?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!?ubj9)}(hj9h]h*}(hjo?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!?ubj)}(h connectorh]h connector}(hj|?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j>c.drm_dp_mst_get_edidasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hmgrh]hmgr}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj#@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%@modnameN classnameNjj)}j]j>c.drm_dp_mst_get_edidasbuh1hhj@ubj)}(h h]h }(hjA@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hjO@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(hporth]hport}(hj\@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hM+ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj>hM+ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhj>hM+hj>hhubj)}(hhh]h)}(hget EDID for an MST porth]hget EDID for an MST port}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hj@hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` toplevel connector to get EDID for ``struct drm_dp_mst_topology_mgr *mgr`` manager for this port ``struct drm_dp_mst_port *port`` unverified pointer to a port. **Description** This function is deprecated; please use drm_dp_mst_edid_read() instead. This returns an EDID for the port connected to a connector, It validates the pointer still exists so the caller doesn't require a reference.h](h)}(h**Parameters**h]j%)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM$hj@ubji)}(hhh](jn)}(hG``struct drm_connector *connector`` toplevel connector to get EDID for h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj@h]hstruct drm_connector *connector}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM!hj@ubj)}(hhh]h)}(h"toplevel connector to get EDID forh]h"toplevel connector to get EDID for}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM!hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hM!hj@ubjn)}(h>``struct drm_dp_mst_topology_mgr *mgr`` manager for this port h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjAh]h#struct drm_dp_mst_topology_mgr *mgr}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM"hj@ubj)}(hhh]h)}(hmanager for this porth]hmanager for this port}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM"hjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhjAhM"hj@ubjn)}(h?``struct drm_dp_mst_port *port`` unverified pointer to a port. h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj9Ah]hstruct drm_dp_mst_port *port}(hj;AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7Aubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM#hj3Aubj)}(hhh]h)}(hunverified pointer to a port.h]hunverified pointer to a port.}(hjRAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNAhM#hjOAubah}(h]h ]h"]h$]h&]uh1jhj3Aubeh}(h]h ]h"]h$]h&]uh1jmhjNAhM#hj@ubeh}(h]h ]h"]h$]h&]uh1jhhj@ubh)}(h**Description**h]j%)}(hjtAh]h Description}(hjvAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrAubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM%hj@ubh)}(hGThis function is deprecated; please use drm_dp_mst_edid_read() instead.h]hGThis function is deprecated; please use drm_dp_mst_edid_read() instead.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM%hj@ubh)}(hThis returns an EDID for the port connected to a connector, It validates the pointer still exists so the caller doesn't require a reference.h]hThis returns an EDID for the port connected to a connector, It validates the pointer still exists so the caller doesn’t require a reference.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM'hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dp_atomic_find_time_slots (C function)c.drm_dp_atomic_find_time_slotshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_atomic_find_time_slots (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, int pbn)h]j)}(hint drm_dp_atomic_find_time_slots(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, int pbn)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMXubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjAhMXubj)}(hdrm_dp_atomic_find_time_slotsh]j)}(hdrm_dp_atomic_find_time_slotsh]hdrm_dp_atomic_find_time_slots}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjAhhhjAhMXubj)}(hl(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, int pbn)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj#BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Bubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%BmodnameN classnameNjj)}j]j%)}jjAsbc.drm_dp_atomic_find_time_slotsasbuh1hhjBubj)}(h h]h }(hjCBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hjQBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hstateh]hstate}(hj^BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjwBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsBubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j?Bc.drm_dp_atomic_find_time_slotsasbuh1hhjsBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsBubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsBubj)}(hmgrh]hmgr}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j?Bc.drm_dp_atomic_find_time_slotsasbuh1hhjBubj)}(h h]h }(hj#ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hj1ChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hporth]hport}(hj>ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hint pbnh](j)}(hinth]hint}(hjWChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubj)}(h h]h }(hjeChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubj)}(hpbnh]hpbn}(hjsChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjAhhhjAhMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjAhMXubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhjAhMXhjAhhubj)}(hhh]h)}(h$Find and add time slots to the stateh]h$Find and add time slots to the state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM=hjChhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager for the port ``struct drm_dp_mst_port *port`` port to find time slots for ``int pbn`` bandwidth required for the mode in PBN **Description** Allocates time slots to **port**, replacing any previous time slot allocations it may have had. Any atomic drivers which support MST must call this function in their :c:type:`drm_encoder_helper_funcs.atomic_check\(\) ` callback unconditionally to change the current time slot allocation for the new state, and ensure the MST atomic state is added whenever the state of payloads in the topology changes. Allocations set by this function are not checked against the bandwidth restraints of **mgr** until the driver calls drm_dp_mst_atomic_check(). Additionally, it is OK to call this function multiple times on the same **port** as needed. It is not OK however, to call this function and drm_dp_atomic_release_time_slots() in the same atomic check phase. See also: drm_dp_atomic_release_time_slots() drm_dp_mst_atomic_check() **Return** Total slots in the atomic state assigned for this port, or a negative error code if the port no longer existsh](h)}(h**Parameters**h]j%)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMAhjCubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjCh]hstruct drm_atomic_state *state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM>hjCubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM>hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChM>hjCubjn)}(hJ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager for the port h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjDh]h#struct drm_dp_mst_topology_mgr *mgr}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM?hjDubj)}(hhh]h)}(h!MST topology manager for the porth]h!MST topology manager for the port}(hj0DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,DhM?hj-Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhj,DhM?hjCubjn)}(h=``struct drm_dp_mst_port *port`` port to find time slots for h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hjPDh]hstruct drm_dp_mst_port *port}(hjRDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNDubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM@hjJDubj)}(hhh]h)}(hport to find time slots forh]hport to find time slots for}(hjiDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeDhM@hjfDubah}(h]h ]h"]h$]h&]uh1jhjJDubeh}(h]h ]h"]h$]h&]uh1jmhjeDhM@hjCubjn)}(h3``int pbn`` bandwidth required for the mode in PBN h](jt)}(h ``int pbn``h]jz)}(hjDh]hint pbn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMAhjDubj)}(hhh]h)}(h&bandwidth required for the mode in PBNh]h&bandwidth required for the mode in PBN}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMAhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhjDhMAhjCubeh}(h]h ]h"]h$]h&]uh1jhhjCubh)}(h**Description**h]j%)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMChjCubh)}(hXAllocates time slots to **port**, replacing any previous time slot allocations it may have had. Any atomic drivers which support MST must call this function in their :c:type:`drm_encoder_helper_funcs.atomic_check\(\) ` callback unconditionally to change the current time slot allocation for the new state, and ensure the MST atomic state is added whenever the state of payloads in the topology changes.h](hAllocates time slots to }(hjDhhhNhNubj%)}(h**port**h]hport}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubh, replacing any previous time slot allocations it may have had. Any atomic drivers which support MST must call this function in their }(hjDhhhNhNubh)}(hN:c:type:`drm_encoder_helper_funcs.atomic_check\(\) `h]jz)}(hjDh]h'drm_encoder_helper_funcs.atomic_check()}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMChjDubh callback unconditionally to change the current time slot allocation for the new state, and ensure the MST atomic state is added whenever the state of payloads in the topology changes.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEhMChjCubh)}(hAllocations set by this function are not checked against the bandwidth restraints of **mgr** until the driver calls drm_dp_mst_atomic_check().h](hUAllocations set by this function are not checked against the bandwidth restraints of }(hjEhhhNhNubj%)}(h**mgr**h]hmgr}(hj&EhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh2 until the driver calls drm_dp_mst_atomic_check().}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMIhjCubh)}(hAdditionally, it is OK to call this function multiple times on the same **port** as needed. It is not OK however, to call this function and drm_dp_atomic_release_time_slots() in the same atomic check phase.h](hHAdditionally, it is OK to call this function multiple times on the same }(hj?EhhhNhNubj%)}(h**port**h]hport}(hjGEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?Eubh~ as needed. It is not OK however, to call this function and drm_dp_atomic_release_time_slots() in the same atomic check phase.}(hj?EhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMLhjCubh)}(hFSee also: drm_dp_atomic_release_time_slots() drm_dp_mst_atomic_check()h]hFSee also: drm_dp_atomic_release_time_slots() drm_dp_mst_atomic_check()}(hj`EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMPhjCubh)}(h **Return**h]j%)}(hjqEh]hReturn}(hjsEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoEubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMThjCubh)}(hmTotal slots in the atomic state assigned for this port, or a negative error code if the port no longer existsh]hmTotal slots in the atomic state assigned for this port, or a negative error code if the port no longer exists}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMThjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_atomic_release_time_slots (C function)"c.drm_dp_atomic_release_time_slotshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_atomic_release_time_slots (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h]j)}(hint drm_dp_atomic_release_time_slots(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhMubj)}(h drm_dp_atomic_release_time_slotsh]j)}(h drm_dp_atomic_release_time_slotsh]h drm_dp_atomic_release_time_slots}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjEhMubj)}(hc(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j%)}jjEsb"c.drm_dp_atomic_release_time_slotsasbuh1hhjEubj)}(h h]h }(hj1FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hj?FhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(hstateh]hstate}(hjLFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjeFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaFubj)}(h h]h }(hjrFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaFubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j-F"c.drm_dp_atomic_release_time_slotsasbuh1hhjaFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaFubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaFubj)}(hmgrh]hmgr}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j-F"c.drm_dp_atomic_release_time_slotsasbuh1hhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubj)}(hporth]hport}(hj,GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjEhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjEhhhjEhMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhjEhMhjEhhubj)}(hhh]h)}(hRelease allocated time slotsh]hRelease allocated time slots}(hjVGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjSGhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnGjjnGjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager for the port ``struct drm_dp_mst_port *port`` The port to release the time slots from **Description** Releases any time slots that have been allocated to a port in the atomic state. Any atomic drivers which support MST must call this function unconditionally in their :c:type:`drm_connector_helper_funcs.atomic_check\(\) ` callback. This helper will check whether time slots would be released by the new state and respond accordingly, along with ensuring the MST state is always added to the atomic state whenever a new state would modify the state of payloads on the topology. It is OK to call this even if **port** has been removed from the system. Additionally, it is OK to call this function multiple times on the same **port** as needed. It is not OK however, to call this function and drm_dp_atomic_find_time_slots() on the same **port** in a single atomic check phase. See also: drm_dp_atomic_find_time_slots() drm_dp_mst_atomic_check() **Return** 0 on success, negative error code otherwiseh](h)}(h**Parameters**h]j%)}(hjxGh]h Parameters}(hjzGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvGubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjrGubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjGh]hstruct drm_atomic_state *state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjGubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhjGubjn)}(hJ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager for the port h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjGh]h#struct drm_dp_mst_topology_mgr *mgr}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjGubj)}(hhh]h)}(h!MST topology manager for the porth]h!MST topology manager for the port}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhjGubjn)}(hI``struct drm_dp_mst_port *port`` The port to release the time slots from h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj Hh]hstruct drm_dp_mst_port *port}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjHubj)}(hhh]h)}(h'The port to release the time slots fromh]h'The port to release the time slots from}(hj"HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjHhMhjGubeh}(h]h ]h"]h$]h&]uh1jhhjrGubh)}(h**Description**h]j%)}(hjDHh]h Description}(hjFHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBHubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjrGubh)}(hXReleases any time slots that have been allocated to a port in the atomic state. Any atomic drivers which support MST must call this function unconditionally in their :c:type:`drm_connector_helper_funcs.atomic_check\(\) ` callback. This helper will check whether time slots would be released by the new state and respond accordingly, along with ensuring the MST state is always added to the atomic state whenever a new state would modify the state of payloads on the topology.h](hReleases any time slots that have been allocated to a port in the atomic state. Any atomic drivers which support MST must call this function unconditionally in their }(hjZHhhhNhNubh)}(hR:c:type:`drm_connector_helper_funcs.atomic_check\(\) `h]jz)}(hjdHh]h)drm_connector_helper_funcs.atomic_check()}(hjfHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjbHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjZHubh callback. This helper will check whether time slots would be released by the new state and respond accordingly, along with ensuring the MST state is always added to the atomic state whenever a new state would modify the state of payloads on the topology.}(hjZHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMhjrGubh)}(hX)It is OK to call this even if **port** has been removed from the system. Additionally, it is OK to call this function multiple times on the same **port** as needed. It is not OK however, to call this function and drm_dp_atomic_find_time_slots() on the same **port** in a single atomic check phase.h](hIt is OK to call this even if }(hjHhhhNhNubj%)}(h**port**h]hport}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubhk has been removed from the system. Additionally, it is OK to call this function multiple times on the same }(hjHhhhNhNubj%)}(h**port**h]hport}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubhh as needed. It is not OK however, to call this function and drm_dp_atomic_find_time_slots() on the same }(hjHhhhNhNubj%)}(h**port**h]hport}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubh in a single atomic check phase.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjrGubh)}(hCSee also: drm_dp_atomic_find_time_slots() drm_dp_mst_atomic_check()h]hCSee also: drm_dp_atomic_find_time_slots() drm_dp_mst_atomic_check()}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjrGubh)}(h **Return**h]j%)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjrGubh)}(h+0 on success, negative error code otherwiseh]h+0 on success, negative error code otherwise}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjrGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_mst_atomic_setup_commit (C function) c.drm_dp_mst_atomic_setup_commithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hCint drm_dp_mst_atomic_setup_commit (struct drm_atomic_state *state)h]j)}(hBint drm_dp_mst_atomic_setup_commit(struct drm_atomic_state *state)h](j)}(hinth]hint}(hj'IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Ihhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj6IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Ihhhj5IhMubj)}(hdrm_dp_mst_atomic_setup_commith]j)}(hdrm_dp_mst_atomic_setup_commith]hdrm_dp_mst_atomic_setup_commit}(hjHIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDIubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#Ihhhj5IhMubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjdIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Iubj)}(h h]h }(hjqIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Iubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jjJIsb c.drm_dp_mst_atomic_setup_commitasbuh1hhj`Iubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Iubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`Iubj)}(hstateh]hstate}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Iubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\Iubah}(h]h ]h"]h$]h&]jjuh1jhj#Ihhhj5IhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhj5IhMubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhj5IhMhjIhhubj)}(hhh]h)}(h!setup_commit hook for MST helpersh]h!setup_commit hook for MST helpers}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhj5IhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjIjjIjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state **Description** This function saves all of the :c:type:`drm_crtc_commit` structs in an atomic state that touch any CRTCs currently assigned to an MST topology. Drivers must call this hook from their :c:type:`drm_mode_config_helper_funcs.atomic_commit_setup ` hook. **Return** 0 if all CRTC commits were retrieved successfully, negative error code otherwiseh](h)}(h**Parameters**h]j%)}(hj Jh]h Parameters}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjJubji)}(hhh]jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj(Jh]hstruct drm_atomic_state *state}(hj*JhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&Jubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj"Jubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjAJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=JhMhj>Jubah}(h]h ]h"]h$]h&]uh1jhj"Jubeh}(h]h ]h"]h$]h&]uh1jmhj=JhMhjJubah}(h]h ]h"]h$]h&]uh1jhhjJubh)}(h**Description**h]j%)}(hjcJh]h Description}(hjeJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaJubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjJubh)}(hXThis function saves all of the :c:type:`drm_crtc_commit` structs in an atomic state that touch any CRTCs currently assigned to an MST topology. Drivers must call this hook from their :c:type:`drm_mode_config_helper_funcs.atomic_commit_setup ` hook.h](hThis function saves all of the }(hjyJhhhNhNubh)}(h:c:type:`drm_crtc_commit`h]jz)}(hjJh]hdrm_crtc_commit}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_commituh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyJubh structs in an atomic state that touch any CRTCs currently assigned to an MST topology. Drivers must call this hook from their }(hjyJhhhNhNubh)}(hY:c:type:`drm_mode_config_helper_funcs.atomic_commit_setup `h]jz)}(hjJh]h0drm_mode_config_helper_funcs.atomic_commit_setup}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhjJhMhjyJubh hook.}(hjyJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhMhjJubh)}(h **Return**h]j%)}(hjJh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjJubh)}(hP0 if all CRTC commits were retrieved successfully, negative error code otherwiseh]hP0 if all CRTC commits were retrieved successfully, negative error code otherwise}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_dp_mst_atomic_wait_for_dependencies (C function))c.drm_dp_mst_atomic_wait_for_dependencieshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMvoid drm_dp_mst_atomic_wait_for_dependencies (struct drm_atomic_state *state)h]j)}(hLvoid drm_dp_mst_atomic_wait_for_dependencies(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM'ubj)}(h h]h }(hj$KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj#KhM'ubj)}(h'drm_dp_mst_atomic_wait_for_dependenciesh]j)}(h'drm_dp_mst_atomic_wait_for_dependenciesh]h'drm_dp_mst_atomic_wait_for_dependencies}(hj6KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Kubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj#KhM'ubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjRKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKubj)}(h h]h }(hj_KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjpKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrKmodnameN classnameNjj)}j]j%)}jj8Ksb)c.drm_dp_mst_atomic_wait_for_dependenciesasbuh1hhjNKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNKubj)}(hstateh]hstate}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJKubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhj#KhM'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj Khhhj#KhM'ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhj#KhM'hj Khhubj)}(hhh]h)}(hPWait for all pending commits on MST topologies, prepare new MST state for commith]hPWait for all pending commits on MST topologies, prepare new MST state for commit}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjKhhubah}(h]h ]h"]h$]h&]uh1jhj Khhhj#KhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state **Description** Goes through any MST topologies in this atomic state, and waits for any pending commits which touched CRTCs that were/are on an MST topology to be programmed to hardware and flipped to before returning. This is to prevent multiple non-blocking commits affecting an MST topology from racing with eachother by forcing them to be executed sequentially in situations where the only resources the modeset objects in these commits share are an MST topology. This function also prepares the new MST state for commit by performing some state preparation which can't be done until this point, such as reading back the final VC start slots (which are determined at commit-time) from the previous state. All MST drivers must call this function after calling drm_atomic_helper_wait_for_dependencies(), or whatever their equivalent of that is.h](h)}(h**Parameters**h]j%)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjKubji)}(hhh]jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjLh]hstruct drm_atomic_state *state}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjLubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hj/LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+LhMhj,Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhj+LhMhj Lubah}(h]h ]h"]h$]h&]uh1jhhjKubh)}(h**Description**h]j%)}(hjQLh]h Description}(hjSLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOLubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjKubh)}(hXGoes through any MST topologies in this atomic state, and waits for any pending commits which touched CRTCs that were/are on an MST topology to be programmed to hardware and flipped to before returning. This is to prevent multiple non-blocking commits affecting an MST topology from racing with eachother by forcing them to be executed sequentially in situations where the only resources the modeset objects in these commits share are an MST topology.h]hXGoes through any MST topologies in this atomic state, and waits for any pending commits which touched CRTCs that were/are on an MST topology to be programmed to hardware and flipped to before returning. This is to prevent multiple non-blocking commits affecting an MST topology from racing with eachother by forcing them to be executed sequentially in situations where the only resources the modeset objects in these commits share are an MST topology.}(hjgLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjKubh)}(hThis function also prepares the new MST state for commit by performing some state preparation which can't be done until this point, such as reading back the final VC start slots (which are determined at commit-time) from the previous state.h]hThis function also prepares the new MST state for commit by performing some state preparation which can’t be done until this point, such as reading back the final VC start slots (which are determined at commit-time) from the previous state.}(hjvLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjKubh)}(hAll MST drivers must call this function after calling drm_atomic_helper_wait_for_dependencies(), or whatever their equivalent of that is.h]hAll MST drivers must call this function after calling drm_atomic_helper_wait_for_dependencies(), or whatever their equivalent of that is.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM$hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_dp_mst_root_conn_atomic_check (C function)#c.drm_dp_mst_root_conn_atomic_checkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hwint drm_dp_mst_root_conn_atomic_check (struct drm_connector_state *new_conn_state, struct drm_dp_mst_topology_mgr *mgr)h]j)}(hvint drm_dp_mst_root_conn_atomic_check(struct drm_connector_state *new_conn_state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM]ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhjLhM]ubj)}(h!drm_dp_mst_root_conn_atomic_checkh]j)}(h!drm_dp_mst_root_conn_atomic_checkh]h!drm_dp_mst_root_conn_atomic_check}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhjLhM]ubj)}(hQ(struct drm_connector_state *new_conn_state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(h*struct drm_connector_state *new_conn_stateh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j%)}jjLsb#c.drm_dp_mst_root_conn_atomic_checkasbuh1hhjLubj)}(h h]h }(hj/MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hj=MhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hnew_conn_stateh]hnew_conn_state}(hjJMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjcMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Mubj)}(h h]h }(hjpMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Mubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j+M#c.drm_dp_mst_root_conn_atomic_checkasbuh1hhj_Mubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Mubj9)}(hj9h]h*}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj_Mubj)}(hmgrh]hmgr}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Mubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhjLhM]ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjLhhhjLhM]ubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1jhjLhM]hjLhhubj)}(hhh]h)}(hFSerialize CRTC commits on MST-capable connectors operating in SST modeh]hFSerialize CRTC commits on MST-capable connectors operating in SST mode}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMHhjMhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhM]ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector_state *new_conn_state`` The new connector state of the :c:type:`drm_connector` ``struct drm_dp_mst_topology_mgr *mgr`` The MST topology manager for the :c:type:`drm_connector` **Description** Since MST uses fake :c:type:`drm_encoder` structs, the generic atomic modesetting code isn't able to serialize non-blocking commits happening on the real DP connector of an MST topology switching into/away from MST mode - as the CRTC on the real DP connector and the CRTCs on the connector's MST topology will never share the same :c:type:`drm_encoder`. This function takes care of this serialization issue, by checking a root MST connector's atomic state to determine if it is about to have a modeset - and then pulling in the MST topology state if so, along with adding any relevant CRTCs to :c:type:`drm_dp_mst_topology_state.pending_crtc_mask `. Drivers implementing MST must call this function from the :c:type:`drm_connector_helper_funcs.atomic_check ` hook of any physical DP :c:type:`drm_connector` capable of driving MST sinks. **Return** 0 on success, negative error code otherwiseh](h)}(h**Parameters**h]j%)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMLhjNubji)}(hhh](jn)}(hf``struct drm_connector_state *new_conn_state`` The new connector state of the :c:type:`drm_connector` h](jt)}(h.``struct drm_connector_state *new_conn_state``h]jz)}(hj%Nh]h*struct drm_connector_state *new_conn_state}(hj'NhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#Nubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMJhjNubj)}(hhh]h)}(h6The new connector state of the :c:type:`drm_connector`h](hThe new connector state of the }(hj>NhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjHNh]h drm_connector}(hjJNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj:NhMJhj>Nubeh}(h]h ]h"]h$]h&]uh1hhj:NhMJhj;Nubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhj:NhMJhjNubjn)}(ha``struct drm_dp_mst_topology_mgr *mgr`` The MST topology manager for the :c:type:`drm_connector` h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj}Nh]h#struct drm_dp_mst_topology_mgr *mgr}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{Nubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMKhjwNubj)}(hhh]h)}(h8The MST topology manager for the :c:type:`drm_connector`h](h!The MST topology manager for the }(hjNhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjNh]h drm_connector}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjNhMKhjNubeh}(h]h ]h"]h$]h&]uh1hhjNhMKhjNubah}(h]h ]h"]h$]h&]uh1jhjwNubeh}(h]h ]h"]h$]h&]uh1jmhjNhMKhjNubeh}(h]h ]h"]h$]h&]uh1jhhjNubh)}(h**Description**h]j%)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMMhjNubh)}(hXaSince MST uses fake :c:type:`drm_encoder` structs, the generic atomic modesetting code isn't able to serialize non-blocking commits happening on the real DP connector of an MST topology switching into/away from MST mode - as the CRTC on the real DP connector and the CRTCs on the connector's MST topology will never share the same :c:type:`drm_encoder`.h](hSince MST uses fake }(hjNhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjNh]h drm_encoder}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMMhjNubhX& structs, the generic atomic modesetting code isn’t able to serialize non-blocking commits happening on the real DP connector of an MST topology switching into/away from MST mode - as the CRTC on the real DP connector and the CRTCs on the connector’s MST topology will never share the same }(hjNhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjOh]h drm_encoder}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hhjOhMMhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhMMhjNubh)}(hXBThis function takes care of this serialization issue, by checking a root MST connector's atomic state to determine if it is about to have a modeset - and then pulling in the MST topology state if so, along with adding any relevant CRTCs to :c:type:`drm_dp_mst_topology_state.pending_crtc_mask `.h](hThis function takes care of this serialization issue, by checking a root MST connector’s atomic state to determine if it is about to have a modeset - and then pulling in the MST topology state if so, along with adding any relevant CRTCs to }(hjBOhhhNhNubh)}(hQ:c:type:`drm_dp_mst_topology_state.pending_crtc_mask `h]jz)}(hjLOh]h+drm_dp_mst_topology_state.pending_crtc_mask}(hjNOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMRhjBOubh.}(hjBOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjiOhMRhjNubh)}(hDrivers implementing MST must call this function from the :c:type:`drm_connector_helper_funcs.atomic_check ` hook of any physical DP :c:type:`drm_connector` capable of driving MST sinks.h](h:Drivers implementing MST must call this function from the }(hjtOhhhNhNubh)}(hN:c:type:`drm_connector_helper_funcs.atomic_check `h]jz)}(hj~Oh]h'drm_connector_helper_funcs.atomic_check}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj|Oubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMVhjtOubh hook of any physical DP }(hjtOhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjOh]h drm_connector}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjOhMVhjtOubh capable of driving MST sinks.}(hjtOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhMVhjNubh)}(h **Return**h]j%)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMZhjNubh)}(h+0 on success, negative error code otherwiseh]h+0 on success, negative error code otherwise}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMZhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_update_slots (C function)c.drm_dp_mst_update_slotshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hevoid drm_dp_mst_update_slots (struct drm_dp_mst_topology_state *mst_state, uint8_t link_encoding_cap)h]j)}(hdvoid drm_dp_mst_update_slots(struct drm_dp_mst_topology_state *mst_state, uint8_t link_encoding_cap)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Phhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj PhhhjPhMubj)}(hdrm_dp_mst_update_slotsh]j)}(hdrm_dp_mst_update_slotsh]hdrm_dp_mst_update_slots}(hj1PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Pubah}(h]h ](jjeh"]h$]h&]jjuh1jhj PhhhjPhMubj)}(hH(struct drm_dp_mst_topology_state *mst_state, uint8_t link_encoding_cap)h](j)}(h+struct drm_dp_mst_topology_state *mst_stateh](j)}(hjh]hstruct}(hjMPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIPubj)}(h h]h }(hjZPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIPubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjkPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmPmodnameN classnameNjj)}j]j%)}jj3Psbc.drm_dp_mst_update_slotsasbuh1hhjIPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIPubj9)}(hj9h]h*}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIPubj)}(h mst_stateh]h mst_state}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEPubj)}(huint8_t link_encoding_caph](h)}(hhh]j)}(huint8_th]huint8_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jPc.drm_dp_mst_update_slotsasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hlink_encoding_caph]hlink_encoding_cap}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEPubeh}(h]h ]h"]h$]h&]jjuh1jhj PhhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjPhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhjPhMhjPhhubj)}(hhh]h)}(h8updates the slot info depending on the DP ecoding formath]h8updates the slot info depending on the DP ecoding format}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0Qjj0Qjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_mst_topology_state *mst_state`` mst_state to update ``uint8_t link_encoding_cap`` the ecoding format on the linkh](h)}(h**Parameters**h]j%)}(hj:Qh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjRubh)}(h **Return**h]j%)}(hjOSh]hReturn}(hjQShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMSubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjRubh)}(hA0 if the ACT was handled in time, negative error code on failure.h]hA0 if the ACT was handled in time, negative error code on failure.}(hjeShhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_calc_pbn_mode (C function)c.drm_dp_calc_pbn_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h-int drm_dp_calc_pbn_mode (int clock, int bpp)h]j)}(h,int drm_dp_calc_pbn_mode(int clock, int bpp)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMubj)}(hdrm_dp_calc_pbn_modeh]j)}(hdrm_dp_calc_pbn_modeh]hdrm_dp_calc_pbn_mode}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMubj)}(h(int clock, int bpp)h](j)}(h int clockh](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hclockh]hclock}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hint bpph](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hbpph]hbpp}(hj"ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjShMhjShhubj)}(hhh]h)}(hCalculate the PBN for a mode.h]hCalculate the PBN for a mode.}(hjLThhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjIThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdTjjdTjjjuh1jhhhjhNhNubj)}(h**Parameters** ``int clock`` dot clock ``int bpp`` bpp as .4 binary fixed point **Description** This uses the formula in the spec to calculate the PBN value for a mode.h](h)}(h**Parameters**h]j%)}(hjnTh]h Parameters}(hjpThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlTubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhTubji)}(hhh](jn)}(h``int clock`` dot clock h](jt)}(h ``int clock``h]jz)}(hjTh]h int clock}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjTubj)}(hhh]h)}(h dot clockh]h dot clock}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjTubjn)}(h)``int bpp`` bpp as .4 binary fixed point h](jt)}(h ``int bpp``h]jz)}(hjTh]hint bpp}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjTubj)}(hhh]h)}(hbpp as .4 binary fixed pointh]hbpp as .4 binary fixed point}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjTubeh}(h]h ]h"]h$]h&]uh1jhhjhTubh)}(h**Description**h]j%)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhTubh)}(hHThis uses the formula in the spec to calculate the PBN value for a mode.h]hHThis uses the formula in the spec to calculate the PBN value for a mode.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_mst_dump_topology (C function)c.drm_dp_mst_dump_topologyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWvoid drm_dp_mst_dump_topology (struct seq_file *m, struct drm_dp_mst_topology_mgr *mgr)h]j)}(hVvoid drm_dp_mst_dump_topology(struct seq_file *m, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hvoidh]hvoid}(hjFUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBUhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM.ubj)}(h h]h }(hjUUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBUhhhjTUhM.ubj)}(hdrm_dp_mst_dump_topologyh]j)}(hdrm_dp_mst_dump_topologyh]hdrm_dp_mst_dump_topology}(hjgUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBUhhhjTUhM.ubj)}(h9(struct seq_file *m, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct seq_file *mh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hseq_fileh]hseq_file}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j%)}jjiUsbc.drm_dp_mst_dump_topologyasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUubj)}(hjh]hm}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{Uubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]jUc.drm_dp_mst_dump_topologyasbuh1hhjUubj)}(h h]h }(hj0VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(hj9h]h*}(hj>VhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUubj)}(hmgrh]hmgr}(hjKVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{Uubeh}(h]h ]h"]h$]h&]jjuh1jhjBUhhhjTUhM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>UhhhjTUhM.ubah}(h]j9Uah ](jjeh"]h$]h&]jj)jhuh1jhjTUhM.hj;Uhhubj)}(hhh]h)}(hdump topology to seq file.h]hdump topology to seq file.}(hjuVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM(hjrVhhubah}(h]h ]h"]h$]h&]uh1jhj;UhhhjTUhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct seq_file *m`` seq_file to dump output to ``struct drm_dp_mst_topology_mgr *mgr`` manager to dump current topology for. **Description** helper to dump MST topology to a seq file for debugfs.h](h)}(h**Parameters**h]j%)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM,hjVubji)}(hhh](jn)}(h2``struct seq_file *m`` seq_file to dump output to h](jt)}(h``struct seq_file *m``h]jz)}(hjVh]hstruct seq_file *m}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM)hjVubj)}(hhh]h)}(hseq_file to dump output toh]hseq_file to dump output to}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM)hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjVhM)hjVubjn)}(hN``struct drm_dp_mst_topology_mgr *mgr`` manager to dump current topology for. h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjVh]h#struct drm_dp_mst_topology_mgr *mgr}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM*hjVubj)}(hhh]h)}(h%manager to dump current topology for.h]h%manager to dump current topology for.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM*hjWubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjWhM*hjVubeh}(h]h ]h"]h$]h&]uh1jhhjVubh)}(h**Description**h]j%)}(hj*Wh]h Description}(hj,WhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(Wubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM,hjVubh)}(h6helper to dump MST topology to a seq file for debugfs.h]h6helper to dump MST topology to a seq file for debugfs.}(hj@WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM,hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_dp_mst_port_downstream_of_parent (C function)&c.drm_dp_mst_port_downstream_of_parenthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbool drm_dp_mst_port_downstream_of_parent (struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, struct drm_dp_mst_port *parent)h]j)}(hbool drm_dp_mst_port_downstream_of_parent(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, struct drm_dp_mst_port *parent)h](j)}(hjAh]hbool}(hjoWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkWhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMyubj)}(h h]h }(hj}WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkWhhhj|WhMyubj)}(h$drm_dp_mst_port_downstream_of_parenth]j)}(h$drm_dp_mst_port_downstream_of_parenth]h$drm_dp_mst_port_downstream_of_parent}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkWhhhj|WhMyubj)}(hc(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, struct drm_dp_mst_port *parent)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j%)}jjWsb&c.drm_dp_mst_port_downstream_of_parentasbuh1hhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWubj)}(hmgrh]hmgr}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hj*XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj;XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8Xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=XmodnameN classnameNjj)}j]jW&c.drm_dp_mst_port_downstream_of_parentasbuh1hhjXubj)}(h h]h }(hjYXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjgXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hporth]hport}(hjtXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hstruct drm_dp_mst_port *parenth](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]jW&c.drm_dp_mst_port_downstream_of_parentasbuh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hparenth]hparent}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhjkWhhhj|WhMyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjgWhhhj|WhMyubah}(h]jbWah ](jjeh"]h$]h&]jj)jhuh1jhj|WhMyhjdWhhubj)}(hhh]h)}(h.check if a port is downstream of a parent porth]h.check if a port is downstream of a parent port}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMphj Yhhubah}(h]h ]h"]h$]h&]uh1jhjdWhhhj|WhMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&Yjj&Yjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager ``struct drm_dp_mst_port *port`` the port being looked up ``struct drm_dp_mst_port *parent`` the parent port **Description** The function returns ``true`` if **port** is downstream of **parent**. If **parent** is ``NULL`` - denoting the root port - the function returns ``true`` if **port** is in **mgr**'s topology.h](h)}(h**Parameters**h]j%)}(hj0Yh]h Parameters}(hj2YhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.Yubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMthj*Yubji)}(hhh](jn)}(h=``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjOYh]h#struct drm_dp_mst_topology_mgr *mgr}(hjQYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMYubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMqhjIYubj)}(hhh]h)}(hMST topology managerh]hMST topology manager}(hjhYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdYhMqhjeYubah}(h]h ]h"]h$]h&]uh1jhjIYubeh}(h]h ]h"]h$]h&]uh1jmhjdYhMqhjFYubjn)}(h:``struct drm_dp_mst_port *port`` the port being looked up h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hjYh]hstruct drm_dp_mst_port *port}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMrhjYubj)}(hhh]h)}(hthe port being looked uph]hthe port being looked up}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMrhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhMrhjFYubjn)}(h3``struct drm_dp_mst_port *parent`` the parent port h](jt)}(h"``struct drm_dp_mst_port *parent``h]jz)}(hjYh]hstruct drm_dp_mst_port *parent}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMshjYubj)}(hhh]h)}(hthe parent porth]hthe parent port}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMshjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhMshjFYubeh}(h]h ]h"]h$]h&]uh1jhhj*Yubh)}(h**Description**h]j%)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMuhj*Yubh)}(hThe function returns ``true`` if **port** is downstream of **parent**. If **parent** is ``NULL`` - denoting the root port - the function returns ``true`` if **port** is in **mgr**'s topology.h](hThe function returns }(hjZhhhNhNubjz)}(h``true``h]htrue}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh if }(hjZhhhNhNubj%)}(h**port**h]hport}(hj,ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh is downstream of }(hjZhhhNhNubj%)}(h **parent**h]hparent}(hj>ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh. If }(hjZhhhNhNubj%)}(h **parent**h]hparent}(hjPZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh is }(hjZhhhNhNubjz)}(h``NULL``h]hNULL}(hjbZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh1 - denoting the root port - the function returns }(hjZhhhNhNubjz)}(h``true``h]htrue}(hjtZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubh if }hjZsbj%)}(h**port**h]hport}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh is in }(hjZhhhNhNubj%)}(h**mgr**h]hmgr}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh’s topology.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMuhj*Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_dp_mst_add_affected_dsc_crtcs (C function)#c.drm_dp_mst_add_affected_dsc_crtcshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hkint drm_dp_mst_add_affected_dsc_crtcs (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h]j)}(hjint drm_dp_mst_add_affected_dsc_crtcs(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhM+ubj)}(h!drm_dp_mst_add_affected_dsc_crtcsh]j)}(h!drm_dp_mst_add_affected_dsc_crtcsh]h!drm_dp_mst_add_affected_dsc_crtcs}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjZhM+ubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj [ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj [ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj,[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.[modnameN classnameNjj)}j]j%)}jjZsb#c.drm_dp_mst_add_affected_dsc_crtcsasbuh1hhj [ubj)}(h h]h }(hjL[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj [ubj9)}(hj9h]h*}(hjZ[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj [ubj)}(hstateh]hstate}(hjg[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj [ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|[ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]jH[#c.drm_dp_mst_add_affected_dsc_crtcsasbuh1hhj|[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|[ubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|[ubj)}(hmgrh]hmgr}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhjZhM+ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjZhM+ubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhjZhM+hjZhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjZhhhjZhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj \jj \jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` Pointer to the new struct drm_dp_mst_topology_state ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager **Description** Whenever there is a change in mst topology DSC configuration would have to be recalculated therefore we need to trigger modeset on all affected CRTCs in that topology See also: drm_dp_mst_atomic_enable_dsc()h](h)}(h**Parameters**h]j%)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM"hj\ubji)}(hhh](jn)}(hW``struct drm_atomic_state *state`` Pointer to the new struct drm_dp_mst_topology_state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj3\h]hstruct drm_atomic_state *state}(hj5\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1\ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hj-\ubj)}(hhh]h)}(h3Pointer to the new struct drm_dp_mst_topology_stateh]h3Pointer to the new struct drm_dp_mst_topology_state}(hjL\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH\hM hjI\ubah}(h]h ]h"]h$]h&]uh1jhj-\ubeh}(h]h ]h"]h$]h&]uh1jmhjH\hM hj*\ubjn)}(h=``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjl\h]h#struct drm_dp_mst_topology_mgr *mgr}(hjn\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjj\ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM!hjf\ubj)}(hhh]h)}(hMST topology managerh]hMST topology manager}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM!hj\ubah}(h]h ]h"]h$]h&]uh1jhjf\ubeh}(h]h ]h"]h$]h&]uh1jmhj\hM!hj*\ubeh}(h]h ]h"]h$]h&]uh1jhhj\ubh)}(h**Description**h]j%)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM#hj\ubh)}(hWhenever there is a change in mst topology DSC configuration would have to be recalculated therefore we need to trigger modeset on all affected CRTCs in that topologyh]hWhenever there is a change in mst topology DSC configuration would have to be recalculated therefore we need to trigger modeset on all affected CRTCs in that topology}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM#hj\ubh)}(h(See also: drm_dp_mst_atomic_enable_dsc()h]h(See also: drm_dp_mst_atomic_enable_dsc()}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM(hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_atomic_enable_dsc (C function)c.drm_dp_mst_atomic_enable_dschNtauh1jxhjhhhNhNubj)}(hhh](j)}(huint drm_dp_mst_atomic_enable_dsc (struct drm_atomic_state *state, struct drm_dp_mst_port *port, int pbn, bool enable)h]j)}(htint drm_dp_mst_atomic_enable_dsc(struct drm_atomic_state *state, struct drm_dp_mst_port *port, int pbn, bool enable)h](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhubj)}(h h]h }(hj ]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj ]hMhubj)}(hdrm_dp_mst_atomic_enable_dsch]j)}(hdrm_dp_mst_atomic_enable_dsch]hdrm_dp_mst_atomic_enable_dsc}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhj ]hMhubj)}(hT(struct drm_atomic_state *state, struct drm_dp_mst_port *port, int pbn, bool enable)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj8]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4]ubj)}(h h]h }(hjE]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4]ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjV]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjX]modnameN classnameNjj)}j]j%)}jj]sbc.drm_dp_mst_atomic_enable_dscasbuh1hhj4]ubj)}(h h]h }(hjv]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4]ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4]ubj)}(hstateh]hstate}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0]ubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]jr]c.drm_dp_mst_atomic_enable_dscasbuh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hporth]hport}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0]ubj)}(hint pbnh](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj(^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hpbnh]hpbn}(hj6^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0]ubj)}(h bool enableh](j)}(hjAh]hbool}(hjO^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK^ubj)}(h h]h }(hj\^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK^ubj)}(henableh]henable}(hjj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0]ubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhj ]hMhubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj ]hMhubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhj ]hMhhj\hhubj)}(hhh]h)}(hSet DSC Enable Flag to On/Offh]hSet DSC Enable Flag to On/Off}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM\hj^hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj ]hMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` Pointer to the new drm_atomic_state ``struct drm_dp_mst_port *port`` Pointer to the affected MST Port ``int pbn`` Newly recalculated bw required for link with DSC enabled ``bool enable`` Boolean flag to enable or disable DSC on the port **Description** This function enables DSC on the given Port by recalculating its vcpi from pbn provided and sets dsc_enable flag to keep track of which ports have DSC enabledh](h)}(h**Parameters**h]j%)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM`hj^ubji)}(hhh](jn)}(hG``struct drm_atomic_state *state`` Pointer to the new drm_atomic_state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj^h]hstruct drm_atomic_state *state}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM]hj^ubj)}(hhh]h)}(h#Pointer to the new drm_atomic_stateh]h#Pointer to the new drm_atomic_state}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM]hj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hM]hj^ubjn)}(hB``struct drm_dp_mst_port *port`` Pointer to the affected MST Port h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj_h]hstruct drm_dp_mst_port *port}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj _ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM^hj_ubj)}(hhh]h)}(h Pointer to the affected MST Porth]h Pointer to the affected MST Port}(hj'_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#_hM^hj$_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj#_hM^hj^ubjn)}(hE``int pbn`` Newly recalculated bw required for link with DSC enabled h](jt)}(h ``int pbn``h]jz)}(hjG_h]hint pbn}(hjI_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE_ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM_hjA_ubj)}(hhh]h)}(h8Newly recalculated bw required for link with DSC enabledh]h8Newly recalculated bw required for link with DSC enabled}(hj`_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\_hM_hj]_ubah}(h]h ]h"]h$]h&]uh1jhjA_ubeh}(h]h ]h"]h$]h&]uh1jmhj\_hM_hj^ubjn)}(hB``bool enable`` Boolean flag to enable or disable DSC on the port h](jt)}(h``bool enable``h]jz)}(hj_h]h bool enable}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~_ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM`hjz_ubj)}(hhh]h)}(h1Boolean flag to enable or disable DSC on the porth]h1Boolean flag to enable or disable DSC on the port}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM`hj_ubah}(h]h ]h"]h$]h&]uh1jhjz_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hM`hj^ubeh}(h]h ]h"]h$]h&]uh1jhhj^ubh)}(h**Description**h]j%)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMbhj^ubh)}(hThis function enables DSC on the given Port by recalculating its vcpi from pbn provided and sets dsc_enable flag to keep track of which ports have DSC enabledh]hThis function enables DSC on the given Port by recalculating its vcpi from pbn provided and sets dsc_enable flag to keep track of which ports have DSC enabled}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMbhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_mst_atomic_check_mgr (C function)c.drm_dp_mst_atomic_check_mgrhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_mst_atomic_check_mgr (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_port **failing_port)h]j)}(hint drm_dp_mst_atomic_check_mgr(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_port **failing_port)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj`hMubj)}(hdrm_dp_mst_atomic_check_mgrh]j)}(hdrm_dp_mst_atomic_check_mgrh]hdrm_dp_mst_atomic_check_mgr}(hj!`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhj`hMubj)}(h(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_state *mst_state, struct drm_dp_mst_port **failing_port)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj=`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubj)}(h h]h }(hjJ`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj[`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]`modnameN classnameNjj)}j]j%)}jj#`sbc.drm_dp_mst_atomic_check_mgrasbuh1hhj9`ubj)}(h h]h }(hj{`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9`ubj)}(hstateh]hstate}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5`ubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]jw`c.drm_dp_mst_atomic_check_mgrasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hmgrh]hmgr}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5`ubj)}(h+struct drm_dp_mst_topology_state *mst_stateh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hj,ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hj=ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?amodnameN classnameNjj)}j]jw`c.drm_dp_mst_atomic_check_mgrasbuh1hhjaubj)}(h h]h }(hj[ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjiahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(h mst_stateh]h mst_state}(hjvahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5`ubj)}(h%struct drm_dp_mst_port **failing_porth](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]jw`c.drm_dp_mst_atomic_check_mgrasbuh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(h failing_porth]h failing_port}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5`ubeh}(h]h ]h"]h$]h&]jjuh1jhj_hhhj`hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhj`hMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhj`hMhj_hhubj)}(hhh]h)}(h1Check the atomic state of an MST topology managerh]h1Check the atomic state of an MST topology manager}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5bjj5bjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct drm_atomic_state *state`` The global atomic state ``struct drm_dp_mst_topology_mgr *mgr`` Manager to check ``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state for **mgr** ``struct drm_dp_mst_port **failing_port`` Returns the port with a BW limitation **Description** Checks the given MST manager's topology state for an atomic update to ensure that it's valid. This includes checking whether there's enough bandwidth to support the new timeslot allocations in the atomic update. Any atomic drivers supporting DP MST must make sure to call this or the drm_dp_mst_atomic_check() function after checking the rest of their state in their :c:type:`drm_mode_config_funcs.atomic_check\(\) ` callback. See also: drm_dp_mst_atomic_check() drm_dp_atomic_find_time_slots() drm_dp_atomic_release_time_slots() **Return** - 0 if the new state is valid - ``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to: - The non-root port where a BW limit check failed with all the ports downstream of **failing_port** passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists. - ``NULL`` if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check. - ``-EINVAL``, if the new state is invalid, because the root port has too many payloads.h](h)}(h**Parameters**h]j%)}(hj?bh]h Parameters}(hjAbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=bubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj9bubji)}(hhh](jn)}(h;``struct drm_atomic_state *state`` The global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj^bh]hstruct drm_atomic_state *state}(hj`bhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\bubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjXbubj)}(hhh]h)}(hThe global atomic stateh]hThe global atomic state}(hjwbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsbhMhjtbubah}(h]h ]h"]h$]h&]uh1jhjXbubeh}(h]h ]h"]h$]h&]uh1jmhjsbhMhjUbubjn)}(h9``struct drm_dp_mst_topology_mgr *mgr`` Manager to check h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjbh]h#struct drm_dp_mst_topology_mgr *mgr}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjbubj)}(hhh]h)}(hManager to checkh]hManager to check}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjUbubjn)}(hQ``struct drm_dp_mst_topology_state *mst_state`` The MST atomic state for **mgr** h](jt)}(h/``struct drm_dp_mst_topology_state *mst_state``h]jz)}(hjbh]h+struct drm_dp_mst_topology_state *mst_state}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjbubj)}(hhh]h)}(h The MST atomic state for **mgr**h](hThe MST atomic state for }(hjbhhhNhNubj%)}(h**mgr**h]hmgr}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjUbubjn)}(hP``struct drm_dp_mst_port **failing_port`` Returns the port with a BW limitation h](jt)}(h)``struct drm_dp_mst_port **failing_port``h]jz)}(hjch]h%struct drm_dp_mst_port **failing_port}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubj)}(hhh]h)}(h%Returns the port with a BW limitationh]h%Returns the port with a BW limitation}(hj0chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,chMhj-cubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj,chMhjUbubeh}(h]h ]h"]h$]h&]uh1jhhj9bubh)}(h**Description**h]j%)}(hjRch]h Description}(hjTchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPcubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj9bubh)}(hChecks the given MST manager's topology state for an atomic update to ensure that it's valid. This includes checking whether there's enough bandwidth to support the new timeslot allocations in the atomic update.h]hChecks the given MST manager’s topology state for an atomic update to ensure that it’s valid. This includes checking whether there’s enough bandwidth to support the new timeslot allocations in the atomic update.}(hjhchhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj9bubh)}(hAny atomic drivers supporting DP MST must make sure to call this or the drm_dp_mst_atomic_check() function after checking the rest of their state in their :c:type:`drm_mode_config_funcs.atomic_check\(\) ` callback.h](hAny atomic drivers supporting DP MST must make sure to call this or the drm_dp_mst_atomic_check() function after checking the rest of their state in their }(hjwchhhNhNubh)}(hH:c:type:`drm_mode_config_funcs.atomic_check\(\) `h]jz)}(hjch]h$drm_mode_config_funcs.atomic_check()}(hjchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjwcubh callback.}(hjwchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchMhj9bubh)}(hfSee also: drm_dp_mst_atomic_check() drm_dp_atomic_find_time_slots() drm_dp_atomic_release_time_slots()h]hfSee also: drm_dp_mst_atomic_check() drm_dp_atomic_find_time_slots() drm_dp_atomic_release_time_slots()}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj9bubh)}(h **Return**h]j%)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj9bubjb=)}(hXx- 0 if the new state is valid - ``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to: - The non-root port where a BW limit check failed with all the ports downstream of **failing_port** passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists. - ``NULL`` if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check. - ``-EINVAL``, if the new state is invalid, because the root port has too many payloads.h]h)}(hhh](h)}(h0 if the new state is validh]h)}(hjch]h0 if the new state is valid}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubah}(h]h ]h"]h$]h&]uh1hhjcubh)}(hX``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to: - The non-root port where a BW limit check failed with all the ports downstream of **failing_port** passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists. - ``NULL`` if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check. h]ji)}(hhh]jn)}(hX``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to: - The non-root port where a BW limit check failed with all the ports downstream of **failing_port** passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists. - ``NULL`` if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check. h](jt)}(hB``-ENOSPC``, if the new state is invalid, because of BW limitationh](jz)}(h ``-ENOSPC``h]h-ENOSPC}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh7, if the new state is invalid, because of BW limitation}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjcubj)}(hhh](h)}(h**failing_port** is set to:h](j%)}(h**failing_port**h]h failing_port}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubh is set to:}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjdubh)}(hhh](h)}(hThe non-root port where a BW limit check failed with all the ports downstream of **failing_port** passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists.h]h)}(hThe non-root port where a BW limit check failed with all the ports downstream of **failing_port** passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists.h](hQThe non-root port where a BW limit check failed with all the ports downstream of }(hj>dhhhNhNubj%)}(h**failing_port**h]h failing_port}(hjFdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>dubhs passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists.}(hj>dhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj:dubah}(h]h ]h"]h$]h&]uh1hhj7dubh)}(h``NULL`` if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check. h]h)}(h``NULL`` if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check.h](jz)}(h``NULL``h]hNULL}(hjmdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjidubhy if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check.}(hjidhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjedubah}(h]h ]h"]h$]h&]uh1hhj7dubeh}(h]h ]h"]h$]h&]j8j4uh1hhj^dhMhjdubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjcubah}(h]h ]h"]h$]h&]uh1jhhjcubah}(h]h ]h"]h$]h&]uh1hhjcubh)}(hV``-EINVAL``, if the new state is invalid, because the root port has too many payloads.h]h)}(hV``-EINVAL``, if the new state is invalid, because the root port has too many payloads.h](jz)}(h ``-EINVAL``h]h-EINVAL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubhK, if the new state is invalid, because the root port has too many payloads.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjdubah}(h]h ]h"]h$]h&]uh1hhjcubeh}(h]h ]h"]h$]h&]j8j4uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1ja=hjchMhj9bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_atomic_check (C function)c.drm_dp_mst_atomic_checkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h` **Description** Checks the given topology state for an atomic update to ensure that it's valid, calling drm_dp_mst_atomic_check_mgr() for all MST manager in the atomic state. This includes checking whether there's enough bandwidth to support the new timeslot allocations in the atomic update. Any atomic drivers supporting DP MST must make sure to call this after checking the rest of their state in their :c:type:`drm_mode_config_funcs.atomic_check\(\) ` callback. See also: drm_dp_mst_atomic_check_mgr() drm_dp_atomic_find_time_slots() drm_dp_atomic_release_time_slots() **Return** 0 if the new state is valid, negative error code otherwise.h](h)}(h**Parameters**h]j%)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubji)}(hhh]jn)}(h}``struct drm_atomic_state *state`` Pointer to the new :c:type:`struct drm_dp_mst_topology_state ` h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjeh]hstruct drm_atomic_state *state}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubj)}(hhh]h)}(hYPointer to the new :c:type:`struct drm_dp_mst_topology_state `h](hPointer to the new }(hjfhhhNhNubh)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hj!fh]h struct drm_dp_mst_topology_state}(hj#fhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhjfhMhjfubeh}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjeubah}(h]h ]h"]h$]h&]uh1jhhjeubh)}(h**Description**h]j%)}(hjXfh]h Description}(hjZfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVfubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubh)}(hXChecks the given topology state for an atomic update to ensure that it's valid, calling drm_dp_mst_atomic_check_mgr() for all MST manager in the atomic state. This includes checking whether there's enough bandwidth to support the new timeslot allocations in the atomic update.h]hXChecks the given topology state for an atomic update to ensure that it’s valid, calling drm_dp_mst_atomic_check_mgr() for all MST manager in the atomic state. This includes checking whether there’s enough bandwidth to support the new timeslot allocations in the atomic update.}(hjnfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubh)}(hAny atomic drivers supporting DP MST must make sure to call this after checking the rest of their state in their :c:type:`drm_mode_config_funcs.atomic_check\(\) ` callback.h](hqAny atomic drivers supporting DP MST must make sure to call this after checking the rest of their state in their }(hj}fhhhNhNubh)}(hH:c:type:`drm_mode_config_funcs.atomic_check\(\) `h]jz)}(hjfh]h$drm_mode_config_funcs.atomic_check()}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj}fubh callback.}(hj}fhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMhjeubh)}(hjSee also: drm_dp_mst_atomic_check_mgr() drm_dp_atomic_find_time_slots() drm_dp_atomic_release_time_slots()h]hjSee also: drm_dp_mst_atomic_check_mgr() drm_dp_atomic_find_time_slots() drm_dp_atomic_release_time_slots()}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubh)}(h **Return**h]j%)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubh)}(h;0 if the new state is valid, negative error code otherwise.h]h;0 if the new state is valid, negative error code otherwise.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_get_mst_topology_state (C function)#c.drm_atomic_get_mst_topology_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_dp_mst_topology_state * drm_atomic_get_mst_topology_state (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h]j)}(hstruct drm_dp_mst_topology_state *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghM ubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hj$ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!gubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&gmodnameN classnameNjj)}j]j%)}j!drm_atomic_get_mst_topology_statesb#c.drm_atomic_get_mst_topology_stateasbuh1hhjghhhjghM ubj)}(h h]h }(hjEghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghM ubj9)}(hj9h]h*}(hjSghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjghhhjghM ubj)}(h!drm_atomic_get_mst_topology_stateh]j)}(hjBgh]h!drm_atomic_get_mst_topology_state}(hjdghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`gubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjghM ubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{gubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{gubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j@g#c.drm_atomic_get_mst_topology_stateasbuh1hhj{gubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{gubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{gubj)}(hstateh]hstate}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwgubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j@g#c.drm_atomic_get_mst_topology_stateasbuh1hhjgubj)}(h h]h }(hj+hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(hj9h]h*}(hj9hhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjgubj)}(hmgrh]hmgr}(hjFhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwgubeh}(h]h ]h"]h$]h&]jjuh1jhjghhhjghM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfhhhjghM ubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjghM hjfhhubj)}(hhh]h)}(hget MST topology stateh]hget MST topology state}(hjphhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjmhhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjghM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager, also the private object in this case **Description** This function wraps drm_atomic_get_priv_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object. **Return** The MST topology state or error pointer.h](h)}(h**Parameters**h]j%)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjhh]hstruct drm_atomic_state *state}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjhubjn)}(hc``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager, also the private object in this case h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjhh]h#struct drm_dp_mst_topology_mgr *mgr}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubj)}(hhh]h)}(h:MST topology manager, also the private object in this caseh]h:MST topology manager, also the private object in this case}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjhubeh}(h]h ]h"]h$]h&]uh1jhhjhubh)}(h**Description**h]j%)}(hj%ih]h Description}(hj'ihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#iubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubh)}(hThis function wraps drm_atomic_get_priv_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object.h]hThis function wraps drm_atomic_get_priv_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object.}(hj;ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubh)}(h **Return**h]j%)}(hjLih]hReturn}(hjNihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJiubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubh)}(h(The MST topology state or error pointer.h]h(The MST topology state or error pointer.}(hjbihhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_get_old_mst_topology_state (C function)'c.drm_atomic_get_old_mst_topology_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_dp_mst_topology_state * drm_atomic_get_old_mst_topology_state (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h]j)}(hstruct drm_dp_mst_topology_state *drm_atomic_get_old_mst_topology_state(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjihMubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j%)}j%drm_atomic_get_old_mst_topology_statesb'c.drm_atomic_get_old_mst_topology_stateasbuh1hhjihhhjihMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjihMubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjihhhjihMubj)}(h%drm_atomic_get_old_mst_topology_stateh]j)}(hjih]h%drm_atomic_get_old_mst_topology_state}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhjihMubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj)jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+jmodnameN classnameNjj)}j]ji'c.drm_atomic_get_old_mst_topology_stateasbuh1hhjjubj)}(h h]h }(hjGjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjUjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hstateh]hstate}(hjbjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj{jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]ji'c.drm_atomic_get_old_mst_topology_stateasbuh1hhjwjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwjubj)}(hmgrh]hmgr}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhjihMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjihMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhjihMhjihhubj)}(hhh]h)}(h2get old MST topology state in atomic state, if anyh]h2get old MST topology state in atomic state, if any}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager, also the private object in this case **Description** This function wraps drm_atomic_get_old_private_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object. **Return** The old MST topology state, or NULL if there's no topology state for this MST mgr in the global atomic stateh](h)}(h**Parameters**h]j%)}(hjkh]h Parameters}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjkubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj=kh]hstruct drm_atomic_state *state}(hj?khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;kubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj7kubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjVkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRkhMhjSkubah}(h]h ]h"]h$]h&]uh1jhj7kubeh}(h]h ]h"]h$]h&]uh1jmhjRkhMhj4kubjn)}(hc``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager, also the private object in this case h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjvkh]h#struct drm_dp_mst_topology_mgr *mgr}(hjxkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtkubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjpkubj)}(hhh]h)}(h:MST topology manager, also the private object in this caseh]h:MST topology manager, also the private object in this case}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjpkubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhj4kubeh}(h]h ]h"]h$]h&]uh1jhhjkubh)}(h**Description**h]j%)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjkubh)}(hThis function wraps drm_atomic_get_old_private_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object.h]hThis function wraps drm_atomic_get_old_private_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjkubh)}(h **Return**h]j%)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjkubh)}(hlThe old MST topology state, or NULL if there's no topology state for this MST mgr in the global atomic stateh]hnThe old MST topology state, or NULL if there’s no topology state for this MST mgr in the global atomic state}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_get_new_mst_topology_state (C function)'c.drm_atomic_get_new_mst_topology_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_dp_mst_topology_state * drm_atomic_get_new_mst_topology_state (struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h]j)}(hstruct drm_dp_mst_topology_state *drm_atomic_get_new_mst_topology_state(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM6ubj)}(h h]h }(hj+lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj*lhM6ubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjlmodnameN classnameNjj)}j]j%)}j%drm_atomic_get_new_mst_topology_statesb'c.drm_atomic_get_new_mst_topology_stateasbuh1hhjlhhhj*lhM6ubj)}(h h]h }(hj]lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj*lhM6ubj9)}(hj9h]h*}(hjklhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlhhhj*lhM6ubj)}(h%drm_atomic_get_new_mst_topology_stateh]j)}(hjZlh]h%drm_atomic_get_new_mst_topology_state}(hj|lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhj*lhM6ubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]jXl'c.drm_atomic_get_new_mst_topology_stateasbuh1hhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hstateh]hstate}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj%mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'mmodnameN classnameNjj)}j]jXl'c.drm_atomic_get_new_mst_topology_stateasbuh1hhjmubj)}(h h]h }(hjCmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjQmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hmgrh]hmgr}(hj^mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhj*lhM6ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjlhhhj*lhM6ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhj*lhM6hjlhhubj)}(hhh]h)}(h2get new MST topology state in atomic state, if anyh]h2get new MST topology state in atomic state, if any}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM*hjmhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhj*lhM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_atomic_state *state`` global atomic state ``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager, also the private object in this case **Description** This function wraps drm_atomic_get_new_private_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object. **Return** The new MST topology state, or NULL if there's no topology state for this MST mgr in the global atomic stateh](h)}(h**Parameters**h]j%)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM.hjmubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjmh]hstruct drm_atomic_state *state}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+hjmubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM+hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjmhM+hjmubjn)}(hc``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager, also the private object in this case h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjnh]h#struct drm_dp_mst_topology_mgr *mgr}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM,hjmubj)}(hhh]h)}(h:MST topology manager, also the private object in this caseh]h:MST topology manager, also the private object in this case}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM,hjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjnhM,hjmubeh}(h]h ]h"]h$]h&]uh1jhhjmubh)}(h**Description**h]j%)}(hj=nh]h Description}(hj?nhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;nubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM.hjmubh)}(hThis function wraps drm_atomic_get_new_private_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object.h]hThis function wraps drm_atomic_get_new_private_obj_state() passing in the MST atomic state vtable so that the private object state returned is that of a MST topology object.}(hjSnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM.hjmubh)}(h **Return**h]j%)}(hjdnh]hReturn}(hjfnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbnubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM2hjmubh)}(hlThe new MST topology state, or NULL if there's no topology state for this MST mgr in the global atomic stateh]hnThe new MST topology state, or NULL if there’s no topology state for this MST mgr in the global atomic state}(hjznhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM2hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_mgr_init (C function)c.drm_dp_mst_topology_mgr_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_mst_topology_mgr_init (struct drm_dp_mst_topology_mgr *mgr, struct drm_device *dev, struct drm_dp_aux *aux, int max_dpcd_transaction_bytes, int max_payloads, int conn_base_id)h]j)}(hint drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr, struct drm_device *dev, struct drm_dp_aux *aux, int max_dpcd_transaction_bytes, int max_payloads, int conn_base_id)h](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMLubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjnhMLubj)}(hdrm_dp_mst_topology_mgr_inith]j)}(hdrm_dp_mst_topology_mgr_inith]hdrm_dp_mst_topology_mgr_init}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhjnhMLubj)}(h(struct drm_dp_mst_topology_mgr *mgr, struct drm_device *dev, struct drm_dp_aux *aux, int max_dpcd_transaction_bytes, int max_payloads, int conn_base_id)h](j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j%)}jjnsbc.drm_dp_mst_topology_mgr_initasbuh1hhjnubj)}(h h]h }(hj$ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hj9h]h*}(hj2ohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubj)}(hmgrh]hmgr}(hj?ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjXohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjToubj)}(h h]h }(hjeohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjToubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjvohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxomodnameN classnameNjj)}j]j oc.drm_dp_mst_topology_mgr_initasbuh1hhjToubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjToubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjToubj)}(hdevh]hdev}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjToubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j oc.drm_dp_mst_topology_mgr_initasbuh1hhjoubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoubj)}(hauxh]haux}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hint max_dpcd_transaction_bytesh](j)}(hinth]hint}(hj8phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4pubj)}(h h]h }(hjFphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4pubj)}(hmax_dpcd_transaction_bytesh]hmax_dpcd_transaction_bytes}(hjTphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4pubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hint max_payloadsh](j)}(hinth]hint}(hjmphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjipubj)}(h h]h }(hj{phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjipubj)}(h max_payloadsh]h max_payloads}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjipubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hint conn_base_idh](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h conn_base_idh]h conn_base_id}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1jhjnhhhjnhMLubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjnhhhjnhMLubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjnhMLhjnhhubj)}(hhh]h)}(hinitialise a topology managerh]hinitialise a topology manager}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMBhjphhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjnhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager struct to initialise ``struct drm_device *dev`` device providing this structure - for i2c addition. ``struct drm_dp_aux *aux`` DP helper aux channel to talk to this device ``int max_dpcd_transaction_bytes`` hw specific DPCD transaction limit ``int max_payloads`` maximum number of payloads this GPU can source ``int conn_base_id`` the connector object ID the MST device is connected to. **Description** Return 0 for success, or negative error code on failureh](h)}(h**Parameters**h]j%)}(hj qh]h Parameters}(hj qhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMFhjqubji)}(hhh](jn)}(hE``struct drm_dp_mst_topology_mgr *mgr`` manager struct to initialise h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hj)qh]h#struct drm_dp_mst_topology_mgr *mgr}(hj+qhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'qubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMChj#qubj)}(hhh]h)}(hmanager struct to initialiseh]hmanager struct to initialise}(hjBqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>qhMChj?qubah}(h]h ]h"]h$]h&]uh1jhj#qubeh}(h]h ]h"]h$]h&]uh1jmhj>qhMChj qubjn)}(hO``struct drm_device *dev`` device providing this structure - for i2c addition. h](jt)}(h``struct drm_device *dev``h]jz)}(hjbqh]hstruct drm_device *dev}(hjdqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`qubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMDhj\qubj)}(hhh]h)}(h3device providing this structure - for i2c addition.h]h3device providing this structure - for i2c addition.}(hj{qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwqhMDhjxqubah}(h]h ]h"]h$]h&]uh1jhj\qubeh}(h]h ]h"]h$]h&]uh1jmhjwqhMDhj qubjn)}(hH``struct drm_dp_aux *aux`` DP helper aux channel to talk to this device h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjqh]hstruct drm_dp_aux *aux}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMEhjqubj)}(hhh]h)}(h,DP helper aux channel to talk to this deviceh]h,DP helper aux channel to talk to this device}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMEhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqhMEhj qubjn)}(hF``int max_dpcd_transaction_bytes`` hw specific DPCD transaction limit h](jt)}(h"``int max_dpcd_transaction_bytes``h]jz)}(hjqh]hint max_dpcd_transaction_bytes}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMFhjqubj)}(hhh]h)}(h"hw specific DPCD transaction limith]h"hw specific DPCD transaction limit}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMFhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqhMFhj qubjn)}(hD``int max_payloads`` maximum number of payloads this GPU can source h](jt)}(h``int max_payloads``h]jz)}(hj rh]hint max_payloads}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj rubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMGhjrubj)}(hhh]h)}(h.maximum number of payloads this GPU can sourceh]h.maximum number of payloads this GPU can source}(hj&rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"rhMGhj#rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhj"rhMGhj qubjn)}(hM``int conn_base_id`` the connector object ID the MST device is connected to. h](jt)}(h``int conn_base_id``h]jz)}(hjFrh]hint conn_base_id}(hjHrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDrubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMHhj@rubj)}(hhh]h)}(h7the connector object ID the MST device is connected to.h]h7the connector object ID the MST device is connected to.}(hj_rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[rhMHhj\rubah}(h]h ]h"]h$]h&]uh1jhj@rubeh}(h]h ]h"]h$]h&]uh1jmhj[rhMHhj qubeh}(h]h ]h"]h$]h&]uh1jhhjqubh)}(h**Description**h]j%)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMJhjqubh)}(h7Return 0 for success, or negative error code on failureh]h7Return 0 for success, or negative error code on failure}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMJhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_mst_topology_mgr_destroy (C function)!c.drm_dp_mst_topology_mgr_destroyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJvoid drm_dp_mst_topology_mgr_destroy (struct drm_dp_mst_topology_mgr *mgr)h]j)}(hIvoid drm_dp_mst_topology_mgr_destroy(struct drm_dp_mst_topology_mgr *mgr)h](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjrhMubj)}(hdrm_dp_mst_topology_mgr_destroyh]j)}(hdrm_dp_mst_topology_mgr_destroyh]hdrm_dp_mst_topology_mgr_destroy}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjrhMubj)}(h%(struct drm_dp_mst_topology_mgr *mgr)h]j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj!shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#smodnameN classnameNjj)}j]j%)}jjrsb!c.drm_dp_mst_topology_mgr_destroyasbuh1hhjrubj)}(h h]h }(hjAshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjOshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(hmgrh]hmgr}(hj\shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhjrhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjrhhubj)}(hhh]h)}(hdestroy topology manager.h]hdestroy topology manager.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1jhhhjhNhNubj)}(hL**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to destroyh](h)}(h**Parameters**h]j%)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjsubji)}(hhh]jn)}(h:``struct drm_dp_mst_topology_mgr *mgr`` manager to destroyh](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjsh]h#struct drm_dp_mst_topology_mgr *mgr}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjsubj)}(hhh]h)}(hmanager to destroyh]hmanager to destroy}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_mst_aux_for_parent (C function)c.drm_dp_mst_aux_for_parenthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hLstruct drm_dp_aux * drm_dp_mst_aux_for_parent (struct drm_dp_mst_port *port)h]j)}(hJstruct drm_dp_aux *drm_dp_mst_aux_for_parent(struct drm_dp_mst_port *port)h](j)}(hjh]hstruct}(hj!thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj/thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhj.thMubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj@thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBtmodnameN classnameNjj)}j]j%)}jdrm_dp_mst_aux_for_parentsbc.drm_dp_mst_aux_for_parentasbuh1hhjthhhj.thMubj)}(h h]h }(hjathhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhj.thMubj9)}(hj9h]h*}(hjothhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjthhhj.thMubj)}(hdrm_dp_mst_aux_for_parenth]j)}(hj^th]hdrm_dp_mst_aux_for_parent}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|tubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhj.thMubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j\tc.drm_dp_mst_aux_for_parentasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(hporth]hport}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubah}(h]h ]h"]h$]h&]jjuh1jhjthhhj.thMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhj.thMubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jhj.thMhjthhubj)}(hhh]h)}(h+Get the AUX device for an MST port's parenth]h-Get the AUX device for an MST port’s parent}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:296: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhj.thMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4ujj4ujjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_mst_port *port`` MST port whose parent's AUX device is returned **Description** Return the AUX device for **port**'s parent or NULL if port's parent is the root port.h](h)}(h**Parameters**h]j%)}(hj>uh]h Parameters}(hj@uhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj` to increment the malloc refcount of **Description** Increments :c:type:`drm_dp_mst_branch.malloc_kref `. When :c:type:`drm_dp_mst_branch.malloc_kref ` reaches 0, the memory allocation for **mstb** will be released and **mstb** may no longer be used. See also: drm_dp_mst_put_mstb_malloc()h](h)}(h**Parameters**h]j%)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjxubji)}(hhh]jn)}(h``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to increment the malloc refcount of h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hjyh]hstruct drm_dp_mst_branch *mstb}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubj)}(hhh]h)}(h^The :c:type:`struct drm_dp_mst_branch ` to increment the malloc refcount ofh](hThe }(hj1yhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hj;yh]hstruct drm_dp_mst_branch}(hj=yhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9yubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhj-yhMhj1yubh$ to increment the malloc refcount of}(hj1yhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-yhMhj.yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhj-yhMhjyubah}(h]h ]h"]h$]h&]uh1jhhjxubh)}(h**Description**h]j%)}(hjvyh]h Description}(hjxyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtyubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjxubh)}(hIncrements :c:type:`drm_dp_mst_branch.malloc_kref `. When :c:type:`drm_dp_mst_branch.malloc_kref ` reaches 0, the memory allocation for **mstb** will be released and **mstb** may no longer be used.h](h Increments }(hjyhhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hjyh]hdrm_dp_mst_branch.malloc_kref}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubh. When }(hjyhhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hjyh]hdrm_dp_mst_branch.malloc_kref}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjyhMhjyubh& reaches 0, the memory allocation for }(hjyhhhNhNubj%)}(h**mstb**h]hmstb}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubh will be released and }(hjyhhhNhNubj%)}(h**mstb**h]hmstb}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubh may no longer be used.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjxubh)}(h&See also: drm_dp_mst_put_mstb_malloc()h]h&See also: drm_dp_mst_put_mstb_malloc()}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_put_mstb_malloc (C function)c.drm_dp_mst_put_mstb_mallochNtauh1jxhjwhhhNhNubj)}(hhh](j)}(h@void drm_dp_mst_put_mstb_malloc (struct drm_dp_mst_branch *mstb)h]j)}(h?void drm_dp_mst_put_mstb_malloc(struct drm_dp_mst_branch *mstb)h](j)}(hvoidh]hvoid}(hj4zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0zhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjCzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0zhhhjBzhMubj)}(hdrm_dp_mst_put_mstb_malloch]j)}(hdrm_dp_mst_put_mstb_malloch]hdrm_dp_mst_put_mstb_malloc}(hjUzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQzubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0zhhhjBzhMubj)}(h (struct drm_dp_mst_branch *mstb)h]j)}(hstruct drm_dp_mst_branch *mstbh](j)}(hjh]hstruct}(hjqzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmzubj)}(h h]h }(hj~zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmzubh)}(hhh]j)}(hdrm_dp_mst_branchh]hdrm_dp_mst_branch}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jjWzsbc.drm_dp_mst_put_mstb_mallocasbuh1hhjmzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmzubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmzubj)}(hmstbh]hmstb}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjizubah}(h]h ]h"]h$]h&]jjuh1jhj0zhhhjBzhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj,zhhhjBzhMubah}(h]j'zah ](jjeh"]h$]h&]jj)jhuh1jhjBzhMhj)zhhubj)}(hhh]h)}(h0Decrement the malloc refcount of a branch deviceh]h0Decrement the malloc refcount of a branch device}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjzhhubah}(h]h ]h"]h$]h&]uh1jhj)zhhhjBzhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj {jj {jjjuh1jhhhjwhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to decrement the malloc refcount of **Description** Decrements :c:type:`drm_dp_mst_branch.malloc_kref `. When :c:type:`drm_dp_mst_branch.malloc_kref ` reaches 0, the memory allocation for **mstb** will be released and **mstb** may no longer be used. See also: drm_dp_mst_get_mstb_malloc()h](h)}(h**Parameters**h]j%)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubji)}(hhh]jn)}(h``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to decrement the malloc refcount of h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hj5{h]hstruct drm_dp_mst_branch *mstb}(hj7{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3{ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj/{ubj)}(hhh]h)}(h^The :c:type:`struct drm_dp_mst_branch ` to decrement the malloc refcount ofh](hThe }(hjN{hhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjX{h]hstruct drm_dp_mst_branch}(hjZ{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjV{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjJ{hMhjN{ubh$ to decrement the malloc refcount of}(hjN{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJ{hMhjK{ubah}(h]h ]h"]h$]h&]uh1jhj/{ubeh}(h]h ]h"]h$]h&]uh1jmhjJ{hMhj,{ubah}(h]h ]h"]h$]h&]uh1jhhj{ubh)}(h**Description**h]j%)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh)}(hDecrements :c:type:`drm_dp_mst_branch.malloc_kref `. When :c:type:`drm_dp_mst_branch.malloc_kref ` reaches 0, the memory allocation for **mstb** will be released and **mstb** may no longer be used.h](h Decrements }(hj{hhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hj{h]hdrm_dp_mst_branch.malloc_kref}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh. When }(hj{hhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hj{h]hdrm_dp_mst_branch.malloc_kref}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhj{hMhj{ubh& reaches 0, the memory allocation for }(hj{hhhNhNubj%)}(h**mstb**h]hmstb}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{ubh will be released and }(hj{hhhNhNubj%)}(h**mstb**h]hmstb}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{ubh may no longer be used.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubh)}(h&See also: drm_dp_mst_get_mstb_malloc()h]h&See also: drm_dp_mst_get_mstb_malloc()}(hj"|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_mst_topology_try_get_mstb (C function)"c.drm_dp_mst_topology_try_get_mstbhNtauh1jxhjwhhhNhNubj)}(hhh](j)}(hEint drm_dp_mst_topology_try_get_mstb (struct drm_dp_mst_branch *mstb)h]j)}(hDint drm_dp_mst_topology_try_get_mstb(struct drm_dp_mst_branch *mstb)h](j)}(hinth]hint}(hjQ|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM|hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj`|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM|hhhj_|hMubj)}(h drm_dp_mst_topology_try_get_mstbh]j)}(h drm_dp_mst_topology_try_get_mstbh]h drm_dp_mst_topology_try_get_mstb}(hjr|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjM|hhhj_|hMubj)}(h (struct drm_dp_mst_branch *mstb)h]j)}(hstruct drm_dp_mst_branch *mstbh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j)}(hdrm_dp_mst_branchh]hdrm_dp_mst_branch}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j%)}jjt|sb"c.drm_dp_mst_topology_try_get_mstbasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|ubj)}(hmstbh]hmstb}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubah}(h]h ]h"]h$]h&]jjuh1jhjM|hhhj_|hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjI|hhhj_|hMubah}(h]jD|ah ](jjeh"]h$]h&]jj)jhuh1jhj_|hMhjF|hhubj)}(hhh]h)}(hCIncrement the topology refcount of a branch device unless it's zeroh]hEIncrement the topology refcount of a branch device unless it’s zero}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jhjF|hhhj_|hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)}jj)}jjjuh1jhhhjwhNhNubj)}(hXz**Parameters** ``struct drm_dp_mst_branch *mstb`` :c:type:`struct drm_dp_mst_branch ` to increment the topology refcount of **Description** Attempts to grab a topology reference to **mstb**, if it hasn't yet been removed from the topology (e.g. :c:type:`drm_dp_mst_branch.topology_kref ` has reached 0). Holding a topology reference implies that a malloc reference will be held to **mstb** as long as the user holds the topology reference. Care should be taken to ensure that the user has at least one malloc reference to **mstb**. If you already have a topology reference to **mstb**, you should use drm_dp_mst_topology_get_mstb() instead. See also: drm_dp_mst_topology_get_mstb() drm_dp_mst_topology_put_mstb() **Return** * 1: A topology reference was grabbed successfully * 0: **port** is no longer in the topology, no reference was grabbedh](h)}(h**Parameters**h]j%)}(hj3}h]h Parameters}(hj5}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1}ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj-}ubji)}(hhh]jn)}(h``struct drm_dp_mst_branch *mstb`` :c:type:`struct drm_dp_mst_branch ` to increment the topology refcount of h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hjR}h]hstruct drm_dp_mst_branch *mstb}(hjT}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjP}ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjL}ubj)}(hhh]h)}(h\:c:type:`struct drm_dp_mst_branch ` to increment the topology refcount ofh](h)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjq}h]hstruct drm_dp_mst_branch}(hjs}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjo}ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjg}hMhjk}ubh& to increment the topology refcount of}(hjk}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjg}hMhjh}ubah}(h]h ]h"]h$]h&]uh1jhjL}ubeh}(h]h ]h"]h$]h&]uh1jmhjg}hMhjI}ubah}(h]h ]h"]h$]h&]uh1jhhj-}ubh)}(h**Description**h]j%)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj-}ubh)}(hX>Attempts to grab a topology reference to **mstb**, if it hasn't yet been removed from the topology (e.g. :c:type:`drm_dp_mst_branch.topology_kref ` has reached 0). Holding a topology reference implies that a malloc reference will be held to **mstb** as long as the user holds the topology reference.h](h)Attempts to grab a topology reference to }(hj}hhhNhNubj%)}(h**mstb**h]hmstb}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubh:, if it hasn’t yet been removed from the topology (e.g. }(hj}hhhNhNubh)}(h=:c:type:`drm_dp_mst_branch.topology_kref `h]jz)}(hj}h]hdrm_dp_mst_branch.topology_kref}(hj}hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj}ubh^ has reached 0). Holding a topology reference implies that a malloc reference will be held to }(hj}hhhNhNubj%)}(h**mstb**h]hmstb}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubh2 as long as the user holds the topology reference.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hMhj-}ubh)}(hCare should be taken to ensure that the user has at least one malloc reference to **mstb**. If you already have a topology reference to **mstb**, you should use drm_dp_mst_topology_get_mstb() instead.h](hRCare should be taken to ensure that the user has at least one malloc reference to }(hj~hhhNhNubj%)}(h**mstb**h]hmstb}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubh.. If you already have a topology reference to }(hj~hhhNhNubj%)}(h**mstb**h]hmstb}(hj2~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubh8, you should use drm_dp_mst_topology_get_mstb() instead.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj-}ubh)}(hGSee also: drm_dp_mst_topology_get_mstb() drm_dp_mst_topology_put_mstb()h]hGSee also: drm_dp_mst_topology_get_mstb() drm_dp_mst_topology_put_mstb()}(hjK~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj-}ubh)}(h **Return**h]j%)}(hj\~h]hReturn}(hj^~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZ~ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj-}ubh)}(hhh](h)}(h01: A topology reference was grabbed successfullyh]h)}(hjw~h]h01: A topology reference was grabbed successfully}(hjy~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhju~ubah}(h]h ]h"]h$]h&]uh1hhjr~ubh)}(hB0: **port** is no longer in the topology, no reference was grabbedh]h)}(hj~h](h0: }(hj~hhhNhNubj%)}(h**port**h]hport}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubh7 is no longer in the topology, no reference was grabbed}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubah}(h]h ]h"]h$]h&]uh1hhjr~ubeh}(h]h ]h"]h$]h&]j8j9uh1hhj~hMhj-}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_get_mstb (C function)c.drm_dp_mst_topology_get_mstbhNtauh1jxhjwhhhNhNubj)}(hhh](j)}(hBvoid drm_dp_mst_topology_get_mstb (struct drm_dp_mst_branch *mstb)h]j)}(hAvoid drm_dp_mst_topology_get_mstb(struct drm_dp_mst_branch *mstb)h](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhj~hMubj)}(hdrm_dp_mst_topology_get_mstbh]j)}(hdrm_dp_mst_topology_get_mstbh]hdrm_dp_mst_topology_get_mstb}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhj~hMubj)}(h (struct drm_dp_mst_branch *mstb)h]j)}(hstruct drm_dp_mst_branch *mstbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_branchh]hdrm_dp_mst_branch}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_topology_get_mstbasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmstbh]hmstb}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~hhhj~hMubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jhj~hMhj~hhubj)}(hhh]h)}(h2Increment the topology refcount of a branch deviceh]h2Increment the topology refcount of a branch device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjwhNhNubj)}(hX9**Parameters** ``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to increment the topology refcount of **Description** Increments :c:type:`drm_dp_mst_branch.topology_refcount ` without checking whether or not it's already reached 0. This is only valid to use in scenarios where you are already guaranteed to have at least one active topology reference to **mstb**. Otherwise, drm_dp_mst_topology_try_get_mstb() must be used. See also: drm_dp_mst_topology_try_get_mstb() drm_dp_mst_topology_put_mstb()h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(h``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to increment the topology refcount of h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hjh]hstruct drm_dp_mst_branch *mstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h`The :c:type:`struct drm_dp_mst_branch ` to increment the topology refcount ofh](hThe }(hjhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhMhjubh& to increment the topology refcount of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hXDIncrements :c:type:`drm_dp_mst_branch.topology_refcount ` without checking whether or not it's already reached 0. This is only valid to use in scenarios where you are already guaranteed to have at least one active topology reference to **mstb**. Otherwise, drm_dp_mst_topology_try_get_mstb() must be used.h](h Increments }(hjRhhhNhNubh)}(hA:c:type:`drm_dp_mst_branch.topology_refcount `h]jz)}(hj\h]h#drm_dp_mst_branch.topology_refcount}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjRubh without checking whether or not it’s already reached 0. This is only valid to use in scenarios where you are already guaranteed to have at least one active topology reference to }(hjRhhhNhNubj%)}(h**mstb**h]hmstb}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubh=. Otherwise, drm_dp_mst_topology_try_get_mstb() must be used.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjubh)}(hKSee also: drm_dp_mst_topology_try_get_mstb() drm_dp_mst_topology_put_mstb()h]hKSee also: drm_dp_mst_topology_try_get_mstb() drm_dp_mst_topology_put_mstb()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_put_mstb (C function)c.drm_dp_mst_topology_put_mstbhNtauh1jxhjwhhhNhNubj)}(hhh](j)}(hBvoid drm_dp_mst_topology_put_mstb (struct drm_dp_mst_branch *mstb)h]j)}(hAvoid drm_dp_mst_topology_put_mstb(struct drm_dp_mst_branch *mstb)h](j)}(hvoidh]hvoid}(hjŀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjԀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjӀhMubj)}(hdrm_dp_mst_topology_put_mstbh]j)}(hdrm_dp_mst_topology_put_mstbh]hdrm_dp_mst_topology_put_mstb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjӀhMubj)}(h (struct drm_dp_mst_branch *mstb)h]j)}(hstruct drm_dp_mst_branch *mstbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_branchh]hdrm_dp_mst_branch}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_topology_put_mstbasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmstbh]hmstb}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjӀhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjӀhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjӀhMhjhhubj)}(hhh]h)}(h/release a topology reference to a branch deviceh]h/release a topology reference to a branch device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjӀhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjwhNhNubj)}(hXp**Parameters** ``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to release the topology reference from **Description** Releases a topology reference from **mstb** by decrementing :c:type:`drm_dp_mst_branch.topology_kref `. See also: drm_dp_mst_topology_try_get_mstb() drm_dp_mst_topology_get_mstb()h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(h``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` to release the topology reference from h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hjƁh]hstruct drm_dp_mst_branch *mstb}(hjȁhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjāubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubj)}(hhh]h)}(haThe :c:type:`struct drm_dp_mst_branch ` to release the topology reference fromh](hThe }(hj߁hhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjہhM hj߁ubh' to release the topology reference from}(hj߁hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjہhM hj܁ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjہhM hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hzReleases a topology reference from **mstb** by decrementing :c:type:`drm_dp_mst_branch.topology_kref `.h](h#Releases a topology reference from }(hj:hhhNhNubj%)}(h**mstb**h]hmstb}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh by decrementing }(hj:hhhNhNubh)}(h=:c:type:`drm_dp_mst_branch.topology_kref `h]jz)}(hjVh]hdrm_dp_mst_branch.topology_kref}(hjXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjshMhjubh)}(hKSee also: drm_dp_mst_topology_try_get_mstb() drm_dp_mst_topology_get_mstb()h]hKSee also: drm_dp_mst_topology_try_get_mstb() drm_dp_mst_topology_get_mstb()}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_mst_topology_try_get_port (C function)"c.drm_dp_mst_topology_try_get_porthNtauh1jxhjwhhhNhNubj)}(hhh](j)}(hCint drm_dp_mst_topology_try_get_port (struct drm_dp_mst_port *port)h]j)}(hBint drm_dp_mst_topology_try_get_port(struct drm_dp_mst_port *port)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMRubj)}(h drm_dp_mst_topology_try_get_porth]j)}(h drm_dp_mst_topology_try_get_porth]h drm_dp_mst_topology_try_get_port}(hj΂hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʂubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMRubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjЂsb"c.drm_dp_mst_topology_try_get_portasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMRhjhhubj)}(hhh]h)}(h:Increment the topology refcount of a port unless it's zeroh]h` to increment the topology refcount of **Description** Attempts to grab a topology reference to **port**, if it hasn't yet been removed from the topology (e.g. :c:type:`drm_dp_mst_port.topology_kref ` has reached 0). Holding a topology reference implies that a malloc reference will be held to **port** as long as the user holds the topology reference. Care should be taken to ensure that the user has at least one malloc reference to **port**. If you already have a topology reference to **port**, you should use drm_dp_mst_topology_get_port() instead. See also: drm_dp_mst_topology_get_port() drm_dp_mst_topology_put_port() **Return** * 1: A topology reference was grabbed successfully * 0: **port** is no longer in the topology, no reference was grabbedh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMAhjubji)}(hhh]jn)}(hz``struct drm_dp_mst_port *port`` :c:type:`struct drm_dp_mst_port ` to increment the topology refcount of h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hjh]hstruct drm_dp_mst_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM?hjubj)}(hhh]h)}(hX:c:type:`struct drm_dp_mst_port ` to increment the topology refcount ofh](h)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hj̓h]hstruct drm_dp_mst_port}(hjσhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj˃ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjÃhM?hjǃubh& to increment the topology refcount of}(hjǃhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjÃhM?hjăubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjÃhM?hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMAhjubh)}(hX:Attempts to grab a topology reference to **port**, if it hasn't yet been removed from the topology (e.g. :c:type:`drm_dp_mst_port.topology_kref ` has reached 0). Holding a topology reference implies that a malloc reference will be held to **port** as long as the user holds the topology reference.h](h)Attempts to grab a topology reference to }(hjhhhNhNubj%)}(h**port**h]hport}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:, if it hasn’t yet been removed from the topology (e.g. }(hjhhhNhNubh)}(h9:c:type:`drm_dp_mst_port.topology_kref `h]jz)}(hj:h]hdrm_dp_mst_port.topology_kref}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMAhjubh^ has reached 0). Holding a topology reference implies that a malloc reference will be held to }(hjhhhNhNubj%)}(h**port**h]hport}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 as long as the user holds the topology reference.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhMAhjubh)}(hCare should be taken to ensure that the user has at least one malloc reference to **port**. If you already have a topology reference to **port**, you should use drm_dp_mst_topology_get_port() instead.h](hRCare should be taken to ensure that the user has at least one malloc reference to }(hjthhhNhNubj%)}(h**port**h]hport}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubh.. If you already have a topology reference to }(hjthhhNhNubj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubh8, you should use drm_dp_mst_topology_get_port() instead.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMFhjubh)}(hGSee also: drm_dp_mst_topology_get_port() drm_dp_mst_topology_put_port()h]hGSee also: drm_dp_mst_topology_get_port() drm_dp_mst_topology_put_port()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMJhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMNhjubh)}(hhh](h)}(h01: A topology reference was grabbed successfullyh]h)}(hjӄh]h01: A topology reference was grabbed successfully}(hjՄhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMNhjфubah}(h]h ]h"]h$]h&]uh1hhj΄ubh)}(hB0: **port** is no longer in the topology, no reference was grabbedh]h)}(hjh](h0: }(hjhhhNhNubj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh7 is no longer in the topology, no reference was grabbed}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMOhjubah}(h]h ]h"]h$]h&]uh1hhj΄ubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_get_port (C function)c.drm_dp_mst_topology_get_porthNtauh1jxhjwhhhNhNubj)}(hhh](j)}(h@void drm_dp_mst_topology_get_port (struct drm_dp_mst_port *port)h]j)}(h?void drm_dp_mst_topology_get_port(struct drm_dp_mst_port *port)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMoubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhjGhMoubj)}(hdrm_dp_mst_topology_get_porth]j)}(hdrm_dp_mst_topology_get_porth]hdrm_dp_mst_topology_get_port}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhjGhMoubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj\sbc.drm_dp_mst_topology_get_portasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hj…hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(hporth]hport}(hjυhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubah}(h]h ]h"]h$]h&]jjuh1jhj5hhhjGhMoubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1hhhjGhMoubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jhjGhMohj.hhubj)}(hhh]h)}(h)Increment the topology refcount of a porth]h)Increment the topology refcount of a port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMchjhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhMoubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjwhNhNubj)}(hX/**Parameters** ``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to increment the topology refcount of **Description** Increments :c:type:`drm_dp_mst_port.topology_refcount ` without checking whether or not it's already reached 0. This is only valid to use in scenarios where you are already guaranteed to have at least one active topology reference to **port**. Otherwise, drm_dp_mst_topology_try_get_port() must be used. See also: drm_dp_mst_topology_try_get_port() drm_dp_mst_topology_put_port()h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMghjubji)}(hhh]jn)}(h~``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to increment the topology refcount of h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj:h]hstruct drm_dp_mst_port *port}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMdhj4ubj)}(hhh]h)}(h\The :c:type:`struct drm_dp_mst_port ` to increment the topology refcount ofh](hThe }(hjShhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hj]h]hstruct drm_dp_mst_port}(hj_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjOhMdhjSubh& to increment the topology refcount of}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhMdhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhMdhj1ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMfhjubh)}(hX@Increments :c:type:`drm_dp_mst_port.topology_refcount ` without checking whether or not it's already reached 0. This is only valid to use in scenarios where you are already guaranteed to have at least one active topology reference to **port**. Otherwise, drm_dp_mst_topology_try_get_port() must be used.h](h Increments }(hjhhhNhNubh)}(h=:c:type:`drm_dp_mst_port.topology_refcount `h]jz)}(hjh]h!drm_dp_mst_port.topology_refcount}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMfhjubh without checking whether or not it’s already reached 0. This is only valid to use in scenarios where you are already guaranteed to have at least one active topology reference to }(hjhhhNhNubj%)}(h**port**h]hport}(hjچhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh=. Otherwise, drm_dp_mst_topology_try_get_port() must be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjՆhMfhjubh)}(hKSee also: drm_dp_mst_topology_try_get_port() drm_dp_mst_topology_put_port()h]hKSee also: drm_dp_mst_topology_try_get_port() drm_dp_mst_topology_put_port()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_put_port (C function)c.drm_dp_mst_topology_put_porthNtauh1jxhjwhhhNhNubj)}(hhh](j)}(h@void drm_dp_mst_topology_put_port (struct drm_dp_mst_port *port)h]j)}(h?void drm_dp_mst_topology_put_port(struct drm_dp_mst_port *port)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMubj)}(hdrm_dp_mst_topology_put_porth]j)}(hdrm_dp_mst_topology_put_porth]hdrm_dp_mst_topology_put_port}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hMubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjDsbc.drm_dp_mst_topology_put_portasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj/hMhjhhubj)}(hhh]h)}(h&release a topology reference to a porth]h&release a topology reference to a port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM|hjއhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjwhNhNubj)}(hXf**Parameters** ``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to release the topology reference from **Description** Releases a topology reference from **port** by decrementing :c:type:`drm_dp_mst_port.topology_kref `. See also: drm_dp_mst_topology_try_get_port() drm_dp_mst_topology_get_port()h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(h``struct drm_dp_mst_port *port`` The :c:type:`struct drm_dp_mst_port ` to release the topology reference from h](jt)}(h ``struct drm_dp_mst_port *port``h]jz)}(hj"h]hstruct drm_dp_mst_port *port}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM}hjubj)}(hhh]h)}(h]The :c:type:`struct drm_dp_mst_port ` to release the topology reference fromh](hThe }(hj;hhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjEh]hstruct drm_dp_mst_port}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhj7hM}hj;ubh' to release the topology reference from}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hM}hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hM}hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hvReleases a topology reference from **port** by decrementing :c:type:`drm_dp_mst_port.topology_kref `.h](h#Releases a topology reference from }(hjhhhNhNubj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh by decrementing }(hjhhhNhNubh)}(h9:c:type:`drm_dp_mst_port.topology_kref `h]jz)}(hjh]hdrm_dp_mst_port.topology_kref}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjψhMhjubh)}(hKSee also: drm_dp_mst_topology_try_get_port() drm_dp_mst_topology_get_port()h]hKSee also: drm_dp_mst_topology_try_get_port() drm_dp_mst_topology_get_port()}(hjڈhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:305: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubeh}(h]topology-lifetime-internalsah ]h"]topology lifetime internalsah$]h&]uh1hhjhhhhhM,ubeh}(h]display-port-mst-helpersah ]h"]display port mst helpersah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h#MIPI DBI Helper Functions Referenceh]h#MIPI DBI Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM9ubh)}(hbThis library provides helpers for MIPI Display Bus Interface (DBI) compatible display controllers.h]hbThis library provides helpers for MIPI Display Bus Interface (DBI) compatible display controllers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK*hjhhubh)}(hMany controllers for tiny lcd displays are MIPI compliant and can use this library. If a controller uses registers 0x2A and 0x2B to set the area to update and uses register 0x2C to write to frame memory, it is most likely MIPI compliant.h]hMany controllers for tiny lcd displays are MIPI compliant and can use this library. If a controller uses registers 0x2A and 0x2B to set the area to update and uses register 0x2C to write to frame memory, it is most likely MIPI compliant.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK-hjhhubh)}(hLOnly MIPI Type 1 displays are supported since a full frame memory is needed.h]hLOnly MIPI Type 1 displays are supported since a full frame memory is needed.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK2hjhhubh)}(h*There are 3 MIPI DBI implementation types:h]h*There are 3 MIPI DBI implementation types:}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK4hjhhubjQH)}(hhh](h)}(h Motorola 6800 type parallel bus h]h)}(hMotorola 6800 type parallel bush]hMotorola 6800 type parallel bus}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK6hjPubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hIntel 8080 type parallel bus h]h)}(hIntel 8080 type parallel bush]hIntel 8080 type parallel bus}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK8hjiubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hSPI type with 3 options: 1. 9-bit with the Data/Command signal as the ninth bit 2. Same as above except it's sent as 16 bits 3. 8-bit with the Data/Command signal as a separate D/CX pin h](h)}(hSPI type with 3 options:h]hSPI type with 3 options:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK:hjubjQH)}(hhh](h)}(h39-bit with the Data/Command signal as the ninth bith]h)}(hjh]h39-bit with the Data/Command signal as the ninth bit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chKhjȉubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jMJjNJjOJhjPJjQJuh1jPHhjubeh}(h]h ]h"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]jMJ upperalphajOJhjPJjQJuh1jPHhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chNubh)}(hQCurrently mipi_dbi only supports Type C options 1 and 3 with mipi_dbi_spi_init().h]hQCurrently mipi_dbi only supports Type C options 1 and 3 with mipi_dbi_spi_init().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:315: ./drivers/gpu/drm/drm_mipi_dbi.chK@hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dbi (C struct) c.mipi_dbihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dbih]j)}(hstruct mipi_dbih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hKubj)}(hmipi_dbih]j)}(hjh]hmipi_dbi}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj*hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj*hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj*hKhjhhubj)}(hhh]h)}(hMIPI DBI interfaceh]hMIPI DBI interface}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj*hKubeh}(h]h ](jstructeh"]h$]h&]jjjjwjjwjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dbi { struct mutex cmdlock; int (*command)(struct mipi_dbi *dbi, u8 *cmd, u8 *param, size_t num); const u8 *read_commands; bool swap_bytes; struct gpio_desc *reset; struct spi_device *spi; unsigned int write_memory_bpw; struct gpio_desc *dc; void *tx_buf9; size_t tx_buf9_len; }; **Members** ``cmdlock`` Command lock ``command`` Bus specific callback executing commands. ``read_commands`` Array of read commands terminated by a zero entry. Reading is disabled if this is NULL. ``swap_bytes`` Swap bytes in buffer before transfer ``reset`` Optional reset gpio ``spi`` SPI device ``write_memory_bpw`` Bits per word used on a MIPI_DCS_WRITE_MEMORY_START transfer ``dc`` Optional D/C gpio. ``tx_buf9`` Buffer used for Option 1 9-bit conversion ``tx_buf9_len`` Size of tx_buf9.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj{ubj@)}(hXKstruct mipi_dbi { struct mutex cmdlock; int (*command)(struct mipi_dbi *dbi, u8 *cmd, u8 *param, size_t num); const u8 *read_commands; bool swap_bytes; struct gpio_desc *reset; struct spi_device *spi; unsigned int write_memory_bpw; struct gpio_desc *dc; void *tx_buf9; size_t tx_buf9_len; };h]hXKstruct mipi_dbi { struct mutex cmdlock; int (*command)(struct mipi_dbi *dbi, u8 *cmd, u8 *param, size_t num); const u8 *read_commands; bool swap_bytes; struct gpio_desc *reset; struct spi_device *spi; unsigned int write_memory_bpw; struct gpio_desc *dc; void *tx_buf9; size_t tx_buf9_len; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj{ubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK*hj{ubji)}(hhh](jn)}(h``cmdlock`` Command lock h](jt)}(h ``cmdlock``h]jz)}(hj̊h]hcmdlock}(hjΊhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjʊubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjƊubj)}(hhh]h)}(h Command lockh]h Command lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjƊubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjÊubjn)}(h6``command`` Bus specific callback executing commands. h](jt)}(h ``command``h]jz)}(hjh]hcommand}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK!hjubj)}(hhh]h)}(h)Bus specific callback executing commands.h]h)Bus specific callback executing commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK!hjÊubjn)}(hz``read_commands`` Array of read commands terminated by a zero entry. Reading is disabled if this is NULL. h](jt)}(h``read_commands``h]jz)}(hj>h]h read_commands}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK'hj8ubj)}(hhh]ji)}(hhh]jn)}(hXArray of read commands terminated by a zero entry. Reading is disabled if this is NULL. h](jt)}(h2Array of read commands terminated by a zero entry.h]h2Array of read commands terminated by a zero entry.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjShK'hjZubj)}(hhh]h)}(h$Reading is disabled if this is NULL.h]h$Reading is disabled if this is NULL.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShK'hjlubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjShK'hjWubah}(h]h ]h"]h$]h&]uh1jhhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShK'hjÊubjn)}(h4``swap_bytes`` Swap bytes in buffer before transfer h](jt)}(h``swap_bytes``h]jz)}(hjh]h swap_bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK,hjubj)}(hhh]h)}(h$Swap bytes in buffer before transferh]h$Swap bytes in buffer before transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK,hjÊubjn)}(h``reset`` Optional reset gpio h](jt)}(h ``reset``h]jz)}(hjڋh]hreset}(hj܋hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj؋ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK1hjԋubj)}(hhh]h)}(hOptional reset gpioh]hOptional reset gpio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjԋubeh}(h]h ]h"]h$]h&]uh1jmhjhK1hjÊubjn)}(h``spi`` SPI device h](jt)}(h``spi``h]jz)}(hjh]hspi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK8hj ubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hK8hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj(hK8hjÊubjn)}(hR``write_memory_bpw`` Bits per word used on a MIPI_DCS_WRITE_MEMORY_START transfer h](jt)}(h``write_memory_bpw``h]jz)}(hjLh]hwrite_memory_bpw}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhK=hjFubj)}(hhh]h)}(hubjn)}(h``cmd`` Command h](jt)}(h``cmd``h]jz)}(hjh]hcmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjzubj)}(hhh]h)}(hCommandh]hCommand}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj>ubjn)}(h!``seq...`` Optional parameter(s) h](jt)}(h ``seq...``h]jz)}(hjh]hseq...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjubj)}(hhh]h)}(hOptional parameter(s)h]hOptional parameter(s)}(hjҒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjΒhKhjϒubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjΒhKhj>ubeh}(h]h ]h"]h$]h&]uh1jhhj"ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj"ubh)}(hRSend MIPI DCS command to the controller. Use mipi_dbi_command_read() for get/read.h]hRSend MIPI DCS command to the controller. Use mipi_dbi_command_read() for get/read.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj"ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj"ubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCS (C macro)(c.DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCShNtauh1jxhjhhhNhNubj)}(hhh](j)}(h&DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCSh]j)}(h&DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCSh]j)}(h&DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCSh]j)}(hjZh]h&DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCS}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhjXhhhjwhKubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjwhKhjUhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjUhhhjwhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h4``DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCS (enable_)``h]jz)}(hjh]h0DRM_MIPI_DBI_SIMPLE_DISPLAY_PIPE_FUNCS (enable_)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjhhubjb=)}(hFInitializes struct drm_simple_display_pipe_funcs for MIPI-DBI devices h]h)}(hEInitializes struct drm_simple_display_pipe_funcs for MIPI-DBI devicesh]hEInitializes struct drm_simple_display_pipe_funcs for MIPI-DBI devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjubah}(h]h ]h"]h$]h&]uh1ja=hjhKhjhhubj)}(hXw**Parameters** ``enable_`` Enable-callback implementation **Description** This macro initializes struct drm_simple_display_pipe_funcs with default values for MIPI-DBI-based devices. The only callback that depends on the hardware is **enable**, for which the driver has to provide an implementation. MIPI-based drivers are encouraged to use this macro for initialization.h](h)}(h**Parameters**h]j%)}(hj˓h]h Parameters}(hj͓hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjɓubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjœubji)}(hhh]jn)}(h+``enable_`` Enable-callback implementation h](jt)}(h ``enable_``h]jz)}(hjh]henable_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjubj)}(hhh]h)}(hEnable-callback implementationh]hEnable-callback implementation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhjœubh)}(h**Description**h]j%)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjœubh)}(hX(This macro initializes struct drm_simple_display_pipe_funcs with default values for MIPI-DBI-based devices. The only callback that depends on the hardware is **enable**, for which the driver has to provide an implementation. MIPI-based drivers are encouraged to use this macro for initialization.h](hThis macro initializes struct drm_simple_display_pipe_funcs with default values for MIPI-DBI-based devices. The only callback that depends on the hardware is }(hj;hhhNhNubj%)}(h **enable**h]henable}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubh, for which the driver has to provide an implementation. MIPI-based drivers are encouraged to use this macro for initialization.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:318: ./include/drm/drm_mipi_dbi.hhKhjœubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mipi_dbi_command_read (C function)c.mipi_dbi_command_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hAint mipi_dbi_command_read (struct mipi_dbi *dbi, u8 cmd, u8 *val)h]j)}(h@int mipi_dbi_command_read(struct mipi_dbi *dbi, u8 cmd, u8 *val)h](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhKubj)}(hmipi_dbi_command_readh]j)}(hmipi_dbi_command_readh]hmipi_dbi_command_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhKubj)}(h'(struct mipi_dbi *dbi, u8 cmd, u8 *val)h](j)}(hstruct mipi_dbi *dbih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjƔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dbih]hmipi_dbi}(hjהhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԔubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjٔmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_command_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdbih]hdbi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 cmdh](h)}(hhh]j)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]jc.mipi_dbi_command_readasbuh1hhj'ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hcmdh]hcmd}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *valh](h)}(hhh]j)}(hu8h]hu8}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]jc.mipi_dbi_command_readasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoubj)}(hvalh]hval}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjxhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhKubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjqhhubj)}(hhh]h)}(hMIPI DCS read commandh]hMIPI DCS read command}(hjٕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKzhj֕hhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dbi *dbi`` MIPI DBI structure ``u8 cmd`` Command ``u8 *val`` Value read **Description** Send MIPI DCS read command to the controller. **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chK~hjubji)}(hhh](jn)}(h,``struct mipi_dbi *dbi`` MIPI DBI structure h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hjh]hstruct mipi_dbi *dbi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chK{hjubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hK{hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hK{hjubjn)}(h``u8 cmd`` Command h](jt)}(h ``u8 cmd``h]jz)}(hjSh]hu8 cmd}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chK|hjMubj)}(hhh]h)}(hCommandh]hCommand}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhK|hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhK|hjubjn)}(h``u8 *val`` Value read h](jt)}(h ``u8 *val``h]jz)}(hjh]hu8 *val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chK}hjubj)}(hhh]h)}(h Value readh]h Value read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK}hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjǖh]h Description}(hjɖhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjŖubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubh)}(h-Send MIPI DCS read command to the controller.h]h-Send MIPI DCS read command to the controller.}(hjݖhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!mipi_dbi_command_buf (C function)c.mipi_dbi_command_bufhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMint mipi_dbi_command_buf (struct mipi_dbi *dbi, u8 cmd, u8 *data, size_t len)h]j)}(hLint mipi_dbi_command_buf(struct mipi_dbi *dbi, u8 cmd, u8 *data, size_t len)h](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhKubj)}(hmipi_dbi_command_bufh]j)}(hmipi_dbi_command_bufh]hmipi_dbi_command_buf}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhKubj)}(h4(struct mipi_dbi *dbi, u8 cmd, u8 *data, size_t len)h](j)}(hstruct mipi_dbi *dbih](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hmipi_dbih]hmipi_dbi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjVsbc.mipi_dbi_command_bufasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hdbih]hdbi}(hjɗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hu8 cmdh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dbi_command_bufasbuh1hhjޗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޗubj)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޗubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hu8 *datah](h)}(hhh]j)}(hu8h]hu8}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]jc.mipi_dbi_command_bufasbuh1hhj&ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjYhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(hdatah]hdata}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dbi_command_bufasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubeh}(h]h ]h"]h$]h&]jjuh1jhj/hhhjAhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhjAhKubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhjAhKhj(hhubj)}(hhh]h)}(h.MIPI DCS command with parameter(s) in an arrayh]h.MIPI DCS command with parameter(s) in an array}(hjؘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhj՘hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dbi *dbi`` MIPI DBI structure ``u8 cmd`` Command ``u8 *data`` Parameter buffer ``size_t len`` Buffer length **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubji)}(hhh](jn)}(h,``struct mipi_dbi *dbi`` MIPI DBI structure h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hjh]hstruct mipi_dbi *dbi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj.hKhjubjn)}(h``u8 cmd`` Command h](jt)}(h ``u8 cmd``h]jz)}(hjRh]hu8 cmd}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjLubj)}(hhh]h)}(hCommandh]hCommand}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjghKhjubjn)}(h``u8 *data`` Parameter buffer h](jt)}(h ``u8 *data``h]jz)}(hjh]hu8 *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hParameter bufferh]hParameter buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``size_t len`` Buffer length h](jt)}(h``size_t len``h]jz)}(hjęh]h size_t len}(hjƙhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj™ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(h Buffer lengthh]h Buffer length}(hjݙhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjٙhKhjڙubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjٙhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dbi_buf_copy (C function)c.mipi_dbi_buf_copyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint mipi_dbi_buf_copy (void *dst, struct iosys_map *src, struct drm_framebuffer *fb, struct drm_rect *clip, bool swap, struct drm_format_conv_state *fmtcnv_state)h]j)}(hint mipi_dbi_buf_copy(void *dst, struct iosys_map *src, struct drm_framebuffer *fb, struct drm_rect *clip, bool swap, struct drm_format_conv_state *fmtcnv_state)h](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjRhKubj)}(hmipi_dbi_buf_copyh]j)}(hmipi_dbi_buf_copyh]hmipi_dbi_buf_copy}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjRhKubj)}(h(void *dst, struct iosys_map *src, struct drm_framebuffer *fb, struct drm_rect *clip, bool swap, struct drm_format_conv_state *fmtcnv_state)h](j)}(h void *dsth](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(hstruct iosys_map *srch](j)}(hjh]hstruct}(hjÚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjКhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޚubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjgsbc.mipi_dbi_buf_copyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]jc.mipi_dbi_buf_copyasbuh1hhj1ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1ubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(hstruct drm_rect *cliph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjÛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjśmodnameN classnameNjj)}j]jc.mipi_dbi_buf_copyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(h bool swaph](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hswaph]hswap}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(h*struct drm_format_conv_state *fmtcnv_stateh](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]jc.mipi_dbi_buf_copyasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(h fmtcnv_stateh]h fmtcnv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubeh}(h]h ]h"]h$]h&]jjuh1jhj@hhhjRhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj<hhhjRhKubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhjRhKhj9hhubj)}(hhh]h)}(h0Copy a framebuffer, transforming it if necessaryh]h0Copy a framebuffer, transforming it if necessary}(hjʜhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjǜhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``void *dst`` The destination buffer ``struct iosys_map *src`` The source buffer ``struct drm_framebuffer *fb`` The source framebuffer ``struct drm_rect *clip`` Clipping rectangle of the area to be copied ``bool swap`` When true, swap MSB/LSB of 16-bit values ``struct drm_format_conv_state *fmtcnv_state`` Format-conversion state **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubji)}(hhh](jn)}(h%``void *dst`` The destination buffer h](jt)}(h ``void *dst``h]jz)}(hj h]h void *dst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hThe destination bufferh]hThe destination buffer}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKhjubjn)}(h,``struct iosys_map *src`` The source buffer h](jt)}(h``struct iosys_map *src``h]jz)}(hjDh]hstruct iosys_map *src}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhj>ubj)}(hhh]h)}(hThe source bufferh]hThe source buffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhKhjubjn)}(h6``struct drm_framebuffer *fb`` The source framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hj}h]hstruct drm_framebuffer *fb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjwubj)}(hhh]h)}(hThe source framebufferh]hThe source framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hF``struct drm_rect *clip`` Clipping rectangle of the area to be copied h](jt)}(h``struct drm_rect *clip``h]jz)}(hjh]hstruct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(h+Clipping rectangle of the area to be copiedh]h+Clipping rectangle of the area to be copied}(hjϝhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj˝hKhj̝ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj˝hKhjubjn)}(h7``bool swap`` When true, swap MSB/LSB of 16-bit values h](jt)}(h ``bool swap``h]jz)}(hjh]h bool swap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(h(When true, swap MSB/LSB of 16-bit valuesh]h(When true, swap MSB/LSB of 16-bit values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hG``struct drm_format_conv_state *fmtcnv_state`` Format-conversion state h](jt)}(h.``struct drm_format_conv_state *fmtcnv_state``h]jz)}(hj(h]h*struct drm_format_conv_state *fmtcnv_state}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhj"ubj)}(hhh]h)}(hFormat-conversion stateh]hFormat-conversion state}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%mipi_dbi_pipe_mode_valid (C function)c.mipi_dbi_pipe_mode_validhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hyenum drm_mode_status mipi_dbi_pipe_mode_valid (struct drm_simple_display_pipe *pipe, const struct drm_display_mode *mode)h]j)}(hxenum drm_mode_status mipi_dbi_pipe_mode_valid(struct drm_simple_display_pipe *pipe, const struct drm_display_mode *mode)h](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM@ubh)}(hhh]j)}(hdrm_mode_statush]hdrm_mode_status}(hjǞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĞubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjɞmodnameN classnameNjj)}j]j%)}jmipi_dbi_pipe_mode_validsbc.mipi_dbi_pipe_mode_validasbuh1hhjhhhjhM@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM@ubj)}(hmipi_dbi_pipe_mode_validh]j)}(hjh]hmipi_dbi_pipe_mode_valid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM@ubj)}(hK(struct drm_simple_display_pipe *pipe, const struct drm_display_mode *mode)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]jc.mipi_dbi_pipe_mode_validasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dbi_pipe_mode_validasbuh1hhjubj)}(h h]h }(hjܟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM@ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM@hjhhubj)}(hhh]h)}(hMIPI DBI mode-valid helperh]hMIPI DBI mode-valid helper}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhjhNhNubj)}(hXn**Parameters** ``struct drm_simple_display_pipe *pipe`` Simple display pipe ``const struct drm_display_mode *mode`` The mode to test **Description** This function validates a given display mode against the MIPI DBI's hardware display. Drivers can use this as their :c:type:`drm_simple_display_pipe_funcs->mode_valid ` callback.h](h)}(h**Parameters**h]j%)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM<hj=ubji)}(hhh](jn)}(h=``struct drm_simple_display_pipe *pipe`` Simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjbh]h$struct drm_simple_display_pipe *pipe}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM9hj\ubj)}(hhh]h)}(hSimple display pipeh]hSimple display pipe}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM9hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhM9hjYubjn)}(h9``const struct drm_display_mode *mode`` The mode to test h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjh]h#const struct drm_display_mode *mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM:hjubj)}(hhh]h)}(hThe mode to testh]hThe mode to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM:hjYubeh}(h]h ]h"]h$]h&]uh1jhhj=ubh)}(h**Description**h]j%)}(hj֠h]h Description}(hjؠhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjԠubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM<hj=ubh)}(hThis function validates a given display mode against the MIPI DBI's hardware display. Drivers can use this as their :c:type:`drm_simple_display_pipe_funcs->mode_valid ` callback.h](hvThis function validates a given display mode against the MIPI DBI’s hardware display. Drivers can use this as their }(hjhhhNhNubh)}(hS:c:type:`drm_simple_display_pipe_funcs->mode_valid `h]jz)}(hjh]h)drm_simple_display_pipe_funcs->mode_valid}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM<hjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM<hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!mipi_dbi_pipe_update (C function)c.mipi_dbi_pipe_updatehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcvoid mipi_dbi_pipe_update (struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_state)h]j)}(hbvoid mipi_dbi_pipe_update(struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_state)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMQubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjLhMQubj)}(hmipi_dbi_pipe_updateh]j)}(hmipi_dbi_pipe_updateh]hmipi_dbi_pipe_update}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhjLhMQubj)}(hI(struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjasbc.mipi_dbi_pipe_updateasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hj9h]h*}(hjǡhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubj)}(hpipeh]hpipe}(hjԡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h!struct drm_plane_state *old_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.mipi_dbi_pipe_updateasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h old_stateh]h old_state}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhj:hhhjLhMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj6hhhjLhMQubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1jhjLhMQhj3hhubj)}(hhh]h)}(hDisplay pipe update helperh]hDisplay pipe update helper}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMJhjkhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXO**Parameters** ``struct drm_simple_display_pipe *pipe`` Simple display pipe ``struct drm_plane_state *old_state`` Old plane state **Description** This function handles framebuffer flushing and vblank events. Drivers can use this as their :c:type:`drm_simple_display_pipe_funcs->update ` callback.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMNhjubji)}(hhh](jn)}(h=``struct drm_simple_display_pipe *pipe`` Simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjh]h$struct drm_simple_display_pipe *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMKhjubj)}(hhh]h)}(hSimple display pipeh]hSimple display pipe}(hjȢhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjĢhMKhjŢubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjĢhMKhjubjn)}(h6``struct drm_plane_state *old_state`` Old plane state h](jt)}(h%``struct drm_plane_state *old_state``h]jz)}(hjh]h!struct drm_plane_state *old_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMLhjubj)}(hhh]h)}(hOld plane stateh]hOld plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMLhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMNhjubh)}(hThis function handles framebuffer flushing and vblank events. Drivers can use this as their :c:type:`drm_simple_display_pipe_funcs->update ` callback.h](h\This function handles framebuffer flushing and vblank events. Drivers can use this as their }(hj9hhhNhNubh)}(hO:c:type:`drm_simple_display_pipe_funcs->update `h]jz)}(hjCh]h%drm_simple_display_pipe_funcs->update}(hjEhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMNhj9ubh callback.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mipi_dbi_enable_flush (C function)c.mipi_dbi_enable_flushhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hvoid mipi_dbi_enable_flush (struct mipi_dbi_dev *dbidev, struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state)h]j)}(hvoid mipi_dbi_enable_flush(struct mipi_dbi_dev *dbidev, struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMxubj)}(hmipi_dbi_enable_flushh]j)}(hmipi_dbi_enable_flushh]hmipi_dbi_enable_flush}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMxubj)}(he(struct mipi_dbi_dev *dbidev, struct drm_crtc_state *crtc_state, struct drm_plane_state *plane_state)h](j)}(hstruct mipi_dbi_dev *dbidevh](j)}(hjh]hstruct}(hjȣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjģubj)}(h h]h }(hjգhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjģubh)}(hhh]j)}(h mipi_dbi_devh]h mipi_dbi_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_enable_flushasbuh1hhjģubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjģubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjģubj)}(hdbidevh]hdbidev}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjģubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_crtc_state *crtc_stateh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jc.mipi_dbi_enable_flushasbuh1hhj6ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(h crtc_stateh]h crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjȤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŤubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjʤmodnameN classnameNjj)}j]jc.mipi_dbi_enable_flushasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMxubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jhjhMxhjhhubj)}(hhh]h)}(hMIPI DBI enable helperh]hMIPI DBI enable helper}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMlhj(hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhjhNhNubj)}(hX&**Parameters** ``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure ``struct drm_crtc_state *crtc_state`` CRTC state ``struct drm_plane_state *plane_state`` Plane state **Description** Flushes the whole framebuffer and enables the backlight. Drivers can use this in their :c:type:`drm_simple_display_pipe_funcs->enable ` callback. **Note** Drivers which don't use mipi_dbi_pipe_update() because they have custom framebuffer flushing, can't use this function since they both use the same flushing code.h](h)}(h**Parameters**h]j%)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMphjGubji)}(hhh](jn)}(h:``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjlh]hstruct mipi_dbi_dev *dbidev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMmhjfubj)}(hhh]h)}(hMIPI DBI device structureh]hMIPI DBI device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhMmhjcubjn)}(h1``struct drm_crtc_state *crtc_state`` CRTC state h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjh]h!struct drm_crtc_state *crtc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMnhjubj)}(hhh]h)}(h CRTC stateh]h CRTC state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMnhjcubjn)}(h4``struct drm_plane_state *plane_state`` Plane state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjޥh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjܥubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMohjإubj)}(hhh]h)}(h Plane stateh]h Plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjإubeh}(h]h ]h"]h$]h&]uh1jmhjhMohjcubeh}(h]h ]h"]h$]h&]uh1jhhjGubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMqhjGubh)}(hFlushes the whole framebuffer and enables the backlight. Drivers can use this in their :c:type:`drm_simple_display_pipe_funcs->enable ` callback.h](hWFlushes the whole framebuffer and enables the backlight. Drivers can use this in their }(hj/hhhNhNubh)}(hO:c:type:`drm_simple_display_pipe_funcs->enable `h]jz)}(hj9h]h%drm_simple_display_pipe_funcs->enable}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMqhj/ubh callback.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMqhjGubh)}(h**Note**h]j%)}(hjch]hNote}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMthjGubh)}(hDrivers which don't use mipi_dbi_pipe_update() because they have custom framebuffer flushing, can't use this function since they both use the same flushing code.h]hDrivers which don’t use mipi_dbi_pipe_update() because they have custom framebuffer flushing, can’t use this function since they both use the same flushing code.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMthjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mipi_dbi_pipe_disable (C function)c.mipi_dbi_pipe_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hAvoid mipi_dbi_pipe_disable (struct drm_simple_display_pipe *pipe)h]j)}(h@void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dbi_pipe_disableh]j)}(hmipi_dbi_pipe_disableh]hmipi_dbi_pipe_disable}(hjɦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŦubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h&(struct drm_simple_display_pipe *pipe)h]j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj˦sbc.mipi_dbi_pipe_disableasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjݦubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hMIPI DBI pipe disable helperh]hMIPI DBI pipe disable helper}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXJ**Parameters** ``struct drm_simple_display_pipe *pipe`` Display pipe **Description** This function disables backlight if present, if not the display memory is blanked. The regulator is disabled if in use. Drivers can use this as their :c:type:`drm_simple_display_pipe_funcs->disable ` callback.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh]jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjh]h$struct drm_simple_display_pipe *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hj§hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hThis function disables backlight if present, if not the display memory is blanked. The regulator is disabled if in use. Drivers can use this as their :c:type:`drm_simple_display_pipe_funcs->disable ` callback.h](hThis function disables backlight if present, if not the display memory is blanked. The regulator is disabled if in use. Drivers can use this as their }(hjhhhNhNubh)}(hP:c:type:`drm_simple_display_pipe_funcs->disable `h]jz)}(hjh]h&drm_simple_display_pipe_funcs->disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dbi_pipe_begin_fb_access (C function)c.mipi_dbi_pipe_begin_fb_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmint mipi_dbi_pipe_begin_fb_access (struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h]j)}(hlint mipi_dbi_pipe_begin_fb_access(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjZhMubj)}(hmipi_dbi_pipe_begin_fb_accessh]j)}(hmipi_dbi_pipe_begin_fb_accessh]hmipi_dbi_pipe_begin_fb_access}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjZhMubj)}(hK(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjosbc.mipi_dbi_pipe_begin_fb_accessasbuh1hhjubj)}(h h]h }(hjǨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjըhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jèc.mipi_dbi_pipe_begin_fb_accessasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjZhMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjZhMhjAhhubj)}(hhh]h)}(h!MIPI DBI pipe begin-access helperh]h!MIPI DBI pipe begin-access helper}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_simple_display_pipe *pipe`` Display pipe ``struct drm_plane_state *plane_state`` Plane state **Description** This function implements struct :c:type:`drm_simple_display_funcs.begin_fb_access `. See drm_gem_begin_shadow_fb_access() for details and mipi_dbi_pipe_cleanup_fb() for cleanup. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh](jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjh]h$struct drm_simple_display_pipe *pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hj֩hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjҩhMhjөubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjҩhMhjubjn)}(h4``struct drm_plane_state *plane_state`` Plane state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Plane stateh]h Plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hnThis function implements struct :c:type:`drm_simple_display_funcs.begin_fb_access `.h](h This function implements struct }(hjGhhhNhNubh)}(hM:c:type:`drm_simple_display_funcs.begin_fb_access `h]jz)}(hjQh]h(drm_simple_display_funcs.begin_fb_access}(hjShhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjubh)}(h\See drm_gem_begin_shadow_fb_access() for details and mipi_dbi_pipe_cleanup_fb() for cleanup.h]h\See drm_gem_begin_shadow_fb_access() for details and mipi_dbi_pipe_cleanup_fb() for cleanup.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dbi_pipe_end_fb_access (C function)c.mipi_dbi_pipe_end_fb_accesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hlvoid mipi_dbi_pipe_end_fb_access (struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h]j)}(hkvoid mipi_dbi_pipe_end_fb_access(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjϪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˪hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjުhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˪hhhjݪhMubj)}(hmipi_dbi_pipe_end_fb_accessh]j)}(hmipi_dbi_pipe_end_fb_accessh]hmipi_dbi_pipe_end_fb_access}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj˪hhhjݪhMubj)}(hK(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_pipe_end_fb_accessasbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jFc.mipi_dbi_pipe_end_fb_accessasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjȫhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(h plane_stateh]h plane_state}(hjիhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj˪hhhjݪhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjǪhhhjݪhMubah}(h]jªah ](jjeh"]h$]h&]jj)jhuh1jhjݪhMhjĪhhubj)}(hhh]h)}(hMIPI DBI pipe end-access helperh]hMIPI DBI pipe end-access helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjĪhhhjݪhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX#**Parameters** ``struct drm_simple_display_pipe *pipe`` Display pipe ``struct drm_plane_state *plane_state`` Plane state **Description** This function implements struct :c:type:`drm_simple_display_funcs.end_fb_access `. See mipi_dbi_pipe_begin_fb_access().h](h)}(h**Parameters**h]j%)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh](jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hj@h]h$struct drm_simple_display_pipe *pipe}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj:ubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhjUhMhj7ubjn)}(h4``struct drm_plane_state *plane_state`` Plane state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjyh]h#struct drm_plane_state *plane_state}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjsubj)}(hhh]h)}(h Plane stateh]h Plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hlThis function implements struct :c:type:`drm_simple_display_funcs.end_fb_access `.h](h This function implements struct }(hjʬhhhNhNubh)}(hK:c:type:`drm_simple_display_funcs.end_fb_access `h]jz)}(hjԬh]h&drm_simple_display_funcs.end_fb_access}(hj֬hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjҬubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjʬubh.}(hjʬhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h$See mipi_dbi_pipe_begin_fb_access().h]h$See mipi_dbi_pipe_begin_fb_access().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&mipi_dbi_pipe_reset_plane (C function)c.mipi_dbi_pipe_reset_planehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hEvoid mipi_dbi_pipe_reset_plane (struct drm_simple_display_pipe *pipe)h]j)}(hDvoid mipi_dbi_pipe_reset_plane(struct drm_simple_display_pipe *pipe)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hMubj)}(hmipi_dbi_pipe_reset_planeh]j)}(hmipi_dbi_pipe_reset_planeh]hmipi_dbi_pipe_reset_plane}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj9hMubj)}(h&(struct drm_simple_display_pipe *pipe)h]j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjNsbc.mipi_dbi_pipe_reset_planeasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubah}(h]h ]h"]h$]h&]jjuh1jhj'hhhj9hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#hhhj9hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj9hMhj hhubj)}(hhh]h)}(hMIPI DBI plane-reset helperh]hMIPI DBI plane-reset helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_simple_display_pipe *pipe`` Display pipe **Description** This function implements struct :c:type:`drm_simple_display_funcs.reset_plane ` for MIPI DBI planes.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh]jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hj,h]h$struct drm_simple_display_pipe *pipe}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj&ubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhj#ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h~This function implements struct :c:type:`drm_simple_display_funcs.reset_plane ` for MIPI DBI planes.h](h This function implements struct }(hj}hhhNhNubh)}(hI:c:type:`drm_simple_display_funcs.reset_plane `h]jz)}(hjh]h$drm_simple_display_funcs.reset_plane}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj}ubh for MIPI DBI planes.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dbi_pipe_duplicate_plane_state (C function)%c.mipi_dbi_pipe_duplicate_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcstruct drm_plane_state * mipi_dbi_pipe_duplicate_plane_state (struct drm_simple_display_pipe *pipe)h]j)}(hastruct drm_plane_state *mipi_dbi_pipe_duplicate_plane_state(struct drm_simple_display_pipe *pipe)h](j)}(hjh]hstruct}(hjϮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˮhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjݮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˮhhhjܮhMubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j#mipi_dbi_pipe_duplicate_plane_statesb%c.mipi_dbi_pipe_duplicate_plane_stateasbuh1hhjˮhhhjܮhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˮhhhjܮhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjˮhhhjܮhMubj)}(h#mipi_dbi_pipe_duplicate_plane_stateh]j)}(hj h]h#mipi_dbi_pipe_duplicate_plane_state}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjˮhhhjܮhMubj)}(h&(struct drm_simple_display_pipe *pipe)h]j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j %c.mipi_dbi_pipe_duplicate_plane_stateasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubah}(h]h ]h"]h$]h&]jjuh1jhjˮhhhjܮhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjǮhhhjܮhMubah}(h]j®ah ](jjeh"]h$]h&]jj)jhuh1jhjܮhMhjĮhhubj)}(hhh]h)}(hduplicates MIPI DBI plane stateh]hduplicates MIPI DBI plane state}(hjʯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjǯhhubah}(h]h ]h"]h$]h&]uh1jhjĮhhhjܮhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXq**Parameters** ``struct drm_simple_display_pipe *pipe`` Display pipe **Description** This function implements struct :c:type:`drm_simple_display_funcs.duplicate_plane_state ` for MIPI DBI planes. See drm_gem_duplicate_shadow_plane_state() for additional details. **Return** A pointer to a new plane state on success, or NULL otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh]jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hj h]h$struct drm_simple_display_pipe *pipe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hThis function implements struct :c:type:`drm_simple_display_funcs.duplicate_plane_state ` for MIPI DBI planes.h](h This function implements struct }(hj\hhhNhNubh)}(hS:c:type:`drm_simple_display_funcs.duplicate_plane_state `h]jz)}(hjfh]h.drm_simple_display_funcs.duplicate_plane_state}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj\ubh for MIPI DBI planes.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hBSee drm_gem_duplicate_shadow_plane_state() for additional details.h]hBSee drm_gem_duplicate_shadow_plane_state() for additional details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h=A pointer to a new plane state on success, or NULL otherwise.h]h=A pointer to a new plane state on success, or NULL otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.mipi_dbi_pipe_destroy_plane_state (C function)#c.mipi_dbi_pipe_destroy_plane_statehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hrvoid mipi_dbi_pipe_destroy_plane_state (struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h]j)}(hqvoid mipi_dbi_pipe_destroy_plane_state(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h!mipi_dbi_pipe_destroy_plane_stateh]j)}(h!mipi_dbi_pipe_destroy_plane_stateh]h!mipi_dbi_pipe_destroy_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(hK(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state)h](j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j%)}jjsb#c.mipi_dbi_pipe_destroy_plane_stateasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j[#c.mipi_dbi_pipe_destroy_plane_stateasbuh1hhjubj)}(h h]h }(hjϱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjݱhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjܰhhhjhM ubah}(h]jװah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjٰhhubj)}(hhh]h)}(hcleans up MIPI DBI plane stateh]hcleans up MIPI DBI plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjٰhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhjhNhNubj)}(hX4**Parameters** ``struct drm_simple_display_pipe *pipe`` Display pipe ``struct drm_plane_state *plane_state`` Plane state **Description** This function implements struct drm_simple_display_funcs.destroy_plane_state for MIPI DBI planes. See drm_gem_destroy_shadow_plane_state() for additional details.h](h)}(h**Parameters**h]j%)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubji)}(hhh](jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjUh]h$struct drm_simple_display_pipe *pipe}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjOubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjLubjn)}(h4``struct drm_plane_state *plane_state`` Plane state h](jt)}(h'``struct drm_plane_state *plane_state``h]jz)}(hjh]h#struct drm_plane_state *plane_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Plane stateh]h Plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjLubeh}(h]h ]h"]h$]h&]uh1jhhj0ubh)}(h**Description**h]j%)}(hjɲh]h Description}(hj˲hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDzubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubh)}(haThis function implements struct drm_simple_display_funcs.destroy_plane_state for MIPI DBI planes.h]haThis function implements struct drm_simple_display_funcs.destroy_plane_state for MIPI DBI planes.}(hj߲hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubh)}(h@See drm_gem_destroy_shadow_plane_state() for additional details.h]h@See drm_gem_destroy_shadow_plane_state() for additional details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+mipi_dbi_dev_init_with_formats (C function) c.mipi_dbi_dev_init_with_formatshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint mipi_dbi_dev_init_with_formats (struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const uint32_t *formats, unsigned int format_count, const struct drm_display_mode *mode, unsigned int rotation, size_t tx_buf_size)h]j)}(hint mipi_dbi_dev_init_with_formats(struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const uint32_t *formats, unsigned int format_count, const struct drm_display_mode *mode, unsigned int rotation, size_t tx_buf_size)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMZubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hMZubj)}(hmipi_dbi_dev_init_with_formatsh]j)}(hmipi_dbi_dev_init_with_formatsh]hmipi_dbi_dev_init_with_formats}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hMZubj)}(h(struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const uint32_t *formats, unsigned int format_count, const struct drm_display_mode *mode, unsigned int rotation, size_t tx_buf_size)h](j)}(hstruct mipi_dbi_dev *dbidevh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h mipi_dbi_devh]h mipi_dbi_dev}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jj@sb c.mipi_dbi_dev_init_with_formatsasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hdbidevh]hdbidev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(h1const struct drm_simple_display_pipe_funcs *funcsh](j)}(hjch]hconst}(hj̳hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȳubj)}(h h]h }(hjٳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȳubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȳubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȳubh)}(hhh]j)}(hdrm_simple_display_pipe_funcsh]hdrm_simple_display_pipe_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.mipi_dbi_dev_init_with_formatsasbuh1hhjȳubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȳubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjȳubj)}(hfuncsh]hfuncs}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȳubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hconst uint32_t *formatsh](j)}(hjch]hconst}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j)}(huint32_th]huint32_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j c.mipi_dbi_dev_init_with_formatsasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSubj)}(hformatsh]hformats}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hunsigned int format_counth](j)}(hunsignedh]hunsigned}(hjǴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(h h]h }(hjմhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubj)}(h format_counth]h format_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j c.mipi_dbi_dev_init_with_formatsasbuh1hhjubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hunsigned int rotationh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj͵hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrotationh]hrotation}(hj۵hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(hsize_t tx_buf_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.mipi_dbi_dev_init_with_formatsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h tx_buf_sizeh]h tx_buf_size}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hMZubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj+hMZubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj+hMZhjhhubj)}(hhh]h)}(h2MIPI DBI device initialization with custom formatsh]h2MIPI DBI device initialization with custom formats}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMDhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure to initialize ``const struct drm_simple_display_pipe_funcs *funcs`` Display pipe functions ``const uint32_t *formats`` Array of supported formats (DRM_FORMAT\_\*). ``unsigned int format_count`` Number of elements in **formats** ``const struct drm_display_mode *mode`` Display mode ``unsigned int rotation`` Initial rotation in degrees Counter Clock Wise ``size_t tx_buf_size`` Allocate a transmit buffer of this size. **Description** This function sets up a :c:type:`drm_simple_display_pipe` with a :c:type:`drm_connector` that has one fixed :c:type:`drm_display_mode` which is rotated according to **rotation**. This mode is used to set the mode config min/max width/height properties. Use mipi_dbi_dev_init() if you want native RGB565 and emulated XRGB8888 format. **Note** Some of the helper functions expects RGB565 to be the default format and the transmit buffer sized to fit that. **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMHhjiubji)}(hhh](jn)}(hH``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure to initialize h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjh]hstruct mipi_dbi_dev *dbidev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMEhjubj)}(hhh]h)}(h'MIPI DBI device structure to initializeh]h'MIPI DBI device structure to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMEhjubjn)}(hM``const struct drm_simple_display_pipe_funcs *funcs`` Display pipe functions h](jt)}(h5``const struct drm_simple_display_pipe_funcs *funcs``h]jz)}(hjǶh]h1const struct drm_simple_display_pipe_funcs *funcs}(hjɶhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŶubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMFhjubj)}(hhh]h)}(hDisplay pipe functionsh]hDisplay pipe functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܶhMFhjݶubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjܶhMFhjubjn)}(hI``const uint32_t *formats`` Array of supported formats (DRM_FORMAT\_\*). h](jt)}(h``const uint32_t *formats``h]jz)}(hjh]hconst uint32_t *formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMGhjubj)}(hhh]h)}(h,Array of supported formats (DRM_FORMAT\_\*).h]h,Array of supported formats (DRM_FORMAT_*).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMGhjubjn)}(h@``unsigned int format_count`` Number of elements in **formats** h](jt)}(h``unsigned int format_count``h]jz)}(hj9h]hunsigned int format_count}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMHhj3ubj)}(hhh]h)}(h!Number of elements in **formats**h](hNumber of elements in }(hjRhhhNhNubj%)}(h **formats**h]hformats}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]uh1hhjNhMHhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhjNhMHhjubjn)}(h5``const struct drm_display_mode *mode`` Display mode h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjh]h#const struct drm_display_mode *mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMIhjzubj)}(hhh]h)}(h Display modeh]h Display mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjhMIhjubjn)}(hI``unsigned int rotation`` Initial rotation in degrees Counter Clock Wise h](jt)}(h``unsigned int rotation``h]jz)}(hjh]hunsigned int rotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMJhjubj)}(hhh]h)}(h.Initial rotation in degrees Counter Clock Wiseh]h.Initial rotation in degrees Counter Clock Wise}(hjҷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjηhMJhjϷubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjηhMJhjubjn)}(h@``size_t tx_buf_size`` Allocate a transmit buffer of this size. h](jt)}(h``size_t tx_buf_size``h]jz)}(hjh]hsize_t tx_buf_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMKhjubj)}(hhh]h)}(h(Allocate a transmit buffer of this size.h]h(Allocate a transmit buffer of this size.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMKhjubeh}(h]h ]h"]h$]h&]uh1jhhjiubh)}(h**Description**h]j%)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMMhjiubh)}(hThis function sets up a :c:type:`drm_simple_display_pipe` with a :c:type:`drm_connector` that has one fixed :c:type:`drm_display_mode` which is rotated according to **rotation**. This mode is used to set the mode config min/max width/height properties.h](hThis function sets up a }(hjChhhNhNubh)}(h!:c:type:`drm_simple_display_pipe`h]jz)}(hjMh]hdrm_simple_display_pipe}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipeuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMMhjCubh with a }(hjChhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjqh]h drm_connector}(hjshhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjjhMMhjCubh that has one fixed }(hjChhhNhNubh)}(h:c:type:`drm_display_mode`h]jz)}(hjh]hdrm_display_mode}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_modeuh1hhjjhMMhjCubh which is rotated according to }(hjChhhNhNubj%)}(h **rotation**h]hrotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubhK. This mode is used to set the mode config min/max width/height properties.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjhMMhjiubh)}(hOUse mipi_dbi_dev_init() if you want native RGB565 and emulated XRGB8888 format.h]hOUse mipi_dbi_dev_init() if you want native RGB565 and emulated XRGB8888 format.}(hj͸hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMQhjiubh)}(h**Note**h]j%)}(hj޸h]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjܸubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMShjiubh)}(hoSome of the helper functions expects RGB565 to be the default format and the transmit buffer sized to fit that.h]hoSome of the helper functions expects RGB565 to be the default format and the transmit buffer sized to fit that.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMShjiubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMVhjiubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMWhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dbi_dev_init (C function)c.mipi_dbi_dev_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint mipi_dbi_dev_init (struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const struct drm_display_mode *mode, unsigned int rotation)h]j)}(hint mipi_dbi_dev_init(struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const struct drm_display_mode *mode, unsigned int rotation)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMubj)}(hmipi_dbi_dev_inith]j)}(hmipi_dbi_dev_inith]hmipi_dbi_dev_init}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjXhMubj)}(h(struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const struct drm_display_mode *mode, unsigned int rotation)h](j)}(hstruct mipi_dbi_dev *dbidevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h mipi_dbi_devh]h mipi_dbi_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjmsbc.mipi_dbi_dev_initasbuh1hhjubj)}(h h]h }(hjŹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjӹhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdbidevh]hdbidev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h1const struct drm_simple_display_pipe_funcs *funcsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_simple_display_pipe_funcsh]hdrm_simple_display_pipe_funcs}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]jc.mipi_dbi_dev_initasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfuncsh]hfuncs}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dbi_dev_initasbuh1hhjubj)}(h h]h }(hjۺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int rotationh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hrotationh]hrotation}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjXhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjXhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhjXhMhj?hhubj)}(hhh]h)}(hMIPI DBI device initializationh]hMIPI DBI device initialization}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure to initialize ``const struct drm_simple_display_pipe_funcs *funcs`` Display pipe functions ``const struct drm_display_mode *mode`` Display mode ``unsigned int rotation`` Initial rotation in degrees Counter Clock Wise **Description** This function sets up a :c:type:`drm_simple_display_pipe` with a :c:type:`drm_connector` that has one fixed :c:type:`drm_display_mode` which is rotated according to **rotation**. This mode is used to set the mode config min/max width/height properties. Additionally :c:type:`mipi_dbi.tx_buf ` is allocated. Supported formats: Native RGB565 and emulated XRGB8888. **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh](jn)}(hH``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure to initialize h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjh]hstruct mipi_dbi_dev *dbidev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h'MIPI DBI device structure to initializeh]h'MIPI DBI device structure to initialize}(hj˻hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǻhMhjȻubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjǻhMhjubjn)}(hM``const struct drm_simple_display_pipe_funcs *funcs`` Display pipe functions h](jt)}(h5``const struct drm_simple_display_pipe_funcs *funcs``h]jz)}(hjh]h1const struct drm_simple_display_pipe_funcs *funcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hDisplay pipe functionsh]hDisplay pipe functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h5``const struct drm_display_mode *mode`` Display mode h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hj$h]h#const struct drm_display_mode *mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display modeh]h Display mode}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhjubjn)}(hI``unsigned int rotation`` Initial rotation in degrees Counter Clock Wise h](jt)}(h``unsigned int rotation``h]jz)}(hj]h]hunsigned int rotation}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjWubj)}(hhh]h)}(h.Initial rotation in degrees Counter Clock Wiseh]h.Initial rotation in degrees Counter Clock Wise}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hX<This function sets up a :c:type:`drm_simple_display_pipe` with a :c:type:`drm_connector` that has one fixed :c:type:`drm_display_mode` which is rotated according to **rotation**. This mode is used to set the mode config min/max width/height properties. Additionally :c:type:`mipi_dbi.tx_buf ` is allocated.h](hThis function sets up a }(hjhhhNhNubh)}(h!:c:type:`drm_simple_display_pipe`h]jz)}(hjh]hdrm_simple_display_pipe}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipeuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh with a }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjܼh]h drm_connector}(hj޼hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjڼubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjռhMhjubh that has one fixed }(hjhhhNhNubh)}(h:c:type:`drm_display_mode`h]jz)}(hjh]hdrm_display_mode}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_modeuh1hhjռhMhjubh which is rotated according to }(hjhhhNhNubj%)}(h **rotation**h]hrotation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhY. This mode is used to set the mode config min/max width/height properties. Additionally }(hjhhhNhNubh)}(h$:c:type:`mipi_dbi.tx_buf `h]jz)}(hj4h]hmipi_dbi.tx_buf}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dbiuh1hhjռhMhjubh is allocated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjռhMhjubh)}(h7Supported formats: Native RGB565 and emulated XRGB8888.h]h7Supported formats: Native RGB565 and emulated XRGB8888.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h **Return**h]j%)}(hjlh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dbi_hw_reset (C function)c.mipi_dbi_hw_resethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h-void mipi_dbi_hw_reset (struct mipi_dbi *dbi)h]j)}(h,void mipi_dbi_hw_reset(struct mipi_dbi *dbi)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dbi_hw_reseth]j)}(hmipi_dbi_hw_reseth]hmipi_dbi_hw_reset}(hjҽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjνubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct mipi_dbi *dbi)h]j)}(hstruct mipi_dbi *dbih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dbih]hmipi_dbi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjԽsbc.mipi_dbi_hw_resetasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdbih]hdbi}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hHardware reset of controllerh]hHardware reset of controller}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dbi *dbi`` MIPI DBI structure **Description** Reset controller if the :c:type:`mipi_dbi->reset ` gpio is set.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh]jn)}(h,``struct mipi_dbi *dbi`` MIPI DBI structure h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hjh]hstruct mipi_dbi *dbi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hj˾hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǾhMhjȾubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjǾhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hIReset controller if the :c:type:`mipi_dbi->reset ` gpio is set.h](hReset controller if the }(hjhhhNhNubh)}(h$:c:type:`mipi_dbi->reset `h]jz)}(hj h]hmipi_dbi->reset}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dbiuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh gpio is set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mipi_dbi_display_is_on (C function)c.mipi_dbi_display_is_onhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h2bool mipi_dbi_display_is_on (struct mipi_dbi *dbi)h]j)}(h1bool mipi_dbi_display_is_on(struct mipi_dbi *dbi)h](j)}(hjAh]hbool}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjbhMubj)}(hmipi_dbi_display_is_onh]j)}(hmipi_dbi_display_is_onh]hmipi_dbi_display_is_on}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjbhMubj)}(h(struct mipi_dbi *dbi)h]j)}(hstruct mipi_dbi *dbih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dbih]hmipi_dbi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjwsbc.mipi_dbi_display_is_onasbuh1hhjubj)}(h h]h }(hjϿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjݿhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdbih]hdbi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjQhhhjbhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjMhhhjbhMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhjbhMhjJhhubj)}(hhh]h)}(hCheck if display is onh]hCheck if display is on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhjhNhNubj)}(hXx**Parameters** ``struct mipi_dbi *dbi`` MIPI DBI structure **Description** This function checks the Power Mode register (if readable) to see if display output is turned on. This can be used to see if the bootloader has already turned on the display avoiding flicker when the pipeline is enabled. **Return** true if the display can be verified to be on, false otherwise.h](h)}(h**Parameters**h]j%)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubji)}(hhh]jn)}(h,``struct mipi_dbi *dbi`` MIPI DBI structure h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hjUh]hstruct mipi_dbi *dbi}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjOubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhhj0ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubh)}(hThis function checks the Power Mode register (if readable) to see if display output is turned on. This can be used to see if the bootloader has already turned on the display avoiding flicker when the pipeline is enabled.h]hThis function checks the Power Mode register (if readable) to see if display output is turned on. This can be used to see if the bootloader has already turned on the display avoiding flicker when the pipeline is enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubh)}(h>true if the display can be verified to be on, false otherwise.h]h>true if the display can be verified to be on, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mipi_dbi_poweron_reset (C function)c.mipi_dbi_poweron_resethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h8int mipi_dbi_poweron_reset (struct mipi_dbi_dev *dbidev)h]j)}(h7int mipi_dbi_poweron_reset(struct mipi_dbi_dev *dbidev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM$ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM$ubj)}(hmipi_dbi_poweron_reseth]j)}(hmipi_dbi_poweron_reseth]hmipi_dbi_poweron_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM$ubj)}(h(struct mipi_dbi_dev *dbidev)h]j)}(hstruct mipi_dbi_dev *dbidevh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(h mipi_dbi_devh]h mipi_dbi_dev}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_poweron_resetasbuh1hhj5ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hdbidevh]hdbidev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hM$ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hM$hjhhubj)}(hhh]h)}(hMIPI DBI poweron and reseth]hMIPI DBI poweron and reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure **Description** This function enables the regulator if used and does a hardware and software reset. **Return** Zero on success, or a negative error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh]jn)}(h:``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjh]hstruct mipi_dbi_dev *dbidev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hMIPI DBI device structureh]hMIPI DBI device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hSThis function enables the regulator if used and does a hardware and software reset.h]hSThis function enables the regulator if used and does a hardware and software reset.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h **Return**h]j%)}(hj_h]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM!hjubh)}(h*Zero on success, or a negative error code.h]h*Zero on success, or a negative error code.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/mipi_dbi_poweron_conditional_reset (C function)$c.mipi_dbi_poweron_conditional_resethNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDint mipi_dbi_poweron_conditional_reset (struct mipi_dbi_dev *dbidev)h]j)}(hCint mipi_dbi_poweron_conditional_reset(struct mipi_dbi_dev *dbidev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM6ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM6ubj)}(h"mipi_dbi_poweron_conditional_reseth]j)}(h"mipi_dbi_poweron_conditional_reseth]h"mipi_dbi_poweron_conditional_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM6ubj)}(h(struct mipi_dbi_dev *dbidev)h]j)}(hstruct mipi_dbi_dev *dbidevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h mipi_dbi_devh]h mipi_dbi_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb$c.mipi_dbi_poweron_conditional_resetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdbidevh]hdbidev}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM6ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM6ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM6hjhhubj)}(hhh]h)}(h&MIPI DBI poweron and conditional reseth]h&MIPI DBI poweron and conditional reset}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM+hjahhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure **Description** This function enables the regulator if used and if the display is off, it does a hardware and software reset. If mipi_dbi_display_is_on() determines that the display is on, no reset is performed. **Return** Zero if the controller was reset, 1 if the display was already on, or a negative error code.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM/hjubji)}(hhh]jn)}(h:``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjh]hstruct mipi_dbi_dev *dbidev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM,hjubj)}(hhh]h)}(hMIPI DBI device structureh]hMIPI DBI device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM.hjubh)}(hThis function enables the regulator if used and if the display is off, it does a hardware and software reset. If mipi_dbi_display_is_on() determines that the display is on, no reset is performed.h]hThis function enables the regulator if used and if the display is off, it does a hardware and software reset. If mipi_dbi_display_is_on() determines that the display is on, no reset is performed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM.hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM2hjubh)}(h\Zero if the controller was reset, 1 if the display was already on, or a negative error code.h]h\Zero if the controller was reset, 1 if the display was already on, or a negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'mipi_dbi_spi_cmd_max_speed (C function)c.mipi_dbi_spi_cmd_max_speedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hCu32 mipi_dbi_spi_cmd_max_speed (struct spi_device *spi, size_t len)h]j)}(hBu32 mipi_dbi_spi_cmd_max_speed(struct spi_device *spi, size_t len)h](h)}(hhh]j)}(hu32h]hu32}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j%)}jmipi_dbi_spi_cmd_max_speedsbc.mipi_dbi_spi_cmd_max_speedasbuh1hhjHhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMGubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjphMGubj)}(hmipi_dbi_spi_cmd_max_speedh]j)}(hjmh]hmipi_dbi_spi_cmd_max_speed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjphMGubj)}(h$(struct spi_device *spi, size_t len)h](j)}(hstruct spi_device *spih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h spi_deviceh]h spi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jkc.mipi_dbi_spi_cmd_max_speedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hspih]hspi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jkc.mipi_dbi_spi_cmd_max_speedasbuh1hhj ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlenh]hlen}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjphMGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjphMGubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjphMGhjAhhubj)}(hhh]h)}(hget the maximum SPI bus speedh]hget the maximum SPI bus speed}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM?hjdhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjphMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXU**Parameters** ``struct spi_device *spi`` SPI device ``size_t len`` The transfer buffer length. **Description** Many controllers have a max speed of 10MHz, but can be pushed way beyond that. Increase reliability by running pixel data at max speed and the rest at 10MHz, preventing transfer glitches from messing up the init settings.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMChjubji)}(hhh](jn)}(h&``struct spi_device *spi`` SPI device h](jt)}(h``struct spi_device *spi``h]jz)}(hjh]hstruct spi_device *spi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM@hjubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM@hjubjn)}(h+``size_t len`` The transfer buffer length. h](jt)}(h``size_t len``h]jz)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMAhjubj)}(hhh]h)}(hThe transfer buffer length.h]hThe transfer buffer length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMAhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMChjubh)}(hMany controllers have a max speed of 10MHz, but can be pushed way beyond that. Increase reliability by running pixel data at max speed and the rest at 10MHz, preventing transfer glitches from messing up the init settings.h]hMany controllers have a max speed of 10MHz, but can be pushed way beyond that. Increase reliability by running pixel data at max speed and the rest at 10MHz, preventing transfer glitches from messing up the init settings.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMChjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dbi_spi_init (C function)c.mipi_dbi_spi_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hZint mipi_dbi_spi_init (struct spi_device *spi, struct mipi_dbi *dbi, struct gpio_desc *dc)h]j)}(hYint mipi_dbi_spi_init(struct spi_device *spi, struct mipi_dbi *dbi, struct gpio_desc *dc)h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjohMubj)}(hmipi_dbi_spi_inith]j)}(hmipi_dbi_spi_inith]hmipi_dbi_spi_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhjohMubj)}(hD(struct spi_device *spi, struct mipi_dbi *dbi, struct gpio_desc *dc)h](j)}(hstruct spi_device *spih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h spi_deviceh]h spi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_spi_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hspih]hspi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct mipi_dbi *dbih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hmipi_dbih]hmipi_dbi}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]jc.mipi_dbi_spi_initasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdbih]hdbi}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct gpio_desc *dch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j)}(h gpio_desch]h gpio_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dbi_spi_initasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|ubj)}(hdch]hdc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhjohMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjohMubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjohMhjVhhubj)}(hhh]h)}(h!Initialize MIPI DBI SPI interfaceh]h!Initialize MIPI DBI SPI interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct spi_device *spi`` SPI device ``struct mipi_dbi *dbi`` MIPI DBI structure to initialize ``struct gpio_desc *dc`` D/C gpio (optional) **Description** This function sets :c:type:`mipi_dbi->command `, enables :c:type:`mipi_dbi->read_commands ` for the usual read commands. It should be followed by a call to mipi_dbi_dev_init() or a driver-specific init. If **dc** is set, a Type C Option 3 interface is assumed, if not Type C Option 1. If the command is ``MIPI_DCS_WRITE_MEMORY_START`` and the pixel format is RGB565, endianness has to be taken into account. The MIPI DBI serial interface is big endian and framebuffers are assumed stored in memory as little endian (``DRM_FORMAT_BIG_ENDIAN`` is not supported). This is how endianness is handled: Option 1 (D/C as a bit): The buffer is sent on the wire byte by byte so the 16-bit buffer is byteswapped before transfer. Option 3 (D/C as a gpio): If the SPI controller supports 16 bits per word the buffer can be sent as-is. If not the caller is responsible for swapping the bytes before calling mipi_dbi_command_buf() and the buffer is sent 8 bpw. This handling is optimised for ``DRM_FORMAT_RGB565`` framebuffers. If the interface is Option 1 and the SPI controller doesn't support 9 bits per word, the buffer is sent as 9x 8-bit words, padded with MIPI DCS no-op commands if necessary. **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh](jn)}(h&``struct spi_device *spi`` SPI device h](jt)}(h``struct spi_device *spi``h]jz)}(hjBh]hstruct spi_device *spi}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj<ubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhjWhMhj9ubjn)}(h:``struct mipi_dbi *dbi`` MIPI DBI structure to initialize h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hj{h]hstruct mipi_dbi *dbi}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjuubj)}(hhh]h)}(h MIPI DBI structure to initializeh]h MIPI DBI structure to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj9ubjn)}(h-``struct gpio_desc *dc`` D/C gpio (optional) h](jt)}(h``struct gpio_desc *dc``h]jz)}(hjh]hstruct gpio_desc *dc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hD/C gpio (optional)h]hD/C gpio (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj9ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hThis function sets :c:type:`mipi_dbi->command `, enables :c:type:`mipi_dbi->read_commands ` for the usual read commands. It should be followed by a call to mipi_dbi_dev_init() or a driver-specific init.h](hThis function sets }(hjhhhNhNubh)}(h&:c:type:`mipi_dbi->command `h]jz)}(hjh]hmipi_dbi->command}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dbiuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh , enables }(hjhhhNhNubh)}(h,:c:type:`mipi_dbi->read_commands `h]jz)}(hj3h]hmipi_dbi->read_commands}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dbiuh1hhj,hMhjubho for the usual read commands. It should be followed by a call to mipi_dbi_dev_init() or a driver-specific init.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhjubh)}(hQIf **dc** is set, a Type C Option 3 interface is assumed, if not Type C Option 1.h](hIf }(hjZhhhNhNubj%)}(h**dc**h]hdc}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubhH is set, a Type C Option 3 interface is assumed, if not Type C Option 1.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hXIf the command is ``MIPI_DCS_WRITE_MEMORY_START`` and the pixel format is RGB565, endianness has to be taken into account. The MIPI DBI serial interface is big endian and framebuffers are assumed stored in memory as little endian (``DRM_FORMAT_BIG_ENDIAN`` is not supported).h](hIf the command is }(hj{hhhNhNubjz)}(h``MIPI_DCS_WRITE_MEMORY_START``h]hMIPI_DCS_WRITE_MEMORY_START}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh and the pixel format is RGB565, endianness has to be taken into account. The MIPI DBI serial interface is big endian and framebuffers are assumed stored in memory as little endian (}(hj{hhhNhNubjz)}(h``DRM_FORMAT_BIG_ENDIAN``h]hDRM_FORMAT_BIG_ENDIAN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubh is not supported).}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h"This is how endianness is handled:h]h"This is how endianness is handled:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubji)}(hhh](jn)}(hzOption 1 (D/C as a bit): The buffer is sent on the wire byte by byte so the 16-bit buffer is byteswapped before transfer. h](jt)}(h\Option 1 (D/C as a bit): The buffer is sent on the wire byte by byte so the 16-bit buffer ish]h\Option 1 (D/C as a bit): The buffer is sent on the wire byte by byte so the 16-bit buffer is}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hbyteswapped before transfer.h]hbyteswapped before transfer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hOption 3 (D/C as a gpio): If the SPI controller supports 16 bits per word the buffer can be sent as-is. If not the caller is responsible for swapping the bytes before calling mipi_dbi_command_buf() and the buffer is sent 8 bpw. h](jt)}(h[Option 3 (D/C as a gpio): If the SPI controller supports 16 bits per word the buffer can beh]h[Option 3 (D/C as a gpio): If the SPI controller supports 16 bits per word the buffer can be}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hsent as-is. If not the caller is responsible for swapping the bytes before calling mipi_dbi_command_buf() and the buffer is sent 8 bpw.h]hsent as-is. If not the caller is responsible for swapping the bytes before calling mipi_dbi_command_buf() and the buffer is sent 8 bpw.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(hBThis handling is optimised for ``DRM_FORMAT_RGB565`` framebuffers.h](hThis handling is optimised for }(hj'hhhNhNubjz)}(h``DRM_FORMAT_RGB565``h]hDRM_FORMAT_RGB565}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh framebuffers.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(hIf the interface is Option 1 and the SPI controller doesn't support 9 bits per word, the buffer is sent as 9x 8-bit words, padded with MIPI DCS no-op commands if necessary.h]hIf the interface is Option 1 and the SPI controller doesn’t support 9 bits per word, the buffer is sent as 9x 8-bit words, padded with MIPI DCS no-op commands if necessary.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h **Return**h]j%)}(hjYh]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mipi_dbi_spi_transfer (C function)c.mipi_dbi_spi_transferhNtauh1jxhjhhhNhNubj)}(hhh](j)}(heint mipi_dbi_spi_transfer (struct spi_device *spi, u32 speed_hz, u8 bpw, const void *buf, size_t len)h]j)}(hdint mipi_dbi_spi_transfer(struct spi_device *spi, u32 speed_hz, u8 bpw, const void *buf, size_t len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubj)}(hmipi_dbi_spi_transferh]j)}(hmipi_dbi_spi_transferh]hmipi_dbi_spi_transfer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM+ubj)}(hK(struct spi_device *spi, u32 speed_hz, u8 bpw, const void *buf, size_t len)h](j)}(hstruct spi_device *spih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h spi_deviceh]h spi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_spi_transferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hspih]hspi}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 speed_hzh](h)}(hhh]j)}(hu32h]hu32}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jc.mipi_dbi_spi_transferasbuh1hhjIubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hspeed_hzh]hspeed_hz}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 bpwh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dbi_spi_transferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbpwh]hbpw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst void *bufh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbufh]hbuf}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]jc.mipi_dbi_spi_transferasbuh1hhj6ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hlenh]hlen}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM+ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM+hjhhubj)}(hhh]h)}(hSPI transfer helperh]hSPI transfer helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct spi_device *spi`` SPI device ``u32 speed_hz`` Override speed (optional) ``u8 bpw`` Bits per word ``const void *buf`` Buffer to transfer ``size_t len`` Buffer length **Description** This SPI transfer helper breaks up the transfer of **buf** into chunks which the SPI controller driver can handle. The SPI bus must be locked when calling this. **Return** Zero on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM!hjubji)}(hhh](jn)}(h&``struct spi_device *spi`` SPI device h](jt)}(h``struct spi_device *spi``h]jz)}(hjh]hstruct spi_device *spi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h+``u32 speed_hz`` Override speed (optional) h](jt)}(h``u32 speed_hz``h]jz)}(hj h]h u32 speed_hz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(hOverride speed (optional)h]hOverride speed (optional)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjubjn)}(h``u8 bpw`` Bits per word h](jt)}(h ``u8 bpw``h]jz)}(hjFh]hu8 bpw}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM hj@ubj)}(hhh]h)}(h Bits per wordh]h Bits per word}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hM hjubjn)}(h'``const void *buf`` Buffer to transfer h](jt)}(h``const void *buf``h]jz)}(hjh]hconst void *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM!hjyubj)}(hhh]h)}(hBuffer to transferh]hBuffer to transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjhM!hjubjn)}(h``size_t len`` Buffer length h](jt)}(h``size_t len``h]jz)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM"hjubj)}(hhh]h)}(h Buffer lengthh]h Buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM"hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM$hjubh)}(hThis SPI transfer helper breaks up the transfer of **buf** into chunks which the SPI controller driver can handle. The SPI bus must be locked when calling this.h](h3This SPI transfer helper breaks up the transfer of }(hj hhhNhNubj%)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhf into chunks which the SPI controller driver can handle. The SPI bus must be locked when calling this.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM$hjubh)}(h **Return**h]j%)}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM(hjubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mipi_dbi_debugfs_init (C function)c.mipi_dbi_debugfs_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4void mipi_dbi_debugfs_init (struct drm_minor *minor)h]j)}(h3void mipi_dbi_debugfs_init(struct drm_minor *minor)h](j)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjhMubj)}(hmipi_dbi_debugfs_inith]j)}(hmipi_dbi_debugfs_inith]hmipi_dbi_debugfs_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjhMubj)}(h(struct drm_minor *minor)h]j)}(hstruct drm_minor *minorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_minorh]h drm_minor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_debugfs_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hminorh]hminor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjmhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjhMubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjfhhubj)}(hhh]h)}(hCreate debugfs entriesh]hCreate debugfs entries}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjIjjIjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_minor *minor`` DRM minor **Description** This function creates a 'command' debugfs file for sending commands to the controller or getting the read command values. Drivers can use this as their :c:type:`drm_driver->debugfs_init ` callback.h](h)}(h**Parameters**h]j%)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjMubji)}(hhh]jn)}(h&``struct drm_minor *minor`` DRM minor h](jt)}(h``struct drm_minor *minor``h]jz)}(hjrh]hstruct drm_minor *minor}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjlubj)}(hhh]h)}(h DRM minorh]h DRM minor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjiubah}(h]h ]h"]h$]h&]uh1jhhjMubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjMubh)}(hThis function creates a 'command' debugfs file for sending commands to the controller or getting the read command values. Drivers can use this as their :c:type:`drm_driver->debugfs_init ` callback.h](hThis function creates a ‘command’ debugfs file for sending commands to the controller or getting the read command values. Drivers can use this as their }(hjhhhNhNubh)}(h/:c:type:`drm_driver->debugfs_init `h]jz)}(hjh]hdrm_driver->debugfs_init}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_driveruh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:321: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]#mipi-dbi-helper-functions-referenceah ]h"]#mipi dbi helper functions referenceah$]h&]uh1hhhhhhhhM9ubh)}(hhh](h)}(h#MIPI DSI Helper Functions Referenceh]h#MIPI DSI Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMEubh)}(hXThese functions contain some common logic and helpers to deal with MIPI DSI peripherals.h]hXThese functions contain some common logic and helpers to deal with MIPI DSI peripherals.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:327: ./drivers/gpu/drm/drm_mipi_dsi.chK*hjhhubh)}(hoHelpers are provided for a number of standard MIPI DSI command as well as a subset of the MIPI DCS command set.h]hoHelpers are provided for a number of standard MIPI DSI command as well as a subset of the MIPI DCS command set.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:327: ./drivers/gpu/drm/drm_mipi_dsi.chK-hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_msg (C struct)c.mipi_dsi_msghNtauh1jxhjhhhNhNubj)}(hhh](j)}(h mipi_dsi_msgh]j)}(hstruct mipi_dsi_msgh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhKubj)}(h mipi_dsi_msgh]j)}(hjFh]h mipi_dsi_msg}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjYhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjYhKubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjYhKhjAhhubj)}(hhh]h)}(hread/write DSI bufferh]hread/write DSI buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dsi_msg { u8 channel; u8 type; u16 flags; size_t tx_len; const void *tx_buf; size_t rx_len; void *rx_buf; }; **Members** ``channel`` virtual channel id ``type`` payload data type ``flags`` flags controlling this message transmission ``tx_len`` length of **tx_buf** ``tx_buf`` data to be written ``rx_len`` length of **rx_buf** ``rx_buf`` data to be read, or NULLh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj@)}(hstruct mipi_dsi_msg { u8 channel; u8 type; u16 flags; size_t tx_len; const void *tx_buf; size_t rx_len; void *rx_buf; };h]hstruct mipi_dsi_msg { u8 channel; u8 type; u16 flags; size_t tx_len; const void *tx_buf; size_t rx_len; void *rx_buf; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK)hjubji)}(hhh](jn)}(h``channel`` virtual channel id h](jt)}(h ``channel``h]jz)}(hjh]hchannel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hvirtual channel idh]hvirtual channel id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``type`` payload data type h](jt)}(h``type``h]jz)}(hj4h]htype}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhj.ubj)}(hhh]h)}(hpayload data typeh]hpayload data type}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhjIhKhjubjn)}(h6``flags`` flags controlling this message transmission h](jt)}(h ``flags``h]jz)}(hjmh]hflags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjgubj)}(hhh]h)}(h+flags controlling this message transmissionh]h+flags controlling this message transmission}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h ``tx_len`` length of **tx_buf** h](jt)}(h ``tx_len``h]jz)}(hjh]htx_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hlength of **tx_buf**h](h length of }(hjhhhNhNubj%)}(h **tx_buf**h]htx_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``tx_buf`` data to be written h](jt)}(h ``tx_buf``h]jz)}(hjh]htx_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hdata to be writtenh]hdata to be written}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h ``rx_len`` length of **rx_buf** h](jt)}(h ``rx_len``h]jz)}(hj&h]hrx_len}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK hj ubj)}(hhh]h)}(hlength of **rx_buf**h](h length of }(hj?hhhNhNubj%)}(h **rx_buf**h]hrx_buf}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]uh1hhj;hK hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK hjubjn)}(h#``rx_buf`` data to be read, or NULLh](jt)}(h ``rx_buf``h]jz)}(hjmh]hrx_buf}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK hjgubj)}(hhh]h)}(hdata to be read, or NULLh]hdata to be read, or NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK!hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhK hjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_packet (C struct)c.mipi_dsi_packethNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_packeth]j)}(hstruct mipi_dsi_packeth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK'ubj)}(hmipi_dsi_packeth]j)}(hjh]hmipi_dsi_packet}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK'hjhhubj)}(hhh]h)}(h/represents a MIPI DSI packet in protocol formath]h/represents a MIPI DSI packet in protocol format}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK2hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK'ubeh}(h]h ](jstructeh"]h$]h&]jjjj!jj!jjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dsi_packet { size_t size; u8 header[4]; size_t payload_length; const u8 *payload; }; **Members** ``size`` size (in bytes) of the packet ``header`` the four bytes that make up the header (Data ID, Word Count or Packet Data, and ECC) ``payload_length`` number of bytes in the payload ``payload`` a pointer to a buffer containing the payload, if anyh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubh:}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK6hj%ubj@)}(hpstruct mipi_dsi_packet { size_t size; u8 header[4]; size_t payload_length; const u8 *payload; };h]hpstruct mipi_dsi_packet { size_t size; u8 header[4]; size_t payload_length; const u8 *payload; };}hjFsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK8hj%ubh)}(h **Members**h]j%)}(hjWh]hMembers}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK?hj%ubji)}(hhh](jn)}(h'``size`` size (in bytes) of the packet h](jt)}(h``size``h]jz)}(hjvh]hsize}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK4hjpubj)}(hhh]h)}(hsize (in bytes) of the packeth]hsize (in bytes) of the packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhK4hjmubjn)}(h```header`` the four bytes that make up the header (Data ID, Word Count or Packet Data, and ECC) h](jt)}(h ``header``h]jz)}(hjh]hheader}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK6hjubj)}(hhh]h)}(hTthe four bytes that make up the header (Data ID, Word Count or Packet Data, and ECC)h]hTthe four bytes that make up the header (Data ID, Word Count or Packet Data, and ECC)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK6hjmubjn)}(h2``payload_length`` number of bytes in the payload h](jt)}(h``payload_length``h]jz)}(hjh]hpayload_length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK7hjubj)}(hhh]h)}(hnumber of bytes in the payloadh]hnumber of bytes in the payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK7hjmubjn)}(h@``payload`` a pointer to a buffer containing the payload, if anyh](jt)}(h ``payload``h]jz)}(hj"h]hpayload}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK7hjubj)}(hhh]h)}(h4a pointer to a buffer containing the payload, if anyh]h4a pointer to a buffer containing the payload, if any}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK8hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hK7hjmubeh}(h]h ]h"]h$]h&]uh1jhhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_host_ops (C struct)c.mipi_dsi_host_opshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_host_opsh]j)}(hstruct mipi_dsi_host_opsh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhK>ubj)}(hmipi_dsi_host_opsh]j)}(hjvh]hmipi_dsi_host_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhK>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhK>ubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjhK>hjqhhubj)}(hhh]h)}(hDSI bus operationsh]hDSI bus operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKDhjhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhK>ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dsi_host_ops { int (*attach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi); int (*detach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi); ssize_t (*transfer)(struct mipi_dsi_host *host, const struct mipi_dsi_msg *msg); }; **Members** ``attach`` attach DSI device to DSI host ``detach`` detach DSI device from DSI host ``transfer`` transmit a DSI packeth](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKHhjubj@)}(hX struct mipi_dsi_host_ops { int (*attach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi); int (*detach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi); ssize_t (*transfer)(struct mipi_dsi_host *host, const struct mipi_dsi_msg *msg); };h]hX struct mipi_dsi_host_ops { int (*attach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi); int (*detach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi); ssize_t (*transfer)(struct mipi_dsi_host *host, const struct mipi_dsi_msg *msg); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKJhjubh)}(h **Members**h]j%)}(hj h]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKPhjubji)}(hhh](jn)}(h)``attach`` attach DSI device to DSI host h](jt)}(h ``attach``h]jz)}(hj+h]hattach}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKFhj%ubj)}(hhh]h)}(hattach DSI device to DSI hosth]hattach DSI device to DSI host}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKFhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKFhj"ubjn)}(h+``detach`` detach DSI device from DSI host h](jt)}(h ``detach``h]jz)}(hjdh]hdetach}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKGhj^ubj)}(hhh]h)}(hdetach DSI device from DSI hosth]hdetach DSI device from DSI host}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKGhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhKGhj"ubjn)}(h"``transfer`` transmit a DSI packeth](jt)}(h ``transfer``h]jz)}(hjh]htransfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKGhjubj)}(hhh]h)}(htransmit a DSI packeth]htransmit a DSI packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKGhj"ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKKhjhhubh)}(hXDSI packets transmitted by .transfer() are passed in as mipi_dsi_msg structures. This structure contains information about the type of packet being transmitted as well as the transmit and receive buffers. When an error is encountered during transmission, this function will return a negative error code. On success it shall return the number of bytes transmitted for write packets or the number of bytes received for read packets.h]hXDSI packets transmitted by .transfer() are passed in as mipi_dsi_msg structures. This structure contains information about the type of packet being transmitted as well as the transmit and receive buffers. When an error is encountered during transmission, this function will return a negative error code. On success it shall return the number of bytes transmitted for write packets or the number of bytes received for read packets.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKIhjhhubh)}(hNote that typically DSI packet transmission is atomic, so the .transfer() function will seldomly return anything other than the number of bytes contained in the transmit buffer on success.h]hNote that typically DSI packet transmission is atomic, so the .transfer() function will seldomly return anything other than the number of bytes contained in the transmit buffer on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKQhjhhubh)}(hAlso note that those callbacks can be called no matter the state the host is in. Drivers that need the underlying device to be powered to perform these operations will first need to make sure it's been properly enabled.h]hAlso note that those callbacks can be called no matter the state the host is in. Drivers that need the underlying device to be powered to perform these operations will first need to make sure it’s been properly enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKUhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_host (C struct)c.mipi_dsi_hosthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h mipi_dsi_hosth]j)}(hstruct mipi_dsi_hosth](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhK]ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjIhK]ubj)}(h mipi_dsi_hosth]j)}(hj6h]h mipi_dsi_host}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhjIhK]ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjIhK]ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1jhjIhK]hj1hhubj)}(hhh]h)}(hDSI host deviceh]hDSI host device}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKdhj{hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjIhK]ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dsi_host { struct device *dev; const struct mipi_dsi_host_ops *ops; struct list_head list; }; **Members** ``dev`` driver model device node for this DSI host ``ops`` DSI host operations ``list`` list managementh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhhjubj@)}(hustruct mipi_dsi_host { struct device *dev; const struct mipi_dsi_host_ops *ops; struct list_head list; };h]hustruct mipi_dsi_host { struct device *dev; const struct mipi_dsi_host_ops *ops; struct list_head list; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKjhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKphjubji)}(hhh](jn)}(h3``dev`` driver model device node for this DSI host h](jt)}(h``dev``h]jz)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKfhjubj)}(hhh]h)}(h*driver model device node for this DSI hosth]h*driver model device node for this DSI host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKfhjubjn)}(h``ops`` DSI host operations h](jt)}(h``ops``h]jz)}(hj$h]hops}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKghjubj)}(hhh]h)}(hDSI host operationsh]hDSI host operations}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKghj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hKghjubjn)}(h``list`` list managementh](jt)}(h``list``h]jz)}(hj]h]hlist}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKghjWubj)}(hhh]h)}(hlist managementh]hlist management}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhKghjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_device_info (C struct)c.mipi_dsi_device_infohNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_device_infoh]j)}(hstruct mipi_dsi_device_infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKnubj)}(hmipi_dsi_device_infoh]j)}(hjh]hmipi_dsi_device_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKnubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKnhjhhubj)}(hhh]h)}(h'template for creating a mipi_dsi_deviceh]h'template for creating a mipi_dsi_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKnubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX'**Definition**:: struct mipi_dsi_device_info { char type[DSI_DEV_NAME_SIZE]; u32 channel; struct device_node *node; }; **Members** ``type`` DSI peripheral chip type ``channel`` DSI virtual channel assigned to peripheral ``node`` pointer to OF device node or NULLh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj@)}(hqstruct mipi_dsi_device_info { char type[DSI_DEV_NAME_SIZE]; u32 channel; struct device_node *node; };h]hqstruct mipi_dsi_device_info { char type[DSI_DEV_NAME_SIZE]; u32 channel; struct device_node *node; };}hj6sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubh)}(h **Members**h]j%)}(hjGh]hMembers}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubji)}(hhh](jn)}(h"``type`` DSI peripheral chip type h](jt)}(h``type``h]jz)}(hjfh]htype}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhj`ubj)}(hhh]h)}(hDSI peripheral chip typeh]hDSI peripheral chip type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hKhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hKhj]ubjn)}(h7``channel`` DSI virtual channel assigned to peripheral h](jt)}(h ``channel``h]jz)}(hjh]hchannel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(h*DSI virtual channel assigned to peripheralh]h*DSI virtual channel assigned to peripheral}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj]ubjn)}(h*``node`` pointer to OF device node or NULLh](jt)}(h``node``h]jz)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(h!pointer to OF device node or NULLh]h!pointer to OF device node or NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj]ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubh)}(hNThis is populated and passed to mipi_dsi_device_new to create a new DSI deviceh]hNThis is populated and passed to mipi_dsi_device_new to create a new DSI device}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_device (C struct)c.mipi_dsi_devicehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_deviceh]j)}(hstruct mipi_dsi_deviceh](j)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjfhKubj)}(hmipi_dsi_deviceh]j)}(hjSh]hmipi_dsi_device}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjfhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhjfhKubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1jhjfhKhjNhhubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjfhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dsi_device { struct mipi_dsi_host *host; struct device dev; bool attached; char name[DSI_DEV_NAME_SIZE]; unsigned int channel; unsigned int lanes; enum mipi_dsi_pixel_format format; unsigned long mode_flags; unsigned long hs_rate; unsigned long lp_rate; struct drm_dsc_config *dsc; }; **Members** ``host`` DSI host for this peripheral ``dev`` driver model device node for this peripheral ``attached`` the DSI device has been successfully attached ``name`` DSI peripheral chip type ``channel`` virtual channel assigned to the peripheral ``lanes`` number of active data lanes ``format`` pixel format for video mode ``mode_flags`` DSI operation mode related flags ``hs_rate`` maximum lane frequency for high speed mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy drivers ``lp_rate`` maximum lane frequency for low power mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy drivers ``dsc`` panel/bridge DSC pps payload to be senth](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj@)}(hXTstruct mipi_dsi_device { struct mipi_dsi_host *host; struct device dev; bool attached; char name[DSI_DEV_NAME_SIZE]; unsigned int channel; unsigned int lanes; enum mipi_dsi_pixel_format format; unsigned long mode_flags; unsigned long hs_rate; unsigned long lp_rate; struct drm_dsc_config *dsc; };h]hXTstruct mipi_dsi_device { struct mipi_dsi_host *host; struct device dev; bool attached; char name[DSI_DEV_NAME_SIZE]; unsigned int channel; unsigned int lanes; enum mipi_dsi_pixel_format format; unsigned long mode_flags; unsigned long hs_rate; unsigned long lp_rate; struct drm_dsc_config *dsc; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubji)}(hhh](jn)}(h&``host`` DSI host for this peripheral h](jt)}(h``host``h]jz)}(hjh]hhost}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hDSI host for this peripheralh]hDSI host for this peripheral}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h5``dev`` driver model device node for this peripheral h](jt)}(h``dev``h]jz)}(hjAh]hdev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhj;ubj)}(hhh]h)}(h,driver model device node for this peripheralh]h,driver model device node for this peripheral}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhKhjubjn)}(h;``attached`` the DSI device has been successfully attached h](jt)}(h ``attached``h]jz)}(hjzh]hattached}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjtubj)}(hhh]h)}(h-the DSI device has been successfully attachedh]h-the DSI device has been successfully attached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h"``name`` DSI peripheral chip type h](jt)}(h``name``h]jz)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hDSI peripheral chip typeh]hDSI peripheral chip type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h7``channel`` virtual channel assigned to the peripheral h](jt)}(h ``channel``h]jz)}(hjh]hchannel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(h*virtual channel assigned to the peripheralh]h*virtual channel assigned to the peripheral}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h&``lanes`` number of active data lanes h](jt)}(h ``lanes``h]jz)}(hj%h]hlanes}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hnumber of active data lanesh]hnumber of active data lanes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj:hKhjubjn)}(h'``format`` pixel format for video mode h](jt)}(h ``format``h]jz)}(hj^h]hformat}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjXubj)}(hhh]h)}(hpixel format for video modeh]hpixel format for video mode}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjshKhjubjn)}(h0``mode_flags`` DSI operation mode related flags h](jt)}(h``mode_flags``h]jz)}(hjh]h mode_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(h DSI operation mode related flagsh]h DSI operation mode related flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``hs_rate`` maximum lane frequency for high speed mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy drivers h](jt)}(h ``hs_rate``h]jz)}(hjh]hhs_rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hmaximum lane frequency for high speed mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy driversh]hmaximum lane frequency for high speed mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``lp_rate`` maximum lane frequency for low power mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy drivers h](jt)}(h ``lp_rate``h]jz)}(hj h]hlp_rate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hmaximum lane frequency for low power mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy driversh]hmaximum lane frequency for low power mode in hertz, this should be set to the real limits of the hardware, zero is only accepted for legacy drivers}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h/``dsc`` panel/bridge DSC pps payload to be senth](jt)}(h``dsc``h]jz)}(hjDh]hdsc}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhj>ubj)}(hhh]h)}(h'panel/bridge DSC pps payload to be senth]h'panel/bridge DSC pps payload to be sent}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!mipi_dsi_multi_context (C struct)c.mipi_dsi_multi_contexthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_multi_contexth]j)}(hstruct mipi_dsi_multi_contexth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hmipi_dsi_multi_contexth]j)}(hjh]hmipi_dsi_multi_context}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h0Context to call multiple MIPI DSI funcs in a rowh]h0Context to call multiple MIPI DSI funcs in a row}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX(**Definition**:: struct mipi_dsi_multi_context { struct mipi_dsi_device *dsi; int accum_err; }; **Members** ``dsi`` Pointer to the MIPI DSI device ``accum_err`` Storage for the accumulated error over the multiple calls Init to 0. If a function encounters an error then the error code will be stored here. If you call a function and this points to a non-zero value then the function will be a noop. This allows calling a function many times in a row and just checking the error at the end to see if any of them failed.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj@)}(hVstruct mipi_dsi_multi_context { struct mipi_dsi_device *dsi; int accum_err; };h]hVstruct mipi_dsi_multi_context { struct mipi_dsi_device *dsi; int accum_err; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubh)}(h **Members**h]j%)}(hj.h]hMembers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubji)}(hhh](jn)}(h'``dsi`` Pointer to the MIPI DSI device h](jt)}(h``dsi``h]jz)}(hjMh]hdsi}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjGubj)}(hhh]h)}(hPointer to the MIPI DSI deviceh]hPointer to the MIPI DSI device}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjbhKhjDubjn)}(hXs``accum_err`` Storage for the accumulated error over the multiple calls Init to 0. If a function encounters an error then the error code will be stored here. If you call a function and this points to a non-zero value then the function will be a noop. This allows calling a function many times in a row and just checking the error at the end to see if any of them failed.h](jt)}(h ``accum_err``h]jz)}(hjh]h accum_err}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh](h)}(h9Storage for the accumulated error over the multiple callsh]h9Storage for the accumulated error over the multiple calls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubh)}(hX*Init to 0. If a function encounters an error then the error code will be stored here. If you call a function and this points to a non-zero value then the function will be a noop. This allows calling a function many times in a row and just checking the error at the end to see if any of them failed.h]hX*Init to 0. If a function encounters an error then the error code will be stored here. If you call a function and this points to a non-zero value then the function will be a noop. This allows calling a function many times in a row and just checking the error at the end to see if any of them failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjDubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_pixel_format_to_bpp (C function)c.mipi_dsi_pixel_format_to_bpphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hAint mipi_dsi_pixel_format_to_bpp (enum mipi_dsi_pixel_format fmt)h]j)}(h@int mipi_dsi_pixel_format_to_bpp(enum mipi_dsi_pixel_format fmt)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hmipi_dsi_pixel_format_to_bpph]j)}(hmipi_dsi_pixel_format_to_bpph]hmipi_dsi_pixel_format_to_bpp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h (enum mipi_dsi_pixel_format fmt)h]j)}(henum mipi_dsi_pixel_format fmth](j)}(hjl h]henum}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hmipi_dsi_pixel_formath]hmipi_dsi_pixel_format}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_pixel_format_to_bppasbuh1hhj(ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hfmth]hfmt}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hdobtain the number of bits per pixel for any given pixel format defined by the MIPI DSI specificationh]hdobtain the number of bits per pixel for any given pixel format defined by the MIPI DSI specification}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``enum mipi_dsi_pixel_format fmt`` MIPI DSI pixel format **Return** The number of bits per pixel of the given pixel format.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubji)}(hhh]jn)}(h9``enum mipi_dsi_pixel_format fmt`` MIPI DSI pixel format h](jt)}(h"``enum mipi_dsi_pixel_format fmt``h]jz)}(hjh]henum mipi_dsi_pixel_format fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubj)}(hhh]h)}(hMIPI DSI pixel formath]hMIPI DSI pixel format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubh)}(h7The number of bits per pixel of the given pixel format.h]h7The number of bits per pixel of the given pixel format.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_tear_mode (C enum)c.mipi_dsi_dcs_tear_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_dcs_tear_modeh]j)}(henum mipi_dsi_dcs_tear_modeh](j)}(hjl h]henum}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjphKubj)}(hmipi_dsi_dcs_tear_modeh]j)}(hj]h]hmipi_dsi_dcs_tear_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhjphKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhjphKubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjphKhjXhhubj)}(hhh]h)}(hTearing Effect Output Line modeh]hTearing Effect Output Line mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhM6hjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjphKubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Constants** ``MIPI_DSI_DCS_TEAR_MODE_VBLANK`` the TE output line consists of V-Blanking information only ``MIPI_DSI_DCS_TEAR_MODE_VHBLANK`` the TE output line consists of both V-Blanking and H-Blanking informationh](h)}(h **Constants**h]j%)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhM:hjubji)}(hhh](jn)}(h]``MIPI_DSI_DCS_TEAR_MODE_VBLANK`` the TE output line consists of V-Blanking information only h](jt)}(h!``MIPI_DSI_DCS_TEAR_MODE_VBLANK``h]jz)}(hjh]hMIPI_DSI_DCS_TEAR_MODE_VBLANK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhM>hjubj)}(hhh]h)}(h:the TE output line consists of V-Blanking information onlyh]h:the TE output line consists of V-Blanking information only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM>hjubjn)}(hl``MIPI_DSI_DCS_TEAR_MODE_VHBLANK`` the TE output line consists of both V-Blanking and H-Blanking informationh](jt)}(h"``MIPI_DSI_DCS_TEAR_MODE_VHBLANK``h]jz)}(hj h]hMIPI_DSI_DCS_TEAR_MODE_VHBLANK}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMAhjubj)}(hhh]h)}(hIthe TE output line consists of both V-Blanking and H-Blanking informationh]hIthe TE output line consists of both V-Blanking and H-Blanking information}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMAhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hMAhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$mipi_dsi_generic_write_seq (C macro)c.mipi_dsi_generic_write_seqhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_generic_write_seqh]j)}(hmipi_dsi_generic_write_seqh]j)}(hmipi_dsi_generic_write_seqh]j)}(hjsh]hmipi_dsi_generic_write_seq}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjqhhhjhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjnhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjnhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h,``mipi_dsi_generic_write_seq (dsi, seq...)``h]jz)}(hjh]h(mipi_dsi_generic_write_seq (dsi, seq...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjhhubjb=)}(h+transmit data using a generic write packet h]h)}(h*transmit data using a generic write packeth]h*transmit data using a generic write packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubah}(h]h ]h"]h$]h&]uh1ja=hjhMhjhhubj)}(hXq**Parameters** ``dsi`` DSI peripheral device ``seq...`` buffer containing the payload **Description** This macro will print errors for you and will RETURN FROM THE CALLING FUNCTION (yes this is non-intuitive) upon error. Because of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. Please replace calls of it with mipi_dsi_generic_write_seq_multi().h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubji)}(hhh](jn)}(h``dsi`` DSI peripheral device h](jt)}(h``dsi``h]jz)}(hjh]hdsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h)``seq...`` buffer containing the payload h](jt)}(h ``seq...``h]jz)}(hj<h]hseq...}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhj6ubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubh)}(hvThis macro will print errors for you and will RETURN FROM THE CALLING FUNCTION (yes this is non-intuitive) upon error.h]hvThis macro will print errors for you and will RETURN FROM THE CALLING FUNCTION (yes this is non-intuitive) upon error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubh)}(hBecause of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. Please replace calls of it with mipi_dsi_generic_write_seq_multi().h]hBecause of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. Please replace calls of it with mipi_dsi_generic_write_seq_multi().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_generic_write_seq_multi (C macro)"c.mipi_dsi_generic_write_seq_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(h mipi_dsi_generic_write_seq_multih]j)}(h mipi_dsi_generic_write_seq_multih]j)}(h mipi_dsi_generic_write_seq_multih]j)}(hjh]h mipi_dsi_generic_write_seq_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h2``mipi_dsi_generic_write_seq_multi (ctx, seq...)``h]jz)}(hjh]h.mipi_dsi_generic_write_seq_multi (ctx, seq...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjhhubjb=)}(h+transmit data using a generic write packet h]h)}(h*transmit data using a generic write packeth]h*transmit data using a generic write packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubah}(h]h ]h"]h$]h&]uh1ja=hj)hMhjhhubj)}(h**Parameters** ``ctx`` Context for multiple DSI transactions ``seq...`` buffer containing the payload **Description** This macro will print errors for you and error handling is optimized for callers that call this multiple times in a row.h](h)}(h**Parameters**h]j%)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhj0ubji)}(hhh](jn)}(h.``ctx`` Context for multiple DSI transactions h](jt)}(h``ctx``h]jz)}(hjUh]hctx}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjOubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjLubjn)}(h)``seq...`` buffer containing the payload h](jt)}(h ``seq...``h]jz)}(hjh]hseq...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjLubeh}(h]h ]h"]h$]h&]uh1jhhj0ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhj0ubh)}(hxThis macro will print errors for you and error handling is optimized for callers that call this multiple times in a row.h]hxThis macro will print errors for you and error handling is optimized for callers that call this multiple times in a row.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j mipi_dsi_dcs_write_seq (C macro)c.mipi_dsi_dcs_write_seqhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_dcs_write_seqh]j)}(hmipi_dsi_dcs_write_seqh]j)}(hmipi_dsi_dcs_write_seqh]j)}(hjh]hmipi_dsi_dcs_write_seq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj%hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj%hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj%hMubeh}(h]h ](jmacroeh"]h$]h&]jjjj>jj>jjjuh1jhhhjhNhNubh)}(h-``mipi_dsi_dcs_write_seq (dsi, cmd, seq...)``h]jz)}(hjDh]h)mipi_dsi_dcs_write_seq (dsi, cmd, seq...)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjhhubjb=)}(h$transmit a DCS command with payload h]h)}(h#transmit a DCS command with payloadh]h#transmit a DCS command with payload}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjZubah}(h]h ]h"]h$]h&]uh1ja=hjlhMhjhhubj)}(hX**Parameters** ``dsi`` DSI peripheral device ``cmd`` Command ``seq...`` buffer containing data to be transmitted **Description** This macro will print errors for you and will RETURN FROM THE CALLING FUNCTION (yes this is non-intuitive) upon error. Because of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. Please replace calls of it with mipi_dsi_dcs_write_seq_multi().h](h)}(h**Parameters**h]j%)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubji)}(hhh](jn)}(h``dsi`` DSI peripheral device h](jt)}(h``dsi``h]jz)}(hjh]hdsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``cmd`` Command h](jt)}(h``cmd``h]jz)}(hjh]hcmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(hCommandh]hCommand}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h4``seq...`` buffer containing data to be transmitted h](jt)}(h ``seq...``h]jz)}(hj h]hseq...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjsubh)}(h**Description**h]j%)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubh)}(hvThis macro will print errors for you and will RETURN FROM THE CALLING FUNCTION (yes this is non-intuitive) upon error.h]hvThis macro will print errors for you and will RETURN FROM THE CALLING FUNCTION (yes this is non-intuitive) upon error.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubh)}(hBecause of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. Please replace calls of it with mipi_dsi_dcs_write_seq_multi().h]hBecause of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. Please replace calls of it with mipi_dsi_dcs_write_seq_multi().}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&mipi_dsi_dcs_write_seq_multi (C macro)c.mipi_dsi_dcs_write_seq_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_dcs_write_seq_multih]j)}(hmipi_dsi_dcs_write_seq_multih]j)}(hmipi_dsi_dcs_write_seq_multih]j)}(hjh]hmipi_dsi_dcs_write_seq_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h3``mipi_dsi_dcs_write_seq_multi (ctx, cmd, seq...)``h]jz)}(hjh]h/mipi_dsi_dcs_write_seq_multi (ctx, cmd, seq...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjhhubjb=)}(h$transmit a DCS command with payload h]h)}(h#transmit a DCS command with payloadh]h#transmit a DCS command with payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubah}(h]h ]h"]h$]h&]uh1ja=hjhMhjhhubj)}(hX**Parameters** ``ctx`` Context for multiple DSI transactions ``cmd`` Command ``seq...`` buffer containing data to be transmitted **Description** This macro will print errors for you and error handling is optimized for callers that call this multiple times in a row.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubji)}(hhh](jn)}(h.``ctx`` Context for multiple DSI transactions h](jt)}(h``ctx``h]jz)}(hj#h]hctx}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hMhjubjn)}(h``cmd`` Command h](jt)}(h``cmd``h]jz)}(hj\h]hcmd}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjVubj)}(hhh]h)}(hCommandh]hCommand}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhMhjubjn)}(h4``seq...`` buffer containing data to be transmitted h](jt)}(h ``seq...``h]jz)}(hjh]hseq...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubh)}(hxThis macro will print errors for you and error handling is optimized for callers that call this multiple times in a row.h]hxThis macro will print errors for you and error handling is optimized for callers that call this multiple times in a row.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_driver (C struct)c.mipi_dsi_driverhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hmipi_dsi_driverh]j)}(hstruct mipi_dsi_driverh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMubj)}(hmipi_dsi_driverh]j)}(hjh]hmipi_dsi_driver}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj"hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj"hMhj hhubj)}(hhh]h)}(h DSI driverh]h DSI driver}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjThhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMubeh}(h]h ](jstructeh"]h$]h&]jjjjojjojjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct mipi_dsi_driver { struct device_driver driver; int(*probe)(struct mipi_dsi_device *dsi); void (*remove)(struct mipi_dsi_device *dsi); void (*shutdown)(struct mipi_dsi_device *dsi); }; **Members** ``driver`` device driver model driver ``probe`` callback for device binding ``remove`` callback for device unbinding ``shutdown`` called at shutdown time to quiesce the deviceh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh:}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubj@)}(hstruct mipi_dsi_driver { struct device_driver driver; int(*probe)(struct mipi_dsi_device *dsi); void (*remove)(struct mipi_dsi_device *dsi); void (*shutdown)(struct mipi_dsi_device *dsi); };h]hstruct mipi_dsi_driver { struct device_driver driver; int(*probe)(struct mipi_dsi_device *dsi); void (*remove)(struct mipi_dsi_device *dsi); void (*shutdown)(struct mipi_dsi_device *dsi); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjsubji)}(hhh](jn)}(h&``driver`` device driver model driver h](jt)}(h ``driver``h]jz)}(hjh]hdriver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(hdevice driver model driverh]hdevice driver model driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h&``probe`` callback for device binding h](jt)}(h ``probe``h]jz)}(hjh]hprobe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubj)}(hhh]h)}(hcallback for device bindingh]hcallback for device binding}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h)``remove`` callback for device unbinding h](jt)}(h ``remove``h]jz)}(hj6h]hremove}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhj0ubj)}(hhh]h)}(hcallback for device unbindingh]hcallback for device unbinding}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhMhjubjn)}(h:``shutdown`` called at shutdown time to quiesce the deviceh](jt)}(h ``shutdown``h]jz)}(hjoh]hshutdown}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjiubj)}(hhh]h)}(h-called at shutdown time to quiesce the deviceh]h-called at shutdown time to quiesce the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./include/drm/drm_mipi_dsi.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,of_find_mipi_dsi_device_by_node (C function)!c.of_find_mipi_dsi_device_by_nodehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hQstruct mipi_dsi_device * of_find_mipi_dsi_device_by_node (struct device_node *np)h]j)}(hOstruct mipi_dsi_device *of_find_mipi_dsi_device_by_node(struct device_node *np)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKkubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jof_find_mipi_dsi_device_by_nodesb!c.of_find_mipi_dsi_device_by_nodeasbuh1hhjhhhjhKkubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKkubj)}(hof_find_mipi_dsi_device_by_nodeh]j)}(hjh]hof_find_mipi_dsi_device_by_node}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKkubj)}(h(struct device_node *np)h]j)}(hstruct device_node *nph](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(h device_nodeh]h device_node}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j!c.of_find_mipi_dsi_device_by_nodeasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKkubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKkubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKkhjhhubj)}(hhh]h)}(h4find the MIPI DSI device matching a device tree nodeh]h4find the MIPI DSI device matching a device tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKkubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct device_node *np`` device tree node **Return** A pointer to the MIPI DSI device corresponding to **np** or NULL if no such device exists (or has not been registered yet).h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhhjubji)}(hhh]jn)}(h,``struct device_node *np`` device tree node h](jt)}(h``struct device_node *np``h]jz)}(hjh]hstruct device_node *np}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKfhjubj)}(hhh]h)}(hdevice tree nodeh]hdevice tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhhjubji)}(hhh]jn)}(h{A pointer to the MIPI DSI device corresponding to **np** or NULL if no such device exists (or has not been registered yet).h](jt)}(hFA pointer to the MIPI DSI device corresponding to **np** or NULL if noh](h2A pointer to the MIPI DSI device corresponding to }(hj]hhhNhNubj%)}(h**np**h]hnp}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubh or NULL if no}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhhjYubj)}(hhh]h)}(h4such device exists (or has not been registered yet).h]h4such device exists (or has not been registered yet).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKihj~ubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhj}hKhhjVubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_device_register_full (C function)c.mipi_dsi_device_register_fullhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h|struct mipi_dsi_device * mipi_dsi_device_register_full (struct mipi_dsi_host *host, const struct mipi_dsi_device_info *info)h]j)}(hzstruct mipi_dsi_device *mipi_dsi_device_register_full(struct mipi_dsi_host *host, const struct mipi_dsi_device_info *info)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jmipi_dsi_device_register_fullsbc.mipi_dsi_device_register_fullasbuh1hhjhhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKubj)}(hmipi_dsi_device_register_fullh]j)}(hjh]hmipi_dsi_device_register_full}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hE(struct mipi_dsi_host *host, const struct mipi_dsi_device_info *info)h](j)}(hstruct mipi_dsi_host *hosth](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h mipi_dsi_hosth]h mipi_dsi_host}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]jc.mipi_dsi_device_register_fullasbuh1hhj8ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hhosth]hhost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubj)}(h'const struct mipi_dsi_device_info *infoh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_device_infoh]hmipi_dsi_device_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dsi_device_register_fullasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hcreate a MIPI DSI deviceh]hcreate a MIPI DSI device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_host *host`` DSI host to which this device is connected ``const struct mipi_dsi_device_info *info`` pointer to template containing DSI device information **Description** Create a MIPI DSI device by using the device information provided by mipi_dsi_device_info template **Return** A pointer to the newly created MIPI DSI device, or, a pointer encoded with an errorh](h)}(h**Parameters**h]j%)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjdubji)}(hhh](jn)}(hJ``struct mipi_dsi_host *host`` DSI host to which this device is connected h](jt)}(h``struct mipi_dsi_host *host``h]jz)}(hjh]hstruct mipi_dsi_host *host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjubj)}(hhh]h)}(h*DSI host to which this device is connectedh]h*DSI host to which this device is connected}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hb``const struct mipi_dsi_device_info *info`` pointer to template containing DSI device information h](jt)}(h+``const struct mipi_dsi_device_info *info``h]jz)}(hjh]h'const struct mipi_dsi_device_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjubj)}(hhh]h)}(h5pointer to template containing DSI device informationh]h5pointer to template containing DSI device information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjdubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjdubh)}(hbCreate a MIPI DSI device by using the device information provided by mipi_dsi_device_info templateh]hbCreate a MIPI DSI device by using the device information provided by mipi_dsi_device_info template}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjdubh)}(h **Return**h]j%)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjdubh)}(hSA pointer to the newly created MIPI DSI device, or, a pointer encoded with an errorh]hSA pointer to the newly created MIPI DSI device, or, a pointer encoded with an error}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chKhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'mipi_dsi_device_unregister (C function)c.mipi_dsi_device_unregisterhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=void mipi_dsi_device_unregister (struct mipi_dsi_device *dsi)h]j)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hdeviceh]hdevice}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j$c.devm_mipi_dsi_device_register_fullasbuh1hhj:ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(hstruct mipi_dsi_host *hosth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h mipi_dsi_hosth]h mipi_dsi_host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j$c.devm_mipi_dsi_device_register_fullasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hhosth]hhost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(h'const struct mipi_dsi_device_info *infoh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_device_infoh]hmipi_dsi_device_info}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j$c.devm_mipi_dsi_device_register_fullasbuh1hhjubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h create a managed MIPI DSI deviceh]h create a managed MIPI DSI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXn**Parameters** ``struct device *dev`` device to tie the MIPI-DSI device lifetime to ``struct mipi_dsi_host *host`` DSI host to which this device is connected ``const struct mipi_dsi_device_info *info`` pointer to template containing DSI device information **Description** Create a MIPI DSI device by using the device information provided by mipi_dsi_device_info template This is the managed version of mipi_dsi_device_register_full() which automatically calls mipi_dsi_device_unregister() when **dev** is unbound. **Return** A pointer to the newly created MIPI DSI device, or, a pointer encoded with an errorh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh](jn)}(hE``struct device *dev`` device to tie the MIPI-DSI device lifetime to h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h-device to tie the MIPI-DSI device lifetime toh]h-device to tie the MIPI-DSI device lifetime to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hJ``struct mipi_dsi_host *host`` DSI host to which this device is connected h](jt)}(h``struct mipi_dsi_host *host``h]jz)}(hj4h]hstruct mipi_dsi_host *host}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj.ubj)}(hhh]h)}(h*DSI host to which this device is connectedh]h*DSI host to which this device is connected}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhjIhMhjubjn)}(hb``const struct mipi_dsi_device_info *info`` pointer to template containing DSI device information h](jt)}(h+``const struct mipi_dsi_device_info *info``h]jz)}(hjmh]h'const struct mipi_dsi_device_info *info}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjgubj)}(hhh]h)}(h5pointer to template containing DSI device informationh]h5pointer to template containing DSI device information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hbCreate a MIPI DSI device by using the device information provided by mipi_dsi_device_info templateh]hbCreate a MIPI DSI device by using the device information provided by mipi_dsi_device_info template}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hThis is the managed version of mipi_dsi_device_register_full() which automatically calls mipi_dsi_device_unregister() when **dev** is unbound.h](h{This is the managed version of mipi_dsi_device_register_full() which automatically calls mipi_dsi_device_unregister() when }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is unbound.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hSA pointer to the newly created MIPI DSI device, or, a pointer encoded with an errorh]hSA pointer to the newly created MIPI DSI device, or, a pointer encoded with an error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*of_find_mipi_dsi_host_by_node (C function)c.of_find_mipi_dsi_host_by_nodehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hOstruct mipi_dsi_host * of_find_mipi_dsi_host_by_node (struct device_node *node)h]j)}(hMstruct mipi_dsi_host *of_find_mipi_dsi_host_by_node(struct device_node *node)h](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM4ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhM4ubh)}(hhh]j)}(h mipi_dsi_hosth]h mipi_dsi_host}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j%)}jof_find_mipi_dsi_host_by_nodesbc.of_find_mipi_dsi_host_by_nodeasbuh1hhj1hhhjBhM4ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhM4ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1hhhjBhM4ubj)}(hof_find_mipi_dsi_host_by_nodeh]j)}(hjrh]hof_find_mipi_dsi_host_by_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhjBhM4ubj)}(h(struct device_node *node)h]j)}(hstruct device_node *nodeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jpc.of_find_mipi_dsi_host_by_nodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj1hhhjBhM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhjBhM4ubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jhjBhM4hj*hhubj)}(hhh]h)}(h2find the MIPI DSI host matching a device tree nodeh]h2find the MIPI DSI host matching a device tree node}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM,hj-hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjBhM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct device_node *node`` device tree node **Return** A pointer to the MIPI DSI host corresponding to **node** or NULL if no such device exists (or has not been registered yet).h](h)}(h**Parameters**h]j%)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM0hjLubji)}(hhh]jn)}(h.``struct device_node *node`` device tree node h](jt)}(h``struct device_node *node``h]jz)}(hjqh]hstruct device_node *node}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM.hjkubj)}(hhh]h)}(hdevice tree nodeh]hdevice tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhM.hjhubah}(h]h ]h"]h$]h&]uh1jhhjLubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM0hjLubh)}(h{A pointer to the MIPI DSI host corresponding to **node** or NULL if no such device exists (or has not been registered yet).h](h0A pointer to the MIPI DSI host corresponding to }(hjhhhNhNubj%)}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhC or NULL if no such device exists (or has not been registered yet).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM0hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_attach (C function)c.mipi_dsi_attachhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h1int mipi_dsi_attach (struct mipi_dsi_device *dsi)h]j)}(h0int mipi_dsi_attach(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMsubj)}(hmipi_dsi_attachh]j)}(hmipi_dsi_attachh]hmipi_dsi_attach}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMsubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j%)}jj&sbc.mipi_dsi_attachasbuh1hhj<ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMshjhhubj)}(hhh]h)}(h#attach a DSI device to its DSI hosth]h#attach a DSI device to its DSI host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMphjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h@**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheralh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMthjubji)}(hhh]jn)}(h.``struct mipi_dsi_device *dsi`` DSI peripheralh](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjh]hstruct mipi_dsi_device *dsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMvhjubj)}(hhh]h)}(hDSI peripheralh]hDSI peripheral}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_detach (C function)c.mipi_dsi_detachhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h1int mipi_dsi_detach (struct mipi_dsi_device *dsi)h]j)}(h0int mipi_dsi_detach(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubj)}(hmipi_dsi_detachh]j)}(hmipi_dsi_detachh]hmipi_dsi_detach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_detachasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjlhMhjShhubj)}(hhh]h)}(h%detach a DSI device from its DSI hosth]h%detach a DSI device from its DSI host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhjhNhNubj)}(h@**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheralh](h)}(h**Parameters**h]j%)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj:ubji)}(hhh]jn)}(h.``struct mipi_dsi_device *dsi`` DSI peripheralh](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj_h]hstruct mipi_dsi_device *dsi}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjYubj)}(hhh]h)}(hDSI peripheralh]hDSI peripheral}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthMhjVubah}(h]h ]h"]h$]h&]uh1jhhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!devm_mipi_dsi_attach (C function)c.devm_mipi_dsi_attachhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJint devm_mipi_dsi_attach (struct device *dev, struct mipi_dsi_device *dsi)h]j)}(hIint devm_mipi_dsi_attach(struct device *dev, struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdevm_mipi_dsi_attachh]j)}(hdevm_mipi_dsi_attachh]hdevm_mipi_dsi_attach}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h1(struct device *dev, struct mipi_dsi_device *dsi)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.devm_mipi_dsi_attachasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0c.devm_mipi_dsi_attachasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h(Attach a MIPI-DSI device to its DSI Hosth]h(Attach a MIPI-DSI device to its DSI Host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXX**Parameters** ``struct device *dev`` device to tie the MIPI-DSI device attachment lifetime to ``struct mipi_dsi_device *dsi`` DSI peripheral **Description** This is the managed version of mipi_dsi_attach() which automatically calls mipi_dsi_detach() when **dev** is unbound. **Return** 0 on success, a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh](jn)}(hP``struct device *dev`` device to tie the MIPI-DSI device attachment lifetime to h](jt)}(h``struct device *dev``h]jz)}(hj*h]hstruct device *dev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj$ubj)}(hhh]h)}(h8device to tie the MIPI-DSI device attachment lifetime toh]h8device to tie the MIPI-DSI device attachment lifetime to}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhj!ubjn)}(h/``struct mipi_dsi_device *dsi`` DSI peripheral h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjch]hstruct mipi_dsi_device *dsi}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj]ubj)}(hhh]h)}(hDSI peripheralh]hDSI peripheral}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhjxhMhj!ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(huThis is the managed version of mipi_dsi_attach() which automatically calls mipi_dsi_detach() when **dev** is unbound.h](hbThis is the managed version of mipi_dsi_attach() which automatically calls mipi_dsi_detach() when }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is unbound.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h/0 on success, a negative error code on failure.h]h/0 on success, a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,mipi_dsi_packet_format_is_short (C function)!c.mipi_dsi_packet_format_is_shorthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h.bool mipi_dsi_packet_format_is_short (u8 type)h]j)}(h-bool mipi_dsi_packet_format_is_short(u8 type)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hMubj)}(hmipi_dsi_packet_format_is_shorth]j)}(hmipi_dsi_packet_format_is_shorth]hmipi_dsi_packet_format_is_short}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj)hMubj)}(h (u8 type)h]j)}(hu8 typeh](h)}(hhh]j)}(hu8h]hu8}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j%)}jj>sb!c.mipi_dsi_packet_format_is_shortasbuh1hhjTubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj)hMhjhhubj)}(hhh]h)}(h(check if a packet is of the short formath]h(check if a packet is of the short format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``u8 type`` MIPI DSI data type of the packet **Return** true if the packet for the given data type is a short packet, false otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh]jn)}(h-``u8 type`` MIPI DSI data type of the packet h](jt)}(h ``u8 type``h]jz)}(hjh]hu8 type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h MIPI DSI data type of the packeth]h MIPI DSI data type of the packet}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj/h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hNtrue if the packet for the given data type is a short packet, false otherwise.h]hNtrue if the packet for the given data type is a short packet, false otherwise.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+mipi_dsi_packet_format_is_long (C function) c.mipi_dsi_packet_format_is_longhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h-bool mipi_dsi_packet_format_is_long (u8 type)h]j)}(h,bool mipi_dsi_packet_format_is_long(u8 type)h](j)}(hjAh]hbool}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMubj)}(hmipi_dsi_packet_format_is_longh]j)}(hmipi_dsi_packet_format_is_longh]hmipi_dsi_packet_format_is_long}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjhMubj)}(h (u8 type)h]j)}(hu8 typeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb c.mipi_dsi_packet_format_is_longasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjphhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjlhhhjhMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjihhubj)}(hhh]h)}(h'check if a packet is of the long formath]h'check if a packet is of the long format}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjhNhNubj)}(h**Parameters** ``u8 type`` MIPI DSI data type of the packet **Return** true if the packet for the given data type is a long packet, false otherwise.h](h)}(h**Parameters**h]j%)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj'ubji)}(hhh]jn)}(h-``u8 type`` MIPI DSI data type of the packet h](jt)}(h ``u8 type``h]jz)}(hjLh]hu8 type}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjFubj)}(hhh]h)}(h MIPI DSI data type of the packeth]h MIPI DSI data type of the packet}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjCubah}(h]h ]h"]h$]h&]uh1jhhj'ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj'ubh)}(hMtrue if the packet for the given data type is a long packet, false otherwise.h]hMtrue if the packet for the given data type is a long packet, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mipi_dsi_create_packet (C function)c.mipi_dsi_create_packethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h[int mipi_dsi_create_packet (struct mipi_dsi_packet *packet, const struct mipi_dsi_msg *msg)h]j)}(hZint mipi_dsi_create_packet(struct mipi_dsi_packet *packet, const struct mipi_dsi_msg *msg)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dsi_create_packeth]j)}(hmipi_dsi_create_packeth]hmipi_dsi_create_packet}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h@(struct mipi_dsi_packet *packet, const struct mipi_dsi_msg *msg)h](j)}(hstruct mipi_dsi_packet *packeth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_packeth]hmipi_dsi_packet}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_create_packetasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpacketh]hpacket}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct mipi_dsi_msg *msgh](j)}(hjch]hconst}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(h mipi_dsi_msgh]h mipi_dsi_msg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jCc.mipi_dsi_create_packetasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubj)}(hmsgh]hmsg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hint mipi_dsi_shutdown_peripheral (struct mipi_dsi_device *dsi)h]j)}(h=int mipi_dsi_shutdown_peripheral(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMLubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMLubj)}(hmipi_dsi_shutdown_peripheralh]j)}(hmipi_dsi_shutdown_peripheralh]hmipi_dsi_shutdown_peripheral}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMLubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j%)}jj4sbc.mipi_dsi_shutdown_peripheralasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubah}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMLubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhjhMLubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMLhjhhubj)}(hhh]h)}(h#sends a Shutdown Peripheral commandh]h#sends a Shutdown Peripheral command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMGhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMKhjubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjh]hstruct mipi_dsi_device *dsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMHhj ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMHhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMHhj ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjMh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMJhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dsi_turn_on_peripheral (C function)c.mipi_dsi_turn_on_peripheralhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=int mipi_dsi_turn_on_peripheral (struct mipi_dsi_device *dsi)h]j)}(hc.mipi_dsi_generic_readasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hconst void *paramsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hparamsh]hparams}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hsize_t num_paramsh](h)}(hhh]j)}(hsize_th]hsize_t}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j>c.mipi_dsi_generic_readasbuh1hhj:ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h num_paramsh]h num_params}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>c.mipi_dsi_generic_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjChMIubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjChMIubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjChMIhjhhubj)}(hhh]h)}(h(receive data using a generic read packeth]h(receive data using a generic read packet}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM<hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjChMIubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``const void *params`` buffer containing the request parameters ``size_t num_params`` number of request parameters ``void *data`` buffer in which to return the received data ``size_t size`` size of receive buffer **Description** This function will automatically choose the right data type depending on the number of parameters passed in. **Return** The number of bytes successfully read or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM@hj=ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjbh]hstruct mipi_dsi_device *dsi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM=hj\ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM=hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhM=hjYubjn)}(h@``const void *params`` buffer containing the request parameters h](jt)}(h``const void *params``h]jz)}(hjh]hconst void *params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM>hjubj)}(hhh]h)}(h(buffer containing the request parametersh]h(buffer containing the request parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM>hjYubjn)}(h3``size_t num_params`` number of request parameters h](jt)}(h``size_t num_params``h]jz)}(hjh]hsize_t num_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM?hjubj)}(hhh]h)}(hnumber of request parametersh]hnumber of request parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM?hjYubjn)}(h;``void *data`` buffer in which to return the received data h](jt)}(h``void *data``h]jz)}(hj h]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM@hjubj)}(hhh]h)}(h+buffer in which to return the received datah]h+buffer in which to return the received data}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM@hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hM@hjYubjn)}(h'``size_t size`` size of receive buffer h](jt)}(h``size_t size``h]jz)}(hjFh]h size_t size}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMAhj@ubj)}(hhh]h)}(hsize of receive bufferh]hsize of receive buffer}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMAhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMAhjYubeh}(h]h ]h"]h$]h&]uh1jhhj=ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMChj=ubh)}(hlThis function will automatically choose the right data type depending on the number of parameters passed in.h]hlThis function will automatically choose the right data type depending on the number of parameters passed in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMChj=ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMFhj=ubh)}(hJThe number of bytes successfully read or a negative error code on failure.h]hJThe number of bytes successfully read or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMFhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&mipi_dsi_dcs_write_buffer (C function)c.mipi_dsi_dcs_write_bufferhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h]ssize_t mipi_dsi_dcs_write_buffer (struct mipi_dsi_device *dsi, const void *data, size_t len)h]j)}(h\ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi, const void *data, size_t len)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jmipi_dsi_dcs_write_buffersbc.mipi_dsi_dcs_write_bufferasbuh1hhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMuubj)}(hmipi_dsi_dcs_write_bufferh]j)}(hjh]hmipi_dsi_dcs_write_buffer}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMuubj)}(h;(struct mipi_dsi_device *dsi, const void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j c.mipi_dsi_dcs_write_bufferasbuh1hhj;ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hconst void *datah](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.mipi_dsi_dcs_write_bufferasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMuubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMuhjhhubj)}(hhh]h)}(h#transmit a DCS command with payloadh]h#transmit a DCS command with payload}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMjhjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMuubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``const void *data`` buffer containing data to be transmitted ``size_t len`` size of transmission buffer **Description** This function will automatically choose the right data type depending on the command payload length. **Return** The number of bytes successfully transmitted or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMnhjubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjh]hstruct mipi_dsi_device *dsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMkhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMkhjubjn)}(h>``const void *data`` buffer containing data to be transmitted h](jt)}(h``const void *data``h]jz)}(hjh]hconst void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMlhjubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMlhjubjn)}(h+``size_t len`` size of transmission buffer h](jt)}(h``size_t len``h]jz)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMmhjubj)}(hhh]h)}(hsize of transmission bufferh]hsize of transmission buffer}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMmhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hMmhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMohjubh)}(hdThis function will automatically choose the right data type depending on the command payload length.h]hdThis function will automatically choose the right data type depending on the command payload length.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMohjubh)}(h **Return**h]j%)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMrhjubh)}(hQThe number of bytes successfully transmitted or a negative error code on failure.h]hQThe number of bytes successfully transmitted or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMrhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-mipi_dsi_dcs_write_buffer_chatty (C function)"c.mipi_dsi_dcs_write_buffer_chattyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h`int mipi_dsi_dcs_write_buffer_chatty (struct mipi_dsi_device *dsi, const void *data, size_t len)h]j)}(h_int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_device *dsi, const void *data, size_t len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h mipi_dsi_dcs_write_buffer_chattyh]j)}(h mipi_dsi_dcs_write_buffer_chattyh]h mipi_dsi_dcs_write_buffer_chatty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h;(struct mipi_dsi_device *dsi, const void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb"c.mipi_dsi_dcs_write_buffer_chattyasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst void *datah](j)}(hjch]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j6"c.mipi_dsi_dcs_write_buffer_chattyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h+mipi_dsi_dcs_write_buffer() w/ an error logh]h+mipi_dsi_dcs_write_buffer() w/ an error log}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``const void *data`` buffer containing data to be transmitted ``size_t len`` size of transmission buffer **Description** Like mipi_dsi_dcs_write_buffer() but includes a dev_err() call for you and returns 0 upon success, not the number of bytes sent. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj@ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjeh]hstruct mipi_dsi_device *dsi}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj_ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhj\ubjn)}(h>``const void *data`` buffer containing data to be transmitted h](jt)}(h``const void *data``h]jz)}(hjh]hconst void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj\ubjn)}(h+``size_t len`` size of transmission buffer h](jt)}(h``size_t len``h]jz)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hsize of transmission bufferh]hsize of transmission buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj\ubeh}(h]h ]h"]h$]h&]uh1jhhj@ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj@ubh)}(hLike mipi_dsi_dcs_write_buffer() but includes a dev_err() call for you and returns 0 upon success, not the number of bytes sent.h]hLike mipi_dsi_dcs_write_buffer() but includes a dev_err() call for you and returns 0 upon success, not the number of bytes sent.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj@ubh)}(h **Return**h]j%)}(hj9h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj@ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,mipi_dsi_dcs_write_buffer_multi (C function)!c.mipi_dsi_dcs_write_buffer_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hgvoid mipi_dsi_dcs_write_buffer_multi (struct mipi_dsi_multi_context *ctx, const void *data, size_t len)h]j)}(hfvoid mipi_dsi_dcs_write_buffer_multi(struct mipi_dsi_multi_context *ctx, const void *data, size_t len)h](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjhMubj)}(hmipi_dsi_dcs_write_buffer_multih]j)}(hmipi_dsi_dcs_write_buffer_multih]hmipi_dsi_dcs_write_buffer_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjhMubj)}(hB(struct mipi_dsi_multi_context *ctx, const void *data, size_t len)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb!c.mipi_dsi_dcs_write_buffer_multiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst void *datah](j)}(hjch]hconst}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj9)}(hj9h]h*}(hjdhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)ubj)}(hdatah]hdata}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.mipi_dsi_dcs_write_buffer_multiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjvhhhjhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjshhubj)}(hhh]h)}(h/mipi_dsi_dcs_write_buffer_chatty() w/ accum_errh]h/mipi_dsi_dcs_write_buffer_chatty() w/ accum_err}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX_**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``const void *data`` buffer containing data to be transmitted ``size_t len`` size of transmission buffer **Description** Like mipi_dsi_dcs_write_buffer_chatty() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hj$h]h"struct mipi_dsi_multi_context *ctx}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhjubjn)}(h>``const void *data`` buffer containing data to be transmitted h](jt)}(h``const void *data``h]jz)}(hj]h]hconst void *data}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjWubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjubjn)}(h+``size_t len`` size of transmission buffer h](jt)}(h``size_t len``h]jz)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hsize of transmission bufferh]hsize of transmission buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hLike mipi_dsi_dcs_write_buffer_chatty() but deals with errors in a way that makes it convenient to make several calls in a row.h]hLike mipi_dsi_dcs_write_buffer_chatty() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_write (C function)c.mipi_dsi_dcs_writehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h^ssize_t mipi_dsi_dcs_write (struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len)h]j)}(h]ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jmipi_dsi_dcs_writesbc.mipi_dsi_dcs_writeasbuh1hhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj:hMubj)}(hmipi_dsi_dcs_writeh]j)}(hj7h]hmipi_dsi_dcs_write}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj:hMubj)}(hC(struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.mipi_dsi_dcs_writeasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hu8 cmdh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.mipi_dsi_dcs_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hconst void *datah](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdatah]hdata}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.mipi_dsi_dcs_writeasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj:hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj:hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj:hMhj hhubj)}(hhh]h)}(hsend DCS write commandh]hsend DCS write command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u8 cmd`` DCS command ``const void *data`` buffer containing the command payload ``size_t len`` command payload length **Description** This function will automatically choose the right data type depending on the command payload length. **Return** The number of bytes successfully transmitted or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjh]hstruct mipi_dsi_device *dsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj,hMhjubjn)}(h``u8 cmd`` DCS command h](jt)}(h ``u8 cmd``h]jz)}(hjPh]hu8 cmd}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjJubj)}(hhh]h)}(h DCS commandh]h DCS command}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehMhjubjn)}(h;``const void *data`` buffer containing the command payload h](jt)}(h``const void *data``h]jz)}(hjh]hconst void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%buffer containing the command payloadh]h%buffer containing the command payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h&``size_t len`` command payload length h](jt)}(h``size_t len``h]jz)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hcommand payload lengthh]hcommand payload length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hdThis function will automatically choose the right data type depending on the command payload length.h]hdThis function will automatically choose the right data type depending on the command payload length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h **Return**h]j%)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hQThe number of bytes successfully transmitted or a negative error code on failure.h]hQThe number of bytes successfully transmitted or a negative error code on failure.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_read (C function)c.mipi_dsi_dcs_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWssize_t mipi_dsi_dcs_read (struct mipi_dsi_device *dsi, u8 cmd, void *data, size_t len)h]j)}(hVssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, size_t len)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j%)}jmipi_dsi_dcs_readsbc.mipi_dsi_dcs_readasbuh1hhjehhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjhMubj)}(hmipi_dsi_dcs_readh]j)}(hjh]hmipi_dsi_dcs_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjhMubj)}(h=(struct mipi_dsi_device *dsi, u8 cmd, void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mipi_dsi_dcs_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 cmdh](h)}(hhh]j)}(hu8h]hu8}(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0 modnameN classnameNjj)}j]jc.mipi_dsi_dcs_readasbuh1hhj' ubj)}(h h]h }(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubj)}(hcmdh]hcmd}(hjZ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjo ubj)}(hdatah]hdata}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.mipi_dsi_dcs_readasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlenh]hlen}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhj^hhubj)}(hhh]h)}(hsend DCS read request commandh]hsend DCS read request command}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj !hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&!jj&!jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u8 cmd`` DCS command ``void *data`` buffer in which to receive data ``size_t len`` size of receive buffer **Return** The number of bytes read or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj0!h]h Parameters}(hj2!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.!ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj*!ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjO!h]hstruct mipi_dsi_device *dsi}(hjQ!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjM!ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjI!ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjh!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd!hMhje!ubah}(h]h ]h"]h$]h&]uh1jhjI!ubeh}(h]h ]h"]h$]h&]uh1jmhjd!hMhjF!ubjn)}(h``u8 cmd`` DCS command h](jt)}(h ``u8 cmd``h]jz)}(hj!h]hu8 cmd}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj!ubj)}(hhh]h)}(h DCS commandh]h DCS command}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjF!ubjn)}(h/``void *data`` buffer in which to receive data h](jt)}(h``void *data``h]jz)}(hj!h]h void *data}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj!ubj)}(hhh]h)}(hbuffer in which to receive datah]hbuffer in which to receive data}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjF!ubjn)}(h&``size_t len`` size of receive buffer h](jt)}(h``size_t len``h]jz)}(hj!h]h size_t len}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj!ubj)}(hhh]h)}(hsize of receive bufferh]hsize of receive buffer}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjF!ubeh}(h]h ]h"]h$]h&]uh1jhhj*!ubh)}(h **Return**h]j%)}(hj5"h]hReturn}(hj7"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3"ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj*!ubh)}(h=The number of bytes read or a negative error code on failure.h]h=The number of bytes read or a negative error code on failure.}(hjK"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj*!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_nop (C function)c.mipi_dsi_dcs_nophNtauh1jxhjhhhNhNubj)}(hhh](j)}(h2int mipi_dsi_dcs_nop (struct mipi_dsi_device *dsi)h]j)}(h1int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hjz"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv"hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv"hhhj"hMubj)}(hmipi_dsi_dcs_noph]j)}(hmipi_dsi_dcs_noph]hmipi_dsi_dcs_nop}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjv"hhhj"hMubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j%)}jj"sbc.mipi_dsi_dcs_nopasbuh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hj9h]h*}(hj#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubj)}(hdsih]hdsi}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubah}(h]h ]h"]h$]h&]jjuh1jhjv"hhhj"hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjr"hhhj"hMubah}(h]jm"ah ](jjeh"]h$]h&]jj)jhuh1jhj"hMhjo"hhubj)}(hhh]h)}(hsend DCS nop packeth]hsend DCS nop packet}(hj:#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj7#hhubah}(h]h ]h"]h$]h&]uh1jhjo"hhhj"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjR#jjR#jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device **Description** This function is deprecated. Use mipi_dsi_dcs_nop_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj\#h]h Parameters}(hj^#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZ#ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjV#ubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj{#h]hstruct mipi_dsi_device *dsi}(hj}#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjy#ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhju#ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhju#ubeh}(h]h ]h"]h$]h&]uh1jmhj#hMhjr#ubah}(h]h ]h"]h$]h&]uh1jhhjV#ubh)}(h**Description**h]j%)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjV#ubh)}(hBThis function is deprecated. Use mipi_dsi_dcs_nop_multi() instead.h]hBThis function is deprecated. Use mipi_dsi_dcs_nop_multi() instead.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjV#ubh)}(h **Return**h]j%)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjV#ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjV#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$mipi_dsi_dcs_soft_reset (C function)c.mipi_dsi_dcs_soft_resethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h9int mipi_dsi_dcs_soft_reset (struct mipi_dsi_device *dsi)h]j)}(h8int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hj"$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM,ubj)}(h h]h }(hj1$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj0$hM,ubj)}(hmipi_dsi_dcs_soft_reseth]j)}(hmipi_dsi_dcs_soft_reseth]hmipi_dsi_dcs_soft_reset}(hjC$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj0$hM,ubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj_$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[$ubj)}(h h]h }(hjl$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[$ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj}$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j%)}jjE$sbc.mipi_dsi_dcs_soft_resetasbuh1hhj[$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[$ubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[$ubj)}(hdsih]hdsi}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW$ubah}(h]h ]h"]h$]h&]jjuh1jhj$hhhj0$hM,ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhj0$hM,ubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj0$hM,hj$hhubj)}(hhh]h)}(h.perform a software reset of the display moduleh]h.perform a software reset of the display module}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM%hj$hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj0$hM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device **Description** This function is deprecated. Use mipi_dsi_dcs_soft_reset_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM)hj$ubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj#%h]hstruct mipi_dsi_device *dsi}(hj%%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!%ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM&hj%ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj<%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8%hM&hj9%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj8%hM&hj%ubah}(h]h ]h"]h$]h&]uh1jhhj$ubh)}(h**Description**h]j%)}(hj^%h]h Description}(hj`%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\%ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM(hj$ubh)}(hIThis function is deprecated. Use mipi_dsi_dcs_soft_reset_multi() instead.h]hIThis function is deprecated. Use mipi_dsi_dcs_soft_reset_multi() instead.}(hjt%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM(hj$ubh)}(h **Return**h]j%)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM*hj$ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM*hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dsi_dcs_get_power_mode (C function)c.mipi_dsi_dcs_get_power_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hGint mipi_dsi_dcs_get_power_mode (struct mipi_dsi_device *dsi, u8 *mode)h]j)}(hFint mipi_dsi_dcs_get_power_mode(struct mipi_dsi_device *dsi, u8 *mode)h](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM@ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hM@ubj)}(hmipi_dsi_dcs_get_power_modeh]j)}(hmipi_dsi_dcs_get_power_modeh]hmipi_dsi_dcs_get_power_mode}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj%hM@ubj)}(h'(struct mipi_dsi_device *dsi, u8 *mode)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj%&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'&modnameN classnameNjj)}j]j%)}jj%sbc.mipi_dsi_dcs_get_power_modeasbuh1hhj&ubj)}(h h]h }(hjE&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjS&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(hdsih]hdsi}(hj`&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hu8 *modeh](h)}(hhh]j)}(hu8h]hu8}(hj|&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~&modnameN classnameNjj)}j]jA&c.mipi_dsi_dcs_get_power_modeasbuh1hhju&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju&ubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hju&ubj)}(hmodeh]hmode}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubeh}(h]h ]h"]h$]h&]jjuh1jhj%hhhj%hM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj%hhhj%hM@ubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhj%hM@hj%hhubj)}(hhh]h)}(h-query the display module's current power modeh]h/query the display module’s current power mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM9hj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u8 *mode`` return location for the current power mode **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM=hj&ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj 'h]hstruct mipi_dsi_device *dsi}(hj"'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM;hj'ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj9'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5'hM;hj6'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj5'hM;hj'ubjn)}(h8``u8 *mode`` return location for the current power mode h](jt)}(h ``u8 *mode``h]jz)}(hjY'h]hu8 *mode}(hj['hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW'ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM<hjS'ubj)}(hhh]h)}(h*return location for the current power modeh]h*return location for the current power mode}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn'hM<hjo'ubah}(h]h ]h"]h$]h&]uh1jhjS'ubeh}(h]h ]h"]h$]h&]uh1jmhjn'hM<hj'ubeh}(h]h ]h"]h$]h&]uh1jhhj&ubh)}(h **Return**h]j%)}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM>hj&ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM>hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_get_pixel_format (C function)c.mipi_dsi_dcs_get_pixel_formathNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint mipi_dsi_dcs_get_pixel_format (struct mipi_dsi_device *dsi, u8 *format)h]j)}(hJint mipi_dsi_dcs_get_pixel_format(struct mipi_dsi_device *dsi, u8 *format)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMYubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hMYubj)}(hmipi_dsi_dcs_get_pixel_formath]j)}(hmipi_dsi_dcs_get_pixel_formath]hmipi_dsi_dcs_get_pixel_format}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj'hMYubj)}(h)(struct mipi_dsi_device *dsi, u8 *format)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj#(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj4(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6(modnameN classnameNjj)}j]j%)}jj'sbc.mipi_dsi_dcs_get_pixel_formatasbuh1hhj(ubj)}(h h]h }(hjT(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hjb(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(hdsih]hdsi}(hjo(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h u8 *formath](h)}(hhh]j)}(hu8h]hu8}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]jP(c.mipi_dsi_dcs_get_pixel_formatasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(hformath]hformat}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhj'hhhj'hMYubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'hhhj'hMYubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMYhj'hhubj)}(hhh]h)}(hBgets the pixel format for the RGB image data used by the interfaceh]hBgets the pixel format for the RGB image data used by the interface}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMRhj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hMYubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u8 *format`` return location for the pixel format **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMVhj )ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj/)h]hstruct mipi_dsi_device *dsi}(hj1)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-)ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMThj))ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjH)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD)hMThjE)ubah}(h]h ]h"]h$]h&]uh1jhj))ubeh}(h]h ]h"]h$]h&]uh1jmhjD)hMThj&)ubjn)}(h4``u8 *format`` return location for the pixel format h](jt)}(h``u8 *format``h]jz)}(hjh)h]h u8 *format}(hjj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjf)ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMUhjb)ubj)}(hhh]h)}(h$return location for the pixel formath]h$return location for the pixel format}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj})hMUhj~)ubah}(h]h ]h"]h$]h&]uh1jhjb)ubeh}(h]h ]h"]h$]h&]uh1jmhj})hMUhj&)ubeh}(h]h ]h"]h$]h&]uh1jhhj )ubh)}(h **Return**h]j%)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMWhj )ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMWhj )ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_enter_sleep_mode (C function)c.mipi_dsi_dcs_enter_sleep_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h?int mipi_dsi_dcs_enter_sleep_mode (struct mipi_dsi_device *dsi)h]j)}(h>int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMsubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hMsubj)}(hmipi_dsi_dcs_enter_sleep_modeh]j)}(hmipi_dsi_dcs_enter_sleep_modeh]hmipi_dsi_dcs_enter_sleep_mode}(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj)hMsubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj%*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!*ubj)}(h h]h }(hj2*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!*ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjC*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE*modnameN classnameNjj)}j]j%)}jj *sbc.mipi_dsi_dcs_enter_sleep_modeasbuh1hhj!*ubj)}(h h]h }(hjc*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!*ubj9)}(hj9h]h*}(hjq*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!*ubj)}(hdsih]hdsi}(hj~*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubah}(h]h ]h"]h$]h&]jjuh1jhj)hhhj)hMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj)hMsubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jhj)hMshj)hhubj)}(hhh]h)}(hWdisable all unnecessary blocks inside the display module except interface communicationh]hWdisable all unnecessary blocks inside the display module except interface communication}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMkhj*hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device **Description** This function is deprecated. Use mipi_dsi_dcs_enter_sleep_mode_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMohj*ubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj*h]hstruct mipi_dsi_device *dsi}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMmhj*ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMmhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhj*hMmhj*ubah}(h]h ]h"]h$]h&]uh1jhhj*ubh)}(h**Description**h]j%)}(hj$+h]h Description}(hj&+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"+ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMohj*ubh)}(hOThis function is deprecated. Use mipi_dsi_dcs_enter_sleep_mode_multi() instead.h]hOThis function is deprecated. Use mipi_dsi_dcs_enter_sleep_mode_multi() instead.}(hj:+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMohj*ubh)}(h **Return**h]j%)}(hjK+h]hReturn}(hjM+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjI+ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMqhj*ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hja+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMqhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_dcs_exit_sleep_mode (C function)c.mipi_dsi_dcs_exit_sleep_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h>int mipi_dsi_dcs_exit_sleep_mode (struct mipi_dsi_device *dsi)h]j)}(h=int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hMubj)}(hmipi_dsi_dcs_exit_sleep_modeh]j)}(hmipi_dsi_dcs_exit_sleep_modeh]hmipi_dsi_dcs_exit_sleep_mode}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hMubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j%)}jj+sbc.mipi_dsi_dcs_exit_sleep_modeasbuh1hhj+ubj)}(h h]h }(hj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hdsih]hdsi}(hj&,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+ubah}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhj+hMhj+hhubj)}(hhh]h)}(h+enable all blocks inside the display moduleh]h+enable all blocks inside the display module}(hjP,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjM,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjh,jjh,jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device **Description** This function is deprecated. Use mipi_dsi_dcs_exit_sleep_mode_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjr,h]h Parameters}(hjt,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjp,ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjl,ubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj,h]hstruct mipi_dsi_device *dsi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj,ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhhjl,ubh)}(h**Description**h]j%)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjl,ubh)}(hNThis function is deprecated. Use mipi_dsi_dcs_exit_sleep_mode_multi() instead.h]hNThis function is deprecated. Use mipi_dsi_dcs_exit_sleep_mode_multi() instead.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjl,ubh)}(h **Return**h]j%)}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjl,ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjl,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_dcs_set_display_off (C function)c.mipi_dsi_dcs_set_display_offhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h>int mipi_dsi_dcs_set_display_off (struct mipi_dsi_device *dsi)h]j)}(h=int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi)h](j)}(hinth]hint}(hj8-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjG-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4-hhhjF-hMubj)}(hmipi_dsi_dcs_set_display_offh]j)}(hmipi_dsi_dcs_set_display_offh]hmipi_dsi_dcs_set_display_off}(hjY-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4-hhhjF-hMubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hju-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq-ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j%)}jj[-sbc.mipi_dsi_dcs_set_display_offasbuh1hhjq-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq-ubj9)}(hj9h]h*}(hj-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjq-ubj)}(hdsih]hdsi}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjm-ubah}(h]h ]h"]h$]h&]jjuh1jhj4-hhhjF-hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0-hhhjF-hMubah}(h]j+-ah ](jjeh"]h$]h&]jj)jhuh1jhjF-hMhj--hhubj)}(hhh]h)}(h4stop displaying the image data on the display deviceh]h4stop displaying the image data on the display device}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhj--hhhjF-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device **Description** This function is deprecated. Use mipi_dsi_dcs_set_display_off_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj.ubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj9.h]hstruct mipi_dsi_device *dsi}(hj;.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7.ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj3.ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjR.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN.hMhjO.ubah}(h]h ]h"]h$]h&]uh1jhj3.ubeh}(h]h ]h"]h$]h&]uh1jmhjN.hMhj0.ubah}(h]h ]h"]h$]h&]uh1jhhj.ubh)}(h**Description**h]j%)}(hjt.h]h Description}(hjv.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr.ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj.ubh)}(hNThis function is deprecated. Use mipi_dsi_dcs_set_display_off_multi() instead.h]hNThis function is deprecated. Use mipi_dsi_dcs_set_display_off_multi() instead.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj.ubh)}(h **Return**h]j%)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj.ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dsi_dcs_set_display_on (C function)c.mipi_dsi_dcs_set_display_onhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=int mipi_dsi_dcs_set_display_on (struct mipi_dsi_device *dsi)h]j)}(h7ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj:7ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjY7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU7hMhjV7ubah}(h]h ]h"]h$]h&]uh1jhj:7ubeh}(h]h ]h"]h$]h&]uh1jmhjU7hMhj77ubjn)}(hI``enum mipi_dsi_dcs_tear_mode mode`` the Tearing Effect Output Line mode h](jt)}(h$``enum mipi_dsi_dcs_tear_mode mode``h]jz)}(hjy7h]h enum mipi_dsi_dcs_tear_mode mode}(hj{7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjw7ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjs7ubj)}(hhh]h)}(h#the Tearing Effect Output Line modeh]h#the Tearing Effect Output Line mode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjs7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhj77ubeh}(h]h ]h"]h$]h&]uh1jhhj7ubh)}(h**Description**h]j%)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj7ubh)}(hJThis function is deprecated. Use mipi_dsi_dcs_set_tear_on_multi() instead.h]hJThis function is deprecated. Use mipi_dsi_dcs_set_tear_on_multi() instead.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj7ubh)}(h **Return**h]j%)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj7ubh)}(h00 on success or a negative error code on failureh]h00 on success or a negative error code on failure}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_set_pixel_format (C function)c.mipi_dsi_dcs_set_pixel_formathNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJint mipi_dsi_dcs_set_pixel_format (struct mipi_dsi_device *dsi, u8 format)h]j)}(hIint mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format)h](j)}(hinth]hint}(hj 8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj/8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj.8hMubj)}(hmipi_dsi_dcs_set_pixel_formath]j)}(hmipi_dsi_dcs_set_pixel_formath]hmipi_dsi_dcs_set_pixel_format}(hjA8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj.8hMubj)}(h((struct mipi_dsi_device *dsi, u8 format)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj]8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY8ubj)}(h h]h }(hjj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY8ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj{8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}8modnameN classnameNjj)}j]j%)}jjC8sbc.mipi_dsi_dcs_set_pixel_formatasbuh1hhjY8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY8ubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjY8ubj)}(hdsih]hdsi}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU8ubj)}(h u8 formath](h)}(hhh]j)}(hu8h]hu8}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j8c.mipi_dsi_dcs_set_pixel_formatasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hformath]hformat}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU8ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj.8hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj.8hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj.8hMhj8hhubj)}(hhh]h)}(hBsets the pixel format for the RGB image data used by the interfaceh]hBsets the pixel format for the RGB image data used by the interface}(hj(9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj%9hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj.8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@9jj@9jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u8 format`` pixel format **Description** This function is deprecated. Use mipi_dsi_dcs_set_pixel_format_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjJ9h]h Parameters}(hjL9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjH9ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjD9ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hji9h]hstruct mipi_dsi_device *dsi}(hjk9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg9ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjc9ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjc9ubeh}(h]h ]h"]h$]h&]uh1jmhj~9hMhj`9ubjn)}(h``u8 format`` pixel format h](jt)}(h ``u8 format``h]jz)}(hj9h]h u8 format}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj9ubj)}(hhh]h)}(h pixel formath]h pixel format}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhj`9ubeh}(h]h ]h"]h$]h&]uh1jhhjD9ubh)}(h**Description**h]j%)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjD9ubh)}(hOThis function is deprecated. Use mipi_dsi_dcs_set_pixel_format_multi() instead.h]hOThis function is deprecated. Use mipi_dsi_dcs_set_pixel_format_multi() instead.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjD9ubh)}(h **Return**h]j%)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjD9ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjD9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+mipi_dsi_dcs_set_tear_scanline (C function) c.mipi_dsi_dcs_set_tear_scanlinehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hNint mipi_dsi_dcs_set_tear_scanline (struct mipi_dsi_device *dsi, u16 scanline)h]j)}(hMint mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline)h](j)}(hinth]hint}(hjI:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE:hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM0ubj)}(h h]h }(hjX:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE:hhhjW:hM0ubj)}(hmipi_dsi_dcs_set_tear_scanlineh]j)}(hmipi_dsi_dcs_set_tear_scanlineh]hmipi_dsi_dcs_set_tear_scanline}(hjj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjE:hhhjW:hM0ubj)}(h+(struct mipi_dsi_device *dsi, u16 scanline)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j%)}jjl:sb c.mipi_dsi_dcs_set_tear_scanlineasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubj)}(hdsih]hdsi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~:ubj)}(h u16 scanlineh](h)}(hhh]j)}(hu16h]hu16}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j: c.mipi_dsi_dcs_set_tear_scanlineasbuh1hhj:ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hscanlineh]hscanline}(hj';hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~:ubeh}(h]h ]h"]h$]h&]jjuh1jhjE:hhhjW:hM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjA:hhhjW:hM0ubah}(h]j<:ah ](jjeh"]h$]h&]jj)jhuh1jhjW:hM0hj>:hhubj)}(hhh]h)}(h]set the scanline to use as trigger for the Tearing Effect output signal of the display moduleh]h]set the scanline to use as trigger for the Tearing Effect output signal of the display module}(hjQ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM&hjN;hhubah}(h]h ]h"]h$]h&]uh1jhj>:hhhjW:hM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjji;jji;jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 scanline`` scanline to use as trigger **Description** This function is deprecated. Use mipi_dsi_dcs_set_tear_scanline_multi() instead. **Return** 0 on success or a negative error code on failureh](h)}(h**Parameters**h]j%)}(hjs;h]h Parameters}(hju;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjq;ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM*hjm;ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj;h]hstruct mipi_dsi_device *dsi}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM(hj;ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM(hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hM(hj;ubjn)}(h,``u16 scanline`` scanline to use as trigger h](jt)}(h``u16 scanline``h]jz)}(hj;h]h u16 scanline}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM)hj;ubj)}(hhh]h)}(hscanline to use as triggerh]hscanline to use as trigger}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM)hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hM)hj;ubeh}(h]h ]h"]h$]h&]uh1jhhjm;ubh)}(h**Description**h]j%)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM+hjm;ubh)}(hPThis function is deprecated. Use mipi_dsi_dcs_set_tear_scanline_multi() instead.h]hPThis function is deprecated. Use mipi_dsi_dcs_set_tear_scanline_multi() instead.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM+hjm;ubh)}(h **Return**h]j%)}(hj-<h]hReturn}(hj/<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+<ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM.hjm;ubh)}(h00 on success or a negative error code on failureh]h00 on success or a negative error code on failure}(hjC<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM.hjm;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_set_display_brightness (C function)%c.mipi_dsi_dcs_set_display_brightnesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hUint mipi_dsi_dcs_set_display_brightness (struct mipi_dsi_device *dsi, u16 brightness)h]j)}(hTint mipi_dsi_dcs_set_display_brightness(struct mipi_dsi_device *dsi, u16 brightness)h](j)}(hinth]hint}(hjr<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn<hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMIubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn<hhhj<hMIubj)}(h#mipi_dsi_dcs_set_display_brightnessh]j)}(h#mipi_dsi_dcs_set_display_brightnessh]h#mipi_dsi_dcs_set_display_brightness}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjn<hhhj<hMIubj)}(h-(struct mipi_dsi_device *dsi, u16 brightness)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j%)}jj<sb%c.mipi_dsi_dcs_set_display_brightnessasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(hj9h]h*}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubj)}(hdsih]hdsi}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hu16 brightnessh](h)}(hhh]j)}(hu16h]hu16}(hj$=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&=modnameN classnameNjj)}j]j<%c.mipi_dsi_dcs_set_display_brightnessasbuh1hhj=ubj)}(h h]h }(hjB=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h brightnessh]h brightness}(hjP=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhjn<hhhj<hMIubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjj<hhhj<hMIubah}(h]je<ah ](jjeh"]h$]h&]jj)jhuh1jhj<hMIhjg<hhubj)}(hhh]h)}(h(sets the brightness value of the displayh]h(sets the brightness value of the display}(hjz=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM?hjw=hhubah}(h]h ]h"]h$]h&]uh1jhjg<hhhj<hMIubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 brightness`` brightness value **Description** This function is deprecated. Use mipi_dsi_dcs_set_display_brightness_multi() instead. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMChj=ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj=h]hstruct mipi_dsi_device *dsi}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMAhj=ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMAhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMAhj=ubjn)}(h$``u16 brightness`` brightness value h](jt)}(h``u16 brightness``h]jz)}(hj=h]hu16 brightness}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMBhj=ubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj >hMBhj >ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj >hMBhj=ubeh}(h]h ]h"]h$]h&]uh1jhhj=ubh)}(h**Description**h]j%)}(hj/>h]h Description}(hj1>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj->ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMDhj=ubh)}(hUThis function is deprecated. Use mipi_dsi_dcs_set_display_brightness_multi() instead.h]hUThis function is deprecated. Use mipi_dsi_dcs_set_display_brightness_multi() instead.}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMDhj=ubh)}(h **Return**h]j%)}(hjV>h]hReturn}(hjX>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjT>ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMGhj=ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjl>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMGhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_get_display_brightness (C function)%c.mipi_dsi_dcs_get_display_brightnesshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hVint mipi_dsi_dcs_get_display_brightness (struct mipi_dsi_device *dsi, u16 *brightness)h]j)}(hUint mipi_dsi_dcs_get_display_brightness(struct mipi_dsi_device *dsi, u16 *brightness)h](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM`ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hM`ubj)}(h#mipi_dsi_dcs_get_display_brightnessh]j)}(h#mipi_dsi_dcs_get_display_brightnessh]h#mipi_dsi_dcs_get_display_brightness}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj>hM`ubj)}(h.(struct mipi_dsi_device *dsi, u16 *brightness)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j%)}jj>sb%c.mipi_dsi_dcs_get_display_brightnessasbuh1hhj>ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj9)}(hj9h]h*}(hj$?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>ubj)}(hdsih]hdsi}(hj1?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hu16 *brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjM?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO?modnameN classnameNjj)}j]j?%c.mipi_dsi_dcs_get_display_brightnessasbuh1hhjF?ubj)}(h h]h }(hjk?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF?ubj9)}(hj9h]h*}(hjy?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjF?ubj)}(h brightnessh]h brightness}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hM`ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj>hM`ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhj>hM`hj>hhubj)}(hhh]h)}(h0gets the current brightness value of the displayh]h0gets the current brightness value of the display}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMYhj?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 *brightness`` brightness value **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM]hj?ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj?h]hstruct mipi_dsi_device *dsi}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM[hj?ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hM[hj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj@hM[hj?ubjn)}(h%``u16 *brightness`` brightness value h](jt)}(h``u16 *brightness``h]jz)}(hj*@h]hu16 *brightness}(hj,@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(@ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM\hj$@ubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hjC@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?@hM\hj@@ubah}(h]h ]h"]h$]h&]uh1jhj$@ubeh}(h]h ]h"]h$]h&]uh1jmhj?@hM\hj?ubeh}(h]h ]h"]h$]h&]uh1jhhj?ubh)}(h **Return**h]j%)}(hje@h]hReturn}(hjg@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjc@ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM^hj?ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj{@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM^hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6mipi_dsi_dcs_set_display_brightness_large (C function)+c.mipi_dsi_dcs_set_display_brightness_largehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h[int mipi_dsi_dcs_set_display_brightness_large (struct mipi_dsi_device *dsi, u16 brightness)h]j)}(hZint mipi_dsi_dcs_set_display_brightness_large(struct mipi_dsi_device *dsi, u16 brightness)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMzubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj@hMzubj)}(h)mipi_dsi_dcs_set_display_brightness_largeh]j)}(h)mipi_dsi_dcs_set_display_brightness_largeh]h)mipi_dsi_dcs_set_display_brightness_large}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhj@hMzubj)}(h-(struct mipi_dsi_device *dsi, u16 brightness)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j%)}jj@sb+c.mipi_dsi_dcs_set_display_brightness_largeasbuh1hhj@ubj)}(h h]h }(hj%AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hj3AhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(hdsih]hdsi}(hj@AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubj)}(hu16 brightnessh](h)}(hhh]j)}(hu16h]hu16}(hj\AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^AmodnameN classnameNjj)}j]j!A+c.mipi_dsi_dcs_set_display_brightness_largeasbuh1hhjUAubj)}(h h]h }(hjzAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUAubj)}(h brightnessh]h brightness}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@ubeh}(h]h ]h"]h$]h&]jjuh1jhj@hhhj@hMzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@hhhj@hMzubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jhj@hMzhj@hhubj)}(hhh]h)}(h/sets the 16-bit brightness value of the displayh]h/sets the 16-bit brightness value of the display}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMshjAhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 brightness`` brightness value **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMwhjAubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjAh]hstruct mipi_dsi_device *dsi}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMuhjAubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMuhj Bubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjBhMuhjAubjn)}(h$``u16 brightness`` brightness value h](jt)}(h``u16 brightness``h]jz)}(hj,Bh]hu16 brightness}(hj.BhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*Bubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMvhj&Bubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hjEBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjABhMvhjBBubah}(h]h ]h"]h$]h&]uh1jhj&Bubeh}(h]h ]h"]h$]h&]uh1jmhjABhMvhjAubeh}(h]h ]h"]h$]h&]uh1jhhjAubh)}(h **Return**h]j%)}(hjgBh]hReturn}(hjiBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeBubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMxhjAubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj}BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMxhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6mipi_dsi_dcs_get_display_brightness_large (C function)+c.mipi_dsi_dcs_get_display_brightness_largehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h\int mipi_dsi_dcs_get_display_brightness_large (struct mipi_dsi_device *dsi, u16 *brightness)h]j)}(h[int mipi_dsi_dcs_get_display_brightness_large(struct mipi_dsi_device *dsi, u16 *brightness)h](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjBhMubj)}(h)mipi_dsi_dcs_get_display_brightness_largeh]j)}(h)mipi_dsi_dcs_get_display_brightness_largeh]h)mipi_dsi_dcs_get_display_brightness_large}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjBhMubj)}(h.(struct mipi_dsi_device *dsi, u16 *brightness)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj CmodnameN classnameNjj)}j]j%)}jjBsb+c.mipi_dsi_dcs_get_display_brightness_largeasbuh1hhjBubj)}(h h]h }(hj'ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hj5ChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hdsih]hdsi}(hjBChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(hu16 *brightnessh](h)}(hhh]j)}(hu16h]hu16}(hj^ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`CmodnameN classnameNjj)}j]j#C+c.mipi_dsi_dcs_get_display_brightness_largeasbuh1hhjWCubj)}(h h]h }(hj|ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWCubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWCubj)}(h brightnessh]h brightness}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubeh}(h]h ]h"]h$]h&]jjuh1jhjBhhhjBhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjBhMubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhjBhMhjBhhubj)}(hhh]h)}(h7gets the current 16-bit brightness value of the displayh]h7gets the current 16-bit brightness value of the display}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjBhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 *brightness`` brightness value **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjCubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjDh]hstruct mipi_dsi_device *dsi}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjCubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhjCubjn)}(h%``u16 *brightness`` brightness value h](jt)}(h``u16 *brightness``h]jz)}(hj;Dh]hu16 *brightness}(hj=DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9Dubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj5Dubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hjTDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPDhMhjQDubah}(h]h ]h"]h$]h&]uh1jhj5Dubeh}(h]h ]h"]h$]h&]uh1jmhjPDhMhjCubeh}(h]h ]h"]h$]h&]uh1jhhjCubh)}(h **Return**h]j%)}(hjvDh]hReturn}(hjxDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtDubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjCubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1mipi_dsi_picture_parameter_set_multi (C function)&c.mipi_dsi_picture_parameter_set_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hvoid mipi_dsi_picture_parameter_set_multi (struct mipi_dsi_multi_context *ctx, const struct drm_dsc_picture_parameter_set *pps)h]j)}(h~void mipi_dsi_picture_parameter_set_multi(struct mipi_dsi_multi_context *ctx, const struct drm_dsc_picture_parameter_set *pps)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjDhMubj)}(h$mipi_dsi_picture_parameter_set_multih]j)}(h$mipi_dsi_picture_parameter_set_multih]h$mipi_dsi_picture_parameter_set_multi}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjDhMubj)}(hU(struct mipi_dsi_multi_context *ctx, const struct drm_dsc_picture_parameter_set *pps)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j%)}jjDsb&c.mipi_dsi_picture_parameter_set_multiasbuh1hhjDubj)}(h h]h }(hj6EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hjDEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hctxh]hctx}(hjQEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubj)}(h/const struct drm_dsc_picture_parameter_set *ppsh](j)}(hjch]hconst}(hjjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubj)}(h h]h }(hjwEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubj)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubh)}(hhh]j)}(hdrm_dsc_picture_parameter_seth]hdrm_dsc_picture_parameter_set}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j2E&c.mipi_dsi_picture_parameter_set_multiasbuh1hhjfEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfEubj)}(hppsh]hpps}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubeh}(h]h ]h"]h$]h&]jjuh1jhjDhhhjDhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjDhMubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhjDhMhjDhhubj)}(hhh]h)}(h&transmit the DSC PPS to the peripheralh]h&transmit the DSC PPS to the peripheral}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhjhNhNubj)}(hXH**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``const struct drm_dsc_picture_parameter_set *pps`` VESA DSC 1.1 Picture Parameter Set **Description** Like mipi_dsi_picture_parameter_set() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hj(Fh]h Parameters}(hj*FhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&Fubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj"Fubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjGFh]h"struct mipi_dsi_multi_context *ctx}(hjIFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEFubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjAFubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj`FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\FhMhj]Fubah}(h]h ]h"]h$]h&]uh1jhjAFubeh}(h]h ]h"]h$]h&]uh1jmhj\FhMhj>Fubjn)}(hW``const struct drm_dsc_picture_parameter_set *pps`` VESA DSC 1.1 Picture Parameter Set h](jt)}(h3``const struct drm_dsc_picture_parameter_set *pps``h]jz)}(hjFh]h/const struct drm_dsc_picture_parameter_set *pps}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~Fubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjzFubj)}(hhh]h)}(h"VESA DSC 1.1 Picture Parameter Seth]h"VESA DSC 1.1 Picture Parameter Set}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjzFubeh}(h]h ]h"]h$]h&]uh1jmhjFhMhj>Fubeh}(h]h ]h"]h$]h&]uh1jhhj"Fubh)}(h**Description**h]j%)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj"Fubh)}(h}Like mipi_dsi_picture_parameter_set() but deals with errors in a way that makes it convenient to make several calls in a row.h]h}Like mipi_dsi_picture_parameter_set() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj"Fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_compression_mode_ext_multi (C function)%c.mipi_dsi_compression_mode_ext_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hvoid mipi_dsi_compression_mode_ext_multi (struct mipi_dsi_multi_context *ctx, bool enable, enum mipi_dsi_compression_algo algo, unsigned int pps_selector)h]j)}(hvoid mipi_dsi_compression_mode_ext_multi(struct mipi_dsi_multi_context *ctx, bool enable, enum mipi_dsi_compression_algo algo, unsigned int pps_selector)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjGhMubj)}(h#mipi_dsi_compression_mode_ext_multih]j)}(h#mipi_dsi_compression_mode_ext_multih]h#mipi_dsi_compression_mode_ext_multi}(hj!GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjGhMubj)}(hq(struct mipi_dsi_multi_context *ctx, bool enable, enum mipi_dsi_compression_algo algo, unsigned int pps_selector)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hj=GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Gubj)}(h h]h }(hjJGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Gubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hj[GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]GmodnameN classnameNjj)}j]j%)}jj#Gsb%c.mipi_dsi_compression_mode_ext_multiasbuh1hhj9Gubj)}(h h]h }(hj{GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Gubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9Gubj)}(hctxh]hctx}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5Gubj)}(h bool enableh](j)}(hjAh]hbool}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(henableh]henable}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5Gubj)}(h#enum mipi_dsi_compression_algo algoh](j)}(hjl h]henum}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(hmipi_dsi_compression_algoh]hmipi_dsi_compression_algo}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]jwG%c.mipi_dsi_compression_mode_ext_multiasbuh1hhjGubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(halgoh]halgo}(hj-HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5Gubj)}(hunsigned int pps_selectorh](j)}(hunsignedh]hunsigned}(hjFHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBHubj)}(h h]h }(hjTHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBHubj)}(hinth]hint}(hjbHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBHubj)}(h h]h }(hjpHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBHubj)}(h pps_selectorh]h pps_selector}(hj~HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5Gubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjGhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhjGhMubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1jhjGhMhjFhhubj)}(hhh]h)}(h$enable/disable DSC on the peripheralh]h$enable/disable DSC on the peripheral}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjGhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``bool enable`` Whether to enable or disable the DSC ``enum mipi_dsi_compression_algo algo`` Selected compression algorithm ``unsigned int pps_selector`` Select PPS from the table of pre-stored or uploaded PPS entries **Description** Like mipi_dsi_compression_mode_ext() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjHubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjHh]h"struct mipi_dsi_multi_context *ctx}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjHubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjHhMhjHubjn)}(h5``bool enable`` Whether to enable or disable the DSC h](jt)}(h``bool enable``h]jz)}(hj"Ih]h bool enable}(hj$IhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Iubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjIubj)}(hhh]h)}(h$Whether to enable or disable the DSCh]h$Whether to enable or disable the DSC}(hj;IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7IhMhj8Iubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhj7IhMhjHubjn)}(hG``enum mipi_dsi_compression_algo algo`` Selected compression algorithm h](jt)}(h'``enum mipi_dsi_compression_algo algo``h]jz)}(hj[Ih]h#enum mipi_dsi_compression_algo algo}(hj]IhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYIubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjUIubj)}(hhh]h)}(hSelected compression algorithmh]hSelected compression algorithm}(hjtIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpIhMhjqIubah}(h]h ]h"]h$]h&]uh1jhjUIubeh}(h]h ]h"]h$]h&]uh1jmhjpIhMhjHubjn)}(h^``unsigned int pps_selector`` Select PPS from the table of pre-stored or uploaded PPS entries h](jt)}(h``unsigned int pps_selector``h]jz)}(hjIh]hunsigned int pps_selector}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjIubj)}(hhh]h)}(h?Select PPS from the table of pre-stored or uploaded PPS entriesh]h?Select PPS from the table of pre-stored or uploaded PPS entries}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjIhMhjHubeh}(h]h ]h"]h$]h&]uh1jhhjHubh)}(h**Description**h]j%)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjHubh)}(h|Like mipi_dsi_compression_mode_ext() but deals with errors in a way that makes it convenient to make several calls in a row.h]h|Like mipi_dsi_compression_mode_ext() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,mipi_dsi_compression_mode_multi (C function)!c.mipi_dsi_compression_mode_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hVvoid mipi_dsi_compression_mode_multi (struct mipi_dsi_multi_context *ctx, bool enable)h]j)}(hUvoid mipi_dsi_compression_mode_multi(struct mipi_dsi_multi_context *ctx, bool enable)h](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj#JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj"JhMubj)}(hmipi_dsi_compression_mode_multih]j)}(hmipi_dsi_compression_mode_multih]hmipi_dsi_compression_mode_multi}(hj5JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Jubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj"JhMubj)}(h1(struct mipi_dsi_multi_context *ctx, bool enable)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjQJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMJubj)}(h h]h }(hj^JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMJubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjoJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqJmodnameN classnameNjj)}j]j%)}jj7Jsb!c.mipi_dsi_compression_mode_multiasbuh1hhjMJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMJubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMJubj)}(hctxh]hctx}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIJubj)}(h bool enableh](j)}(hjAh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(henableh]henable}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIJubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj"JhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj Jhhhj"JhMubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jhj"JhMhj Jhhubj)}(hhh]h)}(h$enable/disable DSC on the peripheralh]h$enable/disable DSC on the peripheral}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjKhhubah}(h]h ]h"]h$]h&]uh1jhj Jhhhj"JhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Kjj Kjjjuh1jhhhjhNhNubj)}(hX+**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``bool enable`` Whether to enable or disable the DSC **Description** Enable or disable Display Stream Compression on the peripheral using the default Picture Parameter Set and VESA DSC 1.1 algorithm.h](h)}(h**Parameters**h]j%)}(hj*Kh]h Parameters}(hj,KhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(Kubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj$Kubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjIKh]h"struct mipi_dsi_multi_context *ctx}(hjKKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGKubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjCKubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjbKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^KhMhj_Kubah}(h]h ]h"]h$]h&]uh1jhjCKubeh}(h]h ]h"]h$]h&]uh1jmhj^KhMhj@Kubjn)}(h5``bool enable`` Whether to enable or disable the DSC h](jt)}(h``bool enable``h]jz)}(hjKh]h bool enable}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj|Kubj)}(hhh]h)}(h$Whether to enable or disable the DSCh]h$Whether to enable or disable the DSC}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhj|Kubeh}(h]h ]h"]h$]h&]uh1jmhjKhMhj@Kubeh}(h]h ]h"]h$]h&]uh1jhhj$Kubh)}(h**Description**h]j%)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj$Kubh)}(hEnable or disable Display Stream Compression on the peripheral using the default Picture Parameter Set and VESA DSC 1.1 algorithm.h]hEnable or disable Display Stream Compression on the peripheral using the default Picture Parameter Set and VESA DSC 1.1 algorithm.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj$Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mipi_dsi_dcs_nop_multi (C function)c.mipi_dsi_dcs_nop_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(h@void mipi_dsi_dcs_nop_multi (struct mipi_dsi_multi_context *ctx)h]j)}(h?void mipi_dsi_dcs_nop_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjLhMubj)}(hmipi_dsi_dcs_nop_multih]j)}(hmipi_dsi_dcs_nop_multih]hmipi_dsi_dcs_nop_multi}(hj#LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhjLhMubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hj?LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubj)}(h h]h }(hjLLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hj]LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_LmodnameN classnameNjj)}j]j%)}jj%Lsbc.mipi_dsi_dcs_nop_multiasbuh1hhj;Lubj)}(h h]h }(hj}LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;Lubj)}(hctxh]hctx}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Lubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhjLhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjLhMubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjLhMhjKhhubj)}(hhh]h)}(hsend DCS NOP packeth]hsend DCS NOP packet}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjLhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** Like mipi_dsi_dcs_nop() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjLubji)}(hhh]jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjMh]h"struct mipi_dsi_multi_context *ctx}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjLubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhjLubah}(h]h ]h"]h$]h&]uh1jhhjLubh)}(h**Description**h]j%)}(hj>Mh]h Description}(hj@MhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM&hjOubh)}(h{Like mipi_dsi_dcs_exit_sleep_mode() but deals with errors in a way that makes it convenient to make several calls in a row.h]h{Like mipi_dsi_dcs_exit_sleep_mode() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjVPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM&hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/mipi_dsi_dcs_set_display_off_multi (C function)$c.mipi_dsi_dcs_set_display_off_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hLvoid mipi_dsi_dcs_set_display_off_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hKvoid mipi_dsi_dcs_set_display_off_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMBubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhMBubj)}(h"mipi_dsi_dcs_set_display_off_multih]j)}(h"mipi_dsi_dcs_set_display_off_multih]h"mipi_dsi_dcs_set_display_off_multi}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjPhMBubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j%)}jjPsb$c.mipi_dsi_dcs_set_display_off_multiasbuh1hhjPubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubj)}(hctxh]hctx}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhMBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}PhhhjPhMBubah}(h]jxPah ](jjeh"]h$]h&]jj)jhuh1jhjPhMBhjzPhhubj)}(hhh]h)}(hsend DCS SET_DISPLAY_OFF packeth]hsend DCS SET_DISPLAY_OFF packet}(hjEQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM<hjBQhhubah}(h]h ]h"]h$]h&]uh1jhjzPhhhjPhMBubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]Qjj]Qjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** Like mipi_dsi_dcs_set_display_off() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjgQh]h Parameters}(hjiQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeQubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM@hjaQubji)}(hhh]jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjQh]h"struct mipi_dsi_multi_context *ctx}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM=hjQubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM=hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjQhM=hj}Qubah}(h]h ]h"]h$]h&]uh1jhhjaQubh)}(h**Description**h]j%)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM?hjaQubh)}(h{Like mipi_dsi_dcs_set_display_off() but deals with errors in a way that makes it convenient to make several calls in a row.h]h{Like mipi_dsi_dcs_set_display_off() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM?hjaQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.mipi_dsi_dcs_set_display_on_multi (C function)#c.mipi_dsi_dcs_set_display_on_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKvoid mipi_dsi_dcs_set_display_on_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hJvoid mipi_dsi_dcs_set_display_on_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM[ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhM[ubj)}(h!mipi_dsi_dcs_set_display_on_multih]j)}(h!mipi_dsi_dcs_set_display_on_multih]h!mipi_dsi_dcs_set_display_on_multi}(hj'RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Rubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhjRhM[ubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjCRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Rubj)}(h h]h }(hjPRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Rubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjaRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcRmodnameN classnameNjj)}j]j%)}jj)Rsb#c.mipi_dsi_dcs_set_display_on_multiasbuh1hhj?Rubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Rubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?Rubj)}(hctxh]hctx}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;Rubah}(h]h ]h"]h$]h&]jjuh1jhjRhhhjRhM[ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhjRhM[ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjRhM[hjQhhubj)}(hhh]h)}(hsend DCS SET_DISPLAY_ON packeth]hsend DCS SET_DISPLAY_ON packet}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMUhjRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjRhM[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** Like mipi_dsi_dcs_set_display_on() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMYhjRubji)}(hhh]jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjSh]h"struct mipi_dsi_multi_context *ctx}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMVhjSubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMVhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjShMVhjRubah}(h]h ]h"]h$]h&]uh1jhhjRubh)}(h**Description**h]j%)}(hjBSh]h Description}(hjDShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@Subah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMXhjRubh)}(hzLike mipi_dsi_dcs_set_display_on() but deals with errors in a way that makes it convenient to make several calls in a row.h]hzLike mipi_dsi_dcs_set_display_on() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjXShhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMXhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+mipi_dsi_dcs_set_tear_on_multi (C function) c.mipi_dsi_dcs_set_tear_on_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hjvoid mipi_dsi_dcs_set_tear_on_multi (struct mipi_dsi_multi_context *ctx, enum mipi_dsi_dcs_tear_mode mode)h]j)}(hivoid mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, enum mipi_dsi_dcs_tear_mode mode)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMuubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMuubj)}(hmipi_dsi_dcs_set_tear_on_multih]j)}(hmipi_dsi_dcs_set_tear_on_multih]hmipi_dsi_dcs_set_tear_on_multi}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMuubj)}(hF(struct mipi_dsi_multi_context *ctx, enum mipi_dsi_dcs_tear_mode mode)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j%)}jjSsb c.mipi_dsi_dcs_set_tear_on_multiasbuh1hhjSubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSubj)}(hctxh]hctx}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h enum mipi_dsi_dcs_tear_mode modeh](j)}(hjl h]henum}(hj6ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Tubj)}(h h]h }(hjCThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Tubh)}(hhh]j)}(hmipi_dsi_dcs_tear_modeh]hmipi_dsi_dcs_tear_mode}(hjTThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVTmodnameN classnameNjj)}j]jS c.mipi_dsi_dcs_set_tear_on_multiasbuh1hhj2Tubj)}(h h]h }(hjrThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Tubj)}(hmodeh]hmode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMuubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjShMuubah}(h]jzSah ](jjeh"]h$]h&]jj)jhuh1jhjShMuhj|Shhubj)}(hhh]h)}(hsend DCS SET_TEAR_ON packeth]hsend DCS SET_TEAR_ON packet}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMnhjThhubah}(h]h ]h"]h$]h&]uh1jhj|ShhhjShMuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhjhNhNubj)}(hX4**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``enum mipi_dsi_dcs_tear_mode mode`` the Tearing Effect Output Line mode **Description** Like mipi_dsi_dcs_set_tear_on() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMrhjTubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjTh]h"struct mipi_dsi_multi_context *ctx}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMohjTubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMohjUubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjUhMohjTubjn)}(hI``enum mipi_dsi_dcs_tear_mode mode`` the Tearing Effect Output Line mode h](jt)}(h$``enum mipi_dsi_dcs_tear_mode mode``h]jz)}(hj$Uh]h enum mipi_dsi_dcs_tear_mode mode}(hj&UhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"Uubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMphjUubj)}(hhh]h)}(h#the Tearing Effect Output Line modeh]h#the Tearing Effect Output Line mode}(hj=UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9UhMphj:Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhj9UhMphjTubeh}(h]h ]h"]h$]h&]uh1jhhjTubh)}(h**Description**h]j%)}(hj_Uh]h Description}(hjaUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]Uubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMrhjTubh)}(hwLike mipi_dsi_dcs_set_tear_on() but deals with errors in a way that makes it convenient to make several calls in a row.h]hwLike mipi_dsi_dcs_set_tear_on() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjuUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMrhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.mipi_dsi_turn_on_peripheral_multi (C function)#c.mipi_dsi_turn_on_peripheral_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKvoid mipi_dsi_turn_on_peripheral_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hJvoid mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhMubj)}(h!mipi_dsi_turn_on_peripheral_multih]j)}(h!mipi_dsi_turn_on_peripheral_multih]h!mipi_dsi_turn_on_peripheral_multi}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhMubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j%)}jjUsb#c.mipi_dsi_turn_on_peripheral_multiasbuh1hhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(hj9h]h*}(hj-VhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUubj)}(hctxh]hctx}(hj:VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjUhMhjUhhubj)}(hhh]h)}(h"sends a Turn On Peripheral commandh]h"sends a Turn On Peripheral command}(hjdVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjaVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|Vjj|Vjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** Like mipi_dsi_turn_on_peripheral() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjVubji)}(hhh]jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjVh]h"struct mipi_dsi_multi_context *ctx}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjVubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhhjVubh)}(h**Description**h]j%)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjVubh)}(hzLike mipi_dsi_turn_on_peripheral() but deals with errors in a way that makes it convenient to make several calls in a row.h]hzLike mipi_dsi_turn_on_peripheral() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,mipi_dsi_dcs_set_tear_off_multi (C function)!c.mipi_dsi_dcs_set_tear_off_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIvoid mipi_dsi_dcs_set_tear_off_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hHvoid mipi_dsi_dcs_set_tear_off_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hj%WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Whhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj4WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Whhhj3WhMubj)}(hmipi_dsi_dcs_set_tear_off_multih]j)}(hmipi_dsi_dcs_set_tear_off_multih]hmipi_dsi_dcs_set_tear_off_multi}(hjFWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!Whhhj3WhMubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjbWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Wubj)}(h h]h }(hjoWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Wubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j%)}jjHWsb!c.mipi_dsi_dcs_set_tear_off_multiasbuh1hhj^Wubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Wubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^Wubj)}(hctxh]hctx}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZWubah}(h]h ]h"]h$]h&]jjuh1jhj!Whhhj3WhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhj3WhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhj3WhMhjWhhubj)}(hhh]h)}(hPturn off the display module's Tearing Effect output signal on the TE signal lineh]hRturn off the display module’s Tearing Effect output signal on the TE signal line}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjWhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhj3WhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjhNhNubj)}(h^**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactionsh](h)}(h**Parameters**h]j%)}(hjXh]h Parameters}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjXubji)}(hhh]jn)}(hL``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactionsh](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hj&Xh]h"struct mipi_dsi_multi_context *ctx}(hj(XhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$Xubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj Xubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj?XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Zubj)}(h h]h }(hjKZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Zubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hj\ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^ZmodnameN classnameNjj)}j]j%)}jj$Zsb+c.mipi_dsi_dcs_set_display_brightness_multiasbuh1hhj:Zubj)}(h h]h }(hj|ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Zubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:Zubj)}(hctxh]hctx}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6Zubj)}(hu16 brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jxZ+c.mipi_dsi_dcs_set_display_brightness_multiasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h brightnessh]h brightness}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6Zubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjZhMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjZhMhjYhhubj)}(hhh]h)}(h(sets the brightness value of the displayh]h(sets the brightness value of the display}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj![jj![jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``u16 brightness`` brightness value **Description** Like mipi_dsi_dcs_set_display_brightness() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hj+[h]h Parameters}(hj-[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)[ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj%[ubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjJ[h]h"struct mipi_dsi_multi_context *ctx}(hjL[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH[ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjD[ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjc[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_[hMhj`[ubah}(h]h ]h"]h$]h&]uh1jhjD[ubeh}(h]h ]h"]h$]h&]uh1jmhj_[hMhjA[ubjn)}(h$``u16 brightness`` brightness value h](jt)}(h``u16 brightness``h]jz)}(hj[h]hu16 brightness}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj}[ubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj}[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjA[ubeh}(h]h ]h"]h$]h&]uh1jhhj%[ubh)}(h**Description**h]j%)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj%[ubh)}(hLike mipi_dsi_dcs_set_display_brightness() but deals with errors in a way that makes it convenient to make several calls in a row.h]hLike mipi_dsi_dcs_set_display_brightness() but deals with errors in a way that makes it convenient to make several calls in a row.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj%[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_set_pixel_format_multi (C function)%c.mipi_dsi_dcs_set_pixel_format_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hXvoid mipi_dsi_dcs_set_pixel_format_multi (struct mipi_dsi_multi_context *ctx, u8 format)h]j)}(hWvoid mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, u8 format)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhj\hMubj)}(h#mipi_dsi_dcs_set_pixel_format_multih]j)}(h#mipi_dsi_dcs_set_pixel_format_multih]h#mipi_dsi_dcs_set_pixel_format_multi}(hj$\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj \ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[hhhj\hMubj)}(h/(struct mipi_dsi_multi_context *ctx, u8 format)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hj@\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<\ubj)}(h h]h }(hjM\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<\ubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hj^\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`\modnameN classnameNjj)}j]j%)}jj&\sb%c.mipi_dsi_dcs_set_pixel_format_multiasbuh1hhj<\ubj)}(h h]h }(hj~\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<\ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<\ubj)}(hctxh]hctx}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8\ubj)}(h u8 formath](h)}(hhh]j)}(hu8h]hu8}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]jz\%c.mipi_dsi_dcs_set_pixel_format_multiasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hformath]hformat}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8\ubeh}(h]h ]h"]h$]h&]jjuh1jhj[hhhj\hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhj\hMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jhj\hMhj[hhubj)}(hhh]h)}(hBsets the pixel format for the RGB image data used by the interfaceh]hBsets the pixel format for the RGB image data used by the interface}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#]jj#]jjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``u8 format`` pixel format **Description** Like mipi_dsi_dcs_set_pixel_format() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hj-]h]h Parameters}(hj/]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+]ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj']ubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjL]h]h"struct mipi_dsi_multi_context *ctx}(hjN]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJ]ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjF]ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hje]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja]hMhjb]ubah}(h]h ]h"]h$]h&]uh1jhjF]ubeh}(h]h ]h"]h$]h&]uh1jmhja]hMhjC]ubjn)}(h``u8 format`` pixel format h](jt)}(h ``u8 format``h]jz)}(hj]h]h u8 format}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj]ubj)}(hhh]h)}(h pixel formath]h pixel format}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhjC]ubeh}(h]h ]h"]h$]h&]uh1jhhj']ubh)}(h**Description**h]j%)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj']ubh)}(h|Like mipi_dsi_dcs_set_pixel_format() but deals with errors in a way that makes it convenient to make several calls in a row.h]h|Like mipi_dsi_dcs_set_pixel_format() but deals with errors in a way that makes it convenient to make several calls in a row.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj']ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2mipi_dsi_dcs_set_column_address_multi (C function)'c.mipi_dsi_dcs_set_column_address_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcvoid mipi_dsi_dcs_set_column_address_multi (struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h]j)}(hbvoid mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMubj)}(h%mipi_dsi_dcs_set_column_address_multih]j)}(h%mipi_dsi_dcs_set_column_address_multih]h%mipi_dsi_dcs_set_column_address_multi}(hj&^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj^hMubj)}(h8(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjB^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>^ubj)}(h h]h }(hjO^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>^ubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hj`^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb^modnameN classnameNjj)}j]j%)}jj(^sb'c.mipi_dsi_dcs_set_column_address_multiasbuh1hhj>^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>^ubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>^ubj)}(hctxh]hctx}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:^ubj)}(h u16 starth](h)}(hhh]j)}(hu16h]hu16}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j|^'c.mipi_dsi_dcs_set_column_address_multiasbuh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hstarth]hstart}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:^ubj)}(hu16 endh](h)}(hhh]j)}(hu16h]hu16}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j|^'c.mipi_dsi_dcs_set_column_address_multiasbuh1hhj^ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hendh]hend}(hj+_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:^ubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhj^hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj]hhhj^hMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhj^hMhj]hhubj)}(hhh]h)}(hKdefine the column extent of the frame memory accessed by the host processorh]hKdefine the column extent of the frame memory accessed by the host processor}(hjU_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM hjR_hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjm_jjm_jjjuh1jhhhjhNhNubj)}(hXH**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``u16 start`` first column of frame memory ``u16 end`` last column of frame memory **Description** Like mipi_dsi_dcs_set_column_address() but deals with errors in a way that makes it convenient to make several calls in a row.h](h)}(h**Parameters**h]j%)}(hjw_h]h Parameters}(hjy_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hju_ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjq_ubji)}(hhh](jn)}(hM``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions h](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hj_h]h"struct mipi_dsi_multi_context *ctx}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM hj_ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hM hj_ubjn)}(h+``u16 start`` first column of frame memory h](jt)}(h ``u16 start``h]jz)}(hj_h]h u16 start}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM hj_ubj)}(hhh]h)}(hfirst column of frame memoryh]hfirst column of frame memory}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hM hj_ubjn)}(h(``u16 end`` last column of frame memory h](jt)}(h ``u16 end``h]jz)}(hj`h]hu16 end}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhj`ubj)}(hhh]h)}(hlast column of frame memoryh]hlast column of frame memory}(hj!`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj`hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhhjq_ubh)}(h**Description**h]j%)}(hjC`h]h Description}(hjE`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjA`ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjq_ubh)}(h~Like mipi_dsi_dcs_set_column_address() but deals with errors in a way that makes it convenient to make several calls in a row.h]h~Like mipi_dsi_dcs_set_column_address() but deals with errors in a way that makes it convenient to make several calls in a row.}(hjY`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chMhjq_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_set_page_address_multi (C function)%c.mipi_dsi_dcs_set_page_address_multihNtauh1jxhjhhhNhNubj)}(hhh](j)}(havoid mipi_dsi_dcs_set_page_address_multi (struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h]j)}(h`void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h](j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./drivers/gpu/drm/drm_mipi_dsi.chM0ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hM0ubj)}(h#mipi_dsi_dcs_set_page_address_multih]j)}(h#mipi_dsi_dcs_set_page_address_multih]h#mipi_dsi_dcs_set_page_address_multi}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj`hM0ubj)}(h8(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j%)}jj`sb%c.mipi_dsi_dcs_set_page_address_multiasbuh1hhj`ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hctxh]hctx}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(h u16 starth](h)}(hhh]j)}(hu16h]hu16}(hj:ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7aubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj` ``rc_model_size`` Total size of RC model ``flatness_min_qp`` Minimum QP where flatness information is sent ``flatness_max_qp`` Maximum QP where flatness information is sent ``initial_scale_value`` Initial value for the scale factor ``scale_decrement_interval`` Specifies number of group times between decrementing the scale factor at beginning of a slice. ``scale_increment_interval`` Number of group times between incrementing the scale factor value used at the beginning of a slice. ``nfl_bpg_offset`` Non first line BPG offset to be used ``slice_bpg_offset`` BPG offset used to enforce slice bit ``final_offset`` Final RC linear transformation offset value ``vbr_enable`` True if VBR mode is enabled, false if disabled ``mux_word_size`` Mux word size (in bits) for SSM mode ``slice_chunk_size`` The (max) size in bytes of the "chunks" that are used in slice multiplexing. ``rc_bits`` Rate control buffer size in bits ``dsc_version_minor`` DSC minor version ``dsc_version_major`` DSC major version ``native_422`` True if Native 4:2:2 supported, else false ``native_420`` True if Native 4:2:0 supported else false. ``second_line_bpg_offset`` Additional bits/grp for seconnd line of slice for native 4:2:0 ``nsl_bpg_offset`` Num of bits deallocated for each grp that is not in second line of slice ``second_line_offset_adj`` Offset adjustment for second line in Native 4:2:0 modeh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubh:}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKGhjjubj@)}(hXystruct drm_dsc_config { u8 line_buf_depth; u8 bits_per_component; bool convert_rgb; u8 slice_count; u16 slice_width; u16 slice_height; bool simple_422; u16 pic_width; u16 pic_height; u8 rc_tgt_offset_high; u8 rc_tgt_offset_low; u16 bits_per_pixel; u8 rc_edge_factor; u8 rc_quant_incr_limit1; u8 rc_quant_incr_limit0; u16 initial_xmit_delay; u16 initial_dec_delay; bool block_pred_enable; u8 first_line_bpg_offset; u16 initial_offset; u16 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; struct drm_dsc_rc_range_parameters rc_range_params[DSC_NUM_BUF_RANGES]; u16 rc_model_size; u8 flatness_min_qp; u8 flatness_max_qp; u8 initial_scale_value; u16 scale_decrement_interval; u16 scale_increment_interval; u16 nfl_bpg_offset; u16 slice_bpg_offset; u16 final_offset; bool vbr_enable; u8 mux_word_size; u16 slice_chunk_size; u16 rc_bits; u8 dsc_version_minor; u8 dsc_version_major; bool native_422; bool native_420; u8 second_line_bpg_offset; u16 nsl_bpg_offset; u16 second_line_offset_adj; };h]hXystruct drm_dsc_config { u8 line_buf_depth; u8 bits_per_component; bool convert_rgb; u8 slice_count; u16 slice_width; u16 slice_height; bool simple_422; u16 pic_width; u16 pic_height; u8 rc_tgt_offset_high; u8 rc_tgt_offset_low; u16 bits_per_pixel; u8 rc_edge_factor; u8 rc_quant_incr_limit1; u8 rc_quant_incr_limit0; u16 initial_xmit_delay; u16 initial_dec_delay; bool block_pred_enable; u8 first_line_bpg_offset; u16 initial_offset; u16 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; struct drm_dsc_rc_range_parameters rc_range_params[DSC_NUM_BUF_RANGES]; u16 rc_model_size; u8 flatness_min_qp; u8 flatness_max_qp; u8 initial_scale_value; u16 scale_decrement_interval; u16 scale_increment_interval; u16 nfl_bpg_offset; u16 slice_bpg_offset; u16 final_offset; bool vbr_enable; u8 mux_word_size; u16 slice_chunk_size; u16 rc_bits; u8 dsc_version_minor; u8 dsc_version_major; bool native_422; bool native_420; u8 second_line_bpg_offset; u16 nsl_bpg_offset; u16 second_line_offset_adj; };}hjksbah}(h]h ]h"]h$]h&]jjuh1j?hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKIhjjubh)}(h **Members**h]j%)}(hj"kh]hMembers}(hj$khhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj kubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKvhjjubji)}(hhh](jn)}(hM``line_buf_depth`` Bits per component for previous reconstructed line buffer h](jt)}(h``line_buf_depth``h]jz)}(hjAkh]hline_buf_depth}(hjCkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?kubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKKhj;kubj)}(hhh]h)}(h9Bits per component for previous reconstructed line bufferh]h9Bits per component for previous reconstructed line buffer}(hjZkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVkhKKhjWkubah}(h]h ]h"]h$]h&]uh1jhj;kubeh}(h]h ]h"]h$]h&]uh1jmhjVkhKKhj8kubjn)}(h<``bits_per_component`` Bits per component to code (8/10/12) h](jt)}(h``bits_per_component``h]jz)}(hjzkh]hbits_per_component}(hj|khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxkubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKPhjtkubj)}(hhh]h)}(h$Bits per component to code (8/10/12)h]h$Bits per component to code (8/10/12)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKPhjkubah}(h]h ]h"]h$]h&]uh1jhjtkubeh}(h]h ]h"]h$]h&]uh1jmhjkhKPhj8kubjn)}(hm``convert_rgb`` Flag to indicate if RGB - YCoCg conversion is needed True if RGB input, False if YCoCg input h](jt)}(h``convert_rgb``h]jz)}(hjkh]h convert_rgb}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKUhjkubj)}(hhh]h)}(h\Flag to indicate if RGB - YCoCg conversion is needed True if RGB input, False if YCoCg inputh]h\Flag to indicate if RGB - YCoCg conversion is needed True if RGB input, False if YCoCg input}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKThjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjkhKUhj8kubjn)}(hB``slice_count`` Number fo slices per line used by the DSC encoder h](jt)}(h``slice_count``h]jz)}(hjkh]h slice_count}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKZhjkubj)}(hhh]h)}(h1Number fo slices per line used by the DSC encoderh]h1Number fo slices per line used by the DSC encoder}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKZhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjlhKZhj8kubjn)}(h.``slice_width`` Width of each slice in pixels h](jt)}(h``slice_width``h]jz)}(hj&lh]h slice_width}(hj(lhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$lubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhK^hj lubj)}(hhh]h)}(hWidth of each slice in pixelsh]hWidth of each slice in pixels}(hj?lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;lhK^hj` h](jt)}(h``rc_range_params``h]jz)}(hjoh]hrc_range_params}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjoubj)}(hhh]h)}(hzParameters for each of the RC ranges defined in :c:type:`struct drm_dsc_rc_range_parameters `h](h0Parameters for each of the RC ranges defined in }(hj phhhNhNubh)}(hJ:c:type:`struct drm_dsc_rc_range_parameters `h]jz)}(hjph]h"struct drm_dsc_rc_range_parameters}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_rc_range_parametersuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhj pubeh}(h]h ]h"]h$]h&]uh1hhj2phKhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjphKhj8kubjn)}(h)``rc_model_size`` Total size of RC model h](jt)}(h``rc_model_size``h]jz)}(hjKph]h rc_model_size}(hjMphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIpubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjEpubj)}(hhh]h)}(hTotal size of RC modelh]hTotal size of RC model}(hjdphhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`phKhjapubah}(h]h ]h"]h$]h&]uh1jhjEpubeh}(h]h ]h"]h$]h&]uh1jmhj`phKhj8kubjn)}(hB``flatness_min_qp`` Minimum QP where flatness information is sent h](jt)}(h``flatness_min_qp``h]jz)}(hjph]hflatness_min_qp}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhj~pubj)}(hhh]h)}(h-Minimum QP where flatness information is senth]h-Minimum QP where flatness information is sent}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjpubah}(h]h ]h"]h$]h&]uh1jhj~pubeh}(h]h ]h"]h$]h&]uh1jmhjphKhj8kubjn)}(hB``flatness_max_qp`` Maximum QP where flatness information is sent h](jt)}(h``flatness_max_qp``h]jz)}(hjph]hflatness_max_qp}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjpubj)}(hhh]h)}(h-Maximum QP where flatness information is senth]h-Maximum QP where flatness information is sent}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjphKhj8kubjn)}(h;``initial_scale_value`` Initial value for the scale factor h](jt)}(h``initial_scale_value``h]jz)}(hjph]hinitial_scale_value}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjpubj)}(hhh]h)}(h"Initial value for the scale factorh]h"Initial value for the scale factor}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj qhKhj qubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhj qhKhj8kubjn)}(h|``scale_decrement_interval`` Specifies number of group times between decrementing the scale factor at beginning of a slice. h](jt)}(h``scale_decrement_interval``h]jz)}(hj/qh]hscale_decrement_interval}(hj1qhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-qubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhj)qubj)}(hhh]h)}(h^Specifies number of group times between decrementing the scale factor at beginning of a slice.h]h^Specifies number of group times between decrementing the scale factor at beginning of a slice.}(hjHqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjEqubah}(h]h ]h"]h$]h&]uh1jhj)qubeh}(h]h ]h"]h$]h&]uh1jmhjDqhKhj8kubjn)}(h``scale_increment_interval`` Number of group times between incrementing the scale factor value used at the beginning of a slice. h](jt)}(h``scale_increment_interval``h]jz)}(hjiqh]hscale_increment_interval}(hjkqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgqubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjcqubj)}(hhh]h)}(hcNumber of group times between incrementing the scale factor value used at the beginning of a slice.h]hcNumber of group times between incrementing the scale factor value used at the beginning of a slice.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjqubah}(h]h ]h"]h$]h&]uh1jhjcqubeh}(h]h ]h"]h$]h&]uh1jmhj~qhKhj8kubjn)}(h8``nfl_bpg_offset`` Non first line BPG offset to be used h](jt)}(h``nfl_bpg_offset``h]jz)}(hjqh]hnfl_bpg_offset}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjqubj)}(hhh]h)}(h$Non first line BPG offset to be usedh]h$Non first line BPG offset to be used}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqhKhj8kubjn)}(h:``slice_bpg_offset`` BPG offset used to enforce slice bit h](jt)}(h``slice_bpg_offset``h]jz)}(hjqh]hslice_bpg_offset}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjqubj)}(hhh]h)}(h$BPG offset used to enforce slice bith]h$BPG offset used to enforce slice bit}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqhKhj8kubjn)}(h=``final_offset`` Final RC linear transformation offset value h](jt)}(h``final_offset``h]jz)}(hjrh]h final_offset}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjrubj)}(hhh]h)}(h+Final RC linear transformation offset valueh]h+Final RC linear transformation offset value}(hj.rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*rhKhj+rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhj*rhKhj8kubjn)}(h>``vbr_enable`` True if VBR mode is enabled, false if disabled h](jt)}(h``vbr_enable``h]jz)}(hjNrh]h vbr_enable}(hjPrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLrubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjHrubj)}(hhh]h)}(h.True if VBR mode is enabled, false if disabledh]h.True if VBR mode is enabled, false if disabled}(hjgrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcrhKhjdrubah}(h]h ]h"]h$]h&]uh1jhjHrubeh}(h]h ]h"]h$]h&]uh1jmhjcrhKhj8kubjn)}(h7``mux_word_size`` Mux word size (in bits) for SSM mode h](jt)}(h``mux_word_size``h]jz)}(hjrh]h mux_word_size}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjrubj)}(hhh]h)}(h$Mux word size (in bits) for SSM modeh]h$Mux word size (in bits) for SSM mode}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhKhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjrhKhj8kubjn)}(hb``slice_chunk_size`` The (max) size in bytes of the "chunks" that are used in slice multiplexing. h](jt)}(h``slice_chunk_size``h]jz)}(hjrh]hslice_chunk_size}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjrubj)}(hhh]h)}(hLThe (max) size in bytes of the "chunks" that are used in slice multiplexing.h]hPThe (max) size in bytes of the “chunks” that are used in slice multiplexing.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjrhKhj8kubjn)}(h-``rc_bits`` Rate control buffer size in bits h](jt)}(h ``rc_bits``h]jz)}(hjrh]hrc_bits}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjrubj)}(hhh]h)}(h Rate control buffer size in bitsh]h Rate control buffer size in bits}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjshKhj8kubjn)}(h(``dsc_version_minor`` DSC minor version h](jt)}(h``dsc_version_minor``h]jz)}(hj3sh]hdsc_version_minor}(hj5shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1subah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhj-subj)}(hhh]h)}(hDSC minor versionh]hDSC minor version}(hjLshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHshKhjIsubah}(h]h ]h"]h$]h&]uh1jhj-subeh}(h]h ]h"]h$]h&]uh1jmhjHshKhj8kubjn)}(h(``dsc_version_major`` DSC major version h](jt)}(h``dsc_version_major``h]jz)}(hjlsh]hdsc_version_major}(hjnshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjsubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjfsubj)}(hhh]h)}(hDSC major versionh]hDSC major version}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjfsubeh}(h]h ]h"]h$]h&]uh1jmhjshKhj8kubjn)}(h:``native_422`` True if Native 4:2:2 supported, else false h](jt)}(h``native_422``h]jz)}(hjsh]h native_422}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjsubj)}(hhh]h)}(h*True if Native 4:2:2 supported, else falseh]h*True if Native 4:2:2 supported, else false}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshKhj8kubjn)}(h:``native_420`` True if Native 4:2:0 supported else false. h](jt)}(h``native_420``h]jz)}(hjsh]h native_420}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKhjsubj)}(hhh]h)}(h*True if Native 4:2:0 supported else false.h]h*True if Native 4:2:0 supported else false.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshKhj8kubjn)}(hZ``second_line_bpg_offset`` Additional bits/grp for seconnd line of slice for native 4:2:0 h](jt)}(h``second_line_bpg_offset``h]jz)}(hjth]hsecond_line_bpg_offset}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjtubj)}(hhh]h)}(h>Additional bits/grp for seconnd line of slice for native 4:2:0h]h>Additional bits/grp for seconnd line of slice for native 4:2:0}(hj0thhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,thMhj-tubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhj,thMhj8kubjn)}(h\``nsl_bpg_offset`` Num of bits deallocated for each grp that is not in second line of slice h](jt)}(h``nsl_bpg_offset``h]jz)}(hjPth]hnsl_bpg_offset}(hjRthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNtubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjJtubj)}(hhh]h)}(hHNum of bits deallocated for each grp that is not in second line of sliceh]hHNum of bits deallocated for each grp that is not in second line of slice}(hjithhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjftubah}(h]h ]h"]h$]h&]uh1jhjJtubeh}(h]h ]h"]h$]h&]uh1jmhjethMhj8kubjn)}(hQ``second_line_offset_adj`` Offset adjustment for second line in Native 4:2:0 modeh](jt)}(h``second_line_offset_adj``h]jz)}(hjth]hsecond_line_offset_adj}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM hjtubj)}(hhh]h)}(h6Offset adjustment for second line in Native 4:2:0 modeh]h6Offset adjustment for second line in Native 4:2:0 mode}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM hjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthM hj8kubeh}(h]h ]h"]h$]h&]uh1jhhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhjhhNubh)}(h**Description**h]j%)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjhhhubh)}(h{Driver populates this structure with all the parameters required to configure the display stream compression on the source.h]h{Driver populates this structure with all the parameters required to configure the display stream compression on the source.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKDhjhhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dsc_picture_parameter_set (C struct)c.drm_dsc_picture_parameter_sethNtauh1jxhjhhhhjhhNubj)}(hhh](j)}(hdrm_dsc_picture_parameter_seth]j)}(h$struct drm_dsc_picture_parameter_seth](j)}(hjh]hstruct}(hj uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhKJubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhKJubj)}(hdrm_dsc_picture_parameter_seth]j)}(hjuh]hdrm_dsc_picture_parameter_set}(hj+uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'uubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjuhKJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjuhKJubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jhjuhKJhjuhhubj)}(hhh]h)}(h-Represents 128 bytes of Picture Parameter Seth]h-Represents 128 bytes of Picture Parameter Set}(hjMuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjJuhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhKJubeh}(h]h ](jstructeh"]h$]h&]jjjjeujjeujjjuh1jhhhjhhjhhNubj)}(hXk**Definition**:: struct drm_dsc_picture_parameter_set { u8 dsc_version; u8 pps_identifier; u8 pps_reserved; u8 pps_3; u8 pps_4; u8 bits_per_pixel_low; __be16 pic_height; __be16 pic_width; __be16 slice_height; __be16 slice_width; __be16 chunk_size; u8 initial_xmit_delay_high; u8 initial_xmit_delay_low; __be16 initial_dec_delay; u8 pps20_reserved; u8 initial_scale_value; __be16 scale_increment_interval; u8 scale_decrement_interval_high; u8 scale_decrement_interval_low; u8 pps26_reserved; u8 first_line_bpg_offset; __be16 nfl_bpg_offset; __be16 slice_bpg_offset; __be16 initial_offset; __be16 final_offset; u8 flatness_min_qp; u8 flatness_max_qp; __be16 rc_model_size; u8 rc_edge_factor; u8 rc_quant_incr_limit0; u8 rc_quant_incr_limit1; u8 rc_tgt_offset; u8 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; __be16 rc_range_parameters[DSC_NUM_BUF_RANGES]; u8 native_422_420; u8 second_line_bpg_offset; __be16 nsl_bpg_offset; __be16 second_line_offset_adj; u32 pps_long_94_reserved; u32 pps_long_98_reserved; u32 pps_long_102_reserved; u32 pps_long_106_reserved; u32 pps_long_110_reserved; u32 pps_long_114_reserved; u32 pps_long_118_reserved; u32 pps_long_122_reserved; __be16 pps_short_126_reserved; }; **Members** ``dsc_version`` PPS0[3:0] - dsc_version_minor: Contains Minor version of DSC PPS0[7:4] - dsc_version_major: Contains major version of DSC ``pps_identifier`` PPS1[7:0] - Application specific identifier that can be used to differentiate between different PPS tables. ``pps_reserved`` PPS2[7:0]- RESERVED Byte ``pps_3`` PPS3[3:0] - linebuf_depth: Contains linebuffer bit depth used to generate the bitstream. (0x0 - 16 bits for DSC 1.2, 0x8 - 8 bits, 0xA - 10 bits, 0xB - 11 bits, 0xC - 12 bits, 0xD - 13 bits, 0xE - 14 bits for DSC1.2, 0xF - 14 bits for DSC 1.2. PPS3[7:4] - bits_per_component: Bits per component for the original pixels of the encoded picture. 0x0 = 16bpc (allowed only when dsc_version_minor = 0x2) 0x8 = 8bpc, 0xA = 10bpc, 0xC = 12bpc, 0xE = 14bpc (also allowed only when dsc_minor_version = 0x2) ``pps_4`` PPS4[1:0] -These are the most significant 2 bits of compressed BPP bits_per_pixel[9:0] syntax element. PPS4[2] - vbr_enable: 0 = VBR disabled, 1 = VBR enabled PPS4[3] - simple_422: Indicates if decoder drops samples to reconstruct the 4:2:2 picture. PPS4[4] - Convert_rgb: Indicates if DSC color space conversion is active. PPS4[5] - blobk_pred_enable: Indicates if BP is used to code any groups in picture PPS4[7:6] - Reseved bits ``bits_per_pixel_low`` PPS5[7:0] - This indicates the lower significant 8 bits of the compressed BPP bits_per_pixel[9:0] element. ``pic_height`` PPS6[7:0], PPS7[7:0] -pic_height: Specifies the number of pixel rows within the raster. ``pic_width`` PPS8[7:0], PPS9[7:0] - pic_width: Number of pixel columns within the raster. ``slice_height`` PPS10[7:0], PPS11[7:0] - Slice height in units of pixels. ``slice_width`` PPS12[7:0], PPS13[7:0] - Slice width in terms of pixels. ``chunk_size`` PPS14[7:0], PPS15[7:0] - Size in units of bytes of the chunks that are used for slice multiplexing. ``initial_xmit_delay_high`` PPS16[1:0] - Most Significant two bits of initial transmission delay. It specifies the number of pixel times that the encoder waits before transmitting data from its rate buffer. PPS16[7:2] - Reserved ``initial_xmit_delay_low`` PPS17[7:0] - Least significant 8 bits of initial transmission delay. ``initial_dec_delay`` PPS18[7:0], PPS19[7:0] - Initial decoding delay which is the number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels. ``pps20_reserved`` PPS20[7:0] - Reserved ``initial_scale_value`` PPS21[5:0] - Initial rcXformScale factor used at beginning of a slice. PPS21[7:6] - Reserved ``scale_increment_interval`` PPS22[7:0], PPS23[7:0] - Number of group times between incrementing the rcXformScale factor at end of a slice. ``scale_decrement_interval_high`` PPS24[3:0] - Higher 4 bits indicating number of group times between decrementing the rcXformScale factor at beginning of a slice. PPS24[7:4] - Reserved ``scale_decrement_interval_low`` PPS25[7:0] - Lower 8 bits of scale decrement interval ``pps26_reserved`` PPS26[7:0] ``first_line_bpg_offset`` PPS27[4:0] - Number of additional bits that are allocated for each group on first line of a slice. PPS27[7:5] - Reserved ``nfl_bpg_offset`` PPS28[7:0], PPS29[7:0] - Number of bits including frac bits deallocated for each group for groups after the first line of slice. ``slice_bpg_offset`` PPS30, PPS31[7:0] - Number of bits that are deallocated for each group to enforce the slice constraint. ``initial_offset`` PPS32,33[7:0] - Initial value for rcXformOffset ``final_offset`` PPS34,35[7:0] - Maximum end-of-slice value for rcXformOffset ``flatness_min_qp`` PPS36[4:0] - Minimum QP at which flatness is signaled and flatness QP adjustment is made. PPS36[7:5] - Reserved ``flatness_max_qp`` PPS37[4:0] - Max QP at which flatness is signalled and the flatness adjustment is made. PPS37[7:5] - Reserved ``rc_model_size`` PPS38,39[7:0] - Number of bits within RC Model. ``rc_edge_factor`` PPS40[3:0] - Ratio of current activity vs, previous activity to determine presence of edge. PPS40[7:4] - Reserved ``rc_quant_incr_limit0`` PPS41[4:0] - QP threshold used in short term RC PPS41[7:5] - Reserved ``rc_quant_incr_limit1`` PPS42[4:0] - QP threshold used in short term RC PPS42[7:5] - Reserved ``rc_tgt_offset`` PPS43[3:0] - Lower end of the variability range around the target bits per group that is allowed by short term RC. PPS43[7:4]- Upper end of the variability range around the target bits per group that i allowed by short term rc. ``rc_buf_thresh`` PPS44[7:0] - PPS57[7:0] - Specifies the thresholds in RC model for the 15 ranges defined by 14 thresholds. ``rc_range_parameters`` PPS58[7:0] - PPS87[7:0] Parameters that correspond to each of the 15 ranges. ``native_422_420`` PPS88[0] - 0 = Native 4:2:2 not used 1 = Native 4:2:2 used PPS88[1] - 0 = Native 4:2:0 not use 1 = Native 4:2:0 used PPS88[7:2] - Reserved 6 bits ``second_line_bpg_offset`` PPS89[4:0] - Additional bits/group budget for the second line of a slice in Native 4:2:0 mode. Set to 0 if DSC minor version is 1 or native420 is 0. PPS89[7:5] - Reserved ``nsl_bpg_offset`` PPS90[7:0], PPS91[7:0] - Number of bits that are deallocated for each group that is not in the second line of a slice. ``second_line_offset_adj`` PPS92[7:0], PPS93[7:0] - Used as offset adjustment for the second line in Native 4:2:0 mode. ``pps_long_94_reserved`` PPS 94, 95, 96, 97 - Reserved ``pps_long_98_reserved`` PPS 98, 99, 100, 101 - Reserved ``pps_long_102_reserved`` PPS 102, 103, 104, 105 - Reserved ``pps_long_106_reserved`` PPS 106, 107, 108, 109 - reserved ``pps_long_110_reserved`` PPS 110, 111, 112, 113 - reserved ``pps_long_114_reserved`` PPS 114 - 117 - reserved ``pps_long_118_reserved`` PPS 118 - 121 - reserved ``pps_long_122_reserved`` PPS 122- 125 - reserved ``pps_short_126_reserved`` PPS 126, 127 - reservedh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjquhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmuubh:}(hjmuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjiuubj@)}(hXVstruct drm_dsc_picture_parameter_set { u8 dsc_version; u8 pps_identifier; u8 pps_reserved; u8 pps_3; u8 pps_4; u8 bits_per_pixel_low; __be16 pic_height; __be16 pic_width; __be16 slice_height; __be16 slice_width; __be16 chunk_size; u8 initial_xmit_delay_high; u8 initial_xmit_delay_low; __be16 initial_dec_delay; u8 pps20_reserved; u8 initial_scale_value; __be16 scale_increment_interval; u8 scale_decrement_interval_high; u8 scale_decrement_interval_low; u8 pps26_reserved; u8 first_line_bpg_offset; __be16 nfl_bpg_offset; __be16 slice_bpg_offset; __be16 initial_offset; __be16 final_offset; u8 flatness_min_qp; u8 flatness_max_qp; __be16 rc_model_size; u8 rc_edge_factor; u8 rc_quant_incr_limit0; u8 rc_quant_incr_limit1; u8 rc_tgt_offset; u8 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; __be16 rc_range_parameters[DSC_NUM_BUF_RANGES]; u8 native_422_420; u8 second_line_bpg_offset; __be16 nsl_bpg_offset; __be16 second_line_offset_adj; u32 pps_long_94_reserved; u32 pps_long_98_reserved; u32 pps_long_102_reserved; u32 pps_long_106_reserved; u32 pps_long_110_reserved; u32 pps_long_114_reserved; u32 pps_long_118_reserved; u32 pps_long_122_reserved; __be16 pps_short_126_reserved; };h]hXVstruct drm_dsc_picture_parameter_set { u8 dsc_version; u8 pps_identifier; u8 pps_reserved; u8 pps_3; u8 pps_4; u8 bits_per_pixel_low; __be16 pic_height; __be16 pic_width; __be16 slice_height; __be16 slice_width; __be16 chunk_size; u8 initial_xmit_delay_high; u8 initial_xmit_delay_low; __be16 initial_dec_delay; u8 pps20_reserved; u8 initial_scale_value; __be16 scale_increment_interval; u8 scale_decrement_interval_high; u8 scale_decrement_interval_low; u8 pps26_reserved; u8 first_line_bpg_offset; __be16 nfl_bpg_offset; __be16 slice_bpg_offset; __be16 initial_offset; __be16 final_offset; u8 flatness_min_qp; u8 flatness_max_qp; __be16 rc_model_size; u8 rc_edge_factor; u8 rc_quant_incr_limit0; u8 rc_quant_incr_limit1; u8 rc_tgt_offset; u8 rc_buf_thresh[DSC_NUM_BUF_RANGES - 1]; __be16 rc_range_parameters[DSC_NUM_BUF_RANGES]; u8 native_422_420; u8 second_line_bpg_offset; __be16 nsl_bpg_offset; __be16 second_line_offset_adj; u32 pps_long_94_reserved; u32 pps_long_98_reserved; u32 pps_long_102_reserved; u32 pps_long_106_reserved; u32 pps_long_110_reserved; u32 pps_long_114_reserved; u32 pps_long_118_reserved; u32 pps_long_122_reserved; __be16 pps_short_126_reserved; };}hjusbah}(h]h ]h"]h$]h&]jjuh1j?hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjiuubh)}(h **Members**h]j%)}(hjuh]hMembers}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMIhjiuubji)}(hhh](jn)}(h``dsc_version`` PPS0[3:0] - dsc_version_minor: Contains Minor version of DSC PPS0[7:4] - dsc_version_major: Contains major version of DSC h](jt)}(h``dsc_version``h]jz)}(hjuh]h dsc_version}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjuubj)}(hhh]h)}(hyPPS0[3:0] - dsc_version_minor: Contains Minor version of DSC PPS0[7:4] - dsc_version_major: Contains major version of DSCh]hyPPS0[3:0] - dsc_version_minor: Contains Minor version of DSC PPS0[7:4] - dsc_version_major: Contains major version of DSC}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjuhMhjuubjn)}(h``pps_identifier`` PPS1[7:0] - Application specific identifier that can be used to differentiate between different PPS tables. h](jt)}(h``pps_identifier``h]jz)}(hjuh]hpps_identifier}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM%hjuubj)}(hhh]h)}(hkPPS1[7:0] - Application specific identifier that can be used to differentiate between different PPS tables.h]hkPPS1[7:0] - Application specific identifier that can be used to differentiate between different PPS tables.}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM$hj vubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhj vhM%hjuubjn)}(h*``pps_reserved`` PPS2[7:0]- RESERVED Byte h](jt)}(h``pps_reserved``h]jz)}(hj.vh]h pps_reserved}(hj0vhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,vubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM*hj(vubj)}(hhh]h)}(hPPS2[7:0]- RESERVED Byteh]hPPS2[7:0]- RESERVED Byte}(hjGvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCvhM*hjDvubah}(h]h ]h"]h$]h&]uh1jhj(vubeh}(h]h ]h"]h$]h&]uh1jmhjCvhM*hjuubjn)}(hX``pps_3`` PPS3[3:0] - linebuf_depth: Contains linebuffer bit depth used to generate the bitstream. (0x0 - 16 bits for DSC 1.2, 0x8 - 8 bits, 0xA - 10 bits, 0xB - 11 bits, 0xC - 12 bits, 0xD - 13 bits, 0xE - 14 bits for DSC1.2, 0xF - 14 bits for DSC 1.2. PPS3[7:4] - bits_per_component: Bits per component for the original pixels of the encoded picture. 0x0 = 16bpc (allowed only when dsc_version_minor = 0x2) 0x8 = 8bpc, 0xA = 10bpc, 0xC = 12bpc, 0xE = 14bpc (also allowed only when dsc_minor_version = 0x2) h](jt)}(h ``pps_3``h]jz)}(hjgvh]hpps_3}(hjivhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjevubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM7hjavubj)}(hhh]h)}(hXPPS3[3:0] - linebuf_depth: Contains linebuffer bit depth used to generate the bitstream. (0x0 - 16 bits for DSC 1.2, 0x8 - 8 bits, 0xA - 10 bits, 0xB - 11 bits, 0xC - 12 bits, 0xD - 13 bits, 0xE - 14 bits for DSC1.2, 0xF - 14 bits for DSC 1.2. PPS3[7:4] - bits_per_component: Bits per component for the original pixels of the encoded picture. 0x0 = 16bpc (allowed only when dsc_version_minor = 0x2) 0x8 = 8bpc, 0xA = 10bpc, 0xC = 12bpc, 0xE = 14bpc (also allowed only when dsc_minor_version = 0x2)h]hXPPS3[3:0] - linebuf_depth: Contains linebuffer bit depth used to generate the bitstream. (0x0 - 16 bits for DSC 1.2, 0x8 - 8 bits, 0xA - 10 bits, 0xB - 11 bits, 0xC - 12 bits, 0xD - 13 bits, 0xE - 14 bits for DSC1.2, 0xF - 14 bits for DSC 1.2. PPS3[7:4] - bits_per_component: Bits per component for the original pixels of the encoded picture. 0x0 = 16bpc (allowed only when dsc_version_minor = 0x2) 0x8 = 8bpc, 0xA = 10bpc, 0xC = 12bpc, 0xE = 14bpc (also allowed only when dsc_minor_version = 0x2)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM/hj}vubah}(h]h ]h"]h$]h&]uh1jhjavubeh}(h]h ]h"]h$]h&]uh1jmhj|vhM7hjuubjn)}(hX``pps_4`` PPS4[1:0] -These are the most significant 2 bits of compressed BPP bits_per_pixel[9:0] syntax element. PPS4[2] - vbr_enable: 0 = VBR disabled, 1 = VBR enabled PPS4[3] - simple_422: Indicates if decoder drops samples to reconstruct the 4:2:2 picture. PPS4[4] - Convert_rgb: Indicates if DSC color space conversion is active. PPS4[5] - blobk_pred_enable: Indicates if BP is used to code any groups in picture PPS4[7:6] - Reseved bits h](jt)}(h ``pps_4``h]jz)}(hjvh]hpps_4}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMEhjvubj)}(hhh]h)}(hXPPS4[1:0] -These are the most significant 2 bits of compressed BPP bits_per_pixel[9:0] syntax element. PPS4[2] - vbr_enable: 0 = VBR disabled, 1 = VBR enabled PPS4[3] - simple_422: Indicates if decoder drops samples to reconstruct the 4:2:2 picture. PPS4[4] - Convert_rgb: Indicates if DSC color space conversion is active. PPS4[5] - blobk_pred_enable: Indicates if BP is used to code any groups in picture PPS4[7:6] - Reseved bitsh]hXPPS4[1:0] -These are the most significant 2 bits of compressed BPP bits_per_pixel[9:0] syntax element. PPS4[2] - vbr_enable: 0 = VBR disabled, 1 = VBR enabled PPS4[3] - simple_422: Indicates if decoder drops samples to reconstruct the 4:2:2 picture. PPS4[4] - Convert_rgb: Indicates if DSC color space conversion is active. PPS4[5] - blobk_pred_enable: Indicates if BP is used to code any groups in picture PPS4[7:6] - Reseved bits}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM<hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjvhMEhjuubjn)}(h``bits_per_pixel_low`` PPS5[7:0] - This indicates the lower significant 8 bits of the compressed BPP bits_per_pixel[9:0] element. h](jt)}(h``bits_per_pixel_low``h]jz)}(hjvh]hbits_per_pixel_low}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMKhjvubj)}(hhh]h)}(hjPPS5[7:0] - This indicates the lower significant 8 bits of the compressed BPP bits_per_pixel[9:0] element.h]hjPPS5[7:0] - This indicates the lower significant 8 bits of the compressed BPP bits_per_pixel[9:0] element.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMJhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjvhMKhjuubjn)}(hg``pic_height`` PPS6[7:0], PPS7[7:0] -pic_height: Specifies the number of pixel rows within the raster. h](jt)}(h``pic_height``h]jz)}(hjwh]h pic_height}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMQhjwubj)}(hhh]h)}(hWPPS6[7:0], PPS7[7:0] -pic_height: Specifies the number of pixel rows within the raster.h]hWPPS6[7:0], PPS7[7:0] -pic_height: Specifies the number of pixel rows within the raster.}(hj.whhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMPhj+wubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhj*whMQhjuubjn)}(h[``pic_width`` PPS8[7:0], PPS9[7:0] - pic_width: Number of pixel columns within the raster. h](jt)}(h ``pic_width``h]jz)}(hjOwh]h pic_width}(hjQwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMwubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMWhjIwubj)}(hhh]h)}(hLPPS8[7:0], PPS9[7:0] - pic_width: Number of pixel columns within the raster.h]hLPPS8[7:0], PPS9[7:0] - pic_width: Number of pixel columns within the raster.}(hjhwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMVhjewubah}(h]h ]h"]h$]h&]uh1jhjIwubeh}(h]h ]h"]h$]h&]uh1jmhjdwhMWhjuubjn)}(hK``slice_height`` PPS10[7:0], PPS11[7:0] - Slice height in units of pixels. h](jt)}(h``slice_height``h]jz)}(hjwh]h slice_height}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM\hjwubj)}(hhh]h)}(h9PPS10[7:0], PPS11[7:0] - Slice height in units of pixels.h]h9PPS10[7:0], PPS11[7:0] - Slice height in units of pixels.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM\hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjwhM\hjuubjn)}(hI``slice_width`` PPS12[7:0], PPS13[7:0] - Slice width in terms of pixels. h](jt)}(h``slice_width``h]jz)}(hjwh]h slice_width}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMahjwubj)}(hhh]h)}(h8PPS12[7:0], PPS13[7:0] - Slice width in terms of pixels.h]h8PPS12[7:0], PPS13[7:0] - Slice width in terms of pixels.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMahjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjwhMahjuubjn)}(hs``chunk_size`` PPS14[7:0], PPS15[7:0] - Size in units of bytes of the chunks that are used for slice multiplexing. h](jt)}(h``chunk_size``h]jz)}(hjwh]h chunk_size}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMghjwubj)}(hhh]h)}(hcPPS14[7:0], PPS15[7:0] - Size in units of bytes of the chunks that are used for slice multiplexing.h]hcPPS14[7:0], PPS15[7:0] - Size in units of bytes of the chunks that are used for slice multiplexing.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMfhjxubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjxhMghjuubjn)}(h``initial_xmit_delay_high`` PPS16[1:0] - Most Significant two bits of initial transmission delay. It specifies the number of pixel times that the encoder waits before transmitting data from its rate buffer. PPS16[7:2] - Reserved h](jt)}(h``initial_xmit_delay_high``h]jz)}(hj5xh]hinitial_xmit_delay_high}(hj7xhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3xubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMohj/xubj)}(hhh]h)}(hPPS16[1:0] - Most Significant two bits of initial transmission delay. It specifies the number of pixel times that the encoder waits before transmitting data from its rate buffer. PPS16[7:2] - Reservedh]hPPS16[1:0] - Most Significant two bits of initial transmission delay. It specifies the number of pixel times that the encoder waits before transmitting data from its rate buffer. PPS16[7:2] - Reserved}(hjNxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMlhjKxubah}(h]h ]h"]h$]h&]uh1jhj/xubeh}(h]h ]h"]h$]h&]uh1jmhjJxhMohjuubjn)}(h```initial_xmit_delay_low`` PPS17[7:0] - Least significant 8 bits of initial transmission delay. h](jt)}(h``initial_xmit_delay_low``h]jz)}(hjoxh]hinitial_xmit_delay_low}(hjqxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmxubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMthjixubj)}(hhh]h)}(hDPPS17[7:0] - Least significant 8 bits of initial transmission delay.h]hDPPS17[7:0] - Least significant 8 bits of initial transmission delay.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMthjxubah}(h]h ]h"]h$]h&]uh1jhjixubeh}(h]h ]h"]h$]h&]uh1jmhjxhMthjuubjn)}(h``initial_dec_delay`` PPS18[7:0], PPS19[7:0] - Initial decoding delay which is the number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels. h](jt)}(h``initial_dec_delay``h]jz)}(hjxh]hinitial_dec_delay}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhM{hjxubj)}(hhh]h)}(hPPS18[7:0], PPS19[7:0] - Initial decoding delay which is the number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels.h]hPPS18[7:0], PPS19[7:0] - Initial decoding delay which is the number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMyhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjxhM{hjuubjn)}(h)``pps20_reserved`` PPS20[7:0] - Reserved h](jt)}(h``pps20_reserved``h]jz)}(hjxh]hpps20_reserved}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjxubj)}(hhh]h)}(hPPS20[7:0] - Reservedh]hPPS20[7:0] - Reserved}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjxhMhjuubjn)}(hu``initial_scale_value`` PPS21[5:0] - Initial rcXformScale factor used at beginning of a slice. PPS21[7:6] - Reserved h](jt)}(h``initial_scale_value``h]jz)}(hjyh]hinitial_scale_value}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjyubj)}(hhh]h)}(h\PPS21[5:0] - Initial rcXformScale factor used at beginning of a slice. PPS21[7:6] - Reservedh]h\PPS21[5:0] - Initial rcXformScale factor used at beginning of a slice. PPS21[7:6] - Reserved}(hj4yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhj1yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhj0yhMhjuubjn)}(h``scale_increment_interval`` PPS22[7:0], PPS23[7:0] - Number of group times between incrementing the rcXformScale factor at end of a slice. h](jt)}(h``scale_increment_interval``h]jz)}(hjUyh]hscale_increment_interval}(hjWyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSyubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjOyubj)}(hhh]h)}(hnPPS22[7:0], PPS23[7:0] - Number of group times between incrementing the rcXformScale factor at end of a slice.h]hnPPS22[7:0], PPS23[7:0] - Number of group times between incrementing the rcXformScale factor at end of a slice.}(hjnyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjkyubah}(h]h ]h"]h$]h&]uh1jhjOyubeh}(h]h ]h"]h$]h&]uh1jmhjjyhMhjuubjn)}(h``scale_decrement_interval_high`` PPS24[3:0] - Higher 4 bits indicating number of group times between decrementing the rcXformScale factor at beginning of a slice. PPS24[7:4] - Reserved h](jt)}(h!``scale_decrement_interval_high``h]jz)}(hjyh]hscale_decrement_interval_high}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjyubj)}(hhh]h)}(hPPS24[3:0] - Higher 4 bits indicating number of group times between decrementing the rcXformScale factor at beginning of a slice. PPS24[7:4] - Reservedh]hPPS24[3:0] - Higher 4 bits indicating number of group times between decrementing the rcXformScale factor at beginning of a slice. PPS24[7:4] - Reserved}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjuubjn)}(hW``scale_decrement_interval_low`` PPS25[7:0] - Lower 8 bits of scale decrement interval h](jt)}(h ``scale_decrement_interval_low``h]jz)}(hjyh]hscale_decrement_interval_low}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjyubj)}(hhh]h)}(h5PPS25[7:0] - Lower 8 bits of scale decrement intervalh]h5PPS25[7:0] - Lower 8 bits of scale decrement interval}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjuubjn)}(h``pps26_reserved`` PPS26[7:0] h](jt)}(h``pps26_reserved``h]jz)}(hjzh]hpps26_reserved}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjyubj)}(hhh]h)}(h PPS26[7:0]h]h PPS26[7:0]}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjuubjn)}(h``first_line_bpg_offset`` PPS27[4:0] - Number of additional bits that are allocated for each group on first line of a slice. PPS27[7:5] - Reserved h](jt)}(h``first_line_bpg_offset``h]jz)}(hj;zh]hfirst_line_bpg_offset}(hj=zhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9zubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhj5zubj)}(hhh]h)}(hxPPS27[4:0] - Number of additional bits that are allocated for each group on first line of a slice. PPS27[7:5] - Reservedh]hxPPS27[4:0] - Number of additional bits that are allocated for each group on first line of a slice. PPS27[7:5] - Reserved}(hjTzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjQzubah}(h]h ]h"]h$]h&]uh1jhj5zubeh}(h]h ]h"]h$]h&]uh1jmhjPzhMhjuubjn)}(h``nfl_bpg_offset`` PPS28[7:0], PPS29[7:0] - Number of bits including frac bits deallocated for each group for groups after the first line of slice. h](jt)}(h``nfl_bpg_offset``h]jz)}(hjuzh]hnfl_bpg_offset}(hjwzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjszubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjozubj)}(hhh]h)}(hPPS28[7:0], PPS29[7:0] - Number of bits including frac bits deallocated for each group for groups after the first line of slice.h]hPPS28[7:0], PPS29[7:0] - Number of bits including frac bits deallocated for each group for groups after the first line of slice.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjzubah}(h]h ]h"]h$]h&]uh1jhjozubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjuubjn)}(h}``slice_bpg_offset`` PPS30, PPS31[7:0] - Number of bits that are deallocated for each group to enforce the slice constraint. h](jt)}(h``slice_bpg_offset``h]jz)}(hjzh]hslice_bpg_offset}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjzubj)}(hhh]h)}(hgPPS30, PPS31[7:0] - Number of bits that are deallocated for each group to enforce the slice constraint.h]hgPPS30, PPS31[7:0] - Number of bits that are deallocated for each group to enforce the slice constraint.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjuubjn)}(hC``initial_offset`` PPS32,33[7:0] - Initial value for rcXformOffset h](jt)}(h``initial_offset``h]jz)}(hjzh]hinitial_offset}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhjzubj)}(hhh]h)}(h/PPS32,33[7:0] - Initial value for rcXformOffseth]h/PPS32,33[7:0] - Initial value for rcXformOffset}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjuubjn)}(hN``final_offset`` PPS34,35[7:0] - Maximum end-of-slice value for rcXformOffset h](jt)}(h``final_offset``h]jz)}(hj"{h]h final_offset}(hj${hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj {ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMhj{ubj)}(hhh]h)}(h` ``pps_payload`` PPS payload fields as per DSC specification Table 4-1 as represented in :c:type:`struct drm_dsc_picture_parameter_set `h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMKhjubj@)}(h|struct drm_dsc_pps_infoframe { struct dp_sdp_header pps_header; struct drm_dsc_picture_parameter_set pps_payload; };h]h|struct drm_dsc_pps_infoframe { struct dp_sdp_header pps_header; struct drm_dsc_picture_parameter_set pps_payload; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMMhjubh)}(h **Members**h]j%)}(hj%h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMRhjubji)}(hhh](jn)}(hq``pps_header`` Header for PPS as per DP SDP header format of type :c:type:`struct dp_sdp_header ` h](jt)}(h``pps_header``h]jz)}(hjDh]h pps_header}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMRhj>ubj)}(hhh]h)}(haHeader for PPS as per DP SDP header format of type :c:type:`struct dp_sdp_header `h](h3Header for PPS as per DP SDP header format of type }(hj]hhhNhNubh)}(h.:c:type:`struct dp_sdp_header `h]jz)}(hjgh]hstruct dp_sdp_header}(hjihhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj dp_sdp_headeruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMQhj]ubeh}(h]h ]h"]h$]h&]uh1hhjhMQhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhMRhj;ubjn)}(h``pps_payload`` PPS payload fields as per DSC specification Table 4-1 as represented in :c:type:`struct drm_dsc_picture_parameter_set `h](jt)}(h``pps_payload``h]jz)}(hjh]h pps_payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMShjubj)}(hhh]h)}(hPPS payload fields as per DSC specification Table 4-1 as represented in :c:type:`struct drm_dsc_picture_parameter_set `h](hHPPS payload fields as per DSC specification Table 4-1 as represented in }(hjhhhNhNubh)}(hN:c:type:`struct drm_dsc_picture_parameter_set `h]jz)}(hjh]h$struct drm_dsc_picture_parameter_set}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_picture_parameter_setuh1hhjhMShjubeh}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMShj;ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhjhhNubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMWhjhhhubh)}(hXThis structure represents the DSC PPS infoframe required to send the Picture Parameter Set metadata required before enabling VESA Display Stream Compression. This is based on the DP Secondary Data Packet structure and comprises of SDP Header as defined :c:type:`struct dp_sdp_header ` in drm_dp_helper.h and PPS payload defined in :c:type:`struct drm_dsc_picture_parameter_set `.h](hThis structure represents the DSC PPS infoframe required to send the Picture Parameter Set metadata required before enabling VESA Display Stream Compression. This is based on the DP Secondary Data Packet structure and comprises of SDP Header as defined }(hjhhhNhNubh)}(h.:c:type:`struct dp_sdp_header `h]jz)}(hjh]hstruct dp_sdp_header}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj dp_sdp_headeruh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./include/drm/display/drm_dsc.hhMHhjubh/ in drm_dp_helper.h and PPS payload defined in }(hjhhhNhNubh)}(hN:c:type:`struct drm_dsc_picture_parameter_set `h]jz)}(hjBh]h$struct drm_dsc_picture_parameter_set}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_picture_parameter_setuh1hhj;hMHhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMHhjhhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dsc_dp_pps_header_init (C function)c.drm_dsc_dp_pps_header_inithNtauh1jxhjhhhhNhNubj)}(hhh](j)}(hBvoid drm_dsc_dp_pps_header_init (struct dp_sdp_header *pps_header)h]j)}(hAvoid drm_dsc_dp_pps_header_init(struct dp_sdp_header *pps_header)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK-ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhK-ubj)}(hdrm_dsc_dp_pps_header_inith]j)}(hdrm_dsc_dp_pps_header_inith]hdrm_dsc_dp_pps_header_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhK-ubj)}(h"(struct dp_sdp_header *pps_header)h]j)}(h struct dp_sdp_header *pps_headerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hĵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h dp_sdp_headerh]h dp_sdp_header}(hj݂hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڂubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj߂modnameN classnameNjj)}j]j%)}jjsbc.drm_dsc_dp_pps_header_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h pps_headerh]h pps_header}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhK-ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhK-ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhK-hjwhhubj)}(hhh]h)}(hBInitializes the PPS Header for DisplayPort as per the DP 1.4 spec.h]hBInitializes the PPS Header for DisplayPort as per the DP 1.4 spec.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK#hj?hhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhK-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjhhNhNubj)}(hX**Parameters** ``struct dp_sdp_header *pps_header`` Secondary data packet header for DSC Picture Parameter Set as defined in :c:type:`struct dp_sdp_header ` **Description** DP 1.4 spec defines the secondary data packet for sending the picture parameter infoframes from the source to the sink. This function populates the SDP header defined in :c:type:`struct dp_sdp_header `.h](h)}(h**Parameters**h]j%)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK'hj^ubji)}(hhh]jn)}(h``struct dp_sdp_header *pps_header`` Secondary data packet header for DSC Picture Parameter Set as defined in :c:type:`struct dp_sdp_header ` h](jt)}(h$``struct dp_sdp_header *pps_header``h]jz)}(hjh]h struct dp_sdp_header *pps_header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK&hj}ubj)}(hhh]h)}(hwSecondary data packet header for DSC Picture Parameter Set as defined in :c:type:`struct dp_sdp_header `h](hISecondary data packet header for DSC Picture Parameter Set as defined in }(hjhhhNhNubh)}(h.:c:type:`struct dp_sdp_header `h]jz)}(hjh]hstruct dp_sdp_header}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj dp_sdp_headeruh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK%hjubeh}(h]h ]h"]h$]h&]uh1hhjÃhK%hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhK&hjzubah}(h]h ]h"]h$]h&]uh1jhhj^ubh)}(h**Description**h]j%)}(hjރh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj܃ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK(hj^ubh)}(hDP 1.4 spec defines the secondary data packet for sending the picture parameter infoframes from the source to the sink. This function populates the SDP header defined in :c:type:`struct dp_sdp_header `.h](hDP 1.4 spec defines the secondary data packet for sending the picture parameter infoframes from the source to the sink. This function populates the SDP header defined in }(hjhhhNhNubh)}(h.:c:type:`struct dp_sdp_header `h]jz)}(hjh]hstruct dp_sdp_header}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj dp_sdp_headeruh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK(hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK(hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dsc_dp_rc_buffer_size (C function)c.drm_dsc_dp_rc_buffer_sizehNtauh1jxhjhhhhNhNubj)}(hhh](j)}(hJint drm_dsc_dp_rc_buffer_size (u8 rc_buffer_block_size, u8 rc_buffer_size)h]j)}(hIint drm_dsc_dp_rc_buffer_size(u8 rc_buffer_block_size, u8 rc_buffer_size)h](j)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK>ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjThK>ubj)}(hdrm_dsc_dp_rc_buffer_sizeh]j)}(hdrm_dsc_dp_rc_buffer_sizeh]hdrm_dsc_dp_rc_buffer_size}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjThK>ubj)}(h,(u8 rc_buffer_block_size, u8 rc_buffer_size)h](j)}(hu8 rc_buffer_block_sizeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjisbc.drm_dsc_dp_rc_buffer_sizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrc_buffer_block_sizeh]hrc_buffer_block_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubj)}(hu8 rc_buffer_sizeh](h)}(hhh]j)}(hu8h]hu8}(hjЄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̈́ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj҄modnameN classnameNjj)}j]jc.drm_dsc_dp_rc_buffer_sizeasbuh1hhjɄubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɄubj)}(hrc_buffer_sizeh]hrc_buffer_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɄubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubeh}(h]h ]h"]h$]h&]jjuh1jhjBhhhjThK>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhjThK>ubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhjThK>hj;hhubj)}(hhh]h)}(hget rc buffer size in bytesh]hget rc buffer size in bytes}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK7hj#hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjThK>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhjhhNhNubj)}(h**Parameters** ``u8 rc_buffer_block_size`` block size code, according to DPCD offset 62h ``u8 rc_buffer_size`` number of blocks - 1, according to DPCD offset 63h **Return** buffer size in bytes, or 0 on invalid inputh](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK;hjBubji)}(hhh](jn)}(hJ``u8 rc_buffer_block_size`` block size code, according to DPCD offset 62h h](jt)}(h``u8 rc_buffer_block_size``h]jz)}(hjgh]hu8 rc_buffer_block_size}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK8hjaubj)}(hhh]h)}(h-block size code, according to DPCD offset 62hh]h-block size code, according to DPCD offset 62h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hK8hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj|hK8hj^ubjn)}(hI``u8 rc_buffer_size`` number of blocks - 1, according to DPCD offset 63h h](jt)}(h``u8 rc_buffer_size``h]jz)}(hjh]hu8 rc_buffer_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK9hjubj)}(hhh]h)}(h2number of blocks - 1, according to DPCD offset 63hh]h2number of blocks - 1, according to DPCD offset 63h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK9hj^ubeh}(h]h ]h"]h$]h&]uh1jhhjBubh)}(h **Return**h]j%)}(hjۅh]hReturn}(hj݅hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjمubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK;hjBubh)}(h+buffer size in bytes, or 0 on invalid inputh]h+buffer size in bytes, or 0 on invalid input}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK;hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dsc_pps_payload_pack (C function)c.drm_dsc_pps_payload_packhNtauh1jxhjhhhhNhNubj)}(hhh](j)}(hwvoid drm_dsc_pps_payload_pack (struct drm_dsc_picture_parameter_set *pps_payload, const struct drm_dsc_config *dsc_cfg)h]j)}(hvvoid drm_dsc_pps_payload_pack(struct drm_dsc_picture_parameter_set *pps_payload, const struct drm_dsc_config *dsc_cfg)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKbubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hKbubj)}(hdrm_dsc_pps_payload_packh]j)}(hdrm_dsc_pps_payload_packh]hdrm_dsc_pps_payload_pack}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hKbubj)}(hY(struct drm_dsc_picture_parameter_set *pps_payload, const struct drm_dsc_config *dsc_cfg)h](j)}(h1struct drm_dsc_picture_parameter_set *pps_payloadh](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hdrm_dsc_picture_parameter_seth]hdrm_dsc_picture_parameter_set}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjCsbc.drm_dsc_pps_payload_packasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubj)}(h pps_payloadh]h pps_payload}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(h$const struct drm_dsc_config *dsc_cfgh](j)}(hjch]hconst}(hjφhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubj)}(h h]h }(hj܆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_dsc_pps_payload_packasbuh1hhjˆubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjˆubj)}(hdsc_cfgh]hdsc_cfg}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hKbubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hKbubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hKbhjhhubj)}(hhh]h)}(hPopulates the DSC PPSh]hPopulates the DSC PPS}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKRhjhhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hKbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhhNhNubj)}(hX**Parameters** ``struct drm_dsc_picture_parameter_set *pps_payload`` Bitwise struct for DSC Picture Parameter Set. This is defined by :c:type:`struct drm_dsc_picture_parameter_set ` ``const struct drm_dsc_config *dsc_cfg`` DSC Configuration data filled by driver as defined by :c:type:`struct drm_dsc_config ` **Description** DSC source device sends a picture parameter set (PPS) containing the information required by the sink to decode the compressed frame. Driver populates the DSC PPS struct using the DSC configuration parameters in the order expected by the DSC Display Sink device. For the DSC, the sink device expects the PPS payload in big endian format for fields that span more than 1 byte.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKVhjubji)}(hhh](jn)}(h``struct drm_dsc_picture_parameter_set *pps_payload`` Bitwise struct for DSC Picture Parameter Set. This is defined by :c:type:`struct drm_dsc_picture_parameter_set ` h](jt)}(h5``struct drm_dsc_picture_parameter_set *pps_payload``h]jz)}(hjh]h1struct drm_dsc_picture_parameter_set *pps_payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKUhjubj)}(hhh]h)}(hBitwise struct for DSC Picture Parameter Set. This is defined by :c:type:`struct drm_dsc_picture_parameter_set `h](hABitwise struct for DSC Picture Parameter Set. This is defined by }(hjŇhhhNhNubh)}(hN:c:type:`struct drm_dsc_picture_parameter_set `h]jz)}(hjχh]h$struct drm_dsc_picture_parameter_set}(hjчhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj͇ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_picture_parameter_setuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKThjŇubeh}(h]h ]h"]h$]h&]uh1hhjhKThj‡ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKUhjubjn)}(h``const struct drm_dsc_config *dsc_cfg`` DSC Configuration data filled by driver as defined by :c:type:`struct drm_dsc_config ` h](jt)}(h(``const struct drm_dsc_config *dsc_cfg``h]jz)}(hjh]h$const struct drm_dsc_config *dsc_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKXhjubj)}(hhh]h)}(hfDSC Configuration data filled by driver as defined by :c:type:`struct drm_dsc_config `h](h6DSC Configuration data filled by driver as defined by }(hjhhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hj(h]hstruct drm_dsc_config}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKWhjubeh}(h]h ]h"]h$]h&]uh1hhjEhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKXhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chKZhjubh)}(hXwDSC source device sends a picture parameter set (PPS) containing the information required by the sink to decode the compressed frame. Driver populates the DSC PPS struct using the DSC configuration parameters in the order expected by the DSC Display Sink device. For the DSC, the sink device expects the PPS payload in big endian format for fields that span more than 1 byte.h]hXwDSC source device sends a picture parameter set (PPS) containing the information required by the sink to decode the compressed frame. Driver populates the DSC PPS struct using the DSC configuration parameters in the order expected by the DSC Display Sink device. For the DSC, the sink device expects the PPS payload in big endian format for fields that span more than 1 byte.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chK[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dsc_set_const_params (C function)c.drm_dsc_set_const_paramshNtauh1jxhjhhhhNhNubj)}(hhh](j)}(h?void drm_dsc_set_const_params (struct drm_dsc_config *vdsc_cfg)h]j)}(h>void drm_dsc_set_const_params(struct drm_dsc_config *vdsc_cfg)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dsc_set_const_paramsh]j)}(hdrm_dsc_set_const_paramsh]hdrm_dsc_set_const_params}(hjƈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct drm_dsc_config *vdsc_cfg)h]j)}(hstruct drm_dsc_config *vdsc_cfgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjވubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjވubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjȈsbc.drm_dsc_set_const_paramsasbuh1hhjވubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjވubj9)}(hj9h]h*}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjވubj)}(hvdsc_cfgh]hvdsc_cfg}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjވubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjڈubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hGSet DSC parameters considered typically constant across operation modesh]hGSet DSC parameters considered typically constant across operation modes}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1jhhhjhhNhNubj)}(hg**Parameters** ``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubji)}(hhh]jn)}(hU``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](jt)}(h#``struct drm_dsc_config *vdsc_cfg``h]jz)}(hjh]hstruct drm_dsc_config *vdsc_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dsc_set_rc_buf_thresh (C function)c.drm_dsc_set_rc_buf_threshhNtauh1jxhjhhhhNhNubj)}(hhh](j)}(h@void drm_dsc_set_rc_buf_thresh (struct drm_dsc_config *vdsc_cfg)h]j)}(h?void drm_dsc_set_rc_buf_thresh(struct drm_dsc_config *vdsc_cfg)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM4ubj)}(hdrm_dsc_set_rc_buf_threshh]j)}(hdrm_dsc_set_rc_buf_threshh]hdrm_dsc_set_rc_buf_thresh}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM4ubj)}(h!(struct drm_dsc_config *vdsc_cfg)h]j)}(hstruct drm_dsc_config *vdsc_cfgh](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j%)}jj#sbc.drm_dsc_set_rc_buf_threshasbuh1hhj9ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(hvdsc_cfgh]hvdsc_cfg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM4hjhhubj)}(hhh]h)}(hMSet thresholds for the RC model in accordance with the DSC 1.2 specification.h]hMSet thresholds for the RC model in accordance with the DSC 1.2 specification.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj؊jj؊jjjuh1jhhhjhhNhNubj)}(hg**Parameters** ``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chM3hj܊ubji)}(hhh]jn)}(hU``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](jt)}(h#``struct drm_dsc_config *vdsc_cfg``h]jz)}(hjh]hstruct drm_dsc_config *vdsc_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chM5hjubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhhj܊ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dsc_setup_rc_params (C function)c.drm_dsc_setup_rc_paramshNtauh1jxhjhhhhNhNubj)}(hhh](j)}(h\int drm_dsc_setup_rc_params (struct drm_dsc_config *vdsc_cfg, enum drm_dsc_params_type type)h]j)}(h[int drm_dsc_setup_rc_params(struct drm_dsc_config *vdsc_cfg, enum drm_dsc_params_type type)h](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjihMubj)}(hdrm_dsc_setup_rc_paramsh]j)}(hdrm_dsc_setup_rc_paramsh]hdrm_dsc_setup_rc_params}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjihMubj)}(h@(struct drm_dsc_config *vdsc_cfg, enum drm_dsc_params_type type)h](j)}(hstruct drm_dsc_config *vdsc_cfgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj~sbc.drm_dsc_setup_rc_paramsasbuh1hhjubj)}(h h]h }(hj֋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvdsc_cfgh]hvdsc_cfg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_dsc_params_type typeh](j)}(hjl h]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dsc_params_typeh]hdrm_dsc_params_type}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]jҋc.drm_dsc_setup_rc_paramsasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjihMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjihMubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhjihMhjPhhubj)}(hhh]h)}(hSet parameters and limits for RC model in accordance with the DSC 1.1 or 1.2 specification and DSC C Model Required bits_per_pixel and bits_per_component to be set before calling this function.h]hSet parameters and limits for RC model in accordance with the DSC 1.1 or 1.2 specification and DSC C Model Required bits_per_pixel and bits_per_component to be set before calling this function.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhhNhNubj)}(h**Parameters** ``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driver ``enum drm_dsc_params_type type`` operating mode and standard to follow **Return** 0 or -error code in case of an errorh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubji)}(hhh](jn)}(hV``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driver h](jt)}(h#``struct drm_dsc_config *vdsc_cfg``h]jz)}(hjh]hstruct drm_dsc_config *vdsc_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hj،hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԌhMhjՌubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjԌhMhjubjn)}(hH``enum drm_dsc_params_type type`` operating mode and standard to follow h](jt)}(h!``enum drm_dsc_params_type type``h]jz)}(hjh]henum drm_dsc_params_type type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(h%operating mode and standard to followh]h%operating mode and standard to follow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubh)}(h$0 or -error code in case of an errorh]h$0 or -error code in case of an error}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dsc_compute_rc_parameters (C function)c.drm_dsc_compute_rc_parametershNtauh1jxhjhhhhNhNubj)}(hhh](j)}(hCint drm_dsc_compute_rc_parameters (struct drm_dsc_config *vdsc_cfg)h]j)}(hBint drm_dsc_compute_rc_parameters(struct drm_dsc_config *vdsc_cfg)h](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM ubj)}(hdrm_dsc_compute_rc_parametersh]j)}(hdrm_dsc_compute_rc_parametersh]hdrm_dsc_compute_rc_parameters}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjhM ubj)}(h!(struct drm_dsc_config *vdsc_cfg)h]j)}(hstruct drm_dsc_config *vdsc_cfgh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjӍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЍubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjՍmodnameN classnameNjj)}j]j%)}jjsbc.drm_dsc_compute_rc_parametersasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvdsc_cfgh]hvdsc_cfg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjthhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjhM ubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjmhhubj)}(hhh]h)}(hWrite rate control parameters to the dsc configuration defined in :c:type:`struct drm_dsc_config ` in accordance with the DSC 1.2 specification. Some configuration fields must be present beforehand.h](hBWrite rate control parameters to the dsc configuration defined in }(hj8hhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hjBh]hstruct drm_dsc_config}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_dsc_compute_rc_parametersasbjdrm_dsc_configuh1hhjhK-hj8ubhd in accordance with the DSC 1.2 specification. Some configuration fields must be present beforehand.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj5hhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjhhNhNubj)}(hg**Parameters** ``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj|ubji)}(hhh]jn)}(hU``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](jt)}(h#``struct drm_dsc_config *vdsc_cfg``h]jz)}(hjh]hstruct drm_dsc_config *vdsc_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dsc_get_bpp_int (C function)c.drm_dsc_get_bpp_inthNtauh1jxhjhhhhNhNubj)}(hhh](j)}(h?u32 drm_dsc_get_bpp_int (const struct drm_dsc_config *vdsc_cfg)h]j)}(h>u32 drm_dsc_get_bpp_int(const struct drm_dsc_config *vdsc_cfg)h](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dsc_get_bpp_intsbc.drm_dsc_get_bpp_intasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dsc_get_bpp_inth]j)}(hjh]hdrm_dsc_get_bpp_int}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h'(const struct drm_dsc_config *vdsc_cfg)h]j)}(h%const struct drm_dsc_config *vdsc_cfgh](j)}(hjch]hconst}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dsc_get_bpp_intasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(hvdsc_cfgh]hvdsc_cfg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h=Get integer bits per pixel value for the given DRM DSC configh]h=Get integer bits per pixel value for the given DRM DSC config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhhNhNubj)}(h{**Parameters** ``const struct drm_dsc_config *vdsc_cfg`` Pointer to DRM DSC config struct **Return** Integer BPP valueh](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h].h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubji)}(hhh]jn)}(hK``const struct drm_dsc_config *vdsc_cfg`` Pointer to DRM DSC config struct h](jt)}(h)``const struct drm_dsc_config *vdsc_cfg``h]jz)}(hj*h]h%const struct drm_dsc_config *vdsc_cfg}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj$ubj)}(hhh]h)}(h Pointer to DRM DSC config structh]h Pointer to DRM DSC config struct}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhj!ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubh)}(hInteger BPP valueh]hInteger BPP value}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dsc_initial_scale_value (C function)c.drm_dsc_initial_scale_valuehNtauh1jxhjhhhhNhNubj)}(hhh](j)}(hAu8 drm_dsc_initial_scale_value (const struct drm_dsc_config *dsc)h]j)}(h@u8 drm_dsc_initial_scale_value(const struct drm_dsc_config *dsc)h](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dsc_initial_scale_valuesbc.drm_dsc_initial_scale_valueasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjϐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjΐhMubj)}(hdrm_dsc_initial_scale_valueh]j)}(hjːh]hdrm_dsc_initial_scale_value}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݐubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjΐhMubj)}(h"(const struct drm_dsc_config *dsc)h]j)}(h const struct drm_dsc_config *dsch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]jɐc.drm_dsc_initial_scale_valueasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsch]hdsc}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjΐhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjΐhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjΐhMhjhhubj)}(hhh]h)}(h:Calculate the initial scale value for the given DSC configh]h:Calculate the initial scale value for the given DSC config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjΐhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhhNhNubj)}(h**Parameters** ``const struct drm_dsc_config *dsc`` Pointer to DRM DSC config struct **Return** Calculated initial scale valueh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubji)}(hhh]jn)}(hF``const struct drm_dsc_config *dsc`` Pointer to DRM DSC config struct h](jt)}(h$``const struct drm_dsc_config *dsc``h]jz)}(hjّh]h const struct drm_dsc_config *dsc}(hjۑhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjבubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjӑubj)}(hhh]h)}(h Pointer to DRM DSC config structh]h Pointer to DRM DSC config struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӑubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjБubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubh)}(hCalculated initial scale valueh]hCalculated initial scale value}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dsc_flatness_det_thresh (C function)c.drm_dsc_flatness_det_threshhNtauh1jxhjhhhhNhNubj)}(hhh](j)}(hBu32 drm_dsc_flatness_det_thresh (const struct drm_dsc_config *dsc)h]j)}(hAu32 drm_dsc_flatness_det_thresh(const struct drm_dsc_config *dsc)h](h)}(hhh]j)}(hu32h]hu32}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j%)}jdrm_dsc_flatness_det_threshsbc.drm_dsc_flatness_det_threshasbuh1hhjUhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhj}hMubj)}(hdrm_dsc_flatness_det_threshh]j)}(hjzh]hdrm_dsc_flatness_det_thresh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhj}hMubj)}(h"(const struct drm_dsc_config *dsc)h]j)}(h const struct drm_dsc_config *dsch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjƒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjӒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jxc.drm_dsc_flatness_det_threshasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsch]hdsc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjUhhhj}hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhj}hMubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1jhj}hMhjNhhubj)}(hhh]h)}(h:Calculate the flatness_det_thresh for the given DSC configh]h:Calculate the flatness_det_thresh for the given DSC config}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhj}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1jhhhjhhNhNubj)}(h**Parameters** ``const struct drm_dsc_config *dsc`` Pointer to DRM DSC config struct **Return** Calculated flatness det thresh valueh](h)}(h**Parameters**h]j%)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjcubji)}(hhh]jn)}(hF``const struct drm_dsc_config *dsc`` Pointer to DRM DSC config struct h](jt)}(h$``const struct drm_dsc_config *dsc``h]jz)}(hjh]h const struct drm_dsc_config *dsc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(h Pointer to DRM DSC config structh]h Pointer to DRM DSC config struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjcubh)}(h **Return**h]j%)}(hjÓh]hReturn}(hjœhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjcubh)}(h$Calculated flatness det thresh valueh]h$Calculated flatness det thresh value}(hjٓhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dsc_dump_config (C function)c.drm_dsc_dump_confighNtauh1jxhjhhhhNhNubj)}(hhh](j)}(h^void drm_dsc_dump_config (struct drm_printer *p, int indent, const struct drm_dsc_config *cfg)h]j)}(h]void drm_dsc_dump_config(struct drm_printer *p, int indent, const struct drm_dsc_config *cfg)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dsc_dump_configh]j)}(hdrm_dsc_dump_configh]hdrm_dsc_dump_config}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hE(struct drm_printer *p, int indent, const struct drm_dsc_config *cfg)h](j)}(hstruct drm_printer *ph](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j%)}jj+sbc.drm_dsc_dump_configasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj)}(hjDh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h int indenth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjĔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hindenth]hindent}(hjҔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h const struct drm_dsc_config *cfgh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]jc.drm_dsc_dump_configasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcfgh]hcfg}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h#Dump the provided DSC configurationh]h#Dump the provided DSC configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhhNhNubj)}(h**Parameters** ``struct drm_printer *p`` The printer used for output ``int indent`` Tab indentation level (max 5) ``const struct drm_dsc_config *cfg`` DSC configuration to print **Description** Print the provided DSC configuration in **cfg**.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubji)}(hhh](jn)}(h6``struct drm_printer *p`` The printer used for output h](jt)}(h``struct drm_printer *p``h]jz)}(hjȕh]hstruct drm_printer *p}(hjʕhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjƕubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj•ubj)}(hhh]h)}(hThe printer used for outputh]hThe printer used for output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݕhMhjޕubah}(h]h ]h"]h$]h&]uh1jhj•ubeh}(h]h ]h"]h$]h&]uh1jmhjݕhMhjubjn)}(h-``int indent`` Tab indentation level (max 5) h](jt)}(h``int indent``h]jz)}(hjh]h int indent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(hTab indentation level (max 5)h]hTab indentation level (max 5)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h@``const struct drm_dsc_config *cfg`` DSC configuration to print h](jt)}(h$``const struct drm_dsc_config *cfg``h]jz)}(hj:h]h const struct drm_dsc_config *cfg}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj4ubj)}(hhh]h)}(hDSC configuration to printh]hDSC configuration to print}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubh)}(h0Print the provided DSC configuration in **cfg**.h](h(Print the provided DSC configuration in }(hjhhhNhNubj%)}(h**cfg**h]hcfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhhNhNubeh}(h]5display-stream-compression-helper-functions-referenceah ]h"]5display stream compression helper functions referenceah$]h&]uh1hhhhhhhhMQubh)}(hhh](h)}(h)Output Probing Helper Functions Referenceh]h)Output Probing Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM]ubh)}(hThis library provides some helper code for output probing. It provides an implementation of the core :c:type:`drm_connector_funcs.fill_modes ` interface with drm_helper_probe_single_connector_modes().h](heThis library provides some helper code for output probing. It provides an implementation of the core }(hj̖hhhNhNubh)}(h>:c:type:`drm_connector_funcs.fill_modes `h]jz)}(hj֖h]hdrm_connector_funcs.fill_modes}(hjؖhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjԖubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:351: ./drivers/gpu/drm/drm_probe_helper.chK1hj̖ubh: interface with drm_helper_probe_single_connector_modes().}(hj̖hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjhhubh)}(hIt also provides support for polling connectors with a work item and for generic hotplug interrupt handling where the driver doesn't or cannot keep track of a per-connector hpd interrupt.h]hIt also provides support for polling connectors with a work item and for generic hotplug interrupt handling where the driver doesn’t or cannot keep track of a per-connector hpd interrupt.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:351: ./drivers/gpu/drm/drm_probe_helper.chK5hjhhubh)}(hThis helper library can be used independently of the modeset helper library. Drivers can also overwrite different parts e.g. use their own hotplug handling code to avoid probing unrelated outputs.h]hThis helper library can be used independently of the modeset helper library. Drivers can also overwrite different parts e.g. use their own hotplug handling code to avoid probing unrelated outputs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:351: ./drivers/gpu/drm/drm_probe_helper.chK9hjhhubh)}(hThe probe helpers share the function table structures with other display helper libraries. See :c:type:`struct drm_connector_helper_funcs ` for the details.h](h_The probe helpers share the function table structures with other display helper libraries. See }(hjhhhNhNubh)}(hH:c:type:`struct drm_connector_helper_funcs `h]jz)}(hj&h]h!struct drm_connector_helper_funcs}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:351: ./drivers/gpu/drm/drm_probe_helper.chK=hjubh for the details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChK=hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_kms_helper_poll_enable (C function)c.drm_kms_helper_poll_enablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h8void drm_kms_helper_poll_enable (struct drm_device *dev)h]j)}(h7void drm_kms_helper_poll_enable(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM0ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhM0ubj)}(hdrm_kms_helper_poll_enableh]j)}(hdrm_kms_helper_poll_enableh]hdrm_kms_helper_poll_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjuhM0ubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj—hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjėmodnameN classnameNjj)}j]j%)}jjsbc.drm_kms_helper_poll_enableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjchhhjuhM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhjuhM0ubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhjuhM0hj\hhubj)}(hhh]h)}(hre-enable output polling.h]hre-enable output polling.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1jhhhjhNhNubj)}(hXt**Parameters** ``struct drm_device *dev`` drm_device **Description** This function re-enables the output polling work, after it has been temporarily disabled using drm_kms_helper_poll_disable(), for example over suspend/resume. Drivers can call this helper from their device resume implementation. It is not an error to call this even when output polling isn't enabled. If device polling was never initialized before, this call will trigger a warning and return. Note that calls to enable and disable polling must be strictly ordered, which is automatically the case when they're only call from suspend/resume callbacks.h](h)}(h**Parameters**h]j%)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM#hjCubji)}(hhh]jn)}(h&``struct drm_device *dev`` drm_device h](jt)}(h``struct drm_device *dev``h]jz)}(hjhh]hstruct drm_device *dev}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM hjbubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hM hj_ubah}(h]h ]h"]h$]h&]uh1jhhjCubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM"hjCubh)}(hThis function re-enables the output polling work, after it has been temporarily disabled using drm_kms_helper_poll_disable(), for example over suspend/resume.h]hThis function re-enables the output polling work, after it has been temporarily disabled using drm_kms_helper_poll_disable(), for example over suspend/resume.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM"hjCubh)}(hDrivers can call this helper from their device resume implementation. It is not an error to call this even when output polling isn't enabled.h]hDrivers can call this helper from their device resume implementation. It is not an error to call this even when output polling isn’t enabled.}(hjȘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM&hjCubh)}(h\If device polling was never initialized before, this call will trigger a warning and return.h]h\If device polling was never initialized before, this call will trigger a warning and return.}(hjטhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM)hjCubh)}(hNote that calls to enable and disable polling must be strictly ordered, which is automatically the case when they're only call from suspend/resume callbacks.h]hNote that calls to enable and disable polling must be strictly ordered, which is automatically the case when they’re only call from suspend/resume callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM,hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_kms_helper_poll_reschedule (C function) c.drm_kms_helper_poll_reschedulehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h` vfunc for drivers that use the CRTC helpers for output mode filtering and detection. The basic procedure is as follows 1. All modes currently on the connector's modes list are marked as stale 2. New modes are added to the connector's probed_modes list with drm_mode_probed_add(). New modes start their life with status as OK. Modes are added from a single source using the following priority order. - :c:type:`drm_connector_helper_funcs.get_modes ` vfunc - if the connector status is connector_status_connected, standard VESA DMT modes up to 1024x768 are automatically added (drm_add_modes_noedid()) Finally modes specified via the kernel command line (video=...) are added in addition to what the earlier probes produced (drm_helper_probe_add_cmdline_mode()). These modes are generated using the VESA GTF/CVT formulas. 3. Modes are moved from the probed_modes list to the modes list. Potential duplicates are merged together (see drm_connector_list_update()). After this step the probed_modes list will be empty again. 4. Any non-stale mode on the modes list then undergoes validation - drm_mode_validate_basic() performs basic sanity checks - drm_mode_validate_size() filters out modes larger than **maxX** and **maxY** (if specified) - drm_mode_validate_flag() checks the modes against basic connector capabilities (interlace_allowed,doublescan_allowed,stereo_allowed) - the optional :c:type:`drm_connector_helper_funcs.mode_valid ` or :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` helpers can perform driver and/or sink specific checks - the optional :c:type:`drm_crtc_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_encoder_helper_funcs.mode_valid ` helpers can perform driver and/or source specific checks which are also enforced by the modeset/atomic helpers 5. Any mode whose status is not OK is pruned from the connector's modes list, accompanied by a debug message indicating the reason for the mode's rejection (see drm_mode_prune_invalid()). **Return** The number of modes found on **connector**.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubji)}(hhh](jn)}(h7``struct drm_connector *connector`` connector to probe h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj5h]hstruct drm_connector *connector}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj/ubj)}(hhh]h)}(hconnector to probeh]hconnector to probe}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhMhj,ubjn)}(h&``uint32_t maxX`` max width for modes h](jt)}(h``uint32_t maxX``h]jz)}(hjnh]h uint32_t maxX}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhubj)}(hhh]h)}(hmax width for modesh]hmax width for modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj,ubjn)}(h'``uint32_t maxY`` max height for modes h](jt)}(h``uint32_t maxY``h]jz)}(hjh]h uint32_t maxY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(hmax height for modesh]hmax height for modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hX3Based on the helper callbacks implemented by **connector** in struct :c:type:`drm_connector_helper_funcs` try to detect all valid modes. Modes will first be added to the connector's probed_modes list, then culled (based on validity and the **maxX**, **maxY** parameters) and put into the normal modes list.h](h-Based on the helper callbacks implemented by }(hjhhhNhNubj%)}(h **connector**h]h connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh in struct }(hjhhhNhNubh)}(h$:c:type:`drm_connector_helper_funcs`h]jz)}(hjh]hdrm_connector_helper_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh try to detect all valid modes. Modes will first be added to the connector’s probed_modes list, then culled (based on validity and the }(hjhhhNhNubj%)}(h**maxX**h]hmaxX}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h**maxY**h]hmaxY}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh0 parameters) and put into the normal modes list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMhjubh)}(hIntended to be used as a generic implementation of the :c:type:`drm_connector_funcs.fill_modes\(\) ` vfunc for drivers that use the CRTC helpers for output mode filtering and detection.h](h7Intended to be used as a generic implementation of the }(hj`hhhNhNubh)}(hB:c:type:`drm_connector_funcs.fill_modes\(\) `h]jz)}(hjjh]h drm_connector_funcs.fill_modes()}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj`ubhU vfunc for drivers that use the CRTC helpers for output mode filtering and detection.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h!The basic procedure is as followsh]h!The basic procedure is as follows}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubjQH)}(hhh](h)}(hFAll modes currently on the connector's modes list are marked as stale h]h)}(hEAll modes currently on the connector's modes list are marked as staleh]hGAll modes currently on the connector’s modes list are marked as stale}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hXNew modes are added to the connector's probed_modes list with drm_mode_probed_add(). New modes start their life with status as OK. Modes are added from a single source using the following priority order. - :c:type:`drm_connector_helper_funcs.get_modes ` vfunc - if the connector status is connector_status_connected, standard VESA DMT modes up to 1024x768 are automatically added (drm_add_modes_noedid()) Finally modes specified via the kernel command line (video=...) are added in addition to what the earlier probes produced (drm_helper_probe_add_cmdline_mode()). These modes are generated using the VESA GTF/CVT formulas. h](h)}(hNew modes are added to the connector's probed_modes list with drm_mode_probed_add(). New modes start their life with status as OK. Modes are added from a single source using the following priority order.h]hNew modes are added to the connector’s probed_modes list with drm_mode_probed_add(). New modes start their life with status as OK. Modes are added from a single source using the following priority order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hhh](h)}(hQ:c:type:`drm_connector_helper_funcs.get_modes ` vfunch]h)}(hjՠh](h)}(hK:c:type:`drm_connector_helper_funcs.get_modes `h]jz)}(hjܠh]h$drm_connector_helper_funcs.get_modes}(hjޠhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjڠubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM hjנubh vfunc}(hjנhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjӠubah}(h]h ]h"]h$]h&]uh1hhjРubh)}(hif the connector status is connector_status_connected, standard VESA DMT modes up to 1024x768 are automatically added (drm_add_modes_noedid()) h]h)}(hif the connector status is connector_status_connected, standard VESA DMT modes up to 1024x768 are automatically added (drm_add_modes_noedid())h]hif the connector status is connector_status_connected, standard VESA DMT modes up to 1024x768 are automatically added (drm_add_modes_noedid())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM hj ubah}(h]h ]h"]h$]h&]uh1hhjРubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhM hjubh)}(hFinally modes specified via the kernel command line (video=...) are added in addition to what the earlier probes produced (drm_helper_probe_add_cmdline_mode()). These modes are generated using the VESA GTF/CVT formulas.h]hFinally modes specified via the kernel command line (video=...) are added in addition to what the earlier probes produced (drm_helper_probe_add_cmdline_mode()). These modes are generated using the VESA GTF/CVT formulas.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ]h"]h$]h&]uh1hhjubh)}(hModes are moved from the probed_modes list to the modes list. Potential duplicates are merged together (see drm_connector_list_update()). After this step the probed_modes list will be empty again. h]h)}(hModes are moved from the probed_modes list to the modes list. Potential duplicates are merged together (see drm_connector_list_update()). After this step the probed_modes list will be empty again.h]hModes are moved from the probed_modes list to the modes list. Potential duplicates are merged together (see drm_connector_list_update()). After this step the probed_modes list will be empty again.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj>ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hXAny non-stale mode on the modes list then undergoes validation - drm_mode_validate_basic() performs basic sanity checks - drm_mode_validate_size() filters out modes larger than **maxX** and **maxY** (if specified) - drm_mode_validate_flag() checks the modes against basic connector capabilities (interlace_allowed,doublescan_allowed,stereo_allowed) - the optional :c:type:`drm_connector_helper_funcs.mode_valid ` or :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` helpers can perform driver and/or sink specific checks - the optional :c:type:`drm_crtc_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_encoder_helper_funcs.mode_valid ` helpers can perform driver and/or source specific checks which are also enforced by the modeset/atomic helpers h](h)}(h>Any non-stale mode on the modes list then undergoes validationh]h>Any non-stale mode on the modes list then undergoes validation}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjWubh)}(hhh](h)}(h6drm_mode_validate_basic() performs basic sanity checksh]h)}(hjoh]h6drm_mode_validate_basic() performs basic sanity checks}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjmubah}(h]h ]h"]h$]h&]uh1hhjjubh)}(h[drm_mode_validate_size() filters out modes larger than **maxX** and **maxY** (if specified)h]h)}(h[drm_mode_validate_size() filters out modes larger than **maxX** and **maxY** (if specified)h](h7drm_mode_validate_size() filters out modes larger than }(hjhhhNhNubj%)}(h**maxX**h]hmaxX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**maxY**h]hmaxY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh (if specified)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubah}(h]h ]h"]h$]h&]uh1hhjjubh)}(hdrm_mode_validate_flag() checks the modes against basic connector capabilities (interlace_allowed,doublescan_allowed,stereo_allowed)h]h)}(hdrm_mode_validate_flag() checks the modes against basic connector capabilities (interlace_allowed,doublescan_allowed,stereo_allowed)h]hdrm_mode_validate_flag() checks the modes against basic connector capabilities (interlace_allowed,doublescan_allowed,stereo_allowed)}(hjơhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj¡ubah}(h]h ]h"]h$]h&]uh1hhjjubh)}(hthe optional :c:type:`drm_connector_helper_funcs.mode_valid ` or :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` helpers can perform driver and/or sink specific checksh]h)}(hthe optional :c:type:`drm_connector_helper_funcs.mode_valid ` or :c:type:`drm_connector_helper_funcs.mode_valid_ctx ` helpers can perform driver and/or sink specific checksh](h the optional }(hjߡhhhNhNubh)}(hL:c:type:`drm_connector_helper_funcs.mode_valid `h]jz)}(hjh]h%drm_connector_helper_funcs.mode_valid}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjߡubh or }(hjߡhhhNhNubh)}(hP:c:type:`drm_connector_helper_funcs.mode_valid_ctx `h]jz)}(hj h]h)drm_connector_helper_funcs.mode_valid_ctx}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhjhMhjߡubh7 helpers can perform driver and/or sink specific checks}(hjߡhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjۡubah}(h]h ]h"]h$]h&]uh1hhjjubh)}(hXFthe optional :c:type:`drm_crtc_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_encoder_helper_funcs.mode_valid ` helpers can perform driver and/or source specific checks which are also enforced by the modeset/atomic helpers h]h)}(hXEthe optional :c:type:`drm_crtc_helper_funcs.mode_valid `, :c:type:`drm_bridge_funcs.mode_valid ` and :c:type:`drm_encoder_helper_funcs.mode_valid ` helpers can perform driver and/or source specific checks which are also enforced by the modeset/atomic helpersh](h the optional }(hj>hhhNhNubh)}(hB:c:type:`drm_crtc_helper_funcs.mode_valid `h]jz)}(hjHh]h drm_crtc_helper_funcs.mode_valid}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM"hj>ubh, }(hj>hhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_valid `h]jz)}(hjlh]hdrm_bridge_funcs.mode_valid}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjehM"hj>ubh and }(hj>hhhNhNubh)}(hH:c:type:`drm_encoder_helper_funcs.mode_valid `h]jz)}(hjh]h#drm_encoder_helper_funcs.mode_valid}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjehM"hj>ubho helpers can perform driver and/or source specific checks which are also enforced by the modeset/atomic helpers}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehM"hj:ubah}(h]h ]h"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]j8j4uh1hhj~hMhjWubeh}(h]h ]h"]h$]h&]uh1hhjubh)}(hAny mode whose status is not OK is pruned from the connector's modes list, accompanied by a debug message indicating the reason for the mode's rejection (see drm_mode_prune_invalid()). h]h)}(hAny mode whose status is not OK is pruned from the connector's modes list, accompanied by a debug message indicating the reason for the mode's rejection (see drm_mode_prune_invalid()).h]hAny mode whose status is not OK is pruned from the connector’s modes list, accompanied by a debug message indicating the reason for the mode’s rejection (see drm_mode_prune_invalid()).}(hj̢hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM'hjȢubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jMJjNJjOJhjPJjQJuh1jPHhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM+hjubh)}(h+The number of modes found on **connector**.h](hThe number of modes found on }(hjhhhNhNubj%)}(h **connector**h]h connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_kms_helper_hotplug_event (C function)c.drm_kms_helper_hotplug_eventhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:void drm_kms_helper_hotplug_event (struct drm_device *dev)h]j)}(h9void drm_kms_helper_hotplug_event(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjNhMubj)}(hdrm_kms_helper_hotplug_eventh]j)}(hdrm_kms_helper_hotplug_eventh]hdrm_kms_helper_hotplug_event}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhjNhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjcsbc.drm_kms_helper_hotplug_eventasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(hj9h]h*}(hjɣhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubj)}(hdevh]hdev}(hj֣hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubah}(h]h ]h"]h$]h&]jjuh1jhj<hhhjNhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhjNhMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jhjNhMhj5hhubj)}(hhh]h)}(hfire off KMS hotplug eventsh]hfire off KMS hotplug events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjNhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm_device whose connector state changed **Description** This function fires off the uevent for userspace and also calls the client hotplug function, which is most commonly used to inform the fbdev emulation code and allow it to update the fbcon output configuration. Drivers should call this from their hotplug handling code when a change is detected. Note that this function does not do any output detection of its own, like drm_helper_hpd_irq_event() does - this is assumed to be done by the driver already. This function must be called from process context with no mode setting locks held. If only a single connector has changed, consider calling drm_kms_helper_connector_hotplug_event() instead.h](h)}(h**Parameters**h]j%)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubji)}(hhh]jn)}(hD``struct drm_device *dev`` drm_device whose connector state changed h](jt)}(h``struct drm_device *dev``h]jz)}(hjAh]hstruct drm_device *dev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj;ubj)}(hhh]h)}(h(drm_device whose connector state changedh]h(drm_device whose connector state changed}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhMhj8ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hThis function fires off the uevent for userspace and also calls the client hotplug function, which is most commonly used to inform the fbdev emulation code and allow it to update the fbcon output configuration.h]hThis function fires off the uevent for userspace and also calls the client hotplug function, which is most commonly used to inform the fbdev emulation code and allow it to update the fbcon output configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hDrivers should call this from their hotplug handling code when a change is detected. Note that this function does not do any output detection of its own, like drm_helper_hpd_irq_event() does - this is assumed to be done by the driver already.h]hDrivers should call this from their hotplug handling code when a change is detected. Note that this function does not do any output detection of its own, like drm_helper_hpd_irq_event() does - this is assumed to be done by the driver already.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hRThis function must be called from process context with no mode setting locks held.h]hRThis function must be called from process context with no mode setting locks held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hjIf only a single connector has changed, consider calling drm_kms_helper_connector_hotplug_event() instead.h]hjIf only a single connector has changed, consider calling drm_kms_helper_connector_hotplug_event() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_kms_helper_connector_hotplug_event (C function)(c.drm_kms_helper_connector_hotplug_eventhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMvoid drm_kms_helper_connector_hotplug_event (struct drm_connector *connector)h]j)}(hLvoid drm_kms_helper_connector_hotplug_event(struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h&drm_kms_helper_connector_hotplug_eventh]j)}(h&drm_kms_helper_connector_hotplug_eventh]h&drm_kms_helper_connector_hotplug_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j%)}jjsb(c.drm_kms_helper_connector_hotplug_eventasbuh1hhj'ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(hj9h]h*}(hjwhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj'ubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&fire off a KMS connector hotplug eventh]h&fire off a KMS connector hotplug event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjƥjjƥjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` drm_connector which has changed **Description** This is the same as drm_kms_helper_hotplug_event(), except it fires a more fine-grained uevent for a single connector.h](h)}(h**Parameters**h]j%)}(hjХh]h Parameters}(hjҥhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjΥubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjʥubji)}(hhh]jn)}(hD``struct drm_connector *connector`` drm_connector which has changed h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(hdrm_connector which has changedh]hdrm_connector which has changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjʥubh)}(h**Description**h]j%)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjʥubh)}(hvThis is the same as drm_kms_helper_hotplug_event(), except it fires a more fine-grained uevent for a single connector.h]hvThis is the same as drm_kms_helper_hotplug_event(), except it fires a more fine-grained uevent for a single connector.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjʥubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_kms_helper_is_poll_worker (C function)c.drm_kms_helper_is_poll_workerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h)bool drm_kms_helper_is_poll_worker (void)h]j)}(h(bool drm_kms_helper_is_poll_worker(void)h](j)}(hjAh]hbool}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMaubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj|hMaubj)}(hdrm_kms_helper_is_poll_workerh]j)}(hdrm_kms_helper_is_poll_workerh]hdrm_kms_helper_is_poll_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhj|hMaubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjkhhhj|hMaubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhj|hMaubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj|hMahjdhhubj)}(hhh]h)}(h*is ``current`` task an output poll worker?h](his }(hjզhhhNhNubjz)}(h ``current``h]hcurrent}(hjݦhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjզubh task an output poll worker?}(hjզhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMVhjҦhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj|hMaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``void`` no arguments **Description** Determine if ``current`` task is an output poll worker. This can be used to select distinct code paths for output polling versus other contexts. One use case is to avoid a deadlock between the output poll worker and the autosuspend worker wherein the latter waits for polling to finish upon calling drm_kms_helper_poll_disable(), while the former waits for runtime suspend to finish upon calling pm_runtime_get_sync() in a connector ->detect hook.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMZhjubji)}(hhh]jn)}(h``void`` no arguments h](jt)}(h``void``h]jz)}(hj(h]hvoid}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM]hj"ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM]hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hM]hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM_hjubh)}(hDetermine if ``current`` task is an output poll worker. This can be used to select distinct code paths for output polling versus other contexts.h](h Determine if }(hjyhhhNhNubjz)}(h ``current``h]hcurrent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubhy task is an output poll worker. This can be used to select distinct code paths for output polling versus other contexts.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMWhjubh)}(hX.One use case is to avoid a deadlock between the output poll worker and the autosuspend worker wherein the latter waits for polling to finish upon calling drm_kms_helper_poll_disable(), while the former waits for runtime suspend to finish upon calling pm_runtime_get_sync() in a connector ->detect hook.h]hX.One use case is to avoid a deadlock between the output poll worker and the autosuspend worker wherein the latter waits for polling to finish upon calling drm_kms_helper_poll_disable(), while the former waits for runtime suspend to finish upon calling pm_runtime_get_sync() in a connector ->detect hook.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_kms_helper_poll_disable (C function)c.drm_kms_helper_poll_disablehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h9void drm_kms_helper_poll_disable (struct drm_device *dev)h]j)}(h8void drm_kms_helper_poll_disable(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hjɧhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŧhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMzubj)}(h h]h }(hjاhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŧhhhjקhMzubj)}(hdrm_kms_helper_poll_disableh]j)}(hdrm_kms_helper_poll_disableh]hdrm_kms_helper_poll_disable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjŧhhhjקhMzubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j%)}jjsbc.drm_kms_helper_poll_disableasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjŧhhhjקhMzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjקhMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjקhMzhjhhubj)}(hhh]h)}(hdisable output pollingh]hdisable output polling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMjhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjקhMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXX**Parameters** ``struct drm_device *dev`` drm_device **Description** This function disables the output polling work. Drivers can call this helper from their device suspend implementation. It is not an error to call this even when output polling isn't enabled or already disabled. Polling is re-enabled by calling drm_kms_helper_poll_enable(). If however, the polling was never initialized, this call will trigger a warning and return. Note that calls to enable and disable polling must be strictly ordered, which is automatically the case when they're only call from suspend/resume callbacks.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMnhjubji)}(hhh]jn)}(h&``struct drm_device *dev`` drm_device h](jt)}(h``struct drm_device *dev``h]jz)}(hjʨh]hstruct drm_device *dev}(hj̨hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjȨubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMkhjĨubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjߨhMkhjubah}(h]h ]h"]h$]h&]uh1jhjĨubeh}(h]h ]h"]h$]h&]uh1jmhjߨhMkhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMmhjubh)}(h/This function disables the output polling work.h]h/This function disables the output polling work.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMmhjubh)}(hDrivers can call this helper from their device suspend implementation. It is not an error to call this even when output polling isn't enabled or already disabled. Polling is re-enabled by calling drm_kms_helper_poll_enable().h]hDrivers can call this helper from their device suspend implementation. It is not an error to call this even when output polling isn’t enabled or already disabled. Polling is re-enabled by calling drm_kms_helper_poll_enable().}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMohjubh)}(h[If however, the polling was never initialized, this call will trigger a warning and return.h]h[If however, the polling was never initialized, this call will trigger a warning and return.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMshjubh)}(hNote that calls to enable and disable polling must be strictly ordered, which is automatically the case when they're only call from suspend/resume callbacks.h]hNote that calls to enable and disable polling must be strictly ordered, which is automatically the case when they’re only call from suspend/resume callbacks.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_kms_helper_poll_init (C function)c.drm_kms_helper_poll_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6void drm_kms_helper_poll_init (struct drm_device *dev)h]j)}(h5void drm_kms_helper_poll_init(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMubj)}(hdrm_kms_helper_poll_inith]j)}(hdrm_kms_helper_poll_inith]hdrm_kms_helper_poll_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjҩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϩubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjԩmodnameN classnameNjj)}j]j%)}jjsbc.drm_kms_helper_poll_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjohhhjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjlhhubj)}(hhh]h)}(h$initialize and enable output pollingh]h$initialize and enable output polling}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jhhhjhNhNubj)}(hXX**Parameters** ``struct drm_device *dev`` drm_device **Description** This function initializes and then also enables output polling support for **dev**. Drivers which do not have reliable hotplug support in hardware can use this helper infrastructure to regularly poll such connectors for changes in their connection state. Drivers can control which connectors are polled by setting the DRM_CONNECTOR_POLL_CONNECT and DRM_CONNECTOR_POLL_DISCONNECT flags. On connectors where probing live outputs can result in visual distortion drivers should not set the DRM_CONNECTOR_POLL_DISCONNECT flag to avoid this. Connectors which have no flag or only DRM_CONNECTOR_POLL_HPD set are completely ignored by the polling logic. Note that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.h](h)}(h**Parameters**h]j%)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjSubji)}(hhh]jn)}(h&``struct drm_device *dev`` drm_device h](jt)}(h``struct drm_device *dev``h]jz)}(hjxh]hstruct drm_device *dev}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjrubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjoubah}(h]h ]h"]h$]h&]uh1jhhjSubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjSubh)}(hThis function initializes and then also enables output polling support for **dev**. Drivers which do not have reliable hotplug support in hardware can use this helper infrastructure to regularly poll such connectors for changes in their connection state.h](hKThis function initializes and then also enables output polling support for }(hjɪhhhNhNubj%)}(h**dev**h]hdev}(hjѪhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjɪubh. Drivers which do not have reliable hotplug support in hardware can use this helper infrastructure to regularly poll such connectors for changes in their connection state.}(hjɪhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjSubh)}(hXDrivers can control which connectors are polled by setting the DRM_CONNECTOR_POLL_CONNECT and DRM_CONNECTOR_POLL_DISCONNECT flags. On connectors where probing live outputs can result in visual distortion drivers should not set the DRM_CONNECTOR_POLL_DISCONNECT flag to avoid this. Connectors which have no flag or only DRM_CONNECTOR_POLL_HPD set are completely ignored by the polling logic.h]hXDrivers can control which connectors are polled by setting the DRM_CONNECTOR_POLL_CONNECT and DRM_CONNECTOR_POLL_DISCONNECT flags. On connectors where probing live outputs can result in visual distortion drivers should not set the DRM_CONNECTOR_POLL_DISCONNECT flag to avoid this. Connectors which have no flag or only DRM_CONNECTOR_POLL_HPD set are completely ignored by the polling logic.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjSubh)}(hNote that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.h]hNote that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_kms_helper_poll_fini (C function)c.drm_kms_helper_poll_finihNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6void drm_kms_helper_poll_fini (struct drm_device *dev)h]j)}(h5void drm_kms_helper_poll_fini(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hMubj)}(hdrm_kms_helper_poll_finih]j)}(hdrm_kms_helper_poll_finih]hdrm_kms_helper_poll_fini}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj6hMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjKsbc.drm_kms_helper_poll_finiasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhjhhubj)}(hhh]h)}(h&disable output polling and clean it uph]h&disable output polling and clean it up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h7**Parameters** ``struct drm_device *dev`` drm_deviceh](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubji)}(hhh]jn)}(h%``struct drm_device *dev`` drm_deviceh](jt)}(h``struct drm_device *dev``h]jz)}(hj)h]hstruct drm_device *dev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj#ubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj ubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drmm_kms_helper_poll_init (C function)c.drmm_kms_helper_poll_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6int drmm_kms_helper_poll_init (struct drm_device *dev)h]j)}(h5int drmm_kms_helper_poll_init(struct drm_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrmm_kms_helper_poll_inith]j)}(hdrmm_kms_helper_poll_inith]hdrmm_kms_helper_poll_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjͬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjެhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۬ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drmm_kms_helper_poll_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjxhhubj)}(hhh]h)}(h$initialize and enable output pollingh]h$initialize and enable output polling}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm_device **Description** This function initializes and then also enables output polling support for **dev** similar to drm_kms_helper_poll_init(). Polling will automatically be cleaned up when the DRM device goes away. See drm_kms_helper_poll_init() for more information. **Return** 0 on success, or a negative errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj_ubji)}(hhh]jn)}(h&``struct drm_device *dev`` drm_device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj~ubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubah}(h]h ]h"]h$]h&]uh1jhhj_ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj_ubh)}(hThis function initializes and then also enables output polling support for **dev** similar to drm_kms_helper_poll_init(). Polling will automatically be cleaned up when the DRM device goes away.h](hKThis function initializes and then also enables output polling support for }(hjխhhhNhNubj%)}(h**dev**h]hdev}(hjݭhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjխubho similar to drm_kms_helper_poll_init(). Polling will automatically be cleaned up when the DRM device goes away.}(hjխhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj_ubh)}(h4See drm_kms_helper_poll_init() for more information.h]h4See drm_kms_helper_poll_init() for more information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj_ubh)}(h **Return**h]j%)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj_ubh)}(h10 on success, or a negative errno code otherwise.h]h10 on success, or a negative errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_connector_helper_hpd_irq_event (C function)$c.drm_connector_helper_hpd_irq_eventhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIbool drm_connector_helper_hpd_irq_event (struct drm_connector *connector)h]j)}(hHbool drm_connector_helper_hpd_irq_event(struct drm_connector *connector)h](j)}(hjAh]hbool}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhM ubj)}(h"drm_connector_helper_hpd_irq_eventh]j)}(h"drm_connector_helper_hpd_irq_eventh]h"drm_connector_helper_hpd_irq_event}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjYhM ubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjnsb$c.drm_connector_helper_hpd_irq_eventasbuh1hhjubj)}(h h]h }(hjƮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjԮhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjHhhhjYhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjYhM ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjYhM hjAhhubj)}(hhh]h)}(hhotplug processingh]hhotplug processing}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` drm_connector **Description** Drivers can use this helper function to run a detect cycle on a connector which has the DRM_CONNECTOR_POLL_HPD flag set in its :c:type:`polled` member. This helper function is useful for drivers which can track hotplug interrupts for a single connector. Drivers that want to send a hotplug event for all connectors or can't track hotplug interrupts per connector need to use drm_helper_hpd_irq_event(). This function must be called from process context with no mode setting locks held. Note that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable. **Return** A boolean indicating whether the connector status changed or noth](h)}(h**Parameters**h]j%)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubji)}(hhh]jn)}(h2``struct drm_connector *connector`` drm_connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjLh]hstruct drm_connector *connector}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjFubj)}(hhh]h)}(h drm_connectorh]h drm_connector}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjCubah}(h]h ]h"]h$]h&]uh1jhhj'ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubh)}(hDrivers can use this helper function to run a detect cycle on a connector which has the DRM_CONNECTOR_POLL_HPD flag set in its :c:type:`polled` member.h](hDrivers can use this helper function to run a detect cycle on a connector which has the DRM_CONNECTOR_POLL_HPD flag set in its }(hjhhhNhNubh)}(h:c:type:`polled`h]jz)}(hjh]hpolled}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpolleduh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh member.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjįhMhj'ubh)}(hThis helper function is useful for drivers which can track hotplug interrupts for a single connector. Drivers that want to send a hotplug event for all connectors or can't track hotplug interrupts per connector need to use drm_helper_hpd_irq_event().h]hThis helper function is useful for drivers which can track hotplug interrupts for a single connector. Drivers that want to send a hotplug event for all connectors or can’t track hotplug interrupts per connector need to use drm_helper_hpd_irq_event().}(hjϯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubh)}(hRThis function must be called from process context with no mode setting locks held.h]hRThis function must be called from process context with no mode setting locks held.}(hjޯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubh)}(hNote that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.h]hNote that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubh)}(h@A boolean indicating whether the connector status changed or noth]h@A boolean indicating whether the connector status changed or not}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_helper_hpd_irq_event (C function)c.drm_helper_hpd_irq_eventhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h6bool drm_helper_hpd_irq_event (struct drm_device *dev)h]j)}(h5bool drm_helper_hpd_irq_event(struct drm_device *dev)h](j)}(hjAh]hbool}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM8ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjPhM8ubj)}(hdrm_helper_hpd_irq_eventh]j)}(hdrm_helper_hpd_irq_eventh]hdrm_helper_hpd_irq_event}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjPhM8ubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjesbc.drm_helper_hpd_irq_eventasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hj˰hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(hdevh]hdev}(hjذhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubah}(h]h ]h"]h$]h&]jjuh1jhj?hhhjPhM8ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhjPhM8ubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhjPhM8hj8hhubj)}(hhh]h)}(hhotplug processingh]hhotplug processing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjPhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm_device **Description** Drivers can use this helper function to run a detect cycle on all connectors which have the DRM_CONNECTOR_POLL_HPD flag set in their :c:type:`polled` member. All other connectors are ignored, which is useful to avoid reprobing fixed panels. This helper function is useful for drivers which can't or don't track hotplug interrupts for each connector. Drivers which support hotplug interrupts for each connector individually and which have a more fine-grained detect logic can use drm_connector_helper_hpd_irq_event(). Alternatively, they should bypass this code and directly call drm_kms_helper_hotplug_event() in case the connector state changed. This function must be called from process context with no mode setting locks held. Note that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable. **Return** A boolean indicating whether the connector status changed or noth](h)}(h**Parameters**h]j%)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM"hjubji)}(hhh]jn)}(h&``struct drm_device *dev`` drm_device h](jt)}(h``struct drm_device *dev``h]jz)}(hjCh]hstruct drm_device *dev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj=ubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhMhj:ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM!hjubh)}(hDrivers can use this helper function to run a detect cycle on all connectors which have the DRM_CONNECTOR_POLL_HPD flag set in their :c:type:`polled` member. All other connectors are ignored, which is useful to avoid reprobing fixed panels.h](hDrivers can use this helper function to run a detect cycle on all connectors which have the DRM_CONNECTOR_POLL_HPD flag set in their }(hjhhhNhNubh)}(h:c:type:`polled`h]jz)}(hjh]hpolled}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpolleduh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM!hjubh[ member. All other connectors are ignored, which is useful to avoid reprobing fixed panels.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjubh)}(hlThis helper function is useful for drivers which can't or don't track hotplug interrupts for each connector.h]hpThis helper function is useful for drivers which can’t or don’t track hotplug interrupts for each connector.}(hjƱhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM&hjubh)}(hX(Drivers which support hotplug interrupts for each connector individually and which have a more fine-grained detect logic can use drm_connector_helper_hpd_irq_event(). Alternatively, they should bypass this code and directly call drm_kms_helper_hotplug_event() in case the connector state changed.h]hX(Drivers which support hotplug interrupts for each connector individually and which have a more fine-grained detect logic can use drm_connector_helper_hpd_irq_event(). Alternatively, they should bypass this code and directly call drm_kms_helper_hotplug_event() in case the connector state changed.}(hjձhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM)hjubh)}(hRThis function must be called from process context with no mode setting locks held.h]hRThis function must be called from process context with no mode setting locks held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM/hjubh)}(hNote that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.h]hNote that a connector can be both polled and probed from the hotplug handler, in case the hotplug interrupt is known to be unreliable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM2hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM5hjubh)}(h@A boolean indicating whether the connector status changed or noth]h@A boolean indicating whether the connector status changed or not}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM5hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_crtc_helper_mode_valid_fixed (C function)"c.drm_crtc_helper_mode_valid_fixedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(henum drm_mode_status drm_crtc_helper_mode_valid_fixed (struct drm_crtc *crtc, const struct drm_display_mode *mode, const struct drm_display_mode *fixed_mode)h]j)}(henum drm_mode_status drm_crtc_helper_mode_valid_fixed(struct drm_crtc *crtc, const struct drm_display_mode *mode, const struct drm_display_mode *fixed_mode)h](j)}(hjl h]henum}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMiubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjVhMiubh)}(hhh]j)}(hdrm_mode_statush]hdrm_mode_status}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j%)}j drm_crtc_helper_mode_valid_fixedsb"c.drm_crtc_helper_mode_valid_fixedasbuh1hhjEhhhjVhMiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjVhMiubj)}(h drm_crtc_helper_mode_valid_fixedh]j)}(hjh]h drm_crtc_helper_mode_valid_fixed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjVhMiubj)}(hg(struct drm_crtc *crtc, const struct drm_display_mode *mode, const struct drm_display_mode *fixed_mode)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjòhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjԲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѲubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjֲmodnameN classnameNjj)}j]j"c.drm_crtc_helper_mode_valid_fixedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j"c.drm_crtc_helper_mode_valid_fixedasbuh1hhj"ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)const struct drm_display_mode *fixed_modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj̳hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjٳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_crtc_helper_mode_valid_fixedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h fixed_modeh]h fixed_mode}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjVhMiubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjVhMiubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhjVhMihj>hhubj)}(hhh]h)}(hValidates a display modeh]hValidates a display mode}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMahjJhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjVhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct drm_crtc *crtc`` the crtc ``const struct drm_display_mode *mode`` the mode to validate ``const struct drm_display_mode *fixed_mode`` the display hardware's mode **Return** MODE_OK on success, or another mode-status code otherwise.h](h)}(h**Parameters**h]j%)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMehjiubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` the crtc h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMbhjubj)}(hhh]h)}(hthe crtch]hthe crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMbhjubjn)}(h=``const struct drm_display_mode *mode`` the mode to validate h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjǴh]h#const struct drm_display_mode *mode}(hjɴhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŴubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMchjubj)}(hhh]h)}(hthe mode to validateh]hthe mode to validate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܴhMchjݴubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjܴhMchjubjn)}(hJ``const struct drm_display_mode *fixed_mode`` the display hardware's mode h](jt)}(h-``const struct drm_display_mode *fixed_mode``h]jz)}(hjh]h)const struct drm_display_mode *fixed_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMdhjubj)}(hhh]h)}(hthe display hardware's modeh]hthe display hardware’s mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMdhjubeh}(h]h ]h"]h$]h&]uh1jhhjiubh)}(h **Return**h]j%)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMfhjiubh)}(h:MODE_OK on success, or another mode-status code otherwise.h]h:MODE_OK on success, or another mode-status code otherwise.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMfhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_connector_helper_get_modes_fixed (C function)&c.drm_connector_helper_get_modes_fixedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(huint drm_connector_helper_get_modes_fixed (struct drm_connector *connector, const struct drm_display_mode *fixed_mode)h]j)}(htint drm_connector_helper_get_modes_fixed(struct drm_connector *connector, const struct drm_display_mode *fixed_mode)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhjhMubj)}(h$drm_connector_helper_get_modes_fixedh]j)}(h$drm_connector_helper_get_modes_fixedh]h$drm_connector_helper_get_modes_fixed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhjhMubj)}(hL(struct drm_connector *connector, const struct drm_display_mode *fixed_mode)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjʵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj۵hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjصubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjݵmodnameN classnameNjj)}j]j%)}jjsb&c.drm_connector_helper_get_modes_fixedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)const struct drm_display_mode *fixed_modeh](j)}(hjch]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j&c.drm_connector_helper_get_modes_fixedasbuh1hhj+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(h fixed_modeh]h fixed_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjhMubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjuhhubj)}(hhh]h)}(h)Duplicates a display mode for a connectorh]h)Duplicates a display mode for a connector}(hj˶hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMyhjȶhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` the connector ``const struct drm_display_mode *fixed_mode`` the display hardware's mode **Description** This function duplicates a display modes for a connector. Drivers for hardware that only supports a single fixed mode can use this function in their connector's get_modes helper. **Return** The number of created modes.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM}hjubji)}(hhh](jn)}(h2``struct drm_connector *connector`` the connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj h]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMzhjubj)}(hhh]h)}(h the connectorh]h the connector}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMzhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMzhjubjn)}(hJ``const struct drm_display_mode *fixed_mode`` the display hardware's mode h](jt)}(h-``const struct drm_display_mode *fixed_mode``h]jz)}(hjEh]h)const struct drm_display_mode *fixed_mode}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM{hj?ubj)}(hhh]h)}(hthe display hardware's modeh]hthe display hardware’s mode}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM{hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhM{hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM}hjubh)}(hThis function duplicates a display modes for a connector. Drivers for hardware that only supports a single fixed mode can use this function in their connector's get_modes helper.h]hThis function duplicates a display modes for a connector. Drivers for hardware that only supports a single fixed mode can use this function in their connector’s get_modes helper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM}hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hThe number of created modes.h]hThe number of created modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_connector_helper_get_modes (C function) c.drm_connector_helper_get_modeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDint drm_connector_helper_get_modes (struct drm_connector *connector)h]j)}(hCint drm_connector_helper_get_modes(struct drm_connector *connector)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_connector_helper_get_modesh]j)}(hdrm_connector_helper_get_modesh]hdrm_connector_helper_get_modes}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jjsb c.drm_connector_helper_get_modesasbuh1hhj%ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(hj9h]h*}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj%ubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]j߷ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hRead EDID and update connector.h]hRead EDID and update connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjĸjjĸjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` The connector **Description** Read the EDID using drm_edid_read() (which requires that connector->ddc is set), and update the connector using the EDID. This can be used as the "default" connector helper .get_modes() hook if the driver does not need any special processing. This is sets the example what custom .get_modes() hooks should do regarding EDID read and connector update. **Return** Number of modes.h](h)}(h**Parameters**h]j%)}(hjθh]h Parameters}(hjиhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj̸ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjȸubji)}(hhh]jn)}(h2``struct drm_connector *connector`` The connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(h The connectorh]h The connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjȸubh)}(h**Description**h]j%)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjȸubh)}(hyRead the EDID using drm_edid_read() (which requires that connector->ddc is set), and update the connector using the EDID.h]hyRead the EDID using drm_edid_read() (which requires that connector->ddc is set), and update the connector using the EDID.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjȸubh)}(hThis can be used as the "default" connector helper .get_modes() hook if the driver does not need any special processing. This is sets the example what custom .get_modes() hooks should do regarding EDID read and connector update.h]hThis can be used as the “default” connector helper .get_modes() hook if the driver does not need any special processing. This is sets the example what custom .get_modes() hooks should do regarding EDID read and connector update.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjȸubh)}(h **Return**h]j%)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjȸubh)}(hNumber of modes.h]hNumber of modes.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjȸubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_connector_helper_tv_get_modes (C function)#c.drm_connector_helper_tv_get_modeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hGint drm_connector_helper_tv_get_modes (struct drm_connector *connector)h]j)}(hFint drm_connector_helper_tv_get_modes(struct drm_connector *connector)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h!drm_connector_helper_tv_get_modesh]j)}(h!drm_connector_helper_tv_get_modesh]h!drm_connector_helper_tv_get_modes}(hjĹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܹubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܹubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjƹsb#c.drm_connector_helper_tv_get_modesasbuh1hhjܹubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܹubj9)}(hj9h]h*}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjܹubj)}(h connectorh]h connector}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܹubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjعubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h,Fills the modes availables to a TV connectorh]h,Fills the modes availables to a TV connector}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` The connector **Description** Fills the available modes for a TV connector based on the supported TV modes, and the default mode expressed by the kernel command line. This can be used as the default TV connector helper .get_modes() hook if the driver does not need any special processing. **Return** The number of modes added to the connector.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubji)}(hhh]jn)}(h2``struct drm_connector *connector`` The connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(h The connectorh]h The connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjߺh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjݺubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hFills the available modes for a TV connector based on the supported TV modes, and the default mode expressed by the kernel command line.h]hFills the available modes for a TV connector based on the supported TV modes, and the default mode expressed by the kernel command line.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hyThis can be used as the default TV connector helper .get_modes() hook if the driver does not need any special processing.h]hyThis can be used as the default TV connector helper .get_modes() hook if the driver does not need any special processing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(h+The number of modes added to the connector.h]h+The number of modes added to the connector.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_connector_helper_detect_from_ddc (C function)&c.drm_connector_helper_detect_from_ddchNtauh1jxhjhhhNhNubj)}(hhh](j)}(h{int drm_connector_helper_detect_from_ddc (struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, bool force)h]j)}(hzint drm_connector_helper_detect_from_ddc(struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, bool force)h](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM$ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjhhM$ubj)}(h$drm_connector_helper_detect_from_ddch]j)}(h$drm_connector_helper_detect_from_ddch]h$drm_connector_helper_detect_from_ddc}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVhhhjhhM$ubj)}(hR(struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, bool force)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj}sb&c.drm_connector_helper_detect_from_ddcasbuh1hhjubj)}(h h]h }(hjջhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]jѻ&c.drm_connector_helper_detect_from_ddcasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool forceh](j)}(hjAh]hbool}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hforceh]hforce}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjVhhhjhhM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjhhM$ubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1jhjhhM$hjOhhubj)}(hhh]h)}(h&Read EDID and detect connector status.h]h&Read EDID and detect connector status.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjּjjּjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` The connector ``struct drm_modeset_acquire_ctx *ctx`` Acquire context ``bool force`` Perform screen-destructive operations, if necessary **Description** Detects the connector status by reading the EDID using drm_probe_ddc(), which requires connector->ddc to be set. Returns connector_status_connected on success or connector_status_disconnected on failure. **Return** The connector status as defined by enum drm_connector_status.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj޼ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjڼubji)}(hhh](jn)}(h2``struct drm_connector *connector`` The connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(h The connectorh]h The connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h8``struct drm_modeset_acquire_ctx *ctx`` Acquire context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hj8h]h#struct drm_modeset_acquire_ctx *ctx}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhj2ubj)}(hhh]h)}(hAcquire contexth]hAcquire context}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhjubjn)}(hC``bool force`` Perform screen-destructive operations, if necessary h](jt)}(h``bool force``h]jz)}(hjqh]h bool force}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjkubj)}(hhh]h)}(h3Perform screen-destructive operations, if necessaryh]h3Perform screen-destructive operations, if necessary}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjڼubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjڼubh)}(hDetects the connector status by reading the EDID using drm_probe_ddc(), which requires connector->ddc to be set. Returns connector_status_connected on success or connector_status_disconnected on failure.h]hDetects the connector status by reading the EDID using drm_probe_ddc(), which requires connector->ddc to be set. Returns connector_status_connected on success or connector_status_disconnected on failure.}(hj½hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chMhjڼubh)}(h **Return**h]j%)}(hjӽh]hReturn}(hjսhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjѽubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM!hjڼubh)}(h=The connector status as defined by enum drm_connector_status.h]h=The connector status as defined by enum drm_connector_status.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:354: ./drivers/gpu/drm/drm_probe_helper.chM!hjڼubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h])output-probing-helper-functions-referenceah ]h"])output probing helper functions referenceah$]h&]uh1hhhhhhhhM]ubh)}(hhh](h)}(hEDID Helper Functions Referenceh]hEDID Helper Functions Reference}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMfubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_edid_decode_mfg_id (C function)c.drm_edid_decode_mfg_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h>const char * drm_edid_decode_mfg_id (u16 mfg_id, char vend[4])h]j)}(hhMtubj)}(hcharh]hchar}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj>hMtubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj>hMtubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-hhhj>hMtubj)}(hdrm_edid_decode_mfg_idh]j)}(hdrm_edid_decode_mfg_idh]hdrm_edid_decode_mfg_id}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj>hMtubj)}(h(u16 mfg_id, char vend[4])h](j)}(h u16 mfg_idh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj|sbc.drm_edid_decode_mfg_idasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmfg_idh]hmfg_id}(hjǾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h char vend[4]h](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܾubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܾubj)}(hvendh]hvend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܾubj9)}(hjh]h[}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjܾubj)}(hjh]h4}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܾubj9)}(hjh]h]}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjܾubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj>hMtubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj>hMtubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj>hMthj&hhubj)}(hhh]h)}(hDecode the manufacturer IDh]hDecode the manufacturer ID}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMohjJhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj>hMtubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjhNhNubj)}(h**Parameters** ``u16 mfg_id`` The manufacturer ID ``char vend[4]`` A 4-byte buffer to store the 3-letter vendor string plus a '\0' terminationh](h)}(h**Parameters**h]j%)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMshjiubji)}(hhh](jn)}(h#``u16 mfg_id`` The manufacturer ID h](jt)}(h``u16 mfg_id``h]jz)}(hjh]h u16 mfg_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMphjubj)}(hhh]h)}(hThe manufacturer IDh]hThe manufacturer ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMphjubjn)}(h\``char vend[4]`` A 4-byte buffer to store the 3-letter vendor string plus a '\0' terminationh](jt)}(h``char vend[4]``h]jz)}(hjǿh]h char vend[4]}(hjɿhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjſubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMqhjubj)}(hhh]h)}(hKA 4-byte buffer to store the 3-letter vendor string plus a '\0' terminationh]hOA 4-byte buffer to store the 3-letter vendor string plus a ‘0’ termination}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܿhMqhjݿubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjܿhMqhjubeh}(h]h ]h"]h$]h&]uh1jhhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_edid_encode_panel_id (C macro)c.drm_edid_encode_panel_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_edid_encode_panel_idh]j)}(hdrm_edid_encode_panel_idh]j)}(hdrm_edid_encode_panel_idh]j)}(hjh]hdrm_edid_encode_panel_id}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](jmacroeh"]h$]h&]jjjjPjjPjjjuh1jhhhjhNhNubh)}(hM``drm_edid_encode_panel_id (vend_chr_0, vend_chr_1, vend_chr_2, product_id)``h]jz)}(hjVh]hIdrm_edid_encode_panel_id (vend_chr_0, vend_chr_1, vend_chr_2, product_id)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjhhubjb=)}(h:Encode an ID for matching against drm_edid_get_panel_id() h]h)}(h9Encode an ID for matching against drm_edid_get_panel_id()h]h9Encode an ID for matching against drm_edid_get_panel_id()}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjlubah}(h]h ]h"]h$]h&]uh1ja=hj~hMhjhhubj)}(hX**Parameters** ``vend_chr_0`` First character of the vendor string. ``vend_chr_1`` Second character of the vendor string. ``vend_chr_2`` Third character of the vendor string. ``product_id`` The 16-bit product ID. **Description** This is a macro so that it can be calculated at compile time and used as an initializer. For instance: drm_edid_encode_panel_id('B', 'O', 'E', 0x2d08) => 0x09e52d08 **Return** a 32-bit ID per panel.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubji)}(hhh](jn)}(h5``vend_chr_0`` First character of the vendor string. h](jt)}(h``vend_chr_0``h]jz)}(hjh]h vend_chr_0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(h%First character of the vendor string.h]h%First character of the vendor string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h6``vend_chr_1`` Second character of the vendor string. h](jt)}(h``vend_chr_1``h]jz)}(hjh]h vend_chr_1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(h&Second character of the vendor string.h]h&Second character of the vendor string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h5``vend_chr_2`` Third character of the vendor string. h](jt)}(h``vend_chr_2``h]jz)}(hjh]h vend_chr_2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(h%Third character of the vendor string.h]h%Third character of the vendor string.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hMhjubjn)}(h&``product_id`` The 16-bit product ID. h](jt)}(h``product_id``h]jz)}(hjUh]h product_id}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjOubj)}(hhh]h)}(hThe 16-bit product ID.h]hThe 16-bit product ID.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubh)}(hXThis is a macro so that it can be calculated at compile time and used as an initializer.h]hXThis is a macro so that it can be calculated at compile time and used as an initializer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubji)}(hhh]jn)}(hLFor instance: drm_edid_encode_panel_id('B', 'O', 'E', 0x2d08) => 0x09e52d08 h](jt)}(h For instance:h]h For instance:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(h=drm_edid_encode_panel_id('B', 'O', 'E', 0x2d08) => 0x09e52d08h]hIdrm_edid_encode_panel_id(‘B’, ‘O’, ‘E’, 0x2d08) => 0x09e52d08}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubh)}(ha 32-bit ID per panel.h]ha 32-bit ID per panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edid_decode_panel_id (C function)c.drm_edid_decode_panel_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKvoid drm_edid_decode_panel_id (u32 panel_id, char vend[4], u16 *product_id)h]j)}(hJvoid drm_edid_decode_panel_id(u32 panel_id, char vend[4], u16 *product_id)h](j)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjChMubj)}(hdrm_edid_decode_panel_idh]j)}(hdrm_edid_decode_panel_idh]hdrm_edid_decode_panel_id}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhjChMubj)}(h-(u32 panel_id, char vend[4], u16 *product_id)h](j)}(h u32 panel_idh](h)}(hhh]j)}(hu32h]hu32}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j%)}jjXsbc.drm_edid_decode_panel_idasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hpanel_idh]hpanel_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h char vend[4]h](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvendh]hvend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]h4}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjh]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hu16 *product_idh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edid_decode_panel_idasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h product_idh]h product_id}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhjChMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhjChMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jhjChMhj*hhubj)}(hhh]h)}(h1Decode a panel ID from drm_edid_encode_panel_id()h]h1Decode a panel ID from drm_edid_encode_panel_id()}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``u32 panel_id`` The panel ID to decode. ``char vend[4]`` A 4-byte buffer to store the 3-letter vendor string plus a '\0' termination ``u16 *product_id`` The product ID will be returned here. **Description** For instance, after: drm_edid_decode_panel_id(0x09e52d08, vend, :c:type:`product_id`) These will be true: vend[0] = 'B' vend[1] = 'O' vend[2] = 'E' vend[3] = '\0' product_id = 0x2d08h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubji)}(hhh](jn)}(h)``u32 panel_id`` The panel ID to decode. h](jt)}(h``u32 panel_id``h]jz)}(hjh]h u32 panel_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(hThe panel ID to decode.h]hThe panel ID to decode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h]``char vend[4]`` A 4-byte buffer to store the 3-letter vendor string plus a '\0' termination h](jt)}(h``char vend[4]``h]jz)}(hjh]h char vend[4]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(hKA 4-byte buffer to store the 3-letter vendor string plus a '\0' terminationh]hOA 4-byte buffer to store the 3-letter vendor string plus a ‘0’ termination}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubjn)}(h:``u16 *product_id`` The product ID will be returned here. h](jt)}(h``u16 *product_id``h]jz)}(hj2h]hu16 *product_id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhj,ubj)}(hhh]h)}(h%The product ID will be returned here.h]h%The product ID will be returned here.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubji)}(hhh](jn)}(hUFor instance, after: drm_edid_decode_panel_id(0x09e52d08, vend, :c:type:`product_id`)h](jt)}(hFor instance, after:h]hFor instance, after:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(h@drm_edid_decode_panel_id(0x09e52d08, vend, :c:type:`product_id`)h](h+drm_edid_decode_panel_id(0x09e52d08, vend, }(hjhhhNhNubh)}(h:c:type:`product_id`h]jz)}(hjh]h product_id}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj product_iduh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h`These will be true: vend[0] = 'B' vend[1] = 'O' vend[2] = 'E' vend[3] = '\0' product_id = 0x2d08h](jt)}(hThese will be true:h]hThese will be true:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubj)}(hhh]h)}(hLvend[0] = 'B' vend[1] = 'O' vend[2] = 'E' vend[3] = '\0' product_id = 0x2d08h]h\vend[0] = ‘B’ vend[1] = ‘O’ vend[2] = ‘E’ vend[3] = ‘0’ product_id = 0x2d08}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./include/drm/drm_edid.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edid_header_is_valid (C function)c.drm_edid_header_is_validhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h0int drm_edid_header_is_valid (const void *_edid)h]j)}(h/int drm_edid_header_is_valid(const void *_edid)h](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj?hMubj)}(hdrm_edid_header_is_validh]j)}(hdrm_edid_header_is_validh]hdrm_edid_header_is_valid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj?hMubj)}(h(const void *_edid)h]j)}(hconst void *_edidh](j)}(hjch]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(h_edidh]h_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubah}(h]h ]h"]h$]h&]jjuh1jhj-hhhj?hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)hhhj?hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj?hMhj&hhubj)}(hhh]h)}(h.sanity check the header of the base EDID blockh]h.sanity check the header of the base EDID block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const void *_edid`` pointer to raw base EDID block **Description** Sanity check the header of the base EDID block. **Return** 8 if the header is perfect, down to 0 if it's totally wrong.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh]jn)}(h5``const void *_edid`` pointer to raw base EDID block h](jt)}(h``const void *_edid``h]jz)}(hjh]hconst void *_edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hpointer to raw base EDID blockh]hpointer to raw base EDID block}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h/Sanity check the header of the base EDID block.h]h/Sanity check the header of the base EDID block.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h<8 if the header is perfect, down to 0 if it's totally wrong.h]h>8 if the header is perfect, down to 0 if it’s totally wrong.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_is_valid (C function)c.drm_edid_is_validhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h*bool drm_edid_is_valid (struct edid *edid)h]j)}(h)bool drm_edid_is_valid(struct edid *edid)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_edid_is_validh]j)}(hdrm_edid_is_validh]hdrm_edid_is_valid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct edid *edid)h]j)}(hstruct edid *edidh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsbc.drm_edid_is_validasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hedidh]hedid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hsanity check EDID datah]hsanity check EDID data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct edid *edid`` EDID data **Description** Sanity-check an entire EDID record (including extensions) **Return** True if the EDID data is valid, false otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh]jn)}(h ``struct edid *edid`` EDID data h](jt)}(h``struct edid *edid``h]jz)}(hjh]hstruct edid *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(h EDID datah]h EDID data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h9Sanity-check an entire EDID record (including extensions)h]h9Sanity-check an entire EDID record (including extensions)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h0True if the EDID data is valid, false otherwise.h]h0True if the EDID data is valid, false otherwise.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_valid (C function)c.drm_edid_validhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h5bool drm_edid_valid (const struct drm_edid *drm_edid)h]j)}(h4bool drm_edid_valid(const struct drm_edid *drm_edid)h](j)}(hjAh]hbool}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjxhMubj)}(hdrm_edid_validh]j)}(hdrm_edid_validh]hdrm_edid_valid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjxhMubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_edid_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjghhhjxhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjchhhjxhMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhjxhMhj`hhubj)}(hhh]h)}(hsanity check EDID datah]hsanity check EDID data}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_edid *drm_edid`` EDID data **Description** Sanity check an EDID. Cross check block count against allocated size and checksum the blocks. **Return** True if the EDID data is valid, false otherwise.h](h)}(h**Parameters**h]j%)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjaubji)}(hhh]jn)}(h.``const struct drm_edid *drm_edid`` EDID data h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjh]hconst struct drm_edid *drm_edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(h EDID datah]h EDID data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj}ubah}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjaubh)}(h]Sanity check an EDID. Cross check block count against allocated size and checksum the blocks.h]h]Sanity check an EDID. Cross check block count against allocated size and checksum the blocks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjaubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjaubh)}(h0True if the EDID data is valid, false otherwise.h]h0True if the EDID data is valid, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_edid_override_connector_update (C function)$c.drm_edid_override_connector_updatehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hHint drm_edid_override_connector_update (struct drm_connector *connector)h]j)}(hGint drm_edid_override_connector_update(struct drm_connector *connector)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj;hMubj)}(h"drm_edid_override_connector_updateh]j)}(h"drm_edid_override_connector_updateh]h"drm_edid_override_connector_update}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj;hMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjPsb$c.drm_edid_override_connector_updateasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubah}(h]h ]h"]h$]h&]jjuh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj%hhhj;hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj;hMhj"hhubj)}(hhh]h)}(h%add modes from override/firmware EDIDh]h%add modes from override/firmware EDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector we're probing **Description** Add modes from the override/firmware EDID, if available. Only to be used from drm_helper_probe_single_connector_modes() as a fallback for when DDC probe failed during drm_get_edid() and caused the override/firmware EDID to be skipped. **Return** The number of modes added or 0 if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj ubji)}(hhh]jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj.h]hstruct drm_connector *connector}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj(ubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhjChMhj%ubah}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj ubh)}(hAdd modes from the override/firmware EDID, if available. Only to be used from drm_helper_probe_single_connector_modes() as a fallback for when DDC probe failed during drm_get_edid() and caused the override/firmware EDID to be skipped.h]hAdd modes from the override/firmware EDID, if available. Only to be used from drm_helper_probe_single_connector_modes() as a fallback for when DDC probe failed during drm_get_edid() and caused the override/firmware EDID to be skipped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj ubh)}(h7The number of modes added or 0 if we couldn't find any.h]h9The number of modes added or 0 if we couldn’t find any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_raw (C function)c.drm_edid_rawhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hBconst struct edid * drm_edid_raw (const struct drm_edid *drm_edid)h]j)}(h@const struct edid *drm_edid_raw(const struct drm_edid *drm_edid)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]j)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j drm_edid_rawsbc.drm_edid_rawasbuh1hhjhhhjhM ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj9)}(hj9h]h*}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM ubj)}(h drm_edid_rawh]j)}(hj-h]h drm_edid_raw}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j+c.drm_edid_rawasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h#Get a pointer to the raw EDID data.h]h#Get a pointer to the raw EDID data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_edid *drm_edid`` drm_edid container **Description** Get a pointer to the raw EDID data. This is for transition only. Avoid using this like the plague. **Return** Pointer to raw EDID data.h](h)}(h**Parameters**h]j%)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj"ubji)}(hhh]jn)}(h7``const struct drm_edid *drm_edid`` drm_edid container h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjGh]hconst struct drm_edid *drm_edid}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjAubj)}(hhh]h)}(hdrm_edid containerh]hdrm_edid container}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj\hM hj>ubah}(h]h ]h"]h$]h&]uh1jhhj"ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj"ubh)}(h#Get a pointer to the raw EDID data.h]h#Get a pointer to the raw EDID data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj"ubh)}(h>This is for transition only. Avoid using this like the plague.h]h>This is for transition only. Avoid using this like the plague.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj"ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj"ubh)}(hPointer to raw EDID data.h]hPointer to raw EDID data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_alloc (C function)c.drm_edid_allochNtauh1jxhjhhhNhNubj)}(hhh](j)}(hFconst struct drm_edid * drm_edid_alloc (const void *edid, size_t size)h]j)}(hDconst struct drm_edid *drm_edid_alloc(const void *edid, size_t size)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j%)}jdrm_edid_allocsbc.drm_edid_allocasbuh1hhjhhhj hM ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM ubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj hM ubj)}(hdrm_edid_alloch]j)}(hjUh]hdrm_edid_alloc}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM ubj)}(h(const void *edid, size_t size)h](j)}(hconst void *edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jSc.drm_edid_allocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hM hjhhubj)}(hhh]h)}(h!Allocate a new drm_edid containerh]h!Allocate a new drm_edid container}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjEhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const void *edid`` Pointer to raw EDID data ``size_t size`` Size of memory allocated for EDID **Description** Allocate a new drm_edid container. Do not calculate edid size from edid, pass the actual size that has been allocated for the data. There is no validation of the raw EDID data against the size, but at least the EDID base block must fit in the buffer. The returned pointer must be freed using drm_edid_free(). **Return** drm_edid container, or NULL on errorsh](h)}(h**Parameters**h]j%)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjdubji)}(hhh](jn)}(h.``const void *edid`` Pointer to raw EDID data h](jt)}(h``const void *edid``h]jz)}(hjh]hconst void *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(hPointer to raw EDID datah]hPointer to raw EDID data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h2``size_t size`` Size of memory allocated for EDID h](jt)}(h``size_t size``h]jz)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(h!Size of memory allocated for EDIDh]h!Size of memory allocated for EDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjdubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjdubh)}(hAllocate a new drm_edid container. Do not calculate edid size from edid, pass the actual size that has been allocated for the data. There is no validation of the raw EDID data against the size, but at least the EDID base block must fit in the buffer.h]hAllocate a new drm_edid container. Do not calculate edid size from edid, pass the actual size that has been allocated for the data. There is no validation of the raw EDID data against the size, but at least the EDID base block must fit in the buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjdubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjdubh)}(h **Return**h]j%)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjdubh)}(h%drm_edid container, or NULL on errorsh]h%drm_edid container, or NULL on errors}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_dup (C function)c.drm_edid_duphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hFconst struct drm_edid * drm_edid_dup (const struct drm_edid *drm_edid)h]j)}(hDconst struct drm_edid *drm_edid_dup(const struct drm_edid *drm_edid)h](j)}(hjch]hconst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j drm_edid_dupsbc.drm_edid_dupasbuh1hhjthhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjhM ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjthhhjhM ubj)}(h drm_edid_duph]j)}(hjh]h drm_edid_dup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhhjhM ubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]jc.drm_edid_dupasbuh1hhj ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjthhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjhM ubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjmhhubj)}(hhh]h)}(hDuplicate a drm_edid containerh]hDuplicate a drm_edid container}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_edid *drm_edid`` EDID to duplicate **Description** The returned pointer must be freed using drm_edid_free(). **Return** drm_edid container copy, or NULL on errorsh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh]jn)}(h6``const struct drm_edid *drm_edid`` EDID to duplicate h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjh]hconst struct drm_edid *drm_edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(hEDID to duplicateh]hEDID to duplicate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h **Return**h]j%)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h*drm_edid container copy, or NULL on errorsh]h*drm_edid container copy, or NULL on errors}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_free (C function)c.drm_edid_freehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4void drm_edid_free (const struct drm_edid *drm_edid)h]j)}(h3void drm_edid_free(const struct drm_edid *drm_edid)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h drm_edid_freeh]j)}(h drm_edid_freeh]h drm_edid_free}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsbc.drm_edid_freeasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrm_edidh]hdrm_edid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hFree the drm_edid containerh]hFree the drm_edid container}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hB**Parameters** ``const struct drm_edid *drm_edid`` EDID to freeh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh]jn)}(h0``const struct drm_edid *drm_edid`` EDID to freeh](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjh]hconst struct drm_edid *drm_edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(h EDID to freeh]h EDID to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_probe_ddc (C function)c.drm_probe_ddchNtauh1jxhjhhhNhNubj)}(hhh](j)}(h0bool drm_probe_ddc (struct i2c_adapter *adapter)h]j)}(h/bool drm_probe_ddc(struct i2c_adapter *adapter)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h drm_probe_ddch]j)}(h drm_probe_ddch]h drm_probe_ddc}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct i2c_adapter *adapter)h]j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j%)}jj)sbc.drm_probe_ddcasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hprobe DDC presenceh]hprobe DDC presence}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hv**Parameters** ``struct i2c_adapter *adapter`` I2C adapter to probe **Return** True on success, false on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh]jn)}(h5``struct i2c_adapter *adapter`` I2C adapter to probe h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjh]hstruct i2c_adapter *adapter}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(hI2C adapter to probeh]hI2C adapter to probe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h"True on success, false on failure.h]h"True on success, false on failure.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_get_edid (C function)c.drm_get_edidhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hYstruct edid * drm_get_edid (struct drm_connector *connector, struct i2c_adapter *adapter)h]j)}(hWstruct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]j)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j drm_get_edidsbc.drm_get_edidasbuh1hhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM ubj)}(h drm_get_edidh]j)}(hjh]h drm_get_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h>(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]jc.drm_get_edidasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_get_edidasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1jhjhM hj|hhubj)}(hhh]h)}(hget EDID data, if availableh]hget EDID data, if available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj|hhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hXB**Parameters** ``struct drm_connector *connector`` connector we're probing ``struct i2c_adapter *adapter`` I2C adapter to use for DDC **Description** Poke the given I2C channel to grab EDID data if possible. If found, attach it to the connector. **Return** Pointer to valid EDID or NULL if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj3h]hstruct drm_connector *connector}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhM hj*ubjn)}(h;``struct i2c_adapter *adapter`` I2C adapter to use for DDC h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjlh]hstruct i2c_adapter *adapter}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjfubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj*ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h`Poke the given I2C channel to grab EDID data if possible. If found, attach it to the connector.h]h`Poke the given I2C channel to grab EDID data if possible. If found, attach it to the connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h6Pointer to valid EDID or NULL if we couldn't find any.h]h8Pointer to valid EDID or NULL if we couldn’t find any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_edid_read_custom (C function)c.drm_edid_read_customhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hwconst struct drm_edid * drm_edid_read_custom (struct drm_connector *connector, read_block_fn read_block, void *context)h]j)}(huconst struct drm_edid *drm_edid_read_custom(struct drm_connector *connector, read_block_fn read_block, void *context)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMF ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMF ubj)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMF ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMF ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j%)}jdrm_edid_read_customsbc.drm_edid_read_customasbuh1hhjhhhj hMF ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMF ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj hMF ubj)}(hdrm_edid_read_customh]j)}(hjkh]hdrm_edid_read_custom}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMF ubj)}(hJ(struct drm_connector *connector, read_block_fn read_block, void *context)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jic.drm_edid_read_customasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hread_block_fn read_blockh](h)}(hhh]j)}(h read_block_fnh]h read_block_fn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jic.drm_edid_read_customasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h read_blockh]h read_block}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *contexth](j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\ubj)}(hcontexth]hcontext}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMF ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMF ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMF hjhhubj)}(hhh]h)}(h3Read EDID data using given EDID block read functionh]h3Read EDID data using given EDID block read function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM0 hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMF ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` Connector to use ``read_block_fn read_block`` EDID block read function ``void *context`` Private data passed to the block read function **Description** When the I2C adapter connected to the DDC bus is hidden behind a device that exposes a different interface to read EDID blocks this function can be used to get EDID data using a custom block read function. As in the general case the DDC bus is accessible by the kernel at the I2C level, drivers must make all reasonable efforts to expose it as an I2C adapter and use drm_edid_read() or drm_edid_read_ddc() instead of abusing this function. The EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads. The returned pointer must be freed using drm_edid_free(). **Return** Pointer to EDID, or NULL if probe/read failed.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM4 hjubji)}(hhh](jn)}(h5``struct drm_connector *connector`` Connector to use h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM1 hjubj)}(hhh]h)}(hConnector to useh]hConnector to use}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM1 hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hM1 hjubjn)}(h6``read_block_fn read_block`` EDID block read function h](jt)}(h``read_block_fn read_block``h]jz)}(hj-h]hread_block_fn read_block}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM2 hj'ubj)}(hhh]h)}(hEDID block read functionh]hEDID block read function}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM2 hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhM2 hjubjn)}(hA``void *context`` Private data passed to the block read function h](jt)}(h``void *context``h]jz)}(hjfh]h void *context}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM3 hj`ubj)}(hhh]h)}(h.Private data passed to the block read functionh]h.Private data passed to the block read function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hM3 hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hM3 hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM5 hjubh)}(hWhen the I2C adapter connected to the DDC bus is hidden behind a device that exposes a different interface to read EDID blocks this function can be used to get EDID data using a custom block read function.h]hWhen the I2C adapter connected to the DDC bus is hidden behind a device that exposes a different interface to read EDID blocks this function can be used to get EDID data using a custom block read function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM5 hjubh)}(hAs in the general case the DDC bus is accessible by the kernel at the I2C level, drivers must make all reasonable efforts to expose it as an I2C adapter and use drm_edid_read() or drm_edid_read_ddc() instead of abusing this function.h]hAs in the general case the DDC bus is accessible by the kernel at the I2C level, drivers must make all reasonable efforts to expose it as an I2C adapter and use drm_edid_read() or drm_edid_read_ddc() instead of abusing this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM9 hjubh)}(hThe EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads.h]hThe EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM> hjubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMB hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMD hjubh)}(h.Pointer to EDID, or NULL if probe/read failed.h]h.Pointer to EDID, or NULL if probe/read failed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMD hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_read_ddc (C function)c.drm_edid_read_ddchNtauh1jxhjhhhNhNubj)}(hhh](j)}(hhconst struct drm_edid * drm_edid_read_ddc (struct drm_connector *connector, struct i2c_adapter *adapter)h]j)}(hfconst struct drm_edid *drm_edid_read_ddc(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hjch]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMo ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjGhMo ubj)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjGhMo ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjGhMo ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j%)}jdrm_edid_read_ddcsbc.drm_edid_read_ddcasbuh1hhj6hhhjGhMo ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjGhMo ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6hhhjGhMo ubj)}(hdrm_edid_read_ddch]j)}(hjh]hdrm_edid_read_ddc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhjGhMo ubj)}(h>(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edid_read_ddcasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]jc.drm_edid_read_ddcasbuh1hhj;ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj6hhhjGhMo ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj2hhhjGhMo ubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhjGhMo hj/hhubj)}(hhh]h)}(h&Read EDID data using given I2C adapterh]h&Read EDID data using given I2C adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM^ hjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjGhMo ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX~**Parameters** ``struct drm_connector *connector`` Connector to use ``struct i2c_adapter *adapter`` I2C adapter to use for DDC **Description** Read EDID using the given I2C adapter. The EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads. Prefer initializing connector->ddc with drm_connector_init_with_ddc() and using drm_edid_read() instead of this function. The returned pointer must be freed using drm_edid_free(). **Return** Pointer to EDID, or NULL if probe/read failed.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMb hjubji)}(hhh](jn)}(h5``struct drm_connector *connector`` Connector to use h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM_ hjubj)}(hhh]h)}(hConnector to useh]hConnector to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM_ hjubjn)}(h;``struct i2c_adapter *adapter`` I2C adapter to use for DDC h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj:h]hstruct i2c_adapter *adapter}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM` hj4ubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM` hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhM` hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMb hjubh)}(h&Read EDID using the given I2C adapter.h]h&Read EDID using the given I2C adapter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMb hjubh)}(hThe EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads.h]hThe EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMd hjubh)}(hyPrefer initializing connector->ddc with drm_connector_init_with_ddc() and using drm_edid_read() instead of this function.h]hyPrefer initializing connector->ddc with drm_connector_init_with_ddc() and using drm_edid_read() instead of this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMh hjubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMk hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMm hjubh)}(h.Pointer to EDID, or NULL if probe/read failed.h]h.Pointer to EDID, or NULL if probe/read failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMm hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_read (C function)c.drm_edid_readhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hGconst struct drm_edid * drm_edid_read (struct drm_connector *connector)h]j)}(hEconst struct drm_edid *drm_edid_read(struct drm_connector *connector)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM ubj)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j%)}j drm_edid_readsbc.drm_edid_readasbuh1hhj hhhjhM ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM ubj9)}(hj9h]h*}(hjwhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj hhhjhM ubj)}(h drm_edid_readh]j)}(hjfh]h drm_edid_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhM ubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jdc.drm_edid_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h,Read EDID data using connector's I2C adapterh]h.Read EDID data using connector’s I2C adapter}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` Connector to use **Description** Read EDID using the connector's I2C adapter. The EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads. The returned pointer must be freed using drm_edid_free(). **Return** Pointer to EDID, or NULL if probe/read failed.h](h)}(h**Parameters**h]j%)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubji)}(hhh]jn)}(h5``struct drm_connector *connector`` Connector to use h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjeh]hstruct drm_connector *connector}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj_ubj)}(hhh]h)}(hConnector to useh]hConnector to use}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhM hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhM hj\ubah}(h]h ]h"]h$]h&]uh1jhhj@ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubh)}(h,Read EDID using the connector's I2C adapter.h]h.Read EDID using the connector’s I2C adapter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubh)}(hThe EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads.h]hThe EDID may be overridden using debugfs override_edid or firmware EDID (drm_edid_load_firmware() and drm.edid_firmware parameter), in this priority order. Having either of them bypasses actual EDID reads.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubh)}(h.Pointer to EDID, or NULL if probe/read failed.h]h.Pointer to EDID, or NULL if probe/read failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_edid_get_product_id (C function)c.drm_edid_get_product_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h^void drm_edid_get_product_id (const struct drm_edid *drm_edid, struct drm_edid_product_id *id)h]j)}(h]void drm_edid_get_product_id(const struct drm_edid *drm_edid, struct drm_edid_product_id *id)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hM ubj)}(hdrm_edid_get_product_idh]j)}(hdrm_edid_get_product_idh]hdrm_edid_get_product_id}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj8hM ubj)}(hA(const struct drm_edid *drm_edid, struct drm_edid_product_id *id)h](j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjMsbc.drm_edid_get_product_idasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(hstruct drm_edid_product_id *idh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edid_product_idh]hdrm_edid_product_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edid_get_product_idasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hidh]hid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj8hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj8hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj8hM hjhhubj)}(hhh]h)}(h)Get the vendor and product identificationh]h)Get the vendor and product identification}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjrhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h~**Parameters** ``const struct drm_edid *drm_edid`` EDID ``struct drm_edid_product_id *id`` Where to place the product idh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh](jn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjh]hconst struct drm_edid *drm_edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(hEDIDh]hEDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h@``struct drm_edid_product_id *id`` Where to place the product idh](jt)}(h"``struct drm_edid_product_id *id``h]jz)}(hjh]hstruct drm_edid_product_id *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(hWhere to place the product idh]hWhere to place the product id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_edid_print_product_id (C function)c.drm_edid_print_product_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hfvoid drm_edid_print_product_id (struct drm_printer *p, const struct drm_edid_product_id *id, bool raw)h]j)}(hevoid drm_edid_print_product_id(struct drm_printer *p, const struct drm_edid_product_id *id, bool raw)h](j)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjWhM ubj)}(hdrm_edid_print_product_idh]j)}(hdrm_edid_print_product_idh]hdrm_edid_print_product_id}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjWhM ubj)}(hG(struct drm_printer *p, const struct drm_edid_product_id *id, bool raw)h](j)}(hstruct drm_printer *ph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_printerh]h drm_printer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjlsbc.drm_edid_print_product_idasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjDh]hp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(h$const struct drm_edid_product_id *idh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edid_product_idh]hdrm_edid_product_id}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]jc.drm_edid_print_product_idasbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hidh]hid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hbool rawh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hrawh]hraw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjWhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjWhM ubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhjWhM hj>hhubj)}(hhh]h)}(h#Print decoded product id to printerh]h#Print decoded product id to printer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjWhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_printer *p`` drm printer ``const struct drm_edid_product_id *id`` EDID product id ``bool raw`` If true, also print the raw hex **Description** See VESA E-EDID 1.4 section 3.4.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh](jn)}(h&``struct drm_printer *p`` drm printer h](jt)}(h``struct drm_printer *p``h]jz)}(hjh]hstruct drm_printer *p}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(h drm printerh]h drm printer}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h9``const struct drm_edid_product_id *id`` EDID product id h](jt)}(h(``const struct drm_edid_product_id *id``h]jz)}(hjAh]h$const struct drm_edid_product_id *id}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj;ubj)}(hhh]h)}(hEDID product idh]hEDID product id}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhM hjubjn)}(h-``bool raw`` If true, also print the raw hex h](jt)}(h ``bool raw``h]jz)}(hjzh]hbool raw}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjtubj)}(hhh]h)}(hIf true, also print the raw hexh]hIf true, also print the raw hex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h See VESA E-EDID 1.4 section 3.4.h]h See VESA E-EDID 1.4 section 3.4.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_edid_get_panel_id (C function)c.drm_edid_get_panel_idhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h;u32 drm_edid_get_panel_id (const struct drm_edid *drm_edid)h]j)}(h:u32 drm_edid_get_panel_id(const struct drm_edid *drm_edid)h](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_edid_get_panel_idsbc.drm_edid_get_panel_idasbuh1hhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_edid_get_panel_idh]j)}(hjh]hdrm_edid_get_panel_id}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edid_get_panel_idasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hGet a panel's ID from EDIDh]hGet a panel’s ID from EDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct drm_edid *drm_edid`` EDID that contains panel ID. **Description** This function uses the first block of the EDID of a panel and (assuming that the EDID is valid) extracts the ID out of it. The ID is a 32-bit value (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that's supposed to be different for each different modem of panel. **Return** A 32-bit ID that should be different for each make/model of panel. See the functions drm_edid_encode_panel_id() and drm_edid_decode_panel_id() for some details on the structure of this ID. Return 0 if the EDID size is less than a base block.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh]jn)}(hA``const struct drm_edid *drm_edid`` EDID that contains panel ID. h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj)h]hconst struct drm_edid *drm_edid}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj#ubj)}(hhh]h)}(hEDID that contains panel ID.h]hEDID that contains panel ID.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj>hM hj ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(hXThis function uses the first block of the EDID of a panel and (assuming that the EDID is valid) extracts the ID out of it. The ID is a 32-bit value (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that's supposed to be different for each different modem of panel.h]hXThis function uses the first block of the EDID of a panel and (assuming that the EDID is valid) extracts the ID out of it. The ID is a 32-bit value (16 bits of manufacturer ID and 16 bits of per-manufacturer ID) that’s supposed to be different for each different modem of panel.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubji)}(hhh]jn)}(hA 32-bit ID that should be different for each make/model of panel. See the functions drm_edid_encode_panel_id() and drm_edid_decode_panel_id() for some details on the structure of this ID. Return 0 if the EDID size is less than a base block.h](jt)}(hBA 32-bit ID that should be different for each make/model of panel.h]hBA 32-bit ID that should be different for each make/model of panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubj)}(hhh]h)}(hSee the functions drm_edid_encode_panel_id() and drm_edid_decode_panel_id() for some details on the structure of this ID. Return 0 if the EDID size is less than a base block.h]hSee the functions drm_edid_encode_panel_id() and drm_edid_decode_panel_id() for some details on the structure of this ID. Return 0 if the EDID size is less than a base block.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edid_read_base_block (C function)c.drm_edid_read_base_blockhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hNconst struct drm_edid * drm_edid_read_base_block (struct i2c_adapter *adapter)h]j)}(hLconst struct drm_edid *drm_edid_read_base_block(struct i2c_adapter *adapter)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j%)}jdrm_edid_read_base_blocksbc.drm_edid_read_base_blockasbuh1hhjhhhjhM ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj9)}(hj9h]h*}(hjdhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM ubj)}(hdrm_edid_read_base_blockh]j)}(hjSh]hdrm_edid_read_base_block}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct i2c_adapter *adapter)h]j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jQc.drm_edid_read_base_blockasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hGet a panel's EDID base blockh]hGet a panel’s EDID base block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct i2c_adapter *adapter`` I2C adapter to use for DDC **Description** This function returns the drm_edid containing the first block of the EDID of a panel. This function is intended to be used during early probing on devices where more than one panel might be present. Because of its intended use it must assume that the EDID of the panel is correct, at least as far as the base block is concerned (in other words, we don't process any overrides here). Caller should call drm_edid_free() after use. WARNING: Only use this function when the connector is unknown. For example, during the early probe of panel. The EDID read from the function is temporary and should be replaced by the full EDID returned from other drm_edid_read. **NOTE** it's expected that this function and drm_do_get_edid() will both be read the EDID, but there is no caching between them. Since we're only reading the first block, hopefully this extra overhead won't be too big. **Return** Pointer to allocated EDID base block, or NULL on any failure.h](h)}(h**Parameters**h]j%)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubji)}(hhh]jn)}(h;``struct i2c_adapter *adapter`` I2C adapter to use for DDC h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjRh]hstruct i2c_adapter *adapter}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hjLubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjghM hjIubah}(h]h ]h"]h$]h&]uh1jhhj-ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(hUThis function returns the drm_edid containing the first block of the EDID of a panel.h]hUThis function returns the drm_edid containing the first block of the EDID of a panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(hX(This function is intended to be used during early probing on devices where more than one panel might be present. Because of its intended use it must assume that the EDID of the panel is correct, at least as far as the base block is concerned (in other words, we don't process any overrides here).h]hX*This function is intended to be used during early probing on devices where more than one panel might be present. Because of its intended use it must assume that the EDID of the panel is correct, at least as far as the base block is concerned (in other words, we don’t process any overrides here).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(h-Caller should call drm_edid_free() after use.h]h-Caller should call drm_edid_free() after use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(hWARNING: Only use this function when the connector is unknown. For example, during the early probe of panel. The EDID read from the function is temporary and should be replaced by the full EDID returned from other drm_edid_read.h]hWARNING: Only use this function when the connector is unknown. For example, during the early probe of panel. The EDID read from the function is temporary and should be replaced by the full EDID returned from other drm_edid_read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(h**NOTE**h]j%)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(hit's expected that this function and drm_do_get_edid() will both be read the EDID, but there is no caching between them. Since we're only reading the first block, hopefully this extra overhead won't be too big.h]hit’s expected that this function and drm_do_get_edid() will both be read the EDID, but there is no caching between them. Since we’re only reading the first block, hopefully this extra overhead won’t be too big.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(h **Return**h]j%)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubh)}(h=Pointer to allocated EDID base block, or NULL on any failure.h]h=Pointer to allocated EDID base block, or NULL on any failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_get_edid_switcheroo (C function)c.drm_get_edid_switcheroohNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdstruct edid * drm_get_edid_switcheroo (struct drm_connector *connector, struct i2c_adapter *adapter)h]j)}(hbstruct edid *drm_get_edid_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM4 ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhM4 ubh)}(hhh]j)}(hedidh]hedid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j%)}jdrm_get_edid_switcheroosbc.drm_get_edid_switcherooasbuh1hhjIhhhjZhM4 ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhM4 ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIhhhjZhM4 ubj)}(hdrm_get_edid_switcherooh]j)}(hjh]hdrm_get_edid_switcheroo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjZhM4 ubj)}(h>(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_get_edid_switcherooasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jc.drm_get_edid_switcherooasbuh1hhj3ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjZhM4 ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjEhhhjZhM4 ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jhjZhM4 hjBhhubj)}(hhh]h)}(h)get EDID data for a vga_switcheroo outputh]h)get EDID data for a vga_switcheroo output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM* hjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjZhM4 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector we're probing ``struct i2c_adapter *adapter`` I2C adapter to use for DDC **Description** Wrapper around drm_get_edid() for laptops with dual GPUs using one set of outputs. The wrapper adds the requisite vga_switcheroo calls to temporarily switch DDC to the GPU which is retrieving EDID. **Return** Pointer to valid EDID or ``NULL`` if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM. hjubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM+ hjubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM+ hjubjn)}(h;``struct i2c_adapter *adapter`` I2C adapter to use for DDC h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj2h]hstruct i2c_adapter *adapter}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM, hj,ubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM, hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhM, hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM. hjubh)}(hWrapper around drm_get_edid() for laptops with dual GPUs using one set of outputs. The wrapper adds the requisite vga_switcheroo calls to temporarily switch DDC to the GPU which is retrieving EDID.h]hWrapper around drm_get_edid() for laptops with dual GPUs using one set of outputs. The wrapper adds the requisite vga_switcheroo calls to temporarily switch DDC to the GPU which is retrieving EDID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM. hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM2 hjubh)}(h:Pointer to valid EDID or ``NULL`` if we couldn't find any.h](hPointer to valid EDID or }(hjhhhNhNubjz)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if we couldn’t find any.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM2 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edid_read_switcheroo (C function)c.drm_edid_read_switcheroohNtauh1jxhjhhhNhNubj)}(hhh](j)}(hoconst struct drm_edid * drm_edid_read_switcheroo (struct drm_connector *connector, struct i2c_adapter *adapter)h]j)}(hmconst struct drm_edid *drm_edid_read_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMQ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQ ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQ ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j%)}jdrm_edid_read_switcheroosbc.drm_edid_read_switcherooasbuh1hhjhhhjhMQ ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQ ubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMQ ubj)}(hdrm_edid_read_switcherooh]j)}(hjCh]hdrm_edid_read_switcheroo}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMQ ubj)}(h>(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jAc.drm_edid_read_switcherooasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|ubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jAc.drm_edid_read_switcherooasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hadapterh]hadapter}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMQ ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMQ ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMQ hjhhubj)}(hhh]h)}(h)get EDID data for a vga_switcheroo outputh]h)get EDID data for a vga_switcheroo output}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMG hjnhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector we're probing ``struct i2c_adapter *adapter`` I2C adapter to use for DDC **Description** Wrapper around drm_edid_read_ddc() for laptops with dual GPUs using one set of outputs. The wrapper adds the requisite vga_switcheroo calls to temporarily switch DDC to the GPU which is retrieving EDID. **Return** Pointer to valid EDID or ``NULL`` if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMK hjubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMH hjubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMH hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMH hjubjn)}(h;``struct i2c_adapter *adapter`` I2C adapter to use for DDC h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjh]hstruct i2c_adapter *adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMI hjubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMI hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMI hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMK hjubh)}(hWrapper around drm_edid_read_ddc() for laptops with dual GPUs using one set of outputs. The wrapper adds the requisite vga_switcheroo calls to temporarily switch DDC to the GPU which is retrieving EDID.h]hWrapper around drm_edid_read_ddc() for laptops with dual GPUs using one set of outputs. The wrapper adds the requisite vga_switcheroo calls to temporarily switch DDC to the GPU which is retrieving EDID.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMK hjubh)}(h **Return**h]j%)}(hjMh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMO hjubh)}(h:Pointer to valid EDID or ``NULL`` if we couldn't find any.h](hPointer to valid EDID or }(hjchhhNhNubjz)}(h``NULL``h]hNULL}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubh if we couldn’t find any.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMO hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_duplicate (C function)c.drm_edid_duplicatehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:struct edid * drm_edid_duplicate (const struct edid *edid)h]j)}(h8struct edid *drm_edid_duplicate(const struct edid *edid)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMi ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMi ubh)}(hhh]j)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_edid_duplicatesbc.drm_edid_duplicateasbuh1hhjhhhjhMi ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMi ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMi ubj)}(hdrm_edid_duplicateh]j)}(hjh]hdrm_edid_duplicate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMi ubj)}(h(const struct edid *edid)h]j)}(hconst struct edid *edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hedidh]hedid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]jc.drm_edid_duplicateasbuh1hhjubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMi ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMi ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMi hjhhubj)}(hhh]h)}(h$duplicate an EDID and the extensionsh]h$duplicate an EDID and the extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMd hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMi ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct edid *edid`` EDID to duplicate **Return** Pointer to duplicated EDID or NULL on allocation failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMh hjubji)}(hhh]jn)}(h.``const struct edid *edid`` EDID to duplicate h](jt)}(h``const struct edid *edid``h]jz)}(hjh]hconst struct edid *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMe hjubj)}(hhh]h)}(hEDID to duplicateh]hEDID to duplicate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMe hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMe hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMg hjubh)}(h9Pointer to duplicated EDID or NULL on allocation failure.h]h9Pointer to duplicated EDID or NULL on allocation failure.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMg hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_match_cea_mode (C function)c.drm_match_cea_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h?u8 drm_match_cea_mode (const struct drm_display_mode *to_match)h]j)}(h>u8 drm_match_cea_mode(const struct drm_display_mode *to_match)h](h)}(hhh]j)}(hu8h]hu8}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_match_cea_modesbc.drm_match_cea_modeasbuh1hhjwhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjhMubj)}(hdrm_match_cea_modeh]j)}(hjh]hdrm_match_cea_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjhMubj)}(h)(const struct drm_display_mode *to_match)h]j)}(h'const struct drm_display_mode *to_matchh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_match_cea_modeasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hto_matchh]hto_match}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjwhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjhMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjphhubj)}(hhh]h)}(h'look for a CEA mode matching given modeh]h'look for a CEA mode matching given mode}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_display_mode *to_match`` display mode **Return** The CEA Video ID (VIC) of the mode or 0 if it isn't a CEA-861 mode.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh]jn)}(h9``const struct drm_display_mode *to_match`` display mode h](jt)}(h+``const struct drm_display_mode *to_match``h]jz)}(hjh]h'const struct drm_display_mode *to_match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(h display modeh]h display mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(hCThe CEA Video ID (VIC) of the mode or 0 if it isn't a CEA-861 mode.h]hEThe CEA Video ID (VIC) of the mode or 0 if it isn’t a CEA-861 mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_display_mode_from_cea_vic (C function)c.drm_display_mode_from_cea_vichNtauh1jxhjhhhNhNubj)}(hhh](j)}(h_struct drm_display_mode * drm_display_mode_from_cea_vic (struct drm_device *dev, u8 video_code)h]j)}(h]struct drm_display_mode *drm_display_mode_from_cea_vic(struct drm_device *dev, u8 video_code)h](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j%)}jdrm_display_mode_from_cea_vicsbc.drm_display_mode_from_cea_vicasbuh1hhj&hhhj7hMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&hhhj7hMubj)}(hdrm_display_mode_from_cea_vich]j)}(hjgh]hdrm_display_mode_from_cea_vic}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj7hMubj)}(h'(struct drm_device *dev, u8 video_code)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jec.drm_display_mode_from_cea_vicasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 video_codeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jec.drm_display_mode_from_cea_vicasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h video_codeh]h video_code}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hMhjhhubj)}(hhh]h)}(hreturn a mode for CEA VICh]hreturn a mode for CEA VIC}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_device *dev`` DRM device ``u8 video_code`` CEA VIC of the mode **Description** Creates a new mode matching the specified CEA VIC. **Return** A new drm_display_mode on success or NULL on failureh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h&``u8 video_code`` CEA VIC of the mode h](jt)}(h``u8 video_code``h]jz)}(hjh]h u8 video_code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hCEA VIC of the modeh]hCEA VIC of the mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h2Creates a new mode matching the specified CEA VIC.h]h2Creates a new mode matching the specified CEA VIC.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h4A new drm_display_mode on success or NULL on failureh]h4A new drm_display_mode on success or NULL on failure}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_match (C function)c.drm_edid_matchhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hYbool drm_edid_match (const struct drm_edid *drm_edid, const struct drm_edid_ident *ident)h]j)}(hXbool drm_edid_match(const struct drm_edid *drm_edid, const struct drm_edid_ident *ident)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_edid_matchh]j)}(hdrm_edid_matchh]hdrm_edid_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hE(const struct drm_edid *drm_edid, const struct drm_edid_ident *ident)h](j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_edid_matchasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrm_edidh]hdrm_edid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"const struct drm_edid_ident *identh](j)}(hjch]hconst}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j)}(hdrm_edid_identh]hdrm_edid_ident}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_edid_matchasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSubj)}(hidenth]hident}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h"match drm_edid with given identityh]h"match drm_edid with given identity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct drm_edid *drm_edid`` EDID ``const struct drm_edid_ident *ident`` the EDID identity to match with **Description** Check if the EDID matches with the given identity. **Return** True if the given identity matched with EDID, false otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh](jn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj4h]hconst struct drm_edid *drm_edid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj.ubj)}(hhh]h)}(hEDIDh]hEDID}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhjIhMhj+ubjn)}(hG``const struct drm_edid_ident *ident`` the EDID identity to match with h](jt)}(h&``const struct drm_edid_ident *ident``h]jz)}(hjmh]h"const struct drm_edid_ident *ident}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjgubj)}(hhh]h)}(hthe EDID identity to match withh]hthe EDID identity to match with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj+ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h2Check if the EDID matches with the given identity.h]h2Check if the EDID matches with the given identity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h>True if the given identity matched with EDID, false otherwise.h]h>True if the given identity matched with EDID, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_edid_get_monitor_name (C function)c.drm_edid_get_monitor_namehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hQvoid drm_edid_get_monitor_name (const struct edid *edid, char *name, int bufsize)h]j)}(hPvoid drm_edid_get_monitor_name(const struct edid *edid, char *name, int bufsize)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMubj)}(hdrm_edid_get_monitor_nameh]j)}(hdrm_edid_get_monitor_nameh]hdrm_edid_get_monitor_name}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hMubj)}(h2(const struct edid *edid, char *name, int bufsize)h](j)}(hconst struct edid *edidh](j)}(hjch]hconst}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj7sbc.drm_edid_get_monitor_nameasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(h char *nameh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(h int bufsizeh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufsizeh]hbufsize}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj"hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj"hMhj hhubj)}(hhh]h)}(h$fetch the monitor name from the edidh]h$fetch the monitor name from the edid}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct edid *edid`` monitor EDID information ``char *name`` pointer to a character array to hold the name of the monitor ``int bufsize`` The size of the name buffer (should be at least 14 chars.)h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh](jn)}(h5``const struct edid *edid`` monitor EDID information h](jt)}(h``const struct edid *edid``h]jz)}(hjh]hconst struct edid *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hmonitor EDID informationh]hmonitor EDID information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hL``char *name`` pointer to a character array to hold the name of the monitor h](jt)}(h``char *name``h]jz)}(hjh]h char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(h` instead of calling this function. **Return** True if the monitor is HDMI, false if not or unknown.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh]jn)}(h5``const struct edid *edid`` monitor EDID information h](jt)}(h``const struct edid *edid``h]jz)}(hjh]hconst struct edid *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hmonitor EDID informationh]hmonitor EDID information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h/Parse the CEA extension according to CEA-861-B.h]h/Parse the CEA extension according to CEA-861-B.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(hDrivers that have added the modes parsed from EDID to drm_display_info should use :c:type:`drm_display_info.is_hdmi ` instead of calling this function.h](hRDrivers that have added the modes parsed from EDID to drm_display_info should use }(hjXhhhNhNubh)}(h5:c:type:`drm_display_info.is_hdmi `h]jz)}(hjbh]hdrm_display_info.is_hdmi}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjXubh" instead of calling this function.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h5True if the monitor is HDMI, false if not or unknown.h]h5True if the monitor is HDMI, false if not or unknown.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_detect_monitor_audio (C function)c.drm_detect_monitor_audiohNtauh1jxhjhhhNhNubj)}(hhh](j)}(h7bool drm_detect_monitor_audio (const struct edid *edid)h]j)}(h6bool drm_detect_monitor_audio(const struct edid *edid)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMHubj)}(hdrm_detect_monitor_audioh]j)}(hdrm_detect_monitor_audioh]hdrm_detect_monitor_audio}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMHubj)}(h(const struct edid *edid)h]j)}(hconst struct edid *edidh](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hedidh]hedid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j%)}jjsbc.drm_detect_monitor_audioasbuh1hhj ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hedidh]hedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMHubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMHhjhhubj)}(hhh]h)}(hcheck monitor audio capabilityh]hcheck monitor audio capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM=hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct edid *edid`` EDID block to scan **Description** Monitor should have CEA extension block. If monitor has 'basic audio', but no CEA audio blocks, it's 'basic audio' only. If there is any audio extension block and supported audio format, assume at least 'basic audio' support, even if 'basic audio' is not defined in EDID. **Return** True if the monitor supports audio, false otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMAhjubji)}(hhh]jn)}(h/``const struct edid *edid`` EDID block to scan h](jt)}(h``const struct edid *edid``h]jz)}(hjh]hconst struct edid *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM>hjubj)}(hhh]h)}(hEDID block to scanh]hEDID block to scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM@hjubh)}(hXMonitor should have CEA extension block. If monitor has 'basic audio', but no CEA audio blocks, it's 'basic audio' only. If there is any audio extension block and supported audio format, assume at least 'basic audio' support, even if 'basic audio' is not defined in EDID.h]hX!Monitor should have CEA extension block. If monitor has ‘basic audio’, but no CEA audio blocks, it’s ‘basic audio’ only. If there is any audio extension block and supported audio format, assume at least ‘basic audio’ support, even if ‘basic audio’ is not defined in EDID.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM@hjubh)}(h **Return**h]j%)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMFhjubh)}(h4True if the monitor supports audio, false otherwise.h]h4True if the monitor supports audio, false otherwise.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_default_rgb_quant_range (C function)c.drm_default_rgb_quant_rangehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h^enum hdmi_quantization_range drm_default_rgb_quant_range (const struct drm_display_mode *mode)h]j)}(h]enum hdmi_quantization_range drm_default_rgb_quant_range(const struct drm_display_mode *mode)h](j)}(hjl h]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMZubh)}(hhh]j)}(hhdmi_quantization_rangeh]hhdmi_quantization_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_default_rgb_quant_rangesbc.drm_default_rgb_quant_rangeasbuh1hhjhhhjhMZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMZubj)}(hdrm_default_rgb_quant_rangeh]j)}(hjh]hdrm_default_rgb_quant_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMZubj)}(h%(const struct drm_display_mode *mode)h]j)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]jc.drm_default_rgb_quant_rangeasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMZubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMZubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMZhjhhubj)}(hhh]h)}(hdefault RGB quantization rangeh]hdefault RGB quantization range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_display_mode *mode`` display mode **Description** Determine the default RGB quantization range for the mode, as specified in CEA-861. **Return** The default RGB quantization range for the modeh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMVhjubji)}(hhh]jn)}(h5``const struct drm_display_mode *mode`` display mode h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjh]h#const struct drm_display_mode *mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMShjubj)}(hhh]h)}(h display modeh]h display mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMShjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMUhjubh)}(hSDetermine the default RGB quantization range for the mode, as specified in CEA-861.h]hSDetermine the default RGB quantization range for the mode, as specified in CEA-861.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMUhjubh)}(h **Return**h]j%)}(hj?h]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMXhjubh)}(h/The default RGB quantization range for the modeh]h/The default RGB quantization range for the mode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_edid_connector_update (C function)c.drm_edid_connector_updatehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h`int drm_edid_connector_update (struct drm_connector *connector, const struct drm_edid *drm_edid)h]j)}(h_int drm_edid_connector_update(struct drm_connector *connector, const struct drm_edid *drm_edid)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQubj)}(hdrm_edid_connector_updateh]j)}(hdrm_edid_connector_updateh]hdrm_edid_connector_update}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMQubj)}(hB(struct drm_connector *connector, const struct drm_edid *drm_edid)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_edid_connector_updateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9) }(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jc.drm_edid_connector_updateasbuh1hhj/ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|hhhjhMQubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjhMQhjyhhubj)}(hhh]h)}(h&Update connector information from EDIDh]h&Update connector information from EDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMDhjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` Connector ``const struct drm_edid *drm_edid`` EDID **Description** Update the connector display info, ELD, HDR metadata, relevant properties, etc. from the passed in EDID. If EDID is NULL, reset the information. Must be called before calling drm_edid_connector_add_modes(). **Return** 0 on success, negative error on errors.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMHhjubji)}(hhh](jn)}(h.``struct drm_connector *connector`` Connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMEhj ubj)}(hhh]h)}(h Connectorh]h Connector}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMEhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj%hMEhjubjn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjIh]hconst struct drm_edid *drm_edid}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMFhjCubj)}(hhh]h)}(hEDIDh]hEDID}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMFhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhj^hMFhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMHhjubh)}(hhUpdate the connector display info, ELD, HDR metadata, relevant properties, etc. from the passed in EDID.h]hhUpdate the connector display info, ELD, HDR metadata, relevant properties, etc. from the passed in EDID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMHhjubh)}(h'If EDID is NULL, reset the information.h]h'If EDID is NULL, reset the information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMKhjubh)}(h=Must be called before calling drm_edid_connector_add_modes().h]h=Must be called before calling drm_edid_connector_add_modes().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMOhjubh)}(h'0 on success, negative error on errors.h]h'0 on success, negative error on errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_edid_connector_add_modes (C function)c.drm_edid_connector_add_modeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hBint drm_edid_connector_add_modes (struct drm_connector *connector)h]j)}(hAint drm_edid_connector_add_modes(struct drm_connector *connector)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMhubj)}(hdrm_edid_connector_add_modesh]j)}(hdrm_edid_connector_add_modesh]hdrm_edid_connector_add_modes}(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMhubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjk modnameN classnameNjj)}j]j%)}jj1 sbc.drm_edid_connector_add_modesasbuh1hhjG ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjG ubj)}(h connectorh]h connector}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjC ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMhubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMhubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhhj hhubj)}(hhh]h)}(h*Update probed modes from the EDID propertyh]h*Update probed modes from the EDID property}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM]hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hXO**Parameters** ``struct drm_connector *connector`` Connector **Description** Add the modes from the previously updated EDID property to the connector probed modes list. drm_edid_connector_update() must have been called before this to update the EDID property. **Return** The number of modes added, or 0 if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMahj ubji)}(hhh]jn)}(h.``struct drm_connector *connector`` Connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj h]hstruct drm_connector *connector}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM^hj ubj)}(hhh]h)}(h Connectorh]h Connector}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ hM^hj% ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$ hM^hj ubah}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hjJ h]h Description}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjH ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM`hj ubh)}(h[Add the modes from the previously updated EDID property to the connector probed modes list.h]h[Add the modes from the previously updated EDID property to the connector probed modes list.}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM`hj ubh)}(hZdrm_edid_connector_update() must have been called before this to update the EDID property.h]hZdrm_edid_connector_update() must have been called before this to update the EDID property.}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMchj ubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~ ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMfhj ubh)}(h8The number of modes added, or 0 if we couldn't find any.h]h:The number of modes added, or 0 if we couldn’t find any.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMfhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_connector_update_edid_property (C function)$c.drm_connector_update_edid_propertyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(haint drm_connector_update_edid_property (struct drm_connector *connector, const struct edid *edid)h]j)}(h`int drm_connector_update_edid_property(struct drm_connector *connector, const struct edid *edid)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(h"drm_connector_update_edid_propertyh]j)}(h"drm_connector_update_edid_propertyh]h"drm_connector_update_edid_property}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h:(struct drm_connector *connector, const struct edid *edid)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj" modnameN classnameNjj)}j]j%)}jj sb$c.drm_connector_update_edid_propertyasbuh1hhj ubj)}(h h]h }(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjN hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(h connectorh]h connector}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hconst struct edid *edidh](j)}(hjch]hconst}(hjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubh)}(hhh]j)}(hedidh]hedid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j< $c.drm_connector_update_edid_propertyasbuh1hhjp ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjp ubj)}(hedidh]hedid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h)}(h'update the edid property of a connectorh]h'update the edid property of a connector}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMzhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj( jj( jjjuh1jhhhjhNhNubj)}(hX"**Parameters** ``struct drm_connector *connector`` drm connector ``const struct edid *edid`` new value of the edid property **Description** This function creates a new blob modeset object and assigns its id to the connector's edid property. Since we also parse tile information from EDID's displayID block, we also set the connector's tile property here. See drm_connector_set_tile_property() for more details. This function is deprecated. Use drm_edid_connector_update() instead. **Return** Zero on success, negative errno on failure.h](h)}(h**Parameters**h]j%)}(hj2 h]h Parameters}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0 ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM~hj, ubji)}(hhh](jn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjQ h]hstruct drm_connector *connector}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM{hjK ubj)}(hhh]h)}(h drm connectorh]h drm connector}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf hM{hjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1jmhjf hM{hjH ubjn)}(h;``const struct edid *edid`` new value of the edid property h](jt)}(h``const struct edid *edid``h]jz)}(hj h]hconst struct edid *edid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM|hj ubj)}(hhh]h)}(hnew value of the edid propertyh]hnew value of the edid property}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM|hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hM|hjH ubeh}(h]h ]h"]h$]h&]uh1jhhj, ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM~hj, ubh)}(hXThis function creates a new blob modeset object and assigns its id to the connector's edid property. Since we also parse tile information from EDID's displayID block, we also set the connector's tile property here. See drm_connector_set_tile_property() for more details.h]hXThis function creates a new blob modeset object and assigns its id to the connector’s edid property. Since we also parse tile information from EDID’s displayID block, we also set the connector’s tile property here. See drm_connector_set_tile_property() for more details.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM~hj, ubh)}(hEThis function is deprecated. Use drm_edid_connector_update() instead.h]hEThis function is deprecated. Use drm_edid_connector_update() instead.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj, ubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj, ubh)}(h+Zero on success, negative errno on failure.h]h+Zero on success, negative errno on failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj, ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_add_edid_modes (C function)c.drm_add_edid_modeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint drm_add_edid_modes (struct drm_connector *connector, struct edid *edid)h]j)}(hJint drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)h](j)}(hinth]hint}(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj< hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjO hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj< hhhjN hMubj)}(hdrm_add_edid_modesh]j)}(hdrm_add_edid_modesh]hdrm_add_edid_modes}(hja hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj< hhhjN hMubj)}(h4(struct drm_connector *connector, struct edid *edid)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj} hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjc sbc.drm_add_edid_modesasbuh1hhjy ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjy ubj)}(h connectorh]h connector}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhju ubj)}(hstruct edid *edidh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hedidh]hedid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.drm_add_edid_modesasbuh1hhj ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hedidh]hedid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhju ubeh}(h]h ]h"]h$]h&]jjuh1jhj< hhhjN hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8 hhhjN hMubah}(h]j3 ah ](jjeh"]h$]h&]jj)jhuh1jhjN hMhj5 hhubj)}(hhh]h)}(h&add modes from EDID data, if availableh]h&add modes from EDID data, if available}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jhj5 hhhjN hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector we're probing ``struct edid *edid`` EDID data **Description** Add the specified modes to the connector's mode list. Also fills out the :c:type:`drm_display_info` structure and ELD in **connector** with any information which can be derived from the edid. This function is deprecated. Use drm_edid_connector_add_modes() instead. **Return** The number of modes added or 0 if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h ``struct edid *edid`` EDID data h](jt)}(h``struct edid *edid``h]jz)}(hjh]hstruct edid *edid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(h EDID datah]h EDID data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(hAdd the specified modes to the connector's mode list. Also fills out the :c:type:`drm_display_info` structure and ELD in **connector** with any information which can be derived from the edid.h](hKAdd the specified modes to the connector’s mode list. Also fills out the }(hj;hhhNhNubh)}(h:c:type:`drm_display_info`h]jz)}(hjEh]hdrm_display_info}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj;ubh structure and ELD in }(hj;hhhNhNubj%)}(h **connector**h]h connector}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubh9 with any information which can be derived from the edid.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhMhjubh)}(hHThis function is deprecated. Use drm_edid_connector_add_modes() instead.h]hHThis function is deprecated. Use drm_edid_connector_add_modes() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h7The number of modes added or 0 if we couldn't find any.h]h9The number of modes added or 0 if we couldn’t find any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_add_modes_noedid (C function)c.drm_add_modes_noedidhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hVint drm_add_modes_noedid (struct drm_connector *connector, int hdisplay, int vdisplay)h]j)}(hUint drm_add_modes_noedid(struct drm_connector *connector, int hdisplay, int vdisplay)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_add_modes_noedidh]j)}(hdrm_add_modes_noedidh]hdrm_add_modes_noedid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h=(struct drm_connector *connector, int hdisplay, int vdisplay)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsbc.drm_add_modes_noedidasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int hdisplayh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhdisplayh]hhdisplay}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int vdisplayh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvdisplayh]hvdisplay}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h)add modes for the connectors without EDIDh]h)add modes for the connectors without EDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector we're probing ``int hdisplay`` the horizontal display limit ``int vdisplay`` the vertical display limit **Description** Add the specified modes to the connector's mode list. Only when the hdisplay/vdisplay is not beyond the given limit, it will be added. **Return** The number of modes added or 0 if we couldn't find any.h](h)}(h**Parameters**h]j%)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj@h]hstruct drm_connector *connector}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj:ubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhjUhMhj7ubjn)}(h.``int hdisplay`` the horizontal display limit h](jt)}(h``int hdisplay``h]jz)}(hjyh]h int hdisplay}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjsubj)}(hhh]h)}(hthe horizontal display limith]hthe horizontal display limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj7ubjn)}(h,``int vdisplay`` the vertical display limit h](jt)}(h``int vdisplay``h]jz)}(hjh]h int vdisplay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hthe vertical display limith]hthe vertical display limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj7ubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(hAdd the specified modes to the connector's mode list. Only when the hdisplay/vdisplay is not beyond the given limit, it will be added.h]hAdd the specified modes to the connector’s mode list. Only when the hdisplay/vdisplay is not beyond the given limit, it will be added.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h7The number of modes added or 0 if we couldn't find any.h]h9The number of modes added or 0 if we couldn’t find any.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_hdmi_avi_infoframe_from_display_mode (C function)*c.drm_hdmi_avi_infoframe_from_display_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_hdmi_avi_infoframe_from_display_mode (struct hdmi_avi_infoframe *frame, const struct drm_connector *connector, const struct drm_display_mode *mode)h]j)}(hint drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, const struct drm_connector *connector, const struct drm_display_mode *mode)h](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chM+ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjghM+ubj)}(h(drm_hdmi_avi_infoframe_from_display_modeh]j)}(h(drm_hdmi_avi_infoframe_from_display_modeh]h(drm_hdmi_avi_infoframe_from_display_mode}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjghM+ubj)}(hn(struct hdmi_avi_infoframe *frame, const struct drm_connector *connector, const struct drm_display_mode *mode)h](j)}(h struct hdmi_avi_infoframe *frameh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj|sb*c.drm_hdmi_avi_infoframe_from_display_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%const struct drm_connector *connectorh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j*c.drm_hdmi_avi_infoframe_from_display_modeasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j*c.drm_hdmi_avi_infoframe_from_display_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhjghM+ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQhhhjghM+ubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1jhjghM+hjNhhubj)}(hhh]h)}(hmodnameN classnameNjj)}j]j%)}jjsb-c.drm_hdmi_vendor_infoframe_from_display_modeasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%const struct drm_connector *connectorh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jX-c.drm_hdmi_vendor_infoframe_from_display_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]jX-c.drm_hdmi_vendor_infoframe_from_display_modeasbuh1hhjubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h8fill an HDMI infoframe with data from a DRM display modeh]h8fill an HDMI infoframe with data from a DRM display mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct hdmi_vendor_infoframe *frame`` HDMI vendor infoframe ``const struct drm_connector *connector`` the connector ``const struct drm_display_mode *mode`` DRM display mode **Description** Note that there's is a need to send HDMI vendor infoframes only when using a 4k or stereoscopic 3D mode. So when giving any other mode as input this function will return -EINVAL, error that can be safely ignored. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubji)}(hhh](jn)}(h>``struct hdmi_vendor_infoframe *frame`` HDMI vendor infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hjh]h#struct hdmi_vendor_infoframe *frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hHDMI vendor infoframeh]hHDMI vendor infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubjn)}(h8``const struct drm_connector *connector`` the connector h](jt)}(h)``const struct drm_connector *connector``h]jz)}(hj1h]h%const struct drm_connector *connector}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhj+ubj)}(hhh]h)}(h the connectorh]h the connector}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhjFhMhjubjn)}(h9``const struct drm_display_mode *mode`` DRM display mode h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjjh]h#const struct drm_display_mode *mode}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjdubj)}(hhh]h)}(hDRM display modeh]hDRM display mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(hNote that there's is a need to send HDMI vendor infoframes only when using a 4k or stereoscopic 3D mode. So when giving any other mode as input this function will return -EINVAL, error that can be safely ignored.h]hNote that there’s is a need to send HDMI vendor infoframes only when using a 4k or stereoscopic 3D mode. So when giving any other mode as input this function will return -EINVAL, error that can be safely ignored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_edid_is_digital (C function)c.drm_edid_is_digitalhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:bool drm_edid_is_digital (const struct drm_edid *drm_edid)h]j)}(h9bool drm_edid_is_digital(const struct drm_edid *drm_edid)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMQubj)}(hdrm_edid_is_digitalh]j)}(hdrm_edid_is_digitalh]hdrm_edid_is_digital}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMQubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj3sbc.drm_edid_is_digitalasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubah}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhjhMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMQhjhhubj)}(hhh]h)}(h is digital?h]h is digital?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hq**Parameters** ``const struct drm_edid *drm_edid`` The EDID **Description** Return true if input is digital.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMPhjubji)}(hhh]jn)}(h-``const struct drm_edid *drm_edid`` The EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj,h]hconst struct drm_edid *drm_edid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMMhj&ubj)}(hhh]h)}(hThe EDIDh]hThe EDID}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMMhj#ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMOhjubh)}(h Return true if input is digital.h]h Return true if input is digital.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:363: ./drivers/gpu/drm/drm_edid.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_mnl (C function) c.drm_eld_mnlhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_eld_mnl (const u8 *eld)h]j)}(hint drm_eld_mnl(const u8 *eld)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKKubj)}(h drm_eld_mnlh]j)}(h drm_eld_mnlh]h drm_eld_mnl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKKubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsb c.drm_eld_mnlasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heldh]held}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKKhjhhubj)}(hhh]h)}(h%Get ELD monitor name length in bytes.h]h%Get ELD monitor name length in bytes.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKHhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hS**Parameters** ``const u8 *eld`` pointer to an eld memory structure with mnl seth](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKLhjubji)}(hhh]jn)}(hA``const u8 *eld`` pointer to an eld memory structure with mnl seth](jt)}(h``const u8 *eld``h]jz)}(hjh]h const u8 *eld}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKNhjubj)}(hhh]h)}(h/pointer to an eld memory structure with mnl seth]h/pointer to an eld memory structure with mnl set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKNhjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad (C function) c.drm_eld_sadhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h&const u8 * drm_eld_sad (const u8 *eld)h]j)}(h$const u8 *drm_eld_sad(const u8 *eld)h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKWubh)}(hhh]j)}(hu8h]hu8}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}j drm_eld_sadsb c.drm_eld_sadasbuh1hhjhhhjhKWubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKWubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKWubj)}(h drm_eld_sadh]j)}(hjDh]h drm_eld_sad}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKWubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jB c.drm_eld_sadasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubj)}(heldh]held}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKWubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKWubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKWhjhhubj)}(hhh]h)}(hGet ELD SAD structures.h]hGet ELD SAD structures.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKWubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hY**Parameters** ``const u8 *eld`` pointer to an eld memory structure with sad_count seth](h)}(h**Parameters**h]j%)}(hj$ h]h Parameters}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj" ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKXhj ubji)}(hhh]jn)}(hG``const u8 *eld`` pointer to an eld memory structure with sad_count seth](jt)}(h``const u8 *eld``h]jz)}(hjC h]h const u8 *eld}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjA ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKZhj= ubj)}(hhh]h)}(h5pointer to an eld memory structure with sad_count seth]h5pointer to an eld memory structure with sad_count set}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKUhjY ubah}(h]h ]h"]h$]h&]uh1jhj= ubeh}(h]h ]h"]h$]h&]uh1jmhjX hKZhj: ubah}(h]h ]h"]h$]h&]uh1jhhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad_count (C function)c.drm_eld_sad_counthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h%int drm_eld_sad_count (const u8 *eld)h]j)}(h$int drm_eld_sad_count(const u8 *eld)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKjubj)}(hdrm_eld_sad_counth]j)}(hdrm_eld_sad_counth]hdrm_eld_sad_count}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hKjubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jj sbc.drm_eld_sad_countasbuh1hhj ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj&!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(heldh]held}(hj3!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj hKjubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hKjubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKjhj hhubj)}(hhh]h)}(hGet ELD SAD count.h]hGet ELD SAD count.}(hj]!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKghjZ!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjju!jju!jjjuh1jhhhjhNhNubj)}(hY**Parameters** ``const u8 *eld`` pointer to an eld memory structure with sad_count seth](h)}(h**Parameters**h]j%)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}!ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKkhjy!ubji)}(hhh]jn)}(hG``const u8 *eld`` pointer to an eld memory structure with sad_count seth](jt)}(h``const u8 *eld``h]jz)}(hj!h]h const u8 *eld}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKmhj!ubj)}(hhh]h)}(h5pointer to an eld memory structure with sad_count seth]h5pointer to an eld memory structure with sad_count set}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hKmhj!ubah}(h]h ]h"]h$]h&]uh1jhhjy!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_eld_calc_baseline_block_size (C function)"c.drm_eld_calc_baseline_block_sizehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h4int drm_eld_calc_baseline_block_size (const u8 *eld)h]j)}(h3int drm_eld_calc_baseline_block_size(const u8 *eld)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKwubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj"hKwubj)}(h drm_eld_calc_baseline_block_sizeh]j)}(h drm_eld_calc_baseline_block_sizeh]h drm_eld_calc_baseline_block_size}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj"hKwubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hj5"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1"ubj)}(h h]h }(hjB"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1"ubh)}(hhh]j)}(hu8h]hu8}(hjS"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjU"modnameN classnameNjj)}j]j%)}jj"sb"c.drm_eld_calc_baseline_block_sizeasbuh1hhj1"ubj)}(h h]h }(hjs"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1"ubj9)}(hj9h]h*}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1"ubj)}(heldh]held}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-"ubah}(h]h ]h"]h$]h&]jjuh1jhj!hhhj"hKwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!hhhj"hKwubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj"hKwhj!hhubj)}(hhh]h)}(h&Calculate baseline block size in bytesh]h&Calculate baseline block size in bytes}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKqhj"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj"hKwubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhjhNhNubj)}(hX **Parameters** ``const u8 *eld`` pointer to an eld memory structure with mnl and sad_count set **Description** This is a helper for determining the payload size of the baseline block, in bytes, for e.g. setting the Baseline_ELD_Len field in the ELD header block.h](h)}(h**Parameters**h]j%)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKuhj"ubji)}(hhh]jn)}(hP``const u8 *eld`` pointer to an eld memory structure with mnl and sad_count set h](jt)}(h``const u8 *eld``h]jz)}(hj"h]h const u8 *eld}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKrhj"ubj)}(hhh]h)}(h=pointer to an eld memory structure with mnl and sad_count seth]h=pointer to an eld memory structure with mnl and sad_count set}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKrhj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj#hKrhj"ubah}(h]h ]h"]h$]h&]uh1jhhj"ubh)}(h**Description**h]j%)}(hj4#h]h Description}(hj6#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2#ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKthj"ubh)}(hThis is a helper for determining the payload size of the baseline block, in bytes, for e.g. setting the Baseline_ELD_Len field in the ELD header block.h]hThis is a helper for determining the payload size of the baseline block, in bytes, for e.g. setting the Baseline_ELD_Len field in the ELD header block.}(hjJ#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKthj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_size (C function)c.drm_eld_sizehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h int drm_eld_size (const u8 *eld)h]j)}(hint drm_eld_size(const u8 *eld)h](j)}(hinth]hint}(hjy#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju#hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju#hhhj#hKubj)}(h drm_eld_sizeh]j)}(h drm_eld_sizeh]h drm_eld_size}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhju#hhhj#hKubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j)}(hu8h]hu8}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j%)}jj#sbc.drm_eld_sizeasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#ubj)}(heldh]held}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubah}(h]h ]h"]h$]h&]jjuh1jhju#hhhj#hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjq#hhhj#hKubah}(h]jl#ah ](jjeh"]h$]h&]jj)jhuh1jhj#hKhjn#hhubj)}(hhh]h)}(hGet ELD size in bytesh]hGet ELD size in bytes}(hj9$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhK~hj6$hhubah}(h]h ]h"]h$]h&]uh1jhjn#hhhj#hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQ$jjQ$jjjuh1jhhhjhNhNubj)}(hX\**Parameters** ``const u8 *eld`` pointer to a complete eld memory structure **Description** The returned value does not include the vendor block. It's vendor specific, and comprises of the remaining bytes in the ELD memory buffer after drm_eld_size() bytes of header and baseline block. The returned value is guaranteed to be a multiple of 4.h](h)}(h**Parameters**h]j%)}(hj[$h]h Parameters}(hj]$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjY$ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhjU$ubji)}(hhh]jn)}(h=``const u8 *eld`` pointer to a complete eld memory structure h](jt)}(h``const u8 *eld``h]jz)}(hjz$h]h const u8 *eld}(hj|$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx$ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhjt$ubj)}(hhh]h)}(h*pointer to a complete eld memory structureh]h*pointer to a complete eld memory structure}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjt$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hKhjq$ubah}(h]h ]h"]h$]h&]uh1jhhjU$ubh)}(h**Description**h]j%)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhjU$ubh)}(hThe returned value does not include the vendor block. It's vendor specific, and comprises of the remaining bytes in the ELD memory buffer after drm_eld_size() bytes of header and baseline block.h]hThe returned value does not include the vendor block. It’s vendor specific, and comprises of the remaining bytes in the ELD memory buffer after drm_eld_size() bytes of header and baseline block.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhjU$ubh)}(h7The returned value is guaranteed to be a multiple of 4.h]h7The returned value is guaranteed to be a multiple of 4.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhjU$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_eld_get_spk_alloc (C function)c.drm_eld_get_spk_allochNtauh1jxhjhhhNhNubj)}(hhh](j)}(h(u8 drm_eld_get_spk_alloc (const u8 *eld)h]j)}(h'u8 drm_eld_get_spk_alloc(const u8 *eld)h](h)}(hhh]j)}(hu8h]hu8}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj %ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j%)}jdrm_eld_get_spk_allocsbc.drm_eld_get_spk_allocasbuh1hhj%hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKubj)}(h h]h }(hj.%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj-%hKubj)}(hdrm_eld_get_spk_alloch]j)}(hj*%h]hdrm_eld_get_spk_alloc}(hj@%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj-%hKubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hj[%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW%ubj)}(h h]h }(hjh%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW%ubh)}(hhh]j)}(hu8h]hu8}(hjy%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{%modnameN classnameNjj)}j]j(%c.drm_eld_get_spk_allocasbuh1hhjW%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW%ubj9)}(hj9h]h*}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjW%ubj)}(heldh]held}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS%ubah}(h]h ]h"]h$]h&]jjuh1jhj%hhhj-%hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj%hhhj-%hKubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj-%hKhj$hhubj)}(hhh]h)}(hGet speaker allocationh]hGet speaker allocation}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj-%hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 *eld`` pointer to an ELD memory structure **Description** The returned value is the speakers mask. User has to use ``DRM_ELD_SPEAKER`` field definitions to identify speakers.h](h)}(h**Parameters**h]j%)}(hj%h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj%ubji)}(hhh]jn)}(h5``const u8 *eld`` pointer to an ELD memory structure h](jt)}(h``const u8 *eld``h]jz)}(hj&h]h const u8 *eld}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj&ubj)}(hhh]h)}(h"pointer to an ELD memory structureh]h"pointer to an ELD memory structure}(hj6&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2&hKhj3&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj2&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhhj%ubh)}(h**Description**h]j%)}(hjX&h]h Description}(hjZ&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjV&ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj%ubh)}(htThe returned value is the speakers mask. User has to use ``DRM_ELD_SPEAKER`` field definitions to identify speakers.h](h9The returned value is the speakers mask. User has to use }(hjn&hhhNhNubjz)}(h``DRM_ELD_SPEAKER``h]hDRM_ELD_SPEAKER}(hjv&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjn&ubh( field definitions to identify speakers.}(hjn&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_eld_get_conn_type (C function)c.drm_eld_get_conn_typehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h(u8 drm_eld_get_conn_type (const u8 *eld)h]j)}(h'u8 drm_eld_get_conn_type(const u8 *eld)h](h)}(hhh]j)}(hu8h]hu8}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j%)}jdrm_eld_get_conn_typesbc.drm_eld_get_conn_typeasbuh1hhj&hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hKubj)}(hdrm_eld_get_conn_typeh]j)}(hj&h]hdrm_eld_get_conn_type}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj&hKubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(hu8h]hu8}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!'modnameN classnameNjj)}j]j&c.drm_eld_get_conn_typeasbuh1hhj&ubj)}(h h]h }(hj='hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjK'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(heldh]held}(hjX'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubah}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj&hhhj&hKubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhj&hKhj&hhubj)}(hhh]h)}(h!Get device type hdmi/dp connectedh]h!Get device type hdmi/dp connected}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 *eld`` pointer to an ELD memory structure **Description** The caller need to use ``DRM_ELD_CONN_TYPE_HDMI`` or ``DRM_ELD_CONN_TYPE_DP`` to identify the display type connected.h](h)}(h**Parameters**h]j%)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj'ubji)}(hhh]jn)}(h5``const u8 *eld`` pointer to an ELD memory structure h](jt)}(h``const u8 *eld``h]jz)}(hj'h]h const u8 *eld}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj'ubj)}(hhh]h)}(h"pointer to an ELD memory structureh]h"pointer to an ELD memory structure}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jhhj'ubh)}(h**Description**h]j%)}(hj'h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj'ubh)}(huThe caller need to use ``DRM_ELD_CONN_TYPE_HDMI`` or ``DRM_ELD_CONN_TYPE_DP`` to identify the display type connected.h](hThe caller need to use }(hj(hhhNhNubjz)}(h``DRM_ELD_CONN_TYPE_HDMI``h]hDRM_ELD_CONN_TYPE_HDMI}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh or }(hj(hhhNhNubjz)}(h``DRM_ELD_CONN_TYPE_DP``h]hDRM_ELD_CONN_TYPE_DP}(hj.(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(ubh( to identify the display type connected.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./include/drm/drm_eld.hhKhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad_get (C function)c.drm_eld_sad_gethNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint drm_eld_sad_get (const u8 *eld, int sad_index, struct cea_sad *cta_sad)h]j)}(hJint drm_eld_sad_get(const u8 *eld, int sad_index, struct cea_sad *cta_sad)h](j)}(hinth]hint}(hjg(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc(hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKubj)}(h h]h }(hjv(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc(hhhju(hKubj)}(hdrm_eld_sad_geth]j)}(hdrm_eld_sad_geth]hdrm_eld_sad_get}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjc(hhhju(hKubj)}(h7(const u8 *eld, int sad_index, struct cea_sad *cta_sad)h](j)}(h const u8 *eldh](j)}(hjch]hconst}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hu8h]hu8}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}jj(sbc.drm_eld_sad_getasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(heldh]held}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h int sad_indexh](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj$)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h sad_indexh]h sad_index}(hj2)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(hstruct cea_sad *cta_sadh](j)}(hjh]hstruct}(hjK)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubj)}(h h]h }(hjX)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubh)}(hhh]j)}(hcea_sadh]hcea_sad}(hji)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjk)modnameN classnameNjj)}j]j(c.drm_eld_sad_getasbuh1hhjG)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubj9)}(hj9h]h*}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjG)ubj)}(hcta_sadh]hcta_sad}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhjc(hhhju(hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_(hhhju(hKubah}(h]jZ(ah ](jjeh"]h$]h&]jj)jhuh1jhju(hKhj\(hhubj)}(hhh]h)}(h"get SAD from ELD to struct cea_sadh]h"get SAD from ELD to struct cea_sad}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhj)hhubah}(h]h ]h"]h$]h&]uh1jhj\(hhhju(hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const u8 *eld`` ELD buffer ``int sad_index`` SAD index ``struct cea_sad *cta_sad`` destination struct cea_sad **Return** 0 on success, or negative on errorsh](h)}(h**Parameters**h]j%)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhj)ubji)}(hhh](jn)}(h``const u8 *eld`` ELD buffer h](jt)}(h``const u8 *eld``h]jz)}(hj *h]h const u8 *eld}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj *ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhj*ubj)}(hhh]h)}(h ELD bufferh]h ELD buffer}(hj&*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"*hKhj#*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhj"*hKhj*ubjn)}(h``int sad_index`` SAD index h](jt)}(h``int sad_index``h]jz)}(hjF*h]h int sad_index}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD*ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhj@*ubj)}(hhh]h)}(h SAD indexh]h SAD index}(hj_*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[*hKhj\*ubah}(h]h ]h"]h$]h&]uh1jhj@*ubeh}(h]h ]h"]h$]h&]uh1jmhj[*hKhj*ubjn)}(h7``struct cea_sad *cta_sad`` destination struct cea_sad h](jt)}(h``struct cea_sad *cta_sad``h]jz)}(hj*h]hstruct cea_sad *cta_sad}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}*ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhjy*ubj)}(hhh]h)}(hdestination struct cea_sadh]hdestination struct cea_sad}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjy*ubeh}(h]h ]h"]h$]h&]uh1jmhj*hKhj*ubeh}(h]h ]h"]h$]h&]uh1jhhj)ubh)}(h **Return**h]j%)}(hj*h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhj)ubh)}(h#0 on success, or negative on errorsh]h#0 on success, or negative on errors}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chKhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad_set (C function)c.drm_eld_sad_sethNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint drm_eld_sad_set (u8 *eld, int sad_index, const struct cea_sad *cta_sad)h]j)}(hJint drm_eld_sad_set(u8 *eld, int sad_index, const struct cea_sad *cta_sad)h](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK,ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj +hK,ubj)}(hdrm_eld_sad_seth]j)}(hdrm_eld_sad_seth]hdrm_eld_sad_set}(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhj +hK,ubj)}(h7(u8 *eld, int sad_index, const struct cea_sad *cta_sad)h](j)}(hu8 *eldh](h)}(hhh]j)}(hu8h]hu8}(hj?+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjA+modnameN classnameNjj)}j]j%)}jj"+sbc.drm_eld_sad_setasbuh1hhj8+ubj)}(h h]h }(hj_+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8+ubj9)}(hj9h]h*}(hjm+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8+ubj)}(heldh]held}(hjz+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4+ubj)}(h int sad_indexh](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h sad_indexh]h sad_index}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4+ubj)}(hconst struct cea_sad *cta_sadh](j)}(hjch]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hcea_sadh]hcea_sad}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j[+c.drm_eld_sad_setasbuh1hhj+ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hj-,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hcta_sadh]hcta_sad}(hj:,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4+ubeh}(h]h ]h"]h$]h&]jjuh1jhj*hhhj +hK,ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhj +hK,ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhj +hK,hj*hhubj)}(hhh]h)}(h"set SAD to ELD from struct cea_sadh]h"set SAD to ELD from struct cea_sad}(hjd,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK%hja,hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj +hK,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|,jj|,jjjuh1jhhhjhNhNubj)}(h**Parameters** ``u8 *eld`` ELD buffer ``int sad_index`` SAD index ``const struct cea_sad *cta_sad`` source struct cea_sad **Return** 0 on success, or negative on errorsh](h)}(h**Parameters**h]j%)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK)hj,ubji)}(hhh](jn)}(h``u8 *eld`` ELD buffer h](jt)}(h ``u8 *eld``h]jz)}(hj,h]hu8 *eld}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK&hj,ubj)}(hhh]h)}(h ELD bufferh]h ELD buffer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hK&hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hK&hj,ubjn)}(h``int sad_index`` SAD index h](jt)}(h``int sad_index``h]jz)}(hj,h]h int sad_index}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK'hj,ubj)}(hhh]h)}(h SAD indexh]h SAD index}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hK'hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hK'hj,ubjn)}(h8``const struct cea_sad *cta_sad`` source struct cea_sad h](jt)}(h!``const struct cea_sad *cta_sad``h]jz)}(hj-h]hconst struct cea_sad *cta_sad}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK(hj-ubj)}(hhh]h)}(hsource struct cea_sadh]hsource struct cea_sad}(hj0-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,-hK(hj--ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj,-hK(hj,ubeh}(h]h ]h"]h$]h&]uh1jhhj,ubh)}(h **Return**h]j%)}(hjR-h]hReturn}(hjT-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjP-ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK*hj,ubh)}(h#0 on success, or negative on errorsh]h#0 on success, or negative on errors}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_eld.chK*hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]edid-helper-functions-referenceah ]h"]edid helper functions referenceah$]h&]uh1hhhhhhhhMfubh)}(hhh](h)}(hSCDC Helper Functions Referenceh]hSCDC Helper Functions Reference}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhMuubh)}(hXStatus and Control Data Channel (SCDC) is a mechanism introduced by the HDMI 2.0 specification. It is a point-to-point protocol that allows the HDMI source and HDMI sink to exchange data. The same I2C interface that is used to access EDID serves as the transport mechanism for SCDC.h]hXStatus and Control Data Channel (SCDC) is a mechanism introduced by the HDMI 2.0 specification. It is a point-to-point protocol that allows the HDMI source and HDMI sink to exchange data. The same I2C interface that is used to access EDID serves as the transport mechanism for SCDC.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./drivers/gpu/drm/display/drm_scdc_helper.chK"hj-hhubh)}(hNote: The SCDC status is going to be lost when the display is disconnected. This can happen physically when the user disconnects the cable, but also when a display is switched on (such as waking up a TV).h]hNote: The SCDC status is going to be lost when the display is disconnected. This can happen physically when the user disconnects the cable, but also when a display is switched on (such as waking up a TV).}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./drivers/gpu/drm/display/drm_scdc_helper.chK'hj-hhubh)}(hXThis is further complicated by the fact that, upon a disconnection / reconnection, KMS won't change the mode on its own. This means that one can't just rely on setting the SCDC status on enable, but also has to track the connector status changes using interrupts and restore the SCDC status. The typical solution for this is to trigger an empty modeset in drm_connector_helper_funcs.detect_ctx(), like what vc4 does in vc4_hdmi_reset_link().h]hXThis is further complicated by the fact that, upon a disconnection / reconnection, KMS won’t change the mode on its own. This means that one can’t just rely on setting the SCDC status on enable, but also has to track the connector status changes using interrupts and restore the SCDC status. The typical solution for this is to trigger an empty modeset in drm_connector_helper_funcs.detect_ctx(), like what vc4 does in vc4_hdmi_reset_link().}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./drivers/gpu/drm/display/drm_scdc_helper.chK,hj-hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_scdc_readb (C function)c.drm_scdc_readbhNtauh1jxhj-hhhNhNubj)}(hhh](j)}(hFint drm_scdc_readb (struct i2c_adapter *adapter, u8 offset, u8 *value)h]j)}(hEint drm_scdc_readb(struct i2c_adapter *adapter, u8 offset, u8 *value)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK3ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hK3ubj)}(hdrm_scdc_readbh]j)}(hdrm_scdc_readbh]hdrm_scdc_readb}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj-hK3ubj)}(h3(struct i2c_adapter *adapter, u8 offset, u8 *value)h](j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj'.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj8.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:.modnameN classnameNjj)}j]j%)}jj.sbc.drm_scdc_readbasbuh1hhj.ubj)}(h h]h }(hjX.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hjf.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubj)}(hadapterh]hadapter}(hjs.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]jT.c.drm_scdc_readbasbuh1hhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hoffseth]hoffset}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h u8 *valueh](h)}(hhh]j)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]jT.c.drm_scdc_readbasbuh1hhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubj)}(hvalueh]hvalue}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj-hK3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhj-hK3ubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhj-hK3hj-hhubj)}(hhh]h)}(hread a single byte from SCDCh]hread a single byte from SCDC}(hj:/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK(hj7/hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hK3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjR/jjR/jjjuh1jhhhj-hNhNubj)}(hXT**Parameters** ``struct i2c_adapter *adapter`` I2C adapter ``u8 offset`` offset of register to read ``u8 *value`` return location for the register value **Description** Reads a single byte from SCDC. This is a convenience wrapper around the drm_scdc_read() function. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj\/h]h Parameters}(hj^/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZ/ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK,hjV/ubji)}(hhh](jn)}(h,``struct i2c_adapter *adapter`` I2C adapter h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj{/h]hstruct i2c_adapter *adapter}(hj}/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjy/ubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK)hju/ubj)}(hhh]h)}(h I2C adapterh]h I2C adapter}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hK)hj/ubah}(h]h ]h"]h$]h&]uh1jhju/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hK)hjr/ubjn)}(h)``u8 offset`` offset of register to read h](jt)}(h ``u8 offset``h]jz)}(hj/h]h u8 offset}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK*hj/ubj)}(hhh]h)}(hoffset of register to readh]hoffset of register to read}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hK*hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hK*hjr/ubjn)}(h5``u8 *value`` return location for the register value h](jt)}(h ``u8 *value``h]jz)}(hj/h]h u8 *value}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK+hj/ubj)}(hhh]h)}(h&return location for the register valueh]h&return location for the register value}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hK+hj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj0hK+hjr/ubeh}(h]h ]h"]h$]h&]uh1jhhjV/ubh)}(h**Description**h]j%)}(hj(0h]h Description}(hj*0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&0ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK-hjV/ubh)}(haReads a single byte from SCDC. This is a convenience wrapper around the drm_scdc_read() function.h]haReads a single byte from SCDC. This is a convenience wrapper around the drm_scdc_read() function.}(hj>0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK-hjV/ubh)}(h **Return**h]j%)}(hjO0h]hReturn}(hjQ0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjM0ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK0hjV/ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hje0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK0hjV/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj-hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_scdc_writeb (C function)c.drm_scdc_writebhNtauh1jxhj-hhhNhNubj)}(hhh](j)}(hFint drm_scdc_writeb (struct i2c_adapter *adapter, u8 offset, u8 value)h]j)}(hEint drm_scdc_writeb(struct i2c_adapter *adapter, u8 offset, u8 value)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhKEubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hKEubj)}(hdrm_scdc_writebh]j)}(hdrm_scdc_writebh]hdrm_scdc_writeb}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhj0hKEubj)}(h2(struct i2c_adapter *adapter, u8 offset, u8 value)h](j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jj0sbc.drm_scdc_writebasbuh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hadapterh]hadapter}(hj*1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hjF1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjH1modnameN classnameNjj)}j]j 1c.drm_scdc_writebasbuh1hhj?1ubj)}(h h]h }(hjd1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?1ubj)}(hoffseth]hoffset}(hjr1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hu8 valueh](h)}(hhh]j)}(hu8h]hu8}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j 1c.drm_scdc_writebasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hvalueh]hvalue}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhj0hhhj0hKEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhj0hKEubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhj0hKEhj0hhubj)}(hhh]h)}(hwrite a single byte to SCDCh]hwrite a single byte to SCDC}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK:hj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hKEubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhj-hNhNubj)}(hXS**Parameters** ``struct i2c_adapter *adapter`` I2C adapter ``u8 offset`` offset of register to read ``u8 value`` return location for the register value **Description** Writes a single byte to SCDC. This is a convenience wrapper around the drm_scdc_write() function. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK>hj2ubji)}(hhh](jn)}(h,``struct i2c_adapter *adapter`` I2C adapter h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj%2h]hstruct i2c_adapter *adapter}(hj'2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#2ubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK;hj2ubj)}(hhh]h)}(h I2C adapterh]h I2C adapter}(hj>2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:2hK;hj;2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhj:2hK;hj2ubjn)}(h)``u8 offset`` offset of register to read h](jt)}(h ``u8 offset``h]jz)}(hj^2h]h u8 offset}(hj`2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj\2ubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./include/drm/display/drm_scdc_helper.hhK3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjC3modnameN classnameNjj)}j]j%)}j drm_scdc_readsbc.drm_scdc_readasbuh1hhj:3hhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKEubj)}(h h]h }(hjc3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:3hhhjb3hKEubj)}(h drm_scdc_readh]j)}(hj_3h]h drm_scdc_read}(hju3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:3hhhjb3hKEubj)}(hC(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h](j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j]3c.drm_scdc_readasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hadapterh]hadapter}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j]3c.drm_scdc_readasbuh1hhj3ubj)}(h h]h }(hj!4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hoffseth]hoffset}(hj/4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjH4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD4ubj)}(h h]h }(hjV4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD4ubj9)}(hj9h]h*}(hjd4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjD4ubj)}(hbufferh]hbuffer}(hjq4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j]3c.drm_scdc_readasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hsizeh]hsize}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubeh}(h]h ]h"]h$]h&]jjuh1jhj:3hhhjb3hKEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj63hhhjb3hKEubah}(h]j13ah ](jjeh"]h$]h&]jj)jhuh1jhjb3hKEhj33hhubj)}(hhh]h)}(hread a block of data from SCDCh]hread a block of data from SCDC}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chK:hj4hhubah}(h]h ]h"]h$]h&]uh1jhj33hhhjb3hKEubeh}(h]h ](jfunctioneh"]h$]h&]jjjj4jj4jjjuh1jhhhj-hNhNubj)}(hX`**Parameters** ``struct i2c_adapter *adapter`` I2C controller ``u8 offset`` start offset of block to read ``void *buffer`` return location for the block to read ``size_t size`` size of the block to read **Description** Reads a block of data from SCDC, starting at a given offset. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chK>hj4ubji)}(hhh](jn)}(h/``struct i2c_adapter *adapter`` I2C controller h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj$5h]hstruct i2c_adapter *adapter}(hj&5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"5ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chK;hj5ubj)}(hhh]h)}(hI2C controllerh]hI2C controller}(hj=5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj95hK;hj:5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj95hK;hj5ubjn)}(h,``u8 offset`` start offset of block to read h](jt)}(h ``u8 offset``h]jz)}(hj]5h]h u8 offset}(hj_5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[5ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj5ubj)}(hhh]h)}(hsize of the block to readh]hsize of the block to read}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hK>hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hK>hj5ubeh}(h]h ]h"]h$]h&]uh1jhhj4ubh)}(h**Description**h]j%)}(hj 6h]h Description}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chK@hj4ubh)}(hTrue if scrambling is set/reset successfully, false otherwise.h]h>True if scrambling is set/reset successfully, false otherwise.}(hjU=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj-hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_scdc_set_high_tmds_clock_ratio (C function)$c.drm_scdc_set_high_tmds_clock_ratiohNtauh1jxhj-hhhNhNubj)}(hhh](j)}(hSbool drm_scdc_set_high_tmds_clock_ratio (struct drm_connector *connector, bool set)h]j)}(hRbool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector, bool set)h](j)}(hjAh]hbool}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj=hKubj)}(h"drm_scdc_set_high_tmds_clock_ratioh]j)}(h"drm_scdc_set_high_tmds_clock_ratioh]h"drm_scdc_set_high_tmds_clock_ratio}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhj=hKubj)}(h+(struct drm_connector *connector, bool set)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j%)}jj=sb$c.drm_scdc_set_high_tmds_clock_ratioasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hj9h]h*}(hj >hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubj)}(h connectorh]h connector}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hbool seth](j)}(hjAh]hbool}(hj2>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.>ubj)}(h h]h }(hj?>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.>ubj)}(hseth]hset}(hjM>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhj=hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|=hhhj=hKubah}(h]jw=ah ](jjeh"]h$]h&]jj)jhuh1jhj=hKhjy=hhubj)}(hhh]h)}(hset TMDS clock ratioh]hset TMDS clock ratio}(hjw>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjt>hhubah}(h]h ]h"]h$]h&]uh1jhjy=hhhj=hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhj-hNhNubj)}(hXE**Parameters** ``struct drm_connector *connector`` connector ``bool set`` ret or reset the high clock ratio TMDS clock ratio calculations go like this: TMDS character = 10 bit TMDS encoded value TMDS character rate = The rate at which TMDS characters are transmitted (Mcsc) TMDS bit rate = 10x TMDS character rate As per the spec: TMDS clock rate for pixel clock < 340 MHz = 1x the character rate = 1/10 pixel clock rate TMDS clock rate for pixel clock > 340 MHz = 0.25x the character rate = 1/40 pixel clock rate Writes to the TMDS config register over SCDC channel, and: sets TMDS clock ratio to 1/40 when set = 1 sets TMDS clock ratio to 1/10 when set = 0 **Return** True if write is successful, false otherwise.h](h)}(h**Parameters**h]j%)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj>ubji)}(hhh](jn)}(h.``struct drm_connector *connector`` connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj>h]hstruct drm_connector *connector}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj>ubj)}(hhh]h)}(h connectorh]h connector}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhj>hKhj>ubjn)}(hX``bool set`` ret or reset the high clock ratio TMDS clock ratio calculations go like this: TMDS character = 10 bit TMDS encoded value TMDS character rate = The rate at which TMDS characters are transmitted (Mcsc) TMDS bit rate = 10x TMDS character rate As per the spec: TMDS clock rate for pixel clock < 340 MHz = 1x the character rate = 1/10 pixel clock rate TMDS clock rate for pixel clock > 340 MHz = 0.25x the character rate = 1/40 pixel clock rate Writes to the TMDS config register over SCDC channel, and: sets TMDS clock ratio to 1/40 when set = 1 sets TMDS clock ratio to 1/10 when set = 0 h](jt)}(h ``bool set``h]jz)}(hj>h]hbool set}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj>ubj)}(hhh](h)}(h!ret or reset the high clock ratioh]h!ret or reset the high clock ratio}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj?ubji)}(hhh](jn)}(hTMDS clock ratio calculations go like this: TMDS character = 10 bit TMDS encoded value TMDS character rate = The rate at which TMDS characters are transmitted (Mcsc) TMDS bit rate = 10x TMDS character rate h](jt)}(h+TMDS clock ratio calculations go like this:h]h+TMDS clock ratio calculations go like this:}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj?ubj)}(hhh](h)}(h*TMDS character = 10 bit TMDS encoded valueh]h*TMDS character = 10 bit TMDS encoded value}(hj2?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj/?ubh)}(hNTMDS character rate = The rate at which TMDS characters are transmitted (Mcsc)h]hNTMDS character rate = The rate at which TMDS characters are transmitted (Mcsc)}(hjA?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj/?ubh)}(h'TMDS bit rate = 10x TMDS character rateh]h'TMDS bit rate = 10x TMDS character rate}(hjP?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.?hKhj/?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj.?hKhj?ubjn)}(hAs per the spec: TMDS clock rate for pixel clock < 340 MHz = 1x the character rate = 1/10 pixel clock rate TMDS clock rate for pixel clock > 340 MHz = 0.25x the character rate = 1/40 pixel clock rate h](jt)}(hAs per the spec:h]hAs per the spec:}(hjn?hhhNhNubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjj?ubj)}(hhh](h)}(hYTMDS clock rate for pixel clock < 340 MHz = 1x the character rate = 1/10 pixel clock rateh]hYTMDS clock rate for pixel clock < 340 MHz = 1x the character rate = 1/10 pixel clock rate}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj}?ubh)}(h\TMDS clock rate for pixel clock > 340 MHz = 0.25x the character rate = 1/40 pixel clock rateh]h\TMDS clock rate for pixel clock > 340 MHz = 0.25x the character rate = 1/40 pixel clock rate}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj}?ubeh}(h]h ]h"]h$]h&]uh1jhjj?ubeh}(h]h ]h"]h$]h&]uh1jmhj|?hKhj?ubjn)}(hWrites to the TMDS config register over SCDC channel, and: sets TMDS clock ratio to 1/40 when set = 1 sets TMDS clock ratio to 1/10 when set = 0 h](jt)}(h:Writes to the TMDS config register over SCDC channel, and:h]h:Writes to the TMDS config register over SCDC channel, and:}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj?hKhj?ubj)}(hhh](h)}(h*sets TMDS clock ratio to 1/40 when set = 1h]h*sets TMDS clock ratio to 1/40 when set = 1}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj?ubh)}(h*sets TMDS clock ratio to 1/10 when set = 0h]h*sets TMDS clock ratio to 1/10 when set = 0}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhj?ubeh}(h]h ]h"]h$]h&]uh1jhhj?ubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhj>ubeh}(h]h ]h"]h$]h&]uh1jhhj>ubh)}(h **Return**h]j%)}(hj@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj>ubh)}(h-True if write is successful, false otherwise.h]h-True if write is successful, false otherwise.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj-hhhNhNubeh}(h]scdc-helper-functions-referenceah ]h"]scdc helper functions referenceah$]h&]uh1hhhhhhhhMuubh)}(hhh](h)}(h HDMI Infoframes Helper Referenceh]h HDMI Infoframes Helper Reference}(hj9@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6@hhhhhMubh)}(hStrictly speaking this is not a DRM helper library but generally usable by any driver interfacing with HDMI outputs like v4l or alsa drivers. But it nicely fits into the overall topic of mode setting helper libraries and hence is also included here.h]hStrictly speaking this is not a DRM helper library but generally usable by any driver interfacing with HDMI outputs like v4l or alsa drivers. But it nicely fits into the overall topic of mode setting helper libraries and hence is also included here.}(hjG@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj6@hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jhdr_sink_metadata (C struct)c.hdr_sink_metadatahNtauh1jxhj6@hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhNubj)}(hhh](j)}(hhdr_sink_metadatah]j)}(hstruct hdr_sink_metadatah](j)}(hjh]hstruct}(hjo@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk@hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhKubj)}(h h]h }(hj}@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk@hhhj|@hKubj)}(hhdr_sink_metadatah]j)}(hji@h]hhdr_sink_metadata}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjk@hhhj|@hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjg@hhhj|@hKubah}(h]ja@ah ](jjeh"]h$]h&]jj)jhuh1jhj|@hKhjd@hhubj)}(hhh]h)}(hHDR sink metadatah]hHDR sink metadata}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jhjd@hhhj|@hKubeh}(h]h ](jstructeh"]h$]h&]jjjj@jj@jjjuh1jhhhj6@hjc@hNubj)}(hX"**Definition**:: struct hdr_sink_metadata { __u32 metadata_type; union { struct hdr_static_metadata hdmi_type1; }; }; **Members** ``metadata_type`` Static_Metadata_Descriptor_ID. ``{unnamed_union}`` anonymous ``hdmi_type1`` HDR Metadata Infoframe.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubh:}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj@ubj@)}(hxstruct hdr_sink_metadata { __u32 metadata_type; union { struct hdr_static_metadata hdmi_type1; }; };h]hxstruct hdr_sink_metadata { __u32 metadata_type; union { struct hdr_static_metadata hdmi_type1; }; };}hj@sbah}(h]h ]h"]h$]h&]jjuh1j?hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj@ubh)}(h **Members**h]j%)}(hj@h]hMembers}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj@ubji)}(hhh](jn)}(h1``metadata_type`` Static_Metadata_Descriptor_ID. h](jt)}(h``metadata_type``h]jz)}(hjAh]h metadata_type}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjAubj)}(hhh]h)}(hStatic_Metadata_Descriptor_ID.h]hStatic_Metadata_Descriptor_ID.}(hj7AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3AhMhj4Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj3AhMhjAubjn)}(h``{unnamed_union}`` anonymous h](jt)}(h``{unnamed_union}``h]jz)}(hjWAh]h{unnamed_union}}(hjYAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUAubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjQAubj)}(hhh]h)}(h anonymoush]h anonymous}(hjpAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlAhMhjmAubah}(h]h ]h"]h$]h&]uh1jhjQAubeh}(h]h ]h"]h$]h&]uh1jmhjlAhMhjAubjn)}(h&``hdmi_type1`` HDR Metadata Infoframe.h](jt)}(h``hdmi_type1``h]jz)}(hjAh]h hdmi_type1}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjAubj)}(hhh]h)}(hHDR Metadata Infoframe.h]hHDR Metadata Infoframe.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjAubeh}(h]h ]h"]h$]h&]uh1jhhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhjc@hNubh)}(h**Description**h]j%)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj6@hhubh)}(h*Metadata Information read from Sink's EDIDh]h,Metadata Information read from Sink’s EDID}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj6@hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jhdmi_infoframe (C union)c.hdmi_infoframehNtauh1jxhj6@hhhjc@hNubj)}(hhh](j)}(hhdmi_infoframeh]j)}(hunion hdmi_infoframeh](j)}(hunionh]hunion}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj BhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMubj)}(h h]h }(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj BhhhjBhMubj)}(hhdmi_infoframeh]j)}(hj Bh]hhdmi_infoframe}(hj2BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Bubah}(h]h ](jjeh"]h$]h&]jjuh1jhj BhhhjBhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj BhhhjBhMubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhjBhMhjBhhubj)}(hhh]h)}(h7overall union of all abstract infoframe representationsh]h7overall union of all abstract infoframe representations}(hjTBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjQBhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjBhMubeh}(h]h ](junioneh"]h$]h&]jjjjlBjjlBjjjuh1jhhhj6@hjc@hNubj)}(hX**Definition**:: union hdmi_infoframe { struct hdmi_any_infoframe any; struct hdmi_avi_infoframe avi; struct hdmi_spd_infoframe spd; union hdmi_vendor_any_infoframe vendor; struct hdmi_audio_infoframe audio; struct hdmi_drm_infoframe drm; }; **Members** ``any`` generic infoframe ``avi`` avi infoframe ``spd`` spd infoframe ``vendor`` union of all vendor infoframes ``audio`` audio infoframe ``drm`` Dynamic Range and Mastering infoframeh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjxBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtBubh:}(hjtBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjpBubj@)}(hunion hdmi_infoframe { struct hdmi_any_infoframe any; struct hdmi_avi_infoframe avi; struct hdmi_spd_infoframe spd; union hdmi_vendor_any_infoframe vendor; struct hdmi_audio_infoframe audio; struct hdmi_drm_infoframe drm; };h]hunion hdmi_infoframe { struct hdmi_any_infoframe any; struct hdmi_avi_infoframe avi; struct hdmi_spd_infoframe spd; union hdmi_vendor_any_infoframe vendor; struct hdmi_audio_infoframe audio; struct hdmi_drm_infoframe drm; };}hjBsbah}(h]h ]h"]h$]h&]jjuh1j?hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjpBubh)}(h **Members**h]j%)}(hjBh]hMembers}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjpBubji)}(hhh](jn)}(h``any`` generic infoframe h](jt)}(h``any``h]jz)}(hjBh]hany}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjBubj)}(hhh]h)}(hgeneric infoframeh]hgeneric infoframe}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhjBubjn)}(h``avi`` avi infoframe h](jt)}(h``avi``h]jz)}(hjBh]havi}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjBubj)}(hhh]h)}(h avi infoframeh]h avi infoframe}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjBubjn)}(h``spd`` spd infoframe h](jt)}(h``spd``h]jz)}(hj3Ch]hspd}(hj5ChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1Cubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj-Cubj)}(hhh]h)}(h spd infoframeh]h spd infoframe}(hjLChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHChMhjICubah}(h]h ]h"]h$]h&]uh1jhj-Cubeh}(h]h ]h"]h$]h&]uh1jmhjHChMhjBubjn)}(h*``vendor`` union of all vendor infoframes h](jt)}(h ``vendor``h]jz)}(hjlCh]hvendor}(hjnChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjCubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjfCubj)}(hhh]h)}(hunion of all vendor infoframesh]hunion of all vendor infoframes}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjfCubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjBubjn)}(h``audio`` audio infoframe h](jt)}(h ``audio``h]jz)}(hjCh]haudio}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjCubj)}(hhh]h)}(haudio infoframeh]haudio infoframe}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjBubjn)}(h-``drm`` Dynamic Range and Mastering infoframeh](jt)}(h``drm``h]jz)}(hjCh]hdrm}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjCubj)}(hhh]h)}(h%Dynamic Range and Mastering infoframeh]h%Dynamic Range and Mastering infoframe}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjBubeh}(h]h ]h"]h$]h&]uh1jhhjpBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhjc@hNubh)}(h**Description**h]j%)}(hj!Dh]h Description}(hj#DhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj6@hhubh)}(hThis is used by the generic pack function. This works since all infoframes have the same header which also indicates which type of infoframe should be packed.h]hThis is used by the generic pack function. This works since all infoframes have the same header which also indicates which type of infoframe should be packed.}(hj7DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:392: ./include/linux/hdmi.hhMhj6@hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_avi_infoframe_init (C function)c.hdmi_avi_infoframe_inithNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h?void hdmi_avi_infoframe_init (struct hdmi_avi_infoframe *frame)h]j)}(h>void hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame)h](j)}(hvoidh]hvoid}(hj_DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[DhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chK:ubj)}(h h]h }(hjnDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[DhhhjmDhK:ubj)}(hhdmi_avi_infoframe_inith]j)}(hhdmi_avi_infoframe_inith]hhdmi_avi_infoframe_init}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Dubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[DhhhjmDhK:ubj)}(h"(struct hdmi_avi_infoframe *frame)h]j)}(h struct hdmi_avi_infoframe *frameh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j%)}jjDsbc.hdmi_avi_infoframe_initasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hframeh]hframe}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubah}(h]h ]h"]h$]h&]jjuh1jhj[DhhhjmDhK:ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWDhhhjmDhK:ubah}(h]jRDah ](jjeh"]h$]h&]jj)jhuh1jhjmDhK:hjTDhhubj)}(hhh]h)}(h initialize an HDMI AVI infoframeh]h initialize an HDMI AVI infoframe}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chK7hjEhhubah}(h]h ]h"]h$]h&]uh1jhjTDhhhjmDhK:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7Ejj7Ejjjuh1jhhhj6@hNhNubj)}(hI**Parameters** ``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframeh](h)}(h**Parameters**h]j%)}(hjAEh]h Parameters}(hjCEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?Eubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chK;hj;Eubji)}(hhh]jn)}(h7``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframeh](jt)}(h$``struct hdmi_avi_infoframe *frame``h]jz)}(hj`Eh]h struct hdmi_avi_infoframe *frame}(hjbEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^Eubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chK=hjZEubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hjyEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chK8hjvEubah}(h]h ]h"]h$]h&]uh1jhjZEubeh}(h]h ]h"]h$]h&]uh1jmhjuEhK=hjWEubah}(h]h ]h"]h$]h&]uh1jhhj;Eubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_avi_infoframe_check (C function)c.hdmi_avi_infoframe_checkhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h?int hdmi_avi_infoframe_check (struct hdmi_avi_infoframe *frame)h]j)}(h>int hdmi_avi_infoframe_check(struct hdmi_avi_infoframe *frame)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKZubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhKZubj)}(hhdmi_avi_infoframe_checkh]j)}(hhdmi_avi_infoframe_checkh]hhdmi_avi_infoframe_check}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjEhKZubj)}(h"(struct hdmi_avi_infoframe *frame)h]j)}(h struct hdmi_avi_infoframe *frameh](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j%)}jjEsbc.hdmi_avi_infoframe_checkasbuh1hhjEubj)}(h h]h }(hj5FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjCFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(hframeh]hframe}(hjPFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubah}(h]h ]h"]h$]h&]jjuh1jhjEhhhjEhKZubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjEhhhjEhKZubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhjEhKZhjEhhubj)}(hhh]h)}(hcheck a HDMI AVI infoframeh]hcheck a HDMI AVI infoframe}(hjzFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKRhjwFhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhKZubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKVhjFubji)}(hhh]jn)}(h8``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe h](jt)}(h$``struct hdmi_avi_infoframe *frame``h]jz)}(hjFh]h struct hdmi_avi_infoframe *frame}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKShjFubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKShjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjFhKShjFubah}(h]h ]h"]h$]h&]uh1jhhjFubh)}(h**Description**h]j%)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKUhjFubh)}(hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.h]hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKUhjFubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKXhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)hdmi_avi_infoframe_pack_only (C function)c.hdmi_avi_infoframe_pack_onlyhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hhssize_t hdmi_avi_infoframe_pack_only (const struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h]j)}(hgssize_t hdmi_avi_infoframe_pack_only(const struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjMGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOGmodnameN classnameNjj)}j]j%)}jhdmi_avi_infoframe_pack_onlysbc.hdmi_avi_infoframe_pack_onlyasbuh1hhjFGhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKnubj)}(h h]h }(hjoGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFGhhhjnGhKnubj)}(hhdmi_avi_infoframe_pack_onlyh]j)}(hjkGh]hhdmi_avi_infoframe_pack_only}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Gubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFGhhhjnGhKnubj)}(hC(const struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h](j)}(h&const struct hdmi_avi_infoframe *frameh](j)}(hjch]hconst}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jiGc.hdmi_avi_infoframe_pack_onlyasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(hj9h]h*}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubj)}(hframeh]hframe}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hj'HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Hubj)}(h h]h }(hj5HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Hubj9)}(hj9h]h*}(hjCHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#Hubj)}(hbufferh]hbuffer}(hjPHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Hubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjlHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnHmodnameN classnameNjj)}j]jiGc.hdmi_avi_infoframe_pack_onlyasbuh1hhjeHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeHubj)}(hsizeh]hsize}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubeh}(h]h ]h"]h$]h&]jjuh1jhjFGhhhjnGhKnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBGhhhjnGhKnubah}(h]j=Gah ](jjeh"]h$]h&]jj)jhuh1jhjnGhKnhj?Ghhubj)}(hhh]h)}(h)write HDMI AVI infoframe to binary bufferh]h)write HDMI AVI infoframe to binary buffer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKahjHhhubah}(h]h ]h"]h$]h&]uh1jhj?GhhhjnGhKnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``const struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKehjHubji)}(hhh](jn)}(h>``const struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe h](jt)}(h*``const struct hdmi_avi_infoframe *frame``h]jz)}(hjIh]h&const struct hdmi_avi_infoframe *frame}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKbhjHubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKbhjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjIhKbhjHubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:Iubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKchj6Iubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjUIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQIhKchjRIubah}(h]h ]h"]h$]h&]uh1jhj6Iubeh}(h]h ]h"]h$]h&]uh1jmhjQIhKchjHubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjuIh]h size_t size}(hjwIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsIubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKdhjoIubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKdhjIubah}(h]h ]h"]h$]h&]uh1jhjoIubeh}(h]h ]h"]h$]h&]uh1jmhjIhKdhjHubeh}(h]h ]h"]h$]h&]uh1jhhjHubh)}(h**Description**h]j%)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKfhjHubh)}(hPacks the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h'Packs the information contained in the }(hjIhhhNhNubj%)}(h **frame**h]hframe}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubh structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKfhjHubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKkhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_avi_infoframe_pack (C function)c.hdmi_avi_infoframe_packhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h]ssize_t hdmi_avi_infoframe_pack (struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h]j)}(h\ssize_t hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j%)}jhdmi_avi_infoframe_packsbc.hdmi_avi_infoframe_packasbuh1hhjJhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKubj)}(h h]h }(hj;JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj:JhKubj)}(hhdmi_avi_infoframe_packh]j)}(hj7Jh]hhdmi_avi_infoframe_pack}(hjMJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIJubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj:JhKubj)}(h=(struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h](j)}(h struct hdmi_avi_infoframe *frameh](j)}(hjh]hstruct}(hjhJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdJubj)}(h h]h }(hjuJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdJubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j5Jc.hdmi_avi_infoframe_packasbuh1hhjdJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdJubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdJubj)}(hframeh]hframe}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Jubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubj)}(hbufferh]hbuffer}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Jubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j5Jc.hdmi_avi_infoframe_packasbuh1hhjKubj)}(h h]h }(hj;KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hsizeh]hsize}(hjIKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`Jubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj:JhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJhhhj:JhKubah}(h]j Jah ](jjeh"]h$]h&]jj)jhuh1jhj:JhKhj Jhhubj)}(hhh]h)}(h9check a HDMI AVI infoframe, and write it to binary bufferh]h9check a HDMI AVI infoframe, and write it to binary buffer}(hjsKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjpKhhubah}(h]h ]h"]h$]h&]uh1jhj Jhhhj:JhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhj6@hNhNubj)}(hX{**Parameters** ``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjKubji)}(hhh](jn)}(h8``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe h](jt)}(h$``struct hdmi_avi_infoframe *frame``h]jz)}(hjKh]h struct hdmi_avi_infoframe *frame}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjKubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjKhKhjKubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjKh]h void *buffer}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjKubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKhjLubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjLhKhjKubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hj&Lh]h size_t size}(hj(LhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$Lubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhj Lubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj?LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;LhKhjNhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYNjjYNjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe ``const char *vendor`` vendor string ``const char *product`` product string **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjcNh]h Parameters}(hjeNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhj]Nubji)}(hhh](jn)}(h8``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h$``struct hdmi_spd_infoframe *frame``h]jz)}(hjNh]h struct hdmi_spd_infoframe *frame}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhj|Nubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjNubah}(h]h ]h"]h$]h&]uh1jhj|Nubeh}(h]h ]h"]h$]h&]uh1jmhjNhKhjyNubjn)}(h%``const char *vendor`` vendor string h](jt)}(h``const char *vendor``h]jz)}(hjNh]hconst char *vendor}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjNubj)}(hhh]h)}(h vendor stringh]h vendor string}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjNhKhjyNubjn)}(h'``const char *product`` product string h](jt)}(h``const char *product``h]jz)}(hjNh]hconst char *product}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjNubj)}(hhh]h)}(hproduct stringh]hproduct string}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj OhKhj Oubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhj OhKhjyNubeh}(h]h ]h"]h$]h&]uh1jhhj]Nubh)}(h**Description**h]j%)}(hj/Oh]h Description}(hj1OhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-Oubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhj]Nubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjEOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhj]Nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_spd_infoframe_check (C function)c.hdmi_spd_infoframe_checkhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h?int hdmi_spd_infoframe_check (struct hdmi_spd_infoframe *frame)h]j)}(h>int hdmi_spd_infoframe_check(struct hdmi_spd_infoframe *frame)h](j)}(hinth]hint}(hjtOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpOhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpOhhhjOhMubj)}(hhdmi_spd_infoframe_checkh]j)}(hhdmi_spd_infoframe_checkh]hhdmi_spd_infoframe_check}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjpOhhhjOhMubj)}(h"(struct hdmi_spd_infoframe *frame)h]j)}(h struct hdmi_spd_infoframe *frameh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]j)}(hhdmi_spd_infoframeh]hhdmi_spd_infoframe}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j%)}jjOsbc.hdmi_spd_infoframe_checkasbuh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj9)}(hj9h]h*}(hjOhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjOubj)}(hframeh]hframe}(hj PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubah}(h]h ]h"]h$]h&]jjuh1jhjpOhhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjlOhhhjOhMubah}(h]jgOah ](jjeh"]h$]h&]jj)jhuh1jhjOhMhjiOhhubj)}(hhh]h)}(hcheck a HDMI SPD infoframeh]hcheck a HDMI SPD infoframe}(hj4PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhj1Phhubah}(h]h ]h"]h$]h&]uh1jhjiOhhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLPjjLPjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjVPh]h Parameters}(hjXPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTPubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjPPubji)}(hhh]jn)}(h8``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h$``struct hdmi_spd_infoframe *frame``h]jz)}(hjuPh]h struct hdmi_spd_infoframe *frame}(hjwPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsPubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chKhjoPubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKhjPubah}(h]h ]h"]h$]h&]uh1jhjoPubeh}(h]h ]h"]h$]h&]uh1jmhjPhKhjlPubah}(h]h ]h"]h$]h&]uh1jhhjPPubh)}(h**Description**h]j%)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjPPubh)}(hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.h]hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjPPubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjPPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)hdmi_spd_infoframe_pack_only (C function)c.hdmi_spd_infoframe_pack_onlyhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hhssize_t hdmi_spd_infoframe_pack_only (const struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h]j)}(hgssize_t hdmi_spd_infoframe_pack_only(const struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj QmodnameN classnameNjj)}j]j%)}jhdmi_spd_infoframe_pack_onlysbc.hdmi_spd_infoframe_pack_onlyasbuh1hhjQhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hj)QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhj(QhMubj)}(hhdmi_spd_infoframe_pack_onlyh]j)}(hj%Qh]hhdmi_spd_infoframe_pack_only}(hj;QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Qubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhj(QhMubj)}(hC(const struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h](j)}(h&const struct hdmi_spd_infoframe *frameh](j)}(hjch]hconst}(hjVQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRQubj)}(h h]h }(hjcQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRQubj)}(hjh]hstruct}(hjqQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRQubj)}(h h]h }(hj~QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRQubh)}(hhh]j)}(hhdmi_spd_infoframeh]hhdmi_spd_infoframe}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j#Qc.hdmi_spd_infoframe_pack_onlyasbuh1hhjRQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRQubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRQubj)}(hframeh]hframe}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNQubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjQubj)}(hbufferh]hbuffer}(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNQubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj&RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(RmodnameN classnameNjj)}j]j#Qc.hdmi_spd_infoframe_pack_onlyasbuh1hhjRubj)}(h h]h }(hjDRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hsizeh]hsize}(hjRRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNQubeh}(h]h ]h"]h$]h&]jjuh1jhjQhhhj(QhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhj(QhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhj(QhMhjPhhubj)}(hhh]h)}(h)write HDMI SPD infoframe to binary bufferh]h)write HDMI SPD infoframe to binary buffer}(hj|RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM hjyRhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhj(QhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``const struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjRubji)}(hhh](jn)}(h>``const struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h*``const struct hdmi_spd_infoframe *frame``h]jz)}(hjRh]h&const struct hdmi_spd_infoframe *frame}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM hjRubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhM hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjRhM hjRubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjRh]h void *buffer}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjRubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ShMhj Subah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhj ShMhjRubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hj/Sh]h size_t size}(hj1ShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Subah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj)Subj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjHShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDShMhjESubah}(h]h ]h"]h$]h&]uh1jhj)Subeh}(h]h ]h"]h$]h&]uh1jmhjDShMhjRubeh}(h]h ]h"]h$]h&]uh1jhhjRubh)}(h**Description**h]j%)}(hjjSh]h Description}(hjlShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhSubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjRubh)}(hPacks the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h'Packs the information contained in the }(hjShhhNhNubj%)}(h **frame**h]hframe}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjRubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_spd_infoframe_pack (C function)c.hdmi_spd_infoframe_packhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h]ssize_t hdmi_spd_infoframe_pack (struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h]j)}(h\ssize_t hdmi_spd_infoframe_pack(struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j%)}jhdmi_spd_infoframe_packsbc.hdmi_spd_infoframe_packasbuh1hhjShhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMOubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMOubj)}(hhdmi_spd_infoframe_packh]j)}(hjSh]hhdmi_spd_infoframe_pack}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMOubj)}(h=(struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h](j)}(h struct hdmi_spd_infoframe *frameh](j)}(hjh]hstruct}(hj"ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hj/ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(hhdmi_spd_infoframeh]hhdmi_spd_infoframe}(hj@ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Tubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBTmodnameN classnameNjj)}j]jSc.hdmi_spd_infoframe_packasbuh1hhjTubj)}(h h]h }(hj^ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hjlThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(hframeh]hframe}(hjyThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(hbufferh]hbuffer}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jSc.hdmi_spd_infoframe_packasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hsizeh]hsize}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjShMOubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjShMOhjShhubj)}(hhh]h)}(h9check a HDMI SPD infoframe, and write it to binary bufferh]h9check a HDMI SPD infoframe, and write it to binary buffer}(hj-UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM?hj*Uhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEUjjEUjjjuh1jhhhj6@hNhNubj)}(hX{**Parameters** ``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjOUh]h Parameters}(hjQUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMUubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMChjIUubji)}(hhh](jn)}(h8``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h$``struct hdmi_spd_infoframe *frame``h]jz)}(hjnUh]h struct hdmi_spd_infoframe *frame}(hjpUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlUubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMAhjhUubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMAhjUubah}(h]h ]h"]h$]h&]uh1jhjhUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMAhjeUubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjUh]h void *buffer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMBhjUubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMBhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMBhjeUubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjUh]h size_t size}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMChjUubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMChjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMChjeUubeh}(h]h ]h"]h$]h&]uh1jhhjIUubh)}(h**Description**h]j%)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMEhjIUubh)}(hXvValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](hValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the }(hj1VhhhNhNubj%)}(h **frame**h]hframe}(hj9VhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1Vubh structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hj1VhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMEhjIUubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjRVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMLhjIUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&hdmi_audio_infoframe_init (C function)c.hdmi_audio_infoframe_inithNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hBint hdmi_audio_infoframe_init (struct hdmi_audio_infoframe *frame)h]j)}(hAint hdmi_audio_infoframe_init(struct hdmi_audio_infoframe *frame)h](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}VhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMbubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}VhhhjVhMbubj)}(hhdmi_audio_infoframe_inith]j)}(hhdmi_audio_infoframe_inith]hhdmi_audio_infoframe_init}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}VhhhjVhMbubj)}(h$(struct hdmi_audio_infoframe *frame)h]j)}(h"struct hdmi_audio_infoframe *frameh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j%)}jjVsbc.hdmi_audio_infoframe_initasbuh1hhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hj WhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hframeh]hframe}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubah}(h]h ]h"]h$]h&]jjuh1jhj}VhhhjVhMbubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjyVhhhjVhMbubah}(h]jtVah ](jjeh"]h$]h&]jj)jhuh1jhjVhMbhjvVhhubj)}(hhh]h)}(h"initialize an HDMI audio infoframeh]h"initialize an HDMI audio infoframe}(hjAWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM]hj>Whhubah}(h]h ]h"]h$]h&]uh1jhjvVhhhjVhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYWjjYWjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``struct hdmi_audio_infoframe *frame`` HDMI audio infoframe **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjcWh]h Parameters}(hjeWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaWubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMahj]Wubji)}(hhh]jn)}(h<``struct hdmi_audio_infoframe *frame`` HDMI audio infoframe h](jt)}(h&``struct hdmi_audio_infoframe *frame``h]jz)}(hjWh]h"struct hdmi_audio_infoframe *frame}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM^hj|Wubj)}(hhh]h)}(hHDMI audio infoframeh]hHDMI audio infoframe}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM^hjWubah}(h]h ]h"]h$]h&]uh1jhj|Wubeh}(h]h ]h"]h$]h&]uh1jmhjWhM^hjyWubah}(h]h ]h"]h$]h&]uh1jhhj]Wubh)}(h**Description**h]j%)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM`hj]Wubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM`hj]Wubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hdmi_audio_infoframe_check (C function)c.hdmi_audio_infoframe_checkhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hIint hdmi_audio_infoframe_check (const struct hdmi_audio_infoframe *frame)h]j)}(hHint hdmi_audio_infoframe_check(const struct hdmi_audio_infoframe *frame)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjXhMubj)}(hhdmi_audio_infoframe_checkh]j)}(hhdmi_audio_infoframe_checkh]hhdmi_audio_infoframe_check}(hj#XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjXhMubj)}(h*(const struct hdmi_audio_infoframe *frame)h]j)}(h(const struct hdmi_audio_infoframe *frameh](j)}(hjch]hconst}(hj?XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubj)}(h h]h }(hjLXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubj)}(hjh]hstruct}(hjZXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubj)}(h h]h }(hjgXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hjxXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzXmodnameN classnameNjj)}j]j%)}jj%Xsbc.hdmi_audio_infoframe_checkasbuh1hhj;Xubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;Xubj)}(hframeh]hframe}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Xubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7Xubah}(h]h ]h"]h$]h&]jjuh1jhjWhhhjXhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjXhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjXhMhjWhhubj)}(hhh]h)}(hcheck a HDMI audio infoframeh]hcheck a HDMI audio infoframe}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMyhjXhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjXhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhj6@hNhNubj)}(hX **Parameters** ``const struct hdmi_audio_infoframe *frame`` HDMI audio infoframe **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjXh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM}hjXubji)}(hhh]jn)}(hB``const struct hdmi_audio_infoframe *frame`` HDMI audio infoframe h](jt)}(h,``const struct hdmi_audio_infoframe *frame``h]jz)}(hjYh]h(const struct hdmi_audio_infoframe *frame}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMzhjYubj)}(hhh]h)}(hHDMI audio infoframeh]hHDMI audio infoframe}(hj7YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3YhMzhj4Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhj3YhMzhjYubah}(h]h ]h"]h$]h&]uh1jhhjXubh)}(h**Description**h]j%)}(hjYYh]h Description}(hj[YhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWYubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM|hjXubh)}(hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.h]hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.}(hjoYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM|hjXubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj~YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+hdmi_audio_infoframe_pack_only (C function) c.hdmi_audio_infoframe_pack_onlyhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hlssize_t hdmi_audio_infoframe_pack_only (const struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h]j)}(hkssize_t hdmi_audio_infoframe_pack_only(const struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j%)}jhdmi_audio_infoframe_pack_onlysb c.hdmi_audio_infoframe_pack_onlyasbuh1hhjYhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjYhMubj)}(hhdmi_audio_infoframe_pack_onlyh]j)}(hjYh]hhdmi_audio_infoframe_pack_only}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjYhMubj)}(hE(const struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h](j)}(h(const struct hdmi_audio_infoframe *frameh](j)}(hjch]hconst}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hj ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hj'ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hj8ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5Zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:ZmodnameN classnameNjj)}j]jY c.hdmi_audio_infoframe_pack_onlyasbuh1hhjYubj)}(h h]h }(hjVZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj9h]h*}(hjdZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubj)}(hframeh]hframe}(hjqZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hbufferh]hbuffer}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]jY c.hdmi_audio_infoframe_pack_onlyasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hsizeh]hsize}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjYhMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjYhMhjYhhubj)}(hhh]h)}(h+write HDMI audio infoframe to binary bufferh]h+write HDMI audio infoframe to binary buffer}(hj%[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj"[hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=[jj=[jjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``const struct hdmi_audio_infoframe *frame`` HDMI audio infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjG[h]h Parameters}(hjI[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjE[ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjA[ubji)}(hhh](jn)}(hB``const struct hdmi_audio_infoframe *frame`` HDMI audio infoframe h](jt)}(h,``const struct hdmi_audio_infoframe *frame``h]jz)}(hjf[h]h(const struct hdmi_audio_infoframe *frame}(hjh[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjd[ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`[ubj)}(hhh]h)}(hHDMI audio infoframeh]hHDMI audio infoframe}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{[hMhj|[ubah}(h]h ]h"]h$]h&]uh1jhj`[ubeh}(h]h ]h"]h$]h&]uh1jmhj{[hMhj][ubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hj[h]h void *buffer}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj[ubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj][ubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hj[h]h size_t size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj[ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj][ubeh}(h]h ]h"]h$]h&]uh1jhhjA[ubh)}(h**Description**h]j%)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjA[ubh)}(hPacks the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h'Packs the information contained in the }(hj)\hhhNhNubj%)}(h **frame**h]hframe}(hj1\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)\ubh structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hj)\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjA[ubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjJ\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjA[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&hdmi_audio_infoframe_pack (C function)c.hdmi_audio_infoframe_packhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hassize_t hdmi_audio_infoframe_pack (struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h]j)}(h`ssize_t hdmi_audio_infoframe_pack(struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj|\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~\modnameN classnameNjj)}j]j%)}jhdmi_audio_infoframe_packsbc.hdmi_audio_infoframe_packasbuh1hhju\hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju\hhhj\hMubj)}(hhdmi_audio_infoframe_packh]j)}(hj\h]hhdmi_audio_infoframe_pack}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhju\hhhj\hMubj)}(h?(struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h](j)}(h"struct hdmi_audio_infoframe *frameh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j\c.hdmi_audio_infoframe_packasbuh1hhj\ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\ubj)}(hframeh]hframe}(hj"]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hj;]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7]ubj)}(h h]h }(hjI]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7]ubj9)}(hj9h]h*}(hjW]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7]ubj)}(hbufferh]hbuffer}(hjd]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j\c.hdmi_audio_infoframe_packasbuh1hhjy]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy]ubj)}(hsizeh]hsize}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhju\hhhj\hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjq\hhhj\hMubah}(h]jl\ah ](jjeh"]h$]h&]jj)jhuh1jhj\hMhjn\hhubj)}(hhh]h)}(h;check a HDMI Audio infoframe, and write it to binary bufferh]h;check a HDMI Audio infoframe, and write it to binary buffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhjn\hhhj\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``struct hdmi_audio_infoframe *frame`` HDMI Audio infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj]ubji)}(hhh](jn)}(h<``struct hdmi_audio_infoframe *frame`` HDMI Audio infoframe h](jt)}(h&``struct hdmi_audio_infoframe *frame``h]jz)}(hj^h]h"struct hdmi_audio_infoframe *frame}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj^ubj)}(hhh]h)}(hHDMI Audio infoframeh]hHDMI Audio infoframe}(hj0^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,^hMhj-^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj,^hMhj^ubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjP^h]h void *buffer}(hjR^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN^ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjJ^ubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hji^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje^hMhjf^ubah}(h]h ]h"]h$]h&]uh1jhjJ^ubeh}(h]h ]h"]h$]h&]uh1jmhje^hMhj^ubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hj^h]h size_t size}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj^ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhj^ubeh}(h]h ]h"]h$]h&]uh1jhhj]ubh)}(h**Description**h]j%)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj]ubh)}(hXvValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](hValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the }(hj^hhhNhNubj%)}(h **frame**h]hframe}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubh structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj]ubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-hdmi_audio_infoframe_pack_for_dp (C function)"c.hdmi_audio_infoframe_pack_for_dphNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hvssize_t hdmi_audio_infoframe_pack_for_dp (const struct hdmi_audio_infoframe *frame, struct dp_sdp *sdp, u8 dp_version)h]j)}(hussize_t hdmi_audio_infoframe_pack_for_dp(const struct hdmi_audio_infoframe *frame, struct dp_sdp *sdp, u8 dp_version)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj-_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/_modnameN classnameNjj)}j]j%)}j hdmi_audio_infoframe_pack_for_dpsb"c.hdmi_audio_infoframe_pack_for_dpasbuh1hhj&_hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjO_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&_hhhjN_hMubj)}(h hdmi_audio_infoframe_pack_for_dph]j)}(hjK_h]h hdmi_audio_infoframe_pack_for_dp}(hja_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&_hhhjN_hMubj)}(hM(const struct hdmi_audio_infoframe *frame, struct dp_sdp *sdp, u8 dp_version)h](j)}(h(const struct hdmi_audio_infoframe *frameh](j)}(hjch]hconst}(hj|_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx_ubj)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx_ubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]jI_"c.hdmi_audio_infoframe_pack_for_dpasbuh1hhjx_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx_ubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjx_ubj)}(hframeh]hframe}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjt_ubj)}(hstruct dp_sdp *sdph](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hdp_sdph]hdp_sdp}(hj%`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'`modnameN classnameNjj)}j]jI_"c.hdmi_audio_infoframe_pack_for_dpasbuh1hhj`ubj)}(h h]h }(hjC`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjQ`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hsdph]hsdp}(hj^`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjt_ubj)}(h u8 dp_versionh](h)}(hhh]j)}(hu8h]hu8}(hjz`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|`modnameN classnameNjj)}j]jI_"c.hdmi_audio_infoframe_pack_for_dpasbuh1hhjs`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs`ubj)}(h dp_versionh]h dp_version}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjt_ubeh}(h]h ]h"]h$]h&]jjuh1jhj&_hhhjN_hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"_hhhjN_hMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jhjN_hMhj_hhubj)}(hhh]h)}(h+Pack a HDMI Audio infoframe for DisplayPorth]h+Pack a HDMI Audio infoframe for DisplayPort}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjN_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``const struct hdmi_audio_infoframe *frame`` HDMI Audio infoframe ``struct dp_sdp *sdp`` Secondary data packet for DisplayPort. ``u8 dp_version`` DisplayPort version to be encoded in the header **Description** Packs a HDMI Audio Infoframe to be sent over DisplayPort. This function fills the secondary data packet to be used for DisplayPort. **Return** Number of total written bytes or a negative errno on failure.h](h)}(h**Parameters**h]j%)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`ubji)}(hhh](jn)}(hB``const struct hdmi_audio_infoframe *frame`` HDMI Audio infoframe h](jt)}(h,``const struct hdmi_audio_infoframe *frame``h]jz)}(hjah]h(const struct hdmi_audio_infoframe *frame}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj aubj)}(hhh]h)}(hHDMI Audio infoframeh]hHDMI Audio infoframe}(hj*ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ahMhj'aubah}(h]h ]h"]h$]h&]uh1jhj aubeh}(h]h ]h"]h$]h&]uh1jmhj&ahMhjaubjn)}(h>``struct dp_sdp *sdp`` Secondary data packet for DisplayPort. h](jt)}(h``struct dp_sdp *sdp``h]jz)}(hjJah]hstruct dp_sdp *sdp}(hjLahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHaubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjDaubj)}(hhh]h)}(h&Secondary data packet for DisplayPort.h]h&Secondary data packet for DisplayPort.}(hjcahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ahMhj`aubah}(h]h ]h"]h$]h&]uh1jhjDaubeh}(h]h ]h"]h$]h&]uh1jmhj_ahMhjaubjn)}(hB``u8 dp_version`` DisplayPort version to be encoded in the header h](jt)}(h``u8 dp_version``h]jz)}(hjah]h u8 dp_version}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj}aubj)}(hhh]h)}(h/DisplayPort version to be encoded in the headerh]h/DisplayPort version to be encoded in the header}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj}aubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjaubeh}(h]h ]h"]h$]h&]uh1jhhj`ubh)}(h**Description**h]j%)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`ubh)}(hPacks a HDMI Audio Infoframe to be sent over DisplayPort. This function fills the secondary data packet to be used for DisplayPort.h]hPacks a HDMI Audio Infoframe to be sent over DisplayPort. This function fills the secondary data packet to be used for DisplayPort.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`ubh)}(h **Return**h]j%)}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`ubh)}(h=Number of total written bytes or a negative errno on failure.h]h=Number of total written bytes or a negative errno on failure.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hdmi_vendor_infoframe_init (C function)c.hdmi_vendor_infoframe_inithNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hDint hdmi_vendor_infoframe_init (struct hdmi_vendor_infoframe *frame)h]j)}(hCint hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe *frame)h](j)}(hinth]hint}(hj*bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&bhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hj9bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&bhhhj8bhMubj)}(hhdmi_vendor_infoframe_inith]j)}(hhdmi_vendor_infoframe_inith]hhdmi_vendor_infoframe_init}(hjKbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGbubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&bhhhj8bhMubj)}(h%(struct hdmi_vendor_infoframe *frame)h]j)}(h#struct hdmi_vendor_infoframe *frameh](j)}(hjh]hstruct}(hjgbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbubj)}(h h]h }(hjtbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbubh)}(hhh]j)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j%)}jjMbsbc.hdmi_vendor_infoframe_initasbuh1hhjcbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcbubj)}(hframeh]hframe}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_bubah}(h]h ]h"]h$]h&]jjuh1jhj&bhhhj8bhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"bhhhj8bhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj8bhMhjbhhubj)}(hhh]h)}(h#initialize an HDMI vendor infoframeh]h#initialize an HDMI vendor infoframe}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhj8bhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``struct hdmi_vendor_infoframe *frame`` HDMI vendor infoframe **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj ch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj cubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjcubji)}(hhh]jn)}(h>``struct hdmi_vendor_infoframe *frame`` HDMI vendor infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hj+ch]h#struct hdmi_vendor_infoframe *frame}(hj-chhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)cubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj%cubj)}(hhh]h)}(hHDMI vendor infoframeh]hHDMI vendor infoframe}(hjDchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@chMhjAcubah}(h]h ]h"]h$]h&]uh1jhj%cubeh}(h]h ]h"]h$]h&]uh1jmhj@chMhj"cubah}(h]h ]h"]h$]h&]uh1jhhjcubh)}(h**Description**h]j%)}(hjfch]h Description}(hjhchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdcubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjcubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj|chhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(hdmi_vendor_infoframe_check (C function)c.hdmi_vendor_infoframe_checkhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hEint hdmi_vendor_infoframe_check (struct hdmi_vendor_infoframe *frame)h]j)}(hDint hdmi_vendor_infoframe_check(struct hdmi_vendor_infoframe *frame)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjchMMubj)}(hhdmi_vendor_infoframe_checkh]j)}(hhdmi_vendor_infoframe_checkh]hhdmi_vendor_infoframe_check}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjchMMubj)}(h%(struct hdmi_vendor_infoframe *frame)h]j)}(h#struct hdmi_vendor_infoframe *frameh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j%)}jjcsbc.hdmi_vendor_infoframe_checkasbuh1hhjcubj)}(h h]h }(hj&dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj9)}(hj9h]h*}(hj4dhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcubj)}(hframeh]hframe}(hjAdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubah}(h]h ]h"]h$]h&]jjuh1jhjchhhjchMMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjchhhjchMMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jhjchMMhjchhubj)}(hhh]h)}(hcheck a HDMI vendor infoframeh]hcheck a HDMI vendor infoframe}(hjkdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMEhjhdhhubah}(h]h ]h"]h$]h&]uh1jhjchhhjchMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``struct hdmi_vendor_infoframe *frame`` HDMI infoframe **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMIhjdubji)}(hhh]jn)}(h7``struct hdmi_vendor_infoframe *frame`` HDMI infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hjdh]h#struct hdmi_vendor_infoframe *frame}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMFhjdubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMFhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjdhMFhjdubah}(h]h ]h"]h$]h&]uh1jhhjdubh)}(h**Description**h]j%)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMHhjdubh)}(hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.h]hiValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMHhjdubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMKhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,hdmi_vendor_infoframe_pack_only (C function)!c.hdmi_vendor_infoframe_pack_onlyhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hnssize_t hdmi_vendor_infoframe_pack_only (const struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h]j)}(hmssize_t hdmi_vendor_infoframe_pack_only(const struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj>ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@emodnameN classnameNjj)}j]j%)}jhdmi_vendor_infoframe_pack_onlysb!c.hdmi_vendor_infoframe_pack_onlyasbuh1hhj7ehhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMcubj)}(h h]h }(hj`ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ehhhj_ehMcubj)}(hhdmi_vendor_infoframe_pack_onlyh]j)}(hj\eh]hhdmi_vendor_infoframe_pack_only}(hjrehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjneubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7ehhhj_ehMcubj)}(hF(const struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h](j)}(h)const struct hdmi_vendor_infoframe *frameh](j)}(hjch]hconst}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]jZe!c.hdmi_vendor_infoframe_pack_onlyasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hframeh]hframe}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hj&fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(hj9h]h*}(hj4fhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubj)}(hbufferh]hbuffer}(hjAfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj]fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_fmodnameN classnameNjj)}j]jZe!c.hdmi_vendor_infoframe_pack_onlyasbuh1hhjVfubj)}(h h]h }(hj{fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVfubj)}(hsizeh]hsize}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhj7ehhhj_ehMcubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3ehhhj_ehMcubah}(h]j.eah ](jjeh"]h$]h&]jj)jhuh1jhj_ehMchj0ehhubj)}(hhh]h)}(h.write a HDMI vendor infoframe to binary bufferh]h.write a HDMI vendor infoframe to binary buffer}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMVhjfhhubah}(h]h ]h"]h$]h&]uh1jhj0ehhhj_ehMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``const struct hdmi_vendor_infoframe *frame`` HDMI infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMZhjfubji)}(hhh](jn)}(h=``const struct hdmi_vendor_infoframe *frame`` HDMI infoframe h](jt)}(h-``const struct hdmi_vendor_infoframe *frame``h]jz)}(hjfh]h)const struct hdmi_vendor_infoframe *frame}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMWhjfubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ghMWhj gubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhj ghMWhjfubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hj-gh]h void *buffer}(hj/ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+gubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMXhj'gubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjFghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBghMXhjCgubah}(h]h ]h"]h$]h&]uh1jhj'gubeh}(h]h ]h"]h$]h&]uh1jmhjBghMXhjfubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjfgh]h size_t size}(hjhghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdgubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMYhj`gubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ghMYhj|gubah}(h]h ]h"]h$]h&]uh1jhj`gubeh}(h]h ]h"]h$]h&]uh1jmhj{ghMYhjfubeh}(h]h ]h"]h$]h&]uh1jhhjfubh)}(h**Description**h]j%)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM[hjfubh)}(hPacks the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h'Packs the information contained in the }(hjghhhNhNubj%)}(h **frame**h]hframe}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubh structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM[hjfubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM`hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hdmi_vendor_infoframe_pack (C function)c.hdmi_vendor_infoframe_packhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hcssize_t hdmi_vendor_infoframe_pack (struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h]j)}(hbssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj hmodnameN classnameNjj)}j]j%)}jhdmi_vendor_infoframe_packsbc.hdmi_vendor_infoframe_packasbuh1hhjhhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hj,hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhj+hhMubj)}(hhdmi_vendor_infoframe_packh]j)}(hj(hh]hhdmi_vendor_infoframe_pack}(hj>hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhj+hhMubj)}(h@(struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h](j)}(h#struct hdmi_vendor_infoframe *frameh](j)}(hjh]hstruct}(hjYhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhubj)}(h h]h }(hjfhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhubh)}(hhh]j)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hjwhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjyhmodnameN classnameNjj)}j]j&hc.hdmi_vendor_infoframe_packasbuh1hhjUhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUhubj)}(hframeh]hframe}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQhubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(hbufferh]hbuffer}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQhubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j&hc.hdmi_vendor_infoframe_packasbuh1hhjiubj)}(h h]h }(hj,ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hsizeh]hsize}(hj:ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQhubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhhj+hhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhj+hhMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhj+hhMhjghhubj)}(hhh]h)}(h``struct hdmi_vendor_infoframe *frame`` HDMI Vendor infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hjih]h#struct hdmi_vendor_infoframe *frame}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjiubj)}(hhh]h)}(hHDMI Vendor infoframeh]hHDMI Vendor infoframe}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjihMhjiubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjih]h void *buffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjiubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjihMhjiubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjjh]h size_t size}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjjubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj0jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,jhMhj-jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhj,jhMhjiubeh}(h]h ]h"]h$]h&]uh1jhhjiubh)}(h**Description**h]j%)}(hjRjh]h Description}(hjTjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjiubh)}(hXvValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](hValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the }(hjhjhhhNhNubj%)}(h **frame**h]hframe}(hjpjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhjubh structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjiubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_drm_infoframe_init (C function)c.hdmi_drm_infoframe_inithNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h>int hdmi_drm_infoframe_init (struct hdmi_drm_infoframe *frame)h]j)}(h=int hdmi_drm_infoframe_init(struct hdmi_drm_infoframe *frame)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhMubj)}(hhdmi_drm_infoframe_inith]j)}(hhdmi_drm_infoframe_inith]hhdmi_drm_infoframe_init}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjjhMubj)}(h"(struct hdmi_drm_infoframe *frame)h]j)}(h struct hdmi_drm_infoframe *frameh](j)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j%)}jjjsbc.hdmi_drm_infoframe_initasbuh1hhjjubj)}(h h]h }(hj3khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjAkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hframeh]hframe}(hjNkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubah}(h]h ]h"]h$]h&]jjuh1jhjjhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjjhMhjjhhubj)}(hhh]h)}(h9initialize an HDMI Dynaminc Range and mastering infoframeh]h9initialize an HDMI Dynaminc Range and mastering infoframe}(hjxkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjukhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe **Description** Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjkubji)}(hhh]jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hjkh]h struct hdmi_drm_infoframe *frame}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjkubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhhjkubh)}(h**Description**h]j%)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjkubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_drm_infoframe_check (C function)c.hdmi_drm_infoframe_checkhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h?int hdmi_drm_infoframe_check (struct hdmi_drm_infoframe *frame)h]j)}(h>int hdmi_drm_infoframe_check(struct hdmi_drm_infoframe *frame)h](j)}(hinth]hint}(hj9lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5lhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjHlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5lhhhjGlhMubj)}(hhdmi_drm_infoframe_checkh]j)}(hhdmi_drm_infoframe_checkh]hhdmi_drm_infoframe_check}(hjZlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVlubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5lhhhjGlhMubj)}(h"(struct hdmi_drm_infoframe *frame)h]j)}(h struct hdmi_drm_infoframe *frameh](j)}(hjh]hstruct}(hjvlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrlubh)}(hhh]j)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]j%)}jj\lsbc.hdmi_drm_infoframe_checkasbuh1hhjrlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrlubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrlubj)}(hframeh]hframe}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnlubah}(h]h ]h"]h$]h&]jjuh1jhj5lhhhjGlhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1lhhhjGlhMubah}(h]j,lah ](jjeh"]h$]h&]jj)jhuh1jhjGlhMhj.lhhubj)}(hhh]h)}(hcheck a HDMI DRM infoframeh]hcheck a HDMI DRM infoframe}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjlhhubah}(h]h ]h"]h$]h&]uh1jhj.lhhhjGlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe **Description** Validates that the infoframe is consistent. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjmubji)}(hhh]jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hj:mh]h struct hdmi_drm_infoframe *frame}(hj``const struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h*``const struct hdmi_drm_infoframe *frame``h]jz)}(hjsoh]h&const struct hdmi_drm_infoframe *frame}(hjuohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqoubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjmoubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjmoubeh}(h]h ]h"]h$]h&]uh1jmhjohMhjjoubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjoh]h void *buffer}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjoubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjohMhjjoubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjoh]h size_t size}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjoubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjohMhjjoubeh}(h]h ]h"]h$]h&]uh1jhhjNoubh)}(h**Description**h]j%)}(hj ph]h Description}(hj"phhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjNoubh)}(hPacks the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h'Packs the information contained in the }(hj6phhhNhNubj%)}(h **frame**h]hframe}(hj>phhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6pubh structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hj6phhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjNoubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjWphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjNoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_drm_infoframe_pack (C function)c.hdmi_drm_infoframe_packhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h]ssize_t hdmi_drm_infoframe_pack (struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h]j)}(h\ssize_t hdmi_drm_infoframe_pack(struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jhdmi_drm_infoframe_packsbc.hdmi_drm_infoframe_packasbuh1hhjphhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM<ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphM<ubj)}(hhdmi_drm_infoframe_packh]j)}(hjph]hhdmi_drm_infoframe_pack}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjphM<ubj)}(h=(struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h](j)}(h struct hdmi_drm_infoframe *frameh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]jpc.hdmi_drm_infoframe_packasbuh1hhjpubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hj"qhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hframeh]hframe}(hj/qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjHqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDqubj)}(h h]h }(hjVqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDqubj9)}(hj9h]h*}(hjdqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDqubj)}(hbufferh]hbuffer}(hjqqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jpc.hdmi_drm_infoframe_packasbuh1hhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hsizeh]hsize}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhjphhhjphM<ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj~phhhjphM<ubah}(h]jypah ](jjeh"]h$]h&]jj)jhuh1jhjphM<hj{phhubj)}(hhh]h)}(h9check a HDMI DRM infoframe, and write it to binary bufferh]h9check a HDMI DRM infoframe, and write it to binary buffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM,hjqhhubah}(h]h ]h"]h$]h&]uh1jhj{phhhjphM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhj6@hNhNubj)}(hX{**Parameters** ``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM0hjqubji)}(hhh](jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hj$rh]h struct hdmi_drm_infoframe *frame}(hj&rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"rubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM.hjrubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hj=rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9rhM.hj:rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhj9rhM.hjrubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hj]rh]h void *buffer}(hj_rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[rubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM/hjWrubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjvrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrrhM/hjsrubah}(h]h ]h"]h$]h&]uh1jhjWrubeh}(h]h ]h"]h$]h&]uh1jmhjrrhM/hjrubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjrh]h size_t size}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM0hjrubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM0hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjrhM0hjrubeh}(h]h ]h"]h$]h&]uh1jhhjqubh)}(h**Description**h]j%)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM2hjqubh)}(hXvValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](hValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the }(hjrhhhNhNubj%)}(h **frame**h]hframe}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM2hjqubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM9hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_infoframe_pack_only (C function)c.hdmi_infoframe_pack_onlyhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(h_ssize_t hdmi_infoframe_pack_only (const union hdmi_infoframe *frame, void *buffer, size_t size)h]j)}(h^ssize_t hdmi_infoframe_pack_only(const union hdmi_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj:shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(const union hdmi_infoframe *frame, void *buffer, size_t size)h](j)}(h!const union hdmi_infoframe *frameh](j)}(hjch]hconst}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjBh]hunion}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]jVsc.hdmi_infoframe_pack_onlyasbuh1hhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hframeh]hframe}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hj"thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hj0thhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(hbufferh]hbuffer}(hj=thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjYthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[tmodnameN classnameNjj)}j]jVsc.hdmi_infoframe_pack_onlyasbuh1hhjRtubj)}(h h]h }(hjwthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRtubj)}(hsizeh]hsize}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhj3shhhj[shMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/shhhj[shMubah}(h]j*sah ](jjeh"]h$]h&]jj)jhuh1jhj[shMhj,shhubj)}(hhh]h)}(h'write a HDMI infoframe to binary bufferh]h'write a HDMI infoframe to binary buffer}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjthhubah}(h]h ]h"]h$]h&]uh1jhj,shhhj[shMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``const union hdmi_infoframe *frame`` HDMI infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjtubji)}(hhh](jn)}(h5``const union hdmi_infoframe *frame`` HDMI infoframe h](jt)}(h%``const union hdmi_infoframe *frame``h]jz)}(hjth]h!const union hdmi_infoframe *frame}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjtubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjuhMhjtubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hj)uh]h void *buffer}(hj+uhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'uubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj#uubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjBuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>uhMhj?uubah}(h]h ]h"]h$]h&]uh1jhj#uubeh}(h]h ]h"]h$]h&]uh1jmhj>uhMhjtubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjbuh]h size_t size}(hjduhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`uubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj\uubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj{uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwuhMhjxuubah}(h]h ]h"]h$]h&]uh1jhj\uubeh}(h]h ]h"]h$]h&]uh1jmhjwuhMhjtubeh}(h]h ]h"]h$]h&]uh1jhhjtubh)}(h**Description**h]j%)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjtubh)}(hPacks the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h'Packs the information contained in the }(hjuhhhNhNubj%)}(h **frame**h]hframe}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubh structure into a binary representation that can be written into the corresponding controller registers. Also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjtubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j hdmi_infoframe_pack (C function)c.hdmi_infoframe_packhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hTssize_t hdmi_infoframe_pack (union hdmi_infoframe *frame, void *buffer, size_t size)h]j)}(hSssize_t hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j%)}jhdmi_infoframe_packsbc.hdmi_infoframe_packasbuh1hhjuhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hj(vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhj'vhMubj)}(hhdmi_infoframe_packh]j)}(hj$vh]hhdmi_infoframe_pack}(hj:vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6vubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhj'vhMubj)}(h8(union hdmi_infoframe *frame, void *buffer, size_t size)h](j)}(hunion hdmi_infoframe *frameh](j)}(hjBh]hunion}(hjUvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQvubj)}(h h]h }(hjbvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQvubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hjsvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjuvmodnameN classnameNjj)}j]j"vc.hdmi_infoframe_packasbuh1hhjQvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQvubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjQvubj)}(hframeh]hframe}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMvubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(hbufferh]hbuffer}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMvubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj wmodnameN classnameNjj)}j]j"vc.hdmi_infoframe_packasbuh1hhjwubj)}(h h]h }(hj(whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hsizeh]hsize}(hj6whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMvubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhj'vhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhj'vhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhj'vhMhjuhhubj)}(hhh]h)}(h5check a HDMI infoframe, and write it to binary bufferh]h5check a HDMI infoframe, and write it to binary buffer}(hj`whhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj]whhubah}(h]h ]h"]h$]h&]uh1jhjuhhhj'vhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxwjjxwjjjuh1jhhhj6@hNhNubj)}(hXr**Parameters** ``union hdmi_infoframe *frame`` HDMI infoframe ``void *buffer`` destination buffer ``size_t size`` size of buffer **Description** Validates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns the number of bytes packed into the binary buffer or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|wubji)}(hhh](jn)}(h/``union hdmi_infoframe *frame`` HDMI infoframe h](jt)}(h``union hdmi_infoframe *frame``h]jz)}(hjwh]hunion hdmi_infoframe *frame}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjwubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhjwubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjwh]h void *buffer}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjwubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhjwubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjxh]h size_t size}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj xubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj,xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(xhMhj)xubah}(h]h ]h"]h$]h&]uh1jhj xubeh}(h]h ]h"]h$]h&]uh1jmhj(xhMhjwubeh}(h]h ]h"]h$]h&]uh1jhhj|wubh)}(h**Description**h]j%)}(hjNxh]h Description}(hjPxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|wubh)}(hXvValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the **frame** structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](hValidates that the infoframe is consistent and updates derived fields (eg. length) based on other fields, after which it packs the information contained in the }(hjdxhhhNhNubj%)}(h **frame**h]hframe}(hjlxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdxubh structure into a binary representation that can be written into the corresponding controller registers. This function also computes the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjdxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|wubh)}(h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.h]h^Returns the number of bytes packed into the binary buffer or a negative error code on failure.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|wubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jhdmi_infoframe_log (C function)c.hdmi_infoframe_loghNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hbvoid hdmi_infoframe_log (const char *level, struct device *dev, const union hdmi_infoframe *frame)h]j)}(havoid hdmi_infoframe_log(const char *level, struct device *dev, const union hdmi_infoframe *frame)h](j)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjxhMubj)}(hhdmi_infoframe_logh]j)}(hhdmi_infoframe_logh]hhdmi_infoframe_log}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjxhMubj)}(hJ(const char *level, struct device *dev, const union hdmi_infoframe *frame)h](j)}(hconst char *levelh](j)}(hjch]hconst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hcharh]hchar}(hj yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hj(yhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hlevelh]hlevel}(hj5yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hstruct device *devh](j)}(hjh]hstruct}(hjNyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJyubj)}(h h]h }(hj[yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJyubh)}(hhh]j)}(hdeviceh]hdevice}(hjlyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnymodnameN classnameNjj)}j]j%)}jjxsbc.hdmi_infoframe_logasbuh1hhjJyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJyubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJyubj)}(hdevh]hdev}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(h!const union hdmi_infoframe *frameh](j)}(hjch]hconst}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjBh]hunion}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]jyc.hdmi_infoframe_logasbuh1hhjyubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(hj9h]h*}(hj%zhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubj)}(hframeh]hframe}(hj2zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhjxhhhjxhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjxhMubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jhjxhMhjxhhubj)}(hhh]h)}(hlog info of HDMI infoframeh]hlog info of HDMI infoframe}(hj\zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjYzhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtzjjtzjjjuh1jhhhj6@hNhNubj)}(h**Parameters** ``const char *level`` logging level ``struct device *dev`` device ``const union hdmi_infoframe *frame`` HDMI infoframeh](h)}(h**Parameters**h]j%)}(hj~zh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|zubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjxzubji)}(hhh](jn)}(h$``const char *level`` logging level h](jt)}(h``const char *level``h]jz)}(hjzh]hconst char *level}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjzubj)}(hhh]h)}(h logging levelh]h logging level}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjzubjn)}(h``struct device *dev`` device h](jt)}(h``struct device *dev``h]jz)}(hjzh]hstruct device *dev}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjzubj)}(hhh]h)}(hdeviceh]hdevice}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjzubjn)}(h4``const union hdmi_infoframe *frame`` HDMI infoframeh](jt)}(h%``const union hdmi_infoframe *frame``h]jz)}(hj{h]h!const union hdmi_infoframe *frame}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj {ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj {ubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hj({hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj%{ubah}(h]h ]h"]h$]h&]uh1jhj {ubeh}(h]h ]h"]h$]h&]uh1jmhj${hMhjzubeh}(h]h ]h"]h$]h&]uh1jhhjxzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+hdmi_drm_infoframe_unpack_only (C function) c.hdmi_drm_infoframe_unpack_onlyhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hfint hdmi_drm_infoframe_unpack_only (struct hdmi_drm_infoframe *frame, const void *buffer, size_t size)h]j)}(heint hdmi_drm_infoframe_unpack_only(struct hdmi_drm_infoframe *frame, const void *buffer, size_t size)h](j)}(hinth]hint}(hji{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje{hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMubj)}(h h]h }(hjx{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje{hhhjw{hMubj)}(hhdmi_drm_infoframe_unpack_onlyh]j)}(hhdmi_drm_infoframe_unpack_onlyh]hhdmi_drm_infoframe_unpack_only}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhje{hhhjw{hMubj)}(hC(struct hdmi_drm_infoframe *frame, const void *buffer, size_t size)h](j)}(h struct hdmi_drm_infoframe *frameh](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j%)}jj{sb c.hdmi_drm_infoframe_unpack_onlyasbuh1hhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(hframeh]hframe}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubj)}(hconst void *bufferh](j)}(hjch]hconst}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hj%|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hvoidh]hvoid}(hj3|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjA|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(hj9h]h*}(hjO|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|ubj)}(hbufferh]hbuffer}(hj\|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjx|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjz|modnameN classnameNjj)}j]j{ c.hdmi_drm_infoframe_unpack_onlyasbuh1hhjq|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq|ubj)}(hsizeh]hsize}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubeh}(h]h ]h"]h$]h&]jjuh1jhje{hhhjw{hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhja{hhhjw{hMubah}(h]j\{ah ](jjeh"]h$]h&]jj)jhuh1jhjw{hMhj^{hhubj)}(hhh]h)}(hQunpack binary buffer of CTA-861-G DRM infoframe DataBytes to a HDMI DRM infoframeh]hQunpack binary buffer of CTA-861-G DRM infoframe DataBytes to a HDMI DRM infoframe}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhj^{hhhjw{hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe ``const void *buffer`` source buffer ``size_t size`` size of buffer **Description** Unpacks CTA-861-G DRM infoframe DataBytes contained in the binary **buffer** into a structured **frame** of the HDMI Dynamic Range and Mastering (DRM) infoframe. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|ubji)}(hhh](jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hj}h]h struct hdmi_drm_infoframe *frame}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj }ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj }ubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hj(}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$}hMhj%}ubah}(h]h ]h"]h$]h&]uh1jhj }ubeh}(h]h ]h"]h$]h&]uh1jmhj$}hMhj}ubjn)}(h%``const void *buffer`` source buffer h](jt)}(h``const void *buffer``h]jz)}(hjH}h]hconst void *buffer}(hjJ}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF}ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhjB}ubj)}(hhh]h)}(h source bufferh]h source buffer}(hja}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]}hMhj^}ubah}(h]h ]h"]h$]h&]uh1jhjB}ubeh}(h]h ]h"]h$]h&]uh1jmhj]}hMhj}ubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hj}h]h size_t size}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj{}ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj{}ubeh}(h]h ]h"]h$]h&]uh1jmhj}hMhj}ubeh}(h]h ]h"]h$]h&]uh1jhhj|ubh)}(h**Description**h]j%)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|ubh)}(hUnpacks CTA-861-G DRM infoframe DataBytes contained in the binary **buffer** into a structured **frame** of the HDMI Dynamic Range and Mastering (DRM) infoframe.h](hBUnpacks CTA-861-G DRM infoframe DataBytes contained in the binary }(hj}hhhNhNubj%)}(h **buffer**h]hbuffer}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubh into a structured }(hj}hhhNhNubj%)}(h **frame**h]hframe}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubh9 of the HDMI Dynamic Range and Mastering (DRM) infoframe.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|ubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"hdmi_infoframe_unpack (C function)c.hdmi_infoframe_unpackhNtauh1jxhj6@hhhNhNubj)}(hhh](j)}(hXint hdmi_infoframe_unpack (union hdmi_infoframe *frame, const void *buffer, size_t size)h]j)}(hWint hdmi_infoframe_unpack(union hdmi_infoframe *frame, const void *buffer, size_t size)h](j)}(hinth]hint}(hj4~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0~hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMaubj)}(h h]h }(hjC~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0~hhhjB~hMaubj)}(hhdmi_infoframe_unpackh]j)}(hhdmi_infoframe_unpackh]hhdmi_infoframe_unpack}(hjU~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0~hhhjB~hMaubj)}(h>(union hdmi_infoframe *frame, const void *buffer, size_t size)h](j)}(hunion hdmi_infoframe *frameh](j)}(hjBh]hunion}(hjq~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm~ubj)}(h h]h }(hj~~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm~ubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjW~sbc.hdmi_infoframe_unpackasbuh1hhjm~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm~ubj9)}(hj9h]h*}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjm~ubj)}(hframeh]hframe}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji~ubj)}(hconst void *bufferh](j)}(hjch]hconst}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~ubj)}(hbufferh]hbuffer}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji~ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j~c.hdmi_infoframe_unpackasbuh1hhj<ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hsizeh]hsize}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji~ubeh}(h]h ]h"]h$]h&]jjuh1jhj0~hhhjB~hMaubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj,~hhhjB~hMaubah}(h]j'~ah ](jjeh"]h$]h&]jj)jhuh1jhjB~hMahj)~hhubj)}(hhh]h)}(h(unpack binary buffer to a HDMI infoframeh]h(unpack binary buffer to a HDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMUhjhhubah}(h]h ]h"]h$]h&]uh1jhj)~hhhjB~hMaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj6@hNhNubj)}(hX**Parameters** ``union hdmi_infoframe *frame`` HDMI infoframe ``const void *buffer`` source buffer ``size_t size`` size of buffer **Description** Unpacks the information contained in binary buffer **buffer** into a structured **frame** of a HDMI infoframe. Also verifies the checksum as required by section 5.3.5 of the HDMI 1.4 specification. Returns 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMYhjubji)}(hhh](jn)}(h/``union hdmi_infoframe *frame`` HDMI infoframe h](jt)}(h``union hdmi_infoframe *frame``h]jz)}(hjh]hunion hdmi_infoframe *frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMVhjubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMVhjubjn)}(h%``const void *buffer`` source buffer h](jt)}(h``const void *buffer``h]jz)}(hjh]hconst void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMWhj ubj)}(hhh]h)}(h source bufferh]h source buffer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMWhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMWhjubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjLh]h size_t size}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMXhjFubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMXhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMXhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMZhjubh)}(hUnpacks the information contained in binary buffer **buffer** into a structured **frame** of a HDMI infoframe. Also verifies the checksum as required by section 5.3.5 of the HDMI 1.4 specification.h](h3Unpacks the information contained in binary buffer }(hjhhhNhNubj%)}(h **buffer**h]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh into a structured }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhl of a HDMI infoframe. Also verifies the checksum as required by section 5.3.5 of the HDMI 1.4 specification.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chMZhjubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjЀhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:395: ./drivers/video/hdmi.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6@hhhNhNubeh}(h] hdmi-infoframes-helper-referenceah ]h"] hdmi infoframes helper referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hRectangle Utilities Referenceh]hRectangle Utilities Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(h\Utility functions to help manage rectangular areas for clipping, scaling, etc. calculations.h]h\Utility functions to help manage rectangular areas for clipping, scaling, etc. calculations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:401: ./include/drm/drm_rect.hhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect (C struct) c.drm_recthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdrm_recth]j)}(hstruct drm_recth](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj4hKubj)}(hdrm_recth]j)}(hj!h]hdrm_rect}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj4hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj4hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj4hKhjhhubj)}(hhh]h)}(htwo dimensional rectangleh]htwo dimensional rectangle}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK%hjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_rect { int x1, y1, x2, y2; }; **Members** ``x1`` horizontal starting coordinate (inclusive) ``y1`` vertical starting coordinate (inclusive) ``x2`` horizontal ending coordinate (exclusive) ``y2`` vertical ending coordinate (exclusive)h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK)hjubj@)}(h,struct drm_rect { int x1, y1, x2, y2; };h]h,struct drm_rect { int x1, y1, x2, y2; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK+hjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK/hjubji)}(hhh](jn)}(h2``x1`` horizontal starting coordinate (inclusive) h](jt)}(h``x1``h]jz)}(hjցh]hx1}(hj؁hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjԁubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK'hjЁubj)}(hhh]h)}(h*horizontal starting coordinate (inclusive)h]h*horizontal starting coordinate (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjЁubeh}(h]h ]h"]h$]h&]uh1jmhjhK'hj́ubjn)}(h0``y1`` vertical starting coordinate (inclusive) h](jt)}(h``y1``h]jz)}(hjh]hy1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK)hj ubj)}(hhh]h)}(h(vertical starting coordinate (inclusive)h]h(vertical starting coordinate (inclusive)}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hK)hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hK)hj́ubjn)}(h0``x2`` horizontal ending coordinate (exclusive) h](jt)}(h``x2``h]jz)}(hjHh]hx2}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK(hjBubj)}(hhh]h)}(h(horizontal ending coordinate (exclusive)h]h(horizontal ending coordinate (exclusive)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hK(hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hK(hj́ubjn)}(h-``y2`` vertical ending coordinate (exclusive)h](jt)}(h``y2``h]jz)}(hjh]hy2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK)hj{ubj)}(hhh]h)}(h&vertical ending coordinate (exclusive)h]h&vertical ending coordinate (exclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK*hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhjhK)hj́ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hjĂh]h Description}(hjƂhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj‚ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK-hjhhubh)}(hNote that this must match the layout of struct drm_mode_rect or the damage helpers like drm_atomic_helper_damage_iter_init() break.h]hNote that this must match the layout of struct drm_mode_rect or the damage helpers like drm_atomic_helper_damage_iter_init() break.}(hjڂhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK+hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_RECT_INIT (C macro)c.DRM_RECT_INIThNtauh1jxhjhhhNhNubj)}(hhh](j)}(h DRM_RECT_INITh]j)}(h DRM_RECT_INITh]j)}(h DRM_RECT_INITh]j)}(hjh]h DRM_RECT_INIT}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKhjhhubjb=)}(h$initialize a rectangle from x/y/w/h h]h)}(h#initialize a rectangle from x/y/w/hh]h#initialize a rectangle from x/y/w/h}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK3hjNubah}(h]h ]h"]h$]h&]uh1ja=hj`hK3hjhhubj)}(h**Parameters** ``x`` x coordinate ``y`` y coordinate ``w`` width ``h`` height **Return** A new rectangle of the specified size.h](h)}(h**Parameters**h]j%)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK7hjgubji)}(hhh](jn)}(h``x`` x coordinate h](jt)}(h``x``h]jz)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK4hjubj)}(hhh]h)}(h x coordinateh]h x coordinate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK4hjubjn)}(h``y`` y coordinate h](jt)}(h``y``h]jz)}(hjŃh]hy}(hjǃhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjÃubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK5hjubj)}(hhh]h)}(h y coordinateh]h y coordinate}(hjރhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڃhK5hjۃubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjڃhK5hjubjn)}(h ``w`` width h](jt)}(h``w``h]jz)}(hjh]hw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK6hjubj)}(hhh]h)}(hwidthh]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK6hjubjn)}(h ``h`` height h](jt)}(h``h``h]jz)}(hj7h]hh}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK7hj1ubj)}(hhh]h)}(hheighth]hheight}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK7hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhK7hjubeh}(h]h ]h"]h$]h&]uh1jhhjgubh)}(h **Return**h]j%)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK9hjgubh)}(h&A new rectangle of the specified size.h]h&A new rectangle of the specified size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK9hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_RECT_FMT (C macro)c.DRM_RECT_FMThNtauh1jxhjhhhNhNubj)}(hhh](j)}(h DRM_RECT_FMTh]j)}(h DRM_RECT_FMTh]j)}(h DRM_RECT_FMTh]j)}(hjh]h DRM_RECT_FMT}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKEubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj΄hKEubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj΄hKEhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj΄hKEubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_FMT``h]jz)}(hjh]h DRM_RECT_FMT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKGhjhhubjb=)}(h8printf string for :c:type:`struct drm_rect ` h]h)}(h6printf string for :c:type:`struct drm_rect `h](hprintf string for }(hjhhhNhNubh)}(h$:c:type:`struct drm_rect `h]jz)}(hjh]hstruct drm_rect}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_rectuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKChjubeh}(h]h ]h"]h$]h&]uh1hhj.hKChjubah}(h]h ]h"]h$]h&]uh1ja=hj.hKChjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_RECT_ARG (C macro)c.DRM_RECT_ARGhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h DRM_RECT_ARGh]j)}(h DRM_RECT_ARGh]j)}(h DRM_RECT_ARGh]j)}(hjNh]h DRM_RECT_ARG}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKJubah}(h]h ]h"]h$]h&]jjjuh1jjjhjLhhhjkhKJubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjkhKJhjIhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjIhhhjkhKJubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_ARG (r)``h]jz)}(hjh]hDRM_RECT_ARG (r)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKLhjhhubjb=)}(h:printf arguments for :c:type:`struct drm_rect ` h]h)}(h9printf arguments for :c:type:`struct drm_rect `h](hprintf arguments for }(hjhhhNhNubh)}(h$:c:type:`struct drm_rect `h]jz)}(hjh]hstruct drm_rect}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_rectuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKGhjubeh}(h]h ]h"]h$]h&]uh1hhj˅hKGhjubah}(h]h ]h"]h$]h&]uh1ja=hj˅hKGhjhhubj)}(h(**Parameters** ``r`` rectangle structh](h)}(h**Parameters**h]j%)}(hjޅh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj܅ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKKhj؅ubji)}(hhh]jn)}(h``r`` rectangle structh](jt)}(h``r``h]jz)}(hjh]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKMhjubj)}(hhh]h)}(hrectangle structh]hrectangle struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKMhjubah}(h]h ]h"]h$]h&]uh1jhhj؅ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_RECT_FP_FMT (C macro)c.DRM_RECT_FP_FMThNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDRM_RECT_FP_FMTh]j)}(hDRM_RECT_FP_FMTh]j)}(hDRM_RECT_FP_FMTh]j)}(hjQh]hDRM_RECT_FP_FMT}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKOubah}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjnhKOubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jhjnhKOhjLhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjLhhhjnhKOubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_FP_FMT``h]jz)}(hjh]hDRM_RECT_FP_FMT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKQhjhhubjb=)}(hMprintf string for :c:type:`struct drm_rect ` in 16.16 fixed point h]h)}(hKprintf string for :c:type:`struct drm_rect ` in 16.16 fixed pointh](hprintf string for }(hjhhhNhNubh)}(h$:c:type:`struct drm_rect `h]jz)}(hjh]hstruct drm_rect}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_rectuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKMhjubh in 16.16 fixed point}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjΆhKMhjubah}(h]h ]h"]h$]h&]uh1ja=hjΆhKMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_RECT_FP_ARG (C macro)c.DRM_RECT_FP_ARGhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDRM_RECT_FP_ARGh]j)}(hDRM_RECT_FP_ARGh]j)}(hDRM_RECT_FP_ARGh]j)}(hjh]hDRM_RECT_FP_ARG}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKWubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKWubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKWhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKWubeh}(h]h ](jmacroeh"]h$]h&]jjjj(jj(jjjuh1jhhhjhNhNubh)}(h``DRM_RECT_FP_ARG (r)``h]jz)}(hj.h]hDRM_RECT_FP_ARG (r)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKYhjhhubjb=)}(hOprintf arguments for :c:type:`struct drm_rect ` in 16.16 fixed point h]h)}(hNprintf arguments for :c:type:`struct drm_rect ` in 16.16 fixed pointh](hprintf arguments for }(hjHhhhNhNubh)}(h$:c:type:`struct drm_rect `h]jz)}(hjRh]hstruct drm_rect}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_rectuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKQhjHubh in 16.16 fixed point}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohKQhjDubah}(h]h ]h"]h$]h&]uh1ja=hjohKQhjhhubj)}(h**Parameters** ``r`` rectangle struct **Description** This is useful for e.g. printing plane source rectangles, which are in 16.16 fixed point.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKUhjubji)}(hhh]jn)}(h``r`` rectangle struct h](jt)}(h``r``h]jz)}(hjh]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKRhjubj)}(hhh]h)}(hrectangle structh]hrectangle struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjއubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKThjubh)}(hYThis is useful for e.g. printing plane source rectangles, which are in 16.16 fixed point.h]hYThis is useful for e.g. printing plane source rectangles, which are in 16.16 fixed point.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKThjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_init (C function)c.drm_rect_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hLvoid drm_rect_init (struct drm_rect *r, int x, int y, int width, int height)h]j)}(hKvoid drm_rect_init(struct drm_rect *r, int x, int y, int width, int height)h](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKeubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hKeubj)}(h drm_rect_inith]j)}(h drm_rect_inith]h drm_rect_init}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj3hKeubj)}(h9(struct drm_rect *r, int x, int y, int width, int height)h](j)}(hstruct drm_rect *rh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjHsbc.drm_rect_initasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^ubj)}(hrh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(hint xh](j)}(hinth]hint}(hjԈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЈubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЈubj)}(hxh]hx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЈubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(hint yh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hyh]hy}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h int widthh](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hwidthh]hwidth}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h int heighth](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hheighth]hheight}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj3hKeubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj3hKeubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj3hKehjhhubj)}(hhh]h)}(h%initialize the rectangle from x/y/w/hh]h%initialize the rectangle from x/y/w/h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK^hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hKeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjщjjщjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_rect *r`` rectangle ``int x`` x coordinate ``int y`` y coordinate ``int width`` width ``int height`` heighth](h)}(h**Parameters**h]j%)}(hjۉh]h Parameters}(hj݉hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjىubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKbhjՉubji)}(hhh](jn)}(h!``struct drm_rect *r`` rectangle h](jt)}(h``struct drm_rect *r``h]jz)}(hjh]hstruct drm_rect *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK_hjubj)}(hhh]h)}(h rectangleh]h rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK_hjubjn)}(h``int x`` x coordinate h](jt)}(h ``int x``h]jz)}(hj3h]hint x}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhK`hj-ubj)}(hhh]h)}(h x coordinateh]h x coordinate}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhK`hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhK`hjubjn)}(h``int y`` y coordinate h](jt)}(h ``int y``h]jz)}(hjlh]hint y}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKahjfubj)}(hhh]h)}(h y coordinateh]h y coordinate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhKahjubjn)}(h``int width`` width h](jt)}(h ``int width``h]jz)}(hjh]h int width}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKbhjubj)}(hhh]h)}(hwidthh]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKbhjubjn)}(h``int height`` heighth](jt)}(h``int height``h]jz)}(hjފh]h int height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj܊ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKdhj؊ubj)}(hhh]h)}(hheighth]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKchjubah}(h]h ]h"]h$]h&]uh1jhj؊ubeh}(h]h ]h"]h$]h&]uh1jmhjhKdhjubeh}(h]h ]h"]h$]h&]uh1jhhjՉubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_rect_adjust_size (C function)c.drm_rect_adjust_sizehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h>void drm_rect_adjust_size (struct drm_rect *r, int dw, int dh)h]j)}(h=void drm_rect_adjust_size(struct drm_rect *r, int dw, int dh)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKzubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjFhKzubj)}(hdrm_rect_adjust_sizeh]j)}(hdrm_rect_adjust_sizeh]hdrm_rect_adjust_size}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhjFhKzubj)}(h$(struct drm_rect *r, int dw, int dh)h](j)}(hstruct drm_rect *rh](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj[sbc.drm_rect_adjust_sizeasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(hjh]hr}(hj΋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(hint dwh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdwh]hdw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(hint dhh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdhh]hdh}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhjFhKzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhjFhKzubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhjFhKzhj-hhubj)}(hhh]h)}(h adjust the size of the rectangleh]h adjust the size of the rectangle}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKohj^hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjFhKzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_rect *r`` rectangle to be adjusted ``int dw`` horizontal adjustment ``int dh`` vertical adjustment **Description** Change the size of rectangle **r** by **dw** in the horizontal direction, and by **dh** in the vertical direction, while keeping the center of **r** stationary. Positive **dw** and **dh** increase the size, negative values decrease it.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKshj}ubji)}(hhh](jn)}(h0``struct drm_rect *r`` rectangle to be adjusted h](jt)}(h``struct drm_rect *r``h]jz)}(hjh]hstruct drm_rect *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKphjubj)}(hhh]h)}(hrectangle to be adjustedh]hrectangle to be adjusted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKphjubjn)}(h!``int dw`` horizontal adjustment h](jt)}(h ``int dw``h]jz)}(hjیh]hint dw}(hj݌hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٌubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKqhjՌubj)}(hhh]h)}(hhorizontal adjustmenth]hhorizontal adjustment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjՌubeh}(h]h ]h"]h$]h&]uh1jmhjhKqhjubjn)}(h``int dh`` vertical adjustment h](jt)}(h ``int dh``h]jz)}(hjh]hint dh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKrhjubj)}(hhh]h)}(hvertical adjustmenth]hvertical adjustment}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKrhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj)hKrhjubeh}(h]h ]h"]h$]h&]uh1jhhj}ubh)}(h**Description**h]j%)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKthj}ubh)}(hChange the size of rectangle **r** by **dw** in the horizontal direction, and by **dh** in the vertical direction, while keeping the center of **r** stationary.h](hChange the size of rectangle }(hjehhhNhNubj%)}(h**r**h]hr}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh by }(hjehhhNhNubj%)}(h**dw**h]hdw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh% in the horizontal direction, and by }(hjehhhNhNubj%)}(h**dh**h]hdh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh8 in the vertical direction, while keeping the center of }(hjehhhNhNubj%)}(h**r**h]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh stationary.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKthj}ubh)}(hJPositive **dw** and **dh** increase the size, negative values decrease it.h](h Positive }(hjhhhNhNubj%)}(h**dw**h]hdw}(hjčhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**dh**h]hdh}(hj֍hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh0 increase the size, negative values decrease it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:404: ./include/drm/drm_rect.hhKxhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_translate (C function)c.drm_rect_translatehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK%hj6ubji)}(hhh](jn)}(h(``struct drm_rect *r1`` first rectangle h](jt)}(h``struct drm_rect *r1``h]jz)}(hj[h]hstruct drm_rect *r1}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK"hjUubj)}(hhh]h)}(hfirst rectangleh]hfirst rectangle}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK"hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphK"hjRubjn)}(h/``const struct drm_rect *r2`` second rectangle h](jt)}(h``const struct drm_rect *r2``h]jz)}(hjh]hconst struct drm_rect *r2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK#hjubj)}(hhh]h)}(hsecond rectangleh]hsecond rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK#hjRubeh}(h]h ]h"]h$]h&]uh1jhhj6ubh)}(h**Description**h]j%)}(hjϣh]h Description}(hjѣhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjͣubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK%hj6ubh)}(hmCalculate the intersection of rectangles **r1** and **r2**. **r1** will be overwritten with the intersection.h](h)Calculate the intersection of rectangles }(hjhhhNhNubj%)}(h**r1**h]hr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**r2**h]hr2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh. }(hjhhhNhNubj%)}(h**r1**h]hr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh+ will be overwritten with the intersection.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK%hj6ubh)}(h **Return**h]j%)}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK(hj6ubh)}(hW``true`` if rectangle **r1** is still visible after the operation, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh if rectangle }(hjBhhhNhNubj%)}(h**r1**h]hr1}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh' is still visible after the operation, }(hjBhhhNhNubjz)}(h ``false``h]hfalse}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubh otherwise.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK(hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_rect_clip_scaled (C function)c.drm_rect_clip_scaledhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcbool drm_rect_clip_scaled (struct drm_rect *src, struct drm_rect *dst, const struct drm_rect *clip)h]j)}(hbbool drm_rect_clip_scaled(struct drm_rect *src, struct drm_rect *dst, const struct drm_rect *clip)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chK[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK[ubj)}(hdrm_rect_clip_scaledh]j)}(hdrm_rect_clip_scaledh]hdrm_rect_clip_scaled}(hjähhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK[ubj)}(hI(struct drm_rect *src, struct drm_rect *dst, const struct drm_rect *clip)h](j)}(hstruct drm_rect *srch](j)}(hjh]hstruct}(hjߤhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۤubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjŤsbc.drm_rect_clip_scaledasbuh1hhjۤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۤubj9)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjۤubj)}(hsrch]hsrc}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۤubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjפubj)}(hstruct drm_rect *dsth](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.drm_rect_clip_scaledasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjפubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjΥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjܥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_rect_clip_scaledasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjפubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK[ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK[ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK[hjhhubj)}(hhh]h)}(hperform a scaled clip operationh]hperform a scaled clip operation}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKNhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_rect *src`` source window rectangle ``struct drm_rect *dst`` destination window rectangle ``const struct drm_rect *clip`` clip rectangle **Description** Clip rectangle **dst** by rectangle **clip**. Clip rectangle **src** by the corresponding amounts, retaining the vertical and horizontal scaling factors from **src** to **dst**. **Return** ``true`` if rectangle **dst** is still visible after being clipped, ``false`` otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKRhjyubji)}(hhh](jn)}(h1``struct drm_rect *src`` source window rectangle h](jt)}(h``struct drm_rect *src``h]jz)}(hjh]hstruct drm_rect *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKOhjubj)}(hhh]h)}(hsource window rectangleh]hsource window rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKOhjubjn)}(h6``struct drm_rect *dst`` destination window rectangle h](jt)}(h``struct drm_rect *dst``h]jz)}(hjצh]hstruct drm_rect *dst}(hj٦hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjզubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKPhjѦubj)}(hhh]h)}(hdestination window rectangleh]hdestination window rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKPhjubah}(h]h ]h"]h$]h&]uh1jhjѦubeh}(h]h ]h"]h$]h&]uh1jmhjhKPhjubjn)}(h/``const struct drm_rect *clip`` clip rectangle h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjh]hconst struct drm_rect *clip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKQhj ubj)}(hhh]h)}(hclip rectangleh]hclip rectangle}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hKQhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj%hKQhjubeh}(h]h ]h"]h$]h&]uh1jhhjyubh)}(h**Description**h]j%)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKShjyubh)}(hClip rectangle **dst** by rectangle **clip**. Clip rectangle **src** by the corresponding amounts, retaining the vertical and horizontal scaling factors from **src** to **dst**.h](hClip rectangle }(hjahhhNhNubj%)}(h**dst**h]hdst}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh by rectangle }(hjahhhNhNubj%)}(h**clip**h]hclip}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh. Clip rectangle }(hjahhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubhZ by the corresponding amounts, retaining the vertical and horizontal scaling factors from }(hjahhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh to }(hjahhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKShjyubh)}(h **Return**h]j%)}(hj̧h]hReturn}(hjΧhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjʧubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKWhjyubh)}(hX``true`` if rectangle **dst** is still visible after being clipped, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if rectangle }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh' is still visible after being clipped, }(hjhhhNhNubjz)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKWhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_rect_calc_hscale (C function)c.drm_rect_calc_hscalehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hqint drm_rect_calc_hscale (const struct drm_rect *src, const struct drm_rect *dst, int min_hscale, int max_hscale)h]j)}(hpint drm_rect_calc_hscale(const struct drm_rect *src, const struct drm_rect *dst, int min_hscale, int max_hscale)h](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjQhKubj)}(hdrm_rect_calc_hscaleh]j)}(hdrm_rect_calc_hscaleh]hdrm_rect_calc_hscale}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjQhKubj)}(hX(const struct drm_rect *src, const struct drm_rect *dst, int min_hscale, int max_hscale)h](j)}(hconst struct drm_rect *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjfsbc.drm_rect_calc_hscaleasbuh1hhj|ubj)}(h h]h }(hj٨hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|ubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hconst struct drm_rect *dsth](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]jըc.drm_rect_calc_hscaleasbuh1hhj ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hint min_hscaleh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h min_hscaleh]h min_hscale}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hint max_hscaleh](j)}(hinth]hint}(hjͩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɩubj)}(h h]h }(hj۩hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɩubj)}(h max_hscaleh]h max_hscale}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɩubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhjQhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhjQhKubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhjQhKhj8hhubj)}(hhh]h)}(h'calculate the horizontal scaling factorh]h'calculate the horizontal scaling factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjhNhNubj)}(hXN**Parameters** ``const struct drm_rect *src`` source window rectangle ``const struct drm_rect *dst`` destination window rectangle ``int min_hscale`` minimum allowed horizontal scaling factor ``int max_hscale`` maximum allowed horizontal scaling factor **Description** Calculate the horizontal scaling factor as (**src** width) / (**dst** width). If the scale is below 1 << 16, round down. If the scale is above 1 << 16, round up. This will calculate the scale with the most pessimistic limit calculation. **Return** The horizontal scaling factor, or errno of out of limits.h](h)}(h**Parameters**h]j%)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj/ubji)}(hhh](jn)}(h7``const struct drm_rect *src`` source window rectangle h](jt)}(h``const struct drm_rect *src``h]jz)}(hjTh]hconst struct drm_rect *src}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjNubj)}(hhh]h)}(hsource window rectangleh]hsource window rectangle}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihKhjKubjn)}(h<``const struct drm_rect *dst`` destination window rectangle h](jt)}(h``const struct drm_rect *dst``h]jz)}(hjh]hconst struct drm_rect *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hdestination window rectangleh]hdestination window rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjKubjn)}(h=``int min_hscale`` minimum allowed horizontal scaling factor h](jt)}(h``int min_hscale``h]jz)}(hjƪh]hint min_hscale}(hjȪhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjĪubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h)minimum allowed horizontal scaling factorh]h)minimum allowed horizontal scaling factor}(hjߪhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj۪hKhjܪubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj۪hKhjKubjn)}(h=``int max_hscale`` maximum allowed horizontal scaling factor h](jt)}(h``int max_hscale``h]jz)}(hjh]hint max_hscale}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h)maximum allowed horizontal scaling factorh]h)maximum allowed horizontal scaling factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjKubeh}(h]h ]h"]h$]h&]uh1jhhj/ubh)}(h**Description**h]j%)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj/ubh)}(hMCalculate the horizontal scaling factor as (**src** width) / (**dst** width).h](h,Calculate the horizontal scaling factor as (}(hjPhhhNhNubj%)}(h**src**h]hsrc}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubh width) / (}(hjPhhhNhNubj%)}(h**dst**h]hdst}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubh width).}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj/ubh)}(hIf the scale is below 1 << 16, round down. If the scale is above 1 << 16, round up. This will calculate the scale with the most pessimistic limit calculation.h]hIf the scale is below 1 << 16, round down. If the scale is above 1 << 16, round up. This will calculate the scale with the most pessimistic limit calculation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj/ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj/ubh)}(h9The horizontal scaling factor, or errno of out of limits.h]h9The horizontal scaling factor, or errno of out of limits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_rect_calc_vscale (C function)c.drm_rect_calc_vscalehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hqint drm_rect_calc_vscale (const struct drm_rect *src, const struct drm_rect *dst, int min_vscale, int max_vscale)h]j)}(hpint drm_rect_calc_vscale(const struct drm_rect *src, const struct drm_rect *dst, int min_vscale, int max_vscale)h](j)}(hinth]hint}(hj٫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjիhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjիhhhjhKubj)}(hdrm_rect_calc_vscaleh]j)}(hdrm_rect_calc_vscaleh]hdrm_rect_calc_vscale}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjիhhhjhKubj)}(hX(const struct drm_rect *src, const struct drm_rect *dst, int min_vscale, int max_vscale)h](j)}(hconst struct drm_rect *srch](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_calc_vscaleasbuh1hhjubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *dsth](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjˬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjܬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٬ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjެmodnameN classnameNjj)}j]jkc.drm_rect_calc_vscaleasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint min_vscaleh](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h min_vscaleh]h min_vscale}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint max_vscaleh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h max_vscaleh]h max_vscale}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjիhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjѫhhhjhKubah}(h]j̫ah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjΫhhubj)}(hhh]h)}(h%calculate the vertical scaling factorh]h%calculate the vertical scaling factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjΫhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXH**Parameters** ``const struct drm_rect *src`` source window rectangle ``const struct drm_rect *dst`` destination window rectangle ``int min_vscale`` minimum allowed vertical scaling factor ``int max_vscale`` maximum allowed vertical scaling factor **Description** Calculate the vertical scaling factor as (**src** height) / (**dst** height). If the scale is below 1 << 16, round down. If the scale is above 1 << 16, round up. This will calculate the scale with the most pessimistic limit calculation. **Return** The vertical scaling factor, or errno of out of limits.h](h)}(h**Parameters**h]j%)}(hj˭h]h Parameters}(hjͭhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjɭubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjŭubji)}(hhh](jn)}(h7``const struct drm_rect *src`` source window rectangle h](jt)}(h``const struct drm_rect *src``h]jz)}(hjh]hconst struct drm_rect *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hsource window rectangleh]hsource window rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h<``const struct drm_rect *dst`` destination window rectangle h](jt)}(h``const struct drm_rect *dst``h]jz)}(hj#h]hconst struct drm_rect *dst}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hdestination window rectangleh]hdestination window rectangle}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hKhjubjn)}(h;``int min_vscale`` minimum allowed vertical scaling factor h](jt)}(h``int min_vscale``h]jz)}(hj\h]hint min_vscale}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjVubj)}(hhh]h)}(h'minimum allowed vertical scaling factorh]h'minimum allowed vertical scaling factor}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhKhjubjn)}(h;``int max_vscale`` maximum allowed vertical scaling factor h](jt)}(h``int max_vscale``h]jz)}(hjh]hint max_vscale}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h'maximum allowed vertical scaling factorh]h'maximum allowed vertical scaling factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjŭubh)}(h**Description**h]j%)}(hjЮh]h Description}(hjҮhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjήubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjŭubh)}(hMCalculate the vertical scaling factor as (**src** height) / (**dst** height).h](h*Calculate the vertical scaling factor as (}(hjhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh height) / (}(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh height).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjŭubh)}(hIf the scale is below 1 << 16, round down. If the scale is above 1 << 16, round up. This will calculate the scale with the most pessimistic limit calculation.h]hIf the scale is below 1 << 16, round down. If the scale is above 1 << 16, round up. This will calculate the scale with the most pessimistic limit calculation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjŭubh)}(h **Return**h]j%)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjŭubh)}(h7The vertical scaling factor, or errno of out of limits.h]h7The vertical scaling factor, or errno of out of limits.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjŭubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_rect_debug_print (C function)c.drm_rect_debug_printhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hZvoid drm_rect_debug_print (const char *prefix, const struct drm_rect *r, bool fixed_point)h]j)}(hYvoid drm_rect_debug_print(const char *prefix, const struct drm_rect *r, bool fixed_point)h](j)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj}hKubj)}(hdrm_rect_debug_printh]j)}(hdrm_rect_debug_printh]hdrm_rect_debug_print}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhj}hKubj)}(h@(const char *prefix, const struct drm_rect *r, bool fixed_point)h](j)}(hconst char *prefixh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjǯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjկhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hprefixh]hprefix}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *rh](j)}(hjch]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_debug_printasbuh1hhjubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hr}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hbool fixed_pointh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h fixed_pointh]h fixed_point}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjkhhhj}hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhj}hKubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj}hKhjdhhubj)}(hhh]h)}(hprint the rectangle informationh]hprint the rectangle information}(hjڰhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjװhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const char *prefix`` prefix string ``const struct drm_rect *r`` rectangle to print ``bool fixed_point`` rectangle is in 16.16 fixed point formath](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubji)}(hhh](jn)}(h%``const char *prefix`` prefix string h](jt)}(h``const char *prefix``h]jz)}(hjh]hconst char *prefix}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h prefix stringh]h prefix string}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj0hKhjubjn)}(h0``const struct drm_rect *r`` rectangle to print h](jt)}(h``const struct drm_rect *r``h]jz)}(hjTh]hconst struct drm_rect *r}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjNubj)}(hhh]h)}(hrectangle to printh]hrectangle to print}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihKhjubjn)}(h=``bool fixed_point`` rectangle is in 16.16 fixed point formath](jt)}(h``bool fixed_point``h]jz)}(hjh]hbool fixed_point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h(rectangle is in 16.16 fixed point formath]h(rectangle is in 16.16 fixed point format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_rotate (C function)c.drm_rect_rotatehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hWvoid drm_rect_rotate (struct drm_rect *r, int width, int height, unsigned int rotation)h]j)}(hVvoid drm_rect_rotate(struct drm_rect *r, int width, int height, unsigned int rotation)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_rect_rotateh]j)}(hdrm_rect_rotateh]hdrm_rect_rotate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hB(struct drm_rect *r, int width, int height, unsigned int rotation)h](j)}(hstruct drm_rect *rh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j%)}jj sbc.drm_rect_rotateasbuh1hhj ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hjh]hr}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int widthh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hwidthh]hwidth}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int heighth](j)}(hinth]hint}(hjʲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƲubj)}(h h]h }(hjزhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƲubj)}(hheighth]hheight}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƲubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int rotationh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrotationh]hrotation}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj߱hhhjhKubah}(h]jڱah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjܱhhubj)}(hhh]h)}(hRotate the rectangleh]hRotate the rectangle}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj^hhubah}(h]h ]h"]h$]h&]uh1jhjܱhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_rect *r`` rectangle to be rotated ``int width`` Width of the coordinate space ``int height`` Height of the coordinate space ``unsigned int rotation`` Transformation to be applied **Description** Apply **rotation** to the coordinates of rectangle **r**. **width** and **height** combined with **rotation** define the location of the new origin. **width** correcsponds to the horizontal and **height** to the vertical axis of the untransformed coordinate space.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj}ubji)}(hhh](jn)}(h/``struct drm_rect *r`` rectangle to be rotated h](jt)}(h``struct drm_rect *r``h]jz)}(hjh]hstruct drm_rect *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hrectangle to be rotatedh]hrectangle to be rotated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h,``int width`` Width of the coordinate space h](jt)}(h ``int width``h]jz)}(hj۳h]h int width}(hjݳhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjٳubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjճubj)}(hhh]h)}(hWidth of the coordinate spaceh]hWidth of the coordinate space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjճubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h.``int height`` Height of the coordinate space h](jt)}(h``int height``h]jz)}(hjh]h int height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hHeight of the coordinate spaceh]hHeight of the coordinate space}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj)hKhjubjn)}(h7``unsigned int rotation`` Transformation to be applied h](jt)}(h``unsigned int rotation``h]jz)}(hjMh]hunsigned int rotation}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhjGubj)}(hhh]h)}(hTransformation to be appliedh]hTransformation to be applied}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjbhKhjubeh}(h]h ]h"]h$]h&]uh1jhhj}ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj}ubh)}(h9Apply **rotation** to the coordinates of rectangle **r**.h](hApply }(hjhhhNhNubj%)}(h **rotation**h]hrotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh! to the coordinates of rectangle }(hjhhhNhNubj%)}(h**r**h]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj}ubh)}(hZ**width** and **height** combined with **rotation** define the location of the new origin.h](j%)}(h **width**h]hwidth}(hjմhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjѴubh and }(hjѴhhhNhNubj%)}(h **height**h]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjѴubh combined with }(hjѴhhhNhNubj%)}(h **rotation**h]hrotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjѴubh' define the location of the new origin.}(hjѴhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj}ubh)}(hs**width** correcsponds to the horizontal and **height** to the vertical axis of the untransformed coordinate space.h](j%)}(h **width**h]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh$ correcsponds to the horizontal and }(hjhhhNhNubj%)}(h **height**h]hheight}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh< to the vertical axis of the untransformed coordinate space.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chKhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_rect_rotate_inv (C function)c.drm_rect_rotate_invhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h[void drm_rect_rotate_inv (struct drm_rect *r, int width, int height, unsigned int rotation)h]j)}(hZvoid drm_rect_rotate_inv(struct drm_rect *r, int width, int height, unsigned int rotation)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chMFubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjohMFubj)}(hdrm_rect_rotate_invh]j)}(hdrm_rect_rotate_invh]hdrm_rect_rotate_inv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhjohMFubj)}(hB(struct drm_rect *r, int width, int height, unsigned int rotation)h](j)}(hstruct drm_rect *rh](j)}(hjh]hstruct}(hjhhhNhLNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_rotate_invasbuh1hhjubj)}(h h]h }(hjܵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int widthh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hwidthh]hwidth}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int heighth](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hheighth]hheight}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int rotationh](j)}(hunsignedh]hunsigned}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hrotationh]hrotation}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhjohMFubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjohMFubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjohMFhjVhhubj)}(hhh]h)}(hInverse rotate the rectangleh]hInverse rotate the rectangle}(hj۶hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM/hjضhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_rect *r`` rectangle to be rotated ``int width`` Width of the coordinate space ``int height`` Height of the coordinate space ``unsigned int rotation`` Transformation whose inverse is to be applied **Description** Apply the inverse of **rotation** to the coordinates of rectangle **r**. **width** and **height** combined with **rotation** define the location of the new origin. **width** correcsponds to the horizontal and **height** to the vertical axis of the original untransformed coordinate space, so that you never have to flip them when doing a rotatation and its inverse. That is, if you do :: drm_rect_rotate(&r, width, height, rotation); drm_rect_rotate_inv(&r, width, height, rotation); you will always get back the original rectangle.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM3hjubji)}(hhh](jn)}(h/``struct drm_rect *r`` rectangle to be rotated h](jt)}(h``struct drm_rect *r``h]jz)}(hjh]hstruct drm_rect *r}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM0hjubj)}(hhh]h)}(hrectangle to be rotatedh]hrectangle to be rotated}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM0hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hM0hjubjn)}(h,``int width`` Width of the coordinate space h](jt)}(h ``int width``h]jz)}(hjUh]h int width}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM1hjOubj)}(hhh]h)}(hWidth of the coordinate spaceh]hWidth of the coordinate space}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM1hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhM1hjubjn)}(h.``int height`` Height of the coordinate space h](jt)}(h``int height``h]jz)}(hjh]h int height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM2hjubj)}(hhh]h)}(hHeight of the coordinate spaceh]hHeight of the coordinate space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM2hjubjn)}(hH``unsigned int rotation`` Transformation whose inverse is to be applied h](jt)}(h``unsigned int rotation``h]jz)}(hjǷh]hunsigned int rotation}(hjɷhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjŷubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM3hjubj)}(hhh]h)}(h-Transformation whose inverse is to be appliedh]h-Transformation whose inverse is to be applied}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܷhM3hjݷubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjܷhM3hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM5hjubh)}(hHApply the inverse of **rotation** to the coordinates of rectangle **r**.h](hApply the inverse of }(hjhhhNhNubj%)}(h **rotation**h]hrotation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh! to the coordinates of rectangle }(hjhhhNhNubj%)}(h**r**h]hr}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM5hjubh)}(hZ**width** and **height** combined with **rotation** define the location of the new origin.h](j%)}(h **width**h]hwidth}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubh and }(hjKhhhNhNubj%)}(h **height**h]hheight}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubh combined with }(hjKhhhNhNubj%)}(h **rotation**h]hrotation}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubh' define the location of the new origin.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM8hjubh)}(h**width** correcsponds to the horizontal and **height** to the vertical axis of the original untransformed coordinate space, so that you never have to flip them when doing a rotatation and its inverse. That is, if you do ::h](j%)}(h **width**h]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh$ correcsponds to the horizontal and }(hjhhhNhNubj%)}(h **height**h]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh to the vertical axis of the original untransformed coordinate space, so that you never have to flip them when doing a rotatation and its inverse. That is, if you do}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chM;hjubj@)}(h_drm_rect_rotate(&r, width, height, rotation); drm_rect_rotate_inv(&r, width, height, rotation);h]h_drm_rect_rotate(&r, width, height, rotation); drm_rect_rotate_inv(&r, width, height, rotation);}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chMAhjubh)}(h0you will always get back the original rectangle.h]h0you will always get back the original rectangle.}(hjʸhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./drivers/gpu/drm/drm_rect.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]rectangle-utilities-referenceah ]h"]rectangle utilities referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hFlip-work Helper Referenceh]hFlip-work Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hX Utility to queue up work to run from work-queue context after flip/vblank. Typically this can be used to defer unref of framebuffer's, cursor bo's, etc until after vblank. The APIs are all thread-safe. Moreover, drm_flip_work_commit() can be called in atomic context.h]hXUtility to queue up work to run from work-queue context after flip/vblank. Typically this can be used to defer unref of framebuffer’s, cursor bo’s, etc until after vblank. The APIs are all thread-safe. Moreover, drm_flip_work_commit() can be called in atomic context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:413: ./include/drm/drm_flip_work.hhK hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_flip_work (C struct)c.drm_flip_workhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_flip_workh]j)}(hstruct drm_flip_workh](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:416: ./include/drm/drm_flip_work.hhKubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hKubj)}(h drm_flip_workh]j)}(hjh]h drm_flip_work}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hKhjhhubj)}(hhh]h)}(hflip work queueh]hflip work queue}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:416: ./include/drm/drm_flip_work.hhK6hj`hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hKubeh}(h]h ](jstructeh"]h$]h&]jjjj{jj{jjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_flip_work { const char *name; drm_flip_func_t func; struct work_struct worker; struct list_head queued; struct list_head commited; spinlock_t lock; }; **Members** ``name`` debug name ``func`` callback fxn called for each committed item ``worker`` worker which calls **func** ``queued`` queued tasks ``commited`` commited tasks ``lock`` lock to access queued and commited listsh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:416: ./include/drm/drm_flip_work.hhK:hjubj@)}(hstruct drm_flip_work { const char *name; drm_flip_func_t func; struct work_struct worker; struct list_head queued; struct list_head commited; spinlock_t lock; };h]hstruct drm_flip_work { const char *name; drm_flip_func_t func; struct work_struct worker; struct list_head queued; struct list_head commited; spinlock_t lock; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:416: ./include/drm/drm_flip_work.hhK`, which encapsulates the above limitations into a nice interface. **Return** Zero on success, error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKwhjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj'h]hstruct drm_device *dev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKthj!ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hKthj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj<hKthjubjn)}(h.``struct drm_crtc *crtc`` CRTC object to init h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj`h]hstruct drm_crtc *crtc}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKuhjZubj)}(hhh]h)}(hCRTC object to inith]hCRTC object to init}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKuhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhKuhjubjn)}(hB``const struct drm_crtc_funcs *funcs`` callbacks for the new CRTC h](jt)}(h&``const struct drm_crtc_funcs *funcs``h]jz)}(hjh]h"const struct drm_crtc_funcs *funcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKvhjubj)}(hhh]h)}(hcallbacks for the new CRTCh]hcallbacks for the new CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKvhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKxhjubh)}(hZInitialize a CRTC object with a default helper-provided primary plane and no cursor plane.h]hZInitialize a CRTC object with a default helper-provided primary plane and no cursor plane.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKxhjubh)}(hdNote that we make some assumptions about hardware limitations that may not be true for all hardware:h]hdNote that we make some assumptions about hardware limitations that may not be true for all hardware:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chK{hjubjQH)}(hhh](h)}(h%Primary plane cannot be repositioned.h]h)}(hj h]h%Primary plane cannot be repositioned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chK~hj ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hPrimary plane cannot be scaled.h]h)}(hj%h]hPrimary plane cannot be scaled.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhj#ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h)Primary plane must cover the entire CRTC.h]h)}(hj=h]h)Primary plane must cover the entire CRTC.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhj;ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h&Subpixel positioning is not supported.h]h)}(hjUh]h&Subpixel positioning is not supported.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjSubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h`, which encapsulates the above limitations into a nice interface.h](hThis is purely a backwards compatibility helper for old drivers. Drivers should instead implement their own primary plane. Atomic drivers must do so. Drivers with the above hardware restriction can look into using }(hjhhhNhNubh)}(hB:c:type:`struct drm_simple_display_pipe `h]jz)}(hjh]hstruct drm_simple_display_pipe}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipeuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubhA, which encapsulates the above limitations into a nice interface.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_mode_config_helper_suspend (C function) c.drm_mode_config_helper_suspendhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h;int drm_mode_config_helper_suspend (struct drm_device *dev)h]j)}(h:int drm_mode_config_helper_suspend(struct drm_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_mode_config_helper_suspendh]j)}(hdrm_mode_config_helper_suspendh]hdrm_mode_config_helper_suspend}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j%)}jj&sb c.drm_mode_config_helper_suspendasbuh1hhj<ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hModeset suspend helperh]hModeset suspend helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device **Description** This helper function takes care of suspending the modeset side. It disables output polling if initialized, suspends fbdev if used and finally calls drm_atomic_helper_suspend(). If suspending fails, fbdev and polling is re-enabled. See also: drm_kms_helper_poll_disable() and drm_client_dev_suspend(). **Return** Zero on success, negative error code on error.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(hThis helper function takes care of suspending the modeset side. It disables output polling if initialized, suspends fbdev if used and finally calls drm_atomic_helper_suspend(). If suspending fails, fbdev and polling is re-enabled.h]hThis helper function takes care of suspending the modeset side. It disables output polling if initialized, suspends fbdev if used and finally calls drm_atomic_helper_suspend(). If suspending fails, fbdev and polling is re-enabled.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(hESee also: drm_kms_helper_poll_disable() and drm_client_dev_suspend().h]hESee also: drm_kms_helper_poll_disable() and drm_client_dev_suspend().}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(h **Return**h]j%)}(hjuh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(h.Zero on success, negative error code on error.h]h.Zero on success, negative error code on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_mode_config_helper_resume (C function)c.drm_mode_config_helper_resumehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:int drm_mode_config_helper_resume (struct drm_device *dev)h]j)}(h9int drm_mode_config_helper_resume(struct drm_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_mode_config_helper_resumeh]j)}(hdrm_mode_config_helper_resumeh]hdrm_mode_config_helper_resume}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_mode_config_helper_resumeasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hModeset resume helperh]hModeset resume helper}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjwhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXm**Parameters** ``struct drm_device *dev`` DRM device **Description** This helper function takes care of resuming the modeset side. It calls drm_atomic_helper_resume(), resumes fbdev if used and enables output polling if initiaized. See also: drm_client_dev_resume() and drm_kms_helper_poll_enable(). **Return** Zero on success, negative error code on error.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(hThis helper function takes care of resuming the modeset side. It calls drm_atomic_helper_resume(), resumes fbdev if used and enables output polling if initiaized.h]hThis helper function takes care of resuming the modeset side. It calls drm_atomic_helper_resume(), resumes fbdev if used and enables output polling if initiaized.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(hCSee also: drm_client_dev_resume() and drm_kms_helper_poll_enable().h]hCSee also: drm_client_dev_resume() and drm_kms_helper_poll_enable().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(h **Return**h]j%)}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubh)}(h.Zero on success, negative error code on error.h]h.Zero on success, negative error code on error.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:428: ./drivers/gpu/drm/drm_modeset_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]auxiliary-modeset-helpersah ]h"]auxiliary modeset helpersah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h OF/DT Helpersh]h OF/DT Helpers}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hhhhhMubh)}(hOA set of helper functions to aid DRM drivers in parsing standard DT properties.h]hOA set of helper functions to aid DRM drivers in parsing standard DT properties.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_of.chKhj`hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_of_crtc_port_mask (C function)c.drm_of_crtc_port_maskhNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hQuint32_t drm_of_crtc_port_mask (struct drm_device *dev, struct device_node *port)h]j)}(hPuint32_t drm_of_crtc_port_mask(struct drm_device *dev, struct device_node *port)h](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_of_crtc_port_masksbc.drm_of_crtc_port_maskasbuh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chK ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK ubj)}(hdrm_of_crtc_port_maskh]j)}(hjh]hdrm_of_crtc_port_mask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK ubj)}(h2(struct drm_device *dev, struct device_node *port)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_of_crtc_port_maskasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device_node *porth](j)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(h device_nodeh]h device_node}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]jc.drm_of_crtc_port_maskasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK hjhhubj)}(hhh]h)}(h2find the mask of a registered CRTC by port OF nodeh]h2find the mask of a registered CRTC by port OF node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj`hNhNubj)}(h**Parameters** ``struct drm_device *dev`` DRM device ``struct device_node *port`` port OF node **Description** Given a port OF node, return the possible mask of the corresponding CRTC within a device's list of CRTCs. Returns zero if not found.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hKhjubjn)}(h*``struct device_node *port`` port OF node h](jt)}(h``struct device_node *port``h]jz)}(hjVh]hstruct device_node *port}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjPubj)}(hhh]h)}(h port OF nodeh]h port OF node}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjkhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubh)}(hGiven a port OF node, return the possible mask of the corresponding CRTC within a device's list of CRTCs. Returns zero if not found.h]hGiven a port OF node, return the possible mask of the corresponding CRTC within a device’s list of CRTCs. Returns zero if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_of_find_possible_crtcs (C function)c.drm_of_find_possible_crtcshNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hVuint32_t drm_of_find_possible_crtcs (struct drm_device *dev, struct device_node *port)h]j)}(hUuint32_t drm_of_find_possible_crtcs(struct drm_device *dev, struct device_node *port)h](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_of_find_possible_crtcssbc.drm_of_find_possible_crtcsasbuh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chK``struct component_match **matchptr`` component match pointer h](jt)}(h%``struct component_match **matchptr``h]jz)}(hj>h]h!struct component_match **matchptr}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKUhj8ubj)}(hhh]h)}(hcomponent match pointerh]hcomponent match pointer}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKUhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShKUhjubjn)}(hY``int (*compare)(struct device *, void *)`` compare function used for matching component h](jt)}(h+``int (*compare)(struct device *, void *)``h]jz)}(hjwh]h'int (*compare)(struct device *, void *)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKVhjqubj)}(hhh]h)}(h,compare function used for matching componenth]h,compare function used for matching component}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhKVhjubjn)}(h$``struct device_node *node`` of_nodeh](jt)}(h``struct device_node *node``h]jz)}(hjh]hstruct device_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKXhjubj)}(hhh]h)}(hof_nodeh]hof_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKXhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_of_component_probe (C function)c.drm_of_component_probehNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hint drm_of_component_probe (struct device *dev, int (*compare_of)(struct device *, void *), const struct component_master_ops *m_ops)h]j)}(hint drm_of_component_probe(struct device *dev, int (*compare_of)(struct device*, void*), const struct component_master_ops *m_ops)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKqubj)}(hdrm_of_component_probeh]j)}(hdrm_of_component_probeh]hdrm_of_component_probe}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKqubj)}(hh(struct device *dev, int (*compare_of)(struct device*, void*), const struct component_master_ops *m_ops)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]j)}(hdeviceh]hdevice}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j%)}jj-sbc.drm_of_component_probeasbuh1hhjCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjCubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(h(int (*compare_of)(struct device*, void*)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjhnh]h(}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h compare_ofh]h compare_of}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hjnh]h)}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hjhnh]h(}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]jc.drm_of_component_probeasbuh1hhjubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hjnh]h,}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hjnh]h)}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(h(const struct component_master_ops *m_opsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hcomponent_master_opsh]hcomponent_master_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_of_component_probeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hm_opsh]hm_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKqhjhhubj)}(hhh]h)}(h3Generic probe function for a component based masterh]h3Generic probe function for a component based master}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKehjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhj`hNhNubj)}(hXS**Parameters** ``struct device *dev`` master device containing the OF node ``int (*compare_of)(struct device *, void *)`` compare function used for matching components ``const struct component_master_ops *m_ops`` component master ops to be used **Description** Parse the platform device OF node and bind all the components associated with the master. Interface ports are added before the encoders in order to satisfy their .bind requirements See Documentation/devicetree/bindings/graph.txt for the bindings. Returns zero if successful, or one of the standard error codes if it fails.h](h)}(h**Parameters**h]j%)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKihjfubji)}(hhh](jn)}(h<``struct device *dev`` master device containing the OF node h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKfhjubj)}(hhh]h)}(h$master device containing the OF nodeh]h$master device containing the OF node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKfhjubjn)}(h]``int (*compare_of)(struct device *, void *)`` compare function used for matching components h](jt)}(h.``int (*compare_of)(struct device *, void *)``h]jz)}(hjh]h*int (*compare_of)(struct device *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKghjubj)}(hhh]h)}(h-compare function used for matching componentsh]h-compare function used for matching components}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKghjubjn)}(hM``const struct component_master_ops *m_ops`` component master ops to be used h](jt)}(h,``const struct component_master_ops *m_ops``h]jz)}(hjh]h(const struct component_master_ops *m_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhhjubj)}(hhh]h)}(hcomponent master ops to be usedh]hcomponent master ops to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhhjubeh}(h]h ]h"]h$]h&]uh1jhhjfubh)}(h**Description**h]j%)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKjhjfubh)}(hParse the platform device OF node and bind all the components associated with the master. Interface ports are added before the encoders in order to satisfy their .bind requirements See Documentation/devicetree/bindings/graph.txt for the bindings.h]hParse the platform device OF node and bind all the components associated with the master. Interface ports are added before the encoders in order to satisfy their .bind requirements See Documentation/devicetree/bindings/graph.txt for the bindings.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKjhjfubh)}(hKReturns zero if successful, or one of the standard error codes if it fails.h]hKReturns zero if successful, or one of the standard error codes if it fails.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKohjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_of_find_panel_or_bridge (C function)c.drm_of_find_panel_or_bridgehNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hint drm_of_find_panel_or_bridge (const struct device_node *np, int port, int endpoint, struct drm_panel **panel, struct drm_bridge **bridge)h]j)}(hint drm_of_find_panel_or_bridge(const struct device_node *np, int port, int endpoint, struct drm_panel **panel, struct drm_bridge **bridge)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_of_find_panel_or_bridgeh]j)}(hdrm_of_find_panel_or_bridgeh]hdrm_of_find_panel_or_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hl(const struct device_node *np, int port, int endpoint, struct drm_panel **panel, struct drm_bridge **bridge)h](j)}(hconst struct device_node *nph](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_of_find_panel_or_bridgeasbuh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnph]hnp}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint porth](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hporth]hport}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int endpointh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hendpointh]hendpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_panel **panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_of_find_panel_or_bridgeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge **bridgeh](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]jc.drm_of_find_panel_or_bridgeasbuh1hhj9ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h'return connected panel or bridge deviceh]h'return connected panel or bridge device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj`hNhNubj)}(hX**Parameters** ``const struct device_node *np`` device tree node containing encoder output ports ``int port`` port in the device tree node ``int endpoint`` endpoint in the device tree node ``struct drm_panel **panel`` pointer to hold returned drm_panel ``struct drm_bridge **bridge`` pointer to hold returned drm_bridge **Description** Given a DT node's port and endpoint number, find the connected node and return either the associated struct drm_panel or drm_bridge device. Either **panel** or **bridge** must not be NULL. This function is deprecated and should not be used in new drivers. Use devm_drm_of_get_bridge() instead. Returns zero if successful, or one of the standard error codes if it fails.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubji)}(hhh](jn)}(hR``const struct device_node *np`` device tree node containing encoder output ports h](jt)}(h ``const struct device_node *np``h]jz)}(hj h]hconst struct device_node *np}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubj)}(hhh]h)}(h0device tree node containing encoder output portsh]h0device tree node containing encoder output ports}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hKhjubjn)}(h*``int port`` port in the device tree node h](jt)}(h ``int port``h]jz)}(hjEh]hint port}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhj?ubj)}(hhh]h)}(hport in the device tree nodeh]hport in the device tree node}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhKhjubjn)}(h2``int endpoint`` endpoint in the device tree node h](jt)}(h``int endpoint``h]jz)}(hj~h]h int endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjxubj)}(hhh]h)}(h endpoint in the device tree nodeh]h endpoint in the device tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h@``struct drm_panel **panel`` pointer to hold returned drm_panel h](jt)}(h``struct drm_panel **panel``h]jz)}(hjh]hstruct drm_panel **panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubj)}(hhh]h)}(h"pointer to hold returned drm_panelh]h"pointer to hold returned drm_panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hC``struct drm_bridge **bridge`` pointer to hold returned drm_bridge h](jt)}(h``struct drm_bridge **bridge``h]jz)}(hjh]hstruct drm_bridge **bridge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubj)}(hhh]h)}(h#pointer to hold returned drm_bridgeh]h#pointer to hold returned drm_bridge}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubh)}(hGiven a DT node's port and endpoint number, find the connected node and return either the associated struct drm_panel or drm_bridge device. Either **panel** or **bridge** must not be NULL.h](hGiven a DT node’s port and endpoint number, find the connected node and return either the associated struct drm_panel or drm_bridge device. Either }(hjAhhhNhNubj%)}(h **panel**h]hpanel}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubh or }(hjAhhhNhNubj%)}(h **bridge**h]hbridge}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubh must not be NULL.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubh)}(hhThis function is deprecated and should not be used in new drivers. Use devm_drm_of_get_bridge() instead.h]hhThis function is deprecated and should not be used in new drivers. Use devm_drm_of_get_bridge() instead.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubh)}(hKReturns zero if successful, or one of the standard error codes if it fails.h]hKReturns zero if successful, or one of the standard error codes if it fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_of_lvds_get_dual_link_pixel_order (C function)'c.drm_of_lvds_get_dual_link_pixel_orderhNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hlint drm_of_lvds_get_dual_link_pixel_order (const struct device_node *port1, const struct device_node *port2)h]j)}(hkint drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1, const struct device_node *port2)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h%drm_of_lvds_get_dual_link_pixel_orderh]j)}(h%drm_of_lvds_get_dual_link_pixel_orderh]h%drm_of_lvds_get_dual_link_pixel_order}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hB(const struct device_node *port1, const struct device_node *port2)h](j)}(hconst struct device_node *port1h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j%)}jjsb'c.drm_of_lvds_get_dual_link_pixel_orderasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjVhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hport1h]hport1}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct device_node *port2h](j)}(hjch]hconst}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jD'c.drm_of_lvds_get_dual_link_pixel_orderasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hport2h]hport2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h%Get LVDS dual-link source pixel orderh]h%Get LVDS dual-link source pixel order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhj`hNhNubj)}(hXJ**Parameters** ``const struct device_node *port1`` First DT port node of the Dual-link LVDS source ``const struct device_node *port2`` Second DT port node of the Dual-link LVDS source **Description** An LVDS dual-link connection is made of two links, with even pixels transitting on one link, and odd pixels on the other link. This function returns, for two ports of an LVDS dual-link source, which port shall transmit the even and odd pixels, based on the requirements of the connected sink. The pixel order is determined from the dual-lvds-even-pixels and dual-lvds-odd-pixels properties in the sink's DT port nodes. If those properties are not present, or if their usage is not valid, this function returns -EINVAL. If either port is not connected, this function returns -EPIPE. **port1** and **port2** are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS encoders carry the even and odd pixels. **Return** * DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - **port1** carries even pixels and **port2** carries odd pixels * DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - **port1** carries odd pixels and **port2** carries even pixels * -EINVAL - **port1** and **port2** are not connected to a dual-link LVDS sink, or the sink configuration is invalid * -EPIPE - when **port1** or **port2** are not connectedh](h)}(h**Parameters**h]j%)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMlhj4ubji)}(hhh](jn)}(hT``const struct device_node *port1`` First DT port node of the Dual-link LVDS source h](jt)}(h#``const struct device_node *port1``h]jz)}(hjYh]hconst struct device_node *port1}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMihjSubj)}(hhh]h)}(h/First DT port node of the Dual-link LVDS sourceh]h/First DT port node of the Dual-link LVDS source}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMihjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhMihjPubjn)}(hU``const struct device_node *port2`` Second DT port node of the Dual-link LVDS source h](jt)}(h#``const struct device_node *port2``h]jz)}(hjh]hconst struct device_node *port2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMjhjubj)}(hhh]h)}(h0Second DT port node of the Dual-link LVDS sourceh]h0Second DT port node of the Dual-link LVDS source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMjhjPubeh}(h]h ]h"]h$]h&]uh1jhhj4ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMlhj4ubh)}(hX$An LVDS dual-link connection is made of two links, with even pixels transitting on one link, and odd pixels on the other link. This function returns, for two ports of an LVDS dual-link source, which port shall transmit the even and odd pixels, based on the requirements of the connected sink.h]hX$An LVDS dual-link connection is made of two links, with even pixels transitting on one link, and odd pixels on the other link. This function returns, for two ports of an LVDS dual-link source, which port shall transmit the even and odd pixels, based on the requirements of the connected sink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMlhj4ubh)}(hThe pixel order is determined from the dual-lvds-even-pixels and dual-lvds-odd-pixels properties in the sink's DT port nodes. If those properties are not present, or if their usage is not valid, this function returns -EINVAL.h]hThe pixel order is determined from the dual-lvds-even-pixels and dual-lvds-odd-pixels properties in the sink’s DT port nodes. If those properties are not present, or if their usage is not valid, this function returns -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMqhj4ubh)}(h>If either port is not connected, this function returns -EPIPE.h]h>If either port is not connected, this function returns -EPIPE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMvhj4ubh)}(h**port1** and **port2** are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS encoders carry the even and odd pixels.h](j%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **port2**h]hport2}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS encoders carry the even and odd pixels.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMxhj4ubh)}(h **Return**h]j%)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chM|hj4ubh)}(hhh](h)}(hcDRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - **port1** carries even pixels and **port2** carries odd pixelsh]h)}(hcDRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - **port1** carries even pixels and **port2** carries odd pixelsh](h%DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - }(hj^hhhNhNubj%)}(h **port1**h]hport1}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubh carries even pixels and }(hj^hhhNhNubj%)}(h **port2**h]hport2}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubh carries odd pixels}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chM|hjZubah}(h]h ]h"]h$]h&]uh1hhjWubh)}(hcDRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - **port1** carries odd pixels and **port2** carries even pixelsh]h)}(hcDRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - **port1** carries odd pixels and **port2** carries even pixelsh](h%DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - }(hjhhhNhNubj%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh carries odd pixels and }(hjhhhNhNubj%)}(h **port2**h]hport2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh carries even pixels}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chM~hjubah}(h]h ]h"]h$]h&]uh1hhjWubh)}(hr-EINVAL - **port1** and **port2** are not connected to a dual-link LVDS sink, or the sink configuration is invalidh]h)}(hr-EINVAL - **port1** and **port2** are not connected to a dual-link LVDS sink, or the sink configuration is invalidh](h -EINVAL - }(hjhhhNhNubj%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **port2**h]hport2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhQ are not connected to a dual-link LVDS sink, or the sink configuration is invalid}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjWubh)}(h6-EPIPE - when **port1** or **port2** are not connectedh]h)}(hjh](h-EPIPE - when }(hjhhhNhNubj%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh or }(hjhhhNhNubj%)}(h **port2**h]hport2}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh are not connected}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjWubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhM|hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j7drm_of_lvds_get_dual_link_pixel_order_sink (C function),c.drm_of_lvds_get_dual_link_pixel_order_sinkhNtauh1jxhj`hhhNhNubj)}(hhh](j)}(heint drm_of_lvds_get_dual_link_pixel_order_sink (struct device_node *port1, struct device_node *port2)h]j)}(hdint drm_of_lvds_get_dual_link_pixel_order_sink(struct device_node *port1, struct device_node *port2)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhMubj)}(h*drm_of_lvds_get_dual_link_pixel_order_sinkh]j)}(h*drm_of_lvds_get_dual_link_pixel_order_sinkh]h*drm_of_lvds_get_dual_link_pixel_order_sink}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjhMubj)}(h6(struct device_node *port1, struct device_node *port2)h](j)}(hstruct device_node *port1h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb,c.drm_of_lvds_get_dual_link_pixel_order_sinkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hport1h]hport1}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device_node *port2h](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j,c.drm_of_lvds_get_dual_link_pixel_order_sinkasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hport2h]hport2}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjohhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjhMubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhhubj)}(hhh]h)}(h#Get LVDS dual-link sink pixel orderh]h#Get LVDS dual-link sink pixel order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj`hNhNubj)}(hX**Parameters** ``struct device_node *port1`` First DT port node of the Dual-link LVDS sink ``struct device_node *port2`` Second DT port node of the Dual-link LVDS sink **Description** An LVDS dual-link connection is made of two links, with even pixels transitting on one link, and odd pixels on the other link. This function returns, for two ports of an LVDS dual-link sink, which port shall transmit the even and odd pixels, based on the requirements of the sink. The pixel order is determined from the dual-lvds-even-pixels and dual-lvds-odd-pixels properties in the sink's DT port nodes. If those properties are not present, or if their usage is not valid, this function returns -EINVAL. If either port is not connected, this function returns -EPIPE. **port1** and **port2** are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS decoders receive the even and odd pixels. **Return** * DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - **port1** receives even pixels and **port2** receives odd pixels * DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - **port1** receives odd pixels and **port2** receives even pixels * -EINVAL - **port1** or **port2** are NULL * -EPIPE - when **port1** or **port2** are not connectedh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubji)}(hhh](jn)}(hL``struct device_node *port1`` First DT port node of the Dual-link LVDS sink h](jt)}(h``struct device_node *port1``h]jz)}(hjh]hstruct device_node *port1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h-First DT port node of the Dual-link LVDS sinkh]h-First DT port node of the Dual-link LVDS sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hM``struct device_node *port2`` Second DT port node of the Dual-link LVDS sink h](jt)}(h``struct device_node *port2``h]jz)}(hjh]hstruct device_node *port2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h.Second DT port node of the Dual-link LVDS sinkh]h.Second DT port node of the Dual-link LVDS sink}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(hXAn LVDS dual-link connection is made of two links, with even pixels transitting on one link, and odd pixels on the other link. This function returns, for two ports of an LVDS dual-link sink, which port shall transmit the even and odd pixels, based on the requirements of the sink.h]hXAn LVDS dual-link connection is made of two links, with even pixels transitting on one link, and odd pixels on the other link. This function returns, for two ports of an LVDS dual-link sink, which port shall transmit the even and odd pixels, based on the requirements of the sink.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(hThe pixel order is determined from the dual-lvds-even-pixels and dual-lvds-odd-pixels properties in the sink's DT port nodes. If those properties are not present, or if their usage is not valid, this function returns -EINVAL.h]hThe pixel order is determined from the dual-lvds-even-pixels and dual-lvds-odd-pixels properties in the sink’s DT port nodes. If those properties are not present, or if their usage is not valid, this function returns -EINVAL.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(h>If either port is not connected, this function returns -EPIPE.h]h>If either port is not connected, this function returns -EPIPE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(h**port1** and **port2** are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS decoders receive the even and odd pixels.h](j%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **port2**h]hport2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS decoders receive the even and odd pixels.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(hhh](h)}(heDRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - **port1** receives even pixels and **port2** receives odd pixelsh]h)}(heDRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - **port1** receives even pixels and **port2** receives odd pixelsh](h%DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS - }(hjhhhNhNubj%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh receives even pixels and }(hjhhhNhNubj%)}(h **port2**h]hport2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh receives odd pixels}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(heDRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - **port1** receives odd pixels and **port2** receives even pixelsh]h)}(heDRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - **port1** receives odd pixels and **port2** receives even pixelsh](h%DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS - }(hj&hhhNhNubj%)}(h **port1**h]hport1}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubh receives odd pixels and }(hj&hhhNhNubj%)}(h **port2**h]hport2}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubh receives even pixels}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj"ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h)-EINVAL - **port1** or **port2** are NULLh]h)}(hjah](h -EINVAL - }(hjchhhNhNubj%)}(h **port1**h]hport1}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubh or }(hjchhhNhNubj%)}(h **port2**h]hport2}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubh are NULL}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj_ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h6-EPIPE - when **port1** or **port2** are not connectedh]h)}(hjh](h-EPIPE - when }(hjhhhNhNubj%)}(h **port1**h]hport1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh or }(hjhhhNhNubj%)}(h **port2**h]hport2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh are not connected}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_of_lvds_get_data_mapping (C function)c.drm_of_lvds_get_data_mappinghNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hAint drm_of_lvds_get_data_mapping (const struct device_node *port)h]j)}(h@int drm_of_lvds_get_data_mapping(const struct device_node *port)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hdrm_of_lvds_get_data_mappingh]j)}(hdrm_of_lvds_get_data_mappingh]hdrm_of_lvds_get_data_mapping}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h (const struct device_node *port)h]j)}(hconst struct device_node *porth](j)}(hjch]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h device_nodeh]h device_node}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j%)}jj sbc.drm_of_lvds_get_data_mappingasbuh1hhj6ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(hGet LVDS data mappingh]hGet LVDS data mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj`hNhNubj)}(hXs**Parameters** ``const struct device_node *port`` DT port node of the LVDS source or sink **Description** Convert DT "data-mapping" property string value into media bus format value. **Return** * MEDIA_BUS_FMT_RGB666_1X7X3_SPWG - data-mapping is "jeida-18" * MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA - data-mapping is "jeida-24" * MEDIA_BUS_FMT_RGB101010_1X7X5_JEIDA - data-mapping is "jeida-30" * MEDIA_BUS_FMT_RGB888_1X7X4_SPWG - data-mapping is "vesa-24" * MEDIA_BUS_FMT_RGB101010_1X7X5_SPWG - data-mapping is "vesa-30" * -EINVAL - the "data-mapping" property is unsupported * -ENODEV - the "data-mapping" property is missingh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubji)}(hhh]jn)}(hK``const struct device_node *port`` DT port node of the LVDS source or sink h](jt)}(h"``const struct device_node *port``h]jz)}(hjh]hconst struct device_node *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h'DT port node of the LVDS source or sinkh]h'DT port node of the LVDS source or sink}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj.hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(hLConvert DT "data-mapping" property string value into media bus format value.h]hPConvert DT “data-mapping” property string value into media bus format value.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(h **Return**h]j%)}(hj{h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(hhh](h)}(hMEDIA_BUS_FMT_RGB101010_1X7X5_SPWG - data-mapping is "vesa-30"h]h)}(hjh]hBMEDIA_BUS_FMT_RGB101010_1X7X5_SPWG - data-mapping is “vesa-30”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h4-EINVAL - the "data-mapping" property is unsupportedh]h)}(hjh]h8-EINVAL - the “data-mapping” property is unsupported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h0-ENODEV - the "data-mapping" property is missingh]h)}(hj&h]h4-ENODEV - the “data-mapping” property is missing}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj$ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_of_get_data_lanes_count (C function)c.drm_of_get_data_lanes_counthNtauh1jxhj`hhhNhNubj)}(hhh](j)}(htint drm_of_get_data_lanes_count (const struct device_node *endpoint, const unsigned int min, const unsigned int max)h]j)}(hsint drm_of_get_data_lanes_count(const struct device_node *endpoint, const unsigned int min, const unsigned int max)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjphMubj)}(hdrm_of_get_data_lanes_counth]j)}(hdrm_of_get_data_lanes_counth]hdrm_of_get_data_lanes_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjphMubj)}(hT(const struct device_node *endpoint, const unsigned int min, const unsigned int max)h](j)}(h"const struct device_node *endpointh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_of_get_data_lanes_countasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hendpointh]hendpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int minh](j)}(hjch]hconst}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hminh]hmin}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int maxh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmaxh]hmax}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjphMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjphMhjWhhubj)}(hhh]h)}(hGet DSI/(e)DP data lane counth]hGet DSI/(e)DP data lane count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jhhhj`hNhNubj)}(hX**Parameters** ``const struct device_node *endpoint`` DT endpoint node of the DSI/(e)DP source or sink ``const unsigned int min`` minimum supported number of data lanes ``const unsigned int max`` maximum supported number of data lanes **Description** Count DT "data-lanes" property elements and check for validity. **Return** * min..max - positive integer count of "data-lanes" elements * -ve - the "data-lanes" property is missing or invalid * -EINVAL - the "data-lanes" property is unsupportedh](h)}(h**Parameters**h]j%)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj1ubji)}(hhh](jn)}(hX``const struct device_node *endpoint`` DT endpoint node of the DSI/(e)DP source or sink h](jt)}(h&``const struct device_node *endpoint``h]jz)}(hjVh]h"const struct device_node *endpoint}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjPubj)}(hhh]h)}(h0DT endpoint node of the DSI/(e)DP source or sinkh]h0DT endpoint node of the DSI/(e)DP source or sink}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjMubjn)}(hB``const unsigned int min`` minimum supported number of data lanes h](jt)}(h``const unsigned int min``h]jz)}(hjh]hconst unsigned int min}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h&minimum supported number of data lanesh]h&minimum supported number of data lanes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjMubjn)}(hB``const unsigned int max`` maximum supported number of data lanes h](jt)}(h``const unsigned int max``h]jz)}(hjh]hconst unsigned int max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h&maximum supported number of data lanesh]h&maximum supported number of data lanes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjMubeh}(h]h ]h"]h$]h&]uh1jhhj1ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj1ubh)}(h?Count DT "data-lanes" property elements and check for validity.h]hCCount DT “data-lanes” property elements and check for validity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj1ubh)}(h **Return**h]j%)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj1ubh)}(hhh](h)}(h:min..max - positive integer count of "data-lanes" elementsh]h)}(hjEh]h>min..max - positive integer count of “data-lanes” elements}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjCubah}(h]h ]h"]h$]h&]uh1hhj@ubh)}(h5-ve - the "data-lanes" property is missing or invalidh]h)}(hj]h]h9-ve - the “data-lanes” property is missing or invalid}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj[ubah}(h]h ]h"]h$]h&]uh1hhj@ubh)}(h2-EINVAL - the "data-lanes" property is unsupportedh]h)}(hjuh]h6-EINVAL - the “data-lanes” property is unsupported}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjsubah}(h]h ]h"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]j8j9uh1hhjThMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_of_get_data_lanes_count_ep (C function) c.drm_of_get_data_lanes_count_ephNtauh1jxhj`hhhNhNubj)}(hhh](j)}(hint drm_of_get_data_lanes_count_ep (const struct device_node *port, int port_reg, int reg, const unsigned int min, const unsigned int max)h]j)}(hint drm_of_get_data_lanes_count_ep(const struct device_node *port, int port_reg, int reg, const unsigned int min, const unsigned int max)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_of_get_data_lanes_count_eph]j)}(hdrm_of_get_data_lanes_count_eph]hdrm_of_get_data_lanes_count_ep}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hg(const struct device_node *port, int port_reg, int reg, const unsigned int min, const unsigned int max)h](j)}(hconst struct device_node *porth](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h device_nodeh]h device_node}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j%)}jjsb c.drm_of_get_data_lanes_count_epasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int port_regh](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hport_regh]hport_reg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint regh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int minh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hminh]hmin}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int maxh](j)}(hjch]hconst}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hmaxh]hmax}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h)Get DSI/(e)DP data lane count by endpointh]h)Get DSI/(e)DP data lane count by endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj`hNhNubj)}(hX**Parameters** ``const struct device_node *port`` DT port node of the DSI/(e)DP source or sink ``int port_reg`` identifier (value of reg property) of the parent port node ``int reg`` identifier (value of reg property) of the endpoint node ``const unsigned int min`` minimum supported number of data lanes ``const unsigned int max`` maximum supported number of data lanes **Description** Count DT "data-lanes" property elements and check for validity. This variant uses endpoint specifier. **Return** * min..max - positive integer count of "data-lanes" elements * -EINVAL - the "data-mapping" property is unsupported * -ENODEV - the "data-mapping" property is missingh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubji)}(hhh](jn)}(hP``const struct device_node *port`` DT port node of the DSI/(e)DP source or sink h](jt)}(h"``const struct device_node *port``h]jz)}(hjh]hconst struct device_node *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj ubj)}(hhh]h)}(h,DT port node of the DSI/(e)DP source or sinkh]h,DT port node of the DSI/(e)DP source or sink}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhjubjn)}(hL``int port_reg`` identifier (value of reg property) of the parent port node h](jt)}(h``int port_reg``h]jz)}(hjHh]h int port_reg}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjBubj)}(hhh]h)}(h:identifier (value of reg property) of the parent port nodeh]h:identifier (value of reg property) of the parent port node}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhjubjn)}(hD``int reg`` identifier (value of reg property) of the endpoint node h](jt)}(h ``int reg``h]jz)}(hjh]hint reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhj{ubj)}(hhh]h)}(h7identifier (value of reg property) of the endpoint nodeh]h7identifier (value of reg property) of the endpoint node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hB``const unsigned int min`` minimum supported number of data lanes h](jt)}(h``const unsigned int min``h]jz)}(hjh]hconst unsigned int min}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h&minimum supported number of data lanesh]h&minimum supported number of data lanes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hB``const unsigned int max`` maximum supported number of data lanes h](jt)}(h``const unsigned int max``h]jz)}(hjh]hconst unsigned int max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubj)}(hhh]h)}(h&maximum supported number of data lanesh]h&maximum supported number of data lanes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(heCount DT "data-lanes" property elements and check for validity. This variant uses endpoint specifier.h]hiCount DT “data-lanes” property elements and check for validity. This variant uses endpoint specifier.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(h **Return**h]j%)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubh)}(hhh](h)}(h:min..max - positive integer count of "data-lanes" elementsh]h)}(hjph]h>min..max - positive integer count of “data-lanes” elements}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjnubah}(h]h ]h"]h$]h&]uh1hhjkubh)}(h4-EINVAL - the "data-mapping" property is unsupportedh]h)}(hjh]h8-EINVAL - the “data-mapping” property is unsupported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjkubh)}(h0-ENODEV - the "data-mapping" property is missingh]h)}(hjh]h4-ENODEV - the “data-mapping” property is missing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:437: ./drivers/gpu/drm/drm_of.chMhjubah}(h]h ]h"]h$]h&]uh1hhjkubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj`hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_of_get_dsi_bus (C function)c.drm_of_get_dsi_bushNtauh1jxhj`hhhNhNubj)}(hhh](j)}(h>struct mipi_dsi_host * drm_of_get_dsi_bus (struct device *dev)h]j)}(h` interface ties the primary plane together with the CRTC state this does not allow userspace to disable the primary plane itself. The default primary plane only expose XRBG8888 and ARGB8888 as valid pixel formats for the attached framebuffer.h](hThis helper library contains helpers to implement primary plane support on top of the normal CRTC configuration interface. Since the legacy }(hjhhhNhNubh)}(hB:c:type:`drm_mode_config_funcs.set_config `h]jz)}(hjh]h drm_mode_config_funcs.set_config}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_plane_helper.chK)hjubh interface ties the primary plane together with the CRTC state this does not allow userspace to disable the primary plane itself. The default primary plane only expose XRBG8888 and ARGB8888 as valid pixel formats for the attached framebuffer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK)hjhhubh)}(hDrivers are highly recommended to implement proper support for primary planes, and newly merged drivers must not rely upon these transitional helpers.h]hDrivers are highly recommended to implement proper support for primary planes, and newly merged drivers must not rely upon these transitional helpers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_plane_helper.chK0hjhhubh)}(hThe plane helpers share the function table structures with other helpers, specifically also the atomic helpers. See :c:type:`struct drm_plane_helper_funcs ` for the details.h](htThe plane helpers share the function table structures with other helpers, specifically also the atomic helpers. See }(hjhhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]jz)}(hjh]hstruct drm_plane_helper_funcs}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_plane_helper.chK4hjubh for the details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK4hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_plane_helper_update_primary (C function)!c.drm_plane_helper_update_primaryhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hXint drm_plane_helper_update_primary (struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, unsigned int crtc_w, unsigned int crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, struct drm_modeset_acquire_ctx *ctx)h]j)}(hXint drm_plane_helper_update_primary(struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, unsigned int crtc_w, unsigned int crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhKubj)}(hdrm_plane_helper_update_primaryh]j)}(hdrm_plane_helper_update_primaryh]hdrm_plane_helper_update_primary}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhKubj)}(h(struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, unsigned int crtc_w, unsigned int crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjesb!c.drm_plane_helper_update_primaryasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h int crtc_xh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcrtc_xh]hcrtc_x}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h int crtc_yh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcrtc_yh]hcrtc_y}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hunsigned int crtc_wh](j)}(hunsignedh]hunsigned}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hcrtc_wh]hcrtc_w}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hunsigned int crtc_hh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcrtc_hh]hcrtc_h}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(huint32_t src_xh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsrc_xh]hsrc_x}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(huint32_t src_yh](h)}(hhh]j)}(huint32_th]huint32_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhj!ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hsrc_yh]hsrc_y}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(huint32_t src_wh](h)}(hhh]j)}(huint32_th]huint32_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hsrc_wh]hsrc_w}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(huint32_t src_hh](h)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsrc_hh]hsrc_h}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.drm_plane_helper_update_primaryasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:hhhjPhKubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhjPhKhj7hhubj)}(hhh]h)}(h"Helper for updating primary planesh]h"Helper for updating primary planes}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj{hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXq**Parameters** ``struct drm_plane *plane`` plane to update ``struct drm_crtc *crtc`` the plane's new CRTC ``struct drm_framebuffer *fb`` the plane's new framebuffer ``int crtc_x`` x coordinate within CRTC ``int crtc_y`` y coordinate within CRTC ``unsigned int crtc_w`` width coordinate within CRTC ``unsigned int crtc_h`` height coordinate within CRTC ``uint32_t src_x`` x coordinate within source ``uint32_t src_y`` y coordinate within source ``uint32_t src_w`` width coordinate within source ``uint32_t src_h`` height coordinate within source ``struct drm_modeset_acquire_ctx *ctx`` modeset locking context **Description** This helper validates the given parameters and updates the primary plane. This function is only useful for non-atomic modesetting. Don't use it in new drivers. **Return** Zero on success, or an errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubji)}(hhh](jn)}(h,``struct drm_plane *plane`` plane to update h](jt)}(h``struct drm_plane *plane``h]jz)}(hjh]hstruct drm_plane *plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hplane to updateh]hplane to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h/``struct drm_crtc *crtc`` the plane's new CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjh]hstruct drm_crtc *crtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hthe plane's new CRTCh]hthe plane’s new CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKhjubjn)}(h;``struct drm_framebuffer *fb`` the plane's new framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hj1h]hstruct drm_framebuffer *fb}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj+ubj)}(hhh]h)}(hthe plane's new framebufferh]hthe plane’s new framebuffer}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhjFhKhjubjn)}(h(``int crtc_x`` x coordinate within CRTC h](jt)}(h``int crtc_x``h]jz)}(hjjh]h int crtc_x}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjdubj)}(hhh]h)}(hx coordinate within CRTCh]hx coordinate within CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h(``int crtc_y`` y coordinate within CRTC h](jt)}(h``int crtc_y``h]jz)}(hjh]h int crtc_y}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hy coordinate within CRTCh]hy coordinate within CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h5``unsigned int crtc_w`` width coordinate within CRTC h](jt)}(h``unsigned int crtc_w``h]jz)}(hjh]hunsigned int crtc_w}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hwidth coordinate within CRTCh]hwidth coordinate within CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h6``unsigned int crtc_h`` height coordinate within CRTC h](jt)}(h``unsigned int crtc_h``h]jz)}(hjh]hunsigned int crtc_h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hheight coordinate within CRTCh]hheight coordinate within CRTC}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj*hKhjubjn)}(h.``uint32_t src_x`` x coordinate within source h](jt)}(h``uint32_t src_x``h]jz)}(hjNh]huint32_t src_x}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjHubj)}(hhh]h)}(hx coordinate within sourceh]hx coordinate within source}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchKhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchKhjubjn)}(h.``uint32_t src_y`` y coordinate within source h](jt)}(h``uint32_t src_y``h]jz)}(hjh]huint32_t src_y}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hy coordinate within sourceh]hy coordinate within source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h2``uint32_t src_w`` width coordinate within source h](jt)}(h``uint32_t src_w``h]jz)}(hjh]huint32_t src_w}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hwidth coordinate within sourceh]hwidth coordinate within source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h3``uint32_t src_h`` height coordinate within source h](jt)}(h``uint32_t src_h``h]jz)}(hjh]huint32_t src_h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hheight coordinate within sourceh]hheight coordinate within source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h@``struct drm_modeset_acquire_ctx *ctx`` modeset locking context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hj2h]h#struct drm_modeset_acquire_ctx *ctx}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj,ubj)}(hhh]h)}(hmodeset locking contexth]hmodeset locking context}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubh)}(hIThis helper validates the given parameters and updates the primary plane.h]hIThis helper validates the given parameters and updates the primary plane.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubh)}(hUThis function is only useful for non-atomic modesetting. Don't use it in new drivers.h]hWThis function is only useful for non-atomic modesetting. Don’t use it in new drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubh)}(h,Zero on success, or an errno code otherwise.h]h,Zero on success, or an errno code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_plane_helper_disable_primary (C function)"c.drm_plane_helper_disable_primaryhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcint drm_plane_helper_disable_primary (struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx)h]j)}(hbint drm_plane_helper_disable_primary(struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h drm_plane_helper_disable_primaryh]j)}(h drm_plane_helper_disable_primaryh]h drm_plane_helper_disable_primary}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h>(struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j%)}jj sb"c.drm_plane_helper_disable_primaryasbuh1hhj!ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubj)}(hplaneh]hplane}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j_"c.drm_plane_helper_disable_primaryasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h#Helper for disabling primary planesh]h#Helper for disabling primary planes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhjhNhNubj)}(hXM**Parameters** ``struct drm_plane *plane`` plane to disable ``struct drm_modeset_acquire_ctx *ctx`` modeset locking context **Description** This helper returns an error when trying to disable the primary plane. This function is only useful for non-atomic modesetting. Don't use it in new drivers. **Return** An errno code.h](h)}(h**Parameters**h]j%)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj4ubji)}(hhh](jn)}(h-``struct drm_plane *plane`` plane to disable h](jt)}(h``struct drm_plane *plane``h]jz)}(hjYh]hstruct drm_plane *plane}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjSubj)}(hhh]h)}(hplane to disableh]hplane to disable}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhKhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhKhjPubjn)}(h@``struct drm_modeset_acquire_ctx *ctx`` modeset locking context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhjubj)}(hhh]h)}(hmodeset locking contexth]hmodeset locking context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjPubeh}(h]h ]h"]h$]h&]uh1jhhj4ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj4ubh)}(hFThis helper returns an error when trying to disable the primary plane.h]hFThis helper returns an error when trying to disable the primary plane.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj4ubh)}(hUThis function is only useful for non-atomic modesetting. Don't use it in new drivers.h]hWThis function is only useful for non-atomic modesetting. Don’t use it in new drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj4ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj4ubh)}(hAn errno code.h]hAn errno code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chKhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_plane_helper_destroy (C function)c.drm_plane_helper_destroyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h7void drm_plane_helper_destroy (struct drm_plane *plane)h]j)}(h6void drm_plane_helper_destroy(struct drm_plane *plane)h](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chMubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjVhMubj)}(hdrm_plane_helper_destroyh]j)}(hdrm_plane_helper_destroyh]hdrm_plane_helper_destroy}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjVhMubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjksbc.drm_plane_helper_destroyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubah}(h]h ]h"]h$]h&]jjuh1jhjDhhhjVhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@hhhjVhMubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1jhjVhMhj=hhubj)}(hhh]h)}(h$Helper for primary plane destructionh]h$Helper for primary plane destruction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj=hhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX$**Parameters** ``struct drm_plane *plane`` plane to destroy **Description** Provides a default plane destroy handler for primary planes. This handler is called during CRTC destruction. We disable the primary plane, remove it from the DRM plane list, and deallocate the plane structure.h](h)}(h**Parameters**h]j%)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chMhj$ubji)}(hhh]jn)}(h-``struct drm_plane *plane`` plane to destroy h](jt)}(h``struct drm_plane *plane``h]jz)}(hjIh]hstruct drm_plane *plane}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chMhjCubj)}(hhh]h)}(hplane to destroyh]hplane to destroy}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhj@ubah}(h]h ]h"]h$]h&]uh1jhhj$ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chMhj$ubh)}(hProvides a default plane destroy handler for primary planes. This handler is called during CRTC destruction. We disable the primary plane, remove it from the DRM plane list, and deallocate the plane structure.h]hProvides a default plane destroy handler for primary planes. This handler is called during CRTC destruction. We disable the primary plane, remove it from the DRM plane list, and deallocate the plane structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:446: ./drivers/gpu/drm/drm_plane_helper.chMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]legacy-plane-helper-referenceah ]h"]legacy plane helper referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h.Legacy CRTC/Modeset Helper Functions Referenceh]h.Legacy CRTC/Modeset Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXThe CRTC modeset helper library provides a default set_config implementation in drm_crtc_helper_set_config(). Plus a few other convenience functions using the same callbacks which drivers can use to e.g. restore the modeset configuration on resume with drm_helper_resume_force_mode().h]hXThe CRTC modeset helper library provides a default set_config implementation in drm_crtc_helper_set_config(). Plus a few other convenience functions using the same callbacks which drivers can use to e.g. restore the modeset configuration on resume with drm_helper_resume_force_mode().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_crtc_helper.chKBhjhhubh)}(hX(Note that this helper library doesn't track the current power state of CRTCs and encoders. It can call callbacks like :c:type:`drm_encoder_helper_funcs.dpms ` even though the hardware is already in the desired state. This deficiency has been fixed in the atomic helpers.h](hxNote that this helper library doesn’t track the current power state of CRTCs and encoders. It can call callbacks like }(hjhhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hjh]hdrm_encoder_helper_funcs.dpms}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_crtc_helper.chKGhjubhp even though the hardware is already in the desired state. This deficiency has been fixed in the atomic helpers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKGhjhhubh)}(hXThe driver callbacks are mostly compatible with the atomic modeset helpers, except for the handling of the primary plane: Atomic helpers require that the primary plane is implemented as a real standalone plane and not directly tied to the CRTC state. For easier transition this library provides functions to implement the old semantics required by the CRTC helpers using the new plane and atomic helper callbacks.h]hXThe driver callbacks are mostly compatible with the atomic modeset helpers, except for the handling of the primary plane: Atomic helpers require that the primary plane is implemented as a real standalone plane and not directly tied to the CRTC state. For easier transition this library provides functions to implement the old semantics required by the CRTC helpers using the new plane and atomic helper callbacks.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_crtc_helper.chKLhjhhubh)}(hDrivers are strongly urged to convert to the atomic helpers (by way of first converting to the plane helpers). New drivers must not use these functions but need to implement the atomic interface instead, potentially using the atomic helpers for that.h]hDrivers are strongly urged to convert to the atomic helpers (by way of first converting to the plane helpers). New drivers must not use these functions but need to implement the atomic interface instead, potentially using the atomic helpers for that.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_crtc_helper.chKShjhhubh)}(hXThese legacy modeset helpers use the same function table structures as all other modesetting helpers. See the documentation for struct :c:type:`drm_crtc_helper_funcs`, :c:type:`struct drm_encoder_helper_funcs ` and struct :c:type:`drm_connector_helper_funcs`.h](hThese legacy modeset helpers use the same function table structures as all other modesetting helpers. See the documentation for struct }(hj(hhhNhNubh)}(h:c:type:`drm_crtc_helper_funcs`h]jz)}(hj2h]hdrm_crtc_helper_funcs}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_crtc_helper.chKXhj(ubh, }(hj(hhhNhNubh)}(hD:c:type:`struct drm_encoder_helper_funcs `h]jz)}(hjVh]hstruct drm_encoder_helper_funcs}(hjXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjOhKXhj(ubh and struct }(hj(hhhNhNubh)}(h$:c:type:`drm_connector_helper_funcs`h]jz)}(hjyh]hdrm_connector_helper_funcs}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhjOhKXhj(ubh.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhKXhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_helper_encoder_in_use (C function)c.drm_helper_encoder_in_usehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hdisable() hooks on a disabled function, or ->enable() hooks on an enabled functions. drm_helper_disable_unused_functions() on the other hand throws such guarantees into the wind and calls disable hooks unconditionally on unused functions. **NOTE**h](h)}(h**Parameters**h]j%)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chKhj+ubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjPh]hstruct drm_device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chKhjJubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehKhjGubah}(h]h ]h"]h$]h&]uh1jhhj+ubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chKhj+ubh)}(hXOThis function walks through the entire mode setting configuration of **dev**. It will remove any CRTC links of unused encoders and encoder links of disconnected connectors. Then it will disable all unused encoders and CRTCs either by calling their disable callback if available or by calling their dpms callback with DRM_MODE_DPMS_OFF.h](hEThis function walks through the entire mode setting configuration of }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhX. It will remove any CRTC links of unused encoders and encoder links of disconnected connectors. Then it will disable all unused encoders and CRTCs either by calling their disable callback if available or by calling their dpms callback with DRM_MODE_DPMS_OFF.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chKhj+ubh)}(hXThis function is part of the legacy modeset helper library and will cause major confusion with atomic drivers. This is because atomic helpers guarantee to never call ->disable() hooks on a disabled function, or ->enable() hooks on an enabled functions. drm_helper_disable_unused_functions() on the other hand throws such guarantees into the wind and calls disable hooks unconditionally on unused functions.h]hXThis function is part of the legacy modeset helper library and will cause major confusion with atomic drivers. This is because atomic helpers guarantee to never call ->disable() hooks on a disabled function, or ->enable() hooks on an enabled functions. drm_helper_disable_unused_functions() on the other hand throws such guarantees into the wind and calls disable hooks unconditionally on unused functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chKhj+ubh)}(h**NOTE**h]j%)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chKhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_crtc_helper_set_mode (C function)c.drm_crtc_helper_set_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbool drm_crtc_helper_set_mode (struct drm_crtc *crtc, struct drm_display_mode *mode, int x, int y, struct drm_framebuffer *old_fb)h]j)}(hbool drm_crtc_helper_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode, int x, int y, struct drm_framebuffer *old_fb)h](j)}(hjAh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_crtc_helper_set_modeh]j)}(hdrm_crtc_helper_set_modeh]hdrm_crtc_helper_set_mode}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hd(struct drm_crtc *crtc, struct drm_display_mode *mode, int x, int y, struct drm_framebuffer *old_fb)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j%)}jj+sbc.drm_crtc_helper_set_modeasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hstruct drm_display_mode *modeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_crtc_helper_set_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hint xh](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hx}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hint yh](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hj'h]hy}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hstruct drm_framebuffer *old_fbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_crtc_helper_set_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hold_fbh]hold_fb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hinternal helper to set a modeh]hinternal helper to set a mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjhNhNubj)}(hXv**Parameters** ``struct drm_crtc *crtc`` CRTC to program ``struct drm_display_mode *mode`` mode to use ``int x`` horizontal offset into the surface ``int y`` vertical offset into the surface ``struct drm_framebuffer *old_fb`` old framebuffer, for cleanup **Description** Try to set **mode** on **crtc**. Give **crtc** and its associated connectors a chance to fixup or reject the mode prior to trying to set it. This is an internal helper that drivers could e.g. use to update properties that require the entire output pipe to be disabled and re-enabled in a new configuration. For example for changing whether audio is enabled on a hdmi link or for changing panel fitter or dither attributes. It is also called by the drm_crtc_helper_set_config() helper function to drive the mode setting sequence. **Return** True if the mode was set successfully, false otherwise.h](h)}(h**Parameters**h]j%)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hj,ubji)}(hhh](jn)}(h*``struct drm_crtc *crtc`` CRTC to program h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjQh]hstruct drm_crtc *crtc}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjKubj)}(hhh]h)}(hCRTC to programh]hCRTC to program}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhM hjHubjn)}(h.``struct drm_display_mode *mode`` mode to use %h](jt)}(h!``struct drm_display_mode *mode``h]jz)}(hjh]hstruct drm_display_mode *mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubj)}(hhh]h)}(h mode to useh]h mode to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjHubjn)}(h-``int x`` horizontal offset into the surface h](jt)}(h ``int x``h]jz)}(hjh]hint x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubj)}(hhh]h)}(h"horizontal offset into the surfaceh]h"horizontal offset into the surface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjHubjn)}(h+``int y`` vertical offset into the surface h](jt)}(h ``int y``h]jz)}(hjh]hint y}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubj)}(hhh]h)}(h vertical offset into the surfaceh]h vertical offset into the surface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjHubjn)}(h@``struct drm_framebuffer *old_fb`` old framebuffer, for cleanup h](jt)}(h"``struct drm_framebuffer *old_fb``h]jz)}(hj5h]hstruct drm_framebuffer *old_fb}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hj/ubj)}(hhh]h)}(hold framebuffer, for cleanuph]hold framebuffer, for cleanup}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhM hjHubeh}(h]h ]h"]h$]h&]uh1jhhj,ubh)}(h**Description**h]j%)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj,ubh)}(hXTry to set **mode** on **crtc**. Give **crtc** and its associated connectors a chance to fixup or reject the mode prior to trying to set it. This is an internal helper that drivers could e.g. use to update properties that require the entire output pipe to be disabled and re-enabled in a new configuration. For example for changing whether audio is enabled on a hdmi link or for changing panel fitter or dither attributes. It is also called by the drm_crtc_helper_set_config() helper function to drive the mode setting sequence.h](h Try to set }(hjhhhNhNubj%)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh on }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh. Give }(hjhhhNhNubj%)}(h**crtc**h]hcrtc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhX and its associated connectors a chance to fixup or reject the mode prior to trying to set it. This is an internal helper that drivers could e.g. use to update properties that require the entire output pipe to be disabled and re-enabled in a new configuration. For example for changing whether audio is enabled on a hdmi link or for changing panel fitter or dither attributes. It is also called by the drm_crtc_helper_set_config() helper function to drive the mode setting sequence.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj,ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj,ubh)}(h7True if the mode was set successfully, false otherwise.h]h7True if the mode was set successfully, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_crtc_helper_atomic_check (C function)c.drm_crtc_helper_atomic_checkhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hXint drm_crtc_helper_atomic_check (struct drm_crtc *crtc, struct drm_atomic_state *state)h]j)}(hWint drm_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hdrm_crtc_helper_atomic_checkh]j)}(hdrm_crtc_helper_atomic_checkh]hdrm_crtc_helper_atomic_check}(hj3 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h7(struct drm_crtc *crtc, struct drm_atomic_state *state)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjO hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubj)}(h h]h }(hj\ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjo modnameN classnameNjj)}j]j%)}jj5 sbc.drm_crtc_helper_atomic_checkasbuh1hhjK ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjK ubj)}(hcrtch]hcrtc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjG ubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_crtc_helper_atomic_checkasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hstateh]hstate}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjG ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMhj hhubj)}(hhh]h)}(h!Helper to check CRTC atomic-stateh]h!Helper to check CRTC atomic-state}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj? hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZ jjZ jjjuh1jhhhjhNhNubj)}(hXb**Parameters** ``struct drm_crtc *crtc`` CRTC to check ``struct drm_atomic_state *state`` atomic state object **Description** Provides a default CRTC-state check handler for CRTCs that only have one primary plane attached to it. This is often the case for the CRTC of simple framebuffers. **Return** Zero on success, or an errno code otherwise.h](h)}(h**Parameters**h]j%)}(hjd h]h Parameters}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjb ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj^ ubji)}(hhh](jn)}(h(``struct drm_crtc *crtc`` CRTC to check h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj h]hstruct drm_crtc *crtc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj} ubj)}(hhh]h)}(h CRTC to checkh]h CRTC to check}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjz ubjn)}(h7``struct drm_atomic_state *state`` atomic state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hj h]hstruct drm_atomic_state *state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubj)}(hhh]h)}(hatomic state objecth]hatomic state object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjz ubeh}(h]h ]h"]h$]h&]uh1jhhj^ ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj^ ubh)}(hProvides a default CRTC-state check handler for CRTCs that only have one primary plane attached to it. This is often the case for the CRTC of simple framebuffers.h]hProvides a default CRTC-state check handler for CRTCs that only have one primary plane attached to it. This is often the case for the CRTC of simple framebuffers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj^ ubh)}(h **Return**h]j%)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj^ ubh)}(h,Zero on success, or an errno code otherwise.h]h,Zero on success, or an errno code otherwise.}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj^ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_crtc_helper_set_config (C function)c.drm_crtc_helper_set_confighNtauh1jxhjhhhNhNubj)}(hhh](j)}(h^int drm_crtc_helper_set_config (struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h]j)}(h]int drm_crtc_helper_set_config(struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h](j)}(hinth]hint}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ hhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM)ubj)}(h h]h }(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ hhhjq hM)ubj)}(hdrm_crtc_helper_set_configh]j)}(hdrm_crtc_helper_set_configh]hdrm_crtc_helper_set_config}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_ hhhjq hM)ubj)}(h?(struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_mode_set *seth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h drm_mode_seth]h drm_mode_set}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jj sbc.drm_crtc_helper_set_configasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hseth]hset}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2 modnameN classnameNjj)}j]j c.drm_crtc_helper_set_configasbuh1hhj ubj)}(h h]h }(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj\ hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hctxh]hctx}(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj_ hhhjq hM)ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[ hhhjq hM)ubah}(h]jV ah ](jjeh"]h$]h&]jj)jhuh1jhjq hM)hjX hhubj)}(hhh]h)}(hset a new config from userspaceh]hset a new config from userspace}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjX hhhjq hM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hXF**Parameters** ``struct drm_mode_set *set`` mode set configuration ``struct drm_modeset_acquire_ctx *ctx`` lock acquire context, not used here **Description** The drm_crtc_helper_set_config() helper function implements the of :c:type:`drm_crtc_funcs.set_config ` callback for drivers using the legacy CRTC helpers. It first tries to locate the best encoder for each connector by calling the connector **drm_connector_helper_funcs.best_encoder** helper operation. After locating the appropriate encoders, the helper function will call the mode_fixup encoder and CRTC helper operations to adjust the requested mode, or reject it completely in which case an error will be returned to the application. If the new configuration after mode adjustment is identical to the current configuration the helper function will return without performing any other operation. If the adjusted mode is identical to the current mode but changes to the frame buffer need to be applied, the drm_crtc_helper_set_config() function will call the CRTC :c:type:`drm_crtc_helper_funcs.mode_set_base ` helper operation. If the adjusted mode differs from the current mode, or if the ->mode_set_base() helper operation is not provided, the helper function performs a full mode set sequence by calling the ->prepare(), ->mode_set() and ->commit() CRTC and encoder helper operations, in that order. Alternatively it can also use the dpms and disable helper operations. For details see :c:type:`struct drm_crtc_helper_funcs ` and struct :c:type:`drm_encoder_helper_funcs`. This function is deprecated. New drivers must implement atomic modeset support, for which this function is unsuitable. Instead drivers should use drm_atomic_helper_set_config(). **Return** Returns 0 on success, negative errno numbers on failure.h](h)}(h**Parameters**h]j%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubji)}(hhh](jn)}(h4``struct drm_mode_set *set`` mode set configuration h](jt)}(h``struct drm_mode_set *set``h]jz)}(hj h]hstruct drm_mode_set *set}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubj)}(hhh]h)}(hmode set configurationh]hmode set configuration}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubjn)}(hL``struct drm_modeset_acquire_ctx *ctx`` lock acquire context, not used here h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hj h]h#struct drm_modeset_acquire_ctx *ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubj)}(hhh]h)}(h#lock acquire context, not used hereh]h#lock acquire context, not used here}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj" hMhj# ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj" hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhj ubh)}(h**Description**h]j%)}(hjH h]h Description}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjF ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubh)}(hThe drm_crtc_helper_set_config() helper function implements the of :c:type:`drm_crtc_funcs.set_config ` callback for drivers using the legacy CRTC helpers.h](hCThe drm_crtc_helper_set_config() helper function implements the of }(hj^ hhhNhNubh)}(h4:c:type:`drm_crtc_funcs.set_config `h]jz)}(hjh h]hdrm_crtc_funcs.set_config}(hjj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjf ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj^ ubh4 callback for drivers using the legacy CRTC helpers.}(hj^ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubh)}(hIt first tries to locate the best encoder for each connector by calling the connector **drm_connector_helper_funcs.best_encoder** helper operation.h](hVIt first tries to locate the best encoder for each connector by calling the connector }(hj hhhNhNubj%)}(h+**drm_connector_helper_funcs.best_encoder**h]h'drm_connector_helper_funcs.best_encoder}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh helper operation.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hj ubh)}(hXAfter locating the appropriate encoders, the helper function will call the mode_fixup encoder and CRTC helper operations to adjust the requested mode, or reject it completely in which case an error will be returned to the application. If the new configuration after mode adjustment is identical to the current configuration the helper function will return without performing any other operation.h]hXAfter locating the appropriate encoders, the helper function will call the mode_fixup encoder and CRTC helper operations to adjust the requested mode, or reject it completely in which case an error will be returned to the application. If the new configuration after mode adjustment is identical to the current configuration the helper function will return without performing any other operation.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubh)}(hIf the adjusted mode is identical to the current mode but changes to the frame buffer need to be applied, the drm_crtc_helper_set_config() function will call the CRTC :c:type:`drm_crtc_helper_funcs.mode_set_base ` helper operation.h](hIf the adjusted mode is identical to the current mode but changes to the frame buffer need to be applied, the drm_crtc_helper_set_config() function will call the CRTC }(hj hhhNhNubh)}(hE:c:type:`drm_crtc_helper_funcs.mode_set_base `h]jz)}(hj h]h#drm_crtc_helper_funcs.mode_set_base}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubh helper operation.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubh)}(hXIf the adjusted mode differs from the current mode, or if the ->mode_set_base() helper operation is not provided, the helper function performs a full mode set sequence by calling the ->prepare(), ->mode_set() and ->commit() CRTC and encoder helper operations, in that order. Alternatively it can also use the dpms and disable helper operations. For details see :c:type:`struct drm_crtc_helper_funcs ` and struct :c:type:`drm_encoder_helper_funcs`.h](hXiIf the adjusted mode differs from the current mode, or if the ->mode_set_base() helper operation is not provided, the helper function performs a full mode set sequence by calling the ->prepare(), ->mode_set() and ->commit() CRTC and encoder helper operations, in that order. Alternatively it can also use the dpms and disable helper operations. For details see }(hj hhhNhNubh)}(h>:c:type:`struct drm_crtc_helper_funcs `h]jz)}(hj h]hstruct drm_crtc_helper_funcs}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj ubh and struct }(hj hhhNhNubh)}(h":c:type:`drm_encoder_helper_funcs`h]jz)}(hj h]hdrm_encoder_helper_funcs}(hj"hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhMhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubh)}(hThis function is deprecated. New drivers must implement atomic modeset support, for which this function is unsuitable. Instead drivers should use drm_atomic_helper_set_config().h]hThis function is deprecated. New drivers must implement atomic modeset support, for which this function is unsuitable. Instead drivers should use drm_atomic_helper_set_config().}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM"hj ubh)}(h **Return**h]j%)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM&hj ubh)}(h8Returns 0 on success, negative errno numbers on failure.h]h8Returns 0 on success, negative errno numbers on failure.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM&hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_helper_connector_dpms (C function)c.drm_helper_connector_dpmshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIint drm_helper_connector_dpms (struct drm_connector *connector, int mode)h]j)}(hHint drm_helper_connector_dpms(struct drm_connector *connector, int mode)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_helper_connector_dpmsh]j)}(hdrm_helper_connector_dpmsh]hdrm_helper_connector_dpms}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h+(struct drm_connector *connector, int mode)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_helper_connector_dpmsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint modeh](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hmodeh]hmode}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h$connector dpms helper implementationh]h$connector dpms helper implementation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX8**Parameters** ``struct drm_connector *connector`` affected connector ``int mode`` DPMS mode **Description** The drm_helper_connector_dpms() helper function implements the :c:type:`drm_connector_funcs.dpms ` callback for drivers using the legacy CRTC helpers. This is the main helper function provided by the CRTC helper framework for implementing the DPMS connector attribute. It computes the new desired DPMS state for all encoders and CRTCs in the output mesh and calls the :c:type:`drm_crtc_helper_funcs.dpms ` and :c:type:`drm_encoder_helper_funcs.dpms ` callbacks provided by the driver. This function is deprecated. New drivers must implement atomic modeset support, where DPMS is handled in the DRM core. **Return** Always returns 0.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM~hjubji)}(hhh](jn)}(h7``struct drm_connector *connector`` affected connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM{hjubj)}(hhh]h)}(haffected connectorh]haffected connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM{hjubjn)}(h``int mode`` DPMS mode h](jt)}(h ``int mode``h]jz)}(hj h]hint mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM|hjubj)}(hhh]h)}(h DPMS modeh]h DPMS mode}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM|hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hM|hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM~hjubh)}(hThe drm_helper_connector_dpms() helper function implements the :c:type:`drm_connector_funcs.dpms ` callback for drivers using the legacy CRTC helpers.h](h?The drm_helper_connector_dpms() helper function implements the }(hj]hhhNhNubh)}(h8:c:type:`drm_connector_funcs.dpms `h]jz)}(hjgh]hdrm_connector_funcs.dpms}(hjihhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM~hj]ubh4 callback for drivers using the legacy CRTC helpers.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM~hjubh)}(hX~This is the main helper function provided by the CRTC helper framework for implementing the DPMS connector attribute. It computes the new desired DPMS state for all encoders and CRTCs in the output mesh and calls the :c:type:`drm_crtc_helper_funcs.dpms ` and :c:type:`drm_encoder_helper_funcs.dpms ` callbacks provided by the driver.h](hThis is the main helper function provided by the CRTC helper framework for implementing the DPMS connector attribute. It computes the new desired DPMS state for all encoders and CRTCs in the output mesh and calls the }(hjhhhNhNubh)}(h<:c:type:`drm_crtc_helper_funcs.dpms `h]jz)}(hjh]hdrm_crtc_helper_funcs.dpms}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh and }(hjhhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hjh]hdrm_encoder_helper_funcs.dpms}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhMhjubh" callbacks provided by the driver.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hwThis function is deprecated. New drivers must implement atomic modeset support, where DPMS is handled in the DRM core.h]hwThis function is deprecated. New drivers must implement atomic modeset support, where DPMS is handled in the DRM core.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hAlways returns 0.h]hAlways returns 0.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_helper_resume_force_mode (C function)c.drm_helper_resume_force_modehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:void drm_helper_resume_force_mode (struct drm_device *dev)h]j)}(h9void drm_helper_resume_force_mode(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjHhMubj)}(hdrm_helper_resume_force_modeh]j)}(hdrm_helper_resume_force_modeh]hdrm_helper_resume_force_mode}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhjHhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj]sbc.drm_helper_resume_force_modeasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubah}(h]h ]h"]h$]h&]jjuh1jhj6hhhjHhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj2hhhjHhMubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhjHhMhj/hhubj)}(hhh]h)}(h(force-restore mode setting configurationh]h(force-restore mode setting configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXL**Parameters** ``struct drm_device *dev`` drm_device which should be restored **Description** Drivers which use the mode setting helpers can use this function to force-restore the mode setting configuration e.g. on resume or when something else might have trampled over the hw state (like some overzealous old BIOSen tended to do). This helper doesn't provide a error return value since restoring the old config should never fail due to resource allocation issues since the driver has successfully set the restored configuration already. Hence this should boil down to the equivalent of a few dpms on calls, which also don't provide an error code. Drivers where simply restoring an old configuration again might fail (e.g. due to slight differences in allocating shared resources when the configuration is restored in a different order than when userspace set it up) need to use their own restore logic. This function is deprecated. New drivers should implement atomic mode- setting and use the atomic suspend/resume helpers. See also: drm_atomic_helper_suspend(), drm_atomic_helper_resume()h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubji)}(hhh]jn)}(h?``struct drm_device *dev`` drm_device which should be restored h](jt)}(h``struct drm_device *dev``h]jz)}(hj;h]hstruct drm_device *dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhj5ubj)}(hhh]h)}(h#drm_device which should be restoredh]h#drm_device which should be restored}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhjPhMhj2ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hDrivers which use the mode setting helpers can use this function to force-restore the mode setting configuration e.g. on resume or when something else might have trampled over the hw state (like some overzealous old BIOSen tended to do).h]hDrivers which use the mode setting helpers can use this function to force-restore the mode setting configuration e.g. on resume or when something else might have trampled over the hw state (like some overzealous old BIOSen tended to do).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hX;This helper doesn't provide a error return value since restoring the old config should never fail due to resource allocation issues since the driver has successfully set the restored configuration already. Hence this should boil down to the equivalent of a few dpms on calls, which also don't provide an error code.h]hX?This helper doesn’t provide a error return value since restoring the old config should never fail due to resource allocation issues since the driver has successfully set the restored configuration already. Hence this should boil down to the equivalent of a few dpms on calls, which also don’t provide an error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hDrivers where simply restoring an old configuration again might fail (e.g. due to slight differences in allocating shared resources when the configuration is restored in a different order than when userspace set it up) need to use their own restore logic.h]hDrivers where simply restoring an old configuration again might fail (e.g. due to slight differences in allocating shared resources when the configuration is restored in a different order than when userspace set it up) need to use their own restore logic.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hyThis function is deprecated. New drivers should implement atomic mode- setting and use the atomic suspend/resume helpers.h]hyThis function is deprecated. New drivers should implement atomic mode- setting and use the atomic suspend/resume helpers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hASee also: drm_atomic_helper_suspend(), drm_atomic_helper_resume()h]hASee also: drm_atomic_helper_suspend(), drm_atomic_helper_resume()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_helper_force_disable_all (C function)c.drm_helper_force_disable_allhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h9int drm_helper_force_disable_all (struct drm_device *dev)h]j)}(h8int drm_helper_force_disable_all(struct drm_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_helper_force_disable_allh]j)}(hdrm_helper_force_disable_allh]hdrm_helper_force_disable_all}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j%)}jjsbc.drm_helper_force_disable_allasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h#Forcibly turn off all enabled CRTCsh]h#Forcibly turn off all enabled CRTCs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device whose CRTCs to turn off **Description** Drivers may want to call this on unload to ensure that all displays are unlit and the GPU is in a consistent, low power state. Takes modeset locks. **Note** This should only be used by non-atomic legacy drivers. For an atomic version look at drm_atomic_helper_shutdown(). **Return** Zero on success, error code on failure.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubji)}(hhh]jn)}(h>``struct drm_device *dev`` DRM device whose CRTCs to turn off h](jt)}(h``struct drm_device *dev``h]jz)}(hjh]hstruct drm_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubj)}(hhh]h)}(h"DRM device whose CRTCs to turn offh]h"DRM device whose CRTCs to turn off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hM hjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubh)}(hDrivers may want to call this on unload to ensure that all displays are unlit and the GPU is in a consistent, low power state. Takes modeset locks.h]hDrivers may want to call this on unload to ensure that all displays are unlit and the GPU is in a consistent, low power state. Takes modeset locks.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chM hjubh)}(h**Note**h]j%)}(hjZh]hNote}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(hrThis should only be used by non-atomic legacy drivers. For an atomic version look at drm_atomic_helper_shutdown().h]hrThis should only be used by non-atomic legacy drivers. For an atomic version look at drm_atomic_helper_shutdown().}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:455: ./drivers/gpu/drm/drm_crtc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h].legacy-crtc-modeset-helper-functions-referenceah ]h"].legacy crtc/modeset helper functions referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hPrivacy-screen classh]hPrivacy-screen class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXThis class allows non KMS drivers, from e.g. drivers/platform/x86 to register a privacy-screen device, which the KMS drivers can then use to implement the standard privacy-screen properties, see :ref:`Standard Connector Properties`.h](hThis class allows non KMS drivers, from e.g. drivers/platform/x86 to register a privacy-screen device, which the KMS drivers can then use to implement the standard privacy-screen properties, see }(hjhhhNhNubh)}(hC:ref:`Standard Connector Properties`h]hinline)}(hjh]hStandard Connector Properties}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjstandard_connector_propertiesuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_privacy_screen.chKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubh)}(hKMS drivers using a privacy-screen class device are advised to use the drm_connector_attach_privacy_screen_provider() and drm_connector_update_privacy_screen() helpers for dealing with this.h]hKMS drivers using a privacy-screen class device are advised to use the drm_connector_attach_privacy_screen_provider() and drm_connector_update_privacy_screen() helpers for dealing with this.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_privacy_screen.chKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_privacy_screen_ops (C struct)c.drm_privacy_screen_opshNtauh1jxhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhNubj)}(hhh](j)}(hdrm_privacy_screen_opsh]j)}(hstruct drm_privacy_screen_opsh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hKubj)}(hdrm_privacy_screen_opsh]j)}(hjh]hdrm_privacy_screen_ops}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj1hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj1hKhjhhubj)}(hhh]h)}(hdrm_privacy_screen operationsh]hdrm_privacy_screen operations}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hKubeh}(h]h ](jstructeh"]h$]h&]jjjj~jj~jjjuh1jhhhjhjhNubj)}(hX7**Definition**:: struct drm_privacy_screen_ops { int (*set_sw_state)(struct drm_privacy_screen *priv, enum drm_privacy_screen_status sw_state); void (*get_hw_state)(struct drm_privacy_screen *priv); }; **Members** ``set_sw_state`` Called to request a change of the privacy-screen state. The privacy-screen class code contains a check to avoid this getting called when the hw_state reports the state is locked. It is the driver's responsibility to update sw_state and hw_state. This is always called with the drm_privacy_screen's lock held. ``get_hw_state`` Called to request that the driver gets the current privacy-screen state from the hardware and then updates sw_state and hw_state accordingly. This will be called by the core just before the privacy-screen is registered in sysfs.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjubj@)}(hstruct drm_privacy_screen_ops { int (*set_sw_state)(struct drm_privacy_screen *priv, enum drm_privacy_screen_status sw_state); void (*get_hw_state)(struct drm_privacy_screen *priv); };h]hstruct drm_privacy_screen_ops { int (*set_sw_state)(struct drm_privacy_screen *priv, enum drm_privacy_screen_status sw_state); void (*get_hw_state)(struct drm_privacy_screen *priv); };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjubji)}(hhh](jn)}(hXF``set_sw_state`` Called to request a change of the privacy-screen state. The privacy-screen class code contains a check to avoid this getting called when the hw_state reports the state is locked. It is the driver's responsibility to update sw_state and hw_state. This is always called with the drm_privacy_screen's lock held. h](jt)}(h``set_sw_state``h]jz)}(hjh]h set_sw_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK hjubj)}(hhh]h)}(hX4Called to request a change of the privacy-screen state. The privacy-screen class code contains a check to avoid this getting called when the hw_state reports the state is locked. It is the driver's responsibility to update sw_state and hw_state. This is always called with the drm_privacy_screen's lock held.h]hX8Called to request a change of the privacy-screen state. The privacy-screen class code contains a check to avoid this getting called when the hw_state reports the state is locked. It is the driver’s responsibility to update sw_state and hw_state. This is always called with the drm_privacy_screen’s lock held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK hjubjn)}(h``get_hw_state`` Called to request that the driver gets the current privacy-screen state from the hardware and then updates sw_state and hw_state accordingly. This will be called by the core just before the privacy-screen is registered in sysfs.h](jt)}(h``get_hw_state``h]jz)}(hj h]h get_hw_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK'hjubj)}(hhh]h)}(hCalled to request that the driver gets the current privacy-screen state from the hardware and then updates sw_state and hw_state accordingly. This will be called by the core just before the privacy-screen is registered in sysfs.h]hCalled to request that the driver gets the current privacy-screen state from the hardware and then updates sw_state and hw_state accordingly. This will be called by the core just before the privacy-screen is registered in sysfs.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK%hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hK'hjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK+hjhhubh)}(hDefines the operations which the privacy-screen class code may call. These functions should be implemented by the privacy-screen driver.h]hDefines the operations which the privacy-screen class code may call. These functions should be implemented by the privacy-screen driver.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_privacy_screen (C struct)c.drm_privacy_screenhNtauh1jxhjhhhjhNubj)}(hhh](j)}(hdrm_privacy_screenh]j)}(hstruct drm_privacy_screenh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_privacy_screenh]j)}(hjh]hdrm_privacy_screen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h central privacy-screen structureh]h central privacy-screen structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK-hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhjhNubj)}(hXM**Definition**:: struct drm_privacy_screen { struct device dev; struct mutex lock; struct list_head list; struct blocking_notifier_head notifier_head; const struct drm_privacy_screen_ops *ops; enum drm_privacy_screen_status sw_state; enum drm_privacy_screen_status hw_state; void *drvdata; }; **Members** ``dev`` device used to register the privacy-screen in sysfs. ``lock`` mutex protection all fields in this struct. ``list`` privacy-screen devices list list-entry. ``notifier_head`` privacy-screen notifier head. ``ops`` :c:type:`struct drm_privacy_screen_ops ` for this privacy-screen. This is NULL if the driver has unregistered the privacy-screen. ``sw_state`` The privacy-screen's software state, see :ref:`Standard Connector Properties` for more info. ``hw_state`` The privacy-screen's hardware state, see :ref:`Standard Connector Properties` for more info. ``drvdata`` Private data owned by the privacy screen providerh](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK1hjubj@)}(hX3struct drm_privacy_screen { struct device dev; struct mutex lock; struct list_head list; struct blocking_notifier_head notifier_head; const struct drm_privacy_screen_ops *ops; enum drm_privacy_screen_status sw_state; enum drm_privacy_screen_status hw_state; void *drvdata; };h]hX3struct drm_privacy_screen { struct device dev; struct mutex lock; struct list_head list; struct blocking_notifier_head notifier_head; const struct drm_privacy_screen_ops *ops; enum drm_privacy_screen_status sw_state; enum drm_privacy_screen_status hw_state; void *drvdata; };}hj sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK3hjubh)}(h **Members**h]j%)}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK>hjubji)}(hhh](jn)}(h=``dev`` device used to register the privacy-screen in sysfs. h](jt)}(h``dev``h]jz)}(hj=h]hdev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK3hj7ubj)}(hhh]h)}(h4device used to register the privacy-screen in sysfs.h]h4device used to register the privacy-screen in sysfs.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhK3hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhK3hj4ubjn)}(h5``lock`` mutex protection all fields in this struct. h](jt)}(h``lock``h]jz)}(hjvh]hlock}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjpubj)}(hhh]h)}(h+mutex protection all fields in this struct.h]h+mutex protection all fields in this struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj4ubjn)}(h1``list`` privacy-screen devices list list-entry. h](jt)}(h``list``h]jz)}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjubj)}(hhh]h)}(h'privacy-screen devices list list-entry.h]h'privacy-screen devices list list-entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj4ubjn)}(h0``notifier_head`` privacy-screen notifier head. h](jt)}(h``notifier_head``h]jz)}(hjh]h notifier_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKhjubj)}(hhh]h)}(hprivacy-screen notifier head.h]hprivacy-screen notifier head.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj4ubjn)}(h``ops`` :c:type:`struct drm_privacy_screen_ops ` for this privacy-screen. This is NULL if the driver has unregistered the privacy-screen. h](jt)}(h``ops``h]jz)}(hj!h]hops}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK>hjubj)}(hhh]h)}(h:c:type:`struct drm_privacy_screen_ops ` for this privacy-screen. This is NULL if the driver has unregistered the privacy-screen.h](h)}(h@:c:type:`struct drm_privacy_screen_ops `h]jz)}(hj@h]hstruct drm_privacy_screen_ops}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screen_opsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK=hj:ubhY for this privacy-screen. This is NULL if the driver has unregistered the privacy-screen.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hK=hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hK>hj4ubjn)}(h``sw_state`` The privacy-screen's software state, see :ref:`Standard Connector Properties` for more info. h](jt)}(h ``sw_state``h]jz)}(hjzh]hsw_state}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKDhjtubj)}(hhh]h)}(h{The privacy-screen's software state, see :ref:`Standard Connector Properties` for more info.h](h+The privacy-screen’s software state, see }(hjhhhNhNubh)}(hC:ref:`Standard Connector Properties`h]j)}(hjh]hStandard Connector Properties}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjstandard_connector_propertiesuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKBhjubh for more info.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKBhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhKDhj4ubjn)}(h``hw_state`` The privacy-screen's hardware state, see :ref:`Standard Connector Properties` for more info. h](jt)}(h ``hw_state``h]jz)}(hjh]hhw_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKJhjubj)}(hhh]h)}(h{The privacy-screen's hardware state, see :ref:`Standard Connector Properties` for more info.h](h+The privacy-screen’s hardware state, see }(hjhhhNhNubh)}(hC:ref:`Standard Connector Properties`h]j)}(hjh]hStandard Connector Properties}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjstandard_connector_propertiesuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKHhjubh for more info.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKJhj4ubjn)}(h=``drvdata`` Private data owned by the privacy screen providerh](jt)}(h ``drvdata``h]jz)}(hj6h]hdrvdata}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKMhj0ubj)}(hhh]h)}(h1Private data owned by the privacy screen providerh]h1Private data owned by the privacy screen provider}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKNhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhKMhj4ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhKQhjhhubh)}(hCentral privacy-screen structure, this contains the struct device used to register the screen in sysfs, the screen's state, ops, etc.h]hCentral privacy-screen structure, this contains the struct device used to register the screen in sysfs, the screen’s state, ops, etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:464: ./include/drm/drm_privacy_screen_driver.hhK.hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_privacy_screen_lookup (C struct)c.drm_privacy_screen_lookuphNtauh1jxhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhNubj)}(hhh](j)}(hdrm_privacy_screen_lookuph]j)}(h struct drm_privacy_screen_lookuph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_privacy_screen_lookuph]j)}(hjh]hdrm_privacy_screen_lookup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h'static privacy-screen lookup list entryh]h'static privacy-screen lookup list entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhjhNubj)}(hX**Definition**:: struct drm_privacy_screen_lookup { struct list_head list; const char *dev_id; const char *con_id; const char *provider; }; **Members** ``list`` Lookup list list-entry. ``dev_id`` Consumer device name or NULL to match all devices. ``con_id`` Consumer connector name or NULL to match all connectors. ``provider`` dev_name() of the privacy_screen provider.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjubj@)}(hstruct drm_privacy_screen_lookup { struct list_head list; const char *dev_id; const char *con_id; const char *provider; };h]hstruct drm_privacy_screen_lookup { struct list_head list; const char *dev_id; const char *con_id; const char *provider; };}hj7sbah}(h]h ]h"]h$]h&]jjuh1j?hm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjubh)}(h **Members**h]j%)}(hjHh]hMembers}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjubji)}(hhh](jn)}(h!``list`` Lookup list list-entry. h](jt)}(h``list``h]jz)}(hjgh]hlist}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjaubj)}(hhh]h)}(hLookup list list-entry.h]hLookup list list-entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj|hKhj^ubjn)}(h>``dev_id`` Consumer device name or NULL to match all devices. h](jt)}(h ``dev_id``h]jz)}(hjh]hdev_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjubj)}(hhh]h)}(h2Consumer device name or NULL to match all devices.h]h2Consumer device name or NULL to match all devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj^ubjn)}(hD``con_id`` Consumer connector name or NULL to match all connectors. h](jt)}(h ``con_id``h]jz)}(hjh]hcon_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjubj)}(hhh]h)}(h8Consumer connector name or NULL to match all connectors.h]h8Consumer connector name or NULL to match all connectors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj^ubjn)}(h7``provider`` dev_name() of the privacy_screen provider.h](jt)}(h ``provider``h]jz)}(hjh]hprovider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhj ubj)}(hhh]h)}(h*dev_name() of the privacy_screen provider.h]h*dev_name() of the privacy_screen provider.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj'hKhj^ubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j%)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjhhubh)}(huUsed for the static lookup-list for mapping privacy-screen consumer dev-connector pairs to a privacy-screen provider.h]huUsed for the static lookup-list for mapping privacy-screen consumer dev-connector pairs to a privacy-screen provider.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./include/drm/drm_privacy_screen_machine.hhKhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_privacy_screen_lookup_add (C function)c.drm_privacy_screen_lookup_addhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMvoid drm_privacy_screen_lookup_add (struct drm_privacy_screen_lookup *lookup)h]j)}(hLvoid drm_privacy_screen_lookup_add(struct drm_privacy_screen_lookup *lookup)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK7ubj)}(hdrm_privacy_screen_lookup_addh]j)}(hdrm_privacy_screen_lookup_addh]hdrm_privacy_screen_lookup_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK7ubj)}(h*(struct drm_privacy_screen_lookup *lookup)h]j)}(h(struct drm_privacy_screen_lookup *lookuph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_privacy_screen_lookuph]hdrm_privacy_screen_lookup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_privacy_screen_lookup_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hlookuph]hlookup}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK7ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK7ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK7hjhhubj)}(hhh]h)}(h5add an entry to the static privacy-screen lookup listh]h5add an entry to the static privacy-screen lookup list}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK-hjPhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK7ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhjhNhNubj)}(hX'**Parameters** ``struct drm_privacy_screen_lookup *lookup`` lookup list entry to add **Description** Add an entry to the static privacy-screen lookup list. Note the :c:type:`struct list_head ` which is part of the :c:type:`struct drm_privacy_screen_lookup ` gets added to a list owned by the privacy-screen core. So the passed in :c:type:`struct drm_privacy_screen_lookup ` must not be free-ed until it is removed from the lookup list by calling drm_privacy_screen_lookup_remove().h](h)}(h**Parameters**h]j%)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK1hjoubji)}(hhh]jn)}(hF``struct drm_privacy_screen_lookup *lookup`` lookup list entry to add h](jt)}(h,``struct drm_privacy_screen_lookup *lookup``h]jz)}(hjh]h(struct drm_privacy_screen_lookup *lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK/hjubj)}(hhh]h)}(hlookup list entry to addh]hlookup list entry to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK/hjubah}(h]h ]h"]h$]h&]uh1jhhjoubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK1hjoubh)}(hXAdd an entry to the static privacy-screen lookup list. Note the :c:type:`struct list_head ` which is part of the :c:type:`struct drm_privacy_screen_lookup ` gets added to a list owned by the privacy-screen core. So the passed in :c:type:`struct drm_privacy_screen_lookup ` must not be free-ed until it is removed from the lookup list by calling drm_privacy_screen_lookup_remove().h](h@Add an entry to the static privacy-screen lookup list. Note the }(hjhhhNhNubh)}(h&:c:type:`struct list_head `h]jz)}(hjh]hstruct list_head}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK1hjubh which is part of the }(hjhhhNhNubh)}(hF:c:type:`struct drm_privacy_screen_lookup `h]jz)}(hjh]h struct drm_privacy_screen_lookup}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screen_lookupuh1hhj hK1hjubhI gets added to a list owned by the privacy-screen core. So the passed in }(hjhhhNhNubh)}(hF:c:type:`struct drm_privacy_screen_lookup `h]jz)}(hj6h]h struct drm_privacy_screen_lookup}(hj8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screen_lookupuh1hhj hK1hjubhl must not be free-ed until it is removed from the lookup list by calling drm_privacy_screen_lookup_remove().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK1hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_privacy_screen_lookup_remove (C function)"c.drm_privacy_screen_lookup_removehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hPvoid drm_privacy_screen_lookup_remove (struct drm_privacy_screen_lookup *lookup)h]j)}(hOvoid drm_privacy_screen_lookup_remove(struct drm_privacy_screen_lookup *lookup)h](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhKGubj)}(h drm_privacy_screen_lookup_removeh]j)}(h drm_privacy_screen_lookup_removeh]h drm_privacy_screen_lookup_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhKGubj)}(h*(struct drm_privacy_screen_lookup *lookup)h]j)}(h(struct drm_privacy_screen_lookup *lookuph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_privacy_screen_lookuph]hdrm_privacy_screen_lookup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb"c.drm_privacy_screen_lookup_removeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hlookuph]hlookup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhKGubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjhKGubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhKGhjrhhubj)}(hhh]h)}(h8remove an entry to the static privacy-screen lookup listh]h8remove an entry to the static privacy-screen lookup list}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chK@hj:hhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhKGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_privacy_screen_lookup *lookup`` lookup list entry to remove **Description** Remove an entry previously added with drm_privacy_screen_lookup_add() from the static privacy-screen lookup list.h](h)}(h**Parameters**h]j%)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKDhjYubji)}(hhh]jn)}(hI``struct drm_privacy_screen_lookup *lookup`` lookup list entry to remove h](jt)}(h,``struct drm_privacy_screen_lookup *lookup``h]jz)}(hj~h]h(struct drm_privacy_screen_lookup *lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKBhjxubj)}(hhh]h)}(hlookup list entry to removeh]hlookup list entry to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKBhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhKBhjuubah}(h]h ]h"]h$]h&]uh1jhhjYubh)}(h**Description**h]j%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKDhjYubh)}(hqRemove an entry previously added with drm_privacy_screen_lookup_add() from the static privacy-screen lookup list.h]hqRemove an entry previously added with drm_privacy_screen_lookup_add() from the static privacy-screen lookup list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKDhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_privacy_screen_get (C function)c.drm_privacy_screen_gethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h[struct drm_privacy_screen * drm_privacy_screen_get (struct device *dev, const char *con_id)h]j)}(hYstruct drm_privacy_screen *drm_privacy_screen_get(struct device *dev, const char *con_id)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKsubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKsubh)}(hhh]j)}(hdrm_privacy_screenh]hdrm_privacy_screen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_privacy_screen_getsbc.drm_privacy_screen_getasbuh1hhjhhhj hKsubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKsubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj hKsubj)}(hdrm_privacy_screen_geth]j)}(hj;h]hdrm_privacy_screen_get}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKsubj)}(h((struct device *dev, const char *con_id)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9c.drm_privacy_screen_getasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(hconst char *con_idh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcon_idh]hcon_id}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hKsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hKshjhhubj)}(hhh]h)}(hget a privacy-screen providerh]hget a privacy-screen provider}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKfhjS hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjn jjn jjjuh1jhhhjhNhNubj)}(hXi**Parameters** ``struct device *dev`` consumer-device for which to get a privacy-screen provider ``const char *con_id`` (video)connector name for which to get a privacy-screen provider **Description** Get a privacy-screen provider for a privacy-screen attached to the display described by the **dev** and **con_id** parameters. **Return** * A pointer to a :c:type:`struct drm_privacy_screen ` on success. * ERR_PTR(-ENODEV) if no matching privacy-screen is found * ERR_PTR(-EPROBE_DEFER) if there is a matching privacy-screen, but it has not been registered yet.h](h)}(h**Parameters**h]j%)}(hjx h]h Parameters}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjv ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKjhjr ubji)}(hhh](jn)}(hR``struct device *dev`` consumer-device for which to get a privacy-screen provider h](jt)}(h``struct device *dev``h]jz)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKghj ubj)}(hhh]h)}(h:consumer-device for which to get a privacy-screen providerh]h:consumer-device for which to get a privacy-screen provider}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKghj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hKghj ubjn)}(hX``const char *con_id`` (video)connector name for which to get a privacy-screen provider h](jt)}(h``const char *con_id``h]jz)}(hj h]hconst char *con_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKhhj ubj)}(hhh]h)}(h@(video)connector name for which to get a privacy-screen providerh]h@(video)connector name for which to get a privacy-screen provider}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hKhhj ubeh}(h]h ]h"]h$]h&]uh1jhhjr ubh)}(h**Description**h]j%)}(hj !h]h Description}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj !ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKjhjr ubh)}(h~Get a privacy-screen provider for a privacy-screen attached to the display described by the **dev** and **con_id** parameters.h](h\Get a privacy-screen provider for a privacy-screen attached to the display described by the }(hj!!hhhNhNubj%)}(h**dev**h]hdev}(hj)!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!!ubh and }(hj!!hhhNhNubj%)}(h **con_id**h]hcon_id}(hj;!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!!ubh parameters.}(hj!!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKjhjr ubh)}(h **Return**h]j%)}(hjV!h]hReturn}(hjX!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjT!ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKmhjr ubh)}(hhh](h)}(hSA pointer to a :c:type:`struct drm_privacy_screen ` on success.h]h)}(hjq!h](hA pointer to a }(hjs!hhhNhNubh)}(h8:c:type:`struct drm_privacy_screen `h]jz)}(hj|!h]hstruct drm_privacy_screen}(hj~!hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjz!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screenuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKmhjs!ubh on success.}(hjs!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hKmhjo!ubah}(h]h ]h"]h$]h&]uh1hhjl!ubh)}(h7ERR_PTR(-ENODEV) if no matching privacy-screen is foundh]h)}(hj!h]h7ERR_PTR(-ENODEV) if no matching privacy-screen is found}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKnhj!ubah}(h]h ]h"]h$]h&]uh1hhjl!ubh)}(hxERR_PTR(-EPROBE_DEFER) if there is a matching privacy-screen, but it has not been registered yet.h]ji)}(hhh]jn)}(haERR_PTR(-EPROBE_DEFER) if there is a matching privacy-screen, but it has not been registered yet.h](jt)}(h=ERR_PTR(-EPROBE_DEFER) if there is a matching privacy-screen,h]h=ERR_PTR(-EPROBE_DEFER) if there is a matching privacy-screen,}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKohj!ubj)}(hhh]h)}(h#but it has not been registered yet.h]h#but it has not been registered yet.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKphj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj!hKohj!ubah}(h]h ]h"]h$]h&]uh1jhhj!ubah}(h]h ]h"]h$]h&]uh1hhjl!ubeh}(h]h ]h"]h$]h&]j8j9uh1hhj!hKmhjr ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_privacy_screen_put (C function)c.drm_privacy_screen_puthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=void drm_privacy_screen_put (struct drm_privacy_screen *priv)h]j)}(h(ubj)}(hhh]h)}(h;address where to store the privacy-screens current hw-stateh]h;address where to store the privacy-screens current hw-state}(hj](hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY(hKhjZ(ubah}(h]h ]h"]h$]h&]uh1jhj>(ubeh}(h]h ]h"]h$]h&]uh1jmhjY(hKhj'ubeh}(h]h ]h"]h$]h&]uh1jhhj'ubh)}(h**Description**h]j%)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}(ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKhj'ubh)}(hNGet the current state of a privacy-screen, both the sw-state and the hw-state.h]hNGet the current state of a privacy-screen, both the sw-state and the hw-state.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chKhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_privacy_screen_register_notifier (C function)&c.drm_privacy_screen_register_notifierhNtauh1jxhjhhhNhNubj)}(hhh](j)}(heint drm_privacy_screen_register_notifier (struct drm_privacy_screen *priv, struct notifier_block *nb)h]j)}(hdint drm_privacy_screen_register_notifier(struct drm_privacy_screen *priv, struct notifier_block *nb)h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hMubj)}(h$drm_privacy_screen_register_notifierh]j)}(h$drm_privacy_screen_register_notifierh]h$drm_privacy_screen_register_notifier}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj(hMubj)}(h<(struct drm_privacy_screen *priv, struct notifier_block *nb)h](j)}(hstruct drm_privacy_screen *privh](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hdrm_privacy_screenh]hdrm_privacy_screen}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!)modnameN classnameNjj)}j]j%)}jj(sb&c.drm_privacy_screen_register_notifierasbuh1hhj(ubj)}(h h]h }(hj?)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj9)}(hj9h]h*}(hjM)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(hprivh]hpriv}(hjZ)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(hstruct notifier_block *nbh](j)}(hjh]hstruct}(hjs)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo)ubh)}(hhh]j)}(hnotifier_blockh]hnotifier_block}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j;)&c.drm_privacy_screen_register_notifierasbuh1hhjo)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo)ubj9)}(hj9h]h*}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjo)ubj)}(hnbh]hnb}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj(hhhj(hMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jhj(hMhj(hhubj)}(hhh]h)}(hregister a notifierh]hregister a notifier}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj *jj *jjjuh1jhhhjhNhNubj)}(hXv**Parameters** ``struct drm_privacy_screen *priv`` Privacy screen to register the notifier with ``struct notifier_block *nb`` Notifier-block for the notifier to register **Description** Register a notifier with the privacy-screen to be notified of changes made to the privacy-screen state from outside of the privacy-screen class. E.g. the state may be changed by the hardware itself in response to a hotkey press. The notifier is called with no locks held. The new hw_state and sw_state can be retrieved using the drm_privacy_screen_get_state() function. A pointer to the drm_privacy_screen's struct is passed as the ``void *data`` argument of the notifier_block's notifier_call. The notifier will NOT be called when changes are made through drm_privacy_screen_set_sw_state(). It is only called for external changes. **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM hj*ubji)}(hhh](jn)}(hQ``struct drm_privacy_screen *priv`` Privacy screen to register the notifier with h](jt)}(h#``struct drm_privacy_screen *priv``h]jz)}(hj5*h]hstruct drm_privacy_screen *priv}(hj7*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3*ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj/*ubj)}(hhh]h)}(h,Privacy screen to register the notifier withh]h,Privacy screen to register the notifier with}(hjN*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ*hMhjK*ubah}(h]h ]h"]h$]h&]uh1jhj/*ubeh}(h]h ]h"]h$]h&]uh1jmhjJ*hMhj,*ubjn)}(hJ``struct notifier_block *nb`` Notifier-block for the notifier to register h](jt)}(h``struct notifier_block *nb``h]jz)}(hjn*h]hstruct notifier_block *nb}(hjp*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjl*ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhjh*ubj)}(hhh]h)}(h+Notifier-block for the notifier to registerh]h+Notifier-block for the notifier to register}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjh*ubeh}(h]h ]h"]h$]h&]uh1jmhj*hMhj,*ubeh}(h]h ]h"]h$]h&]uh1jhhj*ubh)}(h**Description**h]j%)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM hj*ubh)}(hRegister a notifier with the privacy-screen to be notified of changes made to the privacy-screen state from outside of the privacy-screen class. E.g. the state may be changed by the hardware itself in response to a hotkey press.h]hRegister a notifier with the privacy-screen to be notified of changes made to the privacy-screen state from outside of the privacy-screen class. E.g. the state may be changed by the hardware itself in response to a hotkey press.Q}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM hj*ubh)}(hX The notifier is called with no locks held. The new hw_state and sw_state can be retrieved using the drm_privacy_screen_get_state() function. A pointer to the drm_privacy_screen's struct is passed as the ``void *data`` argument of the notifier_block's notifier_call.h](hThe notifier is called with no locks held. The new hw_state and sw_state can be retrieved using the drm_privacy_screen_get_state() function. A pointer to the drm_privacy_screen’s struct is passed as the }(hj*hhhNhNubjz)}(h``void *data``h]h void *data}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*ubh2 argument of the notifier_block’s notifier_call.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj*ubh)}(hThe notifier will NOT be called when changes are made through drm_privacy_screen_set_sw_state(). It is only called for external changes.h]hThe notifier will NOT be called when changes are made through drm_privacy_screen_set_sw_state(). It is only called for external changes.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj*ubh)}(h **Return**h]j%)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj*ubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_privacy_screen_unregister_notifier (C function)(c.drm_privacy_screen_unregister_notifierhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hgint drm_privacy_screen_unregister_notifier (struct drm_privacy_screen *priv, struct notifier_block *nb)h]j)}(hfint drm_privacy_screen_unregister_notifier(struct drm_privacy_screen *priv, struct notifier_block *nb)h](j)}(hinth]hint}(hjE+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA+hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM(ubj)}(h h]h }(hjT+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA+hhhjS+hM(ubj)}(h&drm_privacy_screen_unregister_notifierh]j)}(h&drm_privacy_screen_unregister_notifierh]h&drm_privacy_screen_unregister_notifier}(hjf+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjA+hhhjS+hM(ubj)}(h<(struct drm_privacy_screen *priv, struct notifier_block *nb)h](j)}(hstruct drm_privacy_screen *privh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~+ubh)}(hhh]j)}(hdrm_privacy_screenh]hdrm_privacy_screen}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j%)}jjh+sb(c.drm_privacy_screen_unregister_notifierasbuh1hhj~+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~+ubj9)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~+ubj)}(hprivh]hpriv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz+ubj)}(hstruct notifier_block *nbh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hnotifier_blockh]hnotifier_block}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j+(c.drm_privacy_screen_unregister_notifierasbuh1hhj+ubj)}(h h]h }(hj0,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hj>,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hnbh]hnb}(hjK,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjz+ubeh}(h]h ]h"]h$]h&]jjuh1jhjA+hhhjS+hM(ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj=+hhhjS+hM(ubah}(h]j8+ah ](jjeh"]h$]h&]jj)jhuh1jhjS+hM(hj:+hhubj)}(hhh]h)}(hunregister a notifierh]hunregister a notifier}(hju,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM hjr,hhubah}(h]h ]h"]h$]h&]uh1jhj:+hhhjS+hM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhjhNhNubj)}(hXJ**Parameters** ``struct drm_privacy_screen *priv`` Privacy screen to register the notifier with ``struct notifier_block *nb`` Notifier-block for the notifier to register **Description** Unregister a notifier registered with drm_privacy_screen_register_notifier(). **Return** 0 on success, negative error code on failure.h](h)}(h**Parameters**h]j%)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM$hj,ubji)}(hhh](jn)}(hQ``struct drm_privacy_screen *priv`` Privacy screen to register the notifier with h](jt)}(h#``struct drm_privacy_screen *priv``h]jz)}(hj,h]hstruct drm_privacy_screen *priv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM!hj,ubj)}(hhh]h)}(h,Privacy screen to register the notifier withh]h,Privacy screen to register the notifier with}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM!hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hM!hj,ubjn)}(hJ``struct notifier_block *nb`` Notifier-block for the notifier to register h](jt)}(h``struct notifier_block *nb``h]jz)}(hj,h]hstruct notifier_block *nb}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM"hj,ubj)}(hhh]h)}(h+Notifier-block for the notifier to registerh]h+Notifier-block for the notifier to register}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM"hj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj-hM"hj,ubeh}(h]h ]h"]h$]h&]uh1jhhj,ubh)}(h**Description**h]j%)}(hj*-h]h Description}(hj,-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(-ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM$hj,ubh)}(hMUnregister a notifier registered with drm_privacy_screen_register_notifier().h]hMUnregister a notifier registered with drm_privacy_screen_register_notifier().}(hj@-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM$hj,ubh)}(h **Return**h]j%)}(hjQ-h]hReturn}(hjS-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjO-ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM&hj,ubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjg-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM&hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_privacy_screen_register (C function)c.drm_privacy_screen_registerhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hstruct drm_privacy_screen * drm_privacy_screen_register (struct device *parent, const struct drm_privacy_screen_ops *ops, void *data)h]j)}(hstruct drm_privacy_screen *drm_privacy_screen_register(struct device *parent, const struct drm_privacy_screen_ops *ops, void *data)h](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hMubh)}(hhh]j)}(hdrm_privacy_screenh]hdrm_privacy_screen}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j%)}jdrm_privacy_screen_registersbc.drm_privacy_screen_registerasbuh1hhj-hhhj-hMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hMubj9)}(hj9h]h*}(hj-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-hhhj-hMubj)}(hdrm_privacy_screen_registerh]j)}(hj-h]hdrm_privacy_screen_register}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj-hMubj)}(hM(struct device *parent, const struct drm_privacy_screen_ops *ops, void *data)h](j)}(hstruct device *parenth](j)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubh)}(hhh]j)}(hdeviceh]hdevice}(hj..hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0.modnameN classnameNjj)}j]j-c.drm_privacy_screen_registerasbuh1hhj .ubj)}(h h]h }(hjL.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubj9)}(hj9h]h*}(hjZ.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj .ubj)}(hparenth]hparent}(hjg.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h(const struct drm_privacy_screen_ops *opsh](j)}(hjch]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubj)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubh)}(hhh]j)}(hdrm_privacy_screen_opsh]hdrm_privacy_screen_ops}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j-c.drm_privacy_screen_registerasbuh1hhj|.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubj9)}(hj9h]h*}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj|.ubj)}(hopsh]hops}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubj)}(h void *datah](j)}(hvoidh]hvoid}(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hj'/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hdatah]hdata}(hj4/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubeh}(h]h ]h"]h$]h&]jjuh1jhj-hhhj-hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhj-hMubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhj-hMhj-hhubj)}(hhh]h)}(hregister a privacy-screenh]hregister a privacy-screen}(hj^/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM{hj[/hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjv/jjv/jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct device *parent`` parent-device for the privacy-screen ``const struct drm_privacy_screen_ops *ops`` :c:type:`struct drm_privacy_screen_ops ` pointer with ops for the privacy-screen ``void *data`` Private data owned by the privacy screen provider **Description** Create and register a privacy-screen. **Return** * A pointer to the created privacy-screen on success. * An ERR_PTR(errno) on failure.h](h)}(h**Parameters**h]j%)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj~/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhjz/ubji)}(hhh](jn)}(h?``struct device *parent`` parent-device for the privacy-screen h](jt)}(h``struct device *parent``h]jz)}(hj/h]hstruct device *parent}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM|hj/ubj)}(hhh]h)}(h$parent-device for the privacy-screenh]h$parent-device for the privacy-screen}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM|hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hM|hj/ubjn)}(h``const struct drm_privacy_screen_ops *ops`` :c:type:`struct drm_privacy_screen_ops ` pointer with ops for the privacy-screen h](jt)}(h,``const struct drm_privacy_screen_ops *ops``h]jz)}(hj/h]h(const struct drm_privacy_screen_ops *ops}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM}hj/ubj)}(hhh]h)}(hh:c:type:`struct drm_privacy_screen_ops ` pointer with ops for the privacy-screenh](h)}(h@:c:type:`struct drm_privacy_screen_ops `h]jz)}(hj/h]hstruct drm_privacy_screen_ops}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screen_opsuh1hhj/hM}hj/ubh( pointer with ops for the privacy-screen}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hM}hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hM}hj/ubjn)}(hA``void *data`` Private data owned by the privacy screen provider h](jt)}(h``void *data``h]jz)}(hj00h]h void *data}(hj20hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.0ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chM~hj*0ubj)}(hhh]h)}(h1Private data owned by the privacy screen providerh]h1Private data owned by the privacy screen provider}(hjI0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE0hM~hjF0ubah}(h]h ]h"]h$]h&]uh1jhj*0ubeh}(h]h ]h"]h$]h&]uh1jmhjE0hM~hj/ubeh}(h]h ]h"]h$]h&]uh1jhhjz/ubh)}(h**Description**h]j%)}(hjk0h]h Description}(hjm0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hji0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhjz/ubh)}(h%Create and register a privacy-screen.h]h%Create and register a privacy-screen.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhjz/ubh)}(h **Return**h]j%)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhjz/ubh)}(hhh](h)}(h3A pointer to the created privacy-screen on success.h]h)}(hj0h]h3A pointer to the created privacy-screen on success.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj0ubah}(h]h ]h"]h$]h&]uh1hhj0ubh)}(hAn ERR_PTR(errno) on failure.h]h)}(hj0h]hAn ERR_PTR(errno) on failure.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj0ubah}(h]h ]h"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]j8j9uh1hhj0hMhjz/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_privacy_screen_unregister (C function)c.drm_privacy_screen_unregisterhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hDvoid drm_privacy_screen_unregister (struct drm_privacy_screen *priv)h]j)}(hCvoid drm_privacy_screen_unregister(struct drm_privacy_screen *priv)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj1hMubj)}(hdrm_privacy_screen_unregisterh]j)}(hdrm_privacy_screen_unregisterh]hdrm_privacy_screen_unregister}(hj"1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhj1hMubj)}(h!(struct drm_privacy_screen *priv)h]j)}(hstruct drm_privacy_screen *privh](j)}(hjh]hstruct}(hj>1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1ubj)}(h h]h }(hjK1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1ubh)}(hhh]j)}(hdrm_privacy_screenh]hdrm_privacy_screen}(hj\1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^1modnameN classnameNjj)}j]j%)}jj$1sbc.drm_privacy_screen_unregisterasbuh1hhj:1ubj)}(h h]h }(hj|1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1ubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:1ubj)}(hprivh]hpriv}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj61ubah}(h]h ]h"]h$]h&]jjuh1jhj0hhhj1hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhj1hMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhj1hMhj0hhubj)}(hhh]h)}(hunregister privacy-screenh]hunregister privacy-screen}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_privacy_screen *priv`` privacy-screen to unregister **Description** Unregister a privacy-screen registered with drm_privacy_screen_register(). May be called with a NULL or ERR_PTR, in which case it is a no-op.h](h)}(h**Parameters**h]j%)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj1ubji)}(hhh]jn)}(hA``struct drm_privacy_screen *priv`` privacy-screen to unregister h](jt)}(h#``struct drm_privacy_screen *priv``h]jz)}(hj2h]hstruct drm_privacy_screen *priv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj1ubj)}(hhh]h)}(hprivacy-screen to unregisterh]hprivacy-screen to unregister}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhj1ubah}(h]h ]h"]h$]h&]uh1jhhj1ubh)}(h**Description**h]j%)}(hj=2h]h Description}(hj?2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;2ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj1ubh)}(hUnregister a privacy-screen registered with drm_privacy_screen_register(). May be called with a NULL or ERR_PTR, in which case it is a no-op.h]hUnregister a privacy-screen registered with drm_privacy_screen_register(). May be called with a NULL or ERR_PTR, in which case it is a no-op.}(hjS2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_privacy_screen_call_notifier_chain (C function)(c.drm_privacy_screen_call_notifier_chainhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMvoid drm_privacy_screen_call_notifier_chain (struct drm_privacy_screen *priv)h]j)}(hLvoid drm_privacy_screen_call_notifier_chain(struct drm_privacy_screen *priv)h](j)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~2hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~2hhhj2hMubj)}(h&drm_privacy_screen_call_notifier_chainh]j)}(h&drm_privacy_screen_call_notifier_chainh]h&drm_privacy_screen_call_notifier_chain}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~2hhhj2hMubj)}(h!(struct drm_privacy_screen *priv)h]j)}(hstruct drm_privacy_screen *privh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(hdrm_privacy_screenh]hdrm_privacy_screen}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jj2sb(c.drm_privacy_screen_call_notifier_chainasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(hj9h]h*}(hj 3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubj)}(hprivh]hpriv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhj~2hhhj2hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjz2hhhj2hMubah}(h]ju2ah ](jjeh"]h$]h&]jj)jhuh1jhj2hMhjw2hhubj)}(hhh]h)}(h notify consumers of state changeh]h notify consumers of state change}(hjB3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj?3hhubah}(h]h ]h"]h$]h&]uh1jhjw2hhhj2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZ3jjZ3jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_privacy_screen *priv`` Privacy screen to register the notifier with **Description** A privacy-screen provider driver can call this functions upon external changes to the privacy-screen state. E.g. the state may be changed by the hardware itself in response to a hotkey press. This function must be called without holding the privacy-screen lock. the driver must update sw_state and hw_state to reflect the new state before calling this function. The expected behavior from the driver upon receiving an external state change event is: 1. Take the lock; 2. Update sw_state and hw_state; 3. Release the lock. 4. Call drm_privacy_screen_call_notifier_chain().h](h)}(h**Parameters**h]j%)}(hjd3h]h Parameters}(hjf3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjb3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj^3ubji)}(hhh]jn)}(hQ``struct drm_privacy_screen *priv`` Privacy screen to register the notifier with h](jt)}(h#``struct drm_privacy_screen *priv``h]jz)}(hj3h]hstruct drm_privacy_screen *priv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj}3ubj)}(hhh]h)}(h,Privacy screen to register the notifier withh]h,Privacy screen to register the notifier with}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj}3ubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhjz3ubah}(h]h ]h"]h$]h&]uh1jhhj^3ubh)}(h**Description**h]j%)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj^3ubh)}(hX;A privacy-screen provider driver can call this functions upon external changes to the privacy-screen state. E.g. the state may be changed by the hardware itself in response to a hotkey press. This function must be called without holding the privacy-screen lock. the driver must update sw_state and hw_state to reflect the new state before calling this function. The expected behavior from the driver upon receiving an external state change event is: 1. Take the lock; 2. Update sw_state and hw_state; 3. Release the lock. 4. Call drm_privacy_screen_call_notifier_chain().h]hX;A privacy-screen provider driver can call this functions upon external changes to the privacy-screen state. E.g. the state may be changed by the hardware itself in response to a hotkey press. This function must be called without holding the privacy-screen lock. the driver must update sw_state and hw_state to reflect the new state before calling this function. The expected behavior from the driver upon receiving an external state change event is: 1. Take the lock; 2. Update sw_state and hw_state; 3. Release the lock. 4. Call drm_privacy_screen_call_notifier_chain().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_privacy_screen.chMhj^3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]privacy-screen-classah ]h"]privacy-screen classah$]h&]uh1hhhhhhhhMubeh}(h]mode-setting-helper-functionsah ]h"]mode setting helper functionsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj4error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}(j:]j:ajA]j7aj]jaunameids}(j3j3j:j:jj:jjoverviewNj<j<j-j*jsjpjjjjjn9jk9jqsjnsjjjjjGjDjjAjjjujrjjj0j-jjjwjwjFxjCxj`{j]{jjjhjjgjdjjjjjj|jjjjjjjWjTj`j]jjjwjwjjjjjhjhjjjjj-j-j3@j0@jjjjjj}j]jZjjjjjjj3j3u nametypes}(j3j:jjjd4j<j-jsjjjn9jqsjjjGjjjujj0jjwjFxj`{jjhjgjjjjjjjWj`jjwjjjhjjj-j3@jjjj]jjjj3uh}(j3hj:j:jjjjjjjRjWjjj)j)j+j+jE6jJ6jr8jw8j:j:jj:j;j:j<j;j*j<j=j =j>j>j?j?jAjAjCjCj9Fj>FjKjKjNj#NjRjRj2Tj7TjVjWjZjZj\j\j^j^jL`jQ`jbjbjejejgjgjijijkjkjLmjQmjojojqjqjtjtjWxj\xjzj!zj{j{j}j}jVj[jjjjjujzjjjCjHjjjjjj jYj^jѝj֝jOjTjjjzjj3j8j4j9jjjjjJjOjjjpj0jjvjjjϾjԾjrjwj-j2jWj\jjjjjjjjjjjXj]jjj>jCjjjjj%j*jjjjjj jjjjjjjjjKjPjujzjjjjjjjjjBjGjjjqjwj!j&jjjjjojtjj#jjj|jjsjxjjjjjB jG j j jjj]jbj&j+jjjjjj jjjjjk9jj j j*j*j*,j/,jZ.j_.jO1jT1j3j3jnsjq9jB:jH:j<j<j>j>jDjDjDjDjCFjHFjGjGjIjIjzKjKjNjNjsPjxPjRjRjTjUj~VjVjXjXjYjYj\j\j^j^j2`j7`jZbj_bjdjdjgjgjhjhjjjjj njnj1pj6pjqjqjjtsjsjsjujuj{wjwjDzjIzj{j{j~j~jƃj˃jjjjjjjojtj"j'jզjڦjjj;j@jjjjjTjYjj jjjj jjjjjSjXjjjpjujCjHjDjjjjjjhjmjsjxjcjhjj jj jj jujzjjj j j. j3 jAjJjjJjj[jrjjjxj-j jj3jwjjjjjjf4jk4j@6jE6j8j8jp@ju@jPBjUBjDj#DjEjEjBGjGGjHjHjKjKj[Lj`Lj!Pj&PjSjSjWj!WjYjYj]j]j4`j9`jbjbjIfjNfjBhjGhjjjjjmjmjoqjtqj"sj'sjNujSujCxjwj]{jIxjfxjkxjjc{j{j{j}j }jujzjj#jyj~jjjjjڋjߋjjĎjjjjjjjdjjjjbjgjojtj̡jѡjMjRjΤjӤjvj{jj#jƩj˩jnjsjjĭjj jsjxjjjjj[j`jjjüjȼjjjjmjjjjjjjjjjjj jjjjj|jjjjjjjjNjSj9j>jvj{j^jcjj"jjjFjKj_jdjjjjjjjsjxjj$jjjjj%j*jjjjjjjjjjjjj j j j jj#j[j`jUjZjmjrjjj=jBj j j$j$j&j&j(j(j+j+jR.jW.j1j1j4j4j7j7je:jj:j<j<j?j?jECjJCj\EjaEjIjIj7LjjCjjj@jEjjjjjbjgjPjUjЕjՕjAjFjjj3j8jjj4j9jDjIjGjLjȤjͤjjjjjGjLjj jQjVj j%jUjZjjjjjjj/j4jYj^jjjjj:j?jmjrjjj@jEjjjAjFjjjvj{jjjj$jjjjjTjj]jZjjcjwjjjjjjJjOjjj#j(jsjxjjj j j6j;jIjNj\jaj&j+jCjHjjjjjjj!j!j"%j'%j'j'j[)j`)j+j+j-j-jP/jU/j0j0j(3j-3jx6j}6j7j7ju;jz;j>j>jAjAjEjEjIjIjKj KjLjLjPjPjQjQjSjSj9Uj>UjbWjgWjZjZj\j\j_j_jdjdjfjfjijijljljnjnjrjrjtjtjujujjwj xjxj'zj,zjD|jI|j~j~jjjjj,j1jjjjjjjDjIjjjSjXjojtj&j+j7j<jjj1j6j~jjjj?jDjªjǪjj#j®jǮjװjܰjjj=jBjjjHjMjjjjj?jDjTjYjjjdjijhjj?jDjjjojtj/j4jjjLjQjjjjjVj[jljqjjjjjjjj jjjjj\jajjj(j-jjjQjVjjjjjgjljjjj jjj-j2jhjmj}jjjj j jz j jjjjjjjqjvj jj\jajm"jr"j$j$j%j%j'j'j)j)j+j+j+-j0-j.j.j{0j0j%3j*3j5j5j8j8j<:jA:je<jj<j>j>j@j@jBjBjDjDjFjFjJj JjKjKjvMj{MjNjNjxPj}PjQjQjzSjSjUjUjWjWjsXjxXjYjYj[j[j]j]j{`j`jbjcjejej*gj/gjjhjhjhjjjjjtjujjjujzj9j>jjjjjjjNjSjkjpjjjjjLjQjjjjjZj_jj j˚jКjjj3j8jjjbjgjjjjjojj jvj{j?jDj6j;j<jAjsjxj߷jjjjMjRj-jj$j)jjj(j-j$j)jjj^jcj j%jjjjjkjpjjjjjzjjj j-j2jjjj"j<jAjjjjj@jEjjjjjnjsjj"jjjj jfjkjj jjjjjjjjjwj|j j j j j3 j8 jjjLjQjUjZjjjj jjjjj j j!j!jl#jq#j$j%j&j&jZ(j_(j*j*j0@j-j-j-j0j0j13j63ji6jn6j9j9jc;jh;jw=j|=jj6@ja@jg@jBj BjRDjWDjEjEj=GjBGj JjJjLjLjgOjlOjPjPjSjSjtVjyVjWjWjYjYjl\jq\j_j"_jbj"bjcjcj.ej3ejgjgjjjjj,lj1ljmjmjypj~pj*sj/sjujujxjxj\{ja{j'~j,~jjjjjjjjjGjLjJjOjjjjj+j0jjjjj$j)jjjQjVjjjjj%j*jDjIjájȡjjj6j;j̫jѫjbjgjڱj߱jTjYj}jjjjHjMjDjIjnjsjj jZjjjj0j5jj#jjjjjj`jjjjjjjjjjjjjfjkjjjUjZjjjjjjj5j:jjj;j@jjjjjwj|jBjGjjj j jV j[ jjj-j2jjj3jjjjjjjjjjpjujjj"j$"j#j#j%j%j(j(j8+j=+j-j-j0j0ju2jz2jjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j+4KsRparse_messages](hsystem_message)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]jalevelKtypeINFOsourcehlineKuh1j4hj[hhhhhKubj4)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]jalevelKtypej4sourcehlineMuh1j4hjhhhhhMubetransform_messages](j4)}(hhh]h)}(hhh]h7Hyperlink target "drm-atomic-helper" is not referenced.}hj4sbah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]levelKtypej4sourcehlineK-uh1j4ubj4)}(hhh]h)}(hhh]h1Hyperlink target "drm-bridges" is not referenced.}hj4sbah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]levelKtypej4sourcehlineKuh1j4ubj4)}(hhh]h)}(hhh]h6Hyperlink target "drm-panel-helper" is not referenced.}hj4sbah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]levelKtypej4sourcehlineKuh1j4ube transformerN include_log] decorationNhhub.