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.h9hMhj: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.hhMMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhjmhMMubj)}(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[hhhjmhMMubj)}(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[hhhjmhMMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjmhMMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jhjmhMMhjThhubj)}(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&]uh1jhjThhhjmhMMubeh}(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)}(hXS0**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.chK4hj: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.chK:hj: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.chKFhj: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 ;hKFhj: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 ;hKFhj: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 ;hKFhj:ubh' function table with the plane helpers.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ;hKFhj: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.chMhj;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;hMhj;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;hMhj;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.chMhj;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.chMhj;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.chMhj;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.chMhj<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<hMhj;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.chMhjM<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<hMhjM<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<hMhj;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.chMhj;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.chMhj<ubhQ infrastructure as needed. See drm_atomic_helper_setup_commit() for more details.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj;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.chM[ubj)}(h h]h }(hjUFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBFhhhjTFhM[ubj)}(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&]jjuh1jhjBFhhhjTFhM[ubj)}(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&]jjuh1jhjBFhhhjTFhM[ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>FhhhjTFhM[ubah}(h]j9Fah ](jjeh"]h$]h&]jj)jhuh1jhjTFhM[hj;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.chM[hjsGhhubah}(h]h ]h"]h$]h&]uh1jhj;FhhhjTFhM[ubeh}(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.chM=ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhM=ubj)}(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&]jjuh1jhjKhhhjKhM=ubj)}(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&]jjuh1jhjKhhhjKhM=ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKhhhjKhM=ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjKhM=hjKhhubj)}(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&]uh1jhjKhhhjKhM=ubeh}(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.chMAhj&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.chMAhj&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.chMDhj&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.chMfubj)}(h h]h }(hj:NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Nhhhj9NhMfubj)}(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'Nhhhj9NhMfubj)}(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'Nhhhj9NhMfubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#Nhhhj9NhMfubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jhj9NhMfhj 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.chMfhjEPhhubah}(h]h ]h"]h$]h&]uh1jhj Nhhhj9NhMfubeh}(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.chMjhjdPubji)}(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.chMghjPubj)}(hhh]h)}(hplane state to checkh]hplane state to check}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMghjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjPhMghjPubjn)}(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.chMhhjPubj)}(hhh]h)}(hCRTC state to checkh]hCRTC state to check}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjPhMhhjPubjn)}(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.chMihjPubj)}(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.chM.ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhM.ubj)}(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&]jjuh1jhjWhhhjWhM.ubj)}(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&]jjuh1jhjWhhhjWhM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjWhM.ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjWhM.hjVhhubj)}(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&]uh1jhjVhhhjWhM.ubeh}(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.chM2hjTXubji)}(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.chM0hjXubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM0hjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhM0hjpXubeh}(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.chM2hjTXubh)}(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.chMMhjTXubeh}(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.chMBubj)}(h h]h }(hj1ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhj0ZhMBubj)}(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&]jjuh1jhjZhhhj0ZhMBubj)}(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&]jjuh1jhjZhhhj0ZhMBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhj0ZhMBubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhj0ZhMBhjZhhubj)}(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.chMBhjO[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhj0ZhMBubeh}(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.chMFhjn[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.chMChj[ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMChj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMChj[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.chMDhj[ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMDhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMDhj[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.chMFhjn[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.chMEhjn[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.chMHhjn[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.chMKhj;\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\hMKhjn[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.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hMubj)}(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\hMubj)}(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\hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhj\hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhj\hMhj\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.chMhjJ]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj\hMubeh}(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.chMhji]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.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]hMhj]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.chMhji]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.chMhji]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.chM~ubj)}(h h]h }(hjh`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU`hhhjg`hM~ubj)}(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`hM~ubj)}(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`hM~ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQ`hhhjg`hM~ubah}(h]jL`ah ](jjeh"]h$]h&]jj)jhuh1jhjg`hM~hjN`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.chM~hjahhubah}(h]h ]h"]h$]h&]uh1jhjN`hhhjg`hM~ubeh}(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$hjhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj<hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_helper_commit_tail (C function)c.drm_atomic_helper_commit_tailhNtauh1jxhj<hhhNhNubj)}(hhh](j)}(hCvoid drm_atomic_helper_commit_tail (struct drm_atomic_state *state)h]j)}(hBvoid drm_atomic_helper_commit_tail(struct drm_atomic_state *state)h](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM]ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjjhM]ubj)}(hdrm_atomic_helper_commit_tailh]j)}(hdrm_atomic_helper_commit_tailh]hdrm_atomic_helper_commit_tail}(hj#jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhjjhM]ubj)}(h (struct drm_atomic_state *state)h]j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj?jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;jubj)}(h h]h }(hjLjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;jubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj]jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_jmodnameN classnameNjj)}j]j%)}jj%jsbc.drm_atomic_helper_commit_tailasbuh1hhj;jubj)}(h h]h }(hj}jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;jubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;jubj)}(hstateh]hstate}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7jubah}(h]h ]h"]h$]h&]jjuh1jhjihhhjjhM]ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjjhM]ubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhjjhM]hjihhubj)}(hhh]h)}(h commit atomic update to hardwareh]h commit atomic update to hardware}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM]hjjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjjhM]ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhj<hNhNubj)}(hX **Parameters** ``struct drm_atomic_state *state`` atomic state object being committed **Description** This is the default implementation for the :c:type:`drm_mode_config_helper_funcs.atomic_commit_tail ` 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.chMahjjubji)}(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.chM^hjjubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhM^hjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjkhM^hjjubah}(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.chM_hjTkubh 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{khM_hjjubh)}(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.chMehjjubeh}(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.chM~ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhM~ubj)}(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&]jjuh1jhjkhhhjkhM~ubj)}(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&]jjuh1jhjkhhhjkhM~ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjkhM~ubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1jhjkhM~hjkhhubj)}(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&]uh1jhjkhhhjkhM~ubeh}(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.chMhjlubj)}(hhh]h)}(h!new modeset state to be committedh]h!new modeset state to be committed}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjlubah}(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.chMubj)}(h h]h }(hjhmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUmhhhjgmhMubj)}(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&]jjuh1jhjUmhhhjgmhMubj)}(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&]jjuh1jhjUmhhhjgmhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjQmhhhjgmhMubah}(h]jLmah ](jjeh"]h$]h&]jj)jhuh1jhjgmhMhjNmhhubj)}(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.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjNmhhhjgmhMubeh}(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.chMhjnubji)}(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.chMhjnubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhjnubjn)}(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.chMhjnubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjohMhjnubeh}(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.chM0hj6qubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjUqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQqhM0hjRqubah}(h]h ]h"]h$]h&]uh1jhj6qubeh}(h]h ]h"]h$]h&]uh1jmhjQqhM0hjpubeh}(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.chM2hjpubh)}(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.chM1hjpubh)}(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.chMbhjKsubji)}(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.chM_hjjsubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM_hjsubah}(h]h ]h"]h$]h&]uh1jhjjsubeh}(h]h ]h"]h$]h&]uh1jmhjshM_hjgsubjn)}(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.chM`hjsubj)}(hhh]h)}(hthe driver state objecth]hthe driver state object}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM`hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshM`hjgsubjn)}(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.chMahjsubj)}(hhh]h)}(h*whether nonblocking behavior is requested.h]h*whether nonblocking behavior is requested.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMahjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshMahjgsubeh}(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.chMchjKsubh)}(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.chMbhjKsubh)}(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.chMghjBtubhI callback, or its default implementation drm_atomic_helper_commit_tail().}(hjBthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjithMghjKsubh)}(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.chMkhjKsubh)}(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.chMlhjKsubeh}(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.chMM ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhjthMM 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&]jjuh1jhjthhhjthMM 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&]jjuh1jhjthhhjthMM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjthMM ubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jhjthMM 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.chMM hjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthMM 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.chMQ hjuubji)}(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.chMN hjuubj)}(hhh]h)}(h!new modeset state to be committedh]h!new modeset state to be committed}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMN hjvubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjvhMN hjuubjn)}(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.chMO hj#vubj)}(hhh]h)}(h*whether nonblocking behavior is requested.h]h*whether nonblocking behavior is requested.}(hjBvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>vhMO hj?vubah}(h]h ]h"]h$]h&]uh1jhj#vubeh}(h]h ]h"]h$]h&]uh1jmhj>vhMO hjuubeh}(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.chMQ hjuubh)}(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.chMP hjzvubh hook.}(hjzvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMP hjuubh)}(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.chMU hjvubh hook.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvhMU hjuubh)}(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.chMX hjvubh, }(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_planeuh1hhjwhMX hjvubh 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_connectoruh1hhjwhMX hjvubh pointer directly.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMX hjuubh)}(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.chM_ hjhwubh 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&]uh1hhjwhM_ hjuubh)}(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.chMg hjuubh)}(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.chMj hjuubh)}(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.chMm hjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMm hjuubh)}(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.chMp hjuubh)}(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.chMt 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.chMu 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.chM 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.chM hj_yubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj~yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzyhM hj{yubah}(h]h ]h"]h$]h&]uh1jhj_yubeh}(h]h ]h"]h$]h&]uh1jmhjzyhM 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.chMF ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj |hMF 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 |hMF 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 |hMF ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhj |hMF ubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhj |hMF 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.chMF hj|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj |hMF 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.chMJ 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.chMG hj|ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMG hj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj}hMG 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.chMI 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.chMH hjQ}ubh locks.}(hjQ}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjx}hMH 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.chMM 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.chMP 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.chMw ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj}hMw 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}hMw 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}hMw ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}hhhj}hMw ubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1jhj}hMw 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.chMw hj~~hhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj}hMw 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.chMx hj~ubj)}(hhh]h)}(h#atomic state object being committedh]h#atomic state object being committed}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMx hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhj~hMx 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.chMz 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.chMy 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.chM ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhM 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_hhhjqhM 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_hhhjqhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhjqhM ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjqhM 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&]uh1jhjXhhhjqhM 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.chM 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.chM 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.chM5 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.chMB 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.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhM 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~hhhjhM 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~hhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhM ubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhM 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&]uh1jhjwhhhjhM 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.chM 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.chM 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.chMB 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.chMB 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.chMA 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.chME 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.chMH 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.chMJ 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.chML 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.chMN 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.chMP 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.chMR 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.chMU 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\hMU 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\hMU 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\hMU 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.chMZ 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.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM 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&]jjuh1jhjhhhjhM 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&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM 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&]uh1jhjhhhjhM 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.chM 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.chM hjubj)}(hhh]h)}(howning CRTC of owning planeh]howning CRTC of owning 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 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.chM hjubj)}(hhh]h)}(hframebuffer to flip onto planeh]hframebuffer to flip onto plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hM 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.chM 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&]uh1hhjChM hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhjChM 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.chM 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&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhM 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.chM 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іhM hjҖubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjіhM 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.chM 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&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM 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.chM 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_hM hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhj_hM 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.chM 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&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM 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.chM 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&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjڗubeh}(h]h ]h"]h$]h&]uh1jmhjhM 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.chM 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<hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jmhj<hM 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.chM hjhubj)}(hhh]h)}(hlock acquire contexth]hlock acquire context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhM 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.chM 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.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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM 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.chM 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.chMC 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.chMA hj ubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(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&]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.chMC 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.chMB 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.chMD 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.chME 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.chMK 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.chMK 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.chMk ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڝhhhjhMk 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ڝhhhjhMk 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ڝhhhjhMk ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj֝hhhjhMk ubah}(h]jѝah ](jjeh"]h$]h&]jj)jhuh1jhjhMk 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.chMk hj hhubah}(h]h ]h"]h$]h&]uh1jhjӝhhhjhMk ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhj<hNhNubj)}(hXG**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.chMo 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.chMl hjIubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMl hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhMl 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.chMm hjubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMm hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMm 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.chMo 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.chMn 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.chMr 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.chMv 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.chMz 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.chMz 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.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hX**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. A variant of this function exists with drm_bridge_helper_reset_crtc(), dedicated to bridges. **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.chM 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.chM hjǡubj)}(hhh]h)}(hDRM CRTCh]hDRM CRTC}(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 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 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.chM 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.chM hjubh)}(h\A variant of this function exists with drm_bridge_helper_reset_crtc(), dedicated to bridges.h]h\A variant of this function exists with drm_bridge_helper_reset_crtc(), dedicated to bridges.}(hjfhhhNhNubah}(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%)}(hjwh]hNOTE}(hjyhhhNhNubah}(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.chM 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 }(hjhhhNhNubh)}(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.chM hjubhl. For drivers which optimize out unnecessary modesets this will result in a no-op commit, achieving nothing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubh)}(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:68: ./drivers/gpu/drm/drm_atomic_helper.chM 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.chM 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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](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_deviceh]h drm_device}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j%)}jj)sbc.drm_atomic_helper_shutdownasbuh1hhj?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;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}(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&]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%)}(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&]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%)}(hjBh]h Description}(hjDhhhNhNubah}(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)}(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.}(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 hjubh)}(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().}(hjghhhNhNubah}(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_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.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(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_stateasbuh1hhjhhhjhMubj)}(h h]h }(hj֤hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(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&]jjuh1jhjhhhjhMubj)}(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&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(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 reftargetj0modnameN classnameNjj)}j]jѤ#c.drm_atomic_helper_duplicate_stateasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdevh]hdev}(hjghhhNhNubah}(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&]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]jѤ#c.drm_atomic_helper_duplicate_stateasbuh1hhj|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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<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%)}(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.chMhjubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjBh]hstruct drm_device *dev}(hjDhhhNhNubah}(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&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhjWhMhj9ubjn)}(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}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(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)}(hlock acquisition contexth]hlock acquisition context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(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.}(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.chMhjubh)}(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.chMhjubh)}(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.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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(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!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.}(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.chMhjubeh}(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}(hjOhhhNhNubah}(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 }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj\hMfubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypePj reftargetjpmodnameN classnameNjj)}j]j%)}jdrm_atomic_helper_suspendsbc.drm_atomic_helper_suspendasbuh1hhjKhhhj\hMfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj\hMfubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKhhhj\hMfubj)}(hdrm_atomic_helper_suspendh]j)}(hjh]hdrm_atomic_helper_suspend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj\hMfubj)}(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 }(hj֧hhhNhNubah}(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]jc.drm_atomic_helper_suspendasbuh1hhjŧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŧubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjŧubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŧubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhj\hMfubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhj\hMfubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhj\hMfhjDhhubj)}(hhh]h)}(hsubsystem-level suspend helperh]hsubsystem-level suspend helper}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMfhjGhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj\hMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhj<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%)}(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.chMjhjfubji)}(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.chMghjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMghjubah}(h]h ]h"]h$]h&]uh1jhhjfubh)}(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.chMihjfubh)}(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.chMhhjfubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMnhjfubh)}(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.chMthjfubh)}(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.chMxhjfubh)}(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.}(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.chMthjfubeh}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhg/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&]uh1jhjLhhhj^hMubj)}(h)drm_atomic_helper_commit_duplicated_stateh]j)}(h)drm_atomic_helper_commit_duplicated_stateh]h)drm_atomic_helper_commit_duplicated_state}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj^hMubj)}(hE(struct drm_atomic_state *state, struct drm_modeset_acquire_ctx *ctx)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%)}jjssb+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)}(hstateh]hstate}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(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)}(hcommit duplicated stateh]hcommit 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.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hMubeh}(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.chMhjubji)}(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}(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.chMhjubj)}(hhh]h)}(h!duplicated atomic state to commith]h!duplicated atomic state to commit}(hjڪhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֪hMhjתubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj֪hMhjubjn)}(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.chMhjubj)}(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&]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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(h%See also: drm_atomic_helper_suspend()h]h%See also: drm_atomic_helper_suspend()}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(h **Return**h]j%)}(hjkh]hReturn}(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.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&]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](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.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_atomic_helper_resumeh]j)}(hdrm_atomic_helper_resumeh]hdrm_atomic_helper_resume}(hjѫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͫubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjӫsbc.drm_atomic_helper_resumeasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_atomic_state *stateh](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)}(hdrm_atomic_stateh]hdrm_atomic_state}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j'c.drm_atomic_helper_resumeasbuh1hhj[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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hsubsystem-level resume helperh]hsubsystem-level resume helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjݬhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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.chMhjubji)}(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&]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 DRM deviceh]h DRM device}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hMhjubjn)}(h=``struct drm_atomic_state *state`` atomic state to resume to 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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjTubj)}(hhh]h)}(hatomic state to resume toh]hatomic state to resume to}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjohMhjubeh}(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)}(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.chMhjubh)}(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.chMhjubh)}(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)}(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&]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](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&]uh1jhj hhhg/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&]uh1jhj hhhjhMubj)}(hdrm_atomic_helper_page_fliph]j)}(hdrm_atomic_helper_page_fliph]hdrm_atomic_helper_page_flip}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj)}(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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j%)}jj3sbc.drm_atomic_helper_page_flipasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(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]jc.drm_atomic_helper_page_flipasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(h&struct drm_pending_vblank_event *eventh](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_pending_vblank_eventh]hdrm_pending_vblank_event}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]jc.drm_atomic_helper_page_flipasbuh1hhj+ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(heventh]hevent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(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]jc.drm_atomic_helper_page_flipasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjίhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(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]jc.drm_atomic_helper_page_flipasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(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}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<hNhNubj)}(hXG**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%)}(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)}(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}(hj°hhhNhNubah}(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)}(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.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)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj0hMhjubjn)}(h=``uint32_t flags`` flip flags for non-vblank sync'ed updates h](jt)}(h``uint32_t flags``h]jz)}(hjTh]huint32_t flags}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjNubj)}(hhh]h)}(h)flip flags for non-vblank sync'ed updatesh]h+flip flags for non-vblank sync’ed updates}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihMhjubjn)}(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.chMhjubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMhjubh)}(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)}(hjh]hdrm_crtc_funcs.page_flip}(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.chMhjޱubh2 implementation using the atomic driver interface.}(hjޱhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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.chMhjubh)}(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"hjubh)}(h8Returns 0 on success, negative errno numbers on failure.h]h8Returns 0 on success, negative errno numbers 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.chMhjubeh}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMAubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjthMAubj)}(h"drm_atomic_helper_page_flip_targeth]j)}(h"drm_atomic_helper_page_flip_targeth]h"drm_atomic_helper_page_flip_target}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjthMAubj)}(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 reftargetjòmodnameN classnameNjj)}j]j%)}jjsb$c.drm_atomic_helper_page_flip_targetasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]jݲ$c.drm_atomic_helper_page_flip_targetasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&struct drm_pending_vblank_event *eventh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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_targetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjϳhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heventh]hevent}(hjܳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(huint32_t targeth](h)}(hhh]j)}(huint32_th]huint32_t}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jݲ$c.drm_atomic_helper_page_flip_targetasbuh1hhj9ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(htargeth]htarget}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(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_atomic_helper_page_flip_targetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjϴhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjܴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjthMAubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhjthMAubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjthMAhj[hhubj)}(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.chMAhjhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjthMAubeh}(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%)}(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.chMEhj"ubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` DRM CRTC h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjGh]hstruct drm_crtc *crtc}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMBhjAubj)}(hhh]h)}(hDRM CRTCh]hDRM CRTC}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMBhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj\hMBhj>ubjn)}(h/``struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjh]hstruct drm_framebuffer *fb}(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.chMChjzubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjhMChj>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.chMDhjubj)}(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εhMDhjϵubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjεhMDhj>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.chMEhjubj)}(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&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMEhj>ubjn)}(hU``uint32_t target`` specifying the target vblank period when the flip to take effect h](jt)}(h``uint32_t target``h]jz)}(hj+h]huint32_t target}(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.chMFhj%ubj)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMFhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj@hMFhj>ubjn)}(hA``struct drm_modeset_acquire_ctx *ctx`` lock acquisition context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjdh]h#struct drm_modeset_acquire_ctx *ctx}(hjfhhhNhNubah}(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.chMGhj^ubj)}(hhh]h)}(hlock acquisition contexth]hlock acquisition context}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMGhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhMGhj>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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMIhj"ubh)}(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.chMHhjubhw 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ܶhMHhj"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.chMLhj"ubh)}(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.chMMhj"ubeh}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j%)}j*drm_atomic_helper_bridge_propagate_bus_fmtsb,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhj*hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMuubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhjRhMuubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj*hhhjRhMuubj)}(h*drm_atomic_helper_bridge_propagate_bus_fmth]j)}(hjOh]h*drm_atomic_helper_bridge_propagate_bus_fmt}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*hhhjRhMuubj)}(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}(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]jM,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjubj)}(h h]h }(hjɷhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj׷hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%struct drm_bridge_state *bridge_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_bridge_stateh]hdrm_bridge_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jM,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h bridge_stateh]h bridge_state}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_crtc_state *crtc_stateh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hdrm_crtc_stateh]hdrm_crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jM,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(h crtc_stateh]h crtc_state}(hjĸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&struct drm_connector_state *conn_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_connector_stateh]hdrm_connector_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jM,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjٸubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٸubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjٸubj)}(h conn_stateh]h conn_state}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٸubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 output_fmth](h)}(hhh]j)}(hu32h]hu32}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jM,c.drm_atomic_helper_bridge_propagate_bus_fmtasbuh1hhjIubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h output_fmth]h output_fmt}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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*}(hj͹hhhNhNubah}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj*hhhjRhMuubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj&hhhjRhMuubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhjRhMuhj#hhubj)}(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.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jhj#hhhjRhMuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj<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%)}(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.chMyhj ubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjEh]hstruct drm_bridge *bridge}(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.chMwhj?ubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMwhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMwhj<ubjn)}(h;``struct drm_bridge_state *bridge_state`` new bridge state h](jt)}(h)``struct drm_bridge_state *bridge_state``h]jz)}(hj~h]h%struct drm_bridge_state *bridge_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.chMxhjxubj)}(hhh]h)}(hnew bridge stateh]hnew bridge state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhMxhj<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.chMyhjubj)}(hhh]h)}(hnew CRTC stateh]hnew CRTC state}(hjкhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̺hMyhjͺubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj̺hMyhj<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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chMzhjubj)}(hhh]h)}(hnew connector stateh]hnew connector state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMzhj<ubjn)}(h,``u32 output_fmt`` tested output bus format h](jt)}(h``u32 output_fmt``h]jz)}(hj)h]hu32 output_fmt}(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)}(htested output bus formath]htested output bus format}(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<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)}(hjbh]hunsigned int *num_input_fmts}(hjdhhhNhNubah}(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+will contain the size of the returned arrayh]h+will contain the size of the returned array}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM|hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhM|hj<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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:68: ./drivers/gpu/drm/drm_atomic_helper.chM~hj ubh)}(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.chM}hjubh 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ڻhM}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.chMhj ubh)}(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.chMhj ubeh}(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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hhhhhKHubh)}(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).}(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.chK-hj?hhubh)}(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.}(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.chK4hj?hhubh)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:74: ./drivers/gpu/drm/drm_atomic_state_helper.chK8hj?hhubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1__drm_atomic_helper_crtc_state_reset (C function)&c.__drm_atomic_helper_crtc_state_resethNtauh1jxhjhhhNhNubj)}(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.chKBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKBubj)}(h$__drm_atomic_helper_crtc_state_reseth]j)}(h$__drm_atomic_helper_crtc_state_reseth]h$__drm_atomic_helper_crtc_state_reset}(hjмhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̼ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKBubj)}(h:(struct drm_crtc_state *crtc_state, struct drm_crtc *crtc)h](j)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjҼsb&c.__drm_atomic_helper_crtc_state_resetasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h crtc_stateh]h crtc_state}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(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&&c.__drm_atomic_helper_crtc_state_resetasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKBubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKBhjhhubj)}(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.chKBhjܽhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKBubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chKFhjubji)}(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)}(hj h]h!struct drm_crtc_state *crtc_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.chKChjubj)}(hhh]h)}(h#atomic CRTC state, must not be NULLh]h#atomic CRTC state, must not be NULL}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKChj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hKChjubjn)}(h8``struct drm_crtc *crtc`` CRTC object, must not be NULL h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjYh]hstruct drm_crtc *crtc}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKDhjSubj)}(hhh]h)}(hCRTC object, must not be NULLh]hCRTC object, must not be NULL}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhKDhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhKDhjubeh}(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.chKFhjubh)}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+__drm_atomic_helper_crtc_reset (C function) c.__drm_atomic_helper_crtc_resethNtauh1jxhjhhhNhNubj)}(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}(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.chKRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKRubj)}(h__drm_atomic_helper_crtc_reseth]j)}(h__drm_atomic_helper_crtc_reseth]h__drm_atomic_helper_crtc_reset}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKRubj)}(h:(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state)h](j)}(hstruct drm_crtc *crtch](j)}(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_crtch]hdrm_crtc}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j%)}jjsb c.__drm_atomic_helper_crtc_resetasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj$ubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(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]jb c.__drm_atomic_helper_crtc_resetasbuh1hhjubj)}(h h]h }(hjֿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h crtc_stateh]h crtc_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKRubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKRubah}(h]j޾ah ](jjeh"]h$]h&]jj)jhuh1jhjhKRhjhhubj)}(hhh]h)}(hreset state on CRTCh]hreset state on CRTC}(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.chKRhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKRubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhjhNhNubj)}(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}(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.chKVhj7ubji)}(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&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKShjVubj)}(hhh]h)}(hdrm CRTCh]hdrm CRTC}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKShjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhKShjSubjn)}(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.chKThjubj)}(hhh]h)}(hCRTC state to assignh]hCRTC state to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKThjSubeh}(h]h ]h"]h$]h&]uh1jhhj7ubh)}(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.chKVhj7ubh)}(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}(hj$hhhNhNubah}(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)}(hj8h]hdrm_crtc_funcs.reset}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjhKUhjubh hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKUhj7ubh)}(h8This is useful for drivers that subclass the CRTC state.h]h8This is useful for drivers that subclass 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.chKZhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_atomic_helper_crtc_reset (C function)c.drm_atomic_helper_crtc_resethNtauh1jxhjhhhNhNubj)}(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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKlubj)}(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&]jjuh1jhjhhhjhKlubj)}(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 }(hj hhhNhNubah}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKlubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKlubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKlhjhhubj)}(hhh]h)}(hFdefault :c:type:`drm_crtc_funcs.reset ` hook for CRTCsh](hdefault }(hjNhhhNhNubh)}(h/:c:type:`drm_crtc_funcs.reset `h]jz)}(hjXh]hdrm_crtc_funcs.reset}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_atomic_helper_crtc_resetasbjdrm_crtc_funcsuh1hhjhKBhjNubh hook for CRTCs}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKlhjKhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKlubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chKphjubji)}(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.chKmhjubj)}(hhh]h)}(hdrm CRTCh]hdrm CRTC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKmhjubah}(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.chKohjubh)}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5__drm_atomic_helper_crtc_duplicate_state (C function)*c.__drm_atomic_helper_crtc_duplicate_statehNtauh1jxhjhhhNhNubj)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjWhKubj)}(h(__drm_atomic_helper_crtc_duplicate_stateh]j)}(h(__drm_atomic_helper_crtc_duplicate_stateh]h(__drm_atomic_helper_crtc_duplicate_state}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjWhKubj)}(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%)}jjlsb*c.__drm_atomic_helper_crtc_duplicate_stateasbuh1hhjubj)}(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&]noemphjjuh1jhj~ubj)}(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 reftargetjmodnameN classnameNjj)}j]j*c.__drm_atomic_helper_crtc_duplicate_stateasbuh1hhjubj)}(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&]noemphjjuh1jhj~ubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjWhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjWhKubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhjWhKhj>hhubj)}(hhh]h)}(hcopy atomic CRTC stateh]hcopy atomic CRTC state}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjvhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjWhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(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}(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.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.}(hjDhhhNhNubah}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_atomic_helper_crtc_duplicate_state (C function)(c.drm_atomic_helper_crtc_duplicate_statehNtauh1jxhjhhhNhNubj)}(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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhm/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&]uh1jhjohhhjhKubh)}(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_stateasbuh1hhjohhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjohhhjhKubj)}(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&]jjuh1jhjohhhjhKubj)}(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}(hj hhhNhNubah}(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*}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjohhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjhKubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhhubj)}(hhh]h)}(hdefault state duplicate hookh]hdefault state duplicate hook}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.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.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&]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)}(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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3__drm_atomic_helper_crtc_destroy_state (C function)(c.__drm_atomic_helper_crtc_destroy_statehNtauh1jxhjhhhNhNubj)}(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&]uh1jhj+hhhm/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&]uh1jhj+hhhj=hKubj)}(h&__drm_atomic_helper_crtc_destroy_stateh]j)}(h&__drm_atomic_helper_crtc_destroy_stateh]h&__drm_atomic_helper_crtc_destroy_state}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj=hKubj)}(h(struct drm_crtc_state *state)h]j)}(hstruct drm_crtc_state *stateh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(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%)}jjRsb(c.__drm_atomic_helper_crtc_destroy_stateasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubah}(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)}(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&]uh1jhj$hhhj=hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chKhj ubji)}(hhh]jn)}(h>``struct drm_crtc_state *state`` CRTC state object to release h](jt)}(h ``struct drm_crtc_state *state``h]jz)}(hj0h]hstruct drm_crtc_state *state}(hj2hhhNhNubah}(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.chKhj*ubj)}(hhh]h)}(hCRTC state object to releaseh]hCRTC state object to release}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhjEhKhj'ubah}(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&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhj ubh)}(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.}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_helper_crtc_destroy_state (C function)&c.drm_atomic_helper_crtc_destroy_statehNtauh1jxhjhhhNhNubj)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsb&c.drm_atomic_helper_crtc_destroy_stateasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcrtch]hcrtc}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_crtc_state *stateh](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)}(hdrm_crtc_stateh]hdrm_crtc_state}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j'&c.drm_atomic_helper_crtc_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&]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&]jjjjjjjjjuh1jhhhjhNhNubj)}(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)}(hj!h]hstruct drm_crtc *crtc}(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)}(hdrm CRTCh]hdrm CRTC}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hKhjubjn)}(h>``struct drm_crtc_state *state`` CRTC state object to release h](jt)}(h ``struct drm_crtc_state *state``h]jz)}(hjZh]hstruct drm_crtc_state *state}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chKhjTubj)}(hhh]h)}(hCRTC state object to releaseh]hCRTC state object to release}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjohKhjubeh}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2__drm_atomic_helper_plane_state_reset (C function)'c.__drm_atomic_helper_plane_state_resethNtauh1jxhjhhhNhNubj)}(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 }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j%)}jjsb'c.__drm_atomic_helper_plane_state_resetasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(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]jQ'c.__drm_atomic_helper_plane_state_resetasbuh1hhjubj)}(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&]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}(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.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhjhNhNubj)}(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%)}(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.chKhj&ubji)}(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)}(hjKh]h#struct drm_plane_state *plane_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)}(h$atomic plane state, must not be NULLh]h$atomic plane state, must not be NULL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hKhjBubjn)}(h;``struct drm_plane *plane`` plane object, must not be NULL 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.chKhj~ubj)}(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&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjBubeh}(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)}(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.chKhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,__drm_atomic_helper_plane_reset (C function)!c.__drm_atomic_helper_plane_resethNtauh1jxhjhhhNhNubj)}(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.chM)ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj$hM)ubj)}(h__drm_atomic_helper_plane_reseth]j)}(h__drm_atomic_helper_plane_reseth]h__drm_atomic_helper_plane_reset}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj$hM)ubj)}(h>(struct drm_plane *plane, struct drm_plane_state *plane_state)h](j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(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%)}jj9sb!c.__drm_atomic_helper_plane_resetasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjOubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj$hM)ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj$hM)ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj$hM)hj hhubj)}(hhh]h)}(hreset state on planeh]hreset state on plane}(hjFhhhNhNubah}(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)hjChhubah}(h]h ]h"]h$]h&]uh1jhj hhhj$hM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(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%)}(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.chM-hjbubji)}(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*hj~ubjn)}(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+hj~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.chM-hjbubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and assigns it to the }(hjhhhNhNubh)}(h$:c:type:`drm_crtc->state `h]jz)}(hj-h]hdrm_crtc->state}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(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}(hjOhhhNhNubah}(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)}(hjch]hdrm_plane_funcs.reset}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhjJhM,hjubh hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhM,hjbubh)}(h9This is useful for drivers that subclass the plane state.h]h9This 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.chM1hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_helper_plane_reset (C function)c.drm_atomic_helper_plane_resethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h` hook for planesh](hdefault }(hjyhhhNhNubh)}(h1:c:type:`drm_plane_funcs.reset `h]jz)}(hjh]hdrm_plane_funcs.reset}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j0c.drm_atomic_helper_plane_resetasbjdrm_plane_funcsuh1hhjhKBhjyubh hook for planes}(hjyhhhNhNubeh}(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?hjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMChjubji)}(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$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.chMBhjubh)}(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 }(hj3hhhNhNubj%)}(h **plane**h]hplane}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubhv by freeing the state pointer (which might be NULL, e.g. at driver load time) and allocating a new empty state object.}(hj3hhhNhNubeh}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6__drm_atomic_helper_plane_duplicate_state (C function)+c.__drm_atomic_helper_plane_duplicate_statehNtauh1jxhjhhhNhNubj)}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhMRubj)}(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&]jjuh1jhjphhhjhMRubj)}(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}(hj hhhNhNubah}(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&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j+c.__drm_atomic_helper_plane_duplicate_stateasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjphhhjhMRubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjlhhhjhMRubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhjhMRhjihhubj)}(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.chMRhjhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMVhjubji)}(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.chMShjubj)}(hhh]h)}(h plane objecth]h plane object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMShjubjn)}(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}(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.chMThjubj)}(hhh]h)}(hatomic plane stateh]hatomic plane state}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMThj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hMThjubeh}(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&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMVhjubh)}(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.}(hjohhhNhNubah}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_atomic_helper_plane_duplicate_state (C function))c.drm_atomic_helper_plane_duplicate_statehNtauh1jxhjhhhNhNubj)}(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.chMiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMiubh)}(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_stateasbuh1hhjhhhjhMiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMiubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMiubj)}(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&]jjuh1jhjhhhjhMiubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](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_planeh]h drm_plane}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)c.drm_atomic_helper_plane_duplicate_stateasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMiubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMiubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMihjhhubj)}(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.chMihjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMmhjubji)}(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.chMjhjubj)}(hhh]h)}(h drm planeh]h drm plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMjhjubah}(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.chMlhjubh)}(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.}(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.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4__drm_atomic_helper_plane_destroy_state (C function))c.__drm_atomic_helper_plane_destroy_statehNtauh1jxhjhhhNhNubj)}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjhhMubj)}(h'__drm_atomic_helper_plane_destroy_stateh]j)}(h'__drm_atomic_helper_plane_destroy_stateh]h'__drm_atomic_helper_plane_destroy_state}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhjVhhhjhhMubj)}(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%)}jj}sb)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&]jjuh1jhjVhhhjhhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjhhMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1jhjhhMhjOhhubj)}(hhh]h)}(hrelease plane stateh]hrelease 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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhjhNhNubj)}(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.chMhj6ubji)}(hhh]jn)}(h@``struct drm_plane_state *state`` plane state object to release h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hj[h]hstruct drm_plane_state *state}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjUubj)}(hhh]h)}(hplane state object to releaseh]hplane state object to release}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjRubah}(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&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj6ubh)}(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.chMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_helper_plane_destroy_state (C function)'c.drm_atomic_helper_plane_destroy_statehNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j%)}jjsb'c.drm_atomic_helper_plane_destroy_stateasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjdhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjqhhhNhNubah}(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 }(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]jR'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&]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}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjhNhNubj)}(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%)}(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 *plane`` drm plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hjLh]hstruct drm_plane *plane}(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)}(h drm planeh]h drm plane}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjCubjn)}(h@``struct drm_plane_state *state`` plane state object to release 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&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjubj)}(hhh]h)}(hplane state object to releaseh]hplane state object to release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjCubeh}(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)}(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.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6__drm_atomic_helper_connector_state_reset (C function)+c.__drm_atomic_helper_connector_state_resethNtauh1jxhjhhhNhNubj)}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j%)}jj(sb+c.__drm_atomic_helper_connector_state_resetasbuh1hhj>ubj)}(h h]h }(hjhhhNhNubah}(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]j|+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}(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)}(hreset the connector stateh]hreset the connector 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.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhjhNhNubj)}(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%)}(hjWh]h Parameters}(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.chMhjQubji)}(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)}(hjvh]h&struct drm_connector_state *conn_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)}(h(atomic connector state, must not be NULLh]h(atomic connector state, must not be NULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjmubjn)}(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&]uh1jmhjhMhjmubeh}(h]h ]h"]h$]h&]uh1jhhjQubh)}(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.chMhjQubh)}(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.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0__drm_atomic_helper_connector_reset (C function)%c.__drm_atomic_helper_connector_resethNtauh1jxhjhhhNhNubj)}(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}(hjAhhhNhNubah}(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 }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMubj)}(h#__drm_atomic_helper_connector_reseth]j)}(h#__drm_atomic_helper_connector_reseth]h#__drm_atomic_helper_connector_reset}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhMubj)}(hI(struct drm_connector *connector, struct drm_connector_state *conn_state)h](j)}(hstruct drm_connector *connectorh](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_connectorh]h drm_connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjdsb%c.__drm_atomic_helper_connector_resetasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.__drm_atomic_helper_connector_resetasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h conn_stateh]h conn_state}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhMhj6hhubj)}(hhh]h)}(hreset state on connectorh]hreset state on connector}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.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)}(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&]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)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj<ubh and assigns it to the }(hj<hhhNhNubh)}(h.:c:type:`drm_connector->state `h]jz)}(hjXh]hdrm_connector->state}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(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}(hjzhhhNhNubah}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhjuhMhj<ubh hook.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_helper_connector_reset (C function)#c.drm_atomic_helper_connector_resethNtauh1jxhjhhhNhNubj)}(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}(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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j%)}jjsb#c.drm_atomic_helper_connector_resetasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(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]j[#c.drm_atomic_helper_connector_resetasbjdrm_connector_funcsuh1hhjhKBhjubh 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&]jjjjjjjjjuh1jhhhjhNhNubj)}(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)}(hj h]hstruct drm_connector *connector}(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.chMhjubj)}(hhh]h)}(h drm connectorh]h drm connector}(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%)}(hjHh]h Description}(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.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 }(hj^hhhNhNubj%)}(h **connector**h]h connector}(hjfhhhNhNubah}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j9drm_atomic_helper_connector_tv_margins_reset (C function).c.drm_atomic_helper_connector_tv_margins_resethNtauh1jxhjhhhNhNubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj5hhhNhNubah}(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}(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&]jjjjwjjwjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` DRM connector **Description** Resets the TV-related properties attached to a connector.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&]uh1jmhjhMhjubah}(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)}(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.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_helper_connector_tv_reset (C function)&c.drm_atomic_helper_connector_tv_resethNtauh1jxhjhhhNhNubj)}(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}(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.chMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hMubj)}(h$drm_atomic_helper_connector_tv_reseth]j)}(h$drm_atomic_helper_connector_tv_reseth]h$drm_atomic_helper_connector_tv_reset}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.hMubj)}(h!(struct drm_connector *connector)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%)}jjCsb&c.drm_atomic_helper_connector_tv_resetasbuh1hhjYubj)}(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&]noemphjjuh1jhjUubah}(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%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&]uh1jhjhhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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)}(hj!h]hstruct drm_connector *connector}(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.chMhjubj)}(hhh]h)}(h DRM connectorh]h DRM connector}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hMhjubah}(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.chMhjubh)}(h7Resets the analog TV properties attached to a connectorh]h7Resets the analog TV properties attached to a connector}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_helper_connector_tv_check (C function)&c.drm_atomic_helper_connector_tv_checkhNtauh1jxhjhhhNhNubj)}(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.chM@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM@ubj)}(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&]jjuh1jhjhhhjhM@ubj)}(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 }(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_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]j&c.drm_atomic_helper_connector_tv_checkasbuh1hhjLubj)}(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&]jjuh1jhjhhhjhM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM@ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM@hjhhubj)}(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&]uh1jhjhhhjhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMDhjubji)}(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.chMAhj ubj)}(hhh]h)}(h DRM Connectorh]h DRM Connector}(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)}(h8``struct drm_atomic_state *state`` the DRM State object 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&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMBhjEubj)}(hhh]h)}(hthe DRM State objecth]hthe DRM State object}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMBhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hMBhj 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.chMDhjubh)}(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.chMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j:__drm_atomic_helper_connector_duplicate_state (C function)/c.__drm_atomic_helper_connector_duplicate_statehNtauh1jxhjhhhNhNubj)}(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.chMqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMqubj)}(h-__drm_atomic_helper_connector_duplicate_stateh]j)}(h-__drm_atomic_helper_connector_duplicate_stateh]h-__drm_atomic_helper_connector_duplicate_state}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMqubj)}(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&]uh1jhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(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%)}jj#sb/c.__drm_atomic_helper_connector_duplicate_stateasbuh1hhj9ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(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]jw/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&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMqhjhhubj)}(hhh]h)}(hcopy atomic connector stateh]hcopy atomic connector state}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMqhj-hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(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%)}(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.chMuhjLubji)}(hhh](jn)}(h5``struct drm_connector *connector`` connector object h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjqh]hstruct drm_connector *connector}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMrhjkubj)}(hhh]h)}(hconnector objecth]hconnector object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMrhjhubjn)}(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.chMshjubj)}(hhh]h)}(hatomic connector stateh]hatomic connector state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMshjhubeh}(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.chMuhjLubh)}(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.chMthjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j8drm_atomic_helper_connector_duplicate_state (C function)-c.drm_atomic_helper_connector_duplicate_statehNtauh1jxhjhhhNhNubj)}(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}(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.chMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j%)}j+drm_atomic_helper_connector_duplicate_statesb-c.drm_atomic_helper_connector_duplicate_stateasbuh1hhj&hhhj7hMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj7hMubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&hhhj7hMubj)}(h+drm_atomic_helper_connector_duplicate_stateh]j)}(hjgh]h+drm_atomic_helper_connector_duplicate_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj7hMubj)}(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]je-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&]jjuh1jhj&hhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hMhjhhubj)}(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.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1jhhhjhNhNubj)}(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%)}(hjGh]h Parameters}(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.chMhjAubji)}(hhh]jn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjfh]hstruct drm_connector *connector}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(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}(hjhhhNhNubah}(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&]uh1jhhjAubh)}(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.chMhjAubh)}(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.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j8__drm_atomic_helper_connector_destroy_state (C function)-c.__drm_atomic_helper_connector_destroy_statehNtauh1jxhjhhhNhNubj)}(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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j%)}jj sb-c.__drm_atomic_helper_connector_destroy_stateasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjohhhNhNubah}(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&]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&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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)}(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.}(hj8hhhNhNubah}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_atomic_helper_connector_destroy_state (C function)+c.drm_atomic_helper_connector_destroy_statehNtauh1jxhjhhhNhNubj)}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhMubj)}(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&]jjuh1jhjchhhjuhMubj)}(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%)}jjsb+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 }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_stateh]hdrm_connector_state}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j+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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjchhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhjuhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhjuhMhj\hhubj)}(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&]uh1jhj\hhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMhj ubj)}(hhh]h)}(h!connector state object to releaseh]h!connector state object to release}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj&hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjLh]h Description}(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.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.}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(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_statehNtauh1jxhjhhhNhNubj)}(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&]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_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&]jjuh1jhjhhhjhMubj)}(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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hobjh]hobj}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_private_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_private_stateh]hdrm_private_state}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNjj)}j]j1c.__drm_atomic_helper_private_obj_duplicate_stateasbuh1hhj<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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(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&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhj5ubj)}(hhh]h)}(hnew private object stateh]hnew private object state}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhjPhMhjubeh}(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&]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.}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j7__drm_atomic_helper_bridge_duplicate_state (C function),c.__drm_atomic_helper_bridge_duplicate_statehNtauh1jxhjhhhNhNubj)}(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 reftargetjmodnameN classnameNjj)}j]j%)}jjsb,c.__drm_atomic_helper_bridge_duplicate_stateasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge_state *stateh](j)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j2,c.__drm_atomic_helper_bridge_duplicate_stateasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(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&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(hj h]h Parameters}(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.chMhjubji)}(hhh](jn)}(h,``struct drm_bridge *bridge`` bridge object 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)}(h bridge objecth]h bridge object}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhj#ubjn)}(h7``struct drm_bridge_state *state`` atomic bridge state h](jt)}(h"``struct drm_bridge_state *state``h]jz)}(hjeh]hstruct drm_bridge_state *state}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(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)}(hatomic bridge stateh]hatomic bridge state}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhj#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.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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_atomic_helper_bridge_duplicate_state (C function)*c.drm_atomic_helper_bridge_duplicate_statehNtauh1jxhjhhhNhNubj)}(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 }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(h(drm_atomic_helper_bridge_duplicate_stateh]j)}(hj"h]h(drm_atomic_helper_bridge_duplicate_state}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(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 reftargetjmodnameN classnameNjj)}j]j *c.drm_atomic_helper_bridge_duplicate_stateasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjWubah}(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&]jjjjjjjjjuh1jhhhjhNhNubj)}(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)}(hj!h]hstruct drm_bridge *bridge}(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.chMhjubj)}(hhh]h)}(h bridge objecth]h bridge object}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hMhjubah}(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.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 }(hjrhhhNhNubh)}(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&]uh1jyhjzubah}(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.chMhjrubh9 hook for bridges that don’t subclass the bridge state.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_atomic_helper_bridge_destroy_state (C function)(c.drm_atomic_helper_bridge_destroy_statehNtauh1jxhjhhhNhNubj)}(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.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]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_destroy_stateasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge_state *stateh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(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_stateasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(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)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(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}(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`` the bridge this state refers to h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj5h]hstruct drm_bridge *bridge}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhMhj,ubjn)}(h;``struct drm_bridge_state *state`` bridge state to destroy h](jt)}(h"``struct drm_bridge_state *state``h]jz)}(hjnh]hstruct drm_bridge_state *state}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chMhjhubj)}(hhh]h)}(hbridge state to destroyh]hbridge state to destroy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(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&]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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-__drm_atomic_helper_bridge_reset (C function)"c.__drm_atomic_helper_bridge_resethNtauh1jxhjhhhNhNubj)}(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&]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_bridge_reseth]j)}(h __drm_atomic_helper_bridge_reseth]h __drm_atomic_helper_bridge_reset}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj)}(h;(struct drm_bridge *bridge, struct drm_bridge_state *state)h](j)}(hstruct drm_bridge *bridgeh](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_bridgeh]h drm_bridge}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j%)}jj4sb"c.__drm_atomic_helper_bridge_resetasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(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]j"c.__drm_atomic_helper_bridge_resetasbuh1hhjubj)}(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&]noemphjjuh1jhjFubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhjhMubah}(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}(hjAhhhNhNubah}(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&]jjjjYjjYjjjuh1jhhhjhNhNubj)}(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%)}(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.chMhj]ubji)}(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.chMhj|ubj)}(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&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjyubjn)}(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&]uh1jmhjhMhjyubeh}(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)}(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 }(hj hhhNhNubh)}(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.chMhj ubh1 hook for bridges that subclass the bridge state.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_atomic_helper_bridge_reset (C function) c.drm_atomic_helper_bridge_resethNtauh1jxhjhhhNhNubj)}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:80: ./drivers/gpu/drm/drm_atomic_state_helper.chM&ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjkhM&ubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_atomic_helper_bridge_resetsb c.drm_atomic_helper_bridge_resetasbuh1hhjZhhhjkhM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjkhM&ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZhhhjkhM&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&]jjuh1jhjZhhhjkhM&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*}(hj"hhhNhNubah}(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&]jjuh1jhjZhhhjkhM&ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjkhM&ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjkhM&hjShhubj)}(hhh]h)}(h5Allocate and initialize a bridge state to its defaulth]h5Allocate and initialize a bridge state to its default}(hjYhhhNhNubah}(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&hjVhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjkhM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjhNhNubj)}(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%)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(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*hjuubji)}(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&]uh1jhhjuubh)}(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*hjuubh)}(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)hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(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&]uh1hhj,hhhhhKTubh)}(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.chKhj,hhubh)}(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 }(hjLhhhNhNubh)}(h8:c:type:`drm_plane_helper.prepare_fb `h]jz)}(hjVh]hdrm_plane_helper.prepare_fb}(hjXhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjTubah}(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.chKhjLubh . 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.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjshKhj,hhubj@)}(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, };}hj~sbah}(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.chKhj,hhubh)}(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(hj,hhubh)}(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.hj,hhubh)}(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.chK2hj,hhubj@)}(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&]jjjjjj}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK7hj,hhubh)}(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.chKEhj,hhubj@)}(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&]jjjjjj}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKIhj,hhubh)}(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)}(hjh]hdrm_shadow_plane_state.map}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(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.chKUhjubh7. The mappings are valid while the state is being used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hKUhj,hhubh)}(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 }(hjChhhNhNubjz)}(h2``DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS``h]h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubhg to initialize the rsp callbacks. Access to shadow-buffer mappings is similar to regular atomic_update.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chKYhj,hhubj@)}(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 }}hjdsbah}(h]h ]h"]h$]h&]jjjjjj}uh1j?hk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:86: ./drivers/gpu/drm/drm_gem_atomic_helper.chK^hj,hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$DRM_SHADOW_PLANE_MAX_WIDTH (C macro)c.DRM_SHADOW_PLANE_MAX_WIDTHhNtauh1jxhj,hhhg/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)}(hjh]hDRM_SHADOW_PLANE_MAX_WIDTH}(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&]jjjjjjjjjuh1jhhhj,hjhNubh)}(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.hhKhj,hhubjb=)}(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=hjhKhj,hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%DRM_SHADOW_PLANE_MAX_HEIGHT (C macro)c.DRM_SHADOW_PLANE_MAX_HEIGHThNtauh1jxhj,hhhjhNubj)}(hhh](j)}(hDRM_SHADOW_PLANE_MAX_HEIGHTh]j)}(hDRM_SHADOW_PLANE_MAX_HEIGHTh]j)}(hDRM_SHADOW_PLANE_MAX_HEIGHTh]j)}(hj7h]hDRM_SHADOW_PLANE_MAX_HEIGHT}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK"ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhjThK"ubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhjThK"hj2hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj2hhhjThK"ubeh}(h]h ](jmacroeh"]h$]h&]jjjjmjjmjjjuh1jhhhj,hjhNubh)}(h``DRM_SHADOW_PLANE_MAX_HEIGHT``h]jz)}(hjsh]hDRM_SHADOW_PLANE_MAX_HEIGHT}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(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,hhubjb=)}(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"hjubah}(h]h ]h"]h$]h&]uh1ja=hjhK"hjubh)}(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$hjubh)}(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#hjubeh}(h]h ]h"]h$]h&]uh1ja=hjhK"hj,hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_shadow_plane_state (C struct)c.drm_shadow_plane_statehNtauh1jxhj,hhhjhNubj)}(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}(hj hhhNhNubah}(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}(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.hhK+hj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK*ubeh}(h]h ](jstructeh"]h$]h&]jjjjFjjFjjjuh1jhhhj,hjhNubj)}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubh:}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK/hjJubj@)}(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]; };}hjksbah}(h]h ]h"]h$]h&]jjuh1j?hg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhK1hjJubh)}(h **Members**h]j%)}(hj|h]hMembers}(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:89: ./include/drm/drm_gem_atomic_helper.hhK8hjJubji)}(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.hhK3hjubj)}(hhh]h)}(h plane stateh]h plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK3hjubjn)}(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&]uh1jyhjubah}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKBhj3ubh)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKDhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hKEhjubjn)}(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)}(hjfh]hdata}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKLhj`ubj)}(hhh](h)}(h%Address of each framebuffer BO's datah]h'Address of each framebuffer BO’s data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKJhj|ubh)}(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&]uh1hhj{hKLhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hKLhjubeh}(h]h ]h"]h$]h&]uh1jhhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhjhNubh)}(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.hhKPhj,hhubh)}(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,hj,hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&to_drm_shadow_plane_state (C function)c.to_drm_shadow_plane_statehNtauh1jxhj,hhhjhNubj)}(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.hhKRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKRubh)}(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_stateasbuh1hhjhhhjhKRubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKRubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKRubj)}(hto_drm_shadow_plane_stateh]j)}(hj2h]hto_drm_shadow_plane_state}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKRubj)}(h(struct drm_plane_state *state)h]j)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0c.to_drm_shadow_plane_stateasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKRubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKRubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKRhjhhubj)}(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&]uh1jhjhhhjhKRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj,hjhNubj)}(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.hhKVhj ubji)}(hhh]jn)}(h1``struct drm_plane_state *state`` the plane stateh](jt)}(h!``struct drm_plane_state *state``h]jz)}(hj1h]hstruct drm_plane_state *state}(hj3hhhNhNubah}(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.hhKXhj+ubj)}(hhh]h)}(hthe plane stateh]hthe plane state}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKShjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhjFhKXhj(ubah}(h]h ]h"]h$]h&]uh1jhhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhjhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$DRM_GEM_SHADOW_PLANE_FUNCS (C macro)c.DRM_GEM_SHADOW_PLANE_FUNCShNtauh1jxhj,hhhjhNubj)}(hhh](j)}(hDRM_GEM_SHADOW_PLANE_FUNCSh]j)}(hDRM_GEM_SHADOW_PLANE_FUNCSh]j)}(hDRM_GEM_SHADOW_PLANE_FUNCSh]j)}(hjh]hDRM_GEM_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.hhKgubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKgubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jhjhKghjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKgubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhj,hjhNubh)}(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.hhKihj,hhubjb=)}(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.}(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.hhKhhjubeh}(h]h ]h"]h$]h&]uh1ja=hjhKghj,hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+DRM_GEM_SHADOW_PLANE_HELPER_FUNCS (C macro)#c.DRM_GEM_SHADOW_PLANE_HELPER_FUNCShNtauh1jxhj,hhhjhNubj)}(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)}(hj4h]h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCS}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKvubah}(h]h ]h"]h$]h&]jjjuh1jjjhj2hhhjQhKvubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jhjQhKvhj/hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj/hhhjQhKvubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjjjuh1jhhhj,hjhNubh)}(h%``DRM_GEM_SHADOW_PLANE_HELPER_FUNCS``h]jz)}(hjph]h!DRM_GEM_SHADOW_PLANE_HELPER_FUNCS}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKxhj,hhubjb=)}(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.hhKvhjubah}(h]h ]h"]h$]h&]uh1ja=hjhKvhjubh)}(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.hhKxhjubh)}(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.hhKwhjubeh}(h]h ]h"]h$]h&]uh1ja=hjhKvhj,hhubjy)}(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_FUNCShNtauh1jxhj,hhhjhNubj)}(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&]jjjjjjjjjuh1jhhhj,hjhNubh)}(h2``DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS``h]jz)}(hjh]h.DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS}(hj!hhhNhNubah}(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.hhKhj,hhubjb=)}(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.hhKhj9ubah}(h]h ]h"]h$]h&]uh1ja=hjKhKhj5ubh)}(h**Description**h]j%)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhj5ubh)}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:89: ./include/drm/drm_gem_atomic_helper.hhKhj5ubeh}(h]h ]h"]h$]h&]uh1ja=hjKhKhj,hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_gem_plane_helper_prepare_fb (C function)!c.drm_gem_plane_helper_prepare_fbhNtauh1jxhj,hhhNhNubj)}(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.chKwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKwubj)}(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&]jjuh1jhjhhhjhKwubj)}(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*}(hj!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_plane_state *stateh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j!c.drm_gem_plane_helper_prepare_fbasbuh1hhjCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjCubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKwubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKwubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKwhjhhubj)}(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.chKwhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKwubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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.chK{hjubji)}(hhh](jn)}(h"``struct drm_plane *plane`` Plane h](jt)}(h``struct drm_plane *plane``h]jz)}(hj h]hstruct drm_plane *plane}(hj hhhNhNubah}(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.chKxhjubj)}(hhh]h)}(hPlaneh]hPlane}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKxhjubjn)}(hL``struct drm_plane_state *state`` Plane state the fence will be attached to h](jt)}(h!``struct drm_plane_state *state``h]jz)}(hjBh]hstruct drm_plane_state *state}(hjDhhhNhNubah}(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.chKyhj<ubj)}(hhh]h)}(h)Plane state the fence will be attached toh]h)Plane state the fence will be attached to}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKyhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhjWhKyhjubeh}(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&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chK{hjubh)}(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 }(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_funcsuh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chKhj ubh` hook for simple GEM based framebuffer drivers which have their buffers always pinned in memory.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hKhjubh)}(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)}(hjGh]h!drm_plane_helper_funcs.prepare_fb}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(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&]uh1hhjdhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3__drm_gem_duplicate_shadow_plane_state (C function)(c.__drm_gem_duplicate_shadow_plane_statehNtauh1jxhj,hhhNhNubj)}(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&]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)}(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&]jjuh1jhjhhhjhKubj)}(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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hj%hhhNhNubah}(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 }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(hdrm_shadow_plane_stateh]hdrm_shadow_plane_state}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j(c.__drm_gem_duplicate_shadow_plane_stateasbuh1hhj:ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hjhhhNhNubah}(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&]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&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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}(hjhhhNhNubah}(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)}(hj9h]h5struct drm_shadow_plane_state *new_shadow_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.chKhj3ubj)}(hhh]h)}(h#the new shadow-buffered plane stateh]h#the new shadow-buffered plane state}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhjNhKhjubeh}(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.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.}(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.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&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_gem_duplicate_shadow_plane_state (C function)&c.drm_gem_duplicate_shadow_plane_statehNtauh1jxhj,hhhNhNubj)}(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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjOhhhNhNubah}(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 reftargetjbmodnameN classnameNjj)}j]j&c.drm_gem_duplicate_shadow_plane_stateasbuh1hhj>ubj)}(h h]h }(hj~hhhNhNubah}(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: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&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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&]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&]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 }(hjUhhhNhNubh)}(hB:c:type:`drm_plane_funcs.atomic_duplicate_state `h]jz)}(hj_h]h&drm_plane_funcs.atomic_duplicate_state}(hjahhhNhNubah}(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.chKhjUubh 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.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hKhjubh)}(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.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&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1__drm_gem_destroy_shadow_plane_state (C function)&c.__drm_gem_destroy_shadow_plane_statehNtauh1jxhj,hhhNhNubj)}(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)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.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(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&]jjuh1jhjhhhjhM ubj)}(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}(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj: modnameN classnameNjj)}j]j%)}jj sb&c.__drm_gem_destroy_shadow_plane_stateasbuh1hhj ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjf hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hshadow_plane_stateh]hshadow_plane_state}(hjs hhhNhNubah}(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)}(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&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj,hNhNubj)}(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.chMhj ubj)}(hhh]h)}(hthe shadow-buffered plane stateh]hthe shadow-buffered 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 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&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_gem_destroy_shadow_plane_state (C function)$c.drm_gem_destroy_shadow_plane_statehNtauh1jxhj,hhhNhNubj)}(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}(hj^ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ hhhjl hMubj)}(h"drm_gem_destroy_shadow_plane_stateh]j)}(h"drm_gem_destroy_shadow_plane_stateh]h"drm_gem_destroy_shadow_plane_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZ hhhjl hMubj)}(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%)}jj 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 }(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjW hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(h plane_stateh]h plane_state}(hjd hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjZ hhhjl hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjV hhhjl hMubah}(h]jQ ah ](jjeh"]h$]h&]jj)jhuh1jhjl hMhjS 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&]uh1jhjS hhhjl hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj,hNhNubj)}(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%)}(hjC h]h Description}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjA 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 }(hjY hhhNhNubh)}(h@:c:type:`drm_plane_funcs.atomic_destroy_state `h]jz)}(hjc h]h$drm_plane_funcs.atomic_destroy_state}(hje hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhja 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.chMhjY ubhc for shadow-buffered planes. It expects that mappings of shadow buffers have been released already.}(hjY hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)__drm_gem_reset_shadow_plane (C function)c.__drm_gem_reset_shadow_planehNtauh1jxhj,hhhNhNubj)}(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.chM/ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM/ubj)}(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 hM/ubj)}(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*}(hj4 hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hplaneh]hplane}(hjA 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}(hjZ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubj)}(h h]h }(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubh)}(hhh]j)}(hdrm_shadow_plane_stateh]hdrm_shadow_plane_state}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjz modnameN classnameNjj)}j]j" c.__drm_gem_reset_shadow_planeasbuh1hhjV ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjV ubj)}(hshadow_plane_stateh]hshadow_plane_state}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV 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)}(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 hM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj,hNhNubj)}(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.chM3hj ubji)}(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.chM0hjubj)}(hhh]h)}(h the planeh]h the plane}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM0hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hM0hjubjn)}(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)}(hjUh]h1struct drm_shadow_plane_state *shadow_plane_state}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chM1hjOubj)}(hhh]h)}(hthe shadow-buffered plane stateh]hthe shadow-buffered plane state}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhM1hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhM1hjubeh}(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.chM3hj 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&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_gem_reset_shadow_plane (C function)c.drm_gem_reset_shadow_planehNtauh1jxhj,hhhNhNubj)}(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.chM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM?ubj)}(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&]jjuh1jhjhhhjhM?ubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsbc.drm_gem_reset_shadow_planeasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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)}(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&]uh1jhjhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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.chMChjubji)}(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.chMBhjubh)}(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 }(hj'hhhNhNubh)}(h7:c:type:`drm_plane_funcs.reset_plane `h]jz)}(hj1h]hdrm_plane_funcs.reset_plane}(hj3hhhNhNubah}(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.chMAhj'ubh 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.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_gem_begin_shadow_fb_access (C function) c.drm_gem_begin_shadow_fb_accesshNtauh1jxhj,hhhNhNubj)}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjhMXubj)}(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&]jjuh1jhjuhhhjhMXubj)}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j c.drm_gem_begin_shadow_fb_accessasbuh1hhj$ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(hj9h]h*}(hjrhhhNhNubah}(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&]jjuh1jhjuhhhjhMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjqhhhjhMXubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhjhMXhjnhhubj)}(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.chMXhjhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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.chMYhjubj)}(hhh]h)}(h the planeh]h the plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMYhjubjn)}(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.chMZhjubj)}(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&]uh1hhj8hMZhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hMZhjubeh}(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&]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 }(hjthhhNhNubh)}(hI:c:type:`drm_plane_helper_funcs.begin_fb_access `h]jz)}(hj~h]h&drm_plane_helper_funcs.begin_fb_access}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj|ubah}(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[hjtubhn. It maps all buffer objects of the plane’s framebuffer into kernel address space and stores them in struct }(hjthhhNhNubh)}(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[hjtubh/. The first data bytes are available in struct }(hjthhhNhNubh)}(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[hjtubh.}(hjthhhNhNubeh}(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.chMchjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_gem_end_shadow_fb_access (C function)c.drm_gem_end_shadow_fb_accesshNtauh1jxhj,hhhNhNubj)}(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}(hjBhhhNhNubah}(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.chMsubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhMsubj)}(hdrm_gem_end_shadow_fb_accessh]j)}(hdrm_gem_end_shadow_fb_accessh]hdrm_gem_end_shadow_fb_access}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMsubj)}(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&]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%)}jjesbc.drm_gem_end_shadow_fb_accessasbuh1hhj{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)}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_end_shadow_fb_accessasbuh1hhjubj)}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:hhhjPhMsubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhjPhMshj7hhubj)}(hhh]h)}(h,releases shadow framebuffers from CPU accessh]h,releases shadow framebuffers from CPU access}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMshjohhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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.chMwhjubji)}(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.chMthjubj)}(hhh]h)}(h the planeh]h the plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMthjubjn)}(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.chMuhjubj)}(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&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMuhjubeh}(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&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMwhjubh)}(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)}(hjGh]h$drm_plane_helper_funcs.end_fb_access}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(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&]uh1hhjdhMvhjubh)}(h:See drm_gem_begin_shadow_fb_access() for more information.h]h:See drm_gem_begin_shadow_fb_access() for more information.}(hjohhhNhNubah}(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&]uh1jhj,hhhNhNubjy)}(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_accesshNtauh1jxhj,hhhNhNubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j+c.drm_gem_simple_kms_begin_shadow_fb_accessasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(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&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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&]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}(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_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)}(hjHh]h#struct drm_plane_state *plane_state}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjBubj)}(hhh]h)}(h5the plane state of type struct drm_shadow_plane_stateh]h5the plane state of type struct drm_shadow_plane_state}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhjubeh}(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.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&]uh1jhj,hhhNhNubjy)}(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_accesshNtauh1jxhj,hhhNhNubj)}(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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj 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&]uh1jhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j%)}jj!sb)c.drm_gem_simple_kms_end_shadow_fb_accessasbuh1hhj7ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubj)}(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]ju)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&]noemphjjuh1jhj3ubeh}(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,releases shadow framebuffers from CPU accessh]h,releases shadow framebuffers from CPU access}(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&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhj,hNhNubj)}(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%)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&]uh1hhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjJubji)}(hhh](jn)}(hA``struct drm_simple_display_pipe *pipe`` the simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjoh]h$struct drm_simple_display_pipe *pipe}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhjiubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjfubjn)}(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&]uh1jmhjhMhjfubeh}(h]h ]h"]h$]h&]uh1jhhjJubh)}(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.chMhjJubh)}(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.chMhjJubh)}(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.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_gem_simple_kms_reset_shadow_plane (C function)'c.drm_gem_simple_kms_reset_shadow_planehNtauh1jxhj,hhhNhNubj)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjEhMubj)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhjEhMubj)}(h&(struct drm_simple_display_pipe *pipe)h]j)}(h$struct drm_simple_display_pipe *pipeh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(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%)}jjZsb'c.drm_gem_simple_kms_reset_shadow_planeasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hpipeh]hpipe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubah}(h]h ]h"]h$]h&]jjuh1jhj3hhhjEhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhjEhMubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhjEhMhj,hhubj)}(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&]uh1jhj,hhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj,hNhNubj)}(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%)}(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)}(hj8h]h$struct drm_simple_display_pipe *pipe}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshk/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:92: ./drivers/gpu/drm/drm_gem_atomic_helper.chMhj2ubj)}(hhh]h)}(hthe simple display pipeh]hthe simple display pipe}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhj/ubah}(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&]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.}(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&]uh1jhj,hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j` 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&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_planeuh1hhj hKhjubh, }(hjhhhNhNubh)}(h:c:type:`drm_crtc`h]jz)}(hj2 h]hdrm_crtc}(hj4 hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0 ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtcuh1hhj hKhjubh and }(hjhhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hjU h]h drm_encoder}(hjW hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjS ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_encoderuh1hhj hKhjubhn structures into one fixed entity. Some flexibility for code reuse is provided through a separately allocated }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjx h]h drm_connector}(hjz hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjv ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj hKhjubh 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_bridgeuh1hhj hKhjubh encoder drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhjhhubh)}(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&]jjjjD!jjD!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}(hjP!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjL!ubh:}(hjL!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjH!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); };}hji!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.hhKhjH!ubh)}(h **Members**h]j%)}(hjz!h]hMembers}(hj|!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjx!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*hjH!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.}(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.hhK9hjB"ubah}(h]h ]h"]h$]h&]uh1jhj&"ubeh}(h]h ]h"]h$]h&]uh1jmhjA"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)}(hjf"h]hdisable}(hjh"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjd"ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKEhj`"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.}(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.hhKChj|"ubah}(h]h ]h"]h$]h&]uh1jhj`"ubeh}(h]h ]h"]h$]h&]uh1jmhj{"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.}(hj4#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`hj1#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 }(hjC#hhhNhNubh)}(h":c:type:`drm_pending_vblank_event`h]jz)}(hjM#h]hdrm_pending_vblank_event}(hjO#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjK#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.hhKchjC#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 }(hjC#hhhNhNubh)}(h0:c:type:`struct drm_crtc_state `h]jz)}(hjq#h]hstruct drm_crtc_state}(hjs#hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjo#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjj#hKchjC#ubh.no_vblank in }(hjC#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_funcsuh1hhjj#hKchjC#ubh9.check and let DRM’s atomic helper fake a vblank event.}(hjC#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjj#hKchj1#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj0#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}(hjC$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;$ubh nor }(hj;$hhhNhNubj%)}(h**cleanup_fb**h]h cleanup_fb}(hjU$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}(hjg$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)}(hj5%h]h&drm_plane_helper_funcs.begin_fb_access}(hj7%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3%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)}(hjY%h]h&drm_plane_helper_funcs.begin_fb_access}(hj[%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjW%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhjR%hKhj+%ubh hook for more details.}(hj+%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR%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)}(hj5&h]hdrm_crtc_funcs.enable_vblank}(hj7&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3&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)}(hjY&h]hdrm_crtc_funcs.enable_vblank}(hj[&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjW&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjR&hKhj+&ubh hook for more details.}(hj+&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR&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)}(hj5'h]hdrm_crtc_funcs.reset}(hj7'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3'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)}(hjY'h]hdrm_crtc_funcs.reset}(hj['hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjW'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjR'hKhj+'ubh hook for more details.}(hj+'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR'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)}(hj5(h]h#drm_crtc_funcs.atomic_destroy_state}(hj7(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3(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)}(hjY(h]h#drm_crtc_funcs.atomic_destroy_state}(hj[(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjW(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhjR(hKhj+(ubh hook for more details.}(hj+(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR(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)}(hj5)h]h&drm_plane_funcs.atomic_duplicate_state}(hj7)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3)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)}(hjY)h]h&drm_plane_funcs.atomic_duplicate_state}(hj[)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjW)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_funcsuh1hhjR)hKhj+)ubh hook for more details.}(hj+)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR)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&]uh1jhhjH!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}(hj2*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_pipeh]j)}(hj,*h]hdrm_simple_display_pipe}(hjR*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN*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)}(hsimple display pipelineh]hsimple display pipeline}(hjt*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjq*hhubah}(h]h ]h"]h$]h&]uh1jhj'*hhhj?*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}(hj3+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/+hKhj0+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)}(hjS+h]hencoder}(hjU+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ+ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhKhjM+ubj)}(hhh]h)}(hEncoder control structureh]hEncoder control structure}(hjl+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh+hKhji+ubah}(h]h ]h"]h$]h&]uh1jhjM+ubeh}(h]h ]h"]h$]h&]uh1jmhjh+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.hhKhj+ubj)}(hhh]h)}(hConnector control structureh]hConnector 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/``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)}(hj@,h]hdrmm_simple_encoder_alloc}(hjJ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjB,hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:101: ./include/drm/drm_simple_kms_helper.hhM ubah}(h]h ]h"]h$]h&]jjjuh1jjjhj>,hhhj],hM ubah}(h]j9,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&]jjjjv,jjv,jjjuh1jhhhjhNhNubh)}(h?``drmm_simple_encoder_alloc (dev, type, member, encoder_type)``h]jz)}(hj|,h]h;drmm_simple_encoder_alloc (dev, type, member, encoder_type)}(hj~,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjz,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.chKahj9ubhX 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&]uh1hhj9hKahj9hhubh)}(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.chKmhj9ubhx 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:hKmhj9ubhXJ 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:hKmhj9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_helper_surface_size (C struct)c.drm_fb_helper_surface_sizehNtauh1jxhj9hhh`/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}(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.hhKubj)}(h h]h }(hjm:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[:hhhjl:hKubj)}(hdrm_fb_helper_surface_sizeh]j)}(hjY:h]hdrm_fb_helper_surface_size}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[:hhhjl:hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjW:hhhjl:hKubah}(h]jQ:ah ](jjeh"]h$]h&]jj)jhuh1jhjl:hKhjT: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&]uh1jhjT:hhhjl:hKubeh}(h]h ](jstructeh"]h$]h&]jjjj:jj:jjjuh1jhhhj9hjS: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)}(hjG;h]h fb_height}(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:113: ./include/drm/drm_fb_helper.hhK,hjA;ubj)}(hhh]h)}(h fbdev heighth]h fbdev height}(hj`;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\;hK,hj];ubah}(h]h ]h"]h$]h&]uh1jhjA;ubeh}(h]h ]h"]h$]h&]uh1jmhj\;hK,hj;ubjn)}(h'``surface_width`` scanout buffer width h](jt)}(h``surface_width``h]jz)}(hj;h]h surface_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-hjz;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&]uh1jhjz;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}(hjD<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK0hjA<ubah}(h]h ]h"]h$]h&]uh1jhj%<ubeh}(h]h ]h"]h$]h&]uh1jmhj@<hK/hj;ubeh}(h]h ]h"]h$]h&]uh1jhhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhjS:hNubh)}(h**Description**h]j%)}(hjn<h]h Description}(hjp<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjl<ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK3hj9hhubh)}(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 }(hj<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.hhK0hj<ubh structure.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hK0hj9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_helper_funcs (C struct)c.drm_fb_helper_funcshNtauh1jxhj9hhhjS: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.hhK;ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hK;ubj)}(hdrm_fb_helper_funcsh]j)}(hj<h]hdrm_fb_helper_funcs}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]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)}(h0driver callbacks for the fbdev emulation libraryh]h0driver callbacks for the fbdev emulation library}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKChj=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hK;ubeh}(h]h ](jstructeh"]h$]h&]jjjj)=jj)=jjjuh1jhhhj9hjS:hNubj)}(hX**Definition**:: struct drm_fb_helper_funcs { int (*fb_dirty)(struct drm_fb_helper *helper, struct drm_clip_rect *clip); void (*fb_restore)(struct drm_fb_helper *helper); void (*fb_set_suspend)(struct drm_fb_helper *helper, bool suspend); }; **Members** ``fb_dirty`` Driver callback to update the framebuffer memory. If set, fbdev emulation will invoke this callback in regular intervals after the framebuffer has been written. This callback is optional. Returns: 0 on success, or an error code otherwise. ``fb_restore`` Driver callback to restore internal fbdev state. If set, fbdev emulation will invoke this callback after restoring the display mode. Only for i915. Do not use in new code. TODO: Fix i915 to not require this callback. ``fb_set_suspend`` Driver 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. Only for i915. Do not use in new code. TODO: Fix i915 to not require this callback.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj5=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1=ubh:}(hj1=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKGhj-=ubj@)}(hstruct drm_fb_helper_funcs { int (*fb_dirty)(struct drm_fb_helper *helper, struct drm_clip_rect *clip); void (*fb_restore)(struct drm_fb_helper *helper); void (*fb_set_suspend)(struct drm_fb_helper *helper, bool suspend); };h]hstruct drm_fb_helper_funcs { int (*fb_dirty)(struct drm_fb_helper *helper, struct drm_clip_rect *clip); void (*fb_restore)(struct drm_fb_helper *helper); void (*fb_set_suspend)(struct drm_fb_helper *helper, bool suspend); };}hjN=sbah}(h]h ]h"]h$]h&]jjuh1j?h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKIhj-=ubh)}(h **Members**h]j%)}(hj_=h]hMembers}(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.hhKOhj-=ubji)}(hhh](jn)}(h``fb_dirty`` Driver callback to update the framebuffer memory. If set, fbdev emulation will invoke this callback in regular intervals after the framebuffer has been written. This callback is optional. Returns: 0 on success, or an error code otherwise. h](jt)}(h ``fb_dirty``h]jz)}(hj~=h]hfb_dirty}(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.hhKQhjx=ubj)}(hhh](h)}(hDriver callback to update the framebuffer memory. If set, fbdev emulation will invoke this callback in regular intervals after the framebuffer has been written.h]hDriver callback to update the framebuffer memory. If set, fbdev emulation will invoke this callback in regular intervals after the framebuffer has been written.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKJhj=ubh)}(hThis callback is optional.h]hThis callback is optional.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKNhj=ubh)}(h2Returns: 0 on success, or an error code otherwise.h]h2Returns: 0 on success, or an error code otherwise.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKPhj=ubeh}(h]h ]h"]h$]h&]uh1jhjx=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hKQhju=ubjn)}(h``fb_restore`` Driver callback to restore internal fbdev state. If set, fbdev emulation will invoke this callback after restoring the display mode. Only for i915. Do not use in new code. TODO: Fix i915 to not require this callback. h](jt)}(h``fb_restore``h]jz)}(hj=h]h fb_restore}(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)}(hDriver callback to restore internal fbdev state. If set, fbdev emulation will invoke this callback after restoring the display mode.h]hDriver callback to restore internal fbdev state. If set, fbdev emulation will invoke this callback after restoring the display mode.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKXhj=ubh)}(h&Only for i915. Do not use in new code.h]h&Only for i915. Do not use in new code.}(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=ubh)}(h,TODO: Fix i915 to not require this callback.h]h,TODO: Fix i915 to not require this callback.}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hK^hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhj=hK^hju=ubjn)}(hX]``fb_set_suspend`` Driver 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. Only for i915. Do not use in new code. TODO: Fix i915 to not require this callback.h](jt)}(h``fb_set_suspend``h]jz)}(hj->h]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.}(hjF>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKehjC>ubh)}(h&Only for i915. Do not use in new code.h]h&Only for i915. Do not use in new code.}(hjU>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKjhjC>ubh)}(h,TODO: Fix i915 to not require this callback.h]h,TODO: Fix i915 to not require this callback.}(hjd>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKlhjC>ubeh}(h]h ]h"]h$]h&]uh1jhj'>ubeh}(h]h ]h"]h$]h&]uh1jmhjB>hKkhju=ubeh}(h]h ]h"]h$]h&]uh1jhhj-=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhjS: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.hhKohj9hhubh)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKDhj9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_helper (C struct)c.drm_fb_helperhNtauh1jxhj9hhhjS: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&?jjjuh1jhhhj9hjS: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}(hj2?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; };}hjK?sbah}(h]h ]h"]h$]h&]jjuh1j?h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKyhj*?ubh)}(h **Members**h]j%)}(hj\?h]hMembers}(hj^?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZ?ubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhj*?ubji)}(hhh](jn)}(h;``client`` DRM client used by the generic fbdev emulation. h](jt)}(h ``client``h]jz)}(hj{?h]hclient}(hj}?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjy?ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhju?ubj)}(hhh]h)}(h/DRM client used by the generic fbdev emulation.h]h/DRM client used by the generic fbdev emulation.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj?ubah}(h]h ]h"]h$]h&]uh1jhju?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhjr?ubjn)}(h<``buffer`` Framebuffer used by the generic fbdev emulation. h](jt)}(h ``buffer``h]jz)}(hj?h]hbuffer}(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.hhKhj?ubj)}(hhh]h)}(h0Framebuffer used by the generic fbdev emulation.h]h0Framebuffer used by the generic fbdev emulation.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhjr?ubjn)}(h"``fb`` Scanout framebuffer object h](jt)}(h``fb``h]jz)}(hj?h]hfb}(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.hhKuhj?ubj)}(hhh]h)}(hScanout framebuffer objecth]hScanout framebuffer object}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKuhj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKuhjr?ubjn)}(h``dev`` DRM device 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:113: ./include/drm/drm_fb_helper.hhKvhj @ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj?@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;@hKvhj<@ubah}(h]h ]h"]h$]h&]uh1jhj @ubeh}(h]h ]h"]h$]h&]uh1jmhj;@hKvhjr?ubjn)}(h)``funcs`` driver callbacks for fb helper h](jt)}(h ``funcs``h]jz)}(hj_@h]hfuncs}(hja@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.hhKwhjY@ubj)}(hhh]h)}(hdriver callbacks for fb helperh]hdriver callbacks for fb helper}(hjx@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt@hKwhju@ubah}(h]h ]h"]h$]h&]uh1jhjY@ubeh}(h]h ]h"]h$]h&]uh1jmhjt@hKwhjr?ubjn)}(h+``info`` emulated fbdev device info struct h](jt)}(h``info``h]jz)}(hj@h]hinfo}(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.hhKxhj@ubj)}(hhh]h)}(h!emulated fbdev device info structh]h!emulated fbdev device info struct}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKxhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKxhjr?ubjn)}(h-``pseudo_palette`` fake palette of 16 colors h](jt)}(h``pseudo_palette``h]jz)}(hj@h]hpseudo_palette}(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.hhKyhj@ubj)}(hhh]h)}(hfake palette of 16 colorsh]hfake palette of 16 colors}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKyhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hKyhjr?ubjn)}(h_``damage_clip`` clip rectangle used with deferred_io to accumulate damage to the screen buffer h](jt)}(h``damage_clip``h]jz)}(hj Ah]h damage_clip}(hj AhhhNhNubah}(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.hhK{hjAubj)}(hhh]h)}(hNclip rectangle used with deferred_io to accumulate damage to the screen bufferh]hNclip rectangle used with deferred_io to accumulate damage to the screen buffer}(hj#AhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKzhj Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjAhK{hjr?ubjn)}(h4``damage_lock`` spinlock protecting **damage_clip** h](jt)}(h``damage_lock``h]jz)}(hjDAh]h damage_lock}(hjFAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBAubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhK|hj>Aubj)}(hhh]h)}(h#spinlock protecting **damage_clip**h](hspinlock protecting }(hj]AhhhNhNubj%)}(h**damage_clip**h]h damage_clip}(hjeAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]Aubeh}(h]h ]h"]h$]h&]uh1hhjYAhK|hjZAubah}(h]h ]h"]h$]h&]uh1jhj>Aubeh}(h]h ]h"]h$]h&]uh1jmhjYAhK|hjr?ubjn)}(h5``damage_work`` worker used to flush the framebuffer h](jt)}(h``damage_work``h]jz)}(hjAh]h damage_work}(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.hhK}hjAubj)}(hhh]h)}(h$worker used to flush the framebufferh]h$worker used to flush the framebuffer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhK}hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjAhK}hjr?ubjn)}(hO``resume_work`` worker used during resume if the console lock is already taken h](jt)}(h``resume_work``h]jz)}(hjAh]h resume_work}(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.hhK~hjAubj)}(hhh]h)}(h>worker 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~hjr?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}(hj0BhhhNhNubah}(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.}(hjIBhhhNhNubah}(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&]uh1jmhjBhKhjr?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)}(hjjBh]hkernel_fb_list}(hjlBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhBubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjdBubj)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjBubah}(h]h ]h"]h$]h&]uh1jhjdBubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjr?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&]uh1jmhjBhKhjr?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 }(hjChhhNhNubj%)}(h**lock**h]hlock}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhKhjBubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjr?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)}(hj7Ch]h preferred_bpp}(hj9ChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5Cubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhj1Cubj)}(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.}(hjPChhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjMCubh)}(hSee also: **deferred_setup**h](h See also: }(hj_ChhhNhNubj%)}(h**deferred_setup**h]hdeferred_setup}(hjgChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_Cubeh}(h]h ]h"]h$]h&]uh1hhjLChKhjMCubeh}(h]h ]h"]h$]h&]uh1jhj1Cubeh}(h]h ]h"]h$]h&]uh1jmhjLChKhjr?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)}(hjCh]hfbdefio}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjCubj)}(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&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChKhjr?ubeh}(h]h ]h"]h$]h&]uh1jhhj*?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhjS: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.hhKhj9hhubh)}(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.hhK~hjCubh with a few operations.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj DhK~hj9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#DRM_FB_HELPER_DEFAULT_OPS (C macro)c.DRM_FB_HELPER_DEFAULT_OPShNtauh1jxhj9hhhjS:hNubj)}(hhh](j)}(hDRM_FB_HELPER_DEFAULT_OPSh]j)}(hDRM_FB_HELPER_DEFAULT_OPSh]j)}(hDRM_FB_HELPER_DEFAULT_OPSh]j)}(hj+Dh]hDRM_FB_HELPER_DEFAULT_OPS}(hj5DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Dubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-Dhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKubah}(h]h ]h"]h$]h&]jjjuh1jjjhj)DhhhjHDhKubah}(h]j$Dah ](jjeh"]h$]h&]jj)jhuh1jhjHDhKhj&Dhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj&DhhhjHDhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjaDjjaDjjjuh1jhhhj9hjS:hNubh)}(h``DRM_FB_HELPER_DEFAULT_OPS``h]jz)}(hjgDh]hDRM_FB_HELPER_DEFAULT_OPS}(hjiDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeDubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhj9hhubjb=)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:113: ./include/drm/drm_fb_helper.hhKhjDubah}(h]h ]h"]h$]h&]uh1ja=hjDhKhj}Dubh)}(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.hhKhj}Dubh)}(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.hhKhj}Dubeh}(h]h ]h"]h$]h&]uh1ja=hjDhKhj9hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_debug_enter (C function)c.drm_fb_helper_debug_enterhNtauh1jxhj9hhhNhNubj)}(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}(hjEhhhNhNubah}(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&]uh1jhjEubj)}(h h]h }(hj*EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj;EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8Eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=EmodnameN classnameNjj)}j]j%)}jjEsbc.drm_fb_helper_debug_enterasbuh1hhjEubj)}(h h]h }(hj[EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjiEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(hinfoh]hinfo}(hjvEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(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]jWEc.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&]jjjjEjjEjjjuh1jhhhj9hNhNubj)}(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)}(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.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.chKhjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhjFhKhjEubah}(h]h ]h"]h$]h&]uh1jhhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_debug_leave (C function)c.drm_fb_helper_debug_leavehNtauh1jxhj9hhhNhNubj)}(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}(hj_FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Fhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKubj)}(h h]h }(hjnFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[FhhhjmFhKubj)}(hdrm_fb_helper_debug_leaveh]j)}(hdrm_fb_helper_debug_leaveh]hdrm_fb_helper_debug_leave}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Fubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[FhhhjmFhKubj)}(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%)}jjFsbc.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&]jjuh1jhj[FhhhjmFhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWFhhhjmFhKubah}(h]jRFah ](jjeh"]h$]h&]jj)jhuh1jhjmFhKhjTFhhubj)}(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)}(hj)Gh]hfb_ops.fb_debug_leave}(hj+GhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj'Gubah}(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.chKhjGhhubah}(h]h ]h"]h$]h&]uh1jhjTFhhhjmFhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[Gjj[Gjjjuh1jhhhj9hNhNubj)}(hI**Parameters** ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjeGh]h Parameters}(hjgGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcGubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhj_Gubji)}(hhh]jn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hjGh]hstruct fb_info *info}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chKhj~Gubj)}(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&]uh1jhj~Gubeh}(h]h ]h"]h$]h&]uh1jmhjGhKhj{Gubah}(h]h ]h"]h$]h&]uh1jhhj_Gubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_fb_helper_restore_fbdev_mode_unlocked (C function)+c.drm_fb_helper_restore_fbdev_mode_unlockedhNtauh1jxhj9hhhNhNubj)}(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.chMubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhMubj)}(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&]jjuh1jhjGhhhjGhMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hj(HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hj9HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;HmodnameN classnameNjj)}j]j%)}jjHsb+c.drm_fb_helper_restore_fbdev_mode_unlockedasbuh1hhjHubj)}(h h]h }(hjYHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(hj9h]h*}(hjgHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubj)}(h fb_helperh]h fb_helper}(hjtHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubah}(h]h ]h"]h$]h&]jjuh1jhjGhhhjGhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhjGhMubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jhjGhMhjGhhubj)}(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.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhj9hNhNubj)}(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%)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(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 }(hj0IhhhNhNubh)}(h5:c:type:`drm_client_funcs.restore `h]jz)}(hj:Ih]hdrm_client_funcs.restore}(hjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhM>ubj)}(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&]jjuh1jhjIhhhjIhM>ubj)}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj(JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj9JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;JmodnameN classnameNjj)}j]j%)}jjIsbc.drm_fb_helper_blankasbuh1hhjJubj)}(h h]h }(hjYJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj9)}(hj9h]h*}(hjgJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubj)}(hinfoh]hinfo}(hjtJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjIhM>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhjIhM>ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhjIhM>hjIhhubj)}(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]jUJc.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&]uh1jhjIhhhjIhM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhj9hNhNubj)}(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.chMBhjJubji)}(hhh](jn)}(h%``int blank`` desired blanking state h](jt)}(h ``int blank``h]jz)}(hjKh]h int blank}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(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}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM?hjKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjKhM?hjJubjn)}(h7``struct fb_info *info`` fbdev registered by the helperh](jt)}(h``struct fb_info *info``h]jz)}(hjKhhhNhNubah}(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.chMAhj6Kubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjUKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM@hjRKubah}(h]h ]h"]h$]h&]uh1jhj6Kubeh}(h]h ]h"]h$]h&]uh1jmhjQKhMAhjJubeh}(h]h ]h"]h$]h&]uh1jhhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_fb_helper_prepare (C function)c.drm_fb_helper_preparehNtauh1jxhj9hhhNhNubj)}(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}(hj,LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(hstruct drm_fb_helper *helperh](j)}(hjh]hstruct}(hjELhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjALubj)}(h h]h }(hjRLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjALubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjcLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjeLmodnameN classnameNjj)}j]j Lc.drm_fb_helper_prepareasbuh1hhjALubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjALubj9)}(hj9h]h*}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjALubj)}(hhelperh]hhelper}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjALubeh}(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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hjh]hstruct}(hj!MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj.MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hdrm_fb_helper_funcsh]hdrm_fb_helper_funcs}(hj?MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvoid 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}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Ohhhd/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&]uh1jhj OhhhjOhMubj)}(hdrm_fb_helper_unprepareh]j)}(hdrm_fb_helper_unprepareh]hdrm_fb_helper_unprepare}(hj/OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Oubah}(h]h ](jjeh"]h$]h&]jjuh1jhj OhhhjOhMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjKOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGOubj)}(h h]h }(hjXOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGOubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjiOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkOmodnameN classnameNjj)}j]j%)}jj1Osbc.drm_fb_helper_unprepareasbuh1hhjGOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGOubj9)}(hj9h]h*}(hjOhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGOubj)}(h fb_helperh]h fb_helper}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCOubah}(h]h ]h"]h$]h&]jjuh1jhj OhhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjOhMubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jhjOhMhjOhhubj)}(hhh]h)}(h"clean up a drm_fb_helper structureh]h"clean up a drm_fb_helper structure}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jhhhj9hNhNubj)}(h**Parameters** ``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper structure to set up **Description** Cleans up the framebuffer helper. Inverse of drm_fb_helper_prepare().h](h)}(h**Parameters**h]j%)}(hjOh]h Parameters}(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.chMhjOubji)}(hhh]jn)}(hV``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper structure to set up h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjPh]hstruct drm_fb_helper *fb_helper}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Pubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj Pubj)}(hhh]h)}(h1driver-allocated fbdev helper structure to set uph]h1driver-allocated fbdev helper structure to set up}(hj(PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$PhMhj%Pubah}(h]h ]h"]h$]h&]uh1jhj Pubeh}(h]h ]h"]h$]h&]uh1jmhj$PhMhjPubah}(h]h ]h"]h$]h&]uh1jhhjOubh)}(h**Description**h]j%)}(hjJPh]h Description}(hjLPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHPubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjOubh)}(hECleans up the framebuffer helper. Inverse of drm_fb_helper_prepare().h]hECleans up the framebuffer helper. Inverse of drm_fb_helper_prepare().}(hj`PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_helper_init (C function)c.drm_fb_helper_inithNtauh1jxhj9hhhNhNubj)}(hhh](j)}(hPint drm_fb_helper_init (struct drm_device *dev, struct drm_fb_helper *fb_helper)h]j)}(hOint drm_fb_helper_init(struct drm_device *dev, struct drm_fb_helper *fb_helper)h](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhMubj)}(hdrm_fb_helper_inith]j)}(hdrm_fb_helper_inith]hdrm_fb_helper_init}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjPhMubj)}(h9(struct drm_device *dev, struct drm_fb_helper *fb_helper)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j%)}jjPsbc.drm_fb_helper_initasbuh1hhjPubj)}(h h]h }(hj QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubj)}(hdevh]hdev}(hj%QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hj>QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Qubj)}(h h]h }(hjKQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Qubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hj\QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^QmodnameN classnameNjj)}j]jQc.drm_fb_helper_initasbuh1hhj:Qubj)}(h h]h }(hjzQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Qubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:Qubj)}(h fb_helperh]h fb_helper}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Qubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjPhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jhjPhMhjPhhubj)}(hhh]h)}(h;initialize a :c:type:`struct drm_fb_helper `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]jQc.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&]uh1jhjPhhhjPhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jhhhj9hNhNubj)}(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%)}(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.chMhjQubji)}(hhh](jn)}(h&``struct drm_device *dev`` drm device h](jt)}(h``struct drm_device *dev``h]jz)}(hj$Rh]hstruct drm_device *dev}(hj&RhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"Rubah}(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&]uh1hhj9RhMhj:Rubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhj9RhMhjRubjn)}(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)}(hj]Rh]hstruct drm_fb_helper *fb_helper}(hj_RhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj[Rubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjWRubj)}(hhh]h)}(h5driver-allocated fbdev helper structure to initializeh]h5driver-allocated fbdev helper structure to initialize}(hjvRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrRhMhjsRubah}(h]h ]h"]h$]h&]uh1jhjWRubeh}(h]h ]h"]h$]h&]uh1jmhjrRhMhjRubeh}(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&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_helper_alloc_info (C function)c.drm_fb_helper_alloc_infohNtauh1jxhj9hhhNhNubj)}(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 }(hj!ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhj ShMubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj2ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4SmodnameN classnameNjj)}j]j%)}jdrm_fb_helper_alloc_infosbc.drm_fb_helper_alloc_infoasbuh1hhjShhhj ShMubj)}(h h]h }(hjSShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhj ShMubj9)}(hj9h]h*}(hjaShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjShhhj ShMubj)}(hdrm_fb_helper_alloc_infoh]j)}(hjPSh]hdrm_fb_helper_alloc_info}(hjrShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhj ShMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(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]jNSc.drm_fb_helper_alloc_infoasbuh1hhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSubj)}(h fb_helperh]h fb_helper}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhj ShMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj Shhhj ShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhj ShMhjShhubj)}(hhh]h)}(h(allocate fb_info and some of its membersh]h(allocate fb_info and some of its members}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj Thhubah}(h]h ]h"]h$]h&]uh1jhjShhhj ShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&Tjj&Tjjjuh1jhhhj9hNhNubj)}(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%)}(hj0Th]h Parameters}(hj2ThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.Tubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj*Tubji)}(hhh]jn)}(hB``struct drm_fb_helper *fb_helper`` driver-allocated fbdev helper h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hjOTh]hstruct drm_fb_helper *fb_helper}(hjQThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMTubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjITubj)}(hhh]h)}(hdriver-allocated fbdev helperh]hdriver-allocated fbdev helper}(hjhThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdThMhjeTubah}(h]h ]h"]h$]h&]uh1jhjITubeh}(h]h ]h"]h$]h&]uh1jmhjdThMhjFTubah}(h]h ]h"]h$]h&]uh1jhhj*Tubh)}(h**Description**h]j%)}(hjTh]h Description}(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.chMhj*Tubh)}(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&]uh1hhjThMhj*Tubh)}(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.chMhj*Tubh)}(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.chMhj*Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_fb_helper_release_info (C function)c.drm_fb_helper_release_infohNtauh1jxhj9hhhNhNubj)}(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}(hjUhhhNhNubah}(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 }(hj(UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhj'UhMubj)}(hdrm_fb_helper_release_infoh]j)}(hdrm_fb_helper_release_infoh]hdrm_fb_helper_release_info}(hj:UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Uubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhj'UhMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjVUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRUubj)}(h h]h }(hjcUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRUubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjtUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvUmodnameN classnameNjj)}j]j%)}jj`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.chMChjXhhubah}(h]h ]h"]h$]h&]uh1jhj"Xhhhj;XhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)Yjj)Yjjjuh1jhhhj9hNhNubj)}(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%)}(hj3Yh]h Parameters}(hj5YhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1Yubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMGhj-Yubji)}(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)}(hjRYh]hstruct drm_fb_helper *fb_helper}(hjTYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPYubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMDhjLYubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hjkYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgYhMDhjhYubah}(h]h ]h"]h$]h&]uh1jhjLYubeh}(h]h ]h"]h$]h&]uh1jmhjgYhMDhjIYubah}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMFhj-Yubh)}(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.chMEhj-Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_deferred_io (C function)c.drm_fb_helper_deferred_iohNtauh1jxhj9hhhNhNubj)}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhjYhMubj)}(h5(struct fb_info *info, struct list_head *pagereflist)h](j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hj!ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj.ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj?ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj` callback function for flushing the fbdev mmap writes.h](h)}(h**Parameters**h]j%)}(hj6[h]h Parameters}(hj8[hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4[ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj0[ubji)}(hhh](jn)}(h0``struct fb_info *info`` fb_info struct pointer h](jt)}(h``struct fb_info *info``h]jz)}(hjU[h]hstruct fb_info *info}(hjW[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjS[ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjO[ubj)}(hhh]h)}(hfb_info struct pointerh]hfb_info struct pointer}(hjn[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj[hMhjk[ubah}(h]h ]h"]h$]h&]uh1jhjO[ubeh}(h]h ]h"]h$]h&]uh1jmhjj[hMhjL[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.chMhj[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&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjL[ubeh}(h]h ]h"]h$]h&]uh1jhhj0[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.chMhj0[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\hMhj0[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_set_suspend (C function)c.drm_fb_helper_set_suspendhNtauh1jxhj9hhhNhNubj)}(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}(hj1\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)}(hdrm_fb_helper_set_suspendh]j)}(hdrm_fb_helper_set_suspendh]hdrm_fb_helper_set_suspend}(hjR\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN\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}(hjn\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj\ubj)}(h h]h }(hj{\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj\ubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j%)}jjT\sbc.drm_fb_helper_set_suspendasbuh1hhjj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj\ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjj\ubj)}(h fb_helperh]h fb_helper}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjf\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&]noemphjjuh1jhjf\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)}(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&\hhhj?\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=]jj=]jjjuh1jhhhj9hNhNubj)}(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%)}(hjG]h]h Parameters}(hjI]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjE]ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjA]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)}(hjf]h]hstruct drm_fb_helper *fb_helper}(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)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(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.``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]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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjA]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.chMhjA]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_fb_helper_set_suspend_unlocked (C function)$c.drm_fb_helper_set_suspend_unlockedhNtauh1jxhj9hhhNhNubj)}(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}(hj@^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}(hj\^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX^ubj)}(h h]h }(hji^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX^ubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjz^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|^modnameN classnameNjj)}j]j%)}jjB^sb$c.drm_fb_helper_set_suspend_unlockedasbuh1hhjX^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX^ubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjX^ubj)}(h fb_helperh]h fb_helper}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjT^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&]noemphjjuh1jhjT^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+_jjjuh1jhhhj9hNhNubj)}(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%)}(hj5_h]h Parameters}(hj7_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3_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)}(hjT_h]hstruct drm_fb_helper *fb_helper}(hjV_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjR_ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjN_ubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hjm_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji_hMhjj_ubah}(h]h ]h"]h$]h&]uh1jhjN_ubeh}(h]h ]h"]h$]h&]uh1jmhji_hMhjK_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_hMhjK_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.chM hj/_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&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_fb_helper_setcmap (C function)c.drm_fb_helper_setcmaphNtauh1jxhj9hhhNhNubj)}(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}(hjN`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ`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&]uh1jhjJ`hhhj\`hMubj)}(hdrm_fb_helper_setcmaph]j)}(hdrm_fb_helper_setcmaph]hdrm_fb_helper_setcmap}(hjo`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJ`hhhj\`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&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`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%)}jjq`sbc.drm_fb_helper_setcmapasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hcmaph]hcmap}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j`c.drm_fb_helper_setcmapasbuh1hhj`ubj)}(h h]h }(hj9ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjGahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hinfoh]hinfo}(hjTahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhjJ`hhhj\`hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjF`hhhj\`hMubah}(h]jA`ah ](jjeh"]h$]h&]jj)jhuh1jhj\`hMhjC`hhubj)}(hhh]h)}(h7implementation for :c:type:`fb_ops.fb_setcmap `h](himplementation for }(hj~ahhhNhNubh)}(h$:c:type:`fb_ops.fb_setcmap `h]jz)}(hjah]hfb_ops.fb_setcmap}(hjahhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j`c.drm_fb_helper_setcmapasbjfb_opsuh1hhjDhKhj~aubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj{ahhubah}(h]h ]h"]h$]h&]uh1jhjC`hhhj\`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhj9hNhNubj)}(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$hjaubah}(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)}(hjbh]hstruct fb_info *info}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(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}(hj5bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj2bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj1bhMhjaubeh}(h]h ]h"]h$]h&]uh1jhhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_fb_helper_ioctl (C function)c.drm_fb_helper_ioctlhNtauh1jxhj9hhhNhNubj)}(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}(hjvbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrbhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM#ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrbhhhjbhM#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&]jjuh1jhjrbhhhjbhM#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}(hj chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hunsigned int cmdh](j)}(hunsignedh]hunsigned}(hj%chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!cubj)}(h h]h }(hj3chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!cubj)}(hinth]hint}(hjAchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!cubj)}(h h]h }(hjOchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!cubj)}(hcmdh]hcmd}(hj]chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubj)}(hunsigned long argh](j)}(hunsignedh]hunsigned}(hjvchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrcubj)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrcubj)}(hargh]harg}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubeh}(h]h ]h"]h$]h&]jjuh1jhjrbhhhjbhM#ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjnbhhhjbhM#ubah}(h]jibah ](jjeh"]h$]h&]jj)jhuh1jhjbhM#hjkbhhubj)}(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&]uh1jhjkbhhhjbhM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhj9hNhNubj)}(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)}(hjdh]hstruct fb_info *info}(hjdhhhNhNubah}(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}(hj2dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.dhM$hj/dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhj.dhM$hjdubjn)}(h#``unsigned int cmd`` ioctl command h](jt)}(h``unsigned int cmd``h]jz)}(hjRdh]hunsigned int cmd}(hjTdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPdubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM%hjLdubj)}(hhh]h)}(h ioctl commandh]h ioctl command}(hjkdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgdhM%hjhdubah}(h]h ]h"]h$]h&]uh1jhjLdubeh}(h]h ]h"]h$]h&]uh1jmhjgdhM%hjdubjn)}(h%``unsigned long arg`` ioctl argument h](jt)}(h``unsigned long arg``h]jz)}(hjdh]hunsigned long arg}(hjdhhhNhNubah}(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)}(hioctl argumenth]hioctl argument}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM&hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(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&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_helper_check_var (C function)c.drm_fb_helper_check_varhNtauh1jxhj9hhhNhNubj)}(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}(hj ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubj)}(hdrm_fb_helper_check_varh]j)}(hdrm_fb_helper_check_varh]hdrm_fb_helper_check_var}(hj,ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(eubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjehMubj)}(h5(struct fb_var_screeninfo *var, struct fb_info *info)h](j)}(hstruct fb_var_screeninfo *varh](j)}(hjh]hstruct}(hjHehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDeubj)}(h h]h }(hjUehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDeubh)}(hhh]j)}(hfb_var_screeninfoh]hfb_var_screeninfo}(hjfehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjceubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhemodnameN classnameNjj)}j]j%)}jj.esbc.drm_fb_helper_check_varasbuh1hhjDeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDeubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDeubj)}(hvarh]hvar}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@eubj)}(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]jec.drm_fb_helper_check_varasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hinfoh]hinfo}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@eubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjehhhjehMubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jhjehMhjehhubj)}(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)}(hjEfh]hfb_ops.fb_check_var}(hjGfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jec.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.chMhj8fhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwfjjwfjjjuh1jhhhj9hNhNubj)}(h**Parameters** ``struct fb_var_screeninfo *var`` screeninfo to check ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj{fubji)}(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&]uh1jhhj{fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_fb_helper_set_par (C function)c.drm_fb_helper_set_parhNtauh1jxhj9hhhNhNubj)}(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}(hj3ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ghhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM.ubj)}(h h]h }(hjBghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ghhhjAghM.ubj)}(hdrm_fb_helper_set_parh]j)}(hdrm_fb_helper_set_parh]hdrm_fb_helper_set_par}(hjTghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPgubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/ghhhjAghM.ubj)}(h(struct fb_info *info)h]j)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjpghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlgubj)}(h h]h }(hj}ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlgubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j%)}jjVgsbc.drm_fb_helper_set_parasbuh1hhjlgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlgubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlgubj)}(hinfoh]hinfo}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhgubah}(h]h ]h"]h$]h&]jjuh1jhj/ghhhjAghM.ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj+ghhhjAghM.ubah}(h]j&gah ](jjeh"]h$]h&]jj)jhuh1jhjAghM.hj(ghhubj)}(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&]uh1jhj(ghhhjAghM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/hjj/hjjjuh1jhhhj9hNhNubj)}(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%)}(hj9hh]h Parameters}(hj;hhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7hubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM2hj3hubji)}(hhh]jn)}(h8``struct fb_info *info`` fbdev registered by the helper h](jt)}(h``struct fb_info *info``h]jz)}(hjXhh]hstruct fb_info *info}(hjZhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVhubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chM/hjRhubj)}(hhh]h)}(hfbdev registered by the helperh]hfbdev registered by the helper}(hjqhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhM/hjnhubah}(h]h ]h"]h$]h&]uh1jhjRhubeh}(h]h ]h"]h$]h&]uh1jmhjmhhM/hjOhubah}(h]h ]h"]h$]h&]uh1jhhj3hubh)}(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.chM1hj3hubh)}(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.chM0hj3hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_helper_pan_display (C function)c.drm_fb_helper_pan_displayhNtauh1jxhj9hhhNhNubj)}(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 }(hj"ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hfb_var_screeninfoh]hfb_var_screeninfo}(hj3ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5imodnameN classnameNjj)}j]j%)}jjhsbc.drm_fb_helper_pan_displayasbuh1hhjiubj)}(h h]h }(hjSihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjaihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hvarh]hvar}(hjnihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj iubj)}(hstruct fb_info *infoh](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hfb_infoh]hfb_info}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]jOic.drm_fb_helper_pan_displayasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hinfoh]hinfo}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj iubeh}(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 }(hjjhhhNhNubh)}(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]jOic.drm_fb_helper_pan_displayasbjfb_opsuh1hhjDhKhjjubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjDjjjDjjjjuh1jhhhj9hNhNubj)}(h**Parameters** ``struct fb_var_screeninfo *var`` updated screen information ``struct fb_info *info`` fbdev registered by the helperh](h)}(h**Parameters**h]j%)}(hjNjh]h Parameters}(hjPjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHjubji)}(hhh](jn)}(h=``struct fb_var_screeninfo *var`` updated screen information h](jt)}(h!``struct fb_var_screeninfo *var``h]jz)}(hjmjh]hstruct fb_var_screeninfo *var}(hjojhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkjubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjgjubj)}(hhh]h)}(hupdated screen informationh]hupdated screen information}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjgjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhjdjubjn)}(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&]uh1jmhjjhMhjdjubeh}(h]h ]h"]h$]h&]uh1jhhjHjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_helper_fill_info (C function)c.drm_fb_helper_fill_infohNtauh1jxhj9hhhNhNubj)}(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}(hjkhhhNhNubah}(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&]uh1jhjjhhhjkhMubj)}(hdrm_fb_helper_fill_infoh]j)}(hdrm_fb_helper_fill_infoh]hdrm_fb_helper_fill_info}(hj!khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhjkhMubj)}(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&]uh1jhj9kubj)}(h h]h }(hjJkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9kubh)}(hhh]j)}(hfb_infoh]hfb_info}(hj[khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]kmodnameN classnameNjj)}j]j%)}jj#ksbc.drm_fb_helper_fill_infoasbuh1hhj9kubj)}(h h]h }(hj{khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9kubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9kubj)}(hinfoh]hinfo}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9kubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5kubj)}(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]jwkc.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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5kubj)}(h(struct drm_fb_helper_surface_size *sizesh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj,lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(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 reftargetj?lmodnameN classnameNjj)}j]jwkc.drm_fb_helper_fill_infoasbuh1hhjlubj)}(h h]h }(hj[lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjilhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hsizesh]hsizes}(hjvlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5kubeh}(h]h ]h"]h$]h&]jjuh1jhjjhhhjkhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjkhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjkhMhjjhhubj)}(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&]uh1jhjjhhhjkhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jhhhj9hNhNubj)}(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)}(hjmh]hstruct drm_fb_helper *fb_helper}(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%fb helper instance to use as templateh]h%fb helper instance to use as template}(hj3mhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/mhMhj0mubah}(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)}(hjSmh]h(struct drm_fb_helper_surface_size *sizes}(hjUmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQmubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjMmubj)}(hhh]h)}(h-describes fbdev size and scanout surface sizeh]h-describes fbdev size and scanout surface size}(hjlmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhmhMhjimubah}(h]h ]h"]h$]h&]uh1jhjMmubeh}(h]h ]h"]h$]h&]uh1jmhjhmhMhjlubeh}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjmh]h Description}(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.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&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_fb_helper_initial_config (C function)c.drm_fb_helper_initial_confighNtauh1jxhj9hhhNhNubj)}(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}(hj(nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$nhhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMNubj)}(h h]h }(hj7nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$nhhhj6nhMNubj)}(hdrm_fb_helper_initial_configh]j)}(hdrm_fb_helper_initial_configh]hdrm_fb_helper_initial_config}(hjInhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEnubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$nhhhj6nhMNubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjenhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjanubj)}(h h]h }(hjrnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjanubh)}(hhh]j)}(h drm_fb_helperh]h drm_fb_helper}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j%)}jjKnsbc.drm_fb_helper_initial_configasbuh1hhjanubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjanubj9)}(hj9h]h*}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjanubj)}(h fb_helperh]h fb_helper}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjanubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]nubah}(h]h ]h"]h$]h&]jjuh1jhj$nhhhj6nhMNubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj nhhhj6nhMNubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhj6nhMNhjnhhubj)}(hhh]h)}(h,setup a sane initial connector configurationh]h,setup a sane initial connector configuration}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMNhjnhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhj6nhMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhj9hNhNubj)}(hXV**Parameters** ``struct drm_fb_helper *fb_helper`` fb_helper device struct **Description** Scans 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. Note that this also registers the fbdev and so allows userspace to call into the driver through the fbdev interfaces. 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. 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%)}(hj oh]h Parameters}(hj ohhhNhNubah}(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.chMRhjoubji)}(hhh]jn)}(h<``struct drm_fb_helper *fb_helper`` fb_helper device struct h](jt)}(h#``struct drm_fb_helper *fb_helper``h]jz)}(hj)oh]hstruct drm_fb_helper *fb_helper}(hj+ohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'oubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMOhj#oubj)}(hhh]h)}(hfb_helper device structh]hfb_helper device struct}(hjBohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ohMOhj?oubah}(h]h ]h"]h$]h&]uh1jhj#oubeh}(h]h ]h"]h$]h&]uh1jmhj>ohMOhj oubah}(h]h ]h"]h$]h&]uh1jhhjoubh)}(h**Description**h]j%)}(hjdoh]h Description}(hjfohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjboubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMQhjoubh)}(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.}(hjzohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMPhjoubh)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMThjoubh)}(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&]uh1hhjohMWhjoubh)}(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\hjoubh)}(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^hjoubh)}(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.chMghjoubh)}(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.chMlhjoubh)}(h **Return**h]j%)}(hjph]hReturn}(hj phhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMqhjoubh)}(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.chMrhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_helper_hotplug_event (C function)c.drm_fb_helper_hotplug_eventhNtauh1jxhj9hhhNhNubj)}(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}(hjMphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIphhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMubj)}(h h]h }(hj\phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIphhhj[phMubj)}(hdrm_fb_helper_hotplug_eventh]j)}(hdrm_fb_helper_hotplug_eventh]hdrm_fb_helper_hotplug_event}(hjnphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIphhhj[phMubj)}(h!(struct drm_fb_helper *fb_helper)h]j)}(hstruct drm_fb_helper *fb_helperh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(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%)}jjppsbc.drm_fb_helper_hotplug_eventasbuh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(h fb_helperh]h fb_helper}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubah}(h]h ]h"]h$]h&]jjuh1jhjIphhhj[phMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjEphhhj[phMubah}(h]j@pah ](jjeh"]h$]h&]jj)jhuh1jhj[phMhjBphhubj)}(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}(hj qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj qhhubah}(h]h ]h"]h$]h&]uh1jhjBphhhj[phMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%qjj%qjjjuh1jhhhj9hNhNubj)}(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}(hj1qhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-qubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhj)qubji)}(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)}(hjNqh]hstruct drm_fb_helper *fb_helper}(hjPqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLqubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:116: ./drivers/gpu/drm/drm_fb_helper.chMhjHqubj)}(hhh]h)}(h*driver-allocated fbdev helper, can be NULLh]h*driver-allocated fbdev helper, can be NULL}(hjgqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcqhMhjdqubah}(h]h ]h"]h$]h&]uh1jhjHqubeh}(h]h ]h"]h$]h&]uh1jmhjcqhMhjEqubah}(h]h ]h"]h$]h&]uh1jhhj)qubh)}(h**Description**h]j%)}(hjqh]h Description}(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.chMhj)qubh)}(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.chMhj)qubh)}(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.chMhj)qubh)}(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.chMhj)qubh)}(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.chMhj)qubh)}(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.chMhj)qubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj9hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_helper_lastclose (C function)c.drm_fb_helper_lastclosehNtauh1jxhj9hhhNhNubj)}(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 }(hj"rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhj!rhMubj)}(hdrm_fb_helper_lastcloseh]j)}(hdrm_fb_helper_lastcloseh]hdrm_fb_helper_lastclose}(hj4rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0rubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhj!rhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjPrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLrubj)}(h h]h }(hj]rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLrubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjnrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjprmodnameN classnameNjj)}j]j%)}jj6rsbc.drm_fb_helper_lastcloseasbuh1hhjLrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLrubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLrubj)}(hdevh]hdev}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHrubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhj!rhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj rhhhj!rhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhj!rhMhjrhhubj)}(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&]uh1jhjrhhhj!rhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1jhhhj9hNhNubj)}(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.chMhjsubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj-shhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)shMhj*subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhj)shMhj subah}(h]h ]h"]h$]h&]uh1jhhjrubh)}(h**Description**h]j%)}(hjOsh]h Description}(hjQshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMsubah}(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.}(hjeshhhNhNubah}(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&]uh1jhj9hhhNhNubeh}(h] fbdev-helper-functions-referenceah ]h"] fbdev helper functions referenceah$]h&]uh1hhhhhhhhKlubh)}(hhh](h)}(h!format Helper Functions Referenceh]h!format Helper Functions Reference}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshhhhhKxubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_format_conv_state_init (C function)c.drm_format_conv_state_inithNtauh1jxhjshhhNhNubj)}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj tmodnameN classnameNjj)}j]j%)}jjssbc.drm_format_conv_state_initasbuh1hhjsubj)}(h h]h }(hj(thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hj6thhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hstateh]hstate}(hjCthhhNhNubah}(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}(hjmthhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhjshKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjshNhNubj)}(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$hjtubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chKhjtubji)}(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&]uh1jhhjtubh)}(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.chKhjtubh)}(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.chKhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_format_conv_state_copy (C function)c.drm_format_conv_state_copyhNtauh1jxhjshhhNhNubj)}(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}(hj.uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*uhhhh/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&]uh1jhj*uhhhjubj)}(h h]h }(hjOhhhNhNubah}(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 reftargetjbmodnameN classnameNjj)}j]j%)}jj(sbc.drm_fb_xrgb8888_to_rgb332asbuh1hhj>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&]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}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j|c.drm_fb_xrgb8888_to_rgb332asbuh1hhj)ubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhj:ubj)}(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 }(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_xrgb8888_to_rgb332asbuh1hhjubj)}(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&]noemphjjuh1jhj:ubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(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_recth]hdrm_rect}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j|c.drm_fb_xrgb8888_to_rgb332asbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hcliph]hclip}(hjhhhNhNubah}(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&]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]j|c.drm_fb_xrgb8888_to_rgb332asbuh1hhjʌ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&]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&Convert XRGB8888 to RGB332 clip bufferh]h&Convert XRGB8888 to RGB332 clip buffer}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM hjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhjshNhNubj)}(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%)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjkubji)}(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.chM hjubj)}(hhh]h)}(h#Array of RGB332 destination buffersh]h#Array of RGB332 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)}(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.chMhjÍ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.chMhjߍubah}(h]h ]h"]h$]h&]uh1jhjÍubeh}(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)}(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&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj*hMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjNh]h const struct drm_framebuffer *fb}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjHubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchMhjubjn)}(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}(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)}(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ՎhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjkubh)}(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.chMhjkubh)}(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}(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}(hjOhhhNhNubah}(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.chMhjkubh)}(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 }(hjhhhhNhNubj%)}(h**dst**h]hdst}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubh2 (i.e. the destination is at the top-left corner).}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjkubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_rgb565 (C function)c.drm_fb_xrgb8888_to_rgb565hNtauh1jxhjshhhNhNubj)}(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)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)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.chM3ubj)}(h h]h }(hjǏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjƏhM3ubj)}(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&]jjuh1jhjhhhjƏhM3ubj)}(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%)}jjۏsbc.drm_fb_xrgb8888_to_rgb565asbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcubj)}(h dst_pitchh]h dst_pitch}(hjǐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct iosys_map *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)}(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_rgb565asbuh1hhjܐubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܐubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjܐubj)}(hsrch]hsrc}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܐubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(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_rgb565asbuh1hhjgubj)}(h h]h }(hj‘hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(hj9h]h*}(hjБhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjgubj)}(hfbh]hfb}(hjݑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(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 reftargetj1modnameN classnameNjj)}j]j/c.drm_fb_xrgb8888_to_rgb565asbuh1hhjubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjhhhhNhNubah}(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&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(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]j/c.drm_fb_xrgb8888_to_rgb565asbuh1hhj}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}(hjؒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjƏhM3ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjƏhM3ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjƏhM3hjhhubj)}(hhh]h)}(h&Convert XRGB8888 to RGB565 clip bufferh]h&Convert XRGB8888 to RGB565 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.chM3hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjƏhM3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(hXi**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 **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%)}(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.chM7hjubji)}(hhh](jn)}(h>``struct iosys_map *dst`` Array of RGB565 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjCh]hstruct iosys_map *dst}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM4hj=ubj)}(hhh]h)}(h#Array of RGB565 destination buffersh]h#Array of RGB565 destination buffers}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM4hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhM4hj: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}(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.chM6hjvubj)}(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.chM5hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjhM6hj:ubjn)}(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.chM7hj“ubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݓhM7hjޓubah}(h]h ]h"]h$]h&]uh1jhj“ubeh}(h]h ]h"]h$]h&]uh1jmhjݓhM7hj: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.chM8hjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM8hj: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&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM9hj4ubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM9hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhM9hj:ubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjsh]h#struct drm_format_conv_state *state}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM:hjmubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(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&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM<hjubh)}(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}(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;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}(hj#hhhNhNubah}(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.chMAhjubh)}(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.}(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.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_rgb565be (C function)c.drm_fb_xrgb8888_to_rgb565behNtauh1jxhjshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_rgb565be (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_rgb565be(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM[ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjyhM[ubj)}(hdrm_fb_xrgb8888_to_rgb565beh]j)}(hdrm_fb_xrgb8888_to_rgb565beh]hdrm_fb_xrgb8888_to_rgb565be}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjyhM[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}(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_rgb565beasbuh1hhjubj)}(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&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}(hj̖hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɖubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjΖmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgb565beasbuh1hhjubj)}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgb565beasbuh1hhjubj)}(h h]h }(hjuhhhNhNubah}(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&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߗubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgb565beasbuh1hhjubj)}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgb565beasbuh1hhj0ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(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)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(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 XRGB1555 clip bufferh]h(Convert XRGB8888 to XRGB1555 clip buffer}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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%)}(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 XRGB1555 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 XRGB1555 destination buffersh]h%Array of XRGB1555 destination buffers}(hjžhhhNhNubah}(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.chMhjܞ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.chMhjubah}(h]h ]h"]h$]h&]uh1jhjܞubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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}(hj0hhhNhNubah}(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}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjgh]h const struct drm_framebuffer *fb}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjaubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj|hMhjubjn)}(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)}(hjٟh]h#struct drm_format_conv_state *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:122: ./drivers/gpu/drm/drm_format_helper.chMhjӟubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(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&]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 }(hj*hhhNhNubj%)}(h**dst**h]hdst}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubh, }(hj*hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*ubh and }(hj*hhhNhNubj%)}(h**src**h]hsrc}(hjVhhhNhNubah}(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}(hjhhhhNhNubah}(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.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)}(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.}(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&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_argb1555 (C function)c.drm_fb_xrgb8888_to_argb1555hNtauh1jxhjshhhNhNubj)}(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&]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͠hhhjߠhMubj)}(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&]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&]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 reftargetj.modnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_argb1555asbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdsth]hdst}(hjghhhNhNubah}(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 }(hjš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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]jHc.drm_fb_xrgb8888_to_argb1555asbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjkhhhNhNubah}(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]jHc.drm_fb_xrgb8888_to_argb1555asbuh1hhjubj)}(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 }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jHc.drm_fb_xrgb8888_to_argb1555asbuh1hhj ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(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]jHc.drm_fb_xrgb8888_to_argb1555asbuh1hhjubj)}(h h]h }(hj֣hhhNhNubah}(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͠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 ARGB1555 clip bufferh]h(Convert XRGB8888 to ARGB1555 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ƠhhhjߠhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhjshNhNubj)}(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%)}(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.chMhj7ubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of ARGB1555 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hj\h]hstruct iosys_map *dst}(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)}(h%Array of ARGB1555 destination buffersh]h%Array of ARGB1555 destination buffers}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhMhjSubjn)}(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&]uh1jmhjhMhjSubjn)}(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&]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&]uh1jmhjhMhjSubjn)}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhjSubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjSh]hconst struct drm_rect *clip}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjMubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjSubjn)}(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&]uh1jmhjhMhjSubeh}(h]h ]h"]h$]h&]uh1jhhj7ubh)}(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.chMhj7ubh)}(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}(hjhhhNhNubah}(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}(hj hhhNhNubah}(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.chMhj7ubh)}(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 }(hj4hhhNhNubj%)}(h**dst**h]hdst}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubh2 (i.e. the destination is at the top-left corner).}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj7ubh)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_rgba5551 (C function)c.drm_fb_xrgb8888_to_rgba5551hNtauh1jxhjshhhNhNubj)}(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}(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_rgba5551h]j)}(hdrm_fb_xrgb8888_to_rgba5551h]hdrm_fb_xrgb8888_to_rgba5551}(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}(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 reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hjxhhhNhNubah}(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&]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 }(hjԧhhhNhNubah}(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_rgba5551asbuh1hhjubj)}(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}(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)}(hdrm_framebufferh]hdrm_framebuffer}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgba5551asbuh1hhj3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(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 }(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_rgba5551asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgba5551asbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|hhhjhMubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjyhhubj)}(hhh]h)}(h(Convert XRGB8888 to RGBA5551 clip bufferh]h(Convert XRGB8888 to RGBA5551 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&]uh1jhjyhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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.chMhjubji)}(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&]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 RGBA5551 destination buffersh]h%Array of RGBA5551 destination buffers}(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``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)}(hjHh]hconst unsigned int *dst_pitch}(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)}(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 }(hjahhhNhNubj%)}(h**dst**h]hdst}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh9; can be NULL if scanlines are stored next to each other.}(hjahhhNhNubeh}(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&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhjubjn)}(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&]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}(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}(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}(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)}(hj?h]h#struct drm_format_conv_state *state}(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)}(hTransform and conversion stateh]hTransform and conversion state}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjubeh}(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&]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}(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)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_rgb888 (C function)c.drm_fb_xrgb8888_to_rgb888hNtauh1jxhjshhhNhNubj)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjEhMubj)}(hdrm_fb_xrgb8888_to_rgb888h]j)}(hdrm_fb_xrgb8888_to_rgb888h]hdrm_fb_xrgb8888_to_rgb888}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhjEhMubj)}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(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%)}jjZsbc.drm_fb_xrgb8888_to_rgb888asbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hdsth]hdst}(hjͬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(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 }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hjh]hstruct}(hjzhhhNhNubah}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgb888asbuh1hhj[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}(hjѭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(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]jc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjOhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]hstruct}(hjhhhNhNubah}(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]jc.drm_fb_xrgb8888_to_rgb888asbuh1hhjqubj)}(h h]h }(hj̮hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjڮhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(h#struct drm_format_conv_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_format_conv_stateh]hdrm_format_conv_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_rgb888asbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhj3hhhjEhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhjEhMubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhjEhMhj,hhubj)}(hhh]h)}(h&Convert XRGB8888 to RGB888 clip bufferh]h&Convert XRGB8888 to RGB888 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.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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%)}(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 RGB888 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 RGB888 destination buffersh]h#Array of RGB888 destination buffers}(hjۯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjׯhMhjدubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjׯhMhjubjn)}(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)}(hjGh]hconst struct iosys_map *src}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjAubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj\hMhjubjn)}(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&]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.chMhjzubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(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}(hjҰhhhNhNubah}(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)}(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&]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: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 }(hjChhhNhNubj%)}(h**dst**h]hdst}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh, }(hjChhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh and }(hjChhhNhNubj%)}(h**src**h]hsrc}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjChhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjChhhNhNubeh}(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 RGB888 devices that don't natively support XRGB8888.h]hXDrivers can use this function for RGB888 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.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_fb_xrgb8888_to_bgr888 (C function)c.drm_fb_xrgb8888_to_bgr888hNtauh1jxhjshhhNhNubj)}(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.chM"ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM"ubj)}(hdrm_fb_xrgb8888_to_bgr888h]j)}(hdrm_fb_xrgb8888_to_bgr888h]hdrm_fb_xrgb8888_to_bgr888}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM"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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]j%)}jj sbc.drm_fb_xrgb8888_to_bgr888asbuh1hhj#ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#ubj)}(hdsth]hdst}(hjhhhNhNubah}(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&]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*}(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}(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)}(h iosys_maph]h iosys_map}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jac.drm_fb_xrgb8888_to_bgr888asbuh1hhjubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjwhhhNhNubah}(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 }(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}(hjֳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӳubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjسmodnameN classnameNjj)}j]jac.drm_fb_xrgb8888_to_bgr888asbuh1hhjubj)}(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&]uh1jhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]jac.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)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(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]jac.drm_fb_xrgb8888_to_bgr888asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM"ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM"ubah}(h]jݱah ](jjeh"]h$]h&]jj)jhuh1jhjhM"hj߱hhubj)}(hhh]h)}(h&Convert XRGB8888 to BGR888 clip bufferh]h&Convert XRGB8888 to BGR888 clip buffer}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM"hj1hhubah}(h]h ]h"]h$]h&]uh1jhj߱hhhjhM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjshNhNubj)}(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%)}(hjVh]h Parameters}(hjXhhhNhNubah}(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.chM&hjPubji)}(hhh](jn)}(h>``struct iosys_map *dst`` Array of BGR888 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjuh]hstruct iosys_map *dst}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM#hjoubj)}(hhh]h)}(h#Array of BGR888 destination buffersh]h#Array of BGR888 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhM#hjlubjn)}(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 }(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.chM$hjĵubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjõhM%hjlubjn)}(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.chM&hjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM&hjlubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hj3h]h const struct drm_framebuffer *fb}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM'hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhM'hjlubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjlh]hconst struct drm_rect *clip}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM(hjfubj)}(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&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhM(hjlubjn)}(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)hjlubeh}(h]h ]h"]h$]h&]uh1jhhjPubh)}(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:122: ./drivers/gpu/drm/drm_format_helper.chM+hjPubh)}(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}(hj4hhhNhNubah}(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*hjPubh)}(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 }(hjMhhhNhNubj%)}(h**dst**h]hdst}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubh2 (i.e. the destination is at the top-left corner).}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM0hjPubh)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chM3hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_argb8888 (C function)c.drm_fb_xrgb8888_to_argb8888hNtauh1jxhjshhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMJubj)}(hdrm_fb_xrgb8888_to_argb8888h]j)}(hdrm_fb_xrgb8888_to_argb8888h]hdrm_fb_xrgb8888_to_argb8888}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMJubj)}(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 }(hjhhhNhNubah}(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_argb8888asbuh1hhjַubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjַubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjַubj)}(hdsth]hdst}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjַubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҷubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҷubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjŸhhhNhNubah}(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 }(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_argb8888asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҷubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(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_argb8888asbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hfbh]hfb}(hj¹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_argb8888asbuh1hhj׹ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׹ubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj׹ubj)}(hcliph]hclip}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׹ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҷubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(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_argb8888asbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҷubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMJhjhhubj)}(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.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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%)}(hj h]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.chMNhjubji)}(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.chMKhj"ubj)}(hhh]h)}(h%Array of ARGB8888 destination buffersh]h%Array of ARGB8888 destination buffers}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMKhjubjn)}(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)}(hjah]hconst unsigned int *dst_pitch}(hjchhhNhNubah}(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.chMMhj[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 }(hjzhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubh9; can be NULL if scanlines are stored next to each other.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMLhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhjvhMMhjubjn)}(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.chMNhjubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjƻhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj»hMNhjûubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj»hMNhjubjn)}(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.chMOhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMOhjubjn)}(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}(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.chMPhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMPhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hMPhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjXh]h#struct drm_format_conv_state *state}(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)}(hTransform and conversion stateh]hTransform and conversion state}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMQhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhMQhjubeh}(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.chMShjubh)}(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}(hjühhhNhNubah}(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}(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.chMRhjubh)}(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.chMXhjubh)}(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.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_abgr8888 (C function)c.drm_fb_xrgb8888_to_abgr8888hNtauh1jxhjshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_abgr8888 (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_abgr8888(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMrubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj^hMrubj)}(hdrm_fb_xrgb8888_to_abgr8888h]j)}(hdrm_fb_xrgb8888_to_abgr8888h]hdrm_fb_xrgb8888_to_abgr8888}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj^hMrubj)}(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%)}jjssbc.drm_fb_xrgb8888_to_abgr8888asbuh1hhjubj)}(h h]h }(hj˽hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjٽhhhNhNubah}(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&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjRhhhNhNubah}(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&]noemphjjuh1jhjubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(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_abgr8888asbuh1hhjtubj)}(h h]h }(hjϾhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjݾhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(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 }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]jǽc.drm_fb_xrgb8888_to_abgr8888asbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjuhhhNhNubah}(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}(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_abgr8888asbuh1hhjubj)}(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}(hjhhhNhNubah}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jǽc.drm_fb_xrgb8888_to_abgr8888asbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhj^hMrubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhj^hMrubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jhj^hMrhjEhhubj)}(hhh]h)}(h(Convert XRGB8888 to ABGR8888 clip bufferh]h(Convert XRGB8888 to ABGR8888 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.chMrhjhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(hXx**Parameters** ``struct iosys_map *dst`` Array of ABGR8888 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 ABGR8888 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.chMvhjubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of ABGR8888 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.chMshjubj)}(hhh]h)}(h%Array of ABGR8888 destination buffersh]h%Array of ABGR8888 destination buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMshjubjn)}(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.chMuhjubj)}(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}(hj5hhhNhNubah}(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.chMthj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj)hMuhjubjn)}(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}(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.chMvhjZubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMvhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhMvhjubjn)}(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.chMwhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMwhjubjn)}(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.chMxhjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMxhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hj h]h#struct drm_format_conv_state *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:122: ./drivers/gpu/drm/drm_format_helper.chMyhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion 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%)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(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 }(hj\hhhNhNubj%)}(h**dst**h]hdst}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\ubh, }(hj\hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjvhhhNhNubah}(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.chMzhjubh)}(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 ABGR8888 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 ABGR8888 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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_xbgr8888 (C function)c.drm_fb_xrgb8888_to_xbgr8888hNtauh1jxhjshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_xbgr8888 (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_xbgr8888(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_xbgr8888h]j)}(hdrm_fb_xrgb8888_to_xbgr8888h]hdrm_fb_xrgb8888_to_xbgr8888}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjMhhhNhNubah}(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 reftargetj`modnameN classnameNjj)}j]j%)}jj&sbc.drm_fb_xrgb8888_to_xbgr8888asbuh1hhj<ubj)}(h h]h }(hj~hhhNhNubah}(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&]noemphjjuh1jhj8ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jzc.drm_fb_xrgb8888_to_xbgr8888asbuh1hhj'ubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhj8ubj)}(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]jzc.drm_fb_xrgb8888_to_xbgr8888asbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(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&]noemphjjuh1jhj8ubj)}(hconst struct drm_rect *cliph](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 }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]jzc.drm_fb_xrgb8888_to_xbgr8888asbuh1hhj=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(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]jzc.drm_fb_xrgb8888_to_xbgr8888asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhj8ubeh}(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 XBGR8888 clip bufferh]h(Convert XRGB8888 to XBGR8888 clip buffer}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjshNhNubj)}(hX=**Parameters** ``struct iosys_map *dst`` Array of XBGR8888 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 XBGR8888 devices that don't support XRGB8888 natively.h](h)}(h**Parameters**h]j%)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjiubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of XBGR8888 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 XBGR8888 destination buffersh]h%Array of XBGR8888 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)}(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)}(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.chMhj ubj)}(hhh]h)}(hArray of XRGB8888 source bufferh]hArray of XRGB8888 source buffer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjLh]h const struct drm_framebuffer *fb}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjFubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjubjn)}(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&]uh1jhhjiubh)}(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.chMhjiubh)}(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}(hj)hhhNhNubah}(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}(hjMhhhNhNubah}(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.chMhjiubh)}(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 }(hjfhhhNhNubj%)}(h**dst**h]hdst}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubh2 (i.e. the destination is at the top-left corner).}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjiubh)}(hXDrivers can use this function for XBGR8888 devices that don't support XRGB8888 natively.h]hZDrivers can use this function for XBGR8888 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.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_xrgb8888_to_bgrx8888 (C function)c.drm_fb_xrgb8888_to_bgrx8888hNtauh1jxhjshhhNhNubj)}(hhh](j)}(hvoid drm_fb_xrgb8888_to_bgrx8888 (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_bgrx8888(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_bgrx8888h]j)}(hdrm_fb_xrgb8888_to_bgrx8888h]hdrm_fb_xrgb8888_to_bgrx8888}(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}(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_bgrx8888asbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst unsigned int *dst_pitchh](j)}(hjch]hconst}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(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]j-c.drm_fb_xrgb8888_to_bgrx8888asbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(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_bgrx8888asbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(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_bgrx8888asbuh1hhjubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjYhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hjfhhhNhNubah}(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&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(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]j-c.drm_fb_xrgb8888_to_bgrx8888asbuh1hhj{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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h(Convert XRGB8888 to BGRX8888 clip bufferh]h(Convert XRGB8888 to BGRX8888 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&]jjjjjjjjjuh1jhhhjshNhNubj)}(hX=**Parameters** ``struct iosys_map *dst`` Array of BGRX8888 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 BGRX8888 devices that don't support XRGB8888 natively.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.chMhjubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of BGRX8888 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjAh]hstruct iosys_map *dst}(hjChhhNhNubah}(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 BGRX8888 destination buffersh]h%Array of BGRX8888 destination buffers}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhMhj8ubjn)}(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)}(hjzh]hconst unsigned int *dst_pitch}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjtubj)}(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&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj8ubjn)}(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&]uh1jmhjhMhj8ubjn)}(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&]uh1jmhjhMhj8ubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hj8h]hconst struct drm_rect *clip}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj2ubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhj8ubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjqh]h#struct drm_format_conv_state *state}(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)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj8ubeh}(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}(hj!hhhNhNubah}(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)}(hXDrivers can use this function for BGRX8888 devices that don't support XRGB8888 natively.h]hZDrivers can use this function for BGRX8888 devices that don’t support XRGB8888 natively.}(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&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_fb_xrgb8888_to_xrgb2101010 (C function) c.drm_fb_xrgb8888_to_xrgb2101010hNtauh1jxhjshhhNhNubj)}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjwhMubj)}(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&]jjuh1jhjehhhjwhMubj)}(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%)}jjsb 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)}(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&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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]j 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)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhjubj)}(h h]h }(hjshhhNhNubah}(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&]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]j c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](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)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_xrgb2101010asbuh1hhj.ubj)}(h h]h }(hjnhhhNhNubah}(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&]jjuh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjwhMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jhjwhMhj^hhubj)}(hhh]h)}(h+Convert XRGB8888 to XRGB2101010 clip bufferh]h+Convert XRGB8888 to XRGB2101010 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^hhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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%)}(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 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.chMhjubj)}(hhh]h)}(h(Array of XRGB2101010 destination buffersh]h(Array of XRGB2101010 destination buffers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubjn)}(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.chMhj'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 }(hjFhhhNhNubj%)}(h**dst**h]hdst}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh9; can be NULL if scanlines are stored next to each other.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhjubjn)}(hA``const struct iosys_map *src`` Array of XRGB8888 source buffers h](jt)}(h``const struct iosys_map *src``h]jz)}(hjyh]hconst struct iosys_map *src}(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)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(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)}(hj$h]h#struct drm_format_conv_state *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: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&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhjubeh}(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&]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 }(hjuhhhNhNubj%)}(h**dst**h]hdst}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubh, }(hjuhhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubh and }(hjuhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubhW refer to arrays. Each array must have at least as many entries as there are planes in }(hjuhhhNhNubj%)}(h**fb**h]hfb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubhe’s format. Each entry stores the value for the format’s respective color plane at the same index.}(hjuhhhNhNubeh}(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 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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_fb_xrgb8888_to_argb2101010 (C function) c.drm_fb_xrgb8888_to_argb2101010hNtauh1jxhjshhhNhNubj)}(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 }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hMubj)}(hdrm_fb_xrgb8888_to_argb2101010h]j)}(hdrm_fb_xrgb8888_to_argb2101010h]hdrm_fb_xrgb8888_to_argb2101010}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(h iosys_maph]h iosys_map}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j%)}jj?sb c.drm_fb_xrgb8888_to_argb2101010asbuh1hhjUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(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&]noemphjjuh1jhjQubj)}(hconst struct iosys_map *srch](j)}(hjch]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(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 iosys_maph]h iosys_map}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(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*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(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 reftargetj modnameN classnameNjj)}j]j c.drm_fb_xrgb8888_to_argb2101010asbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hconst struct drm_rect *cliph](j)}(hjch]hconst}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(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_xrgb8888_to_argb2101010asbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(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_argb2101010asbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(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&]noemphjjuh1jhjQubeh}(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 ARGB2101010 clip bufferh]h+Convert XRGB8888 to ARGB2101010 clip buffer}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhj*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjshNhNubj)}(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)}(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 ARGB2101010 destination buffersh]h(Array of ARGB2101010 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)}(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.chMhj&ubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhjAhMhjubjn)}(h5``const struct drm_framebuffer *fb`` DRM framebuffer h](jt)}(h$``const struct drm_framebuffer *fb``h]jz)}(hjeh]h const struct drm_framebuffer *fb}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(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&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhjubjn)}(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.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 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: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 }(hj(hhhNhNubj%)}(h**dst**h]hdst}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh, }(hj(hhhNhNubj%)}(h **dst_pitch**h]h dst_pitch}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh and }(hj(hhhNhNubj%)}(h**src**h]hsrc}(hjThhhNhNubah}(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}(hjfhhhNhNubah}(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!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.chM'hjubh)}(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.}(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&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_fb_xrgb8888_to_gray8 (C function)c.drm_fb_xrgb8888_to_gray8hNtauh1jxhjshhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMBubj)}(hdrm_fb_xrgb8888_to_gray8h]j)}(hdrm_fb_xrgb8888_to_gray8h]hdrm_fb_xrgb8888_to_gray8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMBubj)}(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&]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_gray8asbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsth]hdst}(hjehhhNhNubah}(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&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(h dst_pitchh]h dst_pitch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]jFc.drm_fb_xrgb8888_to_gray8asbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsrch]hsrc}(hjihhhNhNubah}(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&]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_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jFc.drm_fb_xrgb8888_to_gray8asbuh1hhj~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}(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]jFc.drm_fb_xrgb8888_to_gray8asbuh1hhj ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hcliph]hclip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(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]jFc.drm_fb_xrgb8888_to_gray8asbuh1hhjubj)}(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&]jjuh1jhjhhhjhMBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMBubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMBhjhhubj)}(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.chMBhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMBubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhjshNhNubj)}(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%)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMFhj5ubji)}(hhh](jn)}(hG``struct iosys_map *dst`` Array of 8-bit grayscale destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hjZh]hstruct iosys_map *dst}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMChjTubj)}(hhh]h)}(h,Array of 8-bit grayscale destination buffersh]h,Array of 8-bit grayscale destination buffers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMChjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjohMChjQubjn)}(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.chMEhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMEhjQubjn)}(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.chMFhjubj)}(hhh]h)}(h Array of XRGB8888 source buffersh]h Array of XRGB8888 source buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMFhjQubjn)}(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.chMGhjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMGhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hMGhjQubjn)}(h<``const struct drm_rect *clip`` Clip rectangle area to copy h](jt)}(h``const struct drm_rect *clip``h]jz)}(hjQh]hconst struct drm_rect *clip}(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.chMHhjKubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMHhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMHhjQubjn)}(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.chMIhjubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMIhjQubeh}(h]h ]h"]h$]h&]uh1jhhj5ubh)}(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.chMKhj5ubh)}(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}(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.chMJhj5ubh)}(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 }(hj2hhhNhNubj%)}(h**dst**h]hdst}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh2 (i.e. the destination is at the top-left corner).}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMPhj5ubh)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMShj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_fb_argb8888_to_argb4444 (C function)c.drm_fb_argb8888_to_argb4444hNtauh1jxhjshhhNhNubj)}(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&]uh1jhj~hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMnubj)}(hdrm_fb_argb8888_to_argb4444h]j)}(hdrm_fb_argb8888_to_argb4444h]hdrm_fb_argb8888_to_argb4444}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhMnubj)}(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_argb8888_to_argb4444asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hjvhhhNhNubah}(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&]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_argb8888_to_argb4444asbuh1hhjubj)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]jc.drm_fb_argb8888_to_argb4444asbuh1hhj1ubj)}(h h]h }(hjhhhNhNubah}(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&]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_argb8888_to_argb4444asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jc.drm_fb_argb8888_to_argb4444asbuh1hhjGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhMnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjhMnubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhMnhjwhhubj)}(hhh]h)}(h(Convert ARGB8888 to ARGB4444 clip bufferh]h(Convert ARGB8888 to ARGB4444 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.chMnhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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$hjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMrhjubji)}(hhh](jn)}(h@``struct iosys_map *dst`` Array of ARGB4444 destination buffers h](jt)}(h``struct iosys_map *dst``h]jz)}(hj h]hstruct iosys_map *dst}(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.chMohjubj)}(hhh]h)}(h%Array of ARGB4444 destination buffersh]h%Array of ARGB4444 destination buffers}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMohj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMohjubjn)}(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)}(hjFh]hconst unsigned int *dst_pitch}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMqhj@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 }(hj_hhhNhNubj%)}(h**dst**h]hdst}(hjghhhNhNubah}(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.chMphj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMqhjubjn)}(h@``const struct iosys_map *src`` Array of ARGB8888 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.chMrhjubj)}(hhh]h)}(hArray of ARGB8888 source bufferh]hArray of ARGB8888 source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMrhjubjn)}(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.chMshjubj)}(hhh]h)}(hDRM framebufferh]hDRM framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMshjubjn)}(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.chMthjubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMthjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hj=h]h#struct drm_format_conv_state *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:122: ./drivers/gpu/drm/drm_format_helper.chMuhj7ubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMuhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhMuhjubeh}(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&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMwhjubh)}(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.chMvhjubh)}(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)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_fb_blit (C function) c.drm_fb_blithNtauh1jxhjshhhNhNubj)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjChMubj)}(h drm_fb_blith]j)}(h drm_fb_blith]h drm_fb_blit}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhjChMubj)}(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}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(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%)}jjXsb c.drm_fb_blitasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h dst_pitchh]h dst_pitch}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(huint32_t dst_formath](h)}(hhh]j)}(huint32_th]huint32_t}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbmodnameN classnameNjj)}j]j c.drm_fb_blitasbuh1hhjYubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h dst_formath]h dst_format}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(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]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)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h const struct drm_framebuffer *fbh](j)}(hjch]hconst}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j c.drm_fb_blitasbuh1hhj,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&]noemphjjuh1jhjjubj)}(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]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)}(hcliph]hclip}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hdrm_format_conv_stateh]hdrm_format_conv_state}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j c.drm_fb_blitasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(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)}(h-Copy parts of a framebuffer to display memoryh]h-Copy parts of a framebuffer to display memory}(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*hhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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%)}(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 display-memory addresses to copy to 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.chMhjubj)}(hhh]h)}(h,Array of display-memory addresses to copy toh]h,Array of display-memory addresses to copy to}(hj!hhhNhNubah}(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)}(hjAh]hconst unsigned int *dst_pitch}(hjChhhNhNubah}(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 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 }(hjZhhhNhNubj%)}(h**dst**h]hdst}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh9; can be NULL if scanlines are stored next to each other.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhMhjubjn)}(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}(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)FOURCC code of the display's color formath]h+FOURCC code of the display’s color format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hD``const struct iosys_map *src`` The framebuffer memory to copy from 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#The framebuffer memory to copy fromh]h#The framebuffer memory to copy from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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.chMhjubj)}(hhh]h)}(hThe framebuffer to copy fromh]hThe framebuffer to copy from}(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)}(hj8h]hconst struct drm_rect *clip}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:122: ./drivers/gpu/drm/drm_format_helper.chMhj2ubj)}(hhh]h)}(hClip rectangle area to copyh]hClip rectangle area to copy}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhjubjn)}(hG``struct drm_format_conv_state *state`` Transform and conversion state h](jt)}(h'``struct drm_format_conv_state *state``h]jz)}(hjqh]h#struct drm_format_conv_state *state}(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)}(hTransform and conversion stateh]hTransform and conversion state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(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&]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. 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 }(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**dst_format**h]h dst_format}(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}(hj!hhhNhNubah}(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 **Return**h]j%)}(hj<h]hReturn}(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.chMhjubh)}(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.}(hjRhhhNhNubah}(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&]uh1jhjshhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_xrgb8888_to_mono (C function)c.drm_fb_xrgb8888_to_monohNtauh1jxhjshhhNhNubj)}(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&]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_monoh]j)}(hdrm_fb_xrgb8888_to_monoh]hdrm_fb_xrgb8888_to_mono}(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 }(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_monoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hjYhhhNhNubah}(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*}(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&]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_monoasbuh1hhjubj)}(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}(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_framebufferh]hdrm_framebuffer}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jc.drm_fb_xrgb8888_to_monoasbuh1hhj0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(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_monoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcliph]hclip}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_format_conv_state *stateh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(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_monoasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj}hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjyhhhjhMubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjvhhubj)}(hhh]h)}(hConvert XRGB8888 to monochromeh]hConvert XRGB8888 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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjshNhNubj)}(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$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)}(hU``struct iosys_map *dst`` Array of monochrome destination buffers (0=black, 1=white) h](jt)}(h``struct iosys_map *dst``h]jz)}(hj h]hstruct iosys_map *dst}(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)}(h:Array of monochrome destination buffers (0=black, 1=white)h]h:Array of monochrome destination buffers (0=black, 1=white)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjubjn)}(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)}(hjEh]hconst unsigned int *dst_pitch}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(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 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&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhjubjn)}(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)}(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)}(hj<h]h#struct drm_format_conv_state *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:122: ./drivers/gpu/drm/drm_format_helper.chMhj6ubj)}(hhh]h)}(hTransform and conversion stateh]hTransform and conversion state}(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&]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}(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)}(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 }(hjhhhNhNubj%)}(h**dst**h]hdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhX (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.}(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 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.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjshhhNhNubeh}(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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hhhhhK~ubh)}(hDProvides helper functions for creating a DMA-contiguous framebuffer.h]hDProvides helper functions for creating a DMA-contiguous framebuffer.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:128: ./drivers/gpu/drm/drm_fb_dma_helper.chKhj2hhubh)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:128: ./drivers/gpu/drm/drm_fb_dma_helper.chKhj2hhubh)}(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 }(hjahhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjkh]hdrm_mode_config_funcs.fb_create}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjiubah}(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"hjaubh: callback function to create a DMA-contiguous framebuffer.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK"hj2hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_fb_dma_get_gem_obj (C function)c.drm_fb_dma_get_gem_objhNtauh1jxhj2hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chK)ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK)ubh)}(hhh]j)}(hdrm_gem_dma_objecth]hdrm_gem_dma_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_fb_dma_get_gem_objsbc.drm_fb_dma_get_gem_objasbuh1hhjhhhjhK)ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK)ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhK)ubj)}(hdrm_fb_dma_get_gem_objh]j)}(hjh]hdrm_fb_dma_get_gem_obj}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK)ubj)}(h0(struct drm_framebuffer *fb, unsigned int plane)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]jc.drm_fb_dma_get_gem_objasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubj)}(hfbh]hfb}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(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&]jjuh1jhjhhhjhK)ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK)ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK)hjhhubj)}(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&]uh1jhjhhhjhK)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj2hNhNubj)}(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)}(hj9h]hstruct drm_framebuffer *fb}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(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*hj3ubj)}(hhh]h)}(hThe framebufferh]hThe framebuffer}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK*hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhjNhK*hj0ubjn)}(h#``unsigned int plane`` Which plane h](jt)}(h``unsigned int plane``h]jz)}(hjrh]hunsigned int plane}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(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+hjlubj)}(hhh]h)}(h Which planeh]h Which plane}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjhK+hj0ubeh}(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: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.}(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,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&]uh1jhj2hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_fb_dma_get_gem_addr (C function)c.drm_fb_dma_get_gem_addrhNtauh1jxhj2hhhNhNubj)}(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.chK?ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj%hK?ubj)}(hdrm_fb_dma_get_gem_addrh]j)}(hj"h]hdrm_fb_dma_get_gem_addr}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj%hK?ubj)}(hO(struct drm_framebuffer *fb, struct drm_plane_state *state, unsigned int plane)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j c.drm_fb_dma_get_gem_addrasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjOubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubj)}(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 c.drm_fb_dma_get_gem_addrasbuh1hhjubj)}(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&]noemphjjuh1jhjKubj)}(hunsigned int planeh](j)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hplaneh]hplane}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj%hK?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj%hK?ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj%hK?hjhhubj)}(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}(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&]uh1jhjhhhj%hK?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj2hNhNubj)}(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%)}(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.chKChjubji)}(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.chKBhjubj)}(hhh]h)}(hThe framebufferh]hThe framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKBhjubjn)}(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&]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.chKChj ubj)}(hhh]h)}(hWhich state of drm planeh]hWhich state of drm plane}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKChj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hKChjubjn)}(hU``unsigned int plane`` Which plane Return the DMA GEM address for given framebuffer. h](jt)}(h``unsigned int plane``h]jz)}(hjHh]hunsigned int plane}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKEhjBubj)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKDhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hKEhjubeh}(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:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKGhjubh)}(hGThis function will usually be called from the PLANE callback functions.h]hGThis function will usually be called from the PLANE 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.chKFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj2hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_fb_dma_sync_non_coherent (C function)c.drm_fb_dma_sync_non_coherenthNtauh1jxhj2hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKpubj)}(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&]jjuh1jhjhhhjhKpubj)}(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}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j%)}jjsbc.drm_fb_dma_sync_non_coherentasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrmh]hdrm}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!struct drm_plane_state *old_stateh](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(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_fb_dma_sync_non_coherentasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(h old_stateh]h old_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(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]j@c.drm_fb_dma_sync_non_coherentasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(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&]jjuh1jhjhhhjhKpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKpubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKphjhhubj)}(hhh]h)}(h.Sync GEM object to non-coherent backing memoryh]h.Sync GEM object to non-coherent backing memory}(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.chKphjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj2hNhNubj)}(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%)}(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.chKthjubji)}(hhh](jn)}(h&``struct drm_device *drm`` DRM device 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&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKrhjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKrhjubjn)}(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.chKshjubj)}(hhh]h)}(hOld plane stateh]hOld plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKshjubjn)}(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.chKthjubj)}(hhh]h)}(hNew plane stateh]hNew plane state}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKthj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hKthjubeh}(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:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKvhjubh)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj2hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_fb_dma_get_scanout_buffer (C function)c.drm_fb_dma_get_scanout_bufferhNtauh1jxhj2hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_fb_dma_get_scanout_bufferh]j)}(hdrm_fb_dma_get_scanout_bufferh]hdrm_fb_dma_get_scanout_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(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%)}jjsbc.drm_fb_dma_get_scanout_bufferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hplaneh]hplane}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_scanout_buffer *sbh](j)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(hdrm_scanout_bufferh]hdrm_scanout_buffer}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jc.drm_fb_dma_get_scanout_bufferasbuh1hhjGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubj)}(hsbh]hsb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(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)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.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj2hNhNubj)}(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)}(hj h]hstruct drm_plane *plane}(hjhhhNhNubah}(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.chKhjubj)}(hhh]h)}(hDRM primary planeh]hDRM primary plane}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hKhjubjn)}(hG``struct drm_scanout_buffer *sb`` scanout buffer for the panic handler h](jt)}(h!``struct drm_scanout_buffer *sb``h]jz)}(hjFh]hstruct drm_scanout_buffer *sb}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhj@ubj)}(hhh]h)}(h$scanout buffer for the panic handlerh]h$scanout buffer for the panic handler}(hj_hhhNhNubah}(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%)}(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:131: ./drivers/gpu/drm/drm_fb_dma_helper.chKhjubh)}(h0 or negative error codeh]h0 or negative error code}(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.chKhjubh)}(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: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.}(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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj2hhhNhNubeh}(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.chK hjubh 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_objectuh1hhjhK hjubh for their backing storage.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK hjhhubh)}(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.}(hjBhhhNhNubah}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chK+ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjwhK+ubh)}(hhh]j)}(hdrm_gem_objecth]hdrm_gem_object}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_gem_fb_get_objsbc.drm_gem_fb_get_objasbuh1hhjfhhhjwhK+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjwhK+ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfhhhjwhK+ubj)}(hdrm_gem_fb_get_objh]j)}(hjh]hdrm_gem_fb_get_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjwhK+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_gem_fb_get_objasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int planeh](j)}(hunsignedh]hunsigned}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hplaneh]hplane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjfhhhjwhK+ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjbhhhjwhK+ubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhjwhK+hj_hhubj)}(hhh]h)}(h&Get GEM object backing the framebufferh]h&Get GEM object backing the 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.chK+hjhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjwhK+ubeh}(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&]uh1hhj hK,hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hK,hjubjn)}(h#``unsigned int plane`` Plane index h](jt)}(h``unsigned int plane``h]jz)}(hj0h]hunsigned int plane}(hj2hhhNhNubah}(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.chK-hj*ubj)}(hhh]h)}(h Plane indexh]h Plane index}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhK-hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhjEhK-hjubeh}(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&]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 }(hjhhhNhNubh)}(h:c:type:`drm_frambuffer`h]jz)}(hjh]hdrm_frambuffer}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(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.hjubh already holds.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK.hjubh)}(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.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.chK2hjubhH for the given framebuffer and plane index or NULL if it does not exist.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK2hjubeh}(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.chK\ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hK\ubj)}(hdrm_gem_fb_destroyh]j)}(hdrm_gem_fb_destroyh]hdrm_gem_fb_destroy}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hK\ubj)}(h(struct drm_framebuffer *fb)h]j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jj@sbc.drm_gem_fb_destroyasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hK\ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj+hK\ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj+hK\hjhhubj)}(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.chK\hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hK\ubeh}(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}(hj hhhNhNubah}(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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hK]hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hK]hjubah}(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&]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 }(hjohhhNhNubh)}(h@:c:type:`drm_framebuffer_funcs->destroy `h]jz)}(hjyh]hdrm_framebuffer_funcs->destroy}(hj{hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(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^hjoubh callback.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK^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}(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.chKpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKpubj)}(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&]jjuh1jhjhhhjhKpubj)}(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 }(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]j%)}jjsbc.drm_gem_fb_create_handleasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j8c.drm_gem_fb_create_handleasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hhandleh]hhandle}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKpubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKphjhhubj)}(hhh]h)}(h(Create handle for GEM backed framebufferh]h(Create handle for GEM backed framebuffer}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKphjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhjhNhNubj)}(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%)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKthjkubji)}(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.chKqhjubj)}(hhh]h)}(h Framebufferh]h Framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKqhjubjn)}(h>``struct drm_file *file`` DRM file to register the handle for 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.chKrhjubj)}(hhh]h)}(h#DRM file to register the handle forh]h#DRM file to register the handle for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKrhjubjn)}(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.chKshjubj)}(hhh]h)}(h$Pointer to return the created handleh]h$Pointer to return the created handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKshjubeh}(h]h ]h"]h$]h&]uh1jhhjkubh)}(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.chKuhjkubh)}(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 }(hjShhhNhNubh)}(hF:c:type:`drm_framebuffer_funcs->create_handle `h]jz)}(hj]h]h$drm_framebuffer_funcs->create_handle}(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.chKthjSubh4 callback. The GETFB IOCTL calls into this callback.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhKthjkubh)}(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.chKxhjkubh)}(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&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKyhjkubeh}(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_format_info *info, 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_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)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.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(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&]jjuh1jhjhhhjhKubj)}(h(struct drm_device *dev, struct drm_framebuffer *fb, struct drm_file *file, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h](j)}(hstruct drm_device *devh](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_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_gem_fb_init_with_funcsasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(hjbhhhNhNubah}(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&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jCc.drm_gem_fb_init_with_funcsasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jCc.drm_gem_fb_init_with_funcsasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfileh]hfile}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h"const struct drm_format_info *infoh](j)}(hjch]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j)}(hdrm_format_infoh]hdrm_format_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jCc.drm_gem_fb_init_with_funcsasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(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 reftargetj!modnameN classnameNjj)}j]jCc.drm_gem_fb_init_with_funcsasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmode_cmdh]hmode_cmd}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)const struct drm_framebuffer_funcs *funcsh](j)}(hjch]hconst}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hdrm_framebuffer_funcsh]hdrm_framebuffer_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jCc.drm_gem_fb_init_with_funcsasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(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)}(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 }(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]jCc.drm_gem_fb_init_with_funcsasbjdrm_mode_config_funcsuh1hhjwhK+hj ubhQ callback in cases when the driver allocates a subclass of struct drm_framebuffer}(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.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhjhNhNubj)}(hX**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_format_info *info`` pixel format information ``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%)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjQubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjvh]hstruct drm_device *dev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chKhjpubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjmubjn)}(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&]uh1jmhjhKhjmubjn)}(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&]uh1jmhjhKhjmubjn)}(h@``const struct drm_format_info *info`` pixel format information h](jt)}(h&``const struct drm_format_info *info``h]jz)}(hj!h]h"const struct drm_format_info *info}(hj#hhhNhNubah}(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)}(hpixel format informationh]hpixel format information}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hKhjmubjn)}(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)}(hjZh]h'const struct drm_mode_fb_cmd2 *mode_cmd}(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)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjohKhjmubjn)}(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&]uh1jm,hjhKhjmubeh}(h]h ]h"]h$]h&]uh1jhhjQubh)}(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.chKhjQubh)}(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)}(hj h]hdrm_framebuffer_funcs}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhj hKhjubh. 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&]uh1hhj hKhjQubh)}(h **Return**h]j%)}(hj; h]hReturn}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9 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.chKhjQubh)}(hZero or a negative error code.h]hZero or a negative error code.}(hjQ 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.chKhjQubeh}(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_format_info *info, 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_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)h](j)}(hjh]hstruct}(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.chKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj| hhhj hKubh)}(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%)}jdrm_gem_fb_create_with_funcssbc.drm_gem_fb_create_with_funcsasbuh1hhj| hhhj hKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj| hhhj hKubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj| hhhj hKubj)}(hdrm_gem_fb_create_with_funcsh]j)}(hj h]hdrm_gem_fb_create_with_funcs}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj| hhhj hKubj)}(h(struct drm_device *dev, struct drm_file *file, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_framebuffer_funcs *funcs)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 c.drm_gem_fb_create_with_funcsasbuh1hhj ubj)}(h h]h }(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjD hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdevh]hdev}(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct drm_file *fileh](j)}(hjh]hstruct}(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubj)}(h h]h }(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubh)}(hhh]j)}(hdrm_fileh]hdrm_file}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_gem_fb_create_with_funcsasbuh1hhjf ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjf ubj)}(hfileh]hfile}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h"const struct drm_format_info *infoh](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_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 c.drm_gem_fb_create_with_funcsasbuh1hhj ubj)}(h h]h }(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj? hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hinfoh]hinfo}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h'const struct drm_mode_fb_cmd2 *mode_cmdh](j)}(hjch]hconst}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubj)}(h h]h }(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja 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_create_with_funcsasbuh1hhja ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hja ubj)}(hmode_cmdh]hmode_cmd}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h)const struct drm_framebuffer_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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_framebuffer_funcsh]hdrm_framebuffer_funcs}(hj) hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+ modnameN classnameNjj)}j]j c.drm_gem_fb_create_with_funcsasbuh1hhj ubj)}(h h]h }(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjU hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hfuncsh]hfuncs}(hjb 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&]jjjuh1jjjhjx hhhj hKubah}(h]js ah ](jjeh"]h$]h&]jj)jhuh1jhj hKhju 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)}(hj h]hdrm_mode_config_funcs.fb_create}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j c.drm_gem_fb_create_with_funcsasbjdrm_mode_config_funcsuh1hhjwhK+hj 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.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhju hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(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_format_info *info`` pixel format information ``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$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.chKhj 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&]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 deviceh]h DRM device}(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``struct drm_file *file`` DRM file that holds the GEM handle(s) backing the framebuffer h](jt)}(h``struct drm_file *file``h]jz)}(hj. h]hstruct drm_file *file}(hj0 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.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}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC hKhjD ubah}(h]h ]h"]h$]h&]uh1jhj( ubeh}(h]h ]h"]h$]h&]uh1jmhjC hKhj ubjn)}(h@``const struct drm_format_info *info`` pixel format information h](jt)}(h&``const struct drm_format_info *info``h]jz)}(hjg h]h"const struct drm_format_info *info}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje 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.chKhja ubj)}(hhh]h)}(hpixel format informationh]hpixel format information}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj| hKhj} ubah}(h]h ]h"]h$]h&]uh1jhja ubeh}(h]h ]h"]h$]h&]uh1jmhj| hKhj 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)}(hj h]h'const struct drm_mode_fb_cmd2 *mode_cmd}(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.chKhj ubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(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_``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)}(hj h]h)const struct drm_framebuffer_funcs *funcs}(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.chKhj ubj)}(hhh]h)}(h0vtable to be used for the new framebuffer objecth]h0vtable to be used for the new framebuffer object}(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%)}(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.chKhj ubh)}(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 }(hj*hhhNhNubh)}(h:c:type:`drm_framebuffer_funcs`h]jz)}(hj4h]hdrm_framebuffer_funcs}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(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.chKhj*ubhk for drivers that need custom framebuffer callbacks. Use drm_gem_fb_create() if you don’t need to change }(hj*hhhNhNubh)}(h:c:type:`drm_framebuffer_funcs`h]jz)}(hjXh]hdrm_framebuffer_funcs}(hjZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_framebuffer_funcsuh1hhjQhKhj*ubh+. The function does buffer size validation.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhKhj ubh)}(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.chKhj ubh)}(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&]uh1hhjhKhj ubeh}(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_format_info *info, 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_format_info *info, 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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jdrm_gem_fb_createsbc.drm_gem_fb_createasbuh1hhjhhhjhMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdrm_gem_fb_createh]j)}(hj&h]hdrm_gem_fb_create}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h|(struct drm_device *dev, struct drm_file *file, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hstruct drm_device *devh](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_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j$c.drm_gem_fb_createasbuh1hhj_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)}(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]j$c.drm_gem_fb_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfileh]hfile}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubj)}(h"const struct drm_format_info *infoh](j)}(hjch]hconst}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(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_format_infoh]hdrm_format_info}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j$c.drm_gem_fb_createasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubj)}(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 reftargetj modnameN classnameNjj)}j]j$c.drm_gem_fb_createasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmode_cmdh]hmode_cmd}(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)}(hbHelper function for the :c:type:`drm_mode_config_funcs.fb_create ` callbackh](hHelper function for the }(hjjhhhNhNubh)}(hA:c:type:`drm_mode_config_funcs.fb_create `h]jz)}(hjth]hdrm_mode_config_funcs.fb_create}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j$c.drm_gem_fb_createasbjdrm_mode_config_funcsuh1hhjwhK+hjjubh callback}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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_format_info *info`` pixel format information ``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%)}(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_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.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)}(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)}(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.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}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjubjn)}(h@``const struct drm_format_info *info`` pixel format information h](jt)}(h&``const struct drm_format_info *info``h]jz)}(hjEh]h"const struct drm_format_info *info}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(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)}(hpixel format informationh]hpixel format information}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhjubjn)}(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)}(hj~h]h'const struct drm_mode_fb_cmd2 *mode_cmd}(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.chM hjxubj)}(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&]uh1jhjxubeh}(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&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM hjubh)}(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 }(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 refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjubh5 callback. The ADDFB2 IOCTL calls into this callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhjubh)}(h **Return**h]j%)}(hjDh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(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)}(hQPointer to a :c:type:`drm_framebuffer` on success or an error pointer on failure.h](h Pointer to a }(hjZhhhNhNubh)}(h:c:type:`drm_framebuffer`h]jz)}(hjdh]hdrm_framebuffer}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjbubah}(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.chMhjZubh+ on success or an error pointer on failure.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(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_format_info *info, 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_format_info *info, 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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubh)}(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_dirtysbc.drm_gem_fb_create_with_dirtyasbuh1hhjhhhjhM+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM+ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM+ubj)}(hdrm_gem_fb_create_with_dirtyh]j)}(hjh]hdrm_gem_fb_create_with_dirty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM+ubj)}(h|(struct drm_device *dev, struct drm_file *file, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]jc.drm_gem_fb_create_with_dirtyasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubj)}(hdevh]hdev}(hj}hhhNhNubah}(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_create_with_dirtyasbuh1hhjubj)}(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_format_info *infoh](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_format_infoh]hdrm_format_info}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]jc.drm_gem_fb_create_with_dirtyasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hinfoh]hinfo}(hjxhhhNhNubah}(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&]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_dirtyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmode_cmdh]hmode_cmd}(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&]jjjuh1jjjhjhhhjhM+ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM+hjhhubj)}(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)}(hj7h]hdrm_mode_config_funcs.fb_create}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_gem_fb_create_with_dirtyasbjdrm_mode_config_funcsuh1hhjwhK+hj-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+hj*hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jhhhjhNhNubj)}(hXU**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_format_info *info`` pixel format information ``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%)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(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/hjqubji)}(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.chM-hjubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM-hjubjn)}(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.hjubjn)}(h@``const struct drm_format_info *info`` pixel format information h](jt)}(h&``const struct drm_format_info *info``h]jz)}(hjh]h"const struct drm_format_info *info}(hj hhhNhNubah}(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)}(hpixel format informationh]hpixel format information}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM/hjubjn)}(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)}(hjAh]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hjChhhNhNubah}(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.chM0hj;ubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM0hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhM0hjubeh}(h]h ]h"]h$]h&]uh1jhhjqubh)}(h**Description**h]j%)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM2hjqubh)}(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](h` callback. The ADDFB2 IOCTL calls into this callback.h](hDrivers can use this as their }(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 refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM;hjubh5 callback. The ADDFB2 IOCTL calls into this callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM;hjqubh)}(h **Return**h]j%)}(hjh]hReturn}(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>hjqubh)}(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)}(hj'h]hdrm_framebuffer}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj%ubah}(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&]uh1hhjDhM?hjqubeh}(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}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMMubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj}hMMubj)}(hdrm_gem_fb_vmaph]j)}(hdrm_gem_fb_vmaph]hdrm_gem_fb_vmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkhhhj}hMMubj)}(hK(struct drm_framebuffer *fb, struct iosys_map *map, struct iosys_map *data)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_vmapasbuh1hhjubj)}(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)}(hstruct iosys_map *maph](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&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]jc.drm_gem_fb_vmapasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmaph]hmap}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iosys_map *datah](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*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjkhhhj}hMMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhj}hMMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jhj}hMMhjdhhubj)}(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.chMMhj hhubah}(h]h ]h"]h$]h&]uh1jhjdhhhj}hMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(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%)}(hj1h]h Parameters}(hj3hhhNhNubah}(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.chMQhj+ubji)}(hhh](jn)}(h/``struct drm_framebuffer *fb`` the framebuffer h](jt)}(h``struct drm_framebuffer *fb``h]jz)}(hjPh]hstruct drm_framebuffer *fb}(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.chMNhjJubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMNhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehMNhjGubjn)}(hD``struct iosys_map *map`` returns the mapping's address for each BO h](jt)}(h``struct iosys_map *map``h]jz)}(hjh]hstruct iosys_map *map}(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.chMOhjubj)}(hhh]h)}(h)returns the mapping's address for each BOh]h+returns the mapping’s address for each BO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMOhjGubjn)}(hM``struct iosys_map *data`` returns the data address for each BO, can be NULL h](jt)}(h``struct iosys_map *data``h]jz)}(hjh]hstruct iosys_map *data}(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.chMPhjubj)}(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&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMPhjGubeh}(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&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMRhj+ubh)}(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.chMQhj+ubh)}(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 }(hj"hhhNhNubj%)}(h**data**h]hdata}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubh[. The argument returns the addresses of the data stored in each BO. This is different from }(hj"hhhNhNubj%)}(h**map**h]hmap}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"ubh2 if the framebuffer’s offsets field is non-zero.}(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.chMVhj+ubh)}(hdBoth, **map** and **data**, must each refer to arrays with at least fb->format->num_planes elements.h](hBoth, }(hjUhhhNhNubj%)}(h**map**h]hmap}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubh and }(hjUhhhNhNubj%)}(h**data**h]hdata}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubhJ, must each refer to arrays with at least fb->format->num_planes elements.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMZhj+ubh)}(h&See drm_gem_fb_vunmap() for unmapping.h]h&See drm_gem_fb_vunmap() for unmapping.}(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]hj+ubh)}(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_hj+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&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chM`hj+ubeh}(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&]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_vunmaph]j)}(hdrm_gem_fb_vunmaph]hdrm_gem_fb_vunmap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j%)}jjsbc.drm_gem_fb_vunmapasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfbh]hfb}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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]jUc.drm_gem_fb_vunmapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmaph]hmap}(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)}(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.c hMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhjhNhNubj)}(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%)}(hj0h]h Parameters}(hj2hhhNhNubah}(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)}(hjOh]hstruct drm_framebuffer *fb}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjIubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjFubjn)}(hM``struct iosys_map *map`` mapping addresses as returned by drm_gem_fb_vmap() h](jt)}(h``struct iosys_map *map``h]jz)}(hjh]hstruct iosys_map *map}(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)}(h2mapping addresses as returned by drm_gem_fb_vmap()h]h2mapping addresses as returned by drm_gem_fb_vmap()}(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&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhj*ubh)}(hAThis function unmaps all buffer objects of the given framebuffer.h]hAThis function unmaps all buffer objects of the given 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.chMhj*ubh)}(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.chMhj*ubeh}(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 }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj%hMubj)}(hdrm_gem_fb_begin_cpu_accessh]j)}(hdrm_gem_fb_begin_cpu_accessh]hdrm_gem_fb_begin_cpu_access}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj%hMubj)}(h9(struct drm_framebuffer *fb, enum dma_data_direction dir)h](j)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j%)}jj:sbc.drm_gem_fb_begin_cpu_accessasbuh1hhjPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubj)}(hfbh]hfb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(henum dma_data_direction dirh](j)}(henumh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_gem_fb_begin_cpu_accessasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(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)}(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.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj%hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhjhNhNubj)}(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.chMhjWubji)}(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&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjvubj)}(hhh]h)}(hthe framebufferh]hthe framebuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjsubjn)}(h,``enum dma_data_direction dir`` access mode h](jt)}(h``enum dma_data_direction dir``h]jz)}(hjh]henum dma_data_direction dir}(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 access modeh]h access mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjsubeh}(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&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMhjWubh)}(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.chMhjWubh)}(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.chMhjWubh)}(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.chMhjWubh)}(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.chMhjWubeh}(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}(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg hhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMubj)}(h h]h }(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg hhhjy hMubj)}(hdrm_gem_fb_end_cpu_accessh]j)}(hdrm_gem_fb_end_cpu_accessh]hdrm_gem_fb_end_cpu_access}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjg hhhjy hMubj)}(h9(struct drm_framebuffer *fb, enum dma_data_direction dir)h](j)}(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}(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_end_cpu_accessasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(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&]noemphjjuh1jhj ubj)}(henum dma_data_direction dirh](j)}(hjh]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}(hj8!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:!modnameN classnameNjj)}j]j c.drm_gem_fb_end_cpu_accessasbuh1hhj!ubj)}(h h]h }(hjV!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hdirh]hdir}(hjd!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjg hhhjy hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjc hhhjy hMubah}(h]j^ ah ](jjeh"]h$]h&]jj)jhuh1jhjy hMhj` hhubj)}(hhh]h)}(h/signals end of CPU access to GEM buffer objectsh]h/signals end of CPU access to GEM buffer objects}(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&]uh1jhj` hhhjy hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!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%)}(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}(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,``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"hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhhj!ubh)}(h**Description**h]j%)}(hjC"h]h Description}(hjE"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjA"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)}(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().}(hjY"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'See also drm_gem_fb_begin_cpu_access().h]h'See also drm_gem_fb_begin_cpu_access().}(hjh"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_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_format_info *info, 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_format_info *info, 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&]uh1jhj"hhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMDubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hMDubj)}(hdrm_gem_fb_afbc_inith]j)}(hdrm_gem_fb_afbc_inith]hdrm_gem_fb_afbc_init}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hMDubj)}(h(struct drm_device *dev, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_afbc_framebuffer *afbc_fb)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"sbc.drm_gem_fb_afbc_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)}(hdevh]hdev}(hj-#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(h"const struct drm_format_info *infoh](j)}(hjch]hconst}(hjF#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB#ubj)}(h h]h }(hjS#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB#ubj)}(hjh]hstruct}(hja#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB#ubj)}(h h]h }(hjn#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB#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#c.drm_gem_fb_afbc_initasbuh1hhjB#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB#ubj9)}(hj9h]h*}(hj#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjB#ubj)}(hinfoh]hinfo}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj#hhhNhNubah}(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 }(hj($hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(hj9h]h*}(hj6$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#ubj)}(hmode_cmdh]hmode_cmd}(hjC$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(h$struct drm_afbc_framebuffer *afbc_fbh](j)}(hjh]hstruct}(hj\$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX$ubj)}(h h]h }(hji$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX$ubh)}(hhh]j)}(hdrm_afbc_framebufferh]hdrm_afbc_framebuffer}(hjz$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|$modnameN classnameNjj)}j]j#c.drm_gem_fb_afbc_initasbuh1hhjX$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX$ubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjX$ubj)}(hafbc_fbh]hafbc_fb}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhj"hhhj"hMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj"hMDubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhj"hMDhj"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}(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.chMDhj$hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``const struct drm_format_info *info`` pixel format information ``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%)}(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.chMHhj$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&]uh1jshq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:140: ./drivers/gpu/drm/drm_gem_framebuffer_helper.chMHhj%ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj7%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3%hMHhj4%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj3%hMHhj%ubjn)}(h@``const struct drm_format_info *info`` pixel format information h](jt)}(h&``const struct drm_format_info *info``h]jz)}(hjW%h]h"const struct drm_format_info *info}(hjY%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU%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.chMJhjQ%ubj)}(hhh]h)}(hpixel format informationh]hpixel format information}(hjp%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl%hMJhjm%ubah}(h]h ]h"]h$]h&]uh1jhjQ%ubeh}(h]h ]h"]h$]h&]uh1jmhjl%hMJhj%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)}(hj%h]h'const struct drm_mode_fb_cmd2 *mode_cmd}(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.chMKhj%ubj)}(hhh]h)}(h8Metadata from the userspace framebuffer creation requesth]h8Metadata from the userspace framebuffer creation request}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj%hMKhj%ubjn)}(h:``struct drm_afbc_framebuffer *afbc_fb`` afbc framebuffer h](jt)}(h(``struct drm_afbc_framebuffer *afbc_fb``h]jz)}(hj%h]h$struct drm_afbc_framebuffer *afbc_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.chMLhj%ubj)}(hhh]h)}(hafbc framebufferh]hafbc framebuffer}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMLhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj%hMLhj%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.chMNhj$ubh)}(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.}(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.chMMhj$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.chMShj$ubh)}(h5Zero on success or a negative error value on failure.h]h5Zero on success or a negative error value on failure.}(hjA&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.chMThj$ubeh}(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}(hjm&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj&hhhhhKubh)}(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)}(hj&h]hstruct drm_bridge}(hj&hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&ubah}(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+hj&ubhQ represents a device that hangs on to an encoder. These are handy when a regular }(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_encoderuh1hhj&hK+hj&ubh= entity isn’t enough to represent the entire encoder chain.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK+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 }(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_encoderuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK/hj&ubhV at a time, but can be either connected to it directly, or through a chain of bridges:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hK/hj{&hhubj@)}(h1[ CRTC ---> ] Encoder ---> Bridge A ---> Bridge Bh]h1[ CRTC ---> ] Encoder ---> Bridge A ---> Bridge B}hj'sbah}(h]h ]h"]h$]h&]jjuh1j?ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK2hj{&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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:151: ./drivers/gpu/drm/drm_bridge.chK4hj{&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)}(hj3'h]h drm_bridge}(hj5'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj1'ubah}(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.chK9hj-'ubh, like }(hj-'hhhNhNubh)}(h:c:type:`drm_panel`h]jz)}(hjW'h]h drm_panel}(hjY'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjU'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_paneluh1hhjP'hK9hj-'ubh , aren’t }(hj-'hhhNhNubh)}(h:c:type:`drm_mode_object`h]jz)}(hjz'h]hdrm_mode_object}(hj|'hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjx'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_objectuh1hhjP'hK9hj-'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&]uh1hhjP'hK9hj{&hhubeh}(h]id1ah ]h"]h$]j;ah&]uh1hhjj&hhhhhKj;Kubh)}(hhh](h)}(hDisplay Driver Integrationh]hDisplay Driver Integration}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhKubh)}(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().}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:157: ./drivers/gpu/drm/drm_bridge.chKBhj'hhubh)}(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 }(hj'hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.attach `h]jz)}(hj'h]hdrm_bridge_funcs.attach}(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:157: ./drivers/gpu/drm/drm_bridge.chKGhj'ubh operation.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hKGhj'hhubh)}(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 }(hj'hhhNhNubh)}(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:157: ./drivers/gpu/drm/drm_bridge.chKKhj'ubh* in sequence for all bridges in the chain.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!(hKKhj'hhubh)}(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.chKUhj'hhubh)}(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 }(hj;(hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjE(h]h drm_connector}(hjG(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjC(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_hj;(ubhn at the end of the bridge chain. Display drivers may use the drm_bridge_connector_init() helper to create the }(hj;(hhhNhNubh)}(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_connectoruh1hhjb(hK_hj;(ubh, 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).}(hj;(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb(hK_hj'hhubeh}(h]display-driver-integrationah ]h"]display driver integrationah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(h"Special Care with MIPI-DSI bridgesh]h"Special Care with MIPI-DSI bridges}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hhhhhKubh)}(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:}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKihj(hhubh)}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKnhj(ubah}(h]h ]h"]h$]h&]uh1hhj(ubh)}(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 }(hj(hhhNhNubh)}(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&]uh1jyhj(ubah}(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.chKshj(ubh and }(hj(hhhNhNubh)}(h6:c:type:`mipi_dsi_host_ops.detach `h]jz)}(hj)h]hmipi_dsi_host_ops.detach}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dsi_host_opsuh1hhj(hKshj(ubh| operations. Therefore, it must run mipi_dsi_host_register() in its probe function, and then run drm_bridge_attach() in its }(hj(hhhNhNubh)}(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&]uh1jyhj')ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dsi_host_opsuh1hhj(hKshj(ubh hook.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hKshj(ubah}(h]h ]h"]h$]h&]uh1hhj(ubh)}(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.}(hjZ)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chK~hjV)ubah}(h]h ]h"]h$]h&]uh1hhj(ubh)}(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.}(hjs)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhjo)ubah}(h]h ]h"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj(hKnhj(hhubh)}(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:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhj(hhubh)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhj)ubah}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhj)ubah}(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 }(hj)hhhNhNubh)}(h6:c:type:`struct mipi_dsi_host_ops `h]jz)}(hj)h]hstruct mipi_dsi_host_ops}(hj)hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)ubah}(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.chKhj)ubh.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.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1hhj)ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj)hKhj(hhubh)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:163: ./drivers/gpu/drm/drm_bridge.chKhj(hhubeh}(h]"special-care-with-mipi-dsi-bridgesah ]h"]"special care with mipi-dsi bridgesah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(hBridge Operationsh]hBridge Operations}(hj.*hhhNhNubah}(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 }(hj<*hhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hjF*h]hdrm_bridge_funcs}(hjH*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjD*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 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.}(hj<*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjc*hMhj+*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 }(hju*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_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhju*ubh 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.}(hju*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hMhjq*ubh)}(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 }(hj*hhhNhNubh)}(h8:c:type:`drm_bridge_funcs.pre_enable `h]jz)}(hj*h]hdrm_bridge_funcs.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:169: ./drivers/gpu/drm/drm_bridge.chMhj*ubh, }(hj*hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.enable `h]jz)}(hj*h]hdrm_bridge_funcs.enable}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj*hMhj*ubh, }(hj*hhhNhNubh)}(h5:c:type:`drm_bridge_funcs.disable `h]jz)}(hj*h]hdrm_bridge_funcs.disable}(hj*hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj*hMhj*ubh and }(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*hMhj*ubh" to provide finer-grained control.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hMhjq*ubh)}(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 (}(hjB+hhhNhNubh)}(hD:c:type:`drm_bridge_funcs.atomic_duplicate_state `h]jz)}(hjL+h]h'drm_bridge_funcs.atomic_duplicate_state}(hjN+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJ+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.chMhjB+ubh, }(hjB+hhhNhNubh)}(hB:c:type:`drm_bridge_funcs.atomic_destroy_state `h]jz)}(hjp+h]h%drm_bridge_funcs.atomic_destroy_state}(hjr+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjn+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhji+hMhjB+ubh and }(hjB+hhhNhNubh)}(h3:c:type:`drm_bridge_funcs.reset `h]jz)}(hj+h]hdrm_bridge_funcs.reset}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhji+hMhjB+ubhL). Mixing atomic and non-atomic versions of the operations is not supported.}(hjB+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhji+hMhjq*ubeh}(h]h ]h"]h$]h&]uh1hhjn*ubh)}(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 }(hj+hhhNhNubh)}(hH:c:type:`drm_bridge_funcs.atomic_get_output_bus_fmts `h]jz)}(hj+h]h+drm_bridge_funcs.atomic_get_output_bus_fmts}(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.chM hj+ubh and }(hj+hhhNhNubh)}(hG:c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts `h]jz)}(hj+h]h*drm_bridge_funcs.atomic_get_input_bus_fmts}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj+hM hj+ubhX 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.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM hj+ubah}(h]h ]h"]h$]h&]uh1hhjn*ubh)}(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 }(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_connectoruh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:169: ./drivers/gpu/drm/drm_bridge.chMhj#,ubhA based on a chain of bridges. DRM bridges traditionally create a }(hj#,hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjQ,h]h drm_connector}(hjS,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjO,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjJ,hMhj#,ubh 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 }(hj#,hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjt,h]h drm_connector}(hjv,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjr,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjJ,hMhj#,ubhZ to be handled by a single bridge, which doesn’t always match the hardware architecture.}(hj#,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJ,hMhj,ubh)}(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)}(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:169: ./drivers/gpu/drm/drm_bridge.chM hj,ubh and instead expose }(hj,hhhNhNubh)}(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_funcsuh1hhj,hM hj,ubh1 operations to support an externally-implemented }(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_connectoruh1hhj,hM hj,ubh. Those operations are }(hj,hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.detect `h]jz)}(hj-h]hdrm_bridge_funcs.detect}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj -ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj,hM hj,ubh, }(hj,hhhNhNubh)}(h7:c:type:`drm_bridge_funcs.get_modes `h]jz)}(hj2-h]hdrm_bridge_funcs.get_modes}(hj4-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj,hM hj,ubh, }(hj,hhhNhNubh)}(h6:c:type:`drm_bridge_funcs.get_edid `h]jz)}(hjU-h]hdrm_bridge_funcs.get_edid}(hjW-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjS-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj,hM hj,ubh, }hj,sbh)}(h8:c:type:`drm_bridge_funcs.hpd_notify `h]jz)}(hjx-h]hdrm_bridge_funcs.hpd_notify}(hjz-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjv-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj,hM hj,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&]uh1jyhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj,hM hj,ubh and }(hj,hhhNhNubh)}(h9:c:type:`drm_bridge_funcs.hpd_disable `h]jz)}(hj-h]hdrm_bridge_funcs.hpd_disable}(hj-hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj,hM hj,ubh3. When implemented, display drivers shall create a }(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_connectoruh1hhj,hM hj,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&]uh1hhj,hM hj,ubh)}(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 }(hj.hhhNhNubh)}(h6:c:type:`drm_bridge_funcs.get_edid `h]jz)}(hj.h]hdrm_bridge_funcs.get_edid}(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.chM+hj.ubhX 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 }(hj.hhhNhNubh)}(h%:c:type:`drm_bridge.ops `h]jz)}(hj6.h]hdrm_bridge.ops}(hj8.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhj/.hM+hj.ubh 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 }(hj.hhhNhNubh)}(h%:c:type:`drm_bridge.ops `h]jz)}(hjY.h]hdrm_bridge.ops}(hj[.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjW.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhj/.hM+hj.ubhS flags for all supported operations. A flag shall only be set if the corresponding }(hj.hhhNhNubh)}(h:c:type:`drm_bridge_funcs`h]jz)}(hj|.h]hdrm_bridge_funcs}(hj~.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjz.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj/.hM+hj.ubh operation is implemented, but an implemented operation doesn’t necessarily imply that the corresponding flag will be set. Display drivers shall use the }(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_bridgeuh1hhj/.hM+hj.ubhz flags to decide which bridge to delegate a connector operation to. This mechanism allows providing a single static const }(hj.hhhNhNubh)}(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_funcsuh1hhj/.hM+hj.ubha instance in bridge drivers, improving security by storing function pointers in read-only memory.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/.hM+hj,ubh)}(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 }(hj.hhhNhNubjz)}(h"``DRM_BRIDGE_ATTACH_NO_CONNECTOR``h]hDRM_BRIDGE_ATTACH_NO_CONNECTOR}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubhX  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 }(hj.hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.attach `h]jz)}(hj/h]hdrm_bridge_funcs.attach}(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.chM=hj.ubh handler when the }(hj.hhhNhNubjz)}(h"``DRM_BRIDGE_ATTACH_NO_CONNECTOR``h]hDRM_BRIDGE_ATTACH_NO_CONNECTOR}(hj'/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubh 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.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"/hM=hj,ubeh}(h]h ]h"]h$]h&]uh1hhjn*ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj*hMhj+*hhubeh}(h]bridge-operationsah ]h"]bridge operationsah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(hBridge Connector Helperh]hBridge Connector Helper}(hjV/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS/hhhhhKubh)}(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 }(hjd/hhhNhNubh)}(h(:c:type:`struct drm_bridge `h]jz)}(hjn/h]hstruct drm_bridge}(hjp/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjl/ubah}(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.chKhjd/ubh. 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.}(hjd/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hKhjS/hhubh)}(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.}(hj/hhhNhNubah}(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#hjS/hhubh)}(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.}(hj/hhhNhNubah}(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)hjS/hhubh)}(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 (}(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_bridgeuh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:175: ./drivers/gpu/drm/display/drm_bridge_connector.chK.hj/ubh) and bridge output type (}(hj/hhhNhNubh)}(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_bridgeuh1hhj/hK.hj/ubhy), as well as the DRM_BRIDGE_ATTACH_NO_CONNECTOR attach flag (none of the bridges shall create a DRM connector directly).}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hK.hjS/hhubeh}(h]bridge-connector-helperah ]h"]bridge connector helperah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(hBridge Helper Referenceh]hBridge Helper Reference}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_bridge_attach_flags (C enum)c.drm_bridge_attach_flagshNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hdrm_bridge_attach_flagsh]j)}(henum drm_bridge_attach_flagsh](j)}(hjh]henum}(hj;0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj70hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKubj)}(h h]h }(hjI0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj70hhhjH0hKubj)}(hdrm_bridge_attach_flagsh]j)}(hj50h]hdrm_bridge_attach_flags}(hj[0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj70hhhjH0hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj30hhhjH0hKubah}(h]j.0ah ](jjeh"]h$]h&]jj)jhuh1jhjH0hKhj00hhubj)}(hhh]h)}(h>Flags for :c:type:`drm_bridge_funcs.attach `h](h Flags for }(hj}0hhhNhNubh)}(h4:c:type:`drm_bridge_funcs.attach `h]jz)}(hj0h]hdrm_bridge_funcs.attach}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j%)}jj50sbc.drm_bridge_attach_flagsasbjdrm_bridge_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj}0ubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK2hjz0hhubah}(h]h ]h"]h$]h&]uh1jhj00hhhjH0hKubeh}(h]h ](jenumeh"]h$]h&]jjjj0jj0jjjuh1jhhhj0hNhNubj)}(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%)}(hj0h]h Constants}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK6hj0ubji)}(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)}(hj0h]hDRM_BRIDGE_ATTACH_NO_CONNECTOR}(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.hhK9hj0ubj)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hK9hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hK9hj0ubah}(h]h ]h"]h$]h&]uh1jhhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_funcs (C struct)c.drm_bridge_funcshNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hdrm_bridge_funcsh]j)}(hstruct drm_bridge_funcsh](j)}(hjh]hstruct}(hj>1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK?ubj)}(h h]h }(hjL1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1hhhjK1hK?ubj)}(hdrm_bridge_funcsh]j)}(hj81h]hdrm_bridge_funcs}(hj^1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:1hhhjK1hK?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj61hhhjK1hK?ubah}(h]j11ah ](jjeh"]h$]h&]jj)jhuh1jhjK1hK?hj31hhubj)}(hhh]h)}(hdrm_bridge control functionsh]hdrm_bridge control functions}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK=hj}1hhubah}(h]h ]h"]h$]h&]uh1jhj31hhhjK1hK?ubeh}(h]h ](jstructeh"]h$]h&]jjjj1jj1jjjuh1jhhhj0hNhNubj)}(hX}**Definition**:: struct drm_bridge_funcs { int (*attach)(struct drm_bridge *bridge, struct drm_encoder *encoder, enum drm_bridge_attach_flags flags); void (*destroy)(struct drm_bridge *bridge); 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, struct drm_connector *connector); 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_bridge *bridge, struct drm_connector *connector); int (*hdmi_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*hdmi_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector); int (*hdmi_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction); int (*hdmi_cec_init)(struct drm_bridge *bridge, struct drm_connector *connector); int (*hdmi_cec_enable)(struct drm_bridge *bridge, bool enable); int (*hdmi_cec_log_addr)(struct drm_bridge *bridge, u8 logical_addr); int (*hdmi_cec_transmit)(struct drm_bridge *bridge, u8 attempts, u32 signal_free_time, struct cec_msg *msg); int (*dp_audio_startup)(struct drm_bridge *bridge, struct drm_connector *connector); int (*dp_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*dp_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector); int (*dp_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction); void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root); }; **Members** ``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. ``destroy`` This callback is invoked when the bridge is about to be deallocated. The **destroy** callback is optional. ``detach`` This callback is invoked whenever our bridge is being detached from a :c:type:`drm_encoder`. The **detach** callback is optional. ``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 ``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. ``disable`` The **disable** callback should disable the bridge. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is disabled via one of: - :c:type:`drm_bridge_funcs.disable ` - :c:type:`drm_bridge_funcs.atomic_disable ` If the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms `. 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`` The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the **post_disable** is called. This callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is post-disabled (unless marked otherwise by the **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.post_disable ` - :c:type:`drm_bridge_funcs.atomic_post_disable ` If the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms ` 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`` The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the **pre_enable** is called. This callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is pre-enabled (unless marked otherwise by **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.pre_enable ` - :c:type:`drm_bridge_funcs.atomic_pre_enable ` If the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - :c:type:`drm_encoder_helper_funcs.commit ` 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`` The **enable** callback should enable the bridge. 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. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is enabled via one of: - :c:type:`drm_bridge_funcs.enable ` - :c:type:`drm_bridge_funcs.atomic_enable ` If the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - drm_encoder_helper_funcs.commit 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`` The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the **atomic_pre_enable** is called. This callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is pre-enabled (unless marked otherwise by **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.pre_enable ` - :c:type:`drm_bridge_funcs.atomic_pre_enable ` If the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - :c:type:`drm_encoder_helper_funcs.commit ` The **atomic_pre_enable** callback is optional. ``atomic_enable`` The **atomic_enable** callback should enable the bridge. 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. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is enabled via one of: - :c:type:`drm_bridge_funcs.enable ` - :c:type:`drm_bridge_funcs.atomic_enable ` If the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - drm_encoder_helper_funcs.commit The **atomic_enable** callback is optional. ``atomic_disable`` The **atomic_disable** callback should disable the bridge. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is disabled via one of: - :c:type:`drm_bridge_funcs.disable ` - :c:type:`drm_bridge_funcs.atomic_disable ` If the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms `. The **atomic_disable** callback is optional. ``atomic_post_disable`` The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the **atomic_post_disable** is called. This callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is post-disabled (unless marked otherwise by the **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.post_disable ` - :c:type:`drm_bridge_funcs.atomic_post_disable ` If the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms ` 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. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. 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. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise ``hdmi_audio_shutdown`` Shut down the audio stream. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise ``hdmi_audio_mute_stream`` Mute/unmute HDMI audio stream. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise ``dp_audio_startup`` Called when ASoC starts a DisplayPort audio stream setup. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise ``dp_audio_prepare`` Configures DisplayPort audio stream. Can be called multiple times for each setup. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise ``dp_audio_shutdown`` Shut down the DisplayPort audio stream. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise ``dp_audio_mute_stream`` Mute/unmute DisplayPort audio stream. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. 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}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubh:}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKAhj1ubj@)}(hXvstruct drm_bridge_funcs { int (*attach)(struct drm_bridge *bridge, struct drm_encoder *encoder, enum drm_bridge_attach_flags flags); void (*destroy)(struct drm_bridge *bridge); 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, struct drm_connector *connector); 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_bridge *bridge, struct drm_connector *connector); int (*hdmi_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*hdmi_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector); int (*hdmi_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction); int (*hdmi_cec_init)(struct drm_bridge *bridge, struct drm_connector *connector); int (*hdmi_cec_enable)(struct drm_bridge *bridge, bool enable); int (*hdmi_cec_log_addr)(struct drm_bridge *bridge, u8 logical_addr); int (*hdmi_cec_transmit)(struct drm_bridge *bridge, u8 attempts, u32 signal_free_time, struct cec_msg *msg); int (*dp_audio_startup)(struct drm_bridge *bridge, struct drm_connector *connector); int (*dp_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*dp_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector); int (*dp_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction); void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root); };h]hXvstruct drm_bridge_funcs { int (*attach)(struct drm_bridge *bridge, struct drm_encoder *encoder, enum drm_bridge_attach_flags flags); void (*destroy)(struct drm_bridge *bridge); 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, struct drm_connector *connector); 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_bridge *bridge, struct drm_connector *connector); int (*hdmi_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*hdmi_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector); int (*hdmi_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction); int (*hdmi_cec_init)(struct drm_bridge *bridge, struct drm_connector *connector); int (*hdmi_cec_enable)(struct drm_bridge *bridge, bool enable); int (*hdmi_cec_log_addr)(struct drm_bridge *bridge, u8 logical_addr); int (*hdmi_cec_transmit)(struct drm_bridge *bridge, u8 attempts, u32 signal_free_time, struct cec_msg *msg); int (*dp_audio_startup)(struct drm_bridge *bridge, struct drm_connector *connector); int (*dp_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms); void (*dp_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector); int (*dp_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction); void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root); };}hj1sbah}(h]h ]h"]h$]h&]jjuh1j?h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKChj1ubh)}(h **Members**h]j%)}(hj1h]hMembers}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKphj1ubji)}(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)}(hj1h]hattach}(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.hhKJhj1ubj)}(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 }(hj2hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj2h]h drm_encoder}(hj2hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(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.hhKBhj2ubh[. The flags argument tunes the behaviour of the attach operation (see DRM_BRIDGE_ATTACH_*).}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-2hKBhj2ubh)}(h$The **attach** callback is optional.h](hThe }(hj82hhhNhNubj%)}(h **attach**h]hattach}(hj@2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj82ubh callback is optional.}(hj82hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKFhj2ubh)}(hRETURNS:h]hRETURNS:}(hjY2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKHhj2ubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKJhj2ubeh}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj2hKJhj1ubjn)}(hx``destroy`` This callback is invoked when the bridge is about to be deallocated. The **destroy** callback is optional. h](jt)}(h ``destroy``h]jz)}(hj2h]hdestroy}(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.hhKUhj2ubj)}(hhh](h)}(hDThis callback is invoked when the bridge is about to be deallocated.h]hDThis callback is invoked when the bridge is about to be deallocated.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKRhj2ubh)}(h%The **destroy** callback is optional.h](hThe }(hj2hhhNhNubj%)}(h **destroy**h]hdestroy}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubh callback is optional.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hKUhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhj2hKUhj1ubjn)}(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)}(hj2h]hdetach}(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.hhK_hj2ubj)}(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 }(hj2hhhNhNubh)}(h:c:type:`drm_encoder`h]jz)}(hj3h]h drm_encoder}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3ubah}(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.hhK\hj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"3hK\hj2ubh)}(h$The **detach** callback is optional.h](hThe }(hj-3hhhNhNubj%)}(h **detach**h]hdetach}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-3ubh callback is optional.}(hj-3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hK_hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhj2hK_hj1ubjn)}(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)}(hj_3h]h mode_valid}(hja3hhhNhNubah}(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.hhKhjY3ubj)}(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.}(hjx3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKfhju3ubh)}(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().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKnhju3ubh)}(h(The **mode_valid** callback is optional.h](hThe }(hj3hhhNhNubj%)}(h**mode_valid**h]h mode_valid}(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.hhKshju3ubh)}(hNOTE:h]hNOTE:}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKuhju3ubh)}(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 }(hj3hhhNhNubj%)}(h**mode_fixup**h]h mode_fixup}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubh.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKwhju3ubh)}(hRETURNS:h]hRETURNS:}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhK~hju3ubh)}(hdrm_mode_status Enumh]hdrm_mode_status Enum}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt3hKhju3ubeh}(h]h ]h"]h$]h&]uh1jhjY3ubeh}(h]h ]h"]h$]h&]uh1jmhjt3hKhj1ubjn)}(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)}(hj4h]h mode_fixup}(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.hhKhj4ubj)}(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 }(hj/4hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj94h]h drm_connector}(hj;4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj74ubah}(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.hhKhj/4ubh or the next }(hj/4hhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj]4h]h drm_bridge}(hj_4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj[4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjV4hKhj/4ubh. 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 }(hj/4hhhNhNubh)}(h7:c:type:`drm_crtc_state.adjusted_mode `h]jz)}(hj4h]hdrm_crtc_state.adjusted_mode}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj~4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_stateuh1hhjV4hKhj/4ubh for more details.}(hj/4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjV4hKhj,4ubh)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj,4ubh)}(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. }(hj4hhhNhNubh)}(h<:c:type:`drm_bridge_funcs.mode_fixup\(\) `h]jz)}(hj4h]hdrm_bridge_funcs.mode_fixup()}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4ubah}(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.hhKhj4ubh is not called when }(hj4hhhNhNubh)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hj4h]hdrm_bridge_funcs.atomic_check()}(hj4hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj4hKhj4ubh8 is implemented, so only one of them should be provided.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hKhj,4ubh)}(hNOTE:h]hNOTE:}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj,4ubh)}(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 }(hj5hhhNhNubj%)}(h **state**h]hstate}(hj"5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubh parameter.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj,4ubh)}(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 }(hj;5hhhNhNubh)}(h-:c:type:`drm_connector.modes `h]jz)}(hjE5h]hdrm_connector.modes}(hjG5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjC5ubah}(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.hhKhj;5ubhc. To ensure that modes are filtered consistently put any bridge constraints and limits checks into }(hj;5hhhNhNubj%)}(h**mode_valid**h]h mode_valid}(hjg5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;5ubh.}(hj;5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb5hKhj,4ubh)}(hRETURNS:h]hRETURNS:}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj,4ubh)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj,4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhj+4hKhj1ubjn)}(hX:``disable`` The **disable** callback should disable the bridge. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is disabled via one of: - :c:type:`drm_bridge_funcs.disable ` - :c:type:`drm_bridge_funcs.atomic_disable ` If the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms `. 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}(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.hhKhj5ubj)}(hhh](h)}(h3The **disable** callback should disable the bridge.h](hThe }(hj5hhhNhNubj%)}(h **disable**h]hdisable}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubh$ callback should disable the bridge.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj5ubh)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj5ubh)}(hrIf the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is disabled via one of:h](hIf the preceding element is a }(hj5hhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj6h]h drm_bridge}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(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.hhKhj5ubh@, then this is called before that bridge is disabled via one of:}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hKhj5ubh)}(hhh](h)}(h5:c:type:`drm_bridge_funcs.disable `h]h)}(hj/6h]h)}(hj/6h]jz)}(hj/6h]hdrm_bridge_funcs.disable}(hj76hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj46ubah}(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.hhKhj16ubah}(h]h ]h"]h$]h&]uh1hhjR6hKhj-6ubah}(h]h ]h"]h$]h&]uh1hhj*6ubh)}(h=:c:type:`drm_bridge_funcs.atomic_disable ` h]h)}(h<:c:type:`drm_bridge_funcs.atomic_disable `h]h)}(hje6h]jz)}(hje6h]hdrm_bridge_funcs.atomic_disable}(hjj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjg6ubah}(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.hhKhjc6ubah}(h]h ]h"]h$]h&]uh1hhj6hKhj_6ubah}(h]h ]h"]h$]h&]uh1hhj*6ubeh}(h]h ]h"]h$]h&]j8j4uh1hhjR6hKhj5ubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of:}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj5ubh)}(hhh](h)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]h)}(hj6h]h)}(hj6h]jz)}(hj6h]h'drm_encoder_helper_funcs.atomic_disable}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(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.hhKhj6ubah}(h]h ]h"]h$]h&]uh1hhj6hKhj6ubah}(h]h ]h"]h$]h&]uh1hhj6ubh)}(hE:c:type:`drm_encoder_helper_funcs.prepare `h]h)}(hj6h]h)}(hj6h]jz)}(hj6h]h drm_encoder_helper_funcs.prepare}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(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.hhKhj6ubah}(h]h ]h"]h$]h&]uh1hhj7hKhj6ubah}(h]h ]h"]h$]h&]uh1hhj6ubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]h)}(hj7h]h)}(hj7h]jz)}(hj7h]h drm_encoder_helper_funcs.disable}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(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.hhKhj7ubah}(h]h ]h"]h$]h&]uh1hhj37hKhj7ubah}(h]h ]h"]h$]h&]uh1hhj6ubh)}(hC:c:type:`drm_encoder_helper_funcs.dpms ` h]h)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]h)}(hjF7h]jz)}(hjF7h]hdrm_encoder_helper_funcs.dpms}(hjK7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH7ubah}(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.hhKhjD7ubah}(h]h ]h"]h$]h&]uh1hhjf7hKhj@7ubah}(h]h ]h"]h$]h&]uh1hhj6ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj6hKhj5ubh)}(h$and the CRTC is disabled via one of:h]h$and the CRTC is disabled via one of:}(hjy7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj5ubh)}(hhh](h)}(h?:c:type:`drm_crtc_helper_funcs.prepare `h]h)}(hj7h]h)}(hj7h]jz)}(hj7h]hdrm_crtc_helper_funcs.prepare}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj7ubah}(h]h ]h"]h$]h&]uh1hhj7hKhj7ubah}(h]h ]h"]h$]h&]uh1hhj7ubh)}(hF:c:type:`drm_crtc_helper_funcs.atomic_disable `h]h)}(hj7h]h)}(hj7h]jz)}(hj7h]h$drm_crtc_helper_funcs.atomic_disable}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj7ubah}(h]h ]h"]h$]h&]uh1hhj7hKhj7ubah}(h]h ]h"]h$]h&]uh1hhj7ubh)}(h?:c:type:`drm_crtc_helper_funcs.disable `h]h)}(hj7h]h)}(hj7h]jz)}(hj7h]hdrm_crtc_helper_funcs.disable}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj7ubah}(h]h ]h"]h$]h&]uh1hhj8hKhj7ubah}(h]h ]h"]h$]h&]uh1hhj7ubh)}(h>:c:type:`drm_crtc_helper_funcs.dpms `. h]h)}(h=:c:type:`drm_crtc_helper_funcs.dpms `.h](h)}(h<:c:type:`drm_crtc_helper_funcs.dpms `h]jz)}(hj+8h]hdrm_crtc_helper_funcs.dpms}(hj-8hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj%8ubh.}(hj%8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjH8hKhj!8ubah}(h]h ]h"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj7hKhj5ubh)}(h%The **disable** callback is optional.h](hThe }(hj_8hhhNhNubj%)}(h **disable**h]hdisable}(hjg8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_8ubh callback is optional.}(hj_8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj5ubh)}(hNOTE:h]hNOTE:}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj5ubh)}(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 }(hj8hhhNhNubh)}(h<:c:type:`drm_bridge_funcs.atomic_disable `h]jz)}(hj8h]hdrm_bridge_funcs.atomic_disable}(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.hhKhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hKhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hKhj1ubjn)}(hX``post_disable`` The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the **post_disable** is called. This callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is post-disabled (unless marked otherwise by the **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.post_disable ` - :c:type:`drm_bridge_funcs.atomic_post_disable ` If the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms ` 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)}(hj8h]h post_disable}(hj8hhhNhNubah}(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.hhKhj8ubj)}(hhh](h)}(hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the **post_disable** is called.h](hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the }(hj8hhhNhNubj%)}(h**post_disable**h]h post_disable}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubh is called.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj8ubh)}(hThis callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element.h]hThis callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element.}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj8ubh)}(hIf the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is post-disabled (unless marked otherwise by the **pre_enable_prev_first** flag) via one of:h](hIf the preceding element is a }(hj9hhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hj&9h]h drm_bridge}(hj(9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$9ubah}(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.hhKhj9ubhY, then this is called after that bridge is post-disabled (unless marked otherwise by the }(hj9hhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjH9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9ubh flag) via one of:}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC9hKhj8ubh)}(hhh](h)}(h::c:type:`drm_bridge_funcs.post_disable `h]h)}(hje9h]h)}(hje9h]jz)}(hje9h]hdrm_bridge_funcs.post_disable}(hjm9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjj9ubah}(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.hhKhjg9ubah}(h]h ]h"]h$]h&]uh1hhj9hKhjc9ubah}(h]h ]h"]h$]h&]uh1hhj`9ubh)}(hB:c:type:`drm_bridge_funcs.atomic_post_disable ` h]h)}(hA:c:type:`drm_bridge_funcs.atomic_post_disable `h]h)}(hj9h]jz)}(hj9h]h$drm_bridge_funcs.atomic_post_disable}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9ubah}(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.hhKhj9ubah}(h]h ]h"]h$]h&]uh1hhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1hhj`9ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj9hKhj8ubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj8ubh)}(hhh](h)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]h)}(hj9h]h)}(hj9h]jz)}(hj9h]h'drm_encoder_helper_funcs.atomic_disable}(hj9hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj9ubah}(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.hhKhj9ubah}(h]h ]h"]h$]h&]uh1hhj:hKhj9ubah}(h]h ]h"]h$]h&]uh1hhj9ubh)}(hE:c:type:`drm_encoder_helper_funcs.prepare `h]h)}(hj:h]h)}(hj: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_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj:ubah}(h]h ]h"]h$]h&]uh1hhj7:hKhj:ubah}(h]h ]h"]h$]h&]uh1hhj9ubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]h)}(hjF:h]h)}(hjF:h]jz)}(hjF:h]h drm_encoder_helper_funcs.disable}(hjN:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjK: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.hhKhjH:ubah}(h]h ]h"]h$]h&]uh1hhji:hKhjD:ubah}(h]h ]h"]h$]h&]uh1hhj9ubh)}(hC:c:type:`drm_encoder_helper_funcs.dpms ` h]h)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]h)}(hj|: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_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhjz:ubah}(h]h ]h"]h$]h&]uh1hhj:hKhjv:ubah}(h]h ]h"]h$]h&]uh1hhj9ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj:hKhj8ubh)}(h$and the CRTC is disabled via one of:h]h$and the CRTC is disabled via one of:}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj8ubh)}(hhh](h)}(h?:c:type:`drm_crtc_helper_funcs.prepare `h]h)}(hj:h]h)}(hj:h]jz)}(hj:h]hdrm_crtc_helper_funcs.prepare}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj:ubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hF:c:type:`drm_crtc_helper_funcs.atomic_disable `h]h)}(hj:h]h)}(hj:h]jz)}(hj:h]h$drm_crtc_helper_funcs.atomic_disable}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj:ubah}(h]h ]h"]h$]h&]uh1hhj;hKhj:ubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(h?:c:type:`drm_crtc_helper_funcs.disable `h]h)}(hj';h]h)}(hj';h]jz)}(hj';h]hdrm_crtc_helper_funcs.disable}(hj/;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj);ubah}(h]h ]h"]h$]h&]uh1hhjJ;hKhj%;ubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(h=:c:type:`drm_crtc_helper_funcs.dpms ` h]h)}(h<:c:type:`drm_crtc_helper_funcs.dpms `h]h)}(hj];h]jz)}(hj];h]hdrm_crtc_helper_funcs.dpms}(hjb;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj_;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhKhj[;ubah}(h]h ]h"]h$]h&]uh1hhj};hKhjW;ubah}(h]h ]h"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj:hKhj8ubh)}(h*The **post_disable** callback is optional.h](hThe }(hj;hhhNhNubj%)}(h**post_disable**h]h post_disable}(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.hhKhj8ubh)}(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.hhKhj8ubh)}(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;hKhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj8hKhj1ubjn)}(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.hhMhj;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)}(hj9<h]h!drm_encoder_helper_funcs.mode_set}(hj;<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7<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.hhMhj<ubhY. The display pipe (i.e. clocks and timing signals) is off when this function is called.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjV<hMhj<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.}(hja<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj<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 }(hjp<hhhNhNubh)}(h7:c:type:`drm_crtc_state.adjusted_mode `h]jz)}(hjz<h]hdrm_crtc_state.adjusted_mode}(hj|<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjx<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.hhMhjp<ubh.}(hjp<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj<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)}(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 }(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 operation.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj<hMhj1ubjn)}(hX``pre_enable`` The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the **pre_enable** is called. This callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is pre-enabled (unless marked otherwise by **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.pre_enable ` - :c:type:`drm_bridge_funcs.atomic_pre_enable ` If the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - :c:type:`drm_encoder_helper_funcs.commit ` 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.hhM<hj<ubj)}(hhh](h)}(hThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the **pre_enable** is called.h](hgThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the }(hj=hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubh is called.}(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)}(hzThis callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element.h]hzThis callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element.}(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)}(hIf the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is pre-enabled (unless marked otherwise by **pre_enable_prev_first** flag) via one of:h](hIf the preceding element is a }(hj>=hhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjH=h]h drm_bridge}(hjJ=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjF=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>=ubhT, then this is called before that bridge is pre-enabled (unless marked otherwise by }(hj>=hhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj>=ubh flag) via one of:}(hj>=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhje=hM$hj =ubh)}(hhh](h)}(h8:c:type:`drm_bridge_funcs.pre_enable `h]h)}(hj=h]h)}(hj=h]jz)}(hj=h]hdrm_bridge_funcs.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.hhM(hj=ubah}(h]h ]h"]h$]h&]uh1hhj=hM(hj=ubah}(h]h ]h"]h$]h&]uh1hhj=ubh)}(h@:c:type:`drm_bridge_funcs.atomic_pre_enable ` h]h)}(h?:c:type:`drm_bridge_funcs.atomic_pre_enable `h]h)}(hj=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.hhM)hj=ubah}(h]h ]h"]h$]h&]uh1hhj=hM)hj=ubah}(h]h ]h"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj=hM(hj =ubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of:}(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)}(hhh](h)}(hE:c:type:`drm_crtc_helper_funcs.atomic_enable `h]h)}(hj>h]h)}(hj>h]jz)}(hj>h]h#drm_crtc_helper_funcs.atomic_enable}(hj >hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj >ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM.hj>ubah}(h]h ]h"]h$]h&]uh1hhj'>hM.hj>ubah}(h]h ]h"]h$]h&]uh1hhj=ubh)}(h?:c:type:`drm_crtc_helper_funcs.commit ` h]h)}(h>:c:type:`drm_crtc_helper_funcs.commit `h]h)}(hj:>h]jz)}(hj:>h]hdrm_crtc_helper_funcs.commit}(hj?>hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj<>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM/hj8>ubah}(h]h ]h"]h$]h&]uh1hhjZ>hM/hj4>ubah}(h]h ]h"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj'>hM.hj =ubh)}(h&and the encoder is enabled via one of:h]h&and the encoder is enabled via one of:}(hjm>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM1hj =ubh)}(hhh](h)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]h)}(hj>h]h)}(hj>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_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM3hj>ubah}(h]h ]h"]h$]h&]uh1hhj>hM3hj>ubah}(h]h ]h"]h$]h&]uh1hhj|>ubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]h)}(hj>h]h)}(hj>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_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM4hj>ubah}(h]h ]h"]h$]h&]uh1hhj>hM4hj>ubah}(h]h ]h"]h$]h&]uh1hhj|>ubh)}(hE:c:type:`drm_encoder_helper_funcs.commit ` h]h)}(hD:c:type:`drm_encoder_helper_funcs.commit `h]h)}(hj>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_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM5hj>ubah}(h]h ]h"]h$]h&]uh1hhj ?hM5hj>ubah}(h]h ]h"]h$]h&]uh1hhj|>ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj>hM3hj =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.hhM7hj =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.hhM9hj =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 }(hjL?hhhNhNubh)}(h?:c:type:`drm_bridge_funcs.atomic_pre_enable `h]jz)}(hjV?h]h"drm_bridge_funcs.atomic_pre_enable}(hjX?hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjT?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.hhM;hjL?ubh.}(hjL?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjs?hM;hj =ubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj =hM<hj1ubjn)}(hX``enable`` The **enable** callback should enable the bridge. 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. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is enabled via one of: - :c:type:`drm_bridge_funcs.enable ` - :c:type:`drm_bridge_funcs.atomic_enable ` If the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - drm_encoder_helper_funcs.commit 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.hhMahj?ubj)}(hhh](h)}(h1The **enable** callback should enable the bridge.h](hThe }(hj?hhhNhNubj%)}(h **enable**h]henable}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubh# callback should enable the bridge.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMChj?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.hhMEhj?ubh)}(hpIf the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is enabled via one of:h](hIf the preceding element is 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 refexplicitrefwarnjjj drm_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMJhj?ubh>, then this is called after that bridge is enabled via one of:}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMJhj?ubh)}(hhh](h)}(h4:c:type:`drm_bridge_funcs.enable `h]h)}(hj@h]h)}(hj@h]jz)}(hj@h]hdrm_bridge_funcs.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.hhMMhj@ubah}(h]h ]h"]h$]h&]uh1hhj3@hMMhj@ubah}(h]h ]h"]h$]h&]uh1hhj @ubh)}(h<:c:type:`drm_bridge_funcs.atomic_enable ` h]h)}(h;:c:type:`drm_bridge_funcs.atomic_enable `h]h)}(hjF@h]jz)}(hjF@h]hdrm_bridge_funcs.atomic_enable}(hjK@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjH@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.hhMNhjD@ubah}(h]h ]h"]h$]h&]uh1hhjf@hMNhj@@ubah}(h]h ]h"]h$]h&]uh1hhj @ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj3@hMMhj?ubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of:}(hjy@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMPhj?ubh)}(hhh](h)}(hE:c:type:`drm_crtc_helper_funcs.atomic_enable `h]h)}(hj@h]h)}(hj@h]jz)}(hj@h]h#drm_crtc_helper_funcs.atomic_enable}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMShj@ubah}(h]h ]h"]h$]h&]uh1hhj@hMShj@ubah}(h]h ]h"]h$]h&]uh1hhj@ubh)}(h?:c:type:`drm_crtc_helper_funcs.commit ` h]h)}(h>:c:type:`drm_crtc_helper_funcs.commit `h]h)}(hj@h]jz)}(hj@h]hdrm_crtc_helper_funcs.commit}(hj@hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMThj@ubah}(h]h ]h"]h$]h&]uh1hhj@hMThj@ubah}(h]h ]h"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj@hMShj?ubh)}(h&and the encoder is enabled via one of:h]h&and the encoder is enabled via one of:}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMVhj?ubh)}(hhh](h)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]h)}(hj Ah]h)}(hj Ah]jz)}(hj Ah]h&drm_encoder_helper_funcs.atomic_enable}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjAubah}(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.hhMXhj Aubah}(h]h ]h"]h$]h&]uh1hhj-AhMXhjAubah}(h]h ]h"]h$]h&]uh1hhjAubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]h)}(hjAubah}(h]h ]h"]h$]h&]uh1hhj_AhMYhj:Aubah}(h]h ]h"]h$]h&]uh1hhjAubh)}(h drm_encoder_helper_funcs.commit h]h)}(hdrm_encoder_helper_funcs.commith]hdrm_encoder_helper_funcs.commit}(hjpAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMZhjlAubah}(h]h ]h"]h$]h&]uh1hhjAubeh}(h]h ]h"]h$]h&]j8j4uh1hhj-AhMXhj?ubh)}(h$The **enable** callback is optional.h](hThe }(hjAhhhNhNubj%)}(h **enable**h]henable}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubh callback is optional.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM\hj?ubh)}(hNOTE:h]hNOTE:}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM^hj?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 }(hjAhhhNhNubh)}(h;:c:type:`drm_bridge_funcs.atomic_enable `h]jz)}(hjAh]hdrm_bridge_funcs.atomic_enable}(hjAhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjAubah}(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`hjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhM`hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMahj1ubjn)}(hX``atomic_pre_enable`` The display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the **atomic_pre_enable** is called. This callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is pre-enabled (unless marked otherwise by **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.pre_enable ` - :c:type:`drm_bridge_funcs.atomic_pre_enable ` If the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - :c:type:`drm_encoder_helper_funcs.commit ` The **atomic_pre_enable** callback is optional. h](jt)}(h``atomic_pre_enable``h]jz)}(hjAh]hatomic_pre_enable}(hjBhhhNhNubah}(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)}(hThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the **atomic_pre_enable** is called.h](hgThe display pipe (i.e. clocks and timing signals) feeding this bridge will not yet be running when the }(hjBhhhNhNubj%)}(h**atomic_pre_enable**h]hatomic_pre_enable}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh is called.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhhjBubh)}(hzThis callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element.h]hzThis callback should perform all the necessary actions to prepare the bridge to accept signals from the preceding element.}(hj9BhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMkhjBubh)}(hIf the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is pre-enabled (unless marked otherwise by **pre_enable_prev_first** flag) via one of:h](hIf the preceding element is a }(hjHBhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjRBh]h drm_bridge}(hjTBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPBubah}(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.hhMnhjHBubhT, then this is called before that bridge is pre-enabled (unless marked otherwise by }(hjHBhhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjtBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHBubh flag) via one of:}(hjHBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjoBhMnhjBubh)}(hhh](h)}(h8:c:type:`drm_bridge_funcs.pre_enable `h]h)}(hjBh]h)}(hjBh]jz)}(hjBh]hdrm_bridge_funcs.pre_enable}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjBubah}(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.hhMrhjBubah}(h]h ]h"]h$]h&]uh1hhjBhMrhjBubah}(h]h ]h"]h$]h&]uh1hhjBubh)}(h@:c:type:`drm_bridge_funcs.atomic_pre_enable ` h]h)}(h?:c:type:`drm_bridge_funcs.atomic_pre_enable `h]h)}(hjBh]jz)}(hjBh]h"drm_bridge_funcs.atomic_pre_enable}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjBubah}(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.hhMshjBubah}(h]h ]h"]h$]h&]uh1hhjBhMshjBubah}(h]h ]h"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]j8j4uh1hhjBhMrhjBubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called before the CRTC is enabled via one of:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMuhjBubh)}(hhh](h)}(hE:c:type:`drm_crtc_helper_funcs.atomic_enable `h]h)}(hjCh]h)}(hjCh]jz)}(hjCh]h#drm_crtc_helper_funcs.atomic_enable}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMxhjCubah}(h]h ]h"]h$]h&]uh1hhj1ChMxhj Cubah}(h]h ]h"]h$]h&]uh1hhj Cubh)}(h?:c:type:`drm_crtc_helper_funcs.commit ` h]h)}(h>:c:type:`drm_crtc_helper_funcs.commit `h]h)}(hjDCh]jz)}(hjDCh]hdrm_crtc_helper_funcs.commit}(hjIChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMyhjBCubah}(h]h ]h"]h$]h&]uh1hhjdChMyhj>Cubah}(h]h ]h"]h$]h&]uh1hhj Cubeh}(h]h ]h"]h$]h&]j8j4uh1hhj1ChMxhjBubh)}(h&and the encoder is enabled via one of:h]h&and the encoder is enabled via one of:}(hjwChhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM{hjBubh)}(hhh](h)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]h)}(hjCh]h)}(hjCh]jz)}(hjCh]h&drm_encoder_helper_funcs.atomic_enable}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(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.hhM}hjCubah}(h]h ]h"]h$]h&]uh1hhjChM}hjCubah}(h]h ]h"]h$]h&]uh1hhjCubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]h)}(hjCh]h)}(hjCh]jz)}(hjCh]hdrm_encoder_helper_funcs.enable}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(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.hhM~hjCubah}(h]h ]h"]h$]h&]uh1hhjChM~hjCubah}(h]h ]h"]h$]h&]uh1hhjCubh)}(hE:c:type:`drm_encoder_helper_funcs.commit ` h]h)}(hD:c:type:`drm_encoder_helper_funcs.commit `h]h)}(hjCh]jz)}(hjCh]hdrm_encoder_helper_funcs.commit}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(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.hhMhjCubah}(h]h ]h"]h$]h&]uh1hhjDhMhjCubah}(h]h ]h"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]j8j4uh1hhjChM}hjBubh)}(h/The **atomic_pre_enable** callback is optional.h](hThe }(hj&DhhhNhNubj%)}(h**atomic_pre_enable**h]hatomic_pre_enable}(hj.DhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&Dubh callback is optional.}(hj&DhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjBubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhj1ubjn)}(hX1``atomic_enable`` The **atomic_enable** callback should enable the bridge. 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. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is enabled via one of: - :c:type:`drm_bridge_funcs.enable ` - :c:type:`drm_bridge_funcs.atomic_enable ` If the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of: - :c:type:`drm_crtc_helper_funcs.atomic_enable ` - :c:type:`drm_crtc_helper_funcs.commit ` and the encoder is enabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_enable ` - :c:type:`drm_encoder_helper_funcs.enable ` - drm_encoder_helper_funcs.commit The **atomic_enable** callback is optional. h](jt)}(h``atomic_enable``h]jz)}(hjXDh]h atomic_enable}(hjZDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVDubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRDubj)}(hhh](h)}(h8The **atomic_enable** callback should enable the bridge.h](hThe }(hjqDhhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hjyDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqDubh# callback should enable the bridge.}(hjqDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnDubh)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnDubh)}(hpIf the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is enabled via one of:h](hIf the preceding element is a }(hjDhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjDh]h drm_bridge}(hjDhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjDubah}(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.hhMhjDubh>, then this is called after that bridge is enabled via one of:}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjnDubh)}(hhh](h)}(h4:c:type:`drm_bridge_funcs.enable `h]h)}(hjDh]h)}(hjDh]jz)}(hjDh]hdrm_bridge_funcs.enable}(hjDhhhNhNubah}(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.hhMhjDubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1hhjDubh)}(h<:c:type:`drm_bridge_funcs.atomic_enable ` h]h)}(h;:c:type:`drm_bridge_funcs.atomic_enable `h]h)}(hjEh]jz)}(hjEh]hdrm_bridge_funcs.atomic_enable}(hjEhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(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 Eubah}(h]h ]h"]h$]h&]uh1hhj.EhMhjEubah}(h]h ]h"]h$]h&]uh1hhjDubeh}(h]h ]h"]h$]h&]j8j4uh1hhjDhMhjnDubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called after the CRTC is enabled via one of:}(hjAEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnDubh)}(hhh](h)}(hE:c:type:`drm_crtc_helper_funcs.atomic_enable `h]h)}(hjUEh]h)}(hjUEh]jz)}(hjUEh]h#drm_crtc_helper_funcs.atomic_enable}(hj]EhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZEubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjWEubah}(h]h ]h"]h$]h&]uh1hhjxEhMhjSEubah}(h]h ]h"]h$]h&]uh1hhjPEubh)}(h?:c:type:`drm_crtc_helper_funcs.commit ` h]h)}(h>:c:type:`drm_crtc_helper_funcs.commit `h]h)}(hjEh]jz)}(hjEh]hdrm_crtc_helper_funcs.commit}(hjEhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjEubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1hhjPEubeh}(h]h ]h"]h$]h&]j8j4uh1hhjxEhMhjnDubh)}(h&and the encoder is enabled via one of:h]h&and the encoder is enabled via one of:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnDubh)}(hhh](h)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]h)}(hjEh]h)}(hjEh]jz)}(hjEh]h&drm_encoder_helper_funcs.atomic_enable}(hjEhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEubah}(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.hhMhjEubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1hhjEubh)}(hD:c:type:`drm_encoder_helper_funcs.enable `h]h)}(hjFh]h)}(hjFh]jz)}(hjFh]hdrm_encoder_helper_funcs.enable}(hj FhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj Fubah}(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.hhMhjFubah}(h]h ]h"]h$]h&]uh1hhj'FhMhjFubah}(h]h ]h"]h$]h&]uh1hhjEubh)}(h drm_encoder_helper_funcs.commit h]h)}(hdrm_encoder_helper_funcs.commith]hdrm_encoder_helper_funcs.commit}(hj8FhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj4Fubah}(h]h ]h"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]j8j4uh1hhjEhMhjnDubh)}(h+The **atomic_enable** callback is optional.h](hThe }(hjSFhhhNhNubj%)}(h**atomic_enable**h]h atomic_enable}(hj[FhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSFubh callback is optional.}(hjSFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmDhMhjnDubeh}(h]h ]h"]h$]h&]uh1jhjRDubeh}(h]h ]h"]h$]h&]uh1jmhjmDhMhj1ubjn)}(hX``atomic_disable`` The **atomic_disable** callback should disable the bridge. The bridge can assume that the display pipe (i.e. clocks and timing signals) feeding it is still running when this callback is called. If the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is disabled via one of: - :c:type:`drm_bridge_funcs.disable ` - :c:type:`drm_bridge_funcs.atomic_disable ` If the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms `. The **atomic_disable** callback is optional. h](jt)}(h``atomic_disable``h]jz)}(hjFh]hatomic_disable}(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)}(h:The **atomic_disable** callback should disable the bridge.h](hThe }(hjFhhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh$ callback should disable the bridge.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjFubh)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjFubh)}(hrIf the preceding element is a :c:type:`drm_bridge`, then this is called before that bridge is disabled via one of:h](hIf the preceding element is a }(hjFhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjFh]h drm_bridge}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFubah}(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.hhMhjFubh@, then this is called before that bridge is disabled via one of:}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMhjFubh)}(hhh](h)}(h5:c:type:`drm_bridge_funcs.disable `h]h)}(hjGh]h)}(hjGh]jz)}(hjGh]hdrm_bridge_funcs.disable}(hj GhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj Gubah}(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.hhMhjGubah}(h]h ]h"]h$]h&]uh1hhj(GhMhjGubah}(h]h ]h"]h$]h&]uh1hhjGubh)}(h=:c:type:`drm_bridge_funcs.atomic_disable ` h]h)}(h<:c:type:`drm_bridge_funcs.atomic_disable `h]h)}(hj;Gh]jz)}(hj;Gh]hdrm_bridge_funcs.atomic_disable}(hj@GhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj=Gubah}(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.hhMhj9Gubah}(h]h ]h"]h$]h&]uh1hhj[GhMhj5Gubah}(h]h ]h"]h$]h&]uh1hhjGubeh}(h]h ]h"]h$]h&]j8j4uh1hhj(GhMhjFubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called before the encoder is disabled via one of:}(hjnGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjFubh)}(hhh](h)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]h)}(hjGh]h)}(hjGh]jz)}(hjGh]h'drm_encoder_helper_funcs.atomic_disable}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(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.hhMhjGubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1hhj}Gubh)}(hE:c:type:`drm_encoder_helper_funcs.prepare `h]h)}(hjGh]h)}(hjGh]jz)}(hjGh]h drm_encoder_helper_funcs.prepare}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(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.hhMhjGubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1hhj}Gubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]h)}(hjGh]h)}(hjGh]jz)}(hjGh]h drm_encoder_helper_funcs.disable}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(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.hhMhjGubah}(h]h ]h"]h$]h&]uh1hhj HhMhjGubah}(h]h ]h"]h$]h&]uh1hhj}Gubh)}(hC:c:type:`drm_encoder_helper_funcs.dpms ` h]h)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]h)}(hjHh]jz)}(hjHh]hdrm_encoder_helper_funcs.dpms}(hj!HhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(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.hhMhjHubah}(h]h ]h"]h$]h&]uh1hhj`h]h)}(hjcHh]h)}(hjcHh]jz)}(hjcHh]hdrm_crtc_helper_funcs.prepare}(hjkHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjeHubah}(h]h ]h"]h$]h&]uh1hhjHhMhjaHubah}(h]h ]h"]h$]h&]uh1hhj^Hubh)}(hF:c:type:`drm_crtc_helper_funcs.atomic_disable `h]h)}(hjHh]h)}(hjHh]jz)}(hjHh]h$drm_crtc_helper_funcs.atomic_disable}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjHubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1hhj^Hubh)}(h?:c:type:`drm_crtc_helper_funcs.disable `h]h)}(hjHh]h)}(hjHh]jz)}(hjHh]hdrm_crtc_helper_funcs.disable}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjHubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1hhj^Hubh)}(h>:c:type:`drm_crtc_helper_funcs.dpms `. h]h)}(h=:c:type:`drm_crtc_helper_funcs.dpms `.h](h)}(h<:c:type:`drm_crtc_helper_funcs.dpms `h]jz)}(hjIh]hdrm_crtc_helper_funcs.dpms}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMhjHubah}(h]h ]h"]h$]h&]uh1hhj^Hubeh}(h]h ]h"]h$]h&]j8j4uh1hhjHhMhjFubh)}(h,The **atomic_disable** callback is optional.h](hThe }(hj5IhhhNhNubj%)}(h**atomic_disable**h]hatomic_disable}(hj=IhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5Iubh callback is optional.}(hj5IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMhjFubeh}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjFhMhj1ubjn)}(hX``atomic_post_disable`` The bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the **atomic_post_disable** is called. This callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element. If the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is post-disabled (unless marked otherwise by the **pre_enable_prev_first** flag) via one of: - :c:type:`drm_bridge_funcs.post_disable ` - :c:type:`drm_bridge_funcs.atomic_post_disable ` If the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of: - :c:type:`drm_encoder_helper_funcs.atomic_disable ` - :c:type:`drm_encoder_helper_funcs.prepare ` - :c:type:`drm_encoder_helper_funcs.disable ` - :c:type:`drm_encoder_helper_funcs.dpms ` and the CRTC is disabled via one of: - :c:type:`drm_crtc_helper_funcs.prepare ` - :c:type:`drm_crtc_helper_funcs.atomic_disable ` - :c:type:`drm_crtc_helper_funcs.disable ` - :c:type:`drm_crtc_helper_funcs.dpms ` The **atomic_post_disable** callback is optional. h](jt)}(h``atomic_post_disable``h]jz)}(hjgIh]hatomic_post_disable}(hjiIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeIubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjaIubj)}(hhh](h)}(hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the **atomic_post_disable** is called.h](hThe bridge must assume that the display pipe (i.e. clocks and timing signals) feeding this bridge is no longer running when the }(hjIhhhNhNubj%)}(h**atomic_post_disable**h]hatomic_post_disable}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubh is called.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj}Iubh)}(hThis callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element.h]hThis callback should perform all the actions required by the hardware after it has stopped receiving signals from the preceding element.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj}Iubh)}(hIf the preceding element is a :c:type:`drm_bridge`, then this is called after that bridge is post-disabled (unless marked otherwise by the **pre_enable_prev_first** flag) via one of:h](hIf the preceding element is a }(hjIhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjIh]h drm_bridge}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(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.hhMhjIubhY, then this is called after that bridge is post-disabled (unless marked otherwise by the }(hjIhhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubh flag) via one of:}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMhj}Iubh)}(hhh](h)}(h::c:type:`drm_bridge_funcs.post_disable `h]h)}(hjIh]h)}(hjIh]jz)}(hjIh]hdrm_bridge_funcs.post_disable}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(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.hhMhjIubah}(h]h ]h"]h$]h&]uh1hhjJhMhjIubah}(h]h ]h"]h$]h&]uh1hhjIubh)}(hB:c:type:`drm_bridge_funcs.atomic_post_disable ` h]h)}(hA:c:type:`drm_bridge_funcs.atomic_post_disable `h]h)}(hj/Jh]jz)}(hj/Jh]h$drm_bridge_funcs.atomic_post_disable}(hj4JhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj1Jubah}(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-Jubah}(h]h ]h"]h$]h&]uh1hhjOJhMhj)Jubah}(h]h ]h"]h$]h&]uh1hhjIubeh}(h]h ]h"]h$]h&]j8j4uh1hhjJhMhj}Iubh)}(hIf the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of:h]hIf the preceding element of the bridge is a display controller, then this callback is called after the encoder is disabled via one of:}(hjbJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj}Iubh)}(hhh](h)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]h)}(hjvJh]h)}(hjvJh]jz)}(hjvJh]h'drm_encoder_helper_funcs.atomic_disable}(hj~JhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj{Jubah}(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.hhMhjxJubah}(h]h ]h"]h$]h&]uh1hhjJhMhjtJubah}(h]h ]h"]h$]h&]uh1hhjqJubh)}(hE:c:type:`drm_encoder_helper_funcs.prepare `h]h)}(hjJh]h)}(hjJh]jz)}(hjJh]h drm_encoder_helper_funcs.prepare}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(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.hhMhjJubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1hhjqJubh)}(hE:c:type:`drm_encoder_helper_funcs.disable `h]h)}(hjJh]h)}(hjJh]jz)}(hjJh]h drm_encoder_helper_funcs.disable}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(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.hhMhjJubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1hhjqJubh)}(hC:c:type:`drm_encoder_helper_funcs.dpms ` h]h)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]h)}(hjKh]jz)}(hjKh]hdrm_encoder_helper_funcs.dpms}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjKubah}(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.hhMhjKubah}(h]h ]h"]h$]h&]uh1hhj0KhMhj Kubah}(h]h ]h"]h$]h&]uh1hhjqJubeh}(h]h ]h"]h$]h&]j8j4uh1hhjJhMhj}Iubh)}(h$and the CRTC is disabled via one of:h]h$and the CRTC is disabled via one of:}(hjCKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj}Iubh)}(hhh](h)}(h?:c:type:`drm_crtc_helper_funcs.prepare `h]h)}(hjWKh]h)}(hjWKh]jz)}(hjWKh]hdrm_crtc_helper_funcs.prepare}(hj_KhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj\Kubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjYKubah}(h]h ]h"]h$]h&]uh1hhjzKhMhjUKubah}(h]h ]h"]h$]h&]uh1hhjRKubh)}(hF:c:type:`drm_crtc_helper_funcs.atomic_disable `h]h)}(hjKh]h)}(hjKh]jz)}(hjKh]h$drm_crtc_helper_funcs.atomic_disable}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjKubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1hhjRKubh)}(h?:c:type:`drm_crtc_helper_funcs.disable `h]h)}(hjKh]h)}(hjKh]jz)}(hjKh]hdrm_crtc_helper_funcs.disable}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjKubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1hhjRKubh)}(h=:c:type:`drm_crtc_helper_funcs.dpms ` h]h)}(h<:c:type:`drm_crtc_helper_funcs.dpms `h]h)}(hjKh]jz)}(hjKh]hdrm_crtc_helper_funcs.dpms}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjKubah}(h]h ]h"]h$]h&]uh1hhjLhMhjKubah}(h]h ]h"]h$]h&]uh1hhjRKubeh}(h]h ]h"]h$]h&]j8j4uh1hhjzKhMhj}Iubh)}(h1The **atomic_post_disable** callback is optional.h](hThe }(hj$LhhhNhNubj%)}(h**atomic_post_disable**h]hatomic_post_disable}(hj,LhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$Lubh callback is optional.}(hj$LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|IhMhj}Iubeh}(h]h ]h"]h$]h&]uh1jhjaIubeh}(h]h ]h"]h$]h&]uh1jmhj|IhMhj1ubjn)}(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)}(hjVLh]hatomic_duplicate_state}(hjXLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTLubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjPLubj)}(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).}(hjoLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjlLubh)}(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~LhhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hjLh]hdrm_bridge_state}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjLubah}(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~Lubhf, the drm_atomic_helper_bridge_duplicate_state() helper function shall be used to implement this hook.}(hj~LhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLhMhjlLubh)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjlLubeh}(h]h ]h"]h$]h&]uh1jhjPLubeh}(h]h ]h"]h$]h&]uh1jmhjkLhMhj1ubjn)}(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)}(hjLh]hatomic_destroy_state}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjLubj)}(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 }(hjLhhhNhNubh)}(hH:c:type:`drm_bridge_funcs.atomic_duplicate_state\(\) `h]jz)}(hjLh]h)drm_bridge_funcs.atomic_duplicate_state()}(hjLhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjLubah}(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.hhMhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhMhjLubh)}(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 }(hjMhhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hj&Mh]hdrm_bridge_state}(hj(MhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$Mubah}(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.hhMhjMubhd, the drm_atomic_helper_bridge_destroy_state() helper function shall be used to implement this hook.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjCMhMhjLubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjLhMhj1ubjn)}(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`Mh]hatomic_get_output_bus_fmts}(hjbMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^Mubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjZMubj)}(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).}(hjyMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjvMubh)}(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 }(hjMhhhNhNubh)}(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)}(hjMh]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}(hjMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMubah}(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.hhMhjMubh.bus_formats[0] if }(hjMhhhNhNubh)}(h4:c:type:`drm_connector.display_info `h]jz)}(hjMh]hdrm_connector.display_info}(hjMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjMhMhjMubh:.num_bus_formats > 0, or to MEDIA_BUS_FMT_FIXED otherwise.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhMhjvMubeh}(h]h ]h"]h$]h&]uh1jhjZMubeh}(h]h ]h"]h$]h&]uh1jmhjuMhMhj1ubjn)}(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)}(hjMh]hatomic_get_input_bus_fmts}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMFhjMubj)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM)hjNubh)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM,hjNubh)}(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.}(hj&NhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM4hjNubh)}(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, }(hj5NhhhNhNubh)}(h:c:type:`drm_display_mode`h]jz)}(hj?Nh]hdrm_display_mode}(hjANhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj=Nubah}(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.hhM<hj5Nubh, }(hj5NhhhNhNubh)}(h:c:type:`drm_display_info`h]jz)}(hjcNh]hdrm_display_info}(hjeNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjaNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hhj\NhM<hj5Nubh, ...)}(hj5NhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\NhM<hjNubh)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMBhjNubeh}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjNhMFhj1ubjn)}(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)}(hjNh]h atomic_check}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMfhjNubj)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMRhjNubh)}(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)}(hjNh]hdrm_bridge_funcs.atomic_check()}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(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.hhMVhjNubhG hooks are called in reverse order (from the last to the first bridge).}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhMVhjNubh)}(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. }(hjOhhhNhNubh)}(h<:c:type:`drm_bridge_funcs.mode_fixup\(\) `h]jz)}(hj Oh]hdrm_bridge_funcs.mode_fixup()}(hj OhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj Oubah}(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.hhMYhjOubh is not called when }(hjOhhhNhNubh)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hj/Oh]hdrm_bridge_funcs.atomic_check()}(hj1OhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj-Oubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj(OhMYhjOubh8 is implemented, so only one of them should be provided.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(OhMYhjNubh)}(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 }(hjVOhhhNhNubh)}(h;:c:type:`drm_bridge_state.input_bus_cfg `h]jz)}(hj`Oh]hdrm_bridge_state.input_bus_cfg}(hjbOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj^Oubah}(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.hhM]hjVOubh .flags or }(hjVOhhhNhNubh)}(h<:c:type:`drm_bridge_state.output_bus_cfg `h]jz)}(hjOh]hdrm_bridge_state.output_bus_cfg}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hhj}OhM]hjVOubh9.flags it should happen in this function. By default the }(hjVOhhhNhNubh)}(h<:c:type:`drm_bridge_state.output_bus_cfg `h]jz)}(hjOh]hdrm_bridge_state.output_bus_cfg}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hhj}OhM]hjVOubh'.flags field is set to the next bridge }(hjVOhhhNhNubh)}(h;:c:type:`drm_bridge_state.input_bus_cfg `h]jz)}(hjOh]hdrm_bridge_state.input_bus_cfg}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_stateuh1hhj}OhM]hjVOubh.flags value or }(hjVOhhhNhNubh)}(h4:c:type:`drm_connector.display_info `h]jz)}(hjOh]hdrm_connector.display_info}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj}OhM]hjVOubh:.bus_flags if the bridge is the last element in the chain.}(hjVOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}OhM]hjNubh)}(hCRETURNS: zero if the check passed, a negative error code otherwise.h]hCRETURNS: zero if the check passed, a negative error code otherwise.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMehjNubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjNhMfhj1ubjn)}(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)}(hj5Ph]h atomic_reset}(hj7PhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3Pubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj/Pubj)}(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 }(hjNPhhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hjXPh]hdrm_bridge_state}(hjZPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVPubah}(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.hhMphjNPubhD object matching this state. This function is called at attach time.}(hjNPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuPhMphjKPubh)}(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 }(hjPhhhNhNubh)}(h:c:type:`drm_bridge_state`h]jz)}(hjPh]hdrm_bridge_state}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(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.hhMthjPubh\, the drm_atomic_helper_bridge_reset() helper function shall be used to implement this hook.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjPhMthjKPubh)}(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, ...).}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMzhjKPubjQH)}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM}hjPubah}(h]h ]h"]h$]h&]uh1hhjPubh)}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjPubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]jMJjNJjOJhjPJjQJuh1jPHhjKPubh)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjKPubeh}(h]h ]h"]h$]h&]uh1jhj/Pubeh}(h]h ]h"]h$]h&]uh1jmhjJPhMhj1ubjn)}(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)}(hjQh]hdetect}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjQubj)}(hhh](h)}(h3Check if anything is attached to the bridge output.h]h3Check if anything is attached to the bridge output.}(hj6QhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3Qubh)}(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 }(hjEQhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjOQh]hdrm_bridge->ops}(hjQQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMQubah}(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.hhMhjEQubh.}(hjEQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlQhMhj3Qubh)}(hRETURNS:h]hRETURNS:}(hjwQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3Qubh)}(h9drm_connector_status indicating the bridge output status.h]h9drm_connector_status indicating the bridge output status.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2QhMhj3Qubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhj2QhMhj1ubjn)}(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)}(hjQh]h get_modes}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjQubj)}(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 }(hjQhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hjQh]h drm_connector}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjQubah}(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.hhMhjQubh with drm_mode_probed_add().}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhMhjQubh)}(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 }(hjQhhhNhNubj%)}(h **get_modes**h]h get_modes}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubh callback is mostly intended to support non-probeable displays such as many fixed panels. Bridges that support reading EDID shall leave }(hjQhhhNhNubj%)}(h **get_modes**h]h get_modes}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubh! unimplemented and implement the }(hjQhhhNhNubh)}(h8:c:type:`drm_bridge_funcs->edid_read `h]jz)}(hjRh]hdrm_bridge_funcs->edid_read}(hj!RhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjRubah}(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.hhMhjQubh callback instead.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjops `.h](heThis callback is optional. Bridges that implement it shall set the DRM_BRIDGE_OP_MODES flag in their }(hjGRhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjQRh]hdrm_bridge->ops}(hjSRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjORubah}(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.hhMhjGRubh.}(hjGRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnRhMhjQubh)}(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.}(hjyRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjQubh)}(hRETURNS:h]hRETURNS:}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjQubh)}(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().}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjQhMhj1ubjn)}(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)}(hjRh]h edid_read}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubj)}(hhh](h)}(h,Read the EDID data of the connected display.h]h,Read the EDID data of the connected display.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubh)}(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 }(hjRhhhNhNubj%)}(h **edid_read**h]h edid_read}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubh 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 }(hjRhhhNhNubj%)}(h **get_modes**h]h get_modes}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubh callback unimplemented.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubh)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubh)}(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 }(hj!ShhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj+Sh]hdrm_bridge->ops}(hj-ShhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj)Subah}(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!Subh.}(hj!ShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHShMhjRubh)}(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.}(hjSShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubh)}(hRETURNS:h]hRETURNS:}(hjbShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubh)}(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().}(hjqShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhj1ubjn)}(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)}(hjSh]h hpd_notify}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjSubj)}(hhh](h)}(h(Notify the bridge of hot plug detection.h]h(Notify the bridge of hot plug detection.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjSubh)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjShMhj1ubjn)}(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)}(hjSh]h hpd_enable}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjSubj)}(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 }(hjShhhNhNubj%)}(h**hpd_disable**h]h hpd_disable}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjSubh)}(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 }(hjThhhNhNubj%)}(h**hpd_disable**h]h hpd_disable}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh6 callback and set the DRM_BRIDGE_OP_HPD flag in their }(hjThhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj1Th]hdrm_bridge->ops}(hj3ThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/Tubah}(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.hhMhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjShMhj1ubjn)}(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)}(hjkTh]h hpd_disable}(hjmThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiTubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjeTubj)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjTubh)}(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 }(hjThhhNhNubj%)}(h**hpd_enable**h]h hpd_enable}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubh6 callback and set the DRM_BRIDGE_OP_HPD flag in their }(hjThhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjTh]hdrm_bridge->ops}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjTubah}(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.hhMhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjThMhjTubeh}(h]h ]h"]h$]h&]uh1jhjeTubeh}(h]h ]h"]h$]h&]uh1jmhjThMhj1ubjn)}(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)}(hjTh]hhdmi_tmds_char_rate_valid}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM hjTubj)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjTubh)}(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 }(hjUhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjUh]hdrm_bridge->ops}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjUubah}(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.hhMhjUubh.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8UhMhjTubh)}(hReturns:h]hReturns:}(hjCUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjTubh)}(hEither :c:type:`drm_mode_status.MODE_OK ` or one of the failure reasons in :c:type:`enum drm_mode_status `.h](hEither }(hjRUhhhNhNubh)}(h3:c:type:`drm_mode_status.MODE_OK `h]jz)}(hj\Uh]hdrm_mode_status.MODE_OK}(hj^UhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjZUubah}(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.hhMhjRUubh" or one of the failure reasons in }(hjRUhhhNhNubh)}(h0:c:type:`enum drm_mode_status `h]jz)}(hjUh]henum drm_mode_status}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj~Uubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_statusuh1hhjyUhMhjRUubh.}(hjRUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyUhMhjTubeh}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThM hj1ubjn)}(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)}(hjUh]hhdmi_clear_infoframe}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjUubj)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjUubh)}(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 }(hjUhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjUh]hdrm_bridge->ops}(hjUhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjUubah}(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.hhMhjUubh.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhMhjUubeh}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhMhj1ubjn)}(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)}(hj%Vh]hhdmi_write_infoframe}(hj'VhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#Vubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM#hjVubj)}(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>VhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj;Vubh)}(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 }(hjMVhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjWVh]hdrm_bridge->ops}(hjYVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjUVubah}(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"hjMVubh.}(hjMVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjtVhM"hj;Vubeh}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhj:VhM#hj1ubjn)}(hX``hdmi_audio_startup`` Called when ASoC starts an audio stream setup. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_startup``h]jz)}(hjVh]hhdmi_audio_startup}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM2hjVubj)}(hhh](h)}(h.Called when ASoC starts an audio stream setup.h]h.Called when ASoC starts an audio stream setup.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM,hjVubh)}(hThis callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hIThis callback is optional, it can be implemented by bridges that set the }(hjVhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubh flag in their }(hjVhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjVh]hdrm_bridge->ops}(hjVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(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.hjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVhM.hjVubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM1hjVubeh}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjVhM2hj1ubjn)}(hXG``hdmi_audio_prepare`` Configures HDMI-encoder for audio stream. Can be called multiple times for each setup. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_prepare``h]jz)}(hjWh]hhdmi_audio_prepare}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMAhjWubj)}(hhh](h)}(hVConfigures HDMI-encoder for audio stream. Can be called multiple times for each setup.h]hVConfigures HDMI-encoder for audio stream. Can be called multiple times for each setup.}(hj7WhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM:hj4Wubh)}(hThis callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hMThis callback is optional but it must be implemented by bridges that set the }(hjFWhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjNWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFWubh flag in their }(hjFWhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjbWh]hdrm_bridge->ops}(hjdWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`Wubah}(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=hjFWubh.}(hjFWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhM=hj4Wubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM@hj4Wubeh}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhj3WhMAhj1ubjn)}(hX ``hdmi_audio_shutdown`` Shut down the audio stream. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_shutdown``h]jz)}(hjWh]hhdmi_audio_shutdown}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMPhjWubj)}(hhh](h)}(hShut down the audio stream.h]hShut down the audio stream.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMJhjWubh)}(hThis callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hMThis callback is optional but it must be implemented by bridges that set the }(hjWhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubh flag in their }(hjWhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjWh]hdrm_bridge->ops}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjWubah}(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.hhMLhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj XhMLhjWubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMOhjWubeh}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjWhMPhj1ubjn)}(hX``hdmi_audio_mute_stream`` Mute/unmute HDMI audio stream. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``hdmi_audio_mute_stream``h]jz)}(hj8Xh]hhdmi_audio_mute_stream}(hj:XhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6Xubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM^hj2Xubj)}(hhh](h)}(hMute/unmute HDMI audio stream.h]hMute/unmute HDMI audio stream.}(hjQXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMXhjNXubh)}(hThis callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_HDMI_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hIThis callback is optional, it can be implemented by bridges that set the }(hj`XhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjhXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`Xubh flag in their }(hj`XhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj|Xh]hdrm_bridge->ops}(hj~XhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjzXubah}(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.hhMZhj`Xubh.}(hj`XhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXhMZhjNXubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM]hjNXubeh}(h]h ]h"]h$]h&]uh1jhj2Xubeh}(h]h ]h"]h$]h&]uh1jmhjMXhM^hj1ubjn)}(hX"``dp_audio_startup`` Called when ASoC starts a DisplayPort audio stream setup. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``dp_audio_startup``h]jz)}(hjXh]hdp_audio_startup}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMwhjXubj)}(hhh](h)}(h9Called when ASoC starts a DisplayPort audio stream setup.h]h9Called when ASoC starts a DisplayPort audio stream setup.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMqhjXubh)}(hThis callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hIThis callback is optional, it can be implemented by bridges that set the }(hjXhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubh flag in their }(hjXhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj Yh]hdrm_bridge->ops}(hj YhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(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.hhMshjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&YhMshjXubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hj1YhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMvhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhMwhj1ubjn)}(hX>``dp_audio_prepare`` Configures DisplayPort audio stream. Can be called multiple times for each setup. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``dp_audio_prepare``h]jz)}(hjRYh]hdp_audio_prepare}(hjTYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPYubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjLYubj)}(hhh](h)}(hQConfigures DisplayPort audio stream. Can be called multiple times for each setup.h]hQConfigures DisplayPort audio stream. Can be called multiple times for each setup.}(hjkYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhYubh)}(hThis callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hMThis callback is optional but it must be implemented by bridges that set the }(hjzYhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzYubh flag in their }(hjzYhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hjYh]hdrm_bridge->ops}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(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.hhMhjzYubh.}(hjzYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhMhjhYubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhYubeh}(h]h ]h"]h$]h&]uh1jhjLYubeh}(h]h ]h"]h$]h&]uh1jmhjgYhMhj1ubjn)}(hX``dp_audio_shutdown`` Shut down the DisplayPort audio stream. This callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``dp_audio_shutdown``h]jz)}(hjYh]hdp_audio_shutdown}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjYubj)}(hhh](h)}(h'Shut down the DisplayPort audio stream.h]h'Shut down the DisplayPort audio stream.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjYubh)}(hThis callback is optional but it must be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hMThis callback is optional but it must be implemented by bridges that set the }(hjZhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh flag in their }(hjZhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj#Zh]hdrm_bridge->ops}(hj%ZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!Zubah}(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.hhMhjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@ZhMhjYubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjKZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjYubeh}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhMhj1ubjn)}(hX``dp_audio_mute_stream`` Mute/unmute DisplayPort audio stream. This callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `. Returns: 0 on success, a negative error code otherwise h](jt)}(h``dp_audio_mute_stream``h]jz)}(hjlZh]hdp_audio_mute_stream}(hjnZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjZubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjfZubj)}(hhh](h)}(h%Mute/unmute DisplayPort audio stream.h]h%Mute/unmute DisplayPort audio stream.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjZubh)}(hThis callback is optional, it can be implemented by bridges that set the **DRM_BRIDGE_OP_DP_AUDIO** flag in their :c:type:`drm_bridge->ops `.h](hIThis callback is optional, it can be implemented by bridges that set the }(hjZhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubh flag in their }(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_bridgeuh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhjZubh)}(h6Returns: 0 on success, a negative error code otherwiseh]h6Returns: 0 on success, a negative error code otherwise}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjZubeh}(h]h ]h"]h$]h&]uh1jhjfZubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhj1ubjn)}(hH``debugfs_init`` Allows bridges to create bridge-specific debugfs files.h](jt)}(h``debugfs_init``h]jz)}(hjZh]h debugfs_init}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjZubj)}(hhh]h)}(h7Allows bridges to create bridge-specific debugfs files.h]h7Allows bridges to create bridge-specific debugfs files.}(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&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_timings (C struct)c.drm_bridge_timingshNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hdrm_bridge_timingsh]j)}(hstruct drm_bridge_timingsh](j)}(hjh]hstruct}(hjS[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO[hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hja[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO[hhhj`[hMubj)}(hdrm_bridge_timingsh]j)}(hjM[h]hdrm_bridge_timings}(hjs[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjO[hhhj`[hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjK[hhhj`[hMubah}(h]jF[ah ](jjeh"]h$]h&]jj)jhuh1jhj`[hMhjH[hhubj)}(hhh]h)}(h!timing information for the bridgeh]h!timing information for the bridge}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjH[hhhj`[hMubeh}(h]h ](jstructeh"]h$]h&]jjjj[jj[jjjuh1jhhhj0hNhNubj)}(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}(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.hhMhj[ubj@)}(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; };}hj[sbah}(h]h ]h"]h$]h&]jjuh1j?h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj[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:182: ./include/drm/drm_bridge.hhMhj[ubji)}(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\h]hinput_bus_flags}(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)}(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\hhhNhNubh)}(h8:c:type:`drm_display_info->bus_flags `h]jz)}(hj%\h]hdrm_display_info->bus_flags}(hj'\hhhNhNubah}(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:182: ./include/drm/drm_bridge.hhMhj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjB\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj\hMhj[ubjn)}(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)}(hj_\h]h setup_time_ps}(hja\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.hhMhjY\ubj)}(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.}(hjx\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhju\ubah}(h]h ]h"]h$]h&]uh1jhjY\ubeh}(h]h ]h"]h$]h&]uh1jmhjt\hMhj[ubjn)}(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)}(hj\h]h hold_time_ps}(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)}(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.}(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\hMhj[ubjn)}(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)}(hj\h]h dual_link}(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)}(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\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\hMhj[ubeh}(h]h ]h"]h$]h&]uh1jhhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_bridge_ops (C enum)c.drm_bridge_opshNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hdrm_bridge_opsh]j)}(henum drm_bridge_opsh](j)}(hjh]henum}(hj-]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)]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&]uh1jhj)]hhhj:]hMubj)}(hdrm_bridge_opsh]j)}(hj']h]hdrm_bridge_ops}(hjM]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI]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)}(h-Bitmask of operations supported by the bridgeh]h-Bitmask of operations supported by the bridge}(hjo]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjl]hhubah}(h]h ]h"]h$]h&]uh1jhj"]hhhj:]hMubeh}(h]h ](jenumeh"]h$]h&]jjjj]jj]jjjuh1jhhhj0hNhNubj)}(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. ``DRM_BRIDGE_OP_HDMI_AUDIO`` The bridge provides HDMI audio operations. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->hdmi_audio_prepare ` and :c:type:`drm_bridge_funcs->hdmi_audio_shutdown ` callbacks. 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. Also it is not possible to have a bridge in the chain that sets **DRM_BRIDGE_OP_DP_AUDIO** if there is a bridge that sets this flag. ``DRM_BRIDGE_OP_DP_AUDIO`` The bridge provides DisplayPort audio operations. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->dp_audio_prepare ` and :c:type:`drm_bridge_funcs->dp_audio_shutdown ` callbacks. 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. Also it is not possible to have a bridge in the chain that sets **DRM_BRIDGE_OP_HDMI_AUDIO** if there is a bridge that sets this flag. ``DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER`` The bridge requires CEC notifier to be present. ``DRM_BRIDGE_OP_HDMI_CEC_ADAPTER`` The bridge requires CEC adapter to be present.h](h)}(h **Constants**h]j%)}(hj]h]h Constants}(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:182: ./include/drm/drm_bridge.hhMhj]ubji)}(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)}(hj]h]hDRM_BRIDGE_OP_DETECT}(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)}(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 }(hj]hhhNhNubh)}(h5:c:type:`drm_bridge_funcs->detect `h]jz)}(hj]h]hdrm_bridge_funcs->detect}(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 callback.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhj]ubjn)}(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 ^h]hDRM_BRIDGE_OP_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:182: ./include/drm/drm_bridge.hhMhj^ubj)}(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 }(hj&^hhhNhNubh)}(h8:c:type:`drm_bridge_funcs->edid_read `h]jz)}(hj0^h]hdrm_bridge_funcs->edid_read}(hj2^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 callback.}(hj&^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjM^hMhj#^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj"^hMhj]ubjn)}(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)}(hjj^h]hDRM_BRIDGE_OP_HPD}(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.hhMhjd^ubj)}(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 }(hj^hhhNhNubh)}(h9:c:type:`drm_bridge_funcs->hpd_enable `h]jz)}(hj^h]hdrm_bridge_funcs->hpd_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 and }(hj^hhhNhNubh)}(h::c:type:`drm_bridge_funcs->hpd_disable `h]jz)}(hj^h]hdrm_bridge_funcs->hpd_disable}(hj^hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj^hMhj^ubhQ callbacks if they support enabling and disabling hot-plug detection dynamically.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjd^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhj]ubjn)}(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^h]hDRM_BRIDGE_OP_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.hhMhj^ubj)}(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_hhhNhNubj%)}(h**DRM_BRIDGE_OP_EDID**h]hDRM_BRIDGE_OP_EDID}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubh1. Bridges that set this flag shall implement the }(hj_hhhNhNubh)}(h8:c:type:`drm_bridge_funcs->get_modes `h]jz)}(hj_h]hdrm_bridge_funcs->get_modes}(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 callback.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhj]ubjn)}(hXm``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)}(hjY_h]hDRM_BRIDGE_OP_HDMI}(hj[_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW_ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjS_ubj)}(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 }(hjr_hhhNhNubh)}(h>:c:type:`drm_bridge_funcs->write_infoframe `h]jz)}(hj|_h]h!drm_bridge_funcs->write_infoframe}(hj~_hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjz_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.hhMhjr_ubh callback.}(hjr_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMhjo_ubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjo_ubeh}(h]h ]h"]h$]h&]uh1jhjS_ubeh}(h]h ]h"]h$]h&]uh1jmhjn_hMhj]ubjn)}(hX!``DRM_BRIDGE_OP_HDMI_AUDIO`` The bridge provides HDMI audio operations. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->hdmi_audio_prepare ` and :c:type:`drm_bridge_funcs->hdmi_audio_shutdown ` callbacks. 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. Also it is not possible to have a bridge in the chain that sets **DRM_BRIDGE_OP_DP_AUDIO** if there is a bridge that sets this flag. h](jt)}(h``DRM_BRIDGE_OP_HDMI_AUDIO``h]jz)}(hj_h]hDRM_BRIDGE_OP_HDMI_AUDIO}(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)}(hThe bridge provides HDMI audio operations. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->hdmi_audio_prepare ` and :c:type:`drm_bridge_funcs->hdmi_audio_shutdown ` callbacks.h](hYThe bridge provides HDMI audio operations. Bridges that set this flag must implement the }(hj_hhhNhNubh)}(hA:c:type:`drm_bridge_funcs->hdmi_audio_prepare `h]jz)}(hj_h]h$drm_bridge_funcs->hdmi_audio_prepare}(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 and }(hj_hhhNhNubh)}(hB:c:type:`drm_bridge_funcs->hdmi_audio_shutdown `h]jz)}(hj `h]h%drm_bridge_funcs->hdmi_audio_shutdown}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj `ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj`hMhj_ubh callbacks.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMhj_ubh)}(hXNote: 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. Also it is not possible to have a bridge in the chain that sets **DRM_BRIDGE_OP_DP_AUDIO** if there is a bridge that sets this flag.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. Also it is not possible to have a bridge in the chain that sets }(hj3`hhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hj;`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3`ubh* if there is a bridge that sets this flag.}(hj3`hhhNhNubeh}(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_hMhj]ubjn)}(hX$``DRM_BRIDGE_OP_DP_AUDIO`` The bridge provides DisplayPort audio operations. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->dp_audio_prepare ` and :c:type:`drm_bridge_funcs->dp_audio_shutdown ` callbacks. 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. Also it is not possible to have a bridge in the chain that sets **DRM_BRIDGE_OP_HDMI_AUDIO** if there is a bridge that sets this flag. h](jt)}(h``DRM_BRIDGE_OP_DP_AUDIO``h]jz)}(hjf`h]hDRM_BRIDGE_OP_DP_AUDIO}(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:182: ./include/drm/drm_bridge.hhMhj``ubj)}(hhh](h)}(hThe bridge provides DisplayPort audio operations. Bridges that set this flag must implement the :c:type:`drm_bridge_funcs->dp_audio_prepare ` and :c:type:`drm_bridge_funcs->dp_audio_shutdown ` callbacks.h](h`The bridge provides DisplayPort audio operations. Bridges that set this flag must implement the }(hj`hhhNhNubh)}(h?:c:type:`drm_bridge_funcs->dp_audio_prepare `h]jz)}(hj`h]h"drm_bridge_funcs->dp_audio_prepare}(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.hhM hj`ubh and }(hj`hhhNhNubh)}(h@:c:type:`drm_bridge_funcs->dp_audio_shutdown `h]jz)}(hj`h]h#drm_bridge_funcs->dp_audio_shutdown}(hj`hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj`hM hj`ubh callbacks.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hM hj|`ubh)}(hXNote: 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. Also it is not possible to have a bridge in the chain that sets **DRM_BRIDGE_OP_HDMI_AUDIO** if there is a bridge that sets this flag.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. Also it is not possible to have a bridge in the chain that sets }(hj`hhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubh* if there is a bridge that sets this flag.}(hj`hhhNhNubeh}(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{`hMhj]ubjn)}(hT``DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER`` The bridge requires CEC notifier to be present. h](jt)}(h#``DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER``h]jz)}(hjah]hDRM_BRIDGE_OP_HDMI_CEC_NOTIFIER}(hj ahhhNhNubah}(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/The bridge requires CEC notifier to be present.h]h/The bridge requires CEC notifier to be present.}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjahMhj]ubjn)}(hQ``DRM_BRIDGE_OP_HDMI_CEC_ADAPTER`` The bridge requires CEC adapter to be present.h](jt)}(h"``DRM_BRIDGE_OP_HDMI_CEC_ADAPTER``h]jz)}(hjAah]hDRM_BRIDGE_OP_HDMI_CEC_ADAPTER}(hjCahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?aubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj;aubj)}(hhh]h)}(h.The bridge requires CEC adapter to be present.h]h.The bridge requires CEC adapter to be present.}(hjZahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVahMhjWaubah}(h]h ]h"]h$]h&]uh1jhj;aubeh}(h]h ]h"]h$]h&]uh1jmhjVahMhj]ubeh}(h]h ]h"]h$]h&]uh1jhhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge (C struct) c.drm_bridgehNtauh1jxhj0hhhNhNubj)}(hhh](j)}(h drm_bridgeh]j)}(hstruct drm_bridgeh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjahM ubj)}(h drm_bridgeh]j)}(hjah]h drm_bridge}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjahM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjahM ubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhjahM hjahhubj)}(hhh]h)}(h$central DRM bridge control structureh]h$central DRM bridge control structure}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM&hjahhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahM ubeh}(h]h ](jstructeh"]h$]h&]jjjjajjajjjuh1jhhhj0hNhNubj)}(hX1**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 *container; struct kref refcount; 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; const char *vendor; const char *product; unsigned int supported_formats; unsigned int max_bpc; struct device *hdmi_cec_dev; struct device *hdmi_audio_dev; int hdmi_audio_max_i2s_playback_channels; u64 hdmi_audio_i2s_formats; unsigned int hdmi_audio_spdif_playback : 1; int hdmi_audio_dai_port; const char *hdmi_cec_adapter_name; u8 hdmi_cec_available_las; struct mutex hpd_mutex; void (*hpd_cb)(void *data, enum drm_connector_status status); void *hpd_data; }; **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 ``container`` Pointer to the private driver struct embedding this **struct** drm_bridge. ``refcount`` reference count of users referencing this bridge. ``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. ``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_cec_dev`` device to be used as a containing device for CEC functions. ``hdmi_audio_dev`` device to be used as a parent for the HDMI Codec if either of **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO** is set. ``hdmi_audio_max_i2s_playback_channels`` maximum number of playback I2S channels for the **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**. ``hdmi_audio_i2s_formats`` supported I2S formats, optional. The default is to allow all formats supported by the corresponding I2S bus driver. This is only used for bridges setting **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**. ``hdmi_audio_spdif_playback`` set if this bridge has S/PDIF playback port for **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**. ``hdmi_audio_dai_port`` sound DAI port for either of **DRM_BRIDGE_OP_HDMI_AUDIO** and **DRM_BRIDGE_OP_DP_AUDIO**, -1 if it is not used. ``hdmi_cec_adapter_name`` the name of the adapter to register ``hdmi_cec_available_las`` number of logical addresses, CEC_MAX_LOG_ADDRS if unset ``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**.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh:}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM*hjaubj@)}(hXstruct 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 *container; struct kref refcount; 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; const char *vendor; const char *product; unsigned int supported_formats; unsigned int max_bpc; struct device *hdmi_cec_dev; struct device *hdmi_audio_dev; int hdmi_audio_max_i2s_playback_channels; u64 hdmi_audio_i2s_formats; unsigned int hdmi_audio_spdif_playback : 1; int hdmi_audio_dai_port; const char *hdmi_cec_adapter_name; u8 hdmi_cec_available_las; struct mutex hpd_mutex; void (*hpd_cb)(void *data, enum drm_connector_status status); void *hpd_data; };h]hXstruct 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 *container; struct kref refcount; 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; const char *vendor; const char *product; unsigned int supported_formats; unsigned int max_bpc; struct device *hdmi_cec_dev; struct device *hdmi_audio_dev; int hdmi_audio_max_i2s_playback_channels; u64 hdmi_audio_i2s_formats; unsigned int hdmi_audio_spdif_playback : 1; int hdmi_audio_dai_port; const char *hdmi_cec_adapter_name; u8 hdmi_cec_available_las; struct mutex hpd_mutex; void (*hpd_cb)(void *data, enum drm_connector_status status); void *hpd_data; };}hjbsbah}(h]h ]h"]h$]h&]jjuh1j?h]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM,hjaubh)}(h **Members**h]j%)}(hj*bh]hMembers}(hj,bhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(bubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMOhjaubji)}(hhh](jn)}(h3``base`` inherit from :c:type:`drm_private_object` h](jt)}(h``base``h]jz)}(hjIbh]hbase}(hjKbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGbubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM*hjCbubj)}(hhh]h)}(h)inherit from :c:type:`drm_private_object`h](h inherit from }(hjbbhhhNhNubh)}(h:c:type:`drm_private_object`h]jz)}(hjlbh]hdrm_private_object}(hjnbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjjbubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_private_objectuh1hhj^bhM*hjbbubeh}(h]h ]h"]h$]h&]uh1hhj^bhM*hj_bubah}(h]h ]h"]h$]h&]uh1jhjCbubeh}(h]h ]h"]h$]h&]uh1jmhj^bhM*hj@bubjn)}(h*``dev`` DRM device this bridge belongs to h](jt)}(h``dev``h]jz)}(hjbh]hdev}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM,hjbubj)}(hhh]h)}(h!DRM device this bridge belongs toh]h!DRM device this bridge belongs to}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM,hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhM,hj@bubjn)}(h6``encoder`` encoder to which this bridge is connected h](jt)}(h ``encoder``h]jz)}(hjbh]hencoder}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM.hjbubj)}(hhh]h)}(h)encoder to which this bridge is connectedh]h)encoder to which this bridge is connected}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM.hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhM.hj@bubjn)}(h+``chain_node`` used to form a bridge chain h](jt)}(h``chain_node``h]jz)}(hjch]h chain_node}(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.hhM0hj cubj)}(hhh]h)}(hused to form a bridge chainh]hused to form a bridge chain}(hj,chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(chM0hj)cubah}(h]h ]h"]h$]h&]uh1jhj cubeh}(h]h ]h"]h$]h&]uh1jmhj(chM0hj@bubjn)}(h.``of_node`` device node pointer to the bridge h](jt)}(h ``of_node``h]jz)}(hjLch]hof_node}(hjNchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJcubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM2hjFcubj)}(hhh]h)}(h!device node pointer to the bridgeh]h!device node pointer to the bridge}(hjechhhNhNubah}(h]h ]h"]h$]h&]uh1hhjachM2hjbcubah}(h]h ]h"]h$]h&]uh1jhjFcubeh}(h]h ]h"]h$]h&]uh1jmhjachM2hj@bubjn)}(h,``list`` to keep track of all added bridges h](jt)}(h``list``h]jz)}(hjch]hlist}(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.hhM4hjcubj)}(hhh]h)}(h"to keep track of all added bridgesh]h"to keep track of all added bridges}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM4hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhjchM4hj@bubjn)}(hJ``timings`` the timing specification for the bridge, if any (may be NULL) h](jt)}(h ``timings``h]jz)}(hjch]htimings}(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.hhM7hjcubj)}(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)}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM7hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhjchM7hj@bubjn)}(h``funcs`` control functions h](jt)}(h ``funcs``h]jz)}(hjch]hfuncs}(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.hhM<hjcubj)}(hhh]h)}(hcontrol functionsh]hcontrol functions}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj dhM<hj dubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj dhM<hj@bubjn)}(hY``container`` Pointer to the private driver struct embedding this **struct** drm_bridge. h](jt)}(h ``container``h]jz)}(hj0dh]h container}(hj2dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.dubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMAhj*dubj)}(hhh]h)}(hJPointer to the private driver struct embedding this **struct** drm_bridge.h](h4Pointer to the private driver struct embedding this }(hjIdhhhNhNubj%)}(h **struct**h]hstruct}(hjQdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIdubh drm_bridge.}(hjIdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM@hjFdubah}(h]h ]h"]h$]h&]uh1jhj*dubeh}(h]h ]h"]h$]h&]uh1jmhjEdhMAhj@bubjn)}(h?``refcount`` reference count of users referencing this bridge. h](jt)}(h ``refcount``h]jz)}(hj|dh]hrefcount}(hj~dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzdubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMFhjvdubj)}(hhh]h)}(h1reference count of users referencing this bridge.h]h1reference count of users referencing this bridge.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMFhjdubah}(h]h ]h"]h$]h&]uh1jhjvdubeh}(h]h ]h"]h$]h&]uh1jmhjdhMFhj@bubjn)}(hC``driver_private`` pointer to the bridge driver's internal context h](jt)}(h``driver_private``h]jz)}(hjdh]hdriver_private}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMJhjdubj)}(hhh]h)}(h/pointer to the bridge driver's internal contexth]h1pointer to the bridge driver’s internal context}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMJhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjdhMJhj@bubjn)}(h6``ops`` bitmask of operations supported by the bridge h](jt)}(h``ops``h]jz)}(hjdh]hops}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMLhjdubj)}(hhh]h)}(h-bitmask of operations supported by the bridgeh]h-bitmask of operations supported by the bridge}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMLhjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjehMLhj@bubjn)}(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'eh]htype}(hj)ehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%eubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMQhj!eubj)}(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@ehhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMOhj=eubah}(h]h ]h"]h$]h&]uh1jhj!eubeh}(h]h ]h"]h$]h&]uh1jmhjdevice to be used as a parent for the HDMI Codec if either of }(hjhhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubh or }(hjhhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubh is set.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjghMhj@bubjn)}(h``hdmi_audio_max_i2s_playback_channels`` maximum number of playback I2S channels for the **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**. h](jt)}(h(``hdmi_audio_max_i2s_playback_channels``h]jz)}(hjFhh]h$hdmi_audio_max_i2s_playback_channels}(hjHhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDhubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj@hubj)}(hhh]h)}(hkmaximum number of playback I2S channels for the **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**.h](h0maximum number of playback I2S channels for the }(hj_hhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjghhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_hubh or }(hj_hhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjyhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_hubh.}(hj_hhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj\hubah}(h]h ]h"]h$]h&]uh1jhj@hubeh}(h]h ]h"]h$]h&]uh1jmhj[hhMhj@bubjn)}(h``hdmi_audio_i2s_formats`` supported I2S formats, optional. The default is to allow all formats supported by the corresponding I2S bus driver. This is only used for bridges setting **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**. h](jt)}(h``hdmi_audio_i2s_formats``h]jz)}(hjhh]hhdmi_audio_i2s_formats}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhubj)}(hhh]h)}(hsupported I2S formats, optional. The default is to allow all formats supported by the corresponding I2S bus driver. This is only used for bridges setting **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**.h](hsupported I2S formats, optional. The default is to allow all formats supported by the corresponding I2S bus driver. This is only used for bridges setting }(hjhhhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubh or }(hjhhhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhj@bubjn)}(h``hdmi_audio_spdif_playback`` set if this bridge has S/PDIF playback port for **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**. h](jt)}(h``hdmi_audio_spdif_playback``h]jz)}(hjih]hhdmi_audio_spdif_playback}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhubj)}(hhh]h)}(hkset if this bridge has S/PDIF playback port for **DRM_BRIDGE_OP_HDMI_AUDIO** or **DRM_BRIDGE_OP_DP_AUDIO**.h](h0set if this bridge has S/PDIF playback port for }(hjihhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hj#ihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubh or }(hjihhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hj5ihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjihMhj@bubjn)}(h``hdmi_audio_dai_port`` sound DAI port for either of **DRM_BRIDGE_OP_HDMI_AUDIO** and **DRM_BRIDGE_OP_DP_AUDIO**, -1 if it is not used. h](jt)}(h``hdmi_audio_dai_port``h]jz)}(hj`ih]hhdmi_audio_dai_port}(hjbihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^iubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjZiubj)}(hhh]h)}(hosound DAI port for either of **DRM_BRIDGE_OP_HDMI_AUDIO** and **DRM_BRIDGE_OP_DP_AUDIO**, -1 if it is not used.h](hsound DAI port for either of }(hjyihhhNhNubj%)}(h**DRM_BRIDGE_OP_HDMI_AUDIO**h]hDRM_BRIDGE_OP_HDMI_AUDIO}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyiubh and }(hjyihhhNhNubj%)}(h**DRM_BRIDGE_OP_DP_AUDIO**h]hDRM_BRIDGE_OP_DP_AUDIO}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyiubh, -1 if it is not used.}(hjyihhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjviubah}(h]h ]h"]h$]h&]uh1jhjZiubeh}(h]h ]h"]h$]h&]uh1jmhjuihMhj@bubjn)}(h>``hdmi_cec_adapter_name`` the name of the adapter to register h](jt)}(h``hdmi_cec_adapter_name``h]jz)}(hjih]hhdmi_cec_adapter_name}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjiubj)}(hhh]h)}(h#the name of the adapter to registerh]h#the name of the adapter to register}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjihMhj@bubjn)}(hS``hdmi_cec_available_las`` number of logical addresses, CEC_MAX_LOG_ADDRS if unset h](jt)}(h``hdmi_cec_available_las``h]jz)}(hjih]hhdmi_cec_available_las}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjiubj)}(hhh]h)}(h7number of logical addresses, CEC_MAX_LOG_ADDRS if unseth]h7number of logical addresses, CEC_MAX_LOG_ADDRS if unset}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj jhMhj jubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhj jhMhj@bubjn)}(h?``hpd_mutex`` Protects the **hpd_cb** and **hpd_data** fields. h](jt)}(h ``hpd_mutex``h]jz)}(hj0jh]h hpd_mutex}(hj2jhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.jubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj*jubj)}(hhh]h)}(h0Protects the **hpd_cb** and **hpd_data** fields.h](h Protects the }(hjIjhhhNhNubj%)}(h **hpd_cb**h]hhpd_cb}(hjQjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIjubh and }(hjIjhhhNhNubj%)}(h **hpd_data**h]hhpd_data}(hjcjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIjubh fields.}(hjIjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjEjhMhjFjubah}(h]h ]h"]h$]h&]uh1jhj*jubeh}(h]h ]h"]h$]h&]uh1jmhjEjhMhj@bubjn)}(hQ``hpd_cb`` Hot plug detection callback, registered with drm_bridge_hpd_enable(). h](jt)}(h ``hpd_cb``h]jz)}(hjjh]hhpd_cb}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjjubj)}(hhh]h)}(hEHot plug detection callback, registered with drm_bridge_hpd_enable().h]hEHot plug detection callback, registered with drm_bridge_hpd_enable().}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhj@bubjn)}(hO``hpd_data`` Private data passed to the Hot plug detection callback **hpd_cb**.h](jt)}(h ``hpd_data``h]jz)}(hjjh]hhpd_data}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjjubj)}(hhh]h)}(hBPrivate data passed to the Hot plug detection callback **hpd_cb**.h](h7Private data passed to the Hot plug detection callback }(hjjhhhNhNubj%)}(h **hpd_cb**h]hhpd_cb}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjjhMhj@bubeh}(h]h ]h"]h$]h&]uh1jhhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdevm_drm_bridge_alloc (C macro)c.devm_drm_bridge_allochNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hdevm_drm_bridge_alloch]j)}(hdevm_drm_bridge_alloch]j)}(hdevm_drm_bridge_alloch]j)}(hj,kh]hdevm_drm_bridge_alloc}(hj6khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2kubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.khhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhj*khhhjIkhMubah}(h]j%kah ](jjeh"]h$]h&]jj)jhuh1jhjIkhMhj'khhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj'khhhjIkhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjbkjjbkjjjuh1jhhhj0hNhNubh)}(h4``devm_drm_bridge_alloc (dev, type, member, funcs)``h]jz)}(hjhkh]h0devm_drm_bridge_alloc (dev, type, member, funcs)}(hjjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfkubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj0hhubjb=)}(h!Allocate and initialize a bridge h]h)}(h Allocate and initialize a bridgeh]h Allocate and initialize a bridge}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj~kubah}(h]h ]h"]h$]h&]uh1ja=hjkhMhj0hhubj)}(hX**Parameters** ``dev`` struct device of the bridge device ``type`` the type of the struct which contains struct :c:type:`drm_bridge` ``member`` the name of the :c:type:`drm_bridge` within **type** ``funcs`` callbacks for this bridge **Description** The reference count of the returned bridge is initialized to 1. This reference will be automatically dropped via devm (by calling drm_bridge_put()) when **dev** is removed. **Return** Pointer to new bridge, or ERR_PTR on failure.h](h)}(h**Parameters**h]j%)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubji)}(hhh](jn)}(h+``dev`` struct device of the bridge device h](jt)}(h``dev``h]jz)}(hjkh]hdev}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubj)}(hhh]h)}(h"struct device of the bridge deviceh]h"struct device of the bridge device}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjkubjn)}(hK``type`` the type of the struct which contains struct :c:type:`drm_bridge` h](jt)}(h``type``h]jz)}(hjkh]htype}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubj)}(hhh]h)}(hAthe type of the struct which contains struct :c:type:`drm_bridge`h](h-the type of the struct which contains struct }(hjlhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjlh]h drm_bridge}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhj lhMhjlubeh}(h]h ]h"]h$]h&]uh1hhj lhMhj lubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhj lhMhjkubjn)}(h@``member`` the name of the :c:type:`drm_bridge` within **type** h](jt)}(h ``member``h]jz)}(hjMlh]hmember}(hjOlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKlubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjGlubj)}(hhh]h)}(h4the name of the :c:type:`drm_bridge` within **type**h](hthe name of the }(hjflhhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjplh]h drm_bridge}(hjrlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjnlubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjblhMhjflubh within }(hjflhhhNhNubj%)}(h**type**h]htype}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjflubeh}(h]h ]h"]h$]h&]uh1hhjblhMhjclubah}(h]h ]h"]h$]h&]uh1jhjGlubeh}(h]h ]h"]h$]h&]uh1jmhjblhMhjkubjn)}(h$``funcs`` callbacks for this bridge h](jt)}(h ``funcs``h]jz)}(hjlh]hfuncs}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjlubj)}(hhh]h)}(hcallbacks for this bridgeh]hcallbacks for this bridge}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjkubeh}(h]h ]h"]h$]h&]uh1jhhjkubh)}(h**Description**h]j%)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubh)}(hThe reference count of the returned bridge is initialized to 1. This reference will be automatically dropped via devm (by calling drm_bridge_put()) when **dev** is removed.h](hThe reference count of the returned bridge is initialized to 1. This reference will be automatically dropped via devm (by calling drm_bridge_put()) when }(hjmhhhNhNubj%)}(h**dev**h]hdev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubh is removed.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubh)}(h **Return**h]j%)}(hj+mh]hReturn}(hj-mhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)mubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubh)}(h-Pointer to new bridge, or ERR_PTR on failure.h]h-Pointer to new bridge, or ERR_PTR on failure.}(hjAmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_bridge_get_current_state (C function)c.drm_bridge_get_current_statehNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hRstruct drm_bridge_state * drm_bridge_get_current_state (struct drm_bridge *bridge)h]j)}(hPstruct drm_bridge_state *drm_bridge_get_current_state(struct drm_bridge *bridge)h](j)}(hjh]hstruct}(hjpmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlmhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hj~mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlmhhhj}mhMubh)}(hhh]j)}(hdrm_bridge_stateh]hdrm_bridge_state}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j%)}jdrm_bridge_get_current_statesbc.drm_bridge_get_current_stateasbuh1hhjlmhhhj}mhMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlmhhhj}mhMubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlmhhhj}mhMubj)}(hdrm_bridge_get_current_stateh]j)}(hjmh]hdrm_bridge_get_current_state}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlmhhhj}mhMubj)}(h(struct drm_bridge *bridge)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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj nmodnameN classnameNjj)}j]jmc.drm_bridge_get_current_stateasbuh1hhjmubj)}(h h]h }(hj&nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hj4nhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hbridgeh]hbridge}(hjAnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubah}(h]h ]h"]h$]h&]jjuh1jhjlmhhhj}mhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhmhhhj}mhMubah}(h]jcmah ](jjeh"]h$]h&]jj)jhuh1jhj}mhMhjemhhubj)}(hhh]h)}(hGet the current bridge stateh]hGet the current bridge state}(hjknhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjhnhhubah}(h]h ]h"]h$]h&]uh1jhjemhhhj}mhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhj0hNhNubj)}(h**Parameters** ``struct drm_bridge *bridge`` bridge object **Description** This function must be called with the modeset lock held. The current bridge state, or NULL if there is none.h](h)}(h**Parameters**h]j%)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnubji)}(hhh]jn)}(h,``struct drm_bridge *bridge`` bridge object 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&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnubj)}(hhh]h)}(h bridge objecth]h bridge object}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhjnubah}(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&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnubh)}(h8This function must be called with the modeset lock held.h]h8This function must be called with the modeset lock held.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnubh)}(h3The current bridge state, or NULL if there is none.h]h3The current bridge state, or NULL if there is none.}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_bridge_get_next_bridge (C function)c.drm_bridge_get_next_bridgehNtauh1jxhj0hhhNhNubj)}(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;ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ohhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMubj)}(h h]h }(hjIohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ohhhjHohMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjZohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\omodnameN classnameNjj)}j]j%)}jdrm_bridge_get_next_bridgesbc.drm_bridge_get_next_bridgeasbuh1hhj7ohhhjHohMubj)}(h h]h }(hj{ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ohhhjHohMubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ohhhjHohMubj)}(hdrm_bridge_get_next_bridgeh]j)}(hjxoh]hdrm_bridge_get_next_bridge}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7ohhhjHohMubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]jvoc.drm_bridge_get_next_bridgeasbuh1hhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoubj)}(hbridgeh]hbridge}(hj phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubah}(h]h ]h"]h$]h&]jjuh1jhj7ohhhjHohMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3ohhhjHohMubah}(h]j.oah ](jjeh"]h$]h&]jj)jhuh1jhjHohMhj0ohhubj)}(hhh]h)}(h Get the next bridge in the chainh]h Get the next bridge in the chain}(hj6phhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhj3phhubah}(h]h ]h"]h$]h&]uh1jhj0ohhhjHohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNpjjNpjjjuh1jhhhj0hNhNubj)}(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%)}(hjXph]h Parameters}(hjZphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVpubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRpubji)}(hhh]jn)}(h,``struct drm_bridge *bridge`` bridge object h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjwph]hstruct drm_bridge *bridge}(hjyphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjupubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjqpubj)}(hhh]h)}(h bridge objecth]h bridge object}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjqpubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjnpubah}(h]h ]h"]h$]h&]uh1jhhjRpubh)}(h **Return**h]j%)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRpubh)}(hQthe next bridge in the chain after **bridge**, or NULL if **bridge** is the last.h](h#the next bridge in the chain after }(hjphhhNhNubj%)}(h **bridge**h]hbridge}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubh , or NULL if }(hjphhhNhNubj%)}(h **bridge**h]hbridge}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubh is the last.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMhjRpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_bridge_get_prev_bridge (C function)c.drm_bridge_get_prev_bridgehNtauh1jxhj0hhhNhNubj)}(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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM%ubj)}(h h]h }(hj)qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhj(qhM%ubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hj:qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:thM6hj;tubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhj:thM6hjtubah}(h]h ]h"]h$]h&]uh1jhhjtubh)}(h **Return**h]j%)}(hj`th]hReturn}(hjbthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^tubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM8hjtubh)}(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 }(hjvthhhNhNubj%)}(h **encoder**h]hencoder}(hj~thhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvtubh has no bridge attached to it.}(hjvthhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhM8hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_for_each_bridge_in_chain (C macro)c.drm_for_each_bridge_in_chainhNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hdrm_for_each_bridge_in_chainh]j)}(hdrm_for_each_bridge_in_chainh]j)}(hdrm_for_each_bridge_in_chainh]j)}(hjth]hdrm_for_each_bridge_in_chain}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjthhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMDubah}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjthMDubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jhjthMDhjthhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjthhhjthMDubeh}(h]h ](jmacroeh"]h$]h&]jjjjtjjtjjjuh1jhhhj0hNhNubh)}(h2``drm_for_each_bridge_in_chain (encoder, bridge)``h]jz)}(hjth]h.drm_for_each_bridge_in_chain (encoder, bridge)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMFhj0hhubjb=)}(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}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMDhjuubah}(h]h ]h"]h$]h&]uh1ja=hjuhMDhj0hhubj)}(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%)}(hj"uh]h Parameters}(hj$uhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj uubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMHhjuubji)}(hhh](jn)}(h.``encoder`` the encoder to iterate bridges on h](jt)}(h ``encoder``h]jz)}(hjAuh]hencoder}(hjCuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?uubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMEhj;uubj)}(hhh]h)}(h!the encoder to iterate bridges onh]h!the encoder to iterate bridges on}(hjZuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVuhMEhjWuubah}(h]h ]h"]h$]h&]uh1jhj;uubeh}(h]h ]h"]h$]h&]uh1jmhjVuhMEhj8uubjn)}(hU``bridge`` a bridge pointer updated to point to the current bridge at each iteration h](jt)}(h ``bridge``h]jz)}(hjzuh]hbridge}(hj|uhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxuubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMGhjtuubj)}(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}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMFhjuubah}(h]h ]h"]h$]h&]uh1jhjtuubeh}(h]h ]h"]h$]h&]uh1jmhjuhMGhj8uubeh}(h]h ]h"]h$]h&]uh1jhhjuubh)}(h**Description**h]j%)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMIhjuubh)}(hMIterate over all bridges present in the bridge chain attached to **encoder**.h](hAIterate over all bridges present in the bridge chain attached to }(hjuhhhNhNubj%)}(h **encoder**h]hencoder}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubh.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:182: ./include/drm/drm_bridge.hhMHhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_get (C function)c.drm_bridge_gethNtauh1jxhj0hhhNhNubj)}(hhh](j)}(h>struct drm_bridge * drm_bridge_get (struct drm_bridge *bridge)h]j)}(hyh]h Description}(hj@yhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)}(h*not*h]hnot}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j3>hj ubh7 be balanced with a drm_bridge_detach() in driver code.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(h **Return**h]j%)}(hjCh]hReturn}(hjEhhhNhNubah}(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.chMhjubh)}(h&Zero on success, error code on failureh]h&Zero on success, error code on failure}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_bridge_chain_mode_valid (C function)c.drm_bridge_chain_mode_validhNtauh1jxhj0hhhNhNubj)}(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)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMOubh)}(hhh]j)}(hdrm_mode_statush]hdrm_mode_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_bridge_chain_mode_validsbc.drm_bridge_chain_mode_validasbuh1hhjhhhjhMOubj)}(h h]h }(hjȂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMOubj)}(hdrm_bridge_chain_mode_validh]j)}(hjłh]hdrm_bridge_chain_mode_valid}(hjڂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjւubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMOubj)}(he(struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode)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_bridge_chain_mode_validasbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct drm_display_info *infoh](j)}(hjch]hconst}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hdrm_display_infoh]hdrm_display_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jÂc.drm_bridge_chain_mode_validasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjʃhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hinfoh]hinfo}(hj׃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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Âc.drm_bridge_chain_mode_validasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMOubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhjhMOhj}hhubj)}(hhh]h)}(h;validate the mode against all bridges in the encoder chain.h]h;validate the mode against all bridges in the encoder chain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``const struct drm_display_info *info`` display info against which the mode shall be validated ``const struct drm_display_mode *mode`` desired mode to be validated **Description** Calls :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. **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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMShjubji)}(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.chMQhjDŽubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjDŽubeh}(h]h ]h"]h$]h&]uh1jmhjhMQhjĄubjn)}(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)}(hjh]h#const struct drm_display_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMRhjubj)}(hhh]h)}(h6display info against which the mode shall be validatedh]h6display info against which the mode shall be validated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMRhjĄubjn)}(hE``const struct drm_display_mode *mode`` desired mode to be validated h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hj?h]h#const struct drm_display_mode *mode}(hjAhhhNhNubah}(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.chMShj9ubj)}(hhh]h)}(hdesired mode to be validatedh]hdesired mode to be validated}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMShjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThMShjĄ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&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMUhjubh)}(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 }(hjhhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_valid `h]jz)}(hjh]hdrm_bridge_funcs.mode_valid}(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:185: ./drivers/gpu/drm/drm_bridge.chMThjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMThjubh)}(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.chMXhjubh)}(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.}(hjڅhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMYhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM[hjubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_bridge_chain_mode_set (C function)c.drm_bridge_chain_mode_sethNtauh1jxhj0hhhNhNubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMyubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj>hMyubj)}(hdrm_bridge_chain_mode_seth]j)}(hdrm_bridge_chain_mode_seth]hdrm_bridge_chain_mode_set}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj>hMyubj)}(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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(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%)}jjSsbc.drm_bridge_chain_mode_setasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hbridgeh]hbridge}(hjƆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h#const struct drm_display_mode *modeh](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_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_bridge_chain_mode_setasbuh1hhjۆubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۆubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjۆubj)}(hmodeh]hmode}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۆubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h,const struct drm_display_mode *adjusted_modeh](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_display_modeh]hdrm_display_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_bridge_chain_mode_setasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj9)}(hj9h]h*}(hjχhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubj)}(h adjusted_modeh]h adjusted_mode}(hj܇hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(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)}(h6set proposed mode for all bridges in the encoder chainh]h6set proposed mode for all bridges in the encoder chain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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%)}(hj(h]h Parameters}(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.chM}hj"ubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjGh]hstruct drm_bridge *bridge}(hjIhhhNhNubah}(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{hjAubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(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>ubjn)}(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)}(hjh]h#const struct drm_display_mode *mode}(hjhhhNhNubah}(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.chM|hjzubj)}(hhh]h)}(h,desired mode to be set for the encoder chainh]h,desired mode to be set for the encoder chain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjhM|hj>ubjn)}(h```const struct drm_display_mode *adjusted_mode`` updated mode that works for this encoder chain h](jt)}(h0``const struct drm_display_mode *adjusted_mode``h]jz)}(hjh]h,const struct drm_display_mode *adjusted_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM}hjubj)}(hhh]h)}(h.updated mode that works for this encoder chainh]h.updated mode that works for this encoder chain}(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&]uh1jhhj"ubh)}(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:185: ./drivers/gpu/drm/drm_bridge.chMhj"ubh)}(hCalls :c:type:`drm_bridge_funcs.mode_set ` op for all the bridges in the encoder chain, starting from the first bridge to the last.h](hCalls }(hj hhhNhNubh)}(h6:c:type:`drm_bridge_funcs.mode_set `h]jz)}(hjh]hdrm_bridge_funcs.mode_set}(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:185: ./drivers/gpu/drm/drm_bridge.chM~hj ubhY op for all the bridges in the encoder chain, starting from the first bridge to the last.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hM~hj"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.chMhj"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}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_atomic_bridge_chain_disable (C function)!c.drm_atomic_bridge_chain_disablehNtauh1jxhj0hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_atomic_bridge_chain_disableh]j)}(hdrm_atomic_bridge_chain_disableh]hdrm_atomic_bridge_chain_disable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](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_bridgeh]h drm_bridge}(hjމhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۉubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb!c.drm_atomic_bridge_chain_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_atomic_state *stateh](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)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j!c.drm_atomic_bridge_chain_disableasbuh1hhj.ubj)}(h h]h }(hjnhhhNhNubah}(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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjxhhubj)}(hhh]h)}(h)disables all bridges in the encoder chainh]h)disables all bridges in the encoder chain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjˊjjˊjjjuh1jhhhj0hNhNubj)}(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Պh]h Parameters}(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.chMhjϊubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubjn)}(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}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjϊubh)}(h**Description**h]j%)}(hjhh]h Description}(hjjhhhNhNubah}(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.chMhjϊubh)}(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~hhhNhNubh)}(h<:c:type:`drm_bridge_funcs.atomic_disable `h]jz)}(hjh]hdrm_bridge_funcs.atomic_disable}(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:185: ./drivers/gpu/drm/drm_bridge.chMhj~ubh (falls back on }(hj~hhhNhNubh)}(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_funcsuh1hhjhMhj~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)}(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_funcsuh1hhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1hhjhMhjϊubh)}(h**Note**h]j%)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjϊ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.chMhjϊubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_atomic_bridge_chain_post_disable (C function)&c.drm_atomic_bridge_chain_post_disablehNtauh1jxhj0hhhNhNubj)}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhjGhMubj)}(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&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhjGhMubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(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%)}jj\sb&c.drm_atomic_bridge_chain_post_disableasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjŒhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(hbridgeh]hbridge}(hjόhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(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&c.drm_atomic_bridge_chain_post_disableasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhjGhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1hhhjGhMubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jhjGhMhj.hhubj)}(hhh]h)}(h:cleans up after disabling all bridges in the encoder chainh]h:cleans up after disabling all bridges in the encoder chain}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjGhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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_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 ` 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. **Example** Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E 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. **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjÍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h@``struct drm_atomic_state *state`` atomic state 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&]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}(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&]uh1jhhjubh)}(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:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(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 }(hj4hhhNhNubh)}(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.chMhj4ubh (falls back on }(hj4hhhNhNubh)}(h::c:type:`drm_bridge_funcs.post_disable `h]jz)}(hjbh]hdrm_bridge_funcs.post_disable}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhj[hMhj4ubh}) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing }(hj4hhhNhNubh)}(hL:c:type:`drm_encoder_helper_funcs.atomic_disable `h]jz)}(hjh]h'drm_encoder_helper_funcs.atomic_disable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj[hMhj4ubeh}(h]h ]h"]h$]h&]uh1hhj[hMhjubh)}(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 }(hjhhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh , then the }(hjhhhNhNubj%)}(h**post_disable**h]h post_disable}(hjŽhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhG for that bridge will be called before the previous one to reverse the }(hjhhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hjԎhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh calling direction.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(h **Example**h]j%)}(hjh]hExample}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(h@Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge Eh]h@Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(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 }(hjhhhNhNubj%)}(h**post_disable**h]h post_disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhB order would be, Bridge B, Bridge A, Bridge E, Bridge D, Bridge C.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(h**Note**h]j%)}(hj7h]hNote}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(h:the bridge passed should be the one closest to the encoderh]h:the bridge passed should be the one closest to the encoder}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_atomic_bridge_chain_pre_enable (C function)$c.drm_atomic_bridge_chain_pre_enablehNtauh1jxhj0hhhNhNubj)}(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&]uh1jhjxhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhM!ubj)}(h"drm_atomic_bridge_chain_pre_enableh]j)}(h"drm_atomic_bridge_chain_pre_enableh]h"drm_atomic_bridge_chain_pre_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhM!ubj)}(h;(struct drm_bridge *bridge, struct drm_atomic_state *state)h](j)}(hstruct drm_bridge *bridgeh](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_bridgeh]h drm_bridge}(hj׏hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԏubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjُmodnameN classnameNjj)}j]j%)}jjsb$c.drm_atomic_bridge_chain_pre_enableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_atomic_state *stateh](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)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j$c.drm_atomic_bridge_chain_pre_enableasbuh1hhj'ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(hj9h]h*}(hjuhhhNhNubah}(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&]jjuh1jhjxhhhjhM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhM!ubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjhM!hjqhhubj)}(hhh]h)}(h6prepares for enabling all bridges in the encoder chainh]h6prepares for enabling all bridges in the encoder chain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjĐjjĐjjjuh1jhhhj0hNhNubj)}(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. **Example** Bridge A ---> Bridge B ---> Bridge C ---> Bridge D ---> Bridge E 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. **Note** the bridge passed should be the one closest to the encoderh](h)}(h**Parameters**h]j%)}(hjΐh]h Parameters}(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.chM%hjȐubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM#hjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM#hjubjn)}(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.chM$hj ubj)}(hhh]h)}(hatomic state being committedh]hatomic state 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$hjubeh}(h]h ]h"]h$]h&]uh1jhhjȐubh)}(h**Description**h]j%)}(hjah]h Description}(hjchhhNhNubah}(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.chM&hjȐ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 }(hjwhhhNhNubh)}(h?:c:type:`drm_bridge_funcs.atomic_pre_enable `h]jz)}(hjh]h"drm_bridge_funcs.atomic_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:185: ./drivers/gpu/drm/drm_bridge.chM%hjwubh (falls back on }(hjwhhhNhNubh)}(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_funcsuh1hhjhM%hjwubh{) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling }(hjwhhhNhNubh)}(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_funcsuh1hhjhM%hjwubeh}(h]h ]h"]h$]h&]uh1hhjhM%hjȐ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 }(hjhhhNhNubj%)}(h**pre_enable_prev_first**h]hpre_enable_prev_first}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhZ, then the pre_enable for the prev bridge will be called before pre_enable of this bridge.}(hjhhhNhNubeh}(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)}(h **Example**h]j%)}(hjh]hExample}(hjhhhNhNubah}(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.chM-hjȐ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.chM.hjȐ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 }(hj3hhhNhNubj%)}(h**pre_enable**h]h pre_enable}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubhB order would be, Bridge C, Bridge D, Bridge E, Bridge A, Bridge B.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM0hjȐubh)}(h**Note**h]j%)}(hjVh]hNote}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM4hjȐ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}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM5hjȐubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_atomic_bridge_chain_enable (C function) c.drm_atomic_bridge_chain_enablehNtauh1jxhj0hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMpubj)}(hdrm_atomic_bridge_chain_enableh]j)}(hdrm_atomic_bridge_chain_enableh]hdrm_atomic_bridge_chain_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMpubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԒubh)}(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%)}jjsb c.drm_atomic_bridge_chain_enableasbuh1hhjԒubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԒubj9)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjԒubj)}(hbridgeh]hbridge}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԒubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjВubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j c.drm_atomic_bridge_chain_enableasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjВubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMpubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMphjhhubj)}(hhh]h)}(h(enables all bridges in the encoder chainh]h(enables all bridges in the encoder chain}(hj˓hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMphjȓhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMthjubji)}(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}(hjhhhNhNubah}(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.chMqhjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMqhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMqhjubjn)}(h@``struct drm_atomic_state *state`` atomic state being committed h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjEh]hstruct drm_atomic_state *state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMrhj?ubj)}(hhh]h)}(hatomic state being committedh]hatomic state being committed}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMrhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMrhjubeh}(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&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMthjubh)}(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 }(hjhhhNhNubh)}(h;:c:type:`drm_bridge_funcs.atomic_enable `h]jz)}(hjh]hdrm_bridge_funcs.atomic_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:185: ./drivers/gpu/drm/drm_bridge.chMshjubh (falls back on }(hjhhhNhNubh)}(h4:c:type:`drm_bridge_funcs.enable `h]jz)}(hjĔh]hdrm_bridge_funcs.enable}(hjƔhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj”ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMshjubh}) op for all the bridges in the encoder chain, starting from the first bridge to the last. These are called after completing }(hjhhhNhNubh)}(hK:c:type:`drm_encoder_helper_funcs.atomic_enable `h]jz)}(hjh]h&drm_encoder_helper_funcs.atomic_enable}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhMshjubeh}(h]h ]h"]h$]h&]uh1hhjhMshjubh)}(h**Note**h]j%)}(hj h]hNote}(hjhhhNhNubah}(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.chMxhjubh)}(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.chMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_atomic_bridge_chain_check (C function)c.drm_atomic_bridge_chain_checkhNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hint drm_atomic_bridge_chain_check (struct drm_bridge *bridge, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state)h]j)}(hint drm_atomic_bridge_chain_check(struct drm_bridge *bridge, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state)h](j)}(hinth]hint}(hjQhhhNhNubah}(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 }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj_hMubj)}(hdrm_atomic_bridge_chain_checkh]j)}(hdrm_atomic_bridge_chain_checkh]hdrm_atomic_bridge_chain_check}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhj_hMubj)}(hf(struct drm_bridge *bridge, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_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 reftargetjmodnameN classnameNjj)}j]j%)}jjtsbc.drm_atomic_bridge_chain_checkasbuh1hhjubj)}(h h]h }(hj̕hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjڕhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(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 }(hj hhhNhNubah}(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_bridge_chain_checkasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h crtc_stateh]h crtc_state}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&struct drm_connector_state *conn_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_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_bridge_chain_checkasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(h conn_stateh]h conn_state}(hjǖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjMhhhj_hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjIhhhj_hMubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jhj_hMhjFhhubj)}(hhh]h)}(h&Do an atomic check on the bridge chainh]h&Do an atomic check on the bridge chain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj0hNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_crtc_state *crtc_state`` new CRTC state ``struct drm_connector_state *conn_state`` new connector state **Description** First 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\(\) ` **Return** 0 on success, a 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&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj ubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hj2h]hstruct drm_bridge *bridge}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(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}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhj)ubjn)}(h5``struct drm_crtc_state *crtc_state`` new CRTC state h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjkh]h!struct drm_crtc_state *crtc_state}(hjmhhhNhNubah}(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.chMhjeubj)}(hhh]h)}(hnew CRTC stateh]hnew CRTC state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubj)}(hhh]h)}(hnew connector stateh]hnew connector state}(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%)}(hjߗh]h Description}(hjhhhNhNubah}(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.chMhj ubh)}(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 }(hjhhhNhNubh)}(h>:c:type:`drm_bridge_funcs.atomic_check\(\) `h]jz)}(hjh]hdrm_bridge_funcs.atomic_check()}(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:185: ./drivers/gpu/drm/drm_bridge.chMhjubh (falls back on }(hjhhhNhNubh)}(h<:c:type:`drm_bridge_funcs.mode_fixup\(\) `h]jz)}(hj#h]hdrm_bridge_funcs.mode_fixup()}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhMhjubh{) op for all the bridges in the encoder chain, starting from the last bridge to the first. These are called before calling }(hjhhhNhNubh)}(hN:c:type:`drm_encoder_helper_funcs.atomic_check\(\) `h]jz)}(hjFh]h'drm_encoder_helper_funcs.atomic_check()}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubh)}(h **Return**h]j%)}(hjkh]hReturn}(hjmhhhNhNubah}(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.chMhj ubh)}(h.0 on success, a negative error code on failureh]h.0 on success, a negative error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_bridge_detect (C function)c.drm_bridge_detecthNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hhenum drm_connector_status drm_bridge_detect (struct drm_bridge *bridge, struct drm_connector *connector)h]j)}(hgenum drm_connector_status drm_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hjϘhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̘ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjјmodnameN classnameNjj)}j]j%)}jdrm_bridge_detectsbc.drm_bridge_detectasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_bridge_detecth]j)}(hjh]hdrm_bridge_detect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h<(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hstruct drm_bridge *bridgeh](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_bridgeh]h drm_bridge}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]jc.drm_bridge_detectasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjthhhNhNubah}(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 }(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_bridge_detectasbuh1hhjubj)}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h2check if anything is attached to the bridge outputh]h2check if anything is attached to the bridge output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhj0hNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure ``struct drm_connector *connector`` *undescribed* **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%)}(hj0h]h Parameters}(hj2hhhNhNubah}(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.chMhj*ubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjOh]hstruct drm_bridge *bridge}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjIubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjFubjn)}(h2``struct drm_connector *connector`` *undescribed* 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chKhjubj)}(hhh]h)}(h *undescribed*h]j4>)}(hjh]h undescribed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3>hjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjFubeh}(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.chKhj*ubh)}(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 }(hjhhhNhNubh)}(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_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh\ for the bridge and return the connection status. Otherwise return connector_status_unknown.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj*ubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj*ubh)}(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,hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_bridge_get_modes (C function)c.drm_bridge_get_modeshNtauh1jxhj0hhhNhNubj)}(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}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhha/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&]uh1jhjWhhhjihMubj)}(hdrm_bridge_get_modesh]j)}(hdrm_bridge_get_modesh]hdrm_bridge_get_modes}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjihMubj)}(h<(struct drm_bridge *bridge, struct drm_connector *connector)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%)}jj~sbc.drm_bridge_get_modesasbuh1hhjubj)}(h h]h }(hj֛hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(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&]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&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]jқc.drm_bridge_get_modesasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjahhhNhNubah}(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)}(hBfill all modes currently valid for the sink into the **connector**h](h5fill all modes currently valid for the sink into the }(hjhhhNhNubj%)}(h **connector**h]h connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubji)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjԜubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjќubjn)}(hE``struct drm_connector *connector`` the connector to fill with modes 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj ubj)}(hhh]h)}(h the connector to fill with modesh]h the connector to fill with modes}(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%)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(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 }(hjdhhhNhNubh)}(h7:c:type:`drm_bridge_funcs.get_modes `h]jz)}(hjnh]hdrm_bridge_funcs.get_modes}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjlubah}(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.chMhjdubhe to fill the connector with all valid modes and return the number of modes added. Otherwise return 0.}(hjdhhhNhNubeh}(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&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(h+The number of modes added to the connector.h]h+The number of modes added to the connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_bridge_edid_read (C function)c.drm_bridge_edid_readhNtauh1jxhj0hhhNhNubj)}(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}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٝhhhjhMubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٝhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٝhhhjhMubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_bridge_edid_readsbc.drm_bridge_edid_readasbuh1hhjٝhhhjhMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٝhhhjhMubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjٝhhhjhMubj)}(hdrm_bridge_edid_readh]j)}(hj5h]hdrm_bridge_edid_read}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhjٝhhhjhMubj)}(h<(struct drm_bridge *bridge, struct drm_connector *connector)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j3c.drm_bridge_edid_readasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubj)}(hbridgeh]hbridge}(hjɞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(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]j3c.drm_bridge_edid_readasbuh1hhjޞ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&]noemphjjuh1jhjjubeh}(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+read the EDID data of the connected displayh]h+read the EDID data of the connected display}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jhjҝhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1jhhhj0hNhNubj)}(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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hC``struct drm_connector *connector`` the connector to read 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjןubj)}(hhh]h)}(hthe connector to read EDID forh]hthe connector to read EDID for}(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&]uh1jhhjubh)}(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:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(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.hhhNhNubh)}(h7:c:type:`drm_bridge_funcs.edid_read `h]jz)}(hj8h]hdrm_bridge_funcs.edid_read}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(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.ubh6 to get the EDID and return it. Otherwise return NULL.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMhjubh)}(h **Return**h]j%)}(hjbh]hReturn}(hjdhhhNhNubah}(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.chMhjubh)}(h1The retrieved EDID on success, or NULL otherwise.h]h1The retrieved EDID on success, or NULL otherwise.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_bridge_hpd_enable (C function)c.drm_bridge_hpd_enablehNtauh1jxhj0hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_bridge_hpd_enableh]j)}(hdrm_bridge_hpd_enableh]hdrm_bridge_hpd_enable}(hjȠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĠubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(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%)}jjʠsbc.drm_bridge_hpd_enableasbuh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjܠubj)}(h8void (*cb)(void *data, enum drm_connector_status status)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(h(h]h(}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj)}(hcbh]hcb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(h)h]h)}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj9)}(hjth]h(}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjġhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(hj9h]h*}(hjҡhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj)}(hdatah]hdata}(hjߡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(h,h]h,}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]jc.drm_bridge_hpd_enableasbuh1hhjRubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hstatush]hstatus}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(hjh]h)}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjܠubj)}(h void *datah](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(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 hot plug detection for the bridgeh]h(enable hot plug detection for the bridge}(hj̢hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjɢhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubji)}(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}(hjhhhNhNubah}(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.chMhjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjubjn)}(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)}(hjFh]h8void (*cb)(void *data, enum drm_connector_status status)}(hjHhhhNhNubah}(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.chMhj@ubj)}(hhh]h)}(hhot-plug detection callbackh]hhot-plug detection callback}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjubjn)}(hD``void *data`` data to be passed to the hot-plug detection callback h](jt)}(h``void *data``h]jz)}(hjh]h void *data}(hjhhhNhNubah}(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.chMhjyubj)}(hhh]h)}(h4data to be passed to the hot-plug detection callbackh]h4data to be passed to the hot-plug detection callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(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&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(hXOCall :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().h](hCall }(hjУhhhNhNubh)}(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&]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' if implemented and register the given }(hjУhhhNhNubj%)}(h**cb**h]hcb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjУubh and }(hjУhhhNhNubj%)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjУubh4 as hot plug notification callback. From now on the }(hjУhhhNhNubj%)}(h**cb**h]hcb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjУubh will be called with }(hjУhhhNhNubj%)}(h**data**h]hdata}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjУubh when an output status change is detected by the bridge, until hot plug notification gets disabled with drm_bridge_hpd_disable().}(hjУhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_bridge_hpd_disable (C function)c.drm_bridge_hpd_disablehNtauh1jxhj0hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM;ubj)}(hdrm_bridge_hpd_disableh]j)}(hdrm_bridge_hpd_disableh]hdrm_bridge_hpd_disable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM;ubj)}(h(struct drm_bridge *bridge)h]j)}(hstruct drm_bridge *bridgeh](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_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_bridge_hpd_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(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]j{ah ](jjeh"]h$]h&]jj)jhuh1jhjhM;hj}hhubj)}(hhh]h)}(h)disable hot plug detection for the bridgeh]h)disable hot plug detection for the bridge}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM;hjEhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhM;ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhj0hNhNubj)}(hX**Parameters** ``struct drm_bridge *bridge`` bridge control structure **Description** Call :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. 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%)}(hjjh]h Parameters}(hjlhhhNhNubah}(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.chM?hjdubji)}(hhh]jn)}(h7``struct drm_bridge *bridge`` bridge control structure 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM<hjubj)}(hhh]h)}(hbridge control structureh]hbridge control 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&]uh1jhhjdubh)}(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.chM>hjdubh)}(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 }(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_funcsuh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM=hjڥubh 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.}(hjڥhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM=hjdubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMBhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_bridge_hpd_notify (C function)c.drm_bridge_hpd_notifyhNtauh1jxhj0hhhNhNubj)}(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;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMVubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhjIhMVubj)}(hdrm_bridge_hpd_notifyh]j)}(hdrm_bridge_hpd_notifyh]hdrm_bridge_hpd_notify}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhjIhMVubj)}(h=(struct drm_bridge *bridge, enum drm_connector_status status)h](j)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(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%)}jj^sbc.drm_bridge_hpd_notifyasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj9)}(hj9h]h*}(hjĦhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtubj)}(hbridgeh]hbridge}(hjѦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(h enum drm_connector_status statush](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_bridge_hpd_notifyasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstatush]hstatus}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhjIhMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3hhhjIhMVubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jhjIhMVhj0hhubj)}(hhh]h)}(h notify hot plug detection eventsh]h notify hot plug detection events}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMVhj[hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjIhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhj0hNhNubj)}(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%)}(hjh]h Parameters}(hjhhhNhNubah}(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.chMZhjzubji)}(hhh](jn)}(h7``struct drm_bridge *bridge`` bridge control structure 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMWhjubj)}(hhh]h)}(hbridge control structureh]hbridge control structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMWhjubjn)}(h>``enum drm_connector_status status`` output connection status h](jt)}(h$``enum drm_connector_status status``h]jz)}(hjاh]h enum drm_connector_status status}(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.chMXhjҧubj)}(hhh]h)}(houtput connection statush]houtput connection status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjҧubeh}(h]h ]h"]h$]h&]uh1jmhjhMXhjubeh}(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&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMZhjzubh)}(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().}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMYhjzubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chM]hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jof_drm_find_bridge (C function)c.of_drm_find_bridgehNtauh1jxhj0hhhNhNubj)}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMlubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthMlubh)}(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%)}jof_drm_find_bridgesbc.of_drm_find_bridgeasbuh1hhjchhhjthMlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthMlubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjchhhjthMlubj)}(hof_drm_find_bridgeh]j)}(hjh]hof_drm_find_bridge}(hjƨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¨ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjthMlubj)}(h(struct device_node *np)h]j)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.of_drm_find_bridgeasbuh1hhjݨubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݨubj9)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjݨubj)}(hnph]hnp}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݨubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj٨ubah}(h]h ]h"]h$]h&]jjuh1jhjchhhjthMlubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhjthMlubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhjthMlhj\hhubj)}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMlhj_hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjthMlubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhj0hNhNubj)}(h{**Parameters** ``struct device_node *np`` device node **Return** drm_bridge control struct on success, NULL on failureh](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMphj~ubji)}(hhh]jn)}(h'``struct device_node *np`` device 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&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMohjubj)}(hhh]h)}(h device nodeh]h device node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMohjubah}(h]h ]h"]h$]h&]uh1jhhj~ubh)}(h **Return**h]j%)}(hjީh]hReturn}(hjhhhNhNubah}(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.chMqhj~ubh)}(h5drm_bridge control struct on success, NULL on failureh]h5drm_bridge control struct on success, NULL on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMqhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j devm_drm_put_bridge (C function)c.devm_drm_put_bridgehNtauh1jxhj0hhhNhNubj)}(hhh](j)}(hHvoid devm_drm_put_bridge (struct device *dev, struct drm_bridge *bridge)h]j)}(hGvoid devm_drm_put_bridge(struct device *dev, struct drm_bridge *bridge)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj1hMubj)e}(hdevm_drm_put_bridgeh]j)}(hdevm_drm_put_bridgeh]hdevm_drm_put_bridge}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj1hMubj)}(h/(struct device *dev, struct drm_bridge *bridge)h](j)}(hstruct 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)}(hdeviceh]hdevice}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjFsbc.devm_drm_put_bridgeasbuh1hhj\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&]noemphjjuh1jhjXubj)}(hstruct drm_bridge *bridgeh](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_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.devm_drm_put_bridgeasbuh1hhjΪubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΪubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjΪubj)}(hbridgeh]hbridge}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΪubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj1hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj1hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj1hMhjhhubj)}(hhh]h)}(h,Release a bridge reference obtained via devmh]h,Release a bridge reference obtained via devm}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjPhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhj0hNhNubj)}(hX**Parameters** ``struct device *dev`` device that got the bridge via devm ``struct drm_bridge *bridge`` pointer to a struct drm_bridge obtained via devm **Description** Same as drm_bridge_put() for bridge pointers obtained via devm functions such as devm_drm_bridge_alloc(). This function is a temporary workaround and MUST NOT be used. Manual handling of bridge lifetime is inherently unsafe.h](h)}(h**Parameters**h]j%)}(hjuh]h Parameters}(hjwhhhNhNubah}(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.chMhjoubji)}(hhh](jn)}(h;``struct device *dev`` device that got the bridge via devm h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjubj)}(hhh]h)}(h#device that got the bridge via devmh]h#device that got the bridge via devm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hO``struct drm_bridge *bridge`` pointer to a struct drm_bridge obtained via devm 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)}(h0pointer to a struct drm_bridge obtained via devmh]h0pointer to a struct drm_bridge obtained via devm}(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&]uh1jhhjoubh)}(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:185: ./drivers/gpu/drm/drm_bridge.chMhjoubh)}(hiSame as drm_bridge_put() for bridge pointers obtained via devm functions such as devm_drm_bridge_alloc().h]hiSame as drm_bridge_put() for bridge pointers obtained via devm functions such as devm_drm_bridge_alloc().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:185: ./drivers/gpu/drm/drm_bridge.chMhjoubh)}(hvThis function is a temporary workaround and MUST NOT be used. Manual handling of bridge lifetime is inherently unsafe.h]hvThis function is a temporary workaround and MUST NOT be used. Manual handling of bridge lifetime is inherently unsafe.}(hj-hhhNhNubah}(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&]uh1jhj0hhhNhNubeh}(h]bridge-helper-referenceah ]h"]bridge helper referenceah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(hMIPI-DSI bridge operationh]hMIPI-DSI bridge operation}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhhhhhKubh)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjKhhubh)}(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 }(hjkhhhNhNubjz)}(h!``MIPI_DSI_CLOCK_NON_CONTINUOUS``h]hMIPI_DSI_CLOCK_NON_CONTINUOUS}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjKhhubh)}(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 }(hjhhhNhNubh)}(h:c:type:`pre_enable_prev_first`h]jz)}(hjh]hpre_enable_prev_first}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(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.chKhjubhd flag to request the pre_enable (and post_disable) order to be altered to enable the DSI host first.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjKhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjKhhubh)}(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 }(hjͬhhhNhNubh)}(h:c:type:`post_disable`h]jz)}(hj׬h]h post_disable}(hj٬hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjլubah}(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.chKhjͬubh* operation should disable the PHY. If the }(hjͬhhhNhNubh)}(h:c:type:`pre_enable_prev_first`h]jz)}(hjh]hpre_enable_prev_first}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpre_enable_prev_firstuh1hhjhKhjͬubh1 flag is set, then the DSI peripheral’s bridge }(hjͬhhhNhNubh)}(h:c:type:`post_disable`h]jz)}(hjh]h post_disable}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj post_disableuh1hhjhKhjͬubh5 will be called before the DSI host’s post_disable.}(hjͬhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjKhhubh)}(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 }(hjEhhhNhNubh)}(h:c:type:`host_transfer`h]jz)}(hjOh]h host_transfer}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMubah}(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.chKhjEubh 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.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhKhjKhhubh)}(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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:191: ./drivers/gpu/drm/drm_bridge.chKhjKhhubeh}(h]mipi-dsi-bridge-operationah ]h"]mipi-dsi bridge operationah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(h!Bridge Connector Helper Referenceh]h!Bridge Connector Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_bridge_connector_init (C function)c.drm_bridge_connector_inithNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMnubj)}(h h]h }(hjƭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjŭhMnubh)}(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%)}jdrm_bridge_connector_initsbc.drm_bridge_connector_initasbuh1hhjhhhjŭhMnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjŭhMnubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjŭhMnubj)}(hdrm_bridge_connector_inith]j)}(hjh]hdrm_bridge_connector_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjŭhMnubj)}(h5(struct drm_device *drm, struct drm_encoder *encoder)h](j)}(hstruct drm_device *drmh](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_deviceh]h drm_device}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jc.drm_bridge_connector_initasbuh1hhj.ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hj|hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubj)}(hdrmh]hdrm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(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 reftargetj®modnameN classnameNjj)}j]jc.drm_bridge_connector_initasbuh1hhjubj)}(h h]h }(hjޮhhhNhNubah}(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&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjŭhMnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjŭhMnubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjŭhMnhjhhubj)}(hhh]h)}(h-Initialise a connector for a chain of bridgesh]h-Initialise a connector for a chain of bridges}(hj#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.chMnhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjŭhMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhjhNhNubj)}(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%)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMrhj?ubji)}(hhh](jn)}(h*``struct drm_device *drm`` the DRM device h](jt)}(h``struct drm_device *drm``h]jz)}(hjdh]hstruct drm_device *drm}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMohj^ubj)}(hhh]h)}(hthe DRM deviceh]hthe DRM device}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMohjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhMohj[ubjn)}(hJ``struct drm_encoder *encoder`` the encoder where the bridge chain starts 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&]uh1jshs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMphjubj)}(hhh]h)}(h)the encoder where the bridge chain startsh]h)the encoder where the bridge chain starts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMphj[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&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMrhj?ubh)}(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 }(hjhhhNhNubh)}(h:c:type:`drm_bridge_connector`h]jz)}(hjh]hdrm_bridge_connector}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(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.chMqhjubh with the }(hjhhhNhNubj%)}(h**drm**h]hdrm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhP device. The connector is associated with a chain of bridges that starts at the }(hjhhhNhNubj%)}(h **encoder**h]hencoder}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh@. All bridges in the chain shall report bridge operation flags (}(hjhhhNhNubh)}(h&:c:type:`drm_bridge->ops `h]jz)}(hj@h]hdrm_bridge->ops}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhMqhjubh) and bridge output type (}(hjhhhNhNubh)}(h':c:type:`drm_bridge->type `h]jz)}(hjch]hdrm_bridge->type}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_bridgeuh1hhjhMqhjubh8), and none of them may create a DRM connector directly.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMqhj?ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:198: ./drivers/gpu/drm/display/drm_bridge_connector.chMwhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]!bridge-connector-helper-referenceah ]h"]!bridge connector helper referenceah$]h&]uh1hhjj&hhhhhKubh)}(hhh](h)}(hPanel-Bridge Helper Referenceh]hPanel-Bridge Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_bridge_is_panel (C function)c.drm_bridge_is_panelhNtauh1jxhjhhhNhNubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΰhhhj߰hKubj)}(hdrm_bridge_is_panelh]j)}(hdrm_bridge_is_panelh]hdrm_bridge_is_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjΰhhhj߰hKubj)}(h!(const struct drm_bridge *bridge)h]j)}(hconst struct drm_bridge *bridgeh](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)}(h drm_bridgeh]h drm_bridge}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jjsbc.drm_bridge_is_panelasbuh1hhj ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjǰhhhj߰hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjıjjıjjjuh1jhhhjhNhNubj)}(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)}(hjh]hconst struct drm_bridge *bridge}(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.chKhjubj)}(hhh]h)}(hThe drm_bridge to be checked.h]hThe drm_bridge to be 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&]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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_panel_bridge_add (C function)c.drm_panel_bridge_addhNtauh1jxhjhhhNhNubj)}(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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhc/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&]uh1jhjihhhjzhKubh)}(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_addsbc.drm_panel_bridge_addasbuh1hhjihhhjzhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjzhKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjihhhjzhKubj)}(hdrm_panel_bridge_addh]j)}(hjh]hdrm_panel_bridge_add}(hj̲hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȲubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhjzhKubj)}(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]jc.drm_panel_bridge_addasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj߲ubah}(h]h ]h"]h$]h&]jjuh1jhjihhhjzhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjehhhjzhKubah}(h]j`ah ](jjeh"]h$]h&]jj)jhuh1jhjzhKhjbhhubj)}(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 }(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]jc.drm_panel_bridge_addasbj drm_bridgeuh1hhj߰hKhjhubh and }(hjhhhhNhNubh)}(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߰hKhjhubh0 that just calls the appropriate functions from }(hjhhhhNhNubh)}(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 refexplicitrefwarnjjj drm_paneluh1hhj߰hKhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhjehhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjzhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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.chKhjubji)}(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)}(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.chKhjubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hj0hhhNhNubah}(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%)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhjubh)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhjubh)}(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 }(hjwhhhNhNubj%)}(h**panel->connector_type**h]hpanel->connector_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubh, 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).}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chKhjubh)}(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.}(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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_panel_bridge_add_typed (C function)c.drm_panel_bridge_add_typedhNtauh1jxhjhhhNhNubj)}(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}(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_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ô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)}(hdrm_panel_bridge_add_typedh]j)}(hjh]hdrm_panel_bridge_add_typed}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjôhhhjԴhMubj)}(h-(struct drm_panel *panel, u32 connector_type)h](j)}(hstruct drm_panel *panelh](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_panelh]h drm_panel}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]jc.drm_panel_bridge_add_typedasbuh1hhj=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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(hu32 connector_typeh](h)}(hhh]j)}(hu32h]hu32}(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 }(hjҵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hconnector_typeh]hconnector_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(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[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)}(hjh]h drm_bridge}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(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)}(hj<h]h drm_connector}(hj>hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj0j 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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjԴhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jhhhjhNhNubj)}(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%)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjqubji)}(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)}(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.chMhjubj)}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hA``u32 connector_type`` The connector type (DRM_MODE_CONNECTOR_*) h](jt)}(h``u32 connector_type``h]jz)}(hj϶h]hu32 connector_type}(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)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&]uh1jhjɶubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjqubh)}(h**Description**h]j%)}(hj h]h Description}(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:204: ./drivers/gpu/drm/bridge/panel.chMhjqubh)}(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}(hj(hhhNhNubah}(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.chMhjqubh)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_panel_bridge_remove (C function)c.drm_panel_bridge_removehNtauh1jxhjhhhNhNubj)}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hM7ubj)}(hdrm_panel_bridge_removeh]j)}(hdrm_panel_bridge_removeh]hdrm_panel_bridge_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhj~hM7ubj)}(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}(hj˷hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȷubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjͷmodnameN classnameNjj)}j]j%)}jjsbc.drm_panel_bridge_removeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjlhhhj~hM7ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhj~hM7ubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jhj~hM7hjehhubj)}(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().}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM7hj-hhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hM7ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(hK**Parameters** ``struct drm_bridge *bridge`` The drm_bridge being freed.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:204: ./drivers/gpu/drm/bridge/panel.chM;hjLubji)}(hhh]jn)}(h9``struct drm_bridge *bridge`` The drm_bridge being freed.h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjqh]hstruct drm_bridge *bridge}(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.chM=hjkubj)}(hhh]h)}(hThe drm_bridge being freed.h]hThe drm_bridge being freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chM:hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhM=hjhubah}(h]h ]h"]h$]h&]uh1jhhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_panel_bridge_set_orientation (C function)"c.drm_panel_bridge_set_orientationhNtauh1jxhjhhhNhNubj)}(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}(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.chMQubj)}(h h]h }(hjڸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǸhhhjٸhMQubj)}(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&]jjuh1jhjǸhhhjٸhMQubj)}(h<(struct drm_connector *connector, struct drm_bridge *bridge)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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}jjsb"c.drm_panel_bridge_set_orientationasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_bridge *bridgeh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jB"c.drm_panel_bridge_set_orientationasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjĹhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(hbridgeh]hbridge}(hjѹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(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^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.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjٸhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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.chMUhjubji)}(hhh](jn)}(hO``struct drm_connector *connector`` The connector to be set panel orientation. 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&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMThj6ubj)}(hhh]h)}(h*The connector to be set panel orientation.h]h*The connector to be set panel orientation.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMThjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhMThj3ubjn)}(hP``struct drm_bridge *bridge`` The drm_bridge to be transformed to panel bridge. h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjuh]hstruct drm_bridge *bridge}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMUhjoubj)}(hhh]h)}(h1The drm_bridge to be transformed to panel bridge.h]h1The drm_bridge to be transformed to panel bridge.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhMUhj3ubeh}(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.chMWhjubh)}(h0Returns 0 on success, negative errno on failure.h]h0Returns 0 on success, negative errno on failure.}(hjƺhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&devm_drm_panel_bridge_add (C function)c.devm_drm_panel_bridge_addhNtauh1jxhjhhhNhNubj)}(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.chMpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMpubh)}(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_addsbc.devm_drm_panel_bridge_addasbuh1hhjhhhjhMpubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMpubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMpubj)}(hdevm_drm_panel_bridge_addh]j)}(hj2h]hdevm_drm_panel_bridge_add}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMpubj)}(h-(struct device *dev, struct drm_panel *panel)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0c.devm_drm_panel_bridge_addasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hdevh]hdev}(hjƻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hstruct drm_panel *panelh](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_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0c.devm_drm_panel_bridge_addasbuh1hhjۻ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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۻubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMpubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMpubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMphjhhubj)}(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 }(hj`hhhNhNubh)}(h:c:type:`drm_bridge`h]jz)}(hjjh]h drm_bridge}(hjlhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j0c.devm_drm_panel_bridge_addasbj 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`ubh0 that just calls the appropriate functions from }(hj`hhhNhNubh)}(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 refexplicitrefwarnjjj 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.chMphj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMthjubji)}(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&]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)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMrhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMrhjubjn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hjHh]hstruct drm_panel *panel}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMshjBubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMshj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj]hMshjubeh}(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.chMuhjubh)}(hThis is the managed version of drm_panel_bridge_add() which automatically calls drm_panel_bridge_remove() when **dev** is unbound.Gh](hoThis is the 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 unbound.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMthjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,devm_drm_panel_bridge_add_typed (C function)!c.devm_drm_panel_bridge_add_typedhNtauh1jxhjhhhNhNubj)}(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}(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 }(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%)}jdevm_drm_panel_bridge_add_typedsb!c.devm_drm_panel_bridge_add_typedasbuh1hhjֽhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֽhhhjhMubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjֽhhhjhMubj)}(hdevm_drm_panel_bridge_add_typedh]j)}(hjh]hdevm_drm_panel_bridge_add_typed}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjֽhhhjhMubj)}(hA(struct device *dev, struct drm_panel *panel, u32 connector_type)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(hdeviceh]hdevice}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j!c.devm_drm_panel_bridge_add_typedasbuh1hhjPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(hstruct drm_panel *panelh](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_panelh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߾ubah}(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&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubj)}(hu32 connector_typeh](h)}(hhh]j)}(hu32h]hu32}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j!c.devm_drm_panel_bridge_add_typedasbuh1hhj0ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hconnector_typeh]hconnector_type}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLubeh}(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)}(hcCreates a managed :c:type:`drm_bridge` and :c:type:`drm_connector` with an explicit connector type.h](hCreates a managed }(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 refexplicitrefwarnjj)}j]j!c.devm_drm_panel_bridge_add_typedasbj drm_bridgeuh1hhj߰hKhjubh and }(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_connectoruh1hhj߰hKhjubh! with an explicit connector type.}(hjhhhNhNubeh}(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&]uh1jhjϽhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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)}(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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj.hMhjubjn)}(hL``struct drm_panel *panel`` The drm_panel being wrapped. Must be non-NULL. h](jt)}(h``struct drm_panel *panel``h]jz)}(hjRh]hstruct drm_panel *panel}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjLubj)}(hhh]h)}(h/The drm_panel being wrapped. Must be non-NULL.h]h/The drm_panel being wrapped. Must be non-NULL.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjghMhjubjn)}(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&]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: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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drmm_panel_bridge_add (C function)c.drmm_panel_bridge_addhNtauh1jxhjhhhNhNubj)}(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}(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(hhhj9hMubh)}(hhh]j)}(h drm_bridgeh]h drm_bridge}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j%)}jdrmm_panel_bridge_addsbc.drmm_panel_bridge_addasbuh1hhj(hhhj9hMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj9hMubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(hhhj9hMubj)}(hdrmm_panel_bridge_addh]j)}(hjih]hdrmm_panel_bridge_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj9hMubj)}(h1(struct drm_device *drm, struct drm_panel *panel)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]jgc.drmm_panel_bridge_addasbuh1hhjubj)}(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)}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jgc.drmm_panel_bridge_addasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj9hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhj9hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj9hMhj!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 }(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 refexplicitrefwarnjj)}j]jgc.drmm_panel_bridge_addasbj drm_bridgeuh1hhj߰hKhjubh and }(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_connectoruh1hhj߰hKhjubh0 that just calls the appropriate functions from }(hjhhhNhNubh)}(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 refexplicitrefwarnjjj 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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj9hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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)}(hD``struct drm_device *drm`` DRM device to tie the bridge lifetime to h](jt)}(h``struct drm_device *drm``h]jz)}(hjFh]hstruct drm_device *drm}(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(DRM device to tie the bridge lifetime toh]h(DRM device to tie the bridge lifetime to}(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_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&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjyubj)}(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&]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&]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&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_panel_bridge_connector (C function)c.drm_panel_bridge_connectorhNtauh1jxhjhhhNhNubj)}(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}(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_connectorh]h drm_connector}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jdrm_panel_bridge_connectorsbc.drm_panel_bridge_connectorasbuh1hhj hhhjhMubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj hhhjhMubj)}(hdrm_panel_bridge_connectorh]j)}(hjNh]hdrm_panel_bridge_connector}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj)}(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]jLc.drm_panel_bridge_connectorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbridgeh]hbridge}(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&]jjjuh1jjjhj hhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjhNhNubj)}(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%)}(hj.h]h Parameters}(hj0hhhNhNubah}(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 drm_bridge *bridge`` The drm_bridge. h](jt)}(h``struct drm_bridge *bridge``h]jz)}(hjMh]hstruct drm_bridge *bridge}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjGubj)}(hhh]h)}(hThe drm_bridge.h]hThe drm_bridge.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjDubah}(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:204: ./drivers/gpu/drm/bridge/panel.chMhj(ubh)}(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.}(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)}(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:204: ./drivers/gpu/drm/bridge/panel.chMhj(ubh)}(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.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#devm_drm_of_get_bridge (C function)c.devm_drm_of_get_bridgehNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdevm_drm_of_get_bridgesbc.devm_drm_of_get_bridgeasbuh1hhjhhhjhMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdevm_drm_of_get_bridgeh]j)}(hj1h]hdevm_drm_of_get_bridge}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j/c.devm_drm_of_get_bridgeasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(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]j/c.devm_drm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hnph]hnp}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(hu32 porth](h)}(hhh]j)}(hu32h]hu32}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j/c.devm_drm_of_get_bridgeasbuh1hhjJubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hporth]hport}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h u32 endpointh](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_of_get_bridgeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hendpointh]hendpoint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(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&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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)}(h<``struct device *dev`` device to tie the bridge lifetime to h](jt)}(h``struct device *dev``h]jz)}(hj0h]hstruct device *dev}(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.chMhj*ubj)}(hhh]h)}(h$device to tie the bridge lifetime toh]h$device to tie the bridge lifetime to}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhjEhMhj'ubjn)}(hL``struct device_node *np`` device tree node containing encoder output ports h](jt)}(h``struct device_node *np``h]jz)}(hjih]hstruct device_node *np}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjcubj)}(hhh]h)}(h0device tree node containing encoder output portsh]h0device tree node containing encoder output ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj~hMhj'ubjn)}(h*``u32 port`` port in the device tree node h](jt)}(h ``u32 port``h]jz)}(hjh]hu32 port}(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)}(hport in the device tree nodeh]hport in the device tree node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj'ubjn)}(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&]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: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.}(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 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.}(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 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrmm_of_get_bridge (C function)c.drmm_of_get_bridgehNtauh1jxhjhhhNhNubj)}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjwhMubh)}(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_of_get_bridgesbc.drmm_of_get_bridgeasbuh1hhjfhhhjwhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjwhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfhhhjwhMubj)}(hdrmm_of_get_bridgeh]j)}(hjh]hdrmm_of_get_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjwhMubj)}(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]jc.drmm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrmh]hdrm}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device_node *nph](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j)}(h device_nodeh]h device_node}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]jc.drmm_of_get_bridgeasbuh1hhjPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(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]jc.drmm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 endpointh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drmm_of_get_bridgeasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hendpointh]hendpoint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjfhhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjbhhhjwhMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhjwhMhj_hhubj)}(hhh]h)}(hReturn next bridge in the chainh]hReturn next bridge in the chain}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:204: ./drivers/gpu/drm/bridge/panel.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1jhhhjhNhNubj)}(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%)}(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.chM hjubji)}(hhh](jn)}(h@``struct drm_device *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$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)}(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.chMhjubj)}(hhh]h)}(h0device tree node containing encoder output portsh]h0device tree node containing encoder output ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h*``u32 port`` port in the device tree node h](jt)}(h ``u32 port``h]jz)}(hjh]hu32 port}(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)}(hport in the device tree nodeh]hport in the device tree node}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hM hjubjn)}(h2``u32 endpoint`` endpoint in the device tree node h](jt)}(h``u32 endpoint``h]jz)}(hjQh]h u32 endpoint}(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.chM hjKubj)}(hhh]h)}(h endpoint in the device tree nodeh]h endpoint in the device tree node}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhM 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:204: ./drivers/gpu/drm/bridge/panel.chM hjubh)}(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.chM hjubh)}(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.}(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&]uh1jhjhhhNhNubj:)}(h.. _drm_panel_helper:h]h}(h]h ]h"]h$]h&]j:drm-panel-helperuh1j:hKhjhhhhubeh}(h]panel-bridge-helper-referenceah ]h"]panel-bridge helper referenceah$]h&]uh1hhjj&hhhhhKubeh}(h](bridgesja&eh ]h"](bridges drm_bridgeseh$]h&]uh1hhhhhhhhKj}jjW&sj}ja&jW&subh)}(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)}(hjh]h drm_bridge}(hjhhhNhNubah}(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&]uh1hhj,hK*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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhj]hKubj)}(hdrm_panel_funcsh]j)}(hjJh]hdrm_panel_funcs}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhj]hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjHhhhj]hKubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jhj]hKhjEhhubj)}(hhh]h)}(h#perform operations on a given panelh]h#perform operations on a given panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK,hjhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj]hKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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}(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:215: ./include/drm/drm_panel.hhK0hjubj@)}(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.hhK2hjubh)}(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.hhK=hjubji)}(hhh](jn)}(hJ``prepare`` Turn on panel and perform set up. This function is optional. h](jt)}(h ``prepare``h]jz)}(hjh]hprepare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKNhjubj)}(hhh](h)}(h!Turn on panel and perform set up.h]h!Turn on panel and perform set up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKLhjubh)}(hThis function is optional.h]hThis function is optional.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKNhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKNhjubjn)}(hP``enable`` Enable panel (turn on back light, etc.). This function is optional. h](jt)}(h ``enable``h]jz)}(hjGh]henable}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKWhjAubj)}(hhh](h)}(h(Enable panel (turn on back light, etc.).h]h(Enable panel (turn on back light, etc.).}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKUhj]ubh)}(hThis function is optional.h]hThis function is optional.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKWhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj\hKWhjubjn)}(hS``disable`` Disable panel (turn off back light, etc.). This function is optional. h](jt)}(h ``disable``h]jz)}(hjh]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK`hjubj)}(hhh](h)}(h*Disable panel (turn off back light, etc.).h]h*Disable panel (turn off back light, etc.).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK^hjubh)}(hThis function is optional.h]hThis function is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK`hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK`hjubjn)}(h:``unprepare`` Turn off panel. This function is optional. h](jt)}(h ``unprepare``h]jz)}(hjh]h unprepare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKihjubj)}(hhh](h)}(hTurn off panel.h]hTurn off panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKghjubh)}(hThis function is optional.h]hThis function is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKihjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKihjubjn)}(h``get_modes`` Add modes to the connector that the panel is attached to and returns the number of modes added. This function is mandatory. h](jt)}(h ``get_modes``h]jz)}(hjh]h get_modes}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKshjubj)}(hhh](h)}(h_Add modes to the connector that the panel is attached to and returns the number of modes added.h]h_Add modes to the connector that the panel is attached to and returns the number of modes added.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKphj5ubh)}(hThis function is mandatory.h]hThis function is mandatory.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKshj5ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hKshjubjn)}(hi``get_orientation`` Return the panel orientation set by device tree or EDID. This function is optional. h](jt)}(h``get_orientation``h]jz)}(hjgh]hget_orientation}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK}hjaubj)}(hhh](h)}(h8Return the panel orientation set by device tree or EDID.h]h8Return the panel orientation set by device tree or EDID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK{hj}ubh)}(hThis function is optional.h]hThis function is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hK}hj}ubeh}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj|hK}hjubjn)}(h``get_timings`` Copy display timings into the provided array and return the number of display timings available. This function is optional. h](jt)}(h``get_timings``h]jz)}(hjh]h get_timings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubj)}(hhh](h)}(h`Copy display timings into the provided array and return the number of display timings available.h]h`Copy display timings into the provided array and return the number of display timings available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubh)}(hThis function is optional.h]hThis function is optional.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hG``debugfs_init`` Allows panels to create panels-specific debugfs files.h](jt)}(h``debugfs_init``h]jz)}(hjh]h debugfs_init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubj)}(hhh]h)}(h6Allows panels to create panels-specific debugfs files.h]h6Allows panels to create panels-specific debugfs files.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hKhjubeh}(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$hj8ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjhhubh)}(hX9The .prepare() function is typically called before the display controller starts to transmit video data. Panel drivers can use this to turn the panel on and wait for it to become ready. If additional configuration is required (via a control bus such as I2C, SPI or DSI for example) this is a good time to do that.h]hX9The .prepare() function is typically called before the display controller starts to transmit video data. Panel drivers can use this to turn the panel on and wait for it to become ready. If additional configuration is required (via a control bus such as I2C, SPI or DSI for example) this is a good time to do that.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK-hjhhubh)}(hXAfter the display controller has started transmitting video data, it's safe to call the .enable() function. This will typically enable the backlight to make the image on screen visible. Some panels require a certain amount of time or frames before the image is displayed. This function is responsible for taking this into account before enabling the backlight to avoid visual glitches.h]hXAfter the display controller has started transmitting video data, it’s safe to call the .enable() function. This will typically enable the backlight to make the image on screen visible. Some panels require a certain amount of time or frames before the image is displayed. This function is responsible for taking this into account before enabling the backlight to avoid visual glitches.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK3hjhhubh)}(hXBefore stopping video transmission from the display controller it can be necessary to turn off the panel to avoid visual glitches. This is done in the .disable() function. Analogously to .enable() this typically involves turning off the backlight and waiting for some time to make sure no image is visible on the panel. It is then safe for the display controller to cease transmission of video data.h]hXBefore stopping video transmission from the display controller it can be necessary to turn off the panel to avoid visual glitches. This is done in the .disable() function. Analogously to .enable() this typically involves turning off the backlight and waiting for some time to make sure no image is visible on the panel. It is then safe for the display controller to cease transmission of video data.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhK:hjhhubh)}(hTo save power when no video data is transmitted, a driver can power down the panel. This is the job of the .unprepare() function.h]hTo save power when no video data is transmitted, a driver can power down the panel. This is the job of the .unprepare() function.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKAhjhhubh)}(hBacklight can be handled automatically if configured using drm_panel_of_backlight() or drm_panel_dp_aux_backlight(). Then the driver does not need to implement the functionality to enable/disable backlight.h]hBacklight can be handled automatically if configured using drm_panel_of_backlight() or drm_panel_dp_aux_backlight(). Then the driver does not need to implement the functionality to enable/disable backlight.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKDhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel (C struct) c.drm_panelhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h drm_panelh]j)}(hstruct drm_panelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKKubj)}(h drm_panelh]j)}(hjh]h drm_panel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKKhjhhubj)}(hhh]h)}(hDRM panel objecth]hDRM panel object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXq**Definition**:: struct drm_panel { struct device *dev; struct backlight_device *backlight; const struct drm_panel_funcs *funcs; int connector_type; struct list_head list; struct list_head followers; struct mutex follower_lock; bool prepare_prev_first; bool prepared; bool enabled; void *container; struct kref refcount; }; **Members** ``dev`` Parent device of the panel. ``backlight`` Backlight device, used to turn on backlight after the call to enable(), and to turn off backlight before the call to disable(). backlight is set by drm_panel_of_backlight() or drm_panel_dp_aux_backlight() and drivers shall not assign it. ``funcs`` Operations that can be performed on the panel. ``connector_type`` Type of the panel as a DRM_MODE_CONNECTOR_* value. This is used to initialise the drm_connector corresponding to the panel with the correct connector type. ``list`` Panel entry in registry. ``followers`` A list of struct drm_panel_follower dependent on this panel. ``follower_lock`` Lock for followers list. ``prepare_prev_first`` The previous controller should be prepared first, before the prepare for the panel is called. This is largely required for DSI panels where the DSI host controller should be initialised to LP-11 before the panel is powered up. ``prepared`` If true then the panel has been prepared. ``enabled`` If true then the panel has been enabled. ``container`` Pointer to the private driver struct embedding this **struct** drm_panel. ``refcount`` reference count of users referencing this panel.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:215: ./include/drm/drm_panel.hhKhjubj@)}(hXbstruct drm_panel { struct device *dev; struct backlight_device *backlight; const struct drm_panel_funcs *funcs; int connector_type; struct list_head list; struct list_head followers; struct mutex follower_lock; bool prepare_prev_first; bool prepared; bool enabled; void *container; struct kref refcount; };h]hXbstruct drm_panel { struct device *dev; struct backlight_device *backlight; const struct drm_panel_funcs *funcs; int connector_type; struct list_head list; struct list_head followers; struct mutex follower_lock; bool prepare_prev_first; bool prepared; bool enabled; void *container; struct kref refcount; };}hj3sbah}(h]h ]h"]h$]h&]jjuh1j?h\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubh)}(h **Members**h]j%)}(hjDh]hMembers}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubji)}(hhh](jn)}(h$``dev`` Parent device of the panel. h](jt)}(h``dev``h]jz)}(hjch]hdev}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhj]ubj)}(hhh]h)}(hParent device of the panel.h]hParent device of the panel.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhjxhKhjZubjn)}(h``backlight`` Backlight device, used to turn on backlight after the call to enable(), and to turn off backlight before the call to disable(). backlight is set by drm_panel_of_backlight() or drm_panel_dp_aux_backlight() and drivers shall not assign it. h](jt)}(h ``backlight``h]jz)}(hjh]h backlight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubj)}(hhh]h)}(hBacklight device, used to turn on backlight after the call to enable(), and to turn off backlight before the call to disable(). backlight is set by drm_panel_of_backlight() or drm_panel_dp_aux_backlight() and drivers shall not assign it.h]hBacklight device, used to turn on backlight after the call to enable(), and to turn off backlight before the call to disable(). backlight is set by drm_panel_of_backlight() or drm_panel_dp_aux_backlight() and drivers shall not assign it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjZubjn)}(h9``funcs`` Operations that can be performed on the panel. h](jt)}(h ``funcs``h]jz)}(hjh]hfuncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjubj)}(hhh]h)}(h.Operations that can be performed on the panel.h]h.Operations that can be performed on the panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjZubjn)}(h``connector_type`` Type of the panel as a DRM_MODE_CONNECTOR_* value. This is used to initialise the drm_connector corresponding to the panel with the correct connector type. h](jt)}(h``connector_type``h]jz)}(hjh]hconnector_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhj ubj)}(hhh]h)}(hType of the panel as a DRM_MODE_CONNECTOR_* value. This is used to initialise the drm_connector corresponding to the panel with the correct connector type.h]hType of the panel as a DRM_MODE_CONNECTOR_* value. This is used to initialise the drm_connector corresponding to the panel with the correct connector type.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hKhjZubjn)}(h"``list`` Panel entry in registry. h](jt)}(h``list``h]jz)}(hjIh]hlist}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhjCubj)}(hhh]h)}(hPanel entry in registry.h]hPanel entry in registry.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhj^hKhjZubjn)}(hK``followers`` A list of struct drm_panel_follower dependent on this panel. h](jt)}(h ``followers``h]jz)}(hjh]h followers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhKhj|ubj)}(hhh]h)}(hhhhj]hM ubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhj]hM hj;hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj;hhhj]hM ubeh}(h]h ](jmacroeh"]h$]h&]jjjjvjjvjjjuh1jhhhjhNhNubh)}(hC``devm_drm_panel_alloc (dev, type, member, funcs, connector_type)``h]jz)}(hj|h]h?devm_drm_panel_alloc (dev, type, member, funcs, connector_type)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM"hjhhubjb=)}(h,Allocate and initialize a refcounted panel. h]h)}(h+Allocate and initialize a refcounted panel.h]h+Allocate and initialize a refcounted panel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM hjubah}(h]h ]h"]h$]h&]uh1ja=hjhM hjhhubj)}(hXi**Parameters** ``dev`` struct device of the panel device ``type`` the type of the struct which contains struct :c:type:`drm_panel` ``member`` the name of the :c:type:`drm_panel` within **type** ``funcs`` callbacks for this panel ``connector_type`` the connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface **Description** The reference count of the returned panel is initialized to 1. This reference will be automatically dropped via devm (by calling drm_panel_put()) when **dev** is removed. **Return** Pointer to container structure embedding the panel, ERR_PTR 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:215: ./include/drm/drm_panel.hhM$hjubji)}(hhh](jn)}(h*``dev`` struct device of the panel device 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:215: ./include/drm/drm_panel.hhM"hjubj)}(hhh]h)}(h!struct device of the panel deviceh]h!struct device of the panel device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM"hjubjn)}(hJ``type`` the type of the struct which contains struct :c:type:`drm_panel` h](jt)}(h``type``h]jz)}(hj h]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM#hjubj)}(hhh]h)}(h@the type of the struct which contains struct :c:type:`drm_panel`h](h-the type of the struct which contains struct }(hj"hhhNhNubh)}(h:c:type:`drm_panel`h]jz)}(hj,h]h drm_panel}(hj.hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_paneluh1hhjhM#hj"ubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM#hjubjn)}(h?``member`` the name of the :c:type:`drm_panel` within **type** h](jt)}(h ``member``h]jz)}(hjah]hmember}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM$hj[ubj)}(hhh]h)}(h3the name of the :c:type:`drm_panel` within **type**h](hthe name of the }(hjzhhhNhNubh)}(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 refexplicitrefwarnjjj drm_paneluh1hhjvhM$hjzubh within }(hjzhhhNhNubj%)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubeh}(h]h ]h"]h$]h&]uh1hhjvhM$hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhjvhM$hjubjn)}(h#``funcs`` callbacks for this panel h](jt)}(h ``funcs``h]jz)}(hjh]hfuncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM%hjubj)}(hhh]h)}(hcallbacks for this panelh]hcallbacks for this panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM%hjubjn)}(hb``connector_type`` the connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface h](jt)}(h``connector_type``h]jz)}(hjh]hconnector_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM'hjubj)}(hhh]h)}(hNthe connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interfaceh]hNthe connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM&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}(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:215: ./include/drm/drm_panel.hhM)hjubh)}(hThe reference count of the returned panel is initialized to 1. This reference will be automatically dropped via devm (by calling drm_panel_put()) when **dev** is removed.h](hThe reference count of the returned panel is initialized to 1. This reference will be automatically dropped via devm (by calling drm_panel_put()) when }(hjVhhhNhNubj%)}(h**dev**h]hdev}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubh is removed.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM(hjubh)}(h **Return**h]j%)}(hjyh]hReturn}(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:215: ./include/drm/drm_panel.hhM,hjubh)}(hGPointer to container structure embedding the panel, ERR_PTR on failure.h]hGPointer to container structure embedding the panel, ERR_PTR on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:215: ./include/drm/drm_panel.hhM-hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_init (C function)c.drm_panel_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hzvoid drm_panel_init (struct drm_panel *panel, struct device *dev, const struct drm_panel_funcs *funcs, int connector_type)h]j)}(hyvoid drm_panel_init(struct drm_panel *panel, struct device *dev, const struct drm_panel_funcs *funcs, int connector_type)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.chK1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK1ubj)}(hdrm_panel_inith]j)}(hdrm_panel_inith]hdrm_panel_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK1ubj)}(hf(struct drm_panel *panel, struct device *dev, const struct drm_panel_funcs *funcs, int connector_type)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_initasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device *devh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.drm_panel_initasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const struct drm_panel_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_panel_funcsh]hdrm_panel_funcs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j5c.drm_panel_initasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfuncsh]hfuncs}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint connector_typeh](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hconnector_typeh]hconnector_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK1ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK1hjhhubj)}(hhh]h)}(hinitialize a panelh]hinitialize 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.chK1hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_panel *panel`` DRM panel ``struct device *dev`` parent device of the panel ``const struct drm_panel_funcs *funcs`` panel operations ``int connector_type`` the connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface (must NOT be DRM_MODE_CONNECTOR_Unknown) **Description** Initialize the panel structure for subsequent registration with drm_panel_add().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.chK5hjubji)}(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.chK2hjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK2hjubjn)}(h2``struct device *dev`` parent device of the panel 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&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK3hj"ubj)}(hhh]h)}(hparent device of the panelh]hparent device of the panel}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hK3hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hK3hjubjn)}(h9``const struct drm_panel_funcs *funcs`` panel operations h](jt)}(h'``const struct drm_panel_funcs *funcs``h]jz)}(hjah]h#const struct drm_panel_funcs *funcs}(hjchhhNhNubah}(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.chK4hj[ubj)}(hhh]h)}(hpanel operationsh]hpanel operations}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhK4hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhjvhK4hjubjn)}(h``int connector_type`` the connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface (must NOT be DRM_MODE_CONNECTOR_Unknown) h](jt)}(h``int connector_type``h]jz)}(hjh]hint connector_type}(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.chK6hjubj)}(hhh]h)}(hwthe connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface (must NOT be DRM_MODE_CONNECTOR_Unknown)h]hwthe connector type (DRM_MODE_CONNECTOR_*) corresponding to the panel interface (must NOT be DRM_MODE_CONNECTOR_Unknown)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK6hjubeh}(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.chK8hjubh)}(hPInitialize the panel structure for subsequent registration with drm_panel_add().h]hPInitialize the panel structure for subsequent registration with drm_panel_add().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_add (C function)c.drm_panel_addhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h,void drm_panel_add (struct drm_panel *panel)h]j)}(h+void drm_panel_add(struct drm_panel *panel)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.chKKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hKKubj)}(h drm_panel_addh]j)}(h drm_panel_addh]h drm_panel_add}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj)hKKubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j%)}jj>sbc.drm_panel_addasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj)hKKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj)hKKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj)hKKhjhhubj)}(hhh]h)}(h"add a panel to the global registryh]h"add a panel to 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.chKKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hKKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_panel *panel`` panel to add **Description** Add a panel to the global registry so that it can be looked up by display drivers. The panel to be added must have been allocated by devm_drm_panel_alloc().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.chKOhjubji)}(hhh]jn)}(h)``struct drm_panel *panel`` panel to add 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.chKLhjubj)}(hhh]h)}(h panel to addh]h panel to add}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKLhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hKLhjubah}(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:218: ./drivers/gpu/drm/drm_panel.chKNhjubh)}(hAdd a panel to the global registry so that it can be looked up by display drivers. The panel to be added must have been allocated by devm_drm_panel_alloc().h]hAdd a panel to the global registry so that it can be looked up by display drivers. The panel to be added must have been allocated by devm_drm_panel_alloc().}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_remove (C function)c.drm_panel_removehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h/void drm_panel_remove (struct drm_panel *panel)h]j)}(h.void drm_panel_remove(struct drm_panel *panel)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.chK[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK[ubj)}(hdrm_panel_removeh]j)}(hdrm_panel_removeh]hdrm_panel_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK[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%)}jjsbc.drm_panel_removeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK[ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK[ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK[hjhhubj)}(hhh]h)}(h'remove a panel from the global registryh]h'remove a panel from the global registry}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chK[hjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjhNhNubj)}(hs**Parameters** ``struct drm_panel *panel`` DRM panel **Description** Removes a panel from the global registry.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.chK_hjxubji)}(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.chK\hjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(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&]uh1jhhjxubh)}(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^hjxubh)}(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]hjxubeh}(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)}(h0void drm_panel_prepare (struct drm_panel *panel)h]j)}(h/void drm_panel_prepare(struct drm_panel *panel)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.chKiubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hKiubj)}(hdrm_panel_prepareh]j)}(hdrm_panel_prepareh]hdrm_panel_prepare}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hKiubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jj@sbc.drm_panel_prepareasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hKiubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj+hKiubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj+hKihjhhubj)}(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.chKihjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hKiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**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. This function cannot fail (as it is called from the pre_enable call chain). There will always be a call to drm_panel_disable() afterwards.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.chKmhjubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjh]hstruct drm_panel *panel}(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.chKjhjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKjhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hKjhjubah}(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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKlhjubh)}(hXGCalling 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. This function cannot fail (as it is called from the pre_enable call chain). There will always be a call to drm_panel_disable() afterwards.h]hXGCalling 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. This function cannot fail (as it is called from the pre_enable call chain). There will always be a call to drm_panel_disable() afterwards.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKkhjubeh}(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)}(h2void drm_panel_unprepare (struct drm_panel *panel)h]j)}(h1void drm_panel_unprepare(struct drm_panel *panel)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.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 }(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_unprepareasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hj4hhhNhNubah}(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)}(hpower off a panelh]hpower off a 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.chKhj[hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjhNhNubj)}(hXH**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().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:218: ./drivers/gpu/drm/drm_panel.chKhjzubji)}(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.chKhjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubah}(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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjzubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjzubeh}(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/void drm_panel_enable (struct drm_panel *panel)h]j)}(h.void drm_panel_enable(struct drm_panel *panel)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.chKubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hKubj)}(hdrm_panel_enableh]j)}(hdrm_panel_enableh]hdrm_panel_enable}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj-hKubj)}(h(struct drm_panel *panel)h]j)}(hstruct drm_panel *panelh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j%)}jjBsbc.drm_panel_enableasbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj-hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj-hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj-hKhjhhubj)}(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&]uh1jhjhhhj-hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXy**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. This function cannot fail (as it is called from the enable call chain). There will always be a call to drm_panel_disable() afterwards.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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hKhjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj[h]h Description}(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:218: ./drivers/gpu/drm/drm_panel.chKhjubh)}(hX/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. This function cannot fail (as it is called from the enable call chain). There will always be a call to drm_panel_disable() afterwards.h]hX/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. This function cannot fail (as it is called from the enable call chain). There will always be a call to drm_panel_disable() afterwards.}(hjqhhhNhNubah}(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)}(h0void drm_panel_disable (struct drm_panel *panel)h]j)}(h/void drm_panel_disable(struct drm_panel *panel)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.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_panel_disableh]j)}(hdrm_panel_disableh]hdrm_panel_disable}(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 }(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_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hj6hhhNhNubah}(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)}(hdisable a panelh]hdisable a 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.chKhj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjhNhNubj)}(hX**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.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.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.chKhjubj)}(hhh]h)}(h DRM panelh]h DRM panel}(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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chKhj|ubh)}(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.}(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](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&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMubj)}(hdrm_panel_get_modesh]j)}(hdrm_panel_get_modesh]hdrm_panel_get_modes}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hMubj)}(h:(struct drm_panel *panel, struct drm_connector *connector)h](j)}(hstruct drm_panel *panelh](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_panelh]h drm_panel}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjDsbc.drm_panel_get_modesasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hpanelh]hpanel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(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_panel_get_modesasbuh1hhjubj)}(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&]noemphjjuh1jhjVubeh}(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,probe the available display modes of a panelh]h,probe the available display modes of a panel}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjNhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhjhNhNubj)}(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%)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjmubji)}(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}(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&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.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&]uh1jhhjmubh)}(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.chMhjmubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjmubh)}(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.chMhjmubh)}(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).}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panel_get (C function)c.drm_panel_gethNtauh1jxhjhhhNhNubj)}(hhh](j)}(h:struct drm_panel * drm_panel_get (struct drm_panel *panel)h]j)}(h8struct drm_panel *drm_panel_get(struct drm_panel *panel)h](j)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhh`/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&]uh1jhjnhhhjhM<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%)}j drm_panel_getsbc.drm_panel_getasbuh1hhjnhhhjhM<ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjhM<ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnhhhjhM<ubj)}(h drm_panel_geth]j)}(hjh]h drm_panel_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhjhM<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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_panel_getasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjnhhhjhM<ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjjhhhjhM<ubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jhjhM<hjghhubj)}(hhh]h)}(hAcquire a panel referenceh]hAcquire a panel reference}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM<hjjhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_panel *panel`` DRM panel **Description** This function increments the panel's refcount. **Return** Pointer to **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:218: ./drivers/gpu/drm/drm_panel.chM@hjubji)}(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=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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM?hjubh)}(h.This function increments the panel's refcount.h]h0This function increments the panel’s refcount.}(hjhhhNhNubah}(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)}(hPointer to **panel**h](h Pointer to }(hj&hhhNhNubj%)}(h **panel**h]hpanel}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&ubeh}(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](jdrm_panel_put (C function)c.drm_panel_puthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h,void drm_panel_put (struct drm_panel *panel)h]j)}(h+void drm_panel_put(struct drm_panel *panel)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMOubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhMOubj)}(h drm_panel_puth]j)}(h drm_panel_puth]h drm_panel_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhjqhMOubj)}(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%)}jjsbc.drm_panel_putasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj_hhhjqhMOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhjqhMOubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjqhMOhjXhhubj)}(hhh]h)}(hRelease a panel referenceh]hRelease a panel reference}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMOhj hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_panel *panel`` DRM panel **Description** This function decrements the panel's reference count and frees the object if the reference count drops to zero.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.chMShj?ubji)}(hhh]jn)}(h&``struct drm_panel *panel`` DRM panel h](jt)}(h``struct drm_panel *panel``h]jz)}(hjdh]hstruct drm_panel *panel}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMPhj^ubj)}(hhh]h)}(h DRM panelh]h DRM panel}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMPhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhMPhj[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.chMRhj?ubh)}(hoThis function decrements the panel's reference count and frees the object if the reference count drops to zero.h]hqThis function decrements the panel’s reference count and frees the object if the reference count drops to zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMQhj?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}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(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_panelasbuh1hhjhhhjhMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hof_drm_find_panelh]j)}(hj!h]hof_drm_find_panel}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(const struct device_node *np)h]j)}(hconst struct device_node *nph](j)}(hjch]hconst}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(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.of_drm_find_panelasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX[**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.chMhjubji)}(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&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhj5ubj)}(hhh]h)}(hdevice tree node of the panelh]hdevice tree node of the panel}(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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(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.}(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/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.chMhjubh)}(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.chMhjubah}(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.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhMhjubh)}(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.chMhjubh)}(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.chMhjubeh}(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}(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 }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj:hMubj)}(hof_drm_get_panel_orientationh]j)}(hof_drm_get_panel_orientationh]hof_drm_get_panel_orientation}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj:hMubj)}(hG(const struct device_node *np, enum drm_panel_orientation *orientation)h](j)}(hconst struct device_node *nph](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 device_nodeh]h device_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjOsbc.of_drm_get_panel_orientationasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hnph]hnp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(h'enum drm_panel_orientation *orientationh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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_orientationasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h orientationh]h orientation}(hjMhhhNhNubah}(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[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}(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&]uh1jhj!hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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.chMhjubji)}(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.chMhjubj)}(hhh]h)}(hdevice tree node of the panelh]hdevice tree node of the panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hM``enum drm_panel_orientation *orientation`` orientation enum to be filled in h](jt)}(h+``enum drm_panel_orientation *orientation``h]jz)}(hjh]h'enum drm_panel_orientation *orientation}(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 orientation enum to be filled inh]h orientation enum to be filled in}(hj hhhNhNubah}(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:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(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.}(hjBhhhNhNubah}(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%)}(hjSh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(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.}(hjihhhNhNubah}(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"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&]uh1jhjhhh`/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&]uh1jhjhhhjhMubj)}(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&]jjuh1jhjhhhjhMubj)}(h(struct device *dev)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.drm_is_panel_followerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h'Check if the device is a panel followerh]h'Check if the device is a panel follower}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhjhNhNubj)}(hXa**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. 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%)}(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)}(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&]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)}(hThe 'struct device' to checkh]h The ‘struct device’ to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubh)}(hnThis checks to see if a device needs to be power sequenced together with a panel using the panel follower API.h]hnThis checks to see if a device needs to be power sequenced together with a panel using the panel follower API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjsubh)}(hHThe "panel" property of the follower points to the panel to be followed.h]hLThe “panel” property of the follower points to the panel to be followed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM hjsubh)}(h **Return**h]j%)}(hj h]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:218: ./drivers/gpu/drm/drm_panel.chM hjsubh)}(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.chM hjsubeh}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhh`/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&]uh1jhjJhhhj\hMubj)}(hdrm_panel_add_followerh]j)}(hdrm_panel_add_followerh]hdrm_panel_add_follower}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj\hMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjqsbc.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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_panel_add_followerasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfollowerh]hfollower}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj\hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhj\hMubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhj\hMhjChhubj)}(hhh]h)}(h)Register something to follow panel state.h]h)Register something to follow panel state.}(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&]uh1jhjChhhj\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXf**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. 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%)}(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)}(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)}(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.chMhjubj)}(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&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubeh}(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:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjubh)}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chM"hjubh)}(hHThe "panel" property of the follower points to the panel to be followed.h]hLThe “panel” property of the follower points to the panel to be followed.}(hjghhhNhNubah}(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%)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubah}(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. 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]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.}(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_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.chMJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMJubj)}(hdrm_panel_remove_followerh]j)}(hdrm_panel_remove_followerh]hdrm_panel_remove_follower}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMJubj)}(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 }(hjhhhNhNubah}(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 }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfollowerh]hfollower}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMJhjhhubj)}(hhh]h)}(h!Reverse drm_panel_add_follower().h]h!Reverse drm_panel_add_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.chMJhjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMJubeh}(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.chMNhjubji)}(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}(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.chMKhjubj)}(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&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMKhjubah}(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.chMMhjubh)}(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.chMLhjubh)}(h **Return**h]j%)}(hj h]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:218: ./drivers/gpu/drm/drm_panel.chMOhjubh)}(h0 or an error code.h]h0 or an error code.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMPhjubeh}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMmubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshMmubj)}(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&]jjuh1jhjahhhjshMmubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN 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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]jc.devm_drm_panel_add_followerasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfollowerh]hfollower}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjahhhjshMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj]hhhjshMmubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhjshMmhjZhhubj)}(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.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshMmubeh}(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.chMqhjubji)}(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.chMnhjubj)}(hhh]h)}(h%The 'struct device' for the follower.h]h)The ‘struct device’ for the follower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMnhjubjn)}(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&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jsh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMohj 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$hMohj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMohjubeh}(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&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMqhjubh)}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMphjubh)}(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.chMrhjubh)}(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.chMshjubeh}(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.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_panel_of_backlighth]j)}(hdrm_panel_of_backlighth]hdrm_panel_of_backlight}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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%)}jjsbc.drm_panel_of_backlightasbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpanelh]hpanel}(hjLhhhNhNubah}(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'use backlight device node for backlighth]h'use backlight device node for backlight}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:218: ./drivers/gpu/drm/drm_panel.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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}(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: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.}(hjhhhNhNubah}(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&]uh1jyhjubah}(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.chMhjubeh}(h]h ]h"]h$]h&]uh1hhj>hMhjubh)}(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 }(hjEhhhNhNubh)}(h7:c:type:`drm_panel_funcs.disable\(\) `h]jz)}(hjOh]hdrm_panel_funcs.disable()}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMubah}(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.chMhjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjlhMhjubh)}(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().}(hjwhhhNhNubah}(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%)}(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.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:218: ./drivers/gpu/drm/drm_panel.chMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhs/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:221: ./drivers/gpu/drm/drm_panel_orientation_quirks.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]jjuh1jhjhhhjhMubj)}(h(int width, int height)h](j)}(h int widthh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hwidthh]hwidth}(hj&hhhNhNubah}(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 }(hjMhhhNhNubah}(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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(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.chM hjubji)}(hhh](jn)}(h+``int width`` width in pixels of the panel h](jt)}(h ``int width``h]jz)}(hjh]h int width}(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)}(hwidth in pixels of the panelh]hwidth in pixels of the panel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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$hj8ubah}(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)}(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.}(hjPhhhNhNubah}(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.}(hj_hhhNhNubah}(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)}(h **Return**h]j%)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chKhjubh)}(h **Return**h]j%)}(hj3h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhq/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:224: ./drivers/gpu/drm/drm_panel_backlight_quirks.chKChjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h](panel-helper-referencejeh ]h"](panel helper referencedrm_panel_helpereh$]h&]uh1hhhhhhhhKj}jejsj}jjsubh)}(hhh](h)}(h#Panel Self Refresh Helper Referenceh]h#Panel Self Refresh Helper Reference}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhhhhhKubh)}(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&]uh1hhjhKhjjhhubh)}(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&]uh1jyhjubah}(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!hjjhhubh)}(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 }(hjHhhhNhNubh)}(h=:c:type:`drm_crtc_state.self_refresh_active `h]jz)}(hjRh]h"drm_crtc_state.self_refresh_active}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(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'hjHubhe if they want to enter low power mode without full disable (in case full disable/enable is too slow).}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohK'hjjhhubh)}(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.}(hjzhhhNhNubah}(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,hjjhhubh)}(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.chK0hjubh is true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK0hjjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_self_refresh_helper_update_avg_times (C function)*c.drm_self_refresh_helper_update_avg_timeshNtauh1jxhjjhhhNhNubj)}(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&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(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 reftargetj1modnameN classnameNjj)}j]j%)}jjsb*c.drm_self_refresh_helper_update_avg_timesasbuh1hhj ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hstateh]hstate}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(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}(hj hhhNhNubah}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1jhhhjjhNhNubj)}(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%)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjRubji)}(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)}(hjwh]hstruct drm_atomic_state *state}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjqubj)}(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&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjnubjn)}(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&]uh1jmhjhKhjnubjn)}(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&]uh1jmhjhKhjnubeh}(h]h ]h"]h$]h&]uh1jhhjRubh)}(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.chKhjRubh)}(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)}(hjEh]h(drm_mode_config_funcs.atomic_commit_tail}(hjGhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(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&]uh1hhjbhKhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_self_refresh_helper_alter_state (C function)%c.drm_self_refresh_helper_alter_statehNtauh1jxhjjhhhNhNubj)}(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 }(hjhhhNhNubah}(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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjjhNhNubj)}(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%)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:233: ./drivers/gpu/drm/drm_self_refresh_helper.chKhjiubji)}(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&]uh1jhhjiubh)}(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.chKhjiubh)}(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.chKhjiubh)}(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.chKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_self_refresh_helper_init (C function)c.drm_self_refresh_helper_inithNtauh1jxhjjhhhNhNubj)}(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}(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 }(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}(hj>hhhNhNubah}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jj@sbc.drm_self_refresh_helper_initasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubah}(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&]jjjjjjjjjuh1jhhhjjhNhNubj)}(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)}(hjh]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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hKhjubah}(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&]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}(hjohhhNhNubah}(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&]uh1jhjjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_self_refresh_helper_cleanup (C function)!c.drm_self_refresh_helper_cleanuphNtauh1jxhjjhhhNhNubj)}(hhh](j)}(h hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@ modnameN classnameNjj)}j]j c.drm_hdmi_connector_mode_validasbuh1hhj ubj)}(h h]h }(hj\ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(h connectorh]h connector}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h#const struct drm_display_mode *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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(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 reftargetj modnameN classnameNjj)}j]j c.drm_hdmi_connector_mode_validasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hmodeh]hmode}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMjubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj hMjubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMjhj hhubj)}(hhh]h)}(h)Check if mode is valid for HDMI connectorh]h)Check if mode is valid for HDMI connector}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMjhj) hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjD jjD jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_connector *connector`` DRM connector to validate the mode ``const struct drm_display_mode *mode`` Display mode to validate **Description** Generic .mode_valid implementation for HDMI connectors.h](h)}(h**Parameters**h]j%)}(hjN h]h Parameters}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjL ubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMnhjH ubji)}(hhh](jn)}(hG``struct drm_connector *connector`` DRM connector to validate the mode h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjm h]hstruct drm_connector *connector}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjk ubah}(h]h ]h"]h$]h&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMkhjg ubj)}(hhh]h)}(h"DRM connector to validate the modeh]h"DRM connector to validate the mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMkhj ubah}(h]h ]h"]h$]h&]uh1jhjg ubeh}(h]h ]h"]h$]h&]uh1jmhj hMkhjd ubjn)}(hA``const struct drm_display_mode *mode`` Display 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMlhj ubj)}(hhh]h)}(hDisplay mode to validateh]hDisplay mode to validate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMlhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMlhjd ubeh}(h]h ]h"]h$]h&]uh1jhhjH ubh)}(h**Description**h]j%)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMnhjH ubh)}(h7Generic .mode_valid implementation for HDMI connectors.h]h7Generic .mode_valid implementation for HDMI connectors.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMmhjH ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j?drm_atomic_helper_connector_hdmi_update_infoframes (C function)4c.drm_atomic_helper_connector_hdmi_update_infoframeshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hxint drm_atomic_helper_connector_hdmi_update_infoframes (struct drm_connector *connector, struct drm_atomic_state *state)h]j)}(hwint drm_atomic_helper_connector_hdmi_update_infoframes(struct drm_connector *connector, struct drm_atomic_state *state)h](j)}(hinth]hint}(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj" hhht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMubj)}(h h]h }(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj" hhhj4 hMubj)}(h2drm_atomic_helper_connector_hdmi_update_infoframesh]j)}(h2drm_atomic_helper_connector_hdmi_update_infoframesh]h2drm_atomic_helper_connector_hdmi_update_infoframes}(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj" hhhj4 hMubj)}(hA(struct drm_connector *connector, struct drm_atomic_state *state)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubj)}(h h]h }(hjp 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%)}jjI sb4c.drm_atomic_helper_connector_hdmi_update_infoframesasbuh1hhj_ 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)}(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 4c.drm_atomic_helper_connector_hdmi_update_infoframesasbuh1hhj 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[ ubeh}(h]h ]h"]h$]h&]jjuh1jhj" hhhj4 hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj4 hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj4 hMhj hhubj)}(hhh]h)}(hUpdate the Infoframesh]hUpdate the Infoframes}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjS hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj4 hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjn jjn jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` A pointer to the HDMI connector ``struct drm_atomic_state *state`` The HDMI connector state to generate the infoframe from **Description** This function is meant for HDMI connector drivers to write their infoframes. It will typically be used in a **drm_connector_helper_funcs.atomic_enable** implementation. **Return** Zero on success, error code on failure.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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjr ubji)}(hhh](jn)}(hD``struct drm_connector *connector`` A pointer to the HDMI 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj ubj)}(hhh]h)}(hA pointer to the HDMI connectorh]hA pointer to the HDMI 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)}(h[``struct drm_atomic_state *state`` The HDMI connector state to generate the infoframe from 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj ubj)}(hhh]h)}(h7The HDMI connector state to generate the infoframe fromh]h7The HDMI connector state to generate the infoframe from}(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&]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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjr ubh)}(hThis function is meant for HDMI connector drivers to write their infoframes. It will typically be used in a **drm_connector_helper_funcs.atomic_enable** implementation.h](hlThis function is meant for HDMI connector drivers to write their infoframes. It will typically be used in a }(hj!hhhNhNubj%)}(h,**drm_connector_helper_funcs.atomic_enable**h]h(drm_connector_helper_funcs.atomic_enable}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubh implementation.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjr ubh)}(h **Return**h]j%)}(hjDh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjr ubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjr ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jDdrm_atomic_helper_connector_hdmi_update_audio_infoframe (C function)9c.drm_atomic_helper_connector_hdmi_update_audio_infoframehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_atomic_helper_connector_hdmi_update_audio_infoframe (struct drm_connector *connector, struct hdmi_audio_infoframe *frame)h]j)}(hint drm_atomic_helper_connector_hdmi_update_audio_infoframe(struct drm_connector *connector, struct hdmi_audio_infoframe *frame)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h7drm_atomic_helper_connector_hdmi_update_audio_infoframeh]j)}(h7drm_atomic_helper_connector_hdmi_update_audio_infoframeh]h7drm_atomic_helper_connector_hdmi_update_audio_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hE(struct drm_connector *connector, struct hdmi_audio_infoframe *frame)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%)}jjsb9c.drm_atomic_helper_connector_hdmi_update_audio_infoframeasbuh1hhjubj)}(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 hdmi_audio_infoframe *frameh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j9c.drm_atomic_helper_connector_hdmi_update_audio_infoframeasbuh1hhj4ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhj~hhubj)}(hhh]h)}(hUpdate the Audio Infoframeh]hUpdate the Audio Infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` A pointer to the HDMI connector ``struct hdmi_audio_infoframe *frame`` A pointer to the audio infoframe to write **Description** This function is meant for HDMI connector drivers to update their audio infoframe. It will typically be used in one of the ALSA hooks (most likely prepare). **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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubji)}(hhh](jn)}(hD``struct drm_connector *connector`` A pointer to the HDMI 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubj)}(hhh]h)}(hA pointer to the HDMI connectorh]hA pointer to the HDMI connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hQ``struct hdmi_audio_infoframe *frame`` A pointer to the audio infoframe to write h](jt)}(h&``struct hdmi_audio_infoframe *frame``h]jz)}(hj3h]h"struct hdmi_audio_infoframe *frame}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj-ubj)}(hhh]h)}(h)A pointer to the audio infoframe to writeh]h)A pointer to the audio infoframe to write}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhMhjubeh}(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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubh)}(hThis function is meant for HDMI connector drivers to update their audio infoframe. It will typically be used in one of the ALSA hooks (most likely prepare).h]hThis function is meant for HDMI connector drivers to update their audio infoframe. It will typically be used in one of the ALSA hooks (most likely prepare).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chM!hjubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jCdrm_atomic_helper_connector_hdmi_clear_audio_infoframe (C function)8c.drm_atomic_helper_connector_hdmi_clear_audio_infoframehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h\int drm_atomic_helper_connector_hdmi_clear_audio_infoframe (struct drm_connector *connector)h]j)}(h[int drm_atomic_helper_connector_hdmi_clear_audio_infoframe(struct drm_connector *connector)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM?ubj)}(h6drm_atomic_helper_connector_hdmi_clear_audio_infoframeh]j)}(h6drm_atomic_helper_connector_hdmi_clear_audio_infoframeh]h6drm_atomic_helper_connector_hdmi_clear_audio_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM?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 }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j%)}jjsb8c.drm_atomic_helper_connector_hdmi_clear_audio_infoframeasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjphhhNhNubah}(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)}(h Stop sending the Audio Infoframeh]h Stop sending the Audio Infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX@**Parameters** ``struct drm_connector *connector`` A pointer to the HDMI connector **Description** This function is meant for HDMI connector drivers to stop sending their audio infoframe. It will typically be used in one of the ALSA hooks (most likely 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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMChjubji)}(hhh]jn)}(hD``struct drm_connector *connector`` A pointer to the HDMI 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chM@hjubj)}(hhh]h)}(hA pointer to the HDMI connectorh]hA pointer to the HDMI connector}(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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMBhjubh)}(hThis function is meant for HDMI connector drivers to stop sending their audio infoframe. It will typically be used in one of the ALSA hooks (most likely shutdown).h]hThis function is meant for HDMI connector drivers to stop sending their audio infoframe. It will typically be used in one of the ALSA hooks (most likely shutdown).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMAhjubh)}(h **Return**h]j%)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMEhjubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_atomic_helper_connector_hdmi_hotplug (C function)*c.drm_atomic_helper_connector_hdmi_hotplughNtauh1jxhjhhhNhNubj)}(hhh](j)}(hqvoid drm_atomic_helper_connector_hdmi_hotplug (struct drm_connector *connector, enum drm_connector_status status)h]j)}(hpvoid drm_atomic_helper_connector_hdmi_hotplug(struct drm_connector *connector, enum drm_connector_status status)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubj)}(h(drm_atomic_helper_connector_hdmi_hotplugh]j)}(h(drm_atomic_helper_connector_hdmi_hotplugh]h(drm_atomic_helper_connector_hdmi_hotplug}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhMubj)}(hC(struct drm_connector *connector, enum drm_connector_status status)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_hdmi_hotplugasbuh1hhjubj)}(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 enum drm_connector_status statush](j)}(hjh]henum}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(hdrm_connector_statush]hdrm_connector_status}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j*c.drm_atomic_helper_connector_hdmi_hotplugasbuh1hhj-ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hstatush]hstatus}(hj{hhhNhNubah}(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)}(h/Handle the hotplug event for the HDMI connectorh]h/Handle the hotplug event for the HDMI connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct drm_connector *connector`` A pointer to the HDMI connector ``enum drm_connector_status status`` Connection status **Description** This function should be called as a part of the .detect() / .detect_ctx() callbacks for all status changes.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubji)}(hhh](jn)}(hD``struct drm_connector *connector`` A pointer to the HDMI 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubj)}(hhh]h)}(hA pointer to the HDMI connectorh]hA pointer to the HDMI connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h7``enum drm_connector_status status`` Connection status h](jt)}(h$``enum drm_connector_status status``h]jz)}(hjh]h enum drm_connector_status status}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubj)}(hhh]h)}(hConnection statush]hConnection status}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hMhjubeh}(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&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubh)}(hkThis function should be called as a part of the .detect() / .detect_ctx() callbacks for all status changes.h]hkThis function should be called as a part of the .detect() / .detect_ctx() callbacks for all status changes.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_atomic_helper_connector_hdmi_force (C function)(c.drm_atomic_helper_connector_hdmi_forcehNtauh1jxhjhhhNhNubj)}(hhh](j)}(hMvoid drm_atomic_helper_connector_hdmi_force (struct drm_connector *connector)h]j)}(hLvoid drm_atomic_helper_connector_hdmi_force(struct drm_connector *connector)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h&drm_atomic_helper_connector_hdmi_forceh]j)}(h&drm_atomic_helper_connector_hdmi_forceh]h&drm_atomic_helper_connector_hdmi_force}(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_hdmi_forceasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hj5hhhNhNubah}(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)}(h3HDMI Connector implementation of the force callbackh]h3HDMI Connector implementation of the force callback}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhjhNhNubj)}(hXS**Parameters** ``struct drm_connector *connector`` A pointer to the HDMI connector **Description** This function implements the .force() callback for the HDMI connectors. It can either be used directly as the callback or should be called from within the .force() callback implementation to maintain the HDMI-specific connector's data.h](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj{ubji)}(hhh]jn)}(hD``struct drm_connector *connector`` A pointer to the HDMI 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&]uh1jsht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhjubj)}(hhh]h)}(hA pointer to the HDMI connectorh]hA pointer to the HDMI 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%)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj{ubh)}(hThis function implements the .force() callback for the HDMI connectors. It can either be used directly as the callback or should be called from within the .force() callback implementation to maintain the HDMI-specific connector's data.h]hThis function implements the .force() callback for the HDMI connectors. It can either be used directly as the callback or should be called from within the .force() callback implementation to maintain the HDMI-specific connector’s data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hht/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:248: ./drivers/gpu/drm/display/drm_hdmi_state_helper.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]functions-referenceah ]h"]h$]functions referenceah&]uh1hhjhhhhhKj;Kubeh}(h]hdmi-atomic-state-helpersah ]h"]hdmi atomic state helpersah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hHDCP Helper Functions Referenceh]hHDCP Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_hdcp_check_ksvs_revoked (C function)c.drm_hdcp_check_ksvs_revokedhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hUint drm_hdcp_check_ksvs_revoked (struct drm_device *drm_dev, u8 *ksvs, u32 ksv_count)h]j)}(hTint drm_hdcp_check_ksvs_revoked(struct drm_device *drm_dev, u8 *ksvs, u32 ksv_count)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMubj)}(hdrm_hdcp_check_ksvs_revokedh]j)}(hdrm_hdcp_check_ksvs_revokedh]hdrm_hdcp_check_ksvs_revoked}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhMubj)}(h5(struct drm_device *drm_dev, u8 *ksvs, u32 ksv_count)h](j)}(hstruct drm_device *drm_devh](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_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjdsbc.drm_hdcp_check_ksvs_revokedasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hdrm_devh]hdrm_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu8 *ksvsh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_hdcp_check_ksvs_revokedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hksvsh]hksvs}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h u32 ksv_counth](h)}(hhh]j)}(hu32h]hu32}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]jc.drm_hdcp_check_ksvs_revokedasbuh1hhjAubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h ksv_counth]h ksv_count}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhMhj6hhubj)}(hhh]h)}(h#Check the revoked status of the IDsh]h#Check the revoked status of the IDs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXq**Parameters** ``struct drm_device *drm_dev`` drm_device for which HDCP revocation check is requested ``u8 *ksvs`` List of KSVs (HDCP receiver IDs) ``u32 ksv_count`` KSV count passed in through **ksvs** **Description** This 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. SRM should be presented in the name of "display_hdcp_srm.bin". Format 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``.pdf **Return** Count of the revoked KSVs or -ve error number in case of the failure.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:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubji)}(hhh](jn)}(hW``struct drm_device *drm_dev`` drm_device for which HDCP revocation check is requested h](jt)}(h``struct drm_device *drm_dev``h]jz)}(hjh]hstruct drm_device *drm_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubj)}(hhh]h)}(h7drm_device for which HDCP revocation check is requestedh]h7drm_device for which HDCP revocation check is requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h.``u8 *ksvs`` List of KSVs (HDCP receiver IDs) h](jt)}(h ``u8 *ksvs``h]jz)}(hjh]hu8 *ksvs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubj)}(hhh]h)}(h List of KSVs (HDCP receiver IDs)h]h List of KSVs (HDCP receiver IDs)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hMhjubjn)}(h7``u32 ksv_count`` KSV count passed in through **ksvs** h](jt)}(h``u32 ksv_count``h]jz)}(hjQh]h u32 ksv_count}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjKubj)}(hhh]h)}(h$KSV count passed in through **ksvs**h](hKSV count passed in through }(hjjhhhNhNubj%)}(h**ksvs**h]hksvs}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubeh}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjubeh}(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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./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:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjubh)}(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:254: ./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 }(hjhhhNhNubju)}(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&]refurijuh1jthjubho/HDCP``20Specification````20Rev1_4_Secure``.pdf 2. Renewability chapter on 63rd page of HDCP 2.2 specification }(hjhhhNhNubju)}(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&]refurijuh1jthjubhA/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:254: ./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:254: ./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:254: ./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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMFubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMFubj)}(h0drm_connector_attach_content_protection_propertyh]j)}(h0drm_connector_attach_content_protection_propertyh]h0drm_connector_attach_content_protection_property}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjXhMFubj)}(h9(struct drm_connector *connector, bool hdcp_content_type)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%)}jjmsb2c.drm_connector_attach_content_protection_propertyasbuh1hhjubj)}(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)}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjXhMFubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjXhMFubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhjXhMFhj?hhubj)}(hhh]h)}(h"attach content protection propertyh]h"attach content protection property}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMFhj;hhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhjhNhNubj)}(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%)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMJhjZubji)}(hhh](jn)}(hH``struct drm_connector *connector`` connector to attach CP property on. h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjh]hstruct drm_connector *connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMIhjyubj)}(hhh]h)}(h#connector to attach CP property on.h]h#connector to attach CP property on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjhMIhjvubjn)}(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:254: ./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&]uh1jmhjhMJhjvubeh}(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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMLhjZubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMKhjZubh)}(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:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMOhjZubh)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMRhjZubh)}(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 }(hj6hhhNhNubh)}(hE:c:type:`drm_connector_state.hdcp_content_type `h]jz)}(hj@h]h%drm_connector_state.hdcp_content_type}(hjBhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_stateuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMVhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hMVhjZubh)}(hlThe content protection will be set to :c:type:`drm_connector_state.content_protection `h](h&The content protection will be set to }(hjhhhhNhNubh)}(hF:c:type:`drm_connector_state.content_protection `h]jz)}(hjrh]h&drm_connector_state.content_protection}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_stateuh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMYhjhubeh}(h]h ]h"]h$]h&]uh1hhjhMYhjZubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chM[hjZubh)}(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:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chM_hjZubh)}(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:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chM`hjZubeh}(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:254: ./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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h*(struct drm_connector *connector, u64 val)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_hdcp_update_content_protectionasbuh1hhj%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!ubj)}(hu64 valh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc$c.drm_hdcp_update_content_protectionasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvalh]hval}(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)}(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:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(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:254: ./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)}(hj5h]hstruct drm_connector *connector}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhj/ubj)}(hhh]h)}(h?drm_connector on which content protection state needs an updateh]h?drm_connector on which content protection state needs an update}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhMhj,ubjn)}(h9``u64 val`` New state of the content protection property h](jt)}(h ``u64 val``h]jz)}(hjnh]hu64 val}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./drivers/gpu/drm/display/drm_hdcp_helper.chMhjhubj)}(hhh]h)}(h,New state of the content protection propertyh]h,New state of the content protection property}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:254: ./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:254: ./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&]uh1hhjhhhhhMubh)}(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:260: ./drivers/gpu/drm/display/drm_dp_helper.chKChjhhubh)}(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:260: ./drivers/gpu/drm/display/drm_dp_helper.chM:hjhhubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:260: ./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:263: ./include/drm/display/drm_dp.hhNubj)}(hhh](j)}(h dp_sdp_headerh]j)}(hstruct dp_sdp_headerh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhKubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhKubj)}(h dp_sdp_headerh]j)}(hj/h]h dp_sdp_header}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhjBhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj-hhhjBhKubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhjBhKhj*hhubj)}(hhh]h)}(hDP secondary data packet headerh]hDP secondary data packet header}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjBhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhj)hNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjubj@)}(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:263: ./include/drm/display/drm_dp.hhMhjubh)}(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:263: ./include/drm/display/drm_dp.hhMhjubji)}(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:263: ./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:263: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(hSecondary Data Packet Typeh]hSecondary Data Packet Type}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhjubjn)}(h6``HB2`` Secondary Data Packet Specific header, Byte 0 h](jt)}(h``HB2``h]jz)}(hjVh]hHB2}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjPubj)}(hhh]h)}(h-Secondary Data Packet Specific header, Byte 0h]h-Secondary Data Packet Specific header, Byte 0}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjubjn)}(h5``HB3`` Secondary Data packet Specific header, Byte 1h](jt)}(h``HB3``h]jz)}(hjh]hHB3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjubj)}(hhh]h)}(h-Secondary Data packet Specific header, Byte 1h]h-Secondary Data packet Specific header, Byte 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./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&]uh1jhjhhhj)hNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_sdp (C struct)c.dp_sdphNtauh1jxhjhhhj)hNubj)}(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:263: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdp_sdph]j)}(hjh]hdp_sdp}(hj hhhNhNubah}(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)}(hDP secondary data packeth]hDP secondary data packet}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj( hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjC jjC jjjuh1jhhhjhj)hNubj)}(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}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjK ubh:}(hjK hhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjG ubj@)}(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]; };}hjh sbah}(h]h ]h"]h$]h&]jjuh1j?ha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjG ubh)}(h **Members**h]j%)}(hjy h]hMembers}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjw ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjG ubji)}(hhh](jn)}(h/``sdp_header`` DP secondary data packet header h](jt)}(h``sdp_header``h]jz)}(hj h]h sdp_header}(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:263: ./include/drm/display/drm_dp.hhMhj ubj)}(hhh]h)}(hDP secondary data packet headerh]hDP secondary data packet header}(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)}(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)}(hj h]hdb}(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:263: ./include/drm/display/drm_dp.hhMhj ubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhhjG ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj)hNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_pixelformat (C enum)c.dp_pixelformathNtauh1jxhjhhhj)hNubj)}(hhh](j)}(hdp_pixelformath]j)}(henum dp_pixelformath](j)}(hjh]henum}(hj+!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'!hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hj9!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'!hhhj8!hMubj)}(hdp_pixelformath]j)}(hj%!h]hdp_pixelformat}(hjK!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'!hhhj8!hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj#!hhhj8!hMubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj8!hMhj !hhubj)}(hhh]h)}(hdrm DP Pixel encoding formatsh]hdrm DP Pixel encoding formats}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjj!hhubah}(h]h ]h"]h$]h&]uh1jhj !hhhj8!hMubeh}(h]h ](jenumeh"]h$]h&]jjjj!jj!jjjuh1jhhhjhj)hNubj)}(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%)}(hj!h]h Constants}(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:263: ./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)}(hj!h]hDP_PIXELFORMAT_RGB}(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:263: ./include/drm/display/drm_dp.hhMhj!ubj)}(hhh]h)}(hRGB pixel encoding formath]hRGB pixel encoding format}(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<``DP_PIXELFORMAT_YUV444`` YCbCr 4:4:4 pixel encoding format h](jt)}(h``DP_PIXELFORMAT_YUV444``h]jz)}(hj!h]hDP_PIXELFORMAT_YUV444}(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:263: ./include/drm/display/drm_dp.hhMhj!ubj)}(hhh]h)}(h!YCbCr 4:4:4 pixel encoding formath]h!YCbCr 4:4:4 pixel encoding format}(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<``DP_PIXELFORMAT_YUV422`` YCbCr 4:2:2 pixel encoding format h](jt)}(h``DP_PIXELFORMAT_YUV422``h]jz)}(hj "h]hDP_PIXELFORMAT_YUV422}(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:263: ./include/drm/display/drm_dp.hhMhj"ubj)}(hhh]h)}(h!YCbCr 4:2:2 pixel encoding formath]h!YCbCr 4:2:2 pixel encoding format}(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<``DP_PIXELFORMAT_YUV420`` YCbCr 4:2:0 pixel encoding format h](jt)}(h``DP_PIXELFORMAT_YUV420``h]jz)}(hjY"h]hDP_PIXELFORMAT_YUV420}(hj["hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW"ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjS"ubj)}(hhh]h)}(h!YCbCr 4:2:0 pixel encoding formath]h!YCbCr 4:2:0 pixel encoding format}(hjr"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn"hMhjo"ubah}(h]h ]h"]h$]h&]uh1jhjS"ubeh}(h]h ]h"]h$]h&]uh1jmhjn"hMhj!ubjn)}(h7``DP_PIXELFORMAT_Y_ONLY`` Y Only pixel encoding format h](jt)}(h``DP_PIXELFORMAT_Y_ONLY``h]jz)}(hj"h]hDP_PIXELFORMAT_Y_ONLY}(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:263: ./include/drm/display/drm_dp.hhMhj"ubj)}(hhh]h)}(hY Only pixel encoding formath]hY Only pixel encoding format}(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)}(h1``DP_PIXELFORMAT_RAW`` RAW pixel encoding format h](jt)}(h``DP_PIXELFORMAT_RAW``h]jz)}(hj"h]hDP_PIXELFORMAT_RAW}(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:263: ./include/drm/display/drm_dp.hhMhj"ubj)}(hhh]h)}(hRAW pixel encoding formath]hRAW pixel encoding format}(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:``DP_PIXELFORMAT_RESERVED`` Reserved pixel encoding formath](jt)}(h``DP_PIXELFORMAT_RESERVED``h]jz)}(hj#h]hDP_PIXELFORMAT_RESERVED}(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:263: ./include/drm/display/drm_dp.hhMhj"ubj)}(hhh]h)}(hReserved pixel encoding formath]hReserved pixel encoding format}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj#hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj)hNubh)}(h**Description**h]j%)}(hjG#h]h Description}(hjI#hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjE#ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./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]}(hj]#hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_colorimetry (C enum)c.dp_colorimetryhNtauh1jxhjhhhj)hNubj)}(hhh](j)}(hdp_colorimetryh]j)}(henum dp_colorimetryh](j)}(hjh]henum}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubj)}(hdp_colorimetryh]j)}(hj#h]hdp_colorimetry}(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]jx#ah ](jjeh"]h$]h&]jj)jhuh1jhj#hMhjz#hhubj)}(hhh]h)}(hdrm DP Colorimetry formatsh]hdrm DP Colorimetry formats}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1jhjz#hhhj#hMubeh}(h]h ](jenumeh"]h$]h&]jjjj#jj#jjjuh1jhhhjhj)hNubj)}(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%)}(hj#h]h Constants}(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:263: ./include/drm/display/drm_dp.hhMhj#ubji)}(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)}(hj$h]hDP_COLORIMETRY_DEFAULT}(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:263: ./include/drm/display/drm_dp.hhMhj$ubj)}(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}(hj!$hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj#ubjn)}(hP``DP_COLORIMETRY_RGB_WIDE_FIXED`` RGB wide gamut fixed point colorimetry format h](jt)}(h!``DP_COLORIMETRY_RGB_WIDE_FIXED``h]jz)}(hjB$h]hDP_COLORIMETRY_RGB_WIDE_FIXED}(hjD$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@$ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj<$ubj)}(hhh]h)}(h-RGB wide gamut fixed point colorimetry formath]h-RGB wide gamut fixed point colorimetry format}(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=``DP_COLORIMETRY_BT709_YCC`` ITU-R BT.709 colorimetry format h](jt)}(h``DP_COLORIMETRY_BT709_YCC``h]jz)}(hj{$h]hDP_COLORIMETRY_BT709_YCC}(hj}$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjy$ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhju$ubj)}(hhh]h)}(hITU-R BT.709 colorimetry formath]hITU-R BT.709 colorimetry format}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhju$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj#ubjn)}(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)}(hj$h]hDP_COLORIMETRY_RGB_WIDE_FLOAT}(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:263: ./include/drm/display/drm_dp.hhMhj$ubj)}(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}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj#ubjn)}(h9``DP_COLORIMETRY_XVYCC_601`` xvYCC601 colorimetry format h](jt)}(h``DP_COLORIMETRY_XVYCC_601``h]jz)}(hj$h]hDP_COLORIMETRY_XVYCC_601}(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:263: ./include/drm/display/drm_dp.hhM hj$ubj)}(hhh]h)}(hxvYCC601 colorimetry formath]hxvYCC601 colorimetry format}(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)}(h2``DP_COLORIMETRY_OPRGB`` OpRGB colorimetry format h](jt)}(h``DP_COLORIMETRY_OPRGB``h]jz)}(hj'%h]hDP_COLORIMETRY_OPRGB}(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:263: ./include/drm/display/drm_dp.hhM hj!%ubj)}(hhh]h)}(hOpRGB colorimetry formath]hOpRGB colorimetry format}(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)}(h9``DP_COLORIMETRY_XVYCC_709`` xvYCC709 colorimetry format h](jt)}(h``DP_COLORIMETRY_XVYCC_709``h]jz)}(hj`%h]hDP_COLORIMETRY_XVYCC_709}(hjb%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^%ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjZ%ubj)}(hhh]h)}(hxvYCC709 colorimetry formath]hxvYCC709 colorimetry format}(hjy%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju%hMhjv%ubah}(h]h ]h"]h$]h&]uh1jhjZ%ubeh}(h]h ]h"]h$]h&]uh1jmhju%hMhj#ubjn)}(hI``DP_COLORIMETRY_DCI_P3_RGB`` DCI-P3 (SMPTE RP 431-2) colorimetry format h](jt)}(h``DP_COLORIMETRY_DCI_P3_RGB``h]jz)}(hj%h]hDP_COLORIMETRY_DCI_P3_RGB}(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:263: ./include/drm/display/drm_dp.hhMhj%ubj)}(hhh]h)}(h*DCI-P3 (SMPTE RP 431-2) colorimetry formath]h*DCI-P3 (SMPTE RP 431-2) colorimetry format}(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)}(h7``DP_COLORIMETRY_SYCC_601`` sYCC601 colorimetry format h](jt)}(h``DP_COLORIMETRY_SYCC_601``h]jz)}(hj%h]hDP_COLORIMETRY_SYCC_601}(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:263: ./include/drm/display/drm_dp.hhMhj%ubj)}(hhh]h)}(hsYCC601 colorimetry formath]hsYCC601 colorimetry format}(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)}(hJ``DP_COLORIMETRY_RGB_CUSTOM`` RGB Custom Color Profile colorimetry format h](jt)}(h``DP_COLORIMETRY_RGB_CUSTOM``h]jz)}(hj &h]hDP_COLORIMETRY_RGB_CUSTOM}(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:263: ./include/drm/display/drm_dp.hhMhj&ubj)}(hhh]h)}(h+RGB Custom Color Profile colorimetry formath]h+RGB Custom Color Profile colorimetry format}(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)}(h9``DP_COLORIMETRY_OPYCC_601`` opYCC601 colorimetry format h](jt)}(h``DP_COLORIMETRY_OPYCC_601``h]jz)}(hjD&h]hDP_COLORIMETRY_OPYCC_601}(hjF&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB&ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj>&ubj)}(hhh]h)}(hopYCC601 colorimetry formath]hopYCC601 colorimetry format}(hj]&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY&hMhjZ&ubah}(h]h ]h"]h$]h&]uh1jhj>&ubeh}(h]h ]h"]h$]h&]uh1jmhjY&hMhj#ubjn)}(hH``DP_COLORIMETRY_BT2020_RGB`` ITU-R BT.2020 R' G' B' colorimetry format h](jt)}(h``DP_COLORIMETRY_BT2020_RGB``h]jz)}(hj}&h]hDP_COLORIMETRY_BT2020_RGB}(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:263: ./include/drm/display/drm_dp.hhMhjw&ubj)}(hhh]h)}(h)ITU-R BT.2020 R' G' B' colorimetry formath]h/ITU-R BT.2020 R’ G’ B’ colorimetry format}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhjw&ubeh}(h]h ]h"]h$]h&]uh1jmhj&hMhj#ubjn)}(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)}(hj&h]hDP_COLORIMETRY_BT2020_CYCC}(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:263: ./include/drm/display/drm_dp.hhM"hj&ubj)}(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}(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)}(hI``DP_COLORIMETRY_BT2020_YCC`` ITU-R BT.2020 Y' C'b C'r colorimetry formath](jt)}(h``DP_COLORIMETRY_BT2020_YCC``h]jz)}(hj&h]hDP_COLORIMETRY_BT2020_YCC}(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:263: ./include/drm/display/drm_dp.hhM$hj&ubj)}(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}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM%hj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jmhj'hM$hj#ubeh}(h]h ]h"]h$]h&]uh1jhhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj)hNubh)}(h**Description**h]j%)}(hj2'h]h Description}(hj4'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0'ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM'hjhhubh)}(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.}(hjH'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_dynamic_range (C enum)c.dp_dynamic_rangehNtauh1jxhjhhhj)hNubj)}(hhh](j)}(hdp_dynamic_rangeh]j)}(henum dp_dynamic_rangeh](j)}(hjh]henum}(hjp'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl'hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMubj)}(h h]h }(hj~'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl'hhhj}'hMubj)}(hdp_dynamic_rangeh]j)}(hjj'h]hdp_dynamic_range}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjl'hhhj}'hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjh'hhhj}'hMubah}(h]jc'ah ](jjeh"]h$]h&]jj)jhuh1jhj}'hMhje'hhubj)}(hhh]h)}(hdrm DP Dynamic Rangeh]hdrm DP Dynamic Range}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMhj'hhubah}(h]h ]h"]h$]h&]uh1jhje'hhhj}'hMubeh}(h]h ](jenumeh"]h$]h&]jjjj'jj'jjjuh1jhhhjhj)hNubj)}(h[**Constants** ``DP_DYNAMIC_RANGE_VESA`` VESA range ``DP_DYNAMIC_RANGE_CTA`` CTA rangeh](h)}(h **Constants**h]j%)}(hj'h]h Constants}(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:263: ./include/drm/display/drm_dp.hhM"hj'ubji)}(hhh](jn)}(h%``DP_DYNAMIC_RANGE_VESA`` VESA range h](jt)}(h``DP_DYNAMIC_RANGE_VESA``h]jz)}(hj'h]hDP_DYNAMIC_RANGE_VESA}(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:263: ./include/drm/display/drm_dp.hhM%hj'ubj)}(hhh]h)}(h VESA rangeh]h VESA range}(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"``DP_DYNAMIC_RANGE_CTA`` CTA rangeh](jt)}(h``DP_DYNAMIC_RANGE_CTA``h]jz)}(hj,(h]hDP_DYNAMIC_RANGE_CTA}(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:263: ./include/drm/display/drm_dp.hhM'hj&(ubj)}(hhh]h)}(h CTA rangeh]h CTA range}(hjE(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM(hjB(ubah}(h]h ]h"]h$]h&]uh1jhj&(ubeh}(h]h ]h"]h$]h&]uh1jmhjA(hM'hj'ubeh}(h]h ]h"]h$]h&]uh1jhhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj)hNubh)}(h**Description**h]j%)}(hjo(h]h Description}(hjq(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjm(ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM*hjhhubh)}(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:263: ./include/drm/display/drm_dp.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdp_content_type (C enum)c.dp_content_typehNtauh1jxhjhhhj)hNubj)}(hhh](j)}(hdp_content_typeh]j)}(henum dp_content_typeh](j)}(hjh]henum}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM&ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hM&ubj)}(hdp_content_typeh]j)}(hj(h]hdp_content_type}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]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)}(hdrm DP Content Typeh]hdrm DP Content Type}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM-hj(hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hM&ubeh}(h]h ](jenumeh"]h$]h&]jjjj)jj)jjjuh1jhhhjhj)hNubj)}(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%)}(hj)h]h Constants}(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:263: ./include/drm/display/drm_dp.hhM1hj )ubji)}(hhh](jn)}(h1``DP_CONTENT_TYPE_NOT_DEFINED`` Not defined type h](jt)}(h``DP_CONTENT_TYPE_NOT_DEFINED``h]jz)}(hj0)h]hDP_CONTENT_TYPE_NOT_DEFINED}(hj2)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.)ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM4hj*)ubj)}(hhh]h)}(hNot defined typeh]hNot defined type}(hjI)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE)hM4hjF)ubah}(h]h ]h"]h$]h&]uh1jhj*)ubeh}(h]h ]h"]h$]h&]uh1jmhjE)hM4hj')ubjn)}(h+``DP_CONTENT_TYPE_GRAPHICS`` Graphics type h](jt)}(h``DP_CONTENT_TYPE_GRAPHICS``h]jz)}(hji)h]hDP_CONTENT_TYPE_GRAPHICS}(hjk)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg)ubah}(h]h ]h"]h$]h&]uh1jsha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM7hjc)ubj)}(hhh]h)}(h Graphics typeh]h Graphics type}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~)hM7hj)ubah}(h]h ]h"]h$]h&]uh1jhjc)ubeh}(h]h ]h"]h$]h&]uh1jmhj~)hM7hj')ubjn)}(h%``DP_CONTENT_TYPE_PHOTO`` Photo type h](jt)}(h``DP_CONTENT_TYPE_PHOTO``h]jz)}(hj)h]hDP_CONTENT_TYPE_PHOTO}(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:263: ./include/drm/display/drm_dp.hhM:hj)ubj)}(hhh]h)}(h Photo typeh]h Photo type}(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%``DP_CONTENT_TYPE_VIDEO`` Video type h](jt)}(h``DP_CONTENT_TYPE_VIDEO``h]jz)}(hj)h]hDP_CONTENT_TYPE_VIDEO}(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:263: ./include/drm/display/drm_dp.hhM=hj)ubj)}(hhh]h)}(h Video typeh]h Video type}(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"``DP_CONTENT_TYPE_GAME`` Game typeh](jt)}(h``DP_CONTENT_TYPE_GAME``h]jz)}(hj*h]hDP_CONTENT_TYPE_GAME}(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:263: ./include/drm/display/drm_dp.hhM?hj*ubj)}(hhh]h)}(h Game typeh]h Game type}(hj-*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhM@hj**ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jmhj)*hM?hj')ubeh}(h]h ]h"]h$]h&]uh1jhhj )ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj)hNubh)}(h**Description**h]j%)}(hjW*h]h Description}(hjY*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjU*ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./include/drm/display/drm_dp.hhMBhjhhubh)}(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}(hjm*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:263: ./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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hKubj)}(hdrm_dp_vsc_sdph]j)}(hj*h]hdrm_dp_vsc_sdp}(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)}(hdrm DP VSC SDPh]hdrm DP VSC SDP}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKKhj*hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hKubeh}(h]h ](jstructeh"]h$]h&]jjjj*jj*jjjuh1jhhhjhNhNubj)}(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}(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:266: ./include/drm/display/drm_dp_helper.hhKOhj*ubj@)}(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; };}hj+sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKQhj*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:266: ./include/drm/display/drm_dp_helper.hhK\hj*ubji)}(hhh](jn)}(h(``sdp_type`` secondary-data packet type h](jt)}(h ``sdp_type``h]jz)}(hjD+h]hsdp_type}(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:266: ./include/drm/display/drm_dp_helper.hhKRhj>+ubj)}(hhh]h)}(hsecondary-data packet typeh]hsecondary-data packet type}(hj]+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY+hKRhjZ+ubah}(h]h ]h"]h$]h&]uh1jhj>+ubeh}(h]h ]h"]h$]h&]uh1jmhjY+hKRhj;+ubjn)}(h``revision`` revision number h](jt)}(h ``revision``h]jz)}(hj}+h]hrevision}(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:266: ./include/drm/display/drm_dp_helper.hhKShjw+ubj)}(hhh]h)}(hrevision numberh]hrevision number}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKShj+ubah}(h]h ]h"]h$]h&]uh1jhjw+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKShj;+ubjn)}(h&``length`` number of valid data bytes h](jt)}(h ``length``h]jz)}(hj+h]hlength}(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:266: ./include/drm/display/drm_dp_helper.hhKThj+ubj)}(hhh]h)}(hnumber of valid data bytesh]hnumber of valid data bytes}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKThj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKThj;+ubjn)}(h&``pixelformat`` pixel encoding format h](jt)}(h``pixelformat``h]jz)}(hj+h]h pixelformat}(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:266: ./include/drm/display/drm_dp_helper.hhKUhj+ubj)}(hhh]h)}(hpixel encoding formath]hpixel encoding format}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKUhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj,hKUhj;+ubjn)}(h#``colorimetry`` colorimetry format h](jt)}(h``colorimetry``h]jz)}(hj(,h]h colorimetry}(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:266: ./include/drm/display/drm_dp_helper.hhKVhj",ubj)}(hhh]h)}(hcolorimetry formath]hcolorimetry format}(hjA,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=,hKVhj>,ubah}(h]h ]h"]h$]h&]uh1jhj",ubeh}(h]h ]h"]h$]h&]uh1jmhj=,hKVhj;+ubjn)}(h``bpc`` bit per color h](jt)}(h``bpc``h]jz)}(hja,h]hbpc}(hjc,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_,ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKWhj[,ubj)}(hhh]h)}(h bit per colorh]h bit per color}(hjz,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv,hKWhjw,ubah}(h]h ]h"]h$]h&]uh1jhj[,ubeh}(h]h ]h"]h$]h&]uh1jmhjv,hKWhj;+ubjn)}(h,``dynamic_range`` dynamic range information h](jt)}(h``dynamic_range``h]jz)}(hj,h]h dynamic_range}(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:266: ./include/drm/display/drm_dp_helper.hhKXhj,ubj)}(hhh]h)}(hdynamic range informationh]hdynamic range information}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKXhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hKXhj;+ubjn)}(hY``content_type`` CTA-861-G defines content types and expected processing by a sink deviceh](jt)}(h``content_type``h]jz)}(hj,h]h content_type}(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:266: ./include/drm/display/drm_dp_helper.hhKXhj,ubj)}(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}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKYhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj,hKXhj;+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:266: ./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]}(hj,-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./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}(hjT-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP-hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKSubj)}(h h]h }(hjb-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP-hhhja-hKSubj)}(h drm_dp_as_sdph]j)}(hjN-h]h drm_dp_as_sdp}(hjt-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjP-hhhja-hKSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjL-hhhja-hKSubah}(h]jG-ah ](jjeh"]h$]h&]jj)jhuh1jhja-hKShjI-hhubj)}(hhh]h)}(hdrm DP Adaptive Sync SDPh]hdrm DP Adaptive Sync SDP}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKfhj-hhubah}(h]h ]h"]h$]h&]uh1jhjI-hhhja-hKSubeh}(h]h ](jstructeh"]h$]h&]jjjj-jj-jjjuh1jhhhjhNhNubj)}(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}(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:266: ./include/drm/display/drm_dp_helper.hhKjhj-ubj@)}(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; };}hj-sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKlhj-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:266: ./include/drm/display/drm_dp_helper.hhKxhj-ubji)}(hhh](jn)}(h(``sdp_type`` Secondary-data packet type h](jt)}(h ``sdp_type``h]jz)}(hj.h]hsdp_type}(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:266: ./include/drm/display/drm_dp_helper.hhKmhj-ubj)}(hhh]h)}(hSecondary-data packet typeh]hSecondary-data packet type}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKmhj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj.hKmhj-ubjn)}(h``revision`` Revision Number h](jt)}(h ``revision``h]jz)}(hj<.h]hrevision}(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:266: ./include/drm/display/drm_dp_helper.hhKnhj6.ubj)}(hhh]h)}(hRevision Numberh]hRevision Number}(hjU.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ.hKnhjR.ubah}(h]h ]h"]h$]h&]uh1jhj6.ubeh}(h]h ]h"]h$]h&]uh1jmhjQ.hKnhj-ubjn)}(h&``length`` Number of valid data bytes h](jt)}(h ``length``h]jz)}(hju.h]hlength}(hjw.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs.ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKohjo.ubj)}(hhh]h)}(hNumber of valid data bytesh]hNumber of valid data bytes}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKohj.ubah}(h]h ]h"]h$]h&]uh1jhjo.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hKohj-ubjn)}(h#``vtotal`` Minimum Vertical Vtotal h](jt)}(h ``vtotal``h]jz)}(hj.h]hvtotal}(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:266: ./include/drm/display/drm_dp_helper.hhKphj.ubj)}(hhh]h)}(hMinimum Vertical Vtotalh]hMinimum Vertical Vtotal}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKphj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hKphj-ubjn)}(h``target_rr`` Target Refresh h](jt)}(h ``target_rr``h]jz)}(hj.h]h target_rr}(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:266: ./include/drm/display/drm_dp_helper.hhKqhj.ubj)}(hhh]h)}(hTarget Refreshh]hTarget Refresh}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKqhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hKqhj-ubjn)}(h8``duration_incr_ms`` Successive frame duration increase h](jt)}(h``duration_incr_ms``h]jz)}(hj /h]hduration_incr_ms}(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:266: ./include/drm/display/drm_dp_helper.hhKrhj/ubj)}(hhh]h)}(h"Successive frame duration increaseh]h"Successive frame duration increase}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5/hKrhj6/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj5/hKrhj-ubjn)}(h8``duration_decr_ms`` Successive frame duration decrease h](jt)}(h``duration_decr_ms``h]jz)}(hjY/h]hduration_decr_ms}(hj[/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW/ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKshjS/ubj)}(hhh]h)}(h"Successive frame duration decreaseh]h"Successive frame duration decrease}(hjr/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn/hKshjo/ubah}(h]h ]h"]h$]h&]uh1jhjS/ubeh}(h]h ]h"]h$]h&]uh1jmhjn/hKshj-ubjn)}(h2``target_rr_divider`` Target refresh rate divider h](jt)}(h``target_rr_divider``h]jz)}(hj/h]htarget_rr_divider}(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:266: ./include/drm/display/drm_dp_helper.hhKthj/ubj)}(hhh]h)}(hTarget refresh rate dividerh]hTarget refresh rate divider}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKthj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hKthj-ubjn)}(h%``mode`` Adaptive Sync Operation Modeh](jt)}(h``mode``h]jz)}(hj/h]hmode}(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:266: ./include/drm/display/drm_dp_helper.hhKthj/ubj)}(hhh]h)}(hAdaptive Sync Operation Modeh]hAdaptive Sync Operation Mode}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKuhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj/hKthj-ubeh}(h]h ]h"]h$]h&]uh1jhhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j%)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj 0ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./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]}(hj$0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./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}(hjL0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH0hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKubj)}(h h]h }(hjZ0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH0hhhjY0hKubj)}(hdrm_dp_dsc_sink_supports_formath]j)}(hdrm_dp_dsc_sink_supports_formath]hdrm_dp_dsc_sink_supports_format}(hjl0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjH0hhhjY0hKubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hu8h]hu8}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jjn0sb!c.drm_dp_dsc_sink_supports_formatasbuh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hdsc_dpcdh]hdsc_dpcd}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(h[h]h[}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubh)}(hhh]j)}(hDP_DSC_RECEIVER_CAP_SIZEh]hDP_DSC_RECEIVER_CAP_SIZE}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j0!c.drm_dp_dsc_sink_supports_formatasbuh1hhj0ubj9)}(h]h]h]}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hu8 output_formath](h)}(hhh]j)}(hu8h]hu8}(hj-1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/1modnameN classnameNjj)}j]j0!c.drm_dp_dsc_sink_supports_formatasbuh1hhj&1ubj)}(h h]h }(hjK1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&1ubj)}(h output_formath]h output_format}(hjY1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjH0hhhjY0hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjD0hhhjY0hKubah}(h]j?0ah ](jjeh"]h$]h&]jj)jhuh1jhjY0hKhjA0hhubj)}(hhh]h)}(h3check if sink supports DSC with given output formath]h3check if sink supports DSC with given output format}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKhj1hhubah}(h]h ]h"]h$]h&]uh1jhjA0hhhjY0hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jhhhjhNhNubj)}(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%)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKhj1ubji)}(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)}(hj1h]h+const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKhj1ubj)}(hhh]h)}(h DSC-capability DPCDs of the sinkh]h DSC-capability DPCDs of the sink}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj1hKhj1ubjn)}(h:``u8 output_format`` output_format which is to be checked h](jt)}(h``u8 output_format``h]jz)}(hj1h]hu8 output_format}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKhj1ubj)}(hhh]h)}(h$output_format which is to be checkedh]h$output_format which is to be checked}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj2hKhj1ubeh}(h]h ]h"]h$]h&]uh1jhhj1ubh)}(h**Description**h]j%)}(hj82h]h Description}(hj:2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj62ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKhj1ubh)}(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.}(hjN2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhKhj1ubeh}(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}(hj}2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy2hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy2hhhj2hMubj)}(hdrm_edp_backlight_supportedh]j)}(hdrm_edp_backlight_supportedh]hdrm_edp_backlight_supported}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjy2hhhj2hMubj)}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(hu8h]hu8}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jj2sbc.drm_edp_backlight_supportedasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hedp_dpcdh]hedp_dpcd}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(hj0h]h[}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubh)}(hhh]j)}(hEDP_DISPLAY_CTL_CAP_SIZEh]hEDP_DISPLAY_CTL_CAP_SIZE}(hj#3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%3modnameN classnameNjj)}j]j2c.drm_edp_backlight_supportedasbuh1hhj2ubj9)}(hj1h]h]}(hjA3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhjy2hhhj2hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhju2hhhj2hMubah}(h]jp2ah ](jjeh"]h$]h&]jj)jhuh1jhj2hMhjr2hhubj)}(hhh]h)}(h,Check an eDP DPCD for VESA backlight supporth]h,Check an eDP DPCD for VESA backlight support}(hjj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjg3hhubah}(h]h ]h"]h$]h&]uh1jhjr2hhhj2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhjhNhNubj)}(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%)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj3ubji)}(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)}(hj3h]h+const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj3ubj)}(hhh]h)}(hThe DPCD to checkh]hThe DPCD to check}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhhj3ubh)}(h**Description**h]j%)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj3ubh)}(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 }(hj3hhhNhNubjz)}(h ``false``h]hfalse}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh 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.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj3ubh)}(h **Return**h]j%)}(hj4h]hReturn}(hj!4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj3ubh)}(hb``True`` if **edp_dpcd** indicates that VESA backlight controls are supported, ``false`` otherwiseh](jz)}(h``True``h]hTrue}(hj94hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj54ubh if }(hj54hhhNhNubj%)}(h **edp_dpcd**h]hedp_dpcd}(hjK4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj54ubh7 indicates that VESA backlight controls are supported, }(hj54hhhNhNubjz)}(h ``false``h]hfalse}(hj]4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj54ubh otherwise}(hj54hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj3ubeh}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM'ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hM'ubj)}(hdrm_dp_is_uhbr_rateh]j)}(hdrm_dp_is_uhbr_rateh]hdrm_dp_is_uhbr_rate}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhj4hM'ubj)}(h(int link_rate)h]j)}(h int link_rateh](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h link_rateh]h link_rate}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubah}(h]h ]h"]h$]h&]jjuh1jhj4hhhj4hM'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhj4hM'ubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhj4hM'hj4hhubj)}(hhh]h)}(h Determine if a link rate is UHBRh]h Determine if a link rate is UHBR}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM'hj5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj05jj05jjjuh1jhhhjhNhNubj)}(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%)}(hj:5h]h Parameters}(hj<5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj85ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM+hj45ubji)}(hhh]jn)}(h/``int link_rate`` link rate in 10kbits/s units h](jt)}(h``int link_rate``h]jz)}(hjY5h]h int link_rate}(hj[5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjW5ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM(hjS5ubj)}(hhh]h)}(hlink rate in 10kbits/s unitsh]hlink rate in 10kbits/s units}(hjr5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn5hM(hjo5ubah}(h]h ]h"]h$]h&]uh1jhjS5ubeh}(h]h ]h"]h$]h&]uh1jmhjn5hM(hjP5ubah}(h]h ]h"]h$]h&]uh1jhhj45ubh)}(h**Description**h]j%)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM*hj45ubh)}(h4Determine if the provided link rate is an UHBR rate.h]h4Determine if the provided link rate is an UHBR rate.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM)hj45ubh)}(h **Return**h]j%)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM+hj45ubh)}(h*``True`` if **link_rate** is an UHBR rate.h](jz)}(h``True``h]hTrue}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubh if }(hj5hhhNhNubj%)}(h **link_rate**h]h link_rate}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubh is an UHBR rate.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM,hj45ubeh}(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}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM1ubj)}(h h]h }(hj.6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj-6hM1ubj)}(hdrm_dp_aux_msgh]j)}(hj6h]hdrm_dp_aux_msg}(hj@6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhj-6hM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj6hhhj-6hM1ubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhj-6hM1hj6hhubj)}(hhh]h)}(h#DisplayPort AUX channel transactionh]h#DisplayPort AUX channel transaction}(hjb6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM8hj_6hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj-6hM1ubeh}(h]h ](jstructeh"]h$]h&]jjjjz6jjz6jjjuh1jhhhjhNhNubj)}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubh:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM<hj~6ubj@)}(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; };}hj6sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM>hj~6ubh)}(h **Members**h]j%)}(hj6h]hMembers}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMFhj~6ubji)}(hhh](jn)}(h6``address`` address of the (first) register to access h](jt)}(h ``address``h]jz)}(hj6h]haddress}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM:hj6ubj)}(hhh]h)}(h)address of the (first) register to accessh]h)address of the (first) register to access}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM:hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhj6hM:hj6ubjn)}(hC``request`` contains the type of transaction (see DP_AUX_* macros) h](jt)}(h ``request``h]jz)}(hj7h]hrequest}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM;hj7ubj)}(hhh]h)}(h6contains the type of transaction (see DP_AUX_* macros)h]h6contains the type of transaction (see DP_AUX_* macros)}(hj!7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM;hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hM;hj6ubjn)}(hF``reply`` upon completion, contains the reply type of the transaction h](jt)}(h ``reply``h]jz)}(hjA7h]hreply}(hjC7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?7ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM<hj;7ubj)}(hhh]h)}(h;upon completion, contains the reply type of the transactionh]h;upon completion, contains the reply type of the transaction}(hjZ7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV7hM<hjW7ubah}(h]h ]h"]h$]h&]uh1jhj;7ubeh}(h]h ]h"]h$]h&]uh1jmhjV7hM<hj6ubjn)}(h9``buffer`` pointer to a transmission or reception buffer h](jt)}(h ``buffer``h]jz)}(hjz7h]hbuffer}(hj|7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx7ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM=hjt7ubj)}(hhh]h)}(h-pointer to a transmission or reception bufferh]h-pointer to a transmission or reception buffer}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM=hj7ubah}(h]h ]h"]h$]h&]uh1jhjt7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hM=hj6ubjn)}(h``size`` size of **buffer**h](jt)}(h``size``h]jz)}(hj7h]hsize}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM=hj7ubj)}(hhh]h)}(hsize of **buffer**h](hsize of }(hj7hhhNhNubj%)}(h **buffer**h]hbuffer}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM>hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hM=hj6ubeh}(h]h ]h"]h$]h&]uh1jhhj~6ubeh}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMDubj)}(h h]h }(hj)8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj(8hMDubj)}(hdrm_dp_aux_cech]j)}(hj8h]hdrm_dp_aux_cec}(hj;8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj78ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj(8hMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj(8hMDubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj(8hMDhj8hhubj)}(hhh]h)}(h"DisplayPort CEC-Tunneling-over-AUXh]h"DisplayPort CEC-Tunneling-over-AUX}(hj]8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMLhjZ8hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj(8hMDubeh}(h]h ](jstructeh"]h$]h&]jjjju8jju8jjjuh1jhhhjhNhNubj)}(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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}8ubh:}(hj}8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMPhjy8ubj@)}(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; };}hj8sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMRhjy8ubh)}(h **Members**h]j%)}(hj8h]hMembers}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMYhjy8ubji)}(hhh](jn)}(h&``lock`` mutex protecting this struct h](jt)}(h``lock``h]jz)}(hj8h]hlock}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMNhj8ubj)}(hhh]h)}(hmutex protecting this structh]hmutex protecting this struct}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMNhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj8hMNhj8ubjn)}(h=``adap`` the CEC adapter for CEC-Tunneling-over-AUX support. h](jt)}(h``adap``h]jz)}(hj9h]hadap}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMOhj8ubj)}(hhh]h)}(h3the CEC adapter for CEC-Tunneling-over-AUX support.h]h3the CEC adapter for CEC-Tunneling-over-AUX support.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMOhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj9hMOhj8ubjn)}(h@``connector`` the connector this CEC adapter is associated with h](jt)}(h ``connector``h]jz)}(hj<9h]h connector}(hj>9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:9ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMPhj69ubj)}(hhh]h)}(h1the connector this CEC adapter is associated withh]h1the connector this CEC adapter is associated with}(hjU9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ9hMPhjR9ubah}(h]h ]h"]h$]h&]uh1jhj69ubeh}(h]h ]h"]h$]h&]uh1jmhjQ9hMPhj8ubjn)}(h.``unregister_work`` unregister the CEC adapterh](jt)}(h``unregister_work``h]jz)}(hju9h]hunregister_work}(hjw9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjs9ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMPhjo9ubj)}(hhh]h)}(hunregister the CEC adapterh]hunregister the CEC adapter}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMQhj9ubah}(h]h ]h"]h$]h&]uh1jhjo9ubeh}(h]h ]h"]h$]h&]uh1jmhj9hMPhj8ubeh}(h]h ]h"]h$]h&]uh1jhhjy8ubeh}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMWubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMWubj)}(h drm_dp_auxh]j)}(hj9h]h drm_dp_aux}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhj9hMWubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhj9hMWubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhj9hMWhj9hhubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMZhj:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj9hMWubeh}(h]h ](jstructeh"]h$]h&]jjjj):jj):jjjuh1jhhhjhNhNubj)}(hXD**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; bool no_zero_sized; bool dpcd_probe_disabled; }; **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. ``no_zero_sized`` If the hw can't use zero sized transfers (NVIDIA) ``dpcd_probe_disabled`` If probing before a DPCD access is disabled.h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hj5:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1:ubh:}(hj1:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM^hj-:ubj@)}(hX>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; bool no_zero_sized; bool dpcd_probe_disabled; };h]hX>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; bool no_zero_sized; bool dpcd_probe_disabled; };}hjN:sbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM`hj-:ubh)}(h **Members**h]j%)}(hj_:h]hMembers}(hja: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:266: ./include/drm/display/drm_dp_helper.hhMthj-:ubji)}(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)}(hj~:h]hname}(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:266: ./include/drm/display/drm_dp_helper.hhMmhjx:ubj)}(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.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMihj:ubh)}(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}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:ubh, dev_name() of }(hj:hhhNhNubj%)}(h**dev**h]hdev}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:ubh will be used.}(hj:h]hhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMlhj:ubeh}(h]h ]h"]h$]h&]uh1jhjx:ubeh}(h]h ]h"]h$]h&]uh1jmhj:hMmhju:ubjn)}(hD``ddc`` I2C adapter that can be used for I2C-over-AUX communication h](jt)}(h``ddc``h]jz)}(hj:h]hddc}(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:266: ./include/drm/display/drm_dp_helper.hhMshj:ubj)}(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}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMrhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj;hMshju:ubjn)}(hJ``dev`` pointer to struct device that is the parent for this AUX channel. h](jt)}(h``dev``h]jz)}(hj%;h]hdev}(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:266: ./include/drm/display/drm_dp_helper.hhMyhj;ubj)}(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.}(hj>;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMxhj;;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj:;hMyhju:ubjn)}(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)}(hj_;h]hdrm_dev}(hja;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj];ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjY;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 }(hjx;hhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hj;h]h drm_device}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM~hjx;ubh1 that owns this AUX channel. Beware, this may be }(hjx;hhhNhNubjz)}(h``NULL``h]hNULL}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjx;ubh. before drm_dp_aux_register() has been called.}(hjx;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hM~hju;ubh)}(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 }(hj;hhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hj;h]h drm_device}(hj;hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj;ubh 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().}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMhju;ubeh}(h]h ]h"]h$]h&]uh1jhjY;ubeh}(h]h ]h"]h$]h&]uh1jmhjt;hMhju:ubjn)}(hJ``crtc`` backpointer to the crtc that is currently using this AUX channel 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:266: ./include/drm/display/drm_dp_helper.hhMhj;ubj)}(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}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj<hMhju:ubjn)}(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)}(hj:<h]hhw_mutex}(hj<<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8<ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj4<ubj)}(hhh](h)}(h*internal mutex used for locking transfers.h]h*internal mutex used for locking transfers.}(hjS<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjP<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.}(hjb<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjP<ubeh}(h]h ]h"]h$]h&]uh1jhj4<ubeh}(h]h ]h"]h$]h&]uh1jmhjO<hMhju:ubjn)}(h6``crc_work`` worker that captures CRCs for each frame h](jt)}(h ``crc_work``h]jz)}(hj<h]hcrc_work}(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:266: ./include/drm/display/drm_dp_helper.hhMhj}<ubj)}(hhh]h)}(h(worker that captures CRCs for each frameh]h(worker that captures CRCs for each frame}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj}<ubeh}(h]h ]h"]h$]h&]uh1jmhj<hMhju:ubjn)}(h-``crc_count`` counter of captured frame CRCs h](jt)}(h ``crc_count``h]jz)}(hj<h]h crc_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:266: ./include/drm/display/drm_dp_helper.hhMhj<ubj)}(hhh]h)}(hcounter of captured frame CRCsh]hcounter of captured frame CRCs}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj<hMhju:ubjn)}(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)}(hj<h]htransfer}(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:266: ./include/drm/display/drm_dp_helper.hhMhj<ubj)}(hhh](h)}(h:transfers a message representing a single AUX transaction.h]h:transfers a message representing a single AUX transaction.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj =ubh)}(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.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj =ubh)}(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 }(hj,=hhhNhNubh)}(h:c:type:`drm_dp_aux_msg`h]jz)}(hj6=h]hdrm_dp_aux_msg}(hj8=hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj4=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_aux_msguh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj,=ubh 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.}(hj,=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS=hMhj =ubh)}(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 }(hj^=hhhNhNubjz)}(h ``-EBUSY``h]h-EBUSY}(hjf=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^=ubhR error, which causes a transaction to be retried. On a short, helpers will return }(hj^=hhhNhNubjz)}(h ``-EPROTO``h]h-EPROTO}(hjx=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^=ubh) to make it simpler to check for failure.}(hj^=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj =ubh)}(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 }(hj=hhhNhNubj%)}(h**transfer\(\)**h]h transfer()}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubh2 function must only modify the reply field of the }(hj=hhhNhNubh)}(h:c:type:`drm_dp_aux_msg`h]jz)}(hj=h]hdrm_dp_aux_msg}(hj=hhhNhNubah}(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:266: ./include/drm/display/drm_dp_helper.hhMhj=ubhD structure. The retry logic and i2c helpers assume this is the case.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj =ubh)}(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 }(hj=hhhNhNubj%)}(h**dev**h]hdev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubhF is in and also no matter what state the panel is in. It’s expected:}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj =ubh)}(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 }(hj=hhhNhNubj%)}(h**dev**h]hdev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj=ubh\ providing the AUX bus is currently unpowered then it will power itself up for the transfer.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj=ubah}(h]h ]h"]h$]h&]uh1hhj=ubh)}(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.}(hj(>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj$>ubah}(h]h ]h"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj>hMhj =ubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj =hMhju:ubjn)}(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)}(hjU>h]hwait_hpd_asserted}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjS>ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjO>ubj)}(hhh](h)}(hwait for HPD to be assertedh]hwait for HPD to be asserted}(hjn>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubh)}(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.}(hj}>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubh)}(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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubh)}(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 }(hj>hhhNhNubhtitle_reference)}(h `wait_us`h]hwait_us}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubhe parameter that is passed in says that we know that the HPD signal is expected to be asserted within }(hj>hhhNhNubj>)}(h `wait_us`h]hwait_us}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubh8 microseconds. This function could wait for longer than }(hj>hhhNhNubj>)}(h `wait_us`h]hwait_us}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubh 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.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubh)}(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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubh)}(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 }(hj>hhhNhNubj>)}(h `wait_us`h]hwait_us}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj>ubhP of 0 means to wait forever. Like readx_poll_timeout(), this function may sleep.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubh)}(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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjk>ubeh}(h]h ]h"]h$]h&]uh1jhjO>ubeh}(h]h ]h"]h$]h&]uh1jmhjj>hMhju:ubjn)}(h=``i2c_nack_count`` Counts I2C NACKs, used for DP validation. h](jt)}(h``i2c_nack_count``h]jz)}(hj3?h]hi2c_nack_count}(hj5?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1?ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj-?ubj)}(hhh]h)}(h)Counts I2C NACKs, used for DP validation.h]h)Counts I2C NACKs, used for DP validation.}(hjL?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH?hMhjI?ubah}(h]h ]h"]h$]h&]uh1jhj-?ubeh}(h]h ]h"]h$]h&]uh1jmhjH?hMhju:ubjn)}(h?``i2c_defer_count`` Counts I2C DEFERs, used for DP validation. h](jt)}(h``i2c_defer_count``h]jz)}(hjl?h]hi2c_defer_count}(hjn?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjj?ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjf?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&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjf?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhju:ubjn)}(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&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj?ubj)}(hhh]h)}(h9struct containing fields used for CEC-Tunneling-over-AUX.h]h9struct containing fields used for CEC-Tunneling-over-AUX.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhju:ubjn)}(h@``is_remote`` Is this AUX CH actually using sideband messaging. h](jt)}(h ``is_remote``h]jz)}(hj?h]h is_remote}(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:266: ./include/drm/display/drm_dp_helper.hhMhj?ubj)}(hhh]h)}(h1Is this AUX CH actually using sideband messaging.h]h1Is this AUX CH actually using sideband messaging.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hMhju:ubjn)}(hC``powered_down`` If true then the remote endpoint is powered down. h](jt)}(h``powered_down``h]jz)}(hj@h]h powered_down}(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:266: ./include/drm/display/drm_dp_helper.hhMhj@ubj)}(hhh]h)}(h1If true then the remote endpoint is powered down.h]h1If true then the remote endpoint is powered down.}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,@hMhj-@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj,@hMhju:ubjn)}(hD``no_zero_sized`` If the hw can't use zero sized transfers (NVIDIA) h](jt)}(h``no_zero_sized``h]jz)}(hjP@h]h no_zero_sized}(hjR@hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjN@ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM hjJ@ubj)}(hhh]h)}(h1If the hw can't use zero sized transfers (NVIDIA)h]h3If the hw can’t use zero sized transfers (NVIDIA)}(hji@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje@hM hjf@ubah}(h]h ]h"]h$]h&]uh1jhjJ@ubeh}(h]h ]h"]h$]h&]uh1jmhje@hM hju:ubjn)}(hD``dpcd_probe_disabled`` If probing before a DPCD access is disabled.h](jt)}(h``dpcd_probe_disabled``h]jz)}(hj@h]hdpcd_probe_disabled}(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:266: ./include/drm/display/drm_dp_helper.hhMhj@ubj)}(hhh]h)}(h,If probing before a DPCD access is disabled.h]h,If probing before a DPCD access is disabled.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hMhju: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:266: ./include/drm/display/drm_dp_helper.hhMhjhhubh)}(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 }(hj@hhhNhNubj%)}(h**transfer\(\)**h]h transfer()}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj@ubhX 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.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM[hjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_dpcd_read_data (C function)c.drm_dp_dpcd_read_datahNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbint drm_dp_dpcd_read_data (struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h]j)}(haint drm_dp_dpcd_read_data(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMubj)}(h h]h }(hj+AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhj*AhMubj)}(hdrm_dp_dpcd_read_datah]j)}(hdrm_dp_dpcd_read_datah]hdrm_dp_dpcd_read_data}(hj=AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Aubah}(h]h ](jjeh"]h$]h&]jjuh1jhjAhhhj*AhMubj)}(hH(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjYAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUAubj)}(h h]h }(hjfAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUAubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjwAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjyAmodnameN classnameNjj)}j]j%)}jj?Asbc.drm_dp_dpcd_read_dataasbuh1hhjUAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUAubj9)}(hj9h]h*}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUAubj)}(hauxh]haux}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQAubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hoffseth]hoffset}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQAubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hj*BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hj8BhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hbufferh]hbuffer}(hjEBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQAubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjaBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Bubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcBmodnameN classnameNjj)}j]jAc.drm_dp_dpcd_read_dataasbuh1hhjZBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZBubj)}(hsizeh]hsize}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQAubeh}(h]h ]h"]h$]h&]jjuh1jhjAhhhj*AhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhj*AhMubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhj*AhMhjAhhubj)}(hhh]h)}(h$read a series of bytes from the DPCDh]h$read a series of bytes from the DPCD}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhj*AhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhjhNhNubj)}(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 zero (0) 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%)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM"hjBubji)}(hhh](jn)}(h@``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST or MST) h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjBh]hstruct drm_dp_aux *aux}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjBubj)}(hhh]h)}(h$DisplayPort AUX channel (SST or MST)h]h$DisplayPort AUX channel (SST or MST)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ChMhjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhj ChMhjBubjn)}(h@``unsigned int offset`` address of the (first) register to read h](jt)}(h``unsigned int offset``h]jz)}(hj1Ch]hunsigned int offset}(hj3ChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/Cubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM hj+Cubj)}(hhh]h)}(h'address of the (first) register to readh]h'address of the (first) register to read}(hjJChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFChM hjGCubah}(h]h ]h"]h$]h&]uh1jhj+Cubeh}(h]h ]h"]h$]h&]uh1jmhjFChM hjBubjn)}(h5``void *buffer`` buffer to store the register values h](jt)}(h``void *buffer``h]jz)}(hjjCh]h void *buffer}(hjlChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhCubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM!hjdCubj)}(hhh]h)}(h#buffer to store the register valuesh]h#buffer to store the register values}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM!hjCubah}(h]h ]h"]h$]h&]uh1jhjdCubeh}(h]h ]h"]h$]h&]uh1jmhjChM!hjBubjn)}(h.``size_t size`` number of bytes in **buffer** h](jt)}(h``size_t size``h]jz)}(hjCh]h size_t size}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM"hjCubj)}(hhh]h)}(hnumber of bytes in **buffer**h](hnumber of bytes in }(hjChhhNhNubj%)}(h **buffer**h]hbuffer}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubeh}(h]h ]h"]h$]h&]uh1hhjChM"hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChM"hjBubeh}(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&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM$hjBubh)}(hXReturns zero (0) 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 zero (0) 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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM#hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_dpcd_write_data (C function)c.drm_dp_dpcd_write_datahNtauh1jxhjhhhNhNubj)}(hhh](j)}(hcint drm_dp_dpcd_write_data (struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h]j)}(hbint drm_dp_dpcd_write_data(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hinth]hint}(hj1DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Dhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM;ubj)}(h h]h }(hj@DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Dhhhj?DhM;ubj)}(hdrm_dp_dpcd_write_datah]j)}(hdrm_dp_dpcd_write_datah]hdrm_dp_dpcd_write_data}(hjRDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-Dhhhj?DhM;ubj)}(hH(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjnDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjDubj)}(h h]h }(hj{DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjDubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j%)}jjTDsbc.drm_dp_dpcd_write_dataasbuh1hhjjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjDubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjDubj)}(hauxh]haux}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfDubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hj EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hoffseth]hoffset}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfDubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hj1EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Eubj)}(h h]h }(hj?EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Eubj9)}(hj9h]h*}(hjMEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-Eubj)}(hbufferh]hbuffer}(hjZEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-Eubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfDubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjvEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxEmodnameN classnameNjj)}j]jDc.drm_dp_dpcd_write_dataasbuh1hhjoEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoEubj)}(hsizeh]hsize}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfDubeh}(h]h ]h"]h$]h&]jjuh1jhj-Dhhhj?DhM;ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj)Dhhhj?DhM;ubah}(h]j$Dah ](jjeh"]h$]h&]jj)jhuh1jhj?DhM;hj&Dhhubj)}(hhh]h)}(h#write a series of bytes to the DPCDh]h#write a series of bytes to the DPCD}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM;hjEhhubah}(h]h ]h"]h$]h&]uh1jhj&Dhhhj?DhM;ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhjhNhNubj)}(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 zero (0) 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%)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM?hjEubji)}(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 Fh]hstruct drm_dp_aux *aux}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Fubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM<hjFubj)}(hhh]h)}(h$DisplayPort AUX channel (SST or MST)h]h$DisplayPort AUX channel (SST or MST)}(hj&FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"FhM<hj#Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhj"FhM<hjFubjn)}(hA``unsigned int offset`` address of the (first) register to write h](jt)}(h``unsigned int offset``h]jz)}(hjFFh]hunsigned int offset}(hjHFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDFubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM=hj@Fubj)}(hhh]h)}(h(address of the (first) register to writeh]h(address of the (first) register to write}(hj_FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[FhM=hj\Fubah}(h]h ]h"]h$]h&]uh1jhj@Fubeh}(h]h ]h"]h$]h&]uh1jmhj[FhM=hjFubjn)}(h7``void *buffer`` buffer containing the values to write h](jt)}(h``void *buffer``h]jz)}(hjFh]h void *buffer}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}Fubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM>hjyFubj)}(hhh]h)}(h%buffer containing the values to writeh]h%buffer containing the values to write}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhM>hjFubah}(h]h ]h"]h$]h&]uh1jhjyFubeh}(h]h ]h"]h$]h&]uh1jmhjFhM>hjFubjn)}(h.``size_t size`` number of bytes in **buffer** h](jt)}(h``size_t size``h]jz)}(hjFh]h size_t size}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM?hjFubj)}(hhh]h)}(hnumber of bytes in **buffer**h](hnumber of bytes in }(hjFhhhNhNubj%)}(h **buffer**h]hbuffer}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubeh}(h]h ]h"]h$]h&]uh1hhjFhM?hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjFhM?hjFubeh}(h]h ]h"]h$]h&]uh1jhhjEubh)}(h**Description**h]j%)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMAhjEubh)}(hXReturns zero (0) 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 zero (0) 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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM@hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(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}(hjIGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKGmodnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_readbsbc.drm_dp_dpcd_readbasbuh1hhjBGhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMXubj)}(h h]h }(hjkGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBGhhhjjGhMXubj)}(hdrm_dp_dpcd_readbh]j)}(hjgGh]hdrm_dp_dpcd_readb}(hj}GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBGhhhjjGhMXubj)}(h9(struct drm_dp_aux *aux, unsigned int offset, u8 *valuep)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jeGc.drm_dp_dpcd_readbasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj9)}(hj9h]h*}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubj)}(hauxh]haux}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hinth]hint}(hj$HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hj2HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hoffseth]hoffset}(hj@HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubj)}(h u8 *valueph](h)}(hhh]j)}(hu8h]hu8}(hj\HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^HmodnameN classnameNjj)}j]jeGc.drm_dp_dpcd_readbasbuh1hhjUHubj)}(h h]h }(hjzHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUHubj9)}(hj9h]h*}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUHubj)}(hvalueph]hvaluep}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubeh}(h]h ]h"]h$]h&]jjuh1jhjBGhhhjjGhMXubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>GhhhjjGhMXubah}(h]j9Gah ](jjeh"]h$]h&]jj)jhuh1jhjjGhMXhj;Ghhubj)}(hhh]h)}(h read a single byte from the DPCDh]h read a single byte from the DPCD}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMXhjHhhubah}(h]h ]h"]h$]h&]uh1jhj;GhhhjjGhMXubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(hX**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. In most of the cases you should be using drm_dp_dpcd_read_byte() instead.h](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM\hjHubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjIh]hstruct drm_dp_aux *aux}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMYhjHubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMYhjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjIhMYhjHubjn)}(h8``unsigned int offset`` address of the register to read h](jt)}(h``unsigned int offset``h]jz)}(hj9Ih]hunsigned int offset}(hj;IhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7Iubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMZhj3Iubj)}(hhh]h)}(haddress of the register to readh]haddress of the register to read}(hjRIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNIhMZhjOIubah}(h]h ]h"]h$]h&]uh1jhj3Iubeh}(h]h ]h"]h$]h&]uh1jmhjNIhMZhjHubjn)}(hG``u8 *valuep`` location where the value of the register will be stored h](jt)}(h``u8 *valuep``h]jz)}(hjrIh]h u8 *valuep}(hjtIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpIubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM[hjlIubj)}(hhh]h)}(h7location where the value of the register will be storedh]h7location where the value of the register will be stored}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM[hjIubah}(h]h ]h"]h$]h&]uh1jhjlIubeh}(h]h ]h"]h$]h&]uh1jmhjIhM[hjHubeh}(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&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM]hjHubh)}(hReturns the number of bytes transferred (1) on success, or a negative error code on failure. In most of the cases you should be using drm_dp_dpcd_read_byte() instead.h]hReturns the number of bytes transferred (1) on success, or a negative error code on failure. In most of the cases you should be using drm_dp_dpcd_read_byte() instead.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM\hjHubeh}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_writebsbc.drm_dp_dpcd_writebasbuh1hhjIhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjJhMhubj)}(hdrm_dp_dpcd_writebh]j)}(hjJh]hdrm_dp_dpcd_writeb}(hj)JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Jubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjJhMhubj)}(h7(struct drm_dp_aux *aux, unsigned int offset, u8 value)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjDJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Jubj)}(h h]h }(hjQJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Jubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjbJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Jubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdJmodnameN classnameNjj)}j]jJc.drm_dp_dpcd_writebasbuh1hhj@Jubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Jubj9)}(hj9h]h*}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@Jubj)}(hauxh]haux}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjThMhjrSubjn)}(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)}(hjcTh]h,DP_DPCD_QUIRK_CAN_DO_MAX_LINK_RATE_3_24_GBPS}(hjeThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaTubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj]Tubj)}(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.}(hj|ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjyTubah}(h]h ]h"]h$]h&]uh1jhj]Tubeh}(h]h ]h"]h$]h&]uh1jmhjxThMhjrSubjn)}(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)}(hjTh]h+DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM!hjTubj)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThM!hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThM!hjrSubeh}(h]h ]h"]h$]h&]uh1jhhjVSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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:266: ./include/drm/display/drm_dp_helper.hhM$hjhhubh)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM:ubj)}(h h]h }(hj+UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhj*UhM:ubj)}(hdrm_dp_has_quirkh]j)}(hdrm_dp_has_quirkh]hdrm_dp_has_quirk}(hj=UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Uubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhj*UhM:ubj)}(h9(const struct drm_dp_desc *desc, enum drm_dp_quirk quirk)h](j)}(hconst struct drm_dp_desc *desch](j)}(hjch]hconst}(hjYUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubj)}(h h]h }(hjfUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubj)}(hjh]hstruct}(hjtUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubh)}(hhh]j)}(h drm_dp_desch]h drm_dp_desc}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j%)}jj?Usbc.drm_dp_has_quirkasbuh1hhjUUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUUubj)}(hdesch]hdesc}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQUubj)}(henum drm_dp_quirk quirkh](j)}(hjh]henum}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(h drm_dp_quirkh]h drm_dp_quirk}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]jUc.drm_dp_has_quirkasbuh1hhjUubj)}(h h]h }(hj"VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hquirkh]hquirk}(hj0VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQUubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhj*UhM:ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhj*UhM:ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhj*UhM:hjUhhubj)}(hhh]h)}(h(does the DP device have a specific quirkh]h(does the DP device have a specific quirk}(hjZVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM:hjWVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhj*UhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrVjjrVjjjuh1jhhhjhNhNubj)}(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%)}(hj|Vh]h Parameters}(hj~VhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzVubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM>hjvVubji)}(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)}(hjVh]hconst struct drm_dp_desc *desc}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM;hjVubj)}(hhh]h)}(h.Device descriptor filled by drm_dp_read_desc()h]h.Device descriptor filled by drm_dp_read_desc()}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM;hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjVhM;hjVubjn)}(h/``enum drm_dp_quirk quirk`` Quirk to query for h](jt)}(h``enum drm_dp_quirk quirk``h]jz)}(hjVh]henum drm_dp_quirk quirk}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM<hjVubj)}(hhh]h)}(hQuirk to query forh]hQuirk to query for}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM<hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjVhM<hjVubeh}(h]h ]h"]h$]h&]uh1jhhjvVubh)}(h**Description**h]j%)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Wubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM>hjvVubh)}(h>Return true if DP device identified by **desc** has **quirk**.h](h'Return true if DP device identified by }(hj%WhhhNhNubj%)}(h**desc**h]hdesc}(hj-WhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%Wubh has }(hj%WhhhNhNubj%)}(h **quirk**h]hquirk}(hj?WhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj%Wubh.}(hj%WhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhM=hjvVubeh}(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}(hjxWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtWhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMBubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtWhhhjWhMBubj)}(hdrm_edp_backlight_infoh]j)}(hjrWh]hdrm_edp_backlight_info}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjtWhhhjWhMBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjpWhhhjWhMBubah}(h]jkWah ](jjeh"]h$]h&]jj)jhuh1jhjWhMBhjmWhhubj)}(hhh]h)}(h Probed eDP backlight info structh]h Probed eDP backlight info struct}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMGhjWhhubah}(h]h ]h"]h$]h&]uh1jhjmWhhhjWhMBubeh}(h]h ](jstructeh"]h$]h&]jjjjWjjWjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct drm_edp_backlight_info { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; u32 max; bool lsb_reg_used : 1; bool aux_enable : 1; bool aux_set : 1; bool luminance_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? ``luminance_set`` Does the panel support setting the brightness through AUX using luminance values?h](h)}(h**Definition**::h](j%)}(h**Definition**h]h Definition}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubh:}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMKhjWubj@)}(hstruct drm_edp_backlight_info { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; u32 max; bool lsb_reg_used : 1; bool aux_enable : 1; bool aux_set : 1; bool luminance_set : 1; };h]hstruct drm_edp_backlight_info { u8 pwmgen_bit_count; u8 pwm_freq_pre_divider; u32 max; bool lsb_reg_used : 1; bool aux_enable : 1; bool aux_set : 1; bool luminance_set : 1; };}hjWsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMMhjWubh)}(h **Members**h]j%)}(hjXh]hMembers}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMWhjWubji)}(hhh](jn)}(h*``pwmgen_bit_count`` The pwmgen bit count h](jt)}(h``pwmgen_bit_count``h]jz)}(hj'Xh]hpwmgen_bit_count}(hj)XhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj%Xubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMIhj!Xubj)}(hhh]h)}(hThe pwmgen bit counth]hThe pwmgen bit count}(hj@XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYubj)}(hhh]h)}(h:Does the panel support setting the brightness through AUX?h]h:Does the panel support setting the brightness through AUX?}(hj]YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYYhMNhjZYubah}(h]h ]h"]h$]h&]uh1jhj>Yubeh}(h]h ]h"]h$]h&]uh1jmhjYYhMNhjXubjn)}(hc``luminance_set`` Does the panel support setting the brightness through AUX using luminance values?h](jt)}(h``luminance_set``h]jz)}(hj}Yh]h luminance_set}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{Yubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMNhjwYubj)}(hhh]h)}(hQDoes the panel support setting the brightness through AUX using luminance values?h]hQDoes the panel support setting the brightness through AUX using luminance values?}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMOhjYubah}(h]h ]h"]h$]h&]uh1jhjwYubeh}(h]h ]h"]h$]h&]uh1jmhjYhMNhjXubeh}(h]h ]h"]h$]h&]uh1jhhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(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:266: ./include/drm/display/drm_dp_helper.hhMRhjhhubh)}(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().}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMOhjhhubjy)}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMUubj)}(h h]h }(hj ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhj ZhMUubj)}(hdrm_dp_phy_test_paramsh]j)}(hjYh]hdrm_dp_phy_test_params}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhj ZhMUubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhj ZhMUubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhj ZhMUhjYhhubj)}(hhh]h)}(hDP Phy Compliance parametersh]hDP Phy Compliance parameters}(hj@ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj=Zhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhj ZhMUubeh}(h]h ](jstructeh"]h$]h&]jjjjXZjjXZjjjuh1jhhhjhNhNubj)}(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}(hjdZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`Zubh:}(hj`ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj\Zubj@)}(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; };}hj}Zsbah}(h]h ]h"]h$]h&]jjuh1j?hh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj\Zubh)}(h **Members**h]j%)}(hjZh]hMembers}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhj\Zubji)}(hhh](jn)}(h2``link_rate`` Requested Link rate from DPCD 0x219 h](jt)}(h ``link_rate``h]jz)}(hjZh]h link_rate}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjZubj)}(hhh]h)}(h#Requested Link rate from DPCD 0x219h]h#Requested Link rate from DPCD 0x219}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhjZubjn)}(hC``num_lanes`` Number of lanes requested by sing through DPCD 0x220 h](jt)}(h ``num_lanes``h]jz)}(hjZh]h num_lanes}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjZubj)}(hhh]h)}(h4Number of lanes requested by sing through DPCD 0x220h]h4Number of lanes requested by sing through DPCD 0x220}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhjZubjn)}(h4``phy_pattern`` DP Phy test pattern from DPCD 0x248 h](jt)}(h``phy_pattern``h]jz)}(hj[h]h phy_pattern}(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:266: ./include/drm/display/drm_dp_helper.hhMhj[ubj)}(hhh]h)}(h#DP Phy test pattern from DPCD 0x248h]h#DP Phy test pattern from DPCD 0x248}(hj8[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4[hMhj5[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhj4[hMhjZubjn)}(hL``hbr2_reset`` DP HBR2_COMPLIANCE_SCRAMBLER_RESET from DCPD 0x24A and 0x24B h](jt)}(h``hbr2_reset``h]jz)}(hjX[h]h hbr2_reset}(hjZ[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjV[ubah}(h]h ]h"]h$]h&]uh1jshh/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:266: ./include/drm/display/drm_dp_helper.hhMhjR[ubj)}(hhh]h)}(h", or "" on errors. The returned string is always non-NULL and valid. **Return** Name of the DP PHY.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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj]ubji)}(hhh]jn)}(h1``enum drm_dp_phy dp_phy`` The DP PHY identifier h](jt)}(h``enum drm_dp_phy dp_phy``h]jz)}(hj@]h]henum drm_dp_phy dp_phy}(hjB]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>]ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj:]ubj)}(hhh]h)}(hThe DP PHY identifierh]hThe DP PHY identifier}(hjY]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU]hMhjV]ubah}(h]h ]h"]h$]h&]uh1jhj:]ubeh}(h]h ]h"]h$]h&]uh1jmhjU]hMhj7]ubah}(h]h ]h"]h$]h&]uh1jhhj]ubh)}(h**Description**h]j%)}(hj{]h]h Description}(hj}]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjy]ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj]ubh)}(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 }(hj]hhhNhNubj%)}(h **dp_phy**h]hdp_phy}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj]ubh, 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.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj]ubh)}(hName of the DP PHY.h]hName of the DP PHY.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhj^hMubj)}(hdrm_dp_lttpr_wake_timeout_setuph]j)}(hdrm_dp_lttpr_wake_timeout_setuph]hdrm_dp_lttpr_wake_timeout_setup}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhj^hMubj)}(h/(struct drm_dp_aux *aux, bool transparent_mode)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj6^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2^ubj)}(h h]h }(hjC^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2^ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjT^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjV^modnameN classnameNjj)}j]j%)}jj^sb!c.drm_dp_lttpr_wake_timeout_setupasbuh1hhj2^ubj)}(h h]h }(hjt^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2^ubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2^ubj)}(hauxh]haux}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.^ubj)}(hbool transparent_modeh](j)}(hjAh]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(htransparent_modeh]htransparent_mode}(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'Grant extended time for sink to wake uph]h'Grant extended time for sink to wake up}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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`` 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%)}(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:269: ./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)}(hj._h]hstruct drm_dp_aux *aux}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj(_ubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjG_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC_hMhjD_ubah}(h]h ]h"]h$]h&]uh1jhj(_ubeh}(h]h ]h"]h$]h&]uh1jmhjC_hMhj%_ubjn)}(hG``bool transparent_mode`` This is true if lttpr is in transparent mode h](jt)}(h``bool transparent_mode``h]jz)}(hjg_h]hbool transparent_mode}(hji_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhje_ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhja_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&]uh1hhj|_hMhj}_ubah}(h]h ]h"]h$]h&]uh1jhja_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj _ubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhj_hMubj)}(hdrm_dp_dpcd_probeh]j)}(hdrm_dp_dpcd_probeh]hdrm_dp_dpcd_probe}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhj_hMubj)}(h-(struct drm_dp_aux *aux, unsigned int offset)h](j)}(hstruct drm_dp_aux *auxh](j)}(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)}(h drm_dp_auxh]h drm_dp_aux}(hjB`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD`modnameN classnameNjj)}j]j%)}jj `sbc.drm_dp_dpcd_probeasbuh1hhj `ubj)}(h h]h }(hjb`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj `ubj9)}(hj9h]h*}(hjp`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`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)}(h4probe a given DPCD address with a 1-byte read accessh]h4probe a given DPCD address with a 1-byte read access}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjaubji)}(hhh](jn)}(h9``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST) h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hj9ah]hstruct drm_dp_aux *aux}(hj;ahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7aubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj3aubj)}(hhh]h)}(hDisplayPort AUX channel (SST)h]hDisplayPort AUX channel (SST)}(hjRahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNahMhjOaubah}(h]h ]h"]h$]h&]uh1jhj3aubeh}(h]h ]h"]h$]h&]uh1jmhjNahMhj0aubjn)}(h9``unsigned int offset`` address of the register to probe h](jt)}(h``unsigned int offset``h]jz)}(hjrah]hunsigned int offset}(hjtahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpaubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjlaubj)}(hhh]h)}(h address of the register to probeh]h address of the register to probe}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjlaubeh}(h]h ]h"]h$]h&]uh1jmhjahMhj0aubeh}(h]h ]h"]h$]h&]uh1jhhjaubh)}(h**Description**h]j%)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjaubh)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjaubh)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjaubeh}(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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjbhMubj)}(hdrm_dp_dpcd_set_poweredh]j)}(hdrm_dp_dpcd_set_poweredh]hdrm_dp_dpcd_set_powered}(hj"bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjbhMubj)}(h&(struct drm_dp_aux *aux, bool powered)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj>bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:bubj)}(h h]h }(hjKbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:bubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hj\bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYbubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^bmodnameN classnameNjj)}j]j%)}jj$bsbc.drm_dp_dpcd_set_poweredasbuh1hhj:bubj)}(h h]h }(hj|bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:bubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:bubj)}(hauxh]haux}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:bubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6bubj)}(h bool poweredh](j)}(hjAh]hbool}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hpoweredh]hpowered}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6bubeh}(h]h ]h"]h$]h&]jjuh1jhjahhhjbhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjbhMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhjbhMhjahhubj)}(hhh]h)}(h$Set whether the DP device is poweredh]h$Set whether the DP device is powered}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj cjj cjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjcubji)}(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)}(hj6ch]hstruct drm_dp_aux *aux}(hj8chhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4cubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj0cubj)}(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.}(hjOchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjLcubah}(h]h ]h"]h$]h&]uh1jhj0cubeh}(h]h ]h"]h$]h&]uh1jmhjKchMhj-cubjn)}(h/``bool powered`` true if powered; false if not h](jt)}(h``bool powered``h]jz)}(hjpch]h bool powered}(hjrchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjncubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjjcubj)}(hhh]h)}(htrue if powered; false if noth]htrue if powered; false if not}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjjcubeh}(h]h ]h"]h$]h&]uh1jmhjchMhj-cubeh}(h]h ]h"]h$]h&]uh1jhhjcubh)}(h**Description**h]j%)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjcubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjcubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_dpcd_set_probe (C function)c.drm_dp_dpcd_set_probehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h@void drm_dp_dpcd_set_probe (struct drm_dp_aux *aux, bool enable)h]j)}(h?void drm_dp_dpcd_set_probe(struct drm_dp_aux *aux, bool enable)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhj dhMubj)}(hdrm_dp_dpcd_set_probeh]j)}(hdrm_dp_dpcd_set_probeh]hdrm_dp_dpcd_set_probe}(hj dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhj dhMubj)}(h%(struct drm_dp_aux *aux, bool enable)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjhubah}(h]h ]h"]h$]h&]uh1jhj"hubeh}(h]h ]h"]h$]h&]uh1jmhj=hhMhjgubjn)}(h.``size_t size`` number of bytes in **buffer** h](jt)}(h``size_t size``h]jz)}(hjahh]h size_t size}(hjchhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_hubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj[hubj)}(hhh]h)}(hnumber of bytes in **buffer**h](hnumber of bytes in }(hjzhhhhNhNubj%)}(h **buffer**h]hbuffer}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzhubeh}(h]h ]h"]h$]h&]uh1hhjvhhMhjwhubah}(h]h ]h"]h$]h&]uh1jhj[hubeh}(h]h ]h"]h$]h&]uh1jmhjvhhMhjgubeh}(h]h ]h"]h$]h&]uh1jhhjgubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjgubh)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjgubh)}(hEIn most of the cases you want to use drm_dp_dpcd_read_data() instead.h]hEIn most of the cases you want to use drm_dp_dpcd_read_data() instead.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjgubeh}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j%)}jdrm_dp_dpcd_writesbc.drm_dp_dpcd_writeasbuh1hhjhhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj#ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhj"ihMubj)}(hdrm_dp_dpcd_writeh]j)}(hjih]hdrm_dp_dpcd_write}(hj5ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1iubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhj"ihMubj)}(hH(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjPihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLiubj)}(h h]h }(hj]ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLiubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjnihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpimodnameN classnameNjj)}j]jic.drm_dp_dpcd_writeasbuh1hhjLiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLiubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLiubj)}(hauxh]haux}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHiubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hoffseth]hoffset}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHiubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj jubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj jubj9)}(hj9h]h*}(hj-jhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj jubj)}(hbufferh]hbuffer}(hj:jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHiubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjVjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXjmodnameN classnameNjj)}j]jic.drm_dp_dpcd_writeasbuh1hhjOjubj)}(h h]h }(hjtjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOjubj)}(hsizeh]hsize}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHiubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhhj"ihMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhj"ihMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jhj"ihMhjhhhubj)}(hhh]h)}(h#write a series of bytes to the DPCDh]h#write a series of bytes to the DPCD}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhj"ihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhjhNhNubj)}(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. In most of the cases you want to use drm_dp_dpcd_write_data() instead.h](h)}(h**Parameters**h]j%)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjjubji)}(hhh](jn)}(h@``struct drm_dp_aux *aux`` DisplayPort AUX channel (SST or MST) h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjjh]hstruct drm_dp_aux *aux}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjjubj)}(hhh]h)}(h$DisplayPort AUX channel (SST or MST)h]h$DisplayPort AUX channel (SST or MST)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjjubjn)}(hA``unsigned int offset`` address of the (first) register to write h](jt)}(h``unsigned int offset``h]jz)}(hj&kh]hunsigned int offset}(hj(khhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$kubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj kubj)}(hhh]h)}(h(address of the (first) register to writeh]h(address of the (first) register to write}(hj?khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;khMhj matches the DPCD register layout of the DPRX PHY link status.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM-hj4pubh)}(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.}(hj=qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1hj4pubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_link_power_up (C function)c.drm_dp_link_power_uphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hIint drm_dp_link_power_up (struct drm_dp_aux *aux, unsigned char revision)h]j)}(hHint drm_dp_link_power_up(struct drm_dp_aux *aux, unsigned char revision)h](j)}(hinth]hint}(hjlqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhqhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMTubj)}(h h]h }(hj{qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhqhhhjzqhMTubj)}(hdrm_dp_link_power_uph]j)}(hdrm_dp_link_power_uph]hdrm_dp_link_power_up}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhqhhhjzqhMTubj)}(h0(struct drm_dp_aux *aux, unsigned char revision)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j%)}jjqsbc.drm_dp_link_power_upasbuh1hhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(hauxh]haux}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hunsigned char revisionh](j)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hj)rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hcharh]hchar}(hj7rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjErhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hrevisionh]hrevision}(hjSrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubeh}(h]h ]h"]h$]h&]jjuh1jhjhqhhhjzqhMTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjdqhhhjzqhMTubah}(h]j_qah ](jjeh"]h$]h&]jj)jhuh1jhjzqhMThjaqhhubj)}(hhh]h)}(hpower up a DisplayPort linkh]hpower up a DisplayPort link}(hj}rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMThjzrhhubah}(h]h ]h"]h$]h&]uh1jhjaqhhhjzqhMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjrjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``unsigned char revision`` DPCD revision supported on the link **Description** 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMXhjrubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMUhjrubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMUhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjrhMUhjrubjn)}(h?``unsigned char revision`` DPCD revision supported on the link h](jt)}(h``unsigned char revision``h]jz)}(hjrh]hunsigned char revision}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMVhjrubj)}(hhh]h)}(h#DPCD revision supported on the linkh]h#DPCD revision supported on the link}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhj shMVhj subah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhj shMVhjrubeh}(h]h ]h"]h$]h&]uh1jhhjrubh)}(h**Description**h]j%)}(hj2sh]h Description}(hj4shhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0subah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMXhjrubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjHshhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMWhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_link_power_down (C function)c.drm_dp_link_power_downhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKint drm_dp_link_power_down (struct drm_dp_aux *aux, unsigned char revision)h]j)}(hJint drm_dp_link_power_down(struct drm_dp_aux *aux, unsigned char revision)h](j)}(hinth]hint}(hjwshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsshhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMzubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsshhhjshMzubj)}(hdrm_dp_link_power_downh]j)}(hdrm_dp_link_power_downh]hdrm_dp_link_power_down}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjsshhhjshMzubj)}(h0(struct drm_dp_aux *aux, unsigned char revision)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjshhh6NhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j%)}jjssbc.drm_dp_link_power_downasbuh1hhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hauxh]haux}(hj thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hunsigned char revisionh](j)}(hunsignedh]hunsigned}(hj&thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"tubj)}(h h]h }(hj4thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"tubj)}(hcharh]hchar}(hjBthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"tubj)}(h h]h }(hjPthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"tubj)}(hrevisionh]hrevision}(hj^thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhjsshhhjshMzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjoshhhjshMzubah}(h]jjsah ](jjeh"]h$]h&]jj)jhuh1jhjshMzhjlshhubj)}(hhh]h)}(hpower down a DisplayPort linkh]hpower down a DisplayPort link}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMzhjthhubah}(h]h ]h"]h$]h&]uh1jhjlshhhjshMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel ``unsigned char revision`` DPCD revision supported on the link **Description** Returns 0 on success 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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM~hjtubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjth]hstruct drm_dp_aux *aux}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM{hjtubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM{hjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthM{hjtubjn)}(h?``unsigned char revision`` DPCD revision supported on the link h](jt)}(h``unsigned char revision``h]jz)}(hjuh]hunsigned char revision}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM|hjtubj)}(hhh]h)}(h#DPCD revision supported on the linkh]h#DPCD revision supported on the link}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM|hjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjuhM|hjtubeh}(h]h ]h"]h$]h&]uh1jhhjtubh)}(h**Description**h]j%)}(hj=uh]h Description}(hj?uhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj;uubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM~hjtubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjSuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM}hjtubeh}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~uhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~uhhhjuhMubj)}(hdrm_dp_dpcd_write_payloadh]j)}(hdrm_dp_dpcd_write_payloadh]hdrm_dp_dpcd_write_payload}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~uhhhjuhMubj)}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j%)}jjusbc.drm_dp_dpcd_write_payloadasbuh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hj9h]h*}(hj vhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubj)}(hauxh]haux}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(h int vcpidh](j)}(hinth]hint}(hj1vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-vubj)}(h h]h }(hj?vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-vubj)}(hvcpidh]hvcpid}(hjMvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(hu8 start_time_sloth](h)}(hhh]j)}(hu8h]hu8}(hjivhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkvmodnameN classnameNjj)}j]juc.drm_dp_dpcd_write_payloadasbuh1hhjbvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbvubj)}(hstart_time_sloth]hstart_time_slot}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubj)}(hu8 time_slot_counth](h)}(hhh]j)}(hu8h]hu8}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]juc.drm_dp_dpcd_write_payloadasbuh1hhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(htime_slot_counth]htime_slot_count}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjuubeh}(h]h ]h"]h$]h&]jjuh1jhj~uhhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzuhhhjuhMubah}(h]juuah ](jjeh"]h$]h&]jj)jhuh1jhjuhMhjwuhhubj)}(hhh]h)}(h2Write Virtual Channel information to payload tableh]h2Write Virtual Channel information to payload table}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jhjwuhhhjuhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhjhNhNubj)}(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)wh]h Parameters}(hj+whhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'wubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#wubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjHwh]hstruct drm_dp_aux *aux}(hjJwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFwubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjBwubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjawhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]whMhj^wubah}(h]h ]h"]h$]h&]uh1jhjBwubeh}(h]h ]h"]h$]h&]uh1jmhj]whMhj?wubjn)}(h)``int vcpid`` Virtual Channel Payload ID h](jt)}(h ``int vcpid``h]jz)}(hjwh]h int vcpid}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj{wubj)}(hhh]h)}(hVirtual Channel Payload IDh]hVirtual Channel Payload ID}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhj{wubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhj?wubjn)}(h*``u8 start_time_slot`` Starting time slot h](jt)}(h``u8 start_time_slot``h]jz)}(hjwh]hu8 start_time_slot}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjwubj)}(hhh]h)}(hStarting time sloth]hStarting time slot}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhj?wubjn)}(h'``u8 time_slot_count`` Time slot count h](jt)}(h``u8 time_slot_count``h]jz)}(hjwh]hu8 time_slot_count}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjwubj)}(hhh]h)}(hTime slot counth]hTime slot count}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhj xubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjxhMhj?wubeh}(h]h ]h"]h$]h&]uh1jhhj#wubh)}(h**Description**h]j%)}(hj.xh]h Description}(hj0xhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,xubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#wubh)}(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.}(hjDxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#wubh)}(h **Return**h]j%)}(hjUxh]hReturn}(hjWxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSxubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#wubh)}(h&0 on success, negative error otherwiseh]h&0 on success, negative error otherwise}(hjkxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj#wubeh}(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}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjxhMubj)}(hdrm_dp_dpcd_clear_payloadh]j)}(hdrm_dp_dpcd_clear_payloadh]hdrm_dp_dpcd_clear_payload}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjxhMubj)}(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_dpcd_clear_payloadasbuh1hhjxubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hj#yhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hauxh]haux}(hj0yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhjxhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjxhMubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jhjxhMhjxhhubj)}(hhh]h)}(h$Clear the entire VC Payload ID tableh]h$Clear the entire VC Payload ID table}(hjZyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjWyhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjryjjryjjjuh1jhhhjhNhNubj)}(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|yh]h Parameters}(hj~yhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzyubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjvyubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjyh]hstruct drm_dp_aux *aux}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjyubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhhjvyubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjvyubh)}(h%Clear the entire VC Payload ID table.h]h%Clear the entire VC Payload ID table.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjvyubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjvyubh)}(h,0 on success, negative error code on errors.h]h,0 on success, negative error code on errors.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjvyubeh}(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}(hjBzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>zhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjQzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>zhhhjPzhMubj)}(hdrm_dp_dpcd_poll_act_handledh]j)}(hdrm_dp_dpcd_poll_act_handledh]hdrm_dp_dpcd_poll_act_handled}(hjczhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_zubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>zhhhjPzhMubj)}(h((struct drm_dp_aux *aux, int timeout_ms)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{zubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{zubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jjezsbc.drm_dp_dpcd_poll_act_handledasbuh1hhj{zubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{zubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{zubj)}(hauxh]haux}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwzubj)}(hint timeout_msh](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h timeout_msh]h timeout_ms}(hj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwzubeh}(h]h ]h"]h$]h&]jjuh1jhj>zhhhjPzhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:zhhhjPzhMubah}(h]j5zah ](jjeh"]h$]h&]jj)jhuh1jhjPzhMhj7zhhubj)}(hhh]h)}(hPoll for ACT handled statush]hPoll for ACT handled status}(hj7{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj4{hhubah}(h]h ]h"]h$]h&]uh1jhj7zhhhjPzhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjO{jjO{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%)}(hjY{h]h Parameters}(hj[{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjW{ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjS{ubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjx{h]hstruct drm_dp_aux *aux}(hjz{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjv{ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjr{ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhjr{ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMhjo{ubjn)}(h!``int timeout_ms`` Timeout in ms h](jt)}(h``int timeout_ms``h]jz)}(hj{h]hint timeout_ms}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj{ubj)}(hhh]h)}(h Timeout in msh]h Timeout in ms}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMhjo{ubeh}(h]h ]h"]h$]h&]uh1jhhjS{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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjS{ubh)}(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 }(hj|hhhNhNubj%)}(h**timeout_ms**h]h timeout_ms}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubh* milliseconds, defaulting to 3000 ms if 0.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjS{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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjS{ubh)}(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.}(hj;|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjS{ubeh}(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}(hjj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf|hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjx|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf|hhhjw|hMubj)}(hdrm_dp_downstream_is_typeh]j)}(hdrm_dp_downstream_is_typeh]hdrm_dp_downstream_is_type}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjf|hhhjw|hMubj)}(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}(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_dp_downstream_is_typeasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hdpcdh]hdpcd}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj9)}(hj0h]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_typeasbuh1hhj|ubj9)}(hj1h]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}(hjF}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB}ubj)}(h h]h }(hjS}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB}ubh)}(hhh]j)}(hu8h]hu8}(hjd}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjf}modnameN classnameNjj)}j]j|c.drm_dp_downstream_is_typeasbuh1hhjB}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB}ubj)}(hport_caph]hport_cap}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB}ubj9)}(hj0h]h[}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjB}ubhdesc_sig_literal_number)}(h4h]h4}(hj}hhhNhNubah}(h]h ]mah"]h$]h&]uh1j}hjB}ubj9)}(hj1h]h]}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjB}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubj)}(hu8 typeh](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_downstream_is_typeasbuh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(htypeh]htype}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubeh}(h]h ]h"]h$]h&]jjuh1jhjf|hhhjw|hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjb|hhhjw|hMubah}(h]j]|ah ](jjeh"]h$]h&]jj)jhuh1jhjw|hMhj_|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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj*~hhubah}(h]h ]h"]h$]h&]uh1jhj_|hhhjw|hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjE~jjE~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%)}(hjO~h]h Parameters}(hjQ~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjM~ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM!hjI~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)}(hjn~h]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjl~ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjh~ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjh~ubeh}(h]h ]h"]h$]h&]uh1jmhj~hMhje~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:269: ./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~hMhje~ubjn)}(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)}(hj~h]hu8 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM#hj~ubj)}(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: }(hj~hhhNhNubjz)}(h``DP_DS_PORT_TYPE_DP``h]hDP_DS_PORT_TYPE_DP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh, }(hj~hhhNhNubjz)}(h``DP_DS_PORT_TYPE_VGA``h]hDP_DS_PORT_TYPE_VGA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh, }hj~sbjz)}(h``DP_DS_PORT_TYPE_DVI``h]hDP_DS_PORT_TYPE_DVI}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh, }(hj~hhhNhNubjz)}(h``DP_DS_PORT_TYPE_HDMI``h]hDP_DS_PORT_TYPE_HDMI}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh, }hj~sbjz)}(h``DP_DS_PORT_TYPE_NON_EDID``h]hDP_DS_PORT_TYPE_NON_EDID}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh, }hj~sbjz)}(h``DP_DS_PORT_TYPE_DP_DUALMODE``h]hDP_DS_PORT_TYPE_DP_DUALMODE}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh or }(hj~hhhNhNubjz)}(h``DP_DS_PORT_TYPE_WIRELESS``h]hDP_DS_PORT_TYPE_WIRELESS}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhj~hM#hje~ubeh}(h]h ]h"]h$]h&]uh1jhhjI~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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM%hjI~ubh)}(h,Caveat: Only works with DPCD 1.1+ port caps.h]h,Caveat: Only works with DPCD 1.1+ port caps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM$hjI~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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM&hjI~ubh)}(h4whether the downstream facing port matches the type.h]h4whether the downstream facing port matches the type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM'hjI~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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM3ubj)}(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&]jjuh1jhjhhhjhM3ubj)}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjOhhhNhNubah}(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 reftargetjbmodnameN classnameNjj)}j]j%)}jj(sbc.drm_dp_downstream_is_tmdsasbuh1hhj>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>ubh)}(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]j|c.drm_dp_downstream_is_tmdsasbuh1hhj>ubj9)}(hj1h]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}(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]j|c.drm_dp_downstream_is_tmdsasbuh1hhjހ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)}(hj0h]h[}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjހubj})}(hj}h]h4}(hjGhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjހubj9)}(hj1h]h]}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjހubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjhhhNhNubah}(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]j|c.drm_dp_downstream_is_tmdsasbuh1hhjhubj)}(h h]h }(hjÁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hjсhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(hdrm_edidh]hdrm_edid}(hjށhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(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)}(h#is the downstream facing port TMDS?h]h#is the downstream facing port TMDS?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM3hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM3ubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM7hj$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)}(hjIh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM4hjCubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM4hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhj^hM4hj@ubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hj|ubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhjhM5hj@ubjn)}(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&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM6hjubj)}(hhh]h)}(hEDIDh]hEDID}(hjԂhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjЂhM6hjтubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjЂhM6hj@ubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM8hj$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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM8hj$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&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMVubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhjHhMVubj)}(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&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhjHhMVubj)}(h/(struct drm_dp_aux *aux, u8 real_edid_checksum)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(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]sb c.drm_dp_send_real_edid_checksumasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjÃhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hauxh]haux}(hjЃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubj)}(hu8 real_edid_checksumh](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_send_real_edid_checksumasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hreal_edid_checksumh]hreal_edid_checksum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubeh}(h]h ]h"]h$]h&]jjuh1jhj7hhhjHhMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3hhhjHhMVubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jhjHhMVhj0hhubj)}(hhh]h)}(h"send back real edid checksum valueh]h"send back real edid checksum value}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMVhj?hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhjHhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjhNhNubj)}(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%)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMWhj}ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhMWhjzubjn)}(h@``u8 real_edid_checksum`` real edid checksum for the last block h](jt)}(h``u8 real_edid_checksum``h]jz)}(hjh]hu8 real_edid_checksum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMXhjubj)}(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фhMXhj҄ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjфhMXhjzubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMZhj^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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMZhj^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&]uh1jhj8hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhMubj)}(hdrm_dp_read_dpcd_capsh]j)}(hdrm_dp_read_dpcd_capsh]hdrm_dp_read_dpcd_caps}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhjJhMubj)}(h7(struct drm_dp_aux *aux, u8 dpcd[DP_RECEIVER_CAP_SIZE])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_read_dpcd_capsasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hj9h]h*}(hjŅhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubj)}(hauxh]haux}(hj҅hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubj)}(hu8 dpcd[DP_RECEIVER_CAP_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_read_dpcd_capsasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]jc.drm_dp_read_dpcd_capsasbuh1hhjubj9)}(hj1h]h]}(hjVhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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)}(h2read DPCD caps and extended DPCD caps if availableh]h2read DPCD caps and extended DPCD caps if available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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:269: ./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ՆhMhjubjn)}(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)}(hjh]hu8 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h%Buffer to store the resulting DPCD inh]h%Buffer to store the resulting DPCD in}(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%)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(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 }(hjJhhhNhNubj%)}(h**aux**h]haux}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubhK. Additionally, this function checks for and reads the extended DPRX caps (}(hjJhhhNhNubjz)}(h``DP_DP13_DPCD_REV``h]hDP_DP13_DPCD_REV}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubh ) if present.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hG``0`` if the DPCD was read successfully, negative error code otherwise.h](jz)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhB if the DPCD was read successfully, negative error code otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj·hhhjhMubj)}(hdrm_dp_read_downstream_infoh]j)}(hdrm_dp_read_downstream_infoh]hdrm_dp_read_downstream_info}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj·hhhjhMubj)}(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}(hjhhhNhNubah}(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%)}jjsbc.drm_dp_read_downstream_infoasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hauxh]haux}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](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]jIc.drm_dp_read_downstream_infoasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hdpcdh]hdpcd}(hjˈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj9)}(hj0h]h[}(hjوhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubh)}(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]jIc.drm_dp_read_downstream_infoasbuh1hhj}ubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h,u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]h](h)}(hhh]j)}(hu8h]hu8}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]jIc.drm_dp_read_downstream_infoasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdownstream_portsh]hdownstream_ports}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_MAX_DOWNSTREAM_PORTSh]hDP_MAX_DOWNSTREAM_PORTS}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jIc.drm_dp_read_downstream_infoasbuh1hhjubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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)jhuh1jhjhMhjLJhhubj)}(hhh]h)}(h+read DPCD downstream port info if availableh]h+read DPCD downstream port info if available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjLJhhhjhMubeh}(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:269: ./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)}(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:269: ./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 hMhjubjn)}(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:269: ./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}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhjubjn)}(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)}(hjfh]h,u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMhjubeh}(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:269: ./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()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./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:269: ./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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(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 hhhjhMubj)}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(hu8h]hu8}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j%)}jj0sb c.drm_dp_downstream_max_dotclockasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubh)}(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]j c.drm_dp_downstream_max_dotclockasbuh1hhjFubj9)}(hj1h]h]}(hjҋhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(hconst u8 port_cap[4]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 reftargetj modnameN classnameNjj)}j]j c.drm_dp_downstream_max_dotclockasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hport_caph]hport_cap}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(hj}h]h4}(hjOhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h,extract downstream facing port max dot clockh]h,extract downstream facing port max dot clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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 **Return** Downstream facing port max dot clock in kHz on success, or 0 if max clock not definedh](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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjߌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjیhMhj܌ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjیhMhjubjn)}(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:269: ./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&]uh1jmhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhM0ubj)}(h drm_dp_downstream_max_tmds_clockh]j)}(h drm_dp_downstream_max_tmds_clockh]h drm_dp_downstream_max_tmds_clock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhjhM0ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjɍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjڍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj׍ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj܍modnameN classnameNjj)}j]j%)}jjsb"c.drm_dp_downstream_max_tmds_clockasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]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 reftargetj(modnameN classnameNjj)}j]j"c.drm_dp_downstream_max_tmds_clockasbuh1hhjubj9)}(hj1h]h]}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hu8h]hu8}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j"c.drm_dp_downstream_max_tmds_clockasbuh1hhjXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hport_caph]hport_cap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj})}(hj}h]h4}(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjXubj9)}(hj1h]h]}(hjΎhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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"c.drm_dp_downstream_max_tmds_clockasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrm_edidh]hdrm_edid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwhhhjhM0ubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhjhM0hjthhubj)}(hhh]h)}(h-extract downstream facing port max TMDS clockh]h-extract downstream facing port max TMDS clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM0hjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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 max TMDS clock in kHz on success, or 0 if max TMDS clock not definedh](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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM4hjubji)}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj܏hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj؏hM1hjُubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj؏hM1hjubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM2hjubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM2hjubjn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj5h]hconst struct drm_edid *drm_edid}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM3hj/ubj)}(hhh]h)}(hEDIDh]hEDID}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM3hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhM3hjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hjubh)}(hdHDMI/DVI downstream facing port max TMDS clock in kHz on success, or 0 if max TMDS clock not definedh]hdHDMI/DVI downstream facing port max TMDS clock in kHz on success, or 0 if max TMDS clock not defined}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_downstream_min_tmds_clock (C function)"c.drm_dp_downstream_min_tmds_clockhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hint drm_dp_downstream_min_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_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4], const struct drm_edid *drm_edid)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMqubj)}(h h]h }(hjĐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjÐhMqubj)}(h drm_dp_downstream_min_tmds_clockh]j)}(h drm_dp_downstream_min_tmds_clockh]h drm_dp_downstream_min_tmds_clock}(hj֐hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҐubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjÐhMqubj)}(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}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjؐsb"c.drm_dp_downstream_min_tmds_clockasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j,"c.drm_dp_downstream_min_tmds_clockasbuh1hhjubj9)}(hj1h]h]}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst u8 port_cap[4]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_downstream_min_tmds_clockasbuh1hhjubj)}(h h]h }(hjΑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hport_caph]hport_cap}(hjܑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(hj}h]h4}(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j,"c.drm_dp_downstream_min_tmds_clockasbuh1hhjubj)}(h h]h }(hjshhhNhNubah}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjÐhMqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjÐhMqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjÐhMqhjhhubj)}(hhh]h)}(h-extract downstream facing port min TMDS clockh]h-extract downstream facing port min TMDS clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMqhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjÐhMqubeh}(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 ``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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMuhjԒ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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMrhjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMrhjubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hj2h]hconst u8 port_cap[4]}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMshj,ubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMshjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhMshjubjn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjkh]hconst struct drm_edid *drm_edid}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMthjeubj)}(hhh]h)}(hEDIDh]hEDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhMthjubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMvhjԒubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMvhjԒubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_downstream_max_bpch]j)}(hdrm_dp_downstream_max_bpch]hdrm_dp_downstream_max_bpc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(hu8h]hu8}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_downstream_max_bpcasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hdpcdh]hdpcd}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj$ubh)}(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]jbc.drm_dp_downstream_max_bpcasbuh1hhj$ubj9)}(hj1h]h]}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_dp_downstream_max_bpcasbuh1hhjĔubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĔubj)}(hport_caph]hport_cap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĔubj9)}(hj0h]h[}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjĔubj})}(hj}h]h4}(hj-hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjĔubj9)}(hj1h]h]}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjĔubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hconst struct drm_edid *drm_edidh](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_edidh]hdrm_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.drm_dp_downstream_max_bpcasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubj)}(hdrm_edidh]hdrm_edid}(hjĕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jޓah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h5extract downstream facing port max bits per componenth]h5extract downstream facing port max bits per component}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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]}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhj&ubjn)}(h=``const u8 port_cap[4]`` downstream facing port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjhh]hconst u8 port_cap[4]}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjbubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(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 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&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hEDIDh]hEDID}(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 **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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(h.Max bpc on success or 0 if max bpc not definedh]h.Max bpc on success or 0 if max bpc not defined}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hMubj)}(h!drm_dp_downstream_420_passthroughh]j)}(h!drm_dp_downstream_420_passthroughh]h!drm_dp_downstream_420_passthrough}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.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&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hu8h]hu8}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjCsb#c.drm_dp_downstream_420_passthroughasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubh)}(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_420_passthroughasbuh1hhjYubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(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_downstream_420_passthroughasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hport_caph]hport_cap}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(hj}h]h4}(hjbhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj.hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hMhjhhubj)}(hhh]h)}(hDdetermine downstream facing port YCbCr 4:2:0 pass-through capabilityh]hDdetermine downstream facing port YCbCr 4:2:0 pass-through capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjӘubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӘubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjИubjn)}(h=``const u8 port_cap[4]`` downstream facing 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:269: ./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&]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 **Return**h]j%)}(hjMh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(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}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb)c.drm_dp_downstream_444_to_420_conversionasbuh1hhjʙubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʙubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʙubj9)}(hj0h]h[}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjʙubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j)c.drm_dp_downstream_444_to_420_conversionasbuh1hhjʙubj9)}(hj1h]h]}(hjVhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjʙubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjƙubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)c.drm_dp_downstream_444_to_420_conversionasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hport_caph]hport_cap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj0h]h[}(hjƚhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj})}(hj}h]h4}(hjӚhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjjubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubeh}(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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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:269: ./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)}(hjJh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjDubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhjAubjn)}(h=``const u8 port_cap[4]`` downstream facing 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj}ubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjAubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(hu8h]hu8}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubh)}(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]jy+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhj;ubj9)}(hj1h]h]}(hjǜhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(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]jy+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhjۜ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)}(hj0h]h[}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjۜubj})}(hj}h]h4}(hjDhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjۜubj9)}(hj1h]h]}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjۜubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u8 color_spch](h)}(hhh]j)}(hu8h]hu8}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jy+c.drm_dp_downstream_rgb_to_ycbcr_conversionasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h color_spch]h color_spc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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%)}(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:269: ./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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj6ubj)}(hhh]h)}(h#downstream facing port capabilitiesh]h#downstream facing port capabilities}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhMhjubjn)}(h?``u8 color_spc`` Colorspace for which conversion cap is sought h](jt)}(h``u8 color_spc``h]jz)}(hjuh]h u8 color_spc}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjoubj)}(hhh]h)}(h-Colorspace for which conversion cap is soughth]h-Colorspace for which conversion cap is sought}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM1ubh)}(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%)}jdrm_dp_downstream_modesbc.drm_dp_downstream_modeasbuh1hhjhhhjhM1ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM1ubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM1ubj)}(hdrm_dp_downstream_modeh]j)}(hj2h]hdrm_dp_downstream_mode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM1ubj)}(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}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0c.drm_dp_downstream_modeasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hdevh]hdev}(hjƟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(h#const u8 dpcd[DP_RECEIVER_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]j0c.drm_dp_downstream_modeasbuh1hhj۟ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۟ubj)}(hdpcdh]hdpcd}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۟ubj9)}(hj0h]h[}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj۟ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j0c.drm_dp_downstream_modeasbuh1hhj۟ubj9)}(hj1h]h]}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj۟ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hconst u8 port_cap[4]h](j)}(hjch]hconst}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0c.drm_dp_downstream_modeasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hport_caph]hport_cap}(hjǠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj9)}(hj0h]h[}(hjՠhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubj})}(hj}h]h4}(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjyubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM1ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM1hjhhubj)}(hhh]h)}(h(return a mode for downstream facing porth]h(return a mode for downstream facing port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhjhNhNubj)}(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%)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hj4ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjYh]hstruct drm_device *dev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM2hjSubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM2hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhM2hjPubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM3hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM3hjPubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM4hjšubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjšubeh}(h]h ]h"]h$]h&]uh1jmhjhM4hjPubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM6hj4ubh)}(hBProvides a suitable mode for downstream facing ports without EDID.h]hBProvides a suitable mode for downstream facing ports without EDID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hj4ubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM7hj4ubh)}(h4A new drm_display_mode on success or NULL on failureh]h4A new drm_display_mode on success or NULL on failure}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM8hj4ubeh}(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)}(hhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(hj}h]h4}(hjKhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjYhhubj)}(hhh]h)}(h!set subconnector for DP connectorh]h!set subconnector for DP connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX***Parameters** ``struct drm_connector *connector`` connector to set property on ``enum drm_connector_status status`` connector status ``const u8 *dpcd`` DisplayPort configuration data ``const u8 port_cap[4]`` port capabilities **Description** Called by a driver on every detect event.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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(hhh](jn)}(hA``struct drm_connector *connector`` connector to set property on h](jt)}(h#``struct drm_connector *connector``h]jz)}(hj­h]hstruct drm_connector *connector}(hjĭhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hconnector to set property onh]hconnector to set property on}(hjۭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj׭hMhjحubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj׭hMhjubjn)}(h6``enum drm_connector_status status`` connector status h](jt)}(h$``enum drm_connector_status status``h]jz)}(hjh]h enum drm_connector_status status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hconnector statush]hconnector status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h2``const u8 *dpcd`` DisplayPort configuration data h](jt)}(h``const u8 *dpcd``h]jz)}(hj4h]hconst u8 *dpcd}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj.ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhjIhMhjubjn)}(h+``const u8 port_cap[4]`` port capabilities h](jt)}(h``const u8 port_cap[4]``h]jz)}(hjmh]hconst u8 port_cap[4]}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjgubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h)Called by a driver on every detect event.h]h)Called by a driver on every detect event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_read_sink_count_cap (C function)c.drm_dp_read_sink_count_caphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hbool drm_dp_read_sink_count_cap (struct drm_connector *connector, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const struct drm_dp_desc *desc)h]j)}(hbool drm_dp_read_sink_count_cap(struct drm_connector *connector, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const struct drm_dp_desc *desc)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_read_sink_count_caph]j)}(hdrm_dp_read_sink_count_caph]hdrm_dp_read_sink_count_cap}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hf(struct drm_connector *connector, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const struct drm_dp_desc *desc)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%)}jjsbc.drm_dp_read_sink_count_capasbuh1hhj%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!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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jcc.drm_dp_read_sink_count_capasbuh1hhjubj)}(h h]h }(hjׯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]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]jcc.drm_dp_read_sink_count_capasbuh1hhjubj9)}(hj1h]h]}(hj!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hconst struct drm_dp_desc *desch](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)}(h drm_dp_desch]h drm_dp_desc}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]jcc.drm_dp_read_sink_count_capasbuh1hhj5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(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)}(h6Check whether a given connector has a valid sink counth]h6Check whether a given connector has a valid sink count}(hjհhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjҰhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` The DRM connector to check ``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` A cached copy of the connector's DPCD RX capabilities ``const struct drm_dp_desc *desc`` A cached copy of the connector's DP descriptor **Description** See also: drm_dp_read_sink_count() **Return** ``True`` if the (e)DP connector has a valid sink count that should be probed, ``false`` otherwise.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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(hhh](jn)}(h?``struct drm_connector *connector`` The DRM connector to check 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hThe DRM connector to checkh]hThe DRM connector to check}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj+hMhj ubjn)}(h^``const u8 dpcd[DP_RECEIVER_CAP_SIZE]`` A cached copy of the connector's DPCD RX capabilities h](jt)}(h'``const u8 dpcd[DP_RECEIVER_CAP_SIZE]``h]jz)}(hjOh]h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjIubj)}(hhh]h)}(h5A cached copy of the connector's DPCD RX capabilitiesh]h7A cached copy of the connector’s DPCD RX capabilities}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhj ubjn)}(hR``const struct drm_dp_desc *desc`` A cached copy of the connector's DP descriptor 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&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(h.A cached copy of the connector's DP descriptorh]h0A cached copy of the connector’s DP descriptor}(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$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM"hjubh)}(h"See also: drm_dp_read_sink_count()h]h"See also: drm_dp_read_sink_count()}(hjٱhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM!hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM#hjubh)}(hb``True`` if the (e)DP connector has a valid sink count that should be probed, ``false`` otherwise.h](jz)}(h``True``h]hTrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhF if the (e)DP connector has a valid sink count that should be probed, }(hjhhhNhNubjz)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_read_sink_count (C function)c.drm_dp_read_sink_counthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h3int drm_dp_read_sink_count (struct drm_dp_aux *aux)h]j)}(h2int drm_dp_read_sink_count(struct drm_dp_aux *aux)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM4ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj]hM4ubj)}(hdrm_dp_read_sink_counth]j)}(hdrm_dp_read_sink_counth]hdrm_dp_read_sink_count}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj]hM4ubj)}(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%)}jjrsbc.drm_dp_read_sink_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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhj]hM4ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhj]hM4ubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhj]hM4hjDhhubj)}(hhh]h)}(h(Retrieve the sink count for a given sinkh]h(Retrieve the sink count for a given sink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM4hj hhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(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%)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM8hj+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)}(hjPh]hstruct drm_dp_aux *aux}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hjJubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehM5hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehM5hjGubah}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM7hj+ubh)}(h&See also: drm_dp_read_sink_count_cap()h]h&See also: drm_dp_read_sink_count_cap()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM6hj+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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM8hj+ubh)}(hOThe current sink count reported by **aux**, or a negative error code otherwise.h](h#The current sink count reported by }(hjȳhhhNhNubj%)}(h**aux**h]haux}(hjгhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjȳubh%, or a negative error code otherwise.}(hjȳhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM9hj+ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_remote_aux_inith]j)}(hdrm_dp_remote_aux_inith]hdrm_dp_remote_aux_init}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j%)}jj,sbc.drm_dp_remote_aux_initasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(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)}(h)minimally initialise a remote aux channelh]h)minimally initialise a remote aux channel}(hjɴhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjƴhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(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[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_aux_inith]j)}(hdrm_dp_aux_inith]hdrm_dp_aux_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_aux_initasbuh1hhjõubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjõubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjõubj)}(hauxh]haux}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjõubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h#minimally initialise an aux channelh]h#minimally initialise an aux channel}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhjhNhNubj)}(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%)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjfubji)}(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:269: ./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 hjubah}(h]h ]h"]h$]h&]uh1jhhjfubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjfubh)}(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 }(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_connectoruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjܶubh), 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 }(hjܶhhhNhNubh)}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhjhM hjܶubh" as early as possible so that the }(hjܶhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hj-h]h drm_device}(hj/hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjhM hjܶubhb that corresponds to the AUX adapter may be mentioned in debugging output from the DRM DP helpers.}(hjܶhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjfubh)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM' hjfubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM; ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM; ubj)}(hdrm_dp_aux_registerh]j)}(hdrm_dp_aux_registerh]hdrm_dp_aux_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM; 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}(hj޷hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۷ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_aux_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]jjuh1jhjhhhjhM; ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{hhhjhM; ubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhM; hjxhhubj)}(hhh]h)}(h#initialise and register aux channelh]h#initialise and register aux channel}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM; hj@hhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhM; ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jhhhjhNhNubj)}(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%)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./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{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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM> hj_ubh)}(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 }(hjոhhhNhNubj%)}(h**aux**h]haux}(hjݸhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjոubh, }(hjոhhhNhNubh)}(h%:c:type:`drm_dp_aux.dev `h]jz)}(hjh]hdrm_dp_aux.dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM= hjոubhL, is initialized. For devices which are grandparents of their AUX channels, }(hjոhhhNhNubh)}(h%:c:type:`drm_dp_aux.dev `h]jz)}(hjh]hdrm_dp_aux.dev}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_dp_auxuh1hhjhM= hjոubh will typically be the }(hjոhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj8h]h drm_connector}(hj:hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjhM= hjոubh }(hjոhhhNhNubh)}(h:c:type:`device`h]jz)}(hj[h]hdevice}(hj]hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdeviceuh1hhjhM= hjոubh which corresponds to }(hjոhhhNhNubj%)}(h**aux**h]haux}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjոubhE. For these devices, it’s advised to call drm_dp_aux_register() in }(hjոhhhNhNubh)}(hA:c:type:`drm_connector_funcs.late_register `h]jz)}(hjh]h!drm_connector_funcs.late_register}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhjhM= hjոubh2, and likewise to call drm_dp_aux_unregister() in }(hjոhhhNhNubh)}(hD:c:type:`drm_connector_funcs.early_unregister `h]jz)}(hjh]h$drm_connector_funcs.early_unregister}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhjhM= hjոubh<. Functions which don’t follow this will likely Oops when }(hjոhhhNhNubjz)}(h%``CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV``h]h!CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV}(hjԹhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjոubh is enabled.}(hjոhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM= hj_ubh)}(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 }(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_deviceuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMG hjubhh that uses it, such as SoCs and bridge devices, it is recommended to call drm_dp_aux_register() after a }(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_deviceuh1hhjhMG hjubh has been assigned to }(hjhhhNhNubh)}(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_auxuh1hhjhMG hjubh8, and likewise to call drm_dp_aux_unregister() once the }(hjhhhNhNubh)}(h:c:type:`drm_device`h]jz)}(hj`h]h drm_device}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjhMG hjubhM should no longer be associated with the AUX channel (e.g. on bridge detach).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMG hj_ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMN 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMR hj_ubeh}(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&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMs ubj)}(h h]h }(hjԺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjӺhMs ubj)}(hdrm_dp_aux_unregisterh]j)}(hdrm_dp_aux_unregisterh]hdrm_dp_aux_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjӺhMs 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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_aux_unregisterasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjӺhMs ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjӺhMs ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjӺhMs hjhhubj)}(hhh]h)}(hunregister an AUX adapterh]hunregister an AUX adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMs hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjӺhMs ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hD**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channelh](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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMw hjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMy hjubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMt hjܻubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjۻhMy hjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(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&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hM ubj)}(hdrm_dp_psr_setup_timeh]j)}(hdrm_dp_psr_setup_timeh]hdrm_dp_psr_setup_time}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj.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&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hu8h]hu8}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjCsbc.drm_dp_psr_setup_timeasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hpsr_caph]hpsr_cap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubh)}(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]jc.drm_dp_psr_setup_timeasbuh1hhjYubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(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)}(hPSR setup in time usech]hPSR setup in time usec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj.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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM 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)}(hjOh]h+const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjIubj)}(hhh]h)}(hPSR capabilities from DPCDh]hPSR capabilities from DPCD}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhM hjFubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM 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:269: ./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_start_crch]j)}(hdrm_dp_start_crch]hdrm_dp_start_crc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj˽hhhjݽhM 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&]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_start_crcasbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jFc.drm_dp_start_crcasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjȾhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hcrtch]hcrtc}(hjվhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(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)}(hstart capture of frame CRCsh]hstart capture of frame CRCs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjĽhhhjݽhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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$hjubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj:ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhjUhM hj7ubjn)}(hS``struct drm_crtc *crtc`` CRTC displaying the frames whose CRCs are to be captured h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjyh]hstruct drm_crtc *crtc}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjsubj)}(hhh]h)}(h8CRTC displaying the frames whose CRCs are to be capturedh]h8CRTC displaying the frames whose CRCs are to be captured}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj7ubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_stop_crch]j)}(hdrm_dp_stop_crch]hdrm_dp_stop_crc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct drm_dp_aux *aux)h]j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_stop_crcasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(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)}(hstop capture of frame CRCsh]hstop capture of frame CRCs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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:269: ./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 hjubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM2 ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhM2 ubj)}(hdrm_dp_read_desch]j)}(hdrm_dp_read_desch]hdrm_dp_read_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjhM2 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}(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_read_descasbuh1hhjubj)}(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)}(hstruct drm_dp_desc *desch](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_dp_desch]h drm_dp_desc}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jc.drm_dp_read_descasbuh1hhj%ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj%ubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hbool is_branchh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h is_branchh]h is_branch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjvhhhjhM2 ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhjhM2 ubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjhM2 hjohhubj)}(hhh]h)}(h%read sink/branch descriptor from DPCDh]h%read sink/branch descriptor from DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM2 hjhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhM2 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM6 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM3 hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM3 hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hM3 hjubjn)}(hA``struct drm_dp_desc *desc`` Device descriptor to fill from DPCD h](jt)}(h``struct drm_dp_desc *desc``h]jz)}(hjXh]hstruct drm_dp_desc *desc}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM4 hjRubj)}(hhh]h)}(h#Device descriptor to fill from DPCDh]h#Device descriptor to fill from DPCD}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM4 hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhM4 hjubjn)}(hC``bool is_branch`` true for branch devices, false for sink devices h](jt)}(h``bool is_branch``h]jz)}(hjh]hbool is_branch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5 hjubj)}(hhh]h)}(h/true for branch devices, false for sink devicesh]h/true for branch devices, false for sink devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM5 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM7 hjubh)}(hZRead DPCD 0x400 (sink) or 0x500 (branch) into **desc**. Also debug log the identification.h](h.Read DPCD 0x400 (sink) or 0x500 (branch) into }(hjhhhNhNubj%)}(h**desc**h]hdesc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh$. Also debug log the identification.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM6 hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM9 hjubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMP ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hMP ubj)}(hdrm_dp_dump_lttpr_desch]j)}(hdrm_dp_dump_lttpr_desch]hdrm_dp_dump_lttpr_desc}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj@hMP ubj)}(h0(struct drm_dp_aux *aux, enum drm_dp_phy dp_phy)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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjUsbc.drm_dp_dump_lttpr_descasbuh1hhjkubj)}(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)}(henum drm_dp_phy dp_phyh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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]jc.drm_dp_dump_lttpr_descasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdp_phyh]hdp_phy}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(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)}(h2read and dump the DPCD descriptor for an LTTPR PHYh]h2read and dump the DPCD descriptor for an LTTPR PHY}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMP hjRhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMP ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jhhhjhNhNubj)}(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%)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMT hjqubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMQ hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMQ hjubjn)}(h.``enum drm_dp_phy dp_phy`` LTTPR PHY instance 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMR hjubj)}(hhh]h)}(hLTTPR PHY instanceh]hLTTPR PHY instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMR hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMR hjubeh}(h]h ]h"]h$]h&]uh1jhhjqubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMT hjqubh)}(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 }(hj hhhNhNubj%)}(h **dp_phy**h]hdp_phy}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh5 and print a debug message with its details to dmesg.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMS hjqubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMV hjqubeh}(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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j%)}jdrm_dp_dsc_sink_bpp_incrsbc.drm_dp_dsc_sink_bpp_incrasbuh1hhjlhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMl ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhjhMl ubj)}(hdrm_dp_dsc_sink_bpp_incrh]j)}(hjh]hdrm_dp_dsc_sink_bpp_incr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhjhMl 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}(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]jc.drm_dp_dsc_sink_bpp_incrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdsc_dpcdh]hdsc_dpcd}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_DSC_RECEIVER_CAP_SIZEh]hDP_DSC_RECEIVER_CAP_SIZE}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]jc.drm_dp_dsc_sink_bpp_incrasbuh1hhjubj9)}(hj1h]h]}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjlhhhjhMl ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhMl ubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jhjhMl hjehhubj)}(hhh]h)}(hGet bits per pixel incrementh]hGet bits per pixel increment}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMl hjnhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjhMl ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMp hjubji)}(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)}(hjh]h+const u8 dsc_dpcd[DP_DSC_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMm hjubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMm hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMm 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMo hjubh)}(h3Returns the bpp precision supported by the DP sink.h]h3Returns the bpp precision supported by the DP sink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMn hjubeh}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j%)}jdrm_dp_dsc_sink_max_slice_countsb!c.drm_dp_dsc_sink_max_slice_countasbuh1hhj.hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhjVhM ubj)}(hdrm_dp_dsc_sink_max_slice_counth]j)}(hjSh]hdrm_dp_dsc_sink_max_slice_count}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhjVhM 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}(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]jQ!c.drm_dp_dsc_sink_max_slice_countasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdsc_dpcdh]hdsc_dpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(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]jQ!c.drm_dp_dsc_sink_max_slice_countasbuh1hhjubj9)}(hj1h]h]}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubj)}(h bool is_edph](j)}(hjAh]hbool}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(his_edph]his_edp}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhjVhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj*hhhjVhM ubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhjVhM hj'hhubj)}(hhh]h)}(h2Get the max slice count supported by the DSC sink.h]h2Get the max slice count supported by the DSC sink.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjdhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhjVhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(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)}(hjh]h+const u8 dsc_dpcd[DP_DSC_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h.``bool is_edp`` true if its eDP, false for DP h](jt)}(h``bool is_edp``h]jz)}(hjh]h bool is_edp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(htrue if its eDP, false for DPh]htrue if its eDP, false for DP}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(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 }(hj2hhhNhNubh)}(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_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj2ubhO by the driver. Driver creates an infoframe using these parameters to populate }(hj2hhhNhNubh)}(h>:c:type:`struct drm_dsc_pps_infoframe `h]jz)}(hj`h]hstruct drm_dsc_pps_infoframe}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_pps_infoframeuh1hhjYhM hj2ubhg. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhM hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h:Maximum slice count supported by DSC sink or 0 its invalidh]h:Maximum slice count supported by DSC sink or 0 its invalid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dp_dsc_sink_line_buf_depthsb c.drm_dp_dsc_sink_line_buf_depthasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_dsc_sink_line_buf_depthh]j)}(hjh]hdrm_dp_dsc_sink_line_buf_depth3}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM 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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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_dsc_sink_line_buf_depthasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdsc_dpcdh]hdsc_dpcd}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(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_line_buf_depthasbuh1hhjubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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)}(h!Get the line buffer depth in bitsh]h!Get the line buffer depth in bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE]`` DSC capabilities from DPCD **Description** Read 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() **Return** Line buffer depth supported by DSC panel or 0 its invalidh](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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubji)}(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)}(hjh]h+const u8 dsc_dpcd[DP_DSC_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj ubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(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 hjubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(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 }(hjahhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hjkh]hstruct drm_dsc_config}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjaubhO by the driver. Driver creates an infoframe using these parameters to populate }(hjahhhNhNubh)}(h>:c:type:`struct drm_dsc_pps_infoframe `h]jz)}(hjh]hstruct drm_dsc_pps_infoframe}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_pps_infoframeuh1hhjhM hjaubhg. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()}(hjahhhNhNubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h9Line buffer depth supported by DSC panel or 0 its invalidh]h9Line buffer depth supported by DSC panel or 0 its invalid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hM 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}(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 sb&c.drm_dp_dsc_sink_supported_input_bpcsasbuh1hhj6ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hdsc_dpcdh]hdsc_dpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubh)}(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]jt&c.drm_dp_dsc_sink_supported_input_bpcsasbuh1hhj6ubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(h u8 dsc_bpc[3]h](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jt&c.drm_dp_dsc_sink_supported_input_bpcsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdsc_bpch]hdsc_bpc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(h3h]h3}(hj$hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(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)}(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[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjXhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1jhhhjhNhNubj)}(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}h]h Parameters}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjwubji)}(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)}(hjh]h+const u8 dsc_dpcd[DP_DSC_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDSC capabilities from DPCDh]hDSC capabilities from DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(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)}(hjh]h u8 dsc_bpc[3]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjwubh)}(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 }(hj'hhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hj1h]hstruct drm_dsc_config}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj'ubhO by the driver. Driver creates an infoframe using these parameters to populate }(hj'hhhNhNubh)}(h>:c:type:`struct drm_dsc_pps_infoframe `h]jz)}(hjUh]hstruct drm_dsc_pps_infoframe}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_pps_infoframeuh1hhjNhM hj'ubhg. These are sent to the sink using DSC infoframe using the helper function drm_dsc_pps_infoframe_pack()}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhM hjwubh)}(h **Return**h]j%)}(hj~h]hReturn}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjwubh)}(h/Number of input BPC values parsed from the DPCDh]h/Number of input BPC values parsed from the DPCD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjwubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM, ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM, ubj)}(hdrm_dp_read_lttpr_common_capsh]j)}(hdrm_dp_read_lttpr_common_capsh]hdrm_dp_read_lttpr_common_caps}(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], u8 caps[DP_LTTPR_COMMON_CAP_SIZE])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_read_lttpr_common_capsasbuh1hhjubj)}(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)}(h#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](j)}(hjch]hconst}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j:c.drm_dp_read_lttpr_common_capsasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubh)}(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]j:c.drm_dp_read_lttpr_common_capsasbuh1hhjnubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!u8 caps[DP_LTTPR_COMMON_CAP_SIZE]h](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_read_lttpr_common_capsasbuh1hhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hcapsh]hcaps}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj0h]h[}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j:c.drm_dp_read_lttpr_common_capsasbuh1hhj ubj9)}(hj1h]h]}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj 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)}(h"read the LTTPR common capabilitiesh]h"read the LTTPR common capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM, hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM, ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM0 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:269: ./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)}(hjh]h#const u8 dpcd[DP_RECEIVER_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM. hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM. hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hM. hjubjn)}(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)}(hjWh]h!u8 caps[DP_LTTPR_COMMON_CAP_SIZE]}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM/ hjQubj)}(hhh]h)}(h'buffer to return the capability info inh]h'buffer to return the capability info in}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM/ hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhM/ 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1 hjubh)}(h'Read capabilities common to all LTTPRs.h]h'Read capabilities common to all LTTPRs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM0 hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM2 hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM@ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM@ ubj)}(hdrm_dp_read_lttpr_phy_capsh]j)}(hdrm_dp_read_lttpr_phy_capsh]hdrm_dp_read_lttpr_phy_caps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM@ 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}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j%)}jj sbc.drm_dp_read_lttpr_phy_capsasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hj|hhhNhNubah}(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_read_lttpr_phy_capsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]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]j]c.drm_dp_read_lttpr_phy_capsasbuh1hhjubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum drm_dp_phy dp_phyh](j)}(hjh]henum}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(h drm_dp_phyh]h drm_dp_phy}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j]c.drm_dp_read_lttpr_phy_capsasbuh1hhj/ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hdp_phyh]hdp_phy}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 caps[DP_LTTPR_PHY_CAP_SIZE]h](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_read_lttpr_phy_capsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]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 reftargetjmodnameN classnameNjj)}j]j]c.drm_dp_read_lttpr_phy_capsasbuh1hhjubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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+read the capabilities for a given LTTPR PHYh]h+read the capabilities for a given LTTPR PHY}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM@ hj'hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM@ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhjhNhNubj)}(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%)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMD hjFubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjkh]hstruct drm_dp_aux *aux}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMA hjeubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMA hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhMA hjbubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMB hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMB hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMB hjbubjn)}(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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMC hjubj)}(hhh]h)}(h<TPR PHY to read the capabilities forh]h<TPR PHY to read the capabilities for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMC hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMC hjbubjn)}(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)}(hjh]hu8 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMD hjubj)}(hhh]h)}(h'buffer to return the capability info inh]h'buffer to return the capability info in}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMD hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj+hMD hjbubeh}(h]h ]h"]h$]h&]uh1jhhjFubh)}(h**Description**h]j%)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMF hjFubh)}(h.Read the capabilities for the given LTTPR PHY.h]h.Read the capabilities for the given LTTPR PHY.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chME hjFubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMG hjFubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM[ ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM[ ubj)}(hdrm_dp_lttpr_counth]j)}(hdrm_dp_lttpr_counth]hdrm_dp_lttpr_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM[ 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}(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%)}jjsbc.drm_dp_lttpr_countasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcapsh]hcaps}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jc.drm_dp_lttpr_countasbuh1hhjubj9)}(hj1h]h]}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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)}(h!get the number of detected LTTPRsh]h!get the number of detected LTTPRs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM[ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM[ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXp**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%)}(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:269: ./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)}(hjh]h'const u8 caps[DP_LTTPR_COMMON_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM\ hjubj)}(hhh]h)}(hLTTPR common capabilitiesh]hLTTPR common 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&]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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM^ hjubh)}(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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM] hjubh)}(h **Return**h]j%)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM_ hjubh)}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMw ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjhMw ubj)}(hdrm_dp_lttpr_max_link_rateh]j)}(hdrm_dp_lttpr_max_link_rateh]hdrm_dp_lttpr_max_link_rate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjhMw 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}(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%)}jjsbc.drm_dp_lttpr_max_link_rateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_LTTPR_COMMON_CAP_SIZEh]hDP_LTTPR_COMMON_CAP_SIZE}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]jc.drm_dp_lttpr_max_link_rateasbuh1hhjubj9)}(hj1h]h]}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjwhhhjhMw ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjhMw ubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjhMw hjphhubj)}(hhh]h)}(h1get the maximum link rate supported by all LTTPRsh]h1get the maximum link rate supported by all LTTPRs}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMw hjfhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMw ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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)}(hjh]h'const u8 caps[DP_LTTPR_COMMON_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMx hjubj)}(hhh]h)}(hLTTPR common capabilitiesh]hLTTPR common capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMx hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMx 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMz hjubh)}(h?Returns the maximum link rate supported by all detected LTTPRs.h]h?Returns the maximum link rate supported by all detected LTTPRs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMy hjubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hM ubj)}(h!drm_dp_lttpr_set_transparent_modeh]j)}(h!drm_dp_lttpr_set_transparent_modeh]h!drm_dp_lttpr_set_transparent_mode}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj8hM ubj)}(h%(struct drm_dp_aux *aux, bool enable)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(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%)}jjMsb#c.drm_dp_lttpr_set_transparent_modeasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(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&]jjuh1jhj&hhhj8hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj8hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj8hM hjhhubj)}(hhh]h)}(h!set the LTTPR in transparent modeh]h!set the LTTPR in transparent mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhjhNhNubj)}(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}(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:269: ./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)}(hj_h]hstruct drm_dp_aux *aux}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjYubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthM hjVubjn)}(h3``bool enable`` Enable or disable transparent mode h](jt)}(h``bool enable``h]jz)}(hjh]h bool enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(h"Enable or disable transparent modeh]h"Enable or disable transparent mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjVubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj&hM ubj)}(hdrm_dp_lttpr_inith]j)}(hdrm_dp_lttpr_inith]hdrm_dp_lttpr_init}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj&hM ubj)}(h)(struct drm_dp_aux *aux, int lttpr_count)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%)}jj;sbc.drm_dp_lttpr_initasbuh1hhjQubj)}(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)}(hint lttpr_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h lttpr_counth]h lttpr_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj&hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj&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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM 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}(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:269: ./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)}(hjNh]hstruct drm_dp_aux *aux}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjHubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchM hjEubjn)}(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)}(hjh]hint lttpr_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjEubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hdrm_dp_lttpr_max_lane_counth]j)}(hdrm_dp_lttpr_max_lane_counth]hdrm_dp_lttpr_max_lane_count}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM 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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hu8h]hu8}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j%)}jj+sbc.drm_dp_lttpr_max_lane_countasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubh)}(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]jc.drm_dp_lttpr_max_lane_countasbuh1hhjAubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubeh}(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)}(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:269: ./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_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:269: ./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)}(hj7h]h'const u8 caps[DP_LTTPR_COMMON_CAP_SIZE]}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj1ubj)}(hhh]h)}(hLTTPR common capabilitiesh]hLTTPR common capabilities}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhM hj.ubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./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}(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_voltage_swing_level_3_supportedasbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcapsh]hcaps}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hDP_LTTPR_PHY_CAP_SIZEh]hDP_LTTPR_PHY_CAP_SIZE}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j-.c.drm_dp_lttpr_voltage_swing_level_3_supportedasbuh1hhjubj9)}(hj1h]h]}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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)}(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:269: ./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:269: ./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)}(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:269: ./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&]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:269: ./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 }(hj6hhhNhNubj%)}(h**caps**h]hcaps}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubh@ for an LTTPR TX PHY indicate support for voltage swing level 3.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhM 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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjhM 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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hj hhhNhNubah}(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 reftargetjmodnameN classnameNjj)}j]j-c.drm_dp_lttpr_pre_emphasis_level_3_supportedasbuh1hhjubj9)}(hj1h]h]}(hj;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjshhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjohhhjhM ubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjlhhubj)}(hhh]h)}(h check for LTTPR preemph3 supporth]h check for LTTPR preemph3 support}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjahhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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)}(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:269: ./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&]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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(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:269: ./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_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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjEhM ubj)}(hdrm_dp_get_phy_test_patternh]j)}(hdrm_dp_get_phy_test_patternh]hdrm_dp_get_phy_test_pattern}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhjEhM ubj)}(h=(struct drm_dp_aux *aux, struct drm_dp_phy_test_params *data)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(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%)}jjZsbc.drm_dp_get_phy_test_patternasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(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]jc.drm_dp_get_phy_test_patternasbuh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdatah]hdata}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhj3hhhjEhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhjEhM ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhjEhM hj,hhubj)}(hhh]h)}(h(get the requested pattern from the sink.h]h(get the requested pattern from the sink.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjdhhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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:269: ./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)}(hjh]h#struct drm_dp_phy_test_params *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(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&]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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM" ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjohM" ubj)}(hdrm_dp_set_phy_test_patternh]j)}(hdrm_dp_set_phy_test_patternh]hdrm_dp_set_phy_test_pattern}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhhjohM" 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%)}jjsbc.drm_dp_set_phy_test_patternasbuh1hhjubj)}(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#struct drm_dp_phy_test_params *datah](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_dp_phy_test_paramsh]hdrm_dp_phy_test_params}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]jc.drm_dp_set_phy_test_patternasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjZhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdatah]hdata}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 dp_revh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_set_phy_test_patternasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hdp_revh]hdp_rev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhjohM" ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjYhhhjohM" ubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jhjohM" hjVhhubj)}(hhh]h)}(hset the pattern to the sink.h]hset the pattern to the sink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM" hjhhubah}(h]h ]h"]h$]h&]uh1jhjVhhhjohM" ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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:269: ./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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM# hjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM# hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hM# 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)}(hjSh]h#struct drm_dp_phy_test_params *data}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM$ hjMubj)}(hhh]h)}(h"DP phy compliance test parameters.h]h"DP phy compliance test parameters.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM$ hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhM$ hjubjn)}(h8``u8 dp_rev`` DP revision to use for compliance testing h](jt)}(h ``u8 dp_rev``h]jz)}(hjh]h u8 dp_rev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM% hjubj)}(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&]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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM' hjubh)}(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:269: ./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_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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(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}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j%)}jj.sbc.drm_dp_as_sdp_supportedasbuh1hhjDubj)}(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)}(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]jc.drm_dp_as_sdp_supportedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]jc.drm_dp_as_sdp_supportedasbuh1hhjubj9)}(hj1h]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}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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:269: ./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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(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}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(hBReturns true if adaptive sync sdp is supported, else returns falseh]hBReturns true if adaptive sync sdp is supported, else returns false}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjphM ubj)}(hdrm_dp_vsc_sdp_supportedh]j)}(hdrm_dp_vsc_sdp_supportedh]hdrm_dp_vsc_sdp_supported}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_hhhjphM 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%)}jjsbc.drm_dp_vsc_sdp_supportedasbuh1hhjubj)}(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#const u8 dpcd[DP_RECEIVER_CAP_SIZE]h](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}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jc.drm_dp_vsc_sdp_supportedasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hdpcdh]hdpcd}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj0h]h[}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubh)}(hhh]j)}(hDP_RECEIVER_CAP_SIZEh]hDP_RECEIVER_CAP_SIZE}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]jc.drm_dp_vsc_sdp_supportedasbuh1hhj ubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj_hhhjphM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj[hhhjphM ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjphM hjXhhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjphM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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:269: ./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&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj4ubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubh)}(h8Returns true if vsc sdp is supported, else returns falseh]h8Returns true if vsc sdp is supported, else returns false}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM- ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM- ubj)}(hdrm_dp_vsc_sdp_packh]j)}(hjh]hdrm_dp_vsc_sdp_pack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM- 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}(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 }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_vsc_sdph]hdrm_dp_vsc_sdp}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jc.drm_dp_vsc_sdp_packasbuh1hhjubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvsch]hvsc}(hj~hhhNhNubah}(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&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdp_sdph]hdp_sdp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_vsc_sdp_packasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsdph]hsdp}(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&]jjjuh1jjjhjhhhjhM- ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM- 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM- hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM- ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhjhNhNubj)}(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$hj8ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1 hj4ubji)}(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)}(hjYh]h const struct drm_dp_vsc_sdp *vsc}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM/ hjSubj)}(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}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM. hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhM/ hjPubjn)}(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)}(hjh]hstruct dp_sdp *sdp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM0 hjubj)}(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&]uh1hhjhM0 hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM0 hjPubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM2 hj4ubh)}(h:Returns length of sdp on success and error code on failureh]h:Returns length of sdp on success and error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM1 hj4ubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMw ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hMw ubj)}(hdrm_dp_get_pcon_max_frl_bwh]j)}(hdrm_dp_get_pcon_max_frl_bwh]hdrm_dp_get_pcon_max_frl_bw}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hMw 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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hu8h]hu8}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jj6sbc.drm_dp_get_pcon_max_frl_bwasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hdpcdh]hdpcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubh)}(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_get_pcon_max_frl_bwasbuh1hhjLubj9)}(hj1h]h]}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hconst u8 port_cap[4]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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_get_pcon_max_frl_bwasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hport_caph]hport_cap}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(hj}h]h4}(hjUhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hMw ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hMw ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj!hMw hjhhubj)}(hhh]h)}(hmaximum frl supported by PCONh]hmaximum frl supported by PCON}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMw hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hMw 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM{ 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMx hjubj)}(hhh]h)}(hDisplayPort configuration datah]hDisplayPort configuration data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMx hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMx 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMy hjubj)}(hhh]h)}(hport capabilitiesh]hport capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMy hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMy hjubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM{ 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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMz 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM 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&]jjuh1jhjhhhjhM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN 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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(henable_frl_ready_hpdh]henable_frl_ready_hpd}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj}hhhjhM ubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjzhhubj)}(hhh]h)}(hPrepare PCON for FRL.h]hPrepare PCON for FRL.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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:269: ./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:269: ./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)}(hB``bool enable_frl_ready_hpd`` Configure DP_PCON_ENABLE_HPD_READY. h](jt)}(h``bool enable_frl_ready_hpd``h]jz)}(hjh]hbool enable_frl_ready_hpd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(hhh]h)}(h#Configure DP_PCON_ENABLE_HPD_READY.h]h#Configure DP_PCON_ENABLE_HPD_READY.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhM ubj)}(hdrm_dp_pcon_is_frl_readyh]j)}(hdrm_dp_pcon_is_frl_readyh]hdrm_dp_pcon_is_frl_ready}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjhM 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 }(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&]jjuh1jhjohhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjkhhhjhM ubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhhubj)}(hhh]h)}(hIs PCON ready for FRLh]hIs PCON ready for FRL}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_dp_aux *aux`` DisplayPort AUX channel **Description** Returns true if success, else returns false.h](h)}(h**Parameters**h]j%)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjNubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjsh]hstruct drm_dp_aux *aux}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjmubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjjubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjNubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjNubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM 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&]jjuh1jhjhhhjhM ubj)}(h7(struct drm_dp_aux *aux, int max_frl_gbps, u8 frl_mode)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj0hhhNhNubah}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_frl_configure_1asbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(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)}(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&]noemphjjuh1jhj(ubj)}(h u8 frl_modeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jjc.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&]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!Set HDMI LINK Configuration-Step1h]h!Set HDMI LINK Configuration-Step1}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj-hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(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%)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjLubji)}(hhh](jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjqh]hstruct drm_dp_aux *aux}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjkubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjhubjn)}(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:269: ./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 hjhubjn)}(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)}(hjh]h u8 frl_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjhubeh}(h]h ]h"]h$]h&]uh1jhhjLubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjLubh)}(h7Returns 0 if success, else returns negative error code.h]h7Returns 0 if success, else returns negative error code.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjLubeh}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhMubj)}(hdrm_dp_pcon_frl_configure_2h]j)}(hdrm_dp_pcon_frl_configure_2h]hdrm_dp_pcon_frl_configure_2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhjrhMubj)}(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%)}jjsbc.drm_dp_pcon_frl_configure_2asbuh1hhjubj)}(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)}(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}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 frl_typeh](h)}(hhh]j)}(hu8h]hu8}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jc.drm_dp_pcon_frl_configure_2asbuh1hhjDubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hfrl_typeh]hfrl_type}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjYhhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(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:269: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj0hMhjubjn)}(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)}(hjTh]h u8 frl_type}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjNubj)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihMhjubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(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:269: ./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_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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_reset_frl_configasbuh1hhjubj)}(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 ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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:269: ./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:269: ./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&]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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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:269: ./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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM*ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjdhM*ubj)}(hdrm_dp_pcon_frl_enableh]j)}(hdrm_dp_pcon_frl_enableh]hdrm_dp_pcon_frl_enable}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhjdhM*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%)}jjysbc.drm_dp_pcon_frl_enableasbuh1hhjubj)}(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&]jjuh1jhjRhhhjdhM*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjNhhhjdhM*ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhjdhM*hjKhhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjhNhNubj)}(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%)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM.hj2ubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjWh]hstruct drm_dp_aux *aux}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM+hjQubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM+hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhM+hjNubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM-hj2ubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM,hj2ubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMBubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMBubj)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_hdmi_link_activeasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hauxh]haux}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMBubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMBubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMBhjhhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMBhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMBubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMFhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMChjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMChjubah}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMEhjubh)}(h2Returns true if link is active else returns false.h]h2Returns true if link is active else returns false.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMDhjubeh}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMUubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjehMUubj)}(hdrm_dp_pcon_hdmi_link_modeh]j)}(hdrm_dp_pcon_hdmi_link_modeh]hdrm_dp_pcon_hdmi_link_mode}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjehMUubj)}(h.(struct drm_dp_aux *aux, u8 *frl_trained_mask)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%)}jjzsbc.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)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *frl_trained_maskh](h)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.drm_dp_pcon_hdmi_link_modeasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hfrl_trained_maskh]hfrl_trained_mask}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjShhhjehMUubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjOhhhjehMUubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jhjehMUhjLhhubj)}(hhh]h)}(hget the PCON HDMI LINK MODEh]hget the PCON HDMI LINK MODE}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMUhjihhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjehMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMYhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMVhjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMVhjubjn)}(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)}(hjh]hu8 *frl_trained_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMZhjubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMZhjubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM\hjubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM[hjubeh}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMsubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjuhMsubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjuhMsubj)}(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%)}jjsb'c.drm_dp_pcon_hdmi_frl_link_error_countasbuh1hhjubj)}(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)}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j'c.drm_dp_pcon_hdmi_frl_link_error_countasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjchhhjuhMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj_hhhjuhMsubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jhjuhMshj\hhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMshjhhubah}(h]h ]h"]h$]h&]uh1jhj\hhhjuhMsubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMwhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMuhjubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMuhjubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMvhj ubj)}(hhh]h)}(hDRM connector code.h]hDRM connector code.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMvhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj&hMvhjubeh}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhMubj)}(hdrm_dp_pcon_pps_defaulth]j)}(hdrm_dp_pcon_pps_defaulth]hdrm_dp_pcon_pps_default}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjxhMubj)}(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_pps_defaultasbuh1hhjubj)}(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&]jjuh1jhjfhhhjxhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjbhhhjxhMubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jhjxhMhj_hhubj)}(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}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jhj_hhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhjhNhNubj)}(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%)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjFubji)}(hhh]jn)}(h3``struct drm_dp_aux *aux`` DisplayPort AUX channel h](jt)}(h``struct drm_dp_aux *aux``h]jz)}(hjkh]hstruct drm_dp_aux *aux}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjeubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjbubah}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjFubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjFubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM%ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM%ubj)}(hdrm_dp_pcon_pps_override_bufh]j)}(hdrm_dp_pcon_pps_override_bufh]hdrm_dp_pcon_pps_override_buf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM%ubj)}(h)(struct drm_dp_aux *aux, u8 pps_buf[128])h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(h drm_dp_auxh]h drm_dp_aux}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_pcon_pps_override_bufasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj9)}(hj9h]h*}(hjthhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj$ubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(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]jbc.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)}(hj0h]h[}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj})}(h128h]h128}(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjubj9)}(hj1h]h]}(hjhhhNhNubah}(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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM%hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM%ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhjhNhNubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM)hj7ubji)}(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&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM'hjVubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM'hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhM'hjSubjn)}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM(hjubj)}(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&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM(hjSubeh}(h]h ]h"]h$]h&]uh1jhhj7ubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM*hj7ubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM)hj7ubeh}(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, u32 level)h]j)}(hkint drm_edp_backlight_set_level(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, u32 level)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMmubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hMmubj)}(hdrm_edp_backlight_set_levelh]j)}(hdrm_edp_backlight_set_levelh]hdrm_edp_backlight_set_level}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hMmubj)}(hL(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, u32 level)h](j)}(hstruct drm_dp_aux *auxh](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_dp_auxh]h drm_dp_aux}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j%)}jj8sbc.drm_edp_backlight_set_levelasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(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 }(hjhhhNhNubah}(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]jc.drm_edp_backlight_set_levelasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hblh]hbl}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(h u32 levelh](h)}(hhh]j)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jc.drm_edp_backlight_set_levelasbuh1hhjKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hlevelh]hlevel}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj#hMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj#hMmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj#hMmhj hhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hMmubeh}(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() ``u32 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMqhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMnhjubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMnhjubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMohjubj)}(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&]uh1hhj7hMohj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hMohjubjn)}(h*``u32 level`` The brightness level to set h](jt)}(h ``u32 level``h]jz)}(hj[h]h u32 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMphjUubj)}(hhh]h)}(hThe brightness level to seth]hThe brightness level to set}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMphjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphMphjubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMrhjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMqhjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMthjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMuhjubeh}(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 u32 level)h]j)}(hnint drm_edp_backlight_enable(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, const u32 level)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hdrm_edp_backlight_enableh]j)}(hdrm_edp_backlight_enableh]hdrm_edp_backlight_enable}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(hR(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl, const u32 level)h](j)}(hstruct drm_dp_aux *auxh](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_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%)}jj3 sbc.drm_edp_backlight_enableasbuh1hhjI ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjI ubj)}(hauxh]haux}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjE ubj)}(h'const struct drm_edp_backlight_info *blh](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_edp_backlight_infoh]hdrm_edp_backlight_info}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.drm_edp_backlight_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)}(hblh]hbl}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjE ubj)}(hconst u32 levelh](j)}(hjch]hconst}(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj)}(h h]h }(hjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubh)}(hhh]j)}(hu32h]hu32}(hjh hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjj modnameN classnameNjj)}j]j c.drm_edp_backlight_enableasbuh1hhjF ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj)}(hlevelh]hlevel}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF 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*Enable an eDP panel's backlight using DPCDh]h,Enable an eDP panel’s backlight using DPCD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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`` The DP AUX channel to use ``const struct drm_edp_backlight_info *bl`` Backlight capability info from drm_edp_backlight_init() ``const u32 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:269: ./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)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(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)}(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)}(hj8 h]h'const struct drm_edp_backlight_info *bl}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj2 ubj)}(hhh]h)}(h7Backlight capability info from drm_edp_backlight_init()h]h7Backlight capability info from drm_edp_backlight_init()}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hMhjN ubah}(h]h ]h"]h$]h&]uh1jhj2 ubeh}(h]h ]h"]h$]h&]uh1jmhjM hMhj ubjn)}(hP``const u32 level`` The initial backlight level to set via AUX, if there is one h](jt)}(h``const u32 level``h]jz)}(hjq h]hconst u32 level}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjk ubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjk 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:269: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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, }(hj hhhNhNubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh will be set to }(hj hhhNhNubjz)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubhv, this function becomes a no-op, and the driver is expected to handle powering the panel on using the EDP_BL_PWR GPIO.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(h1``0`` on success, negative error code on failure.h](jz)}(h``0``h]h0}(hj1 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:269: ./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}(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf hhhjx hMubj)}(hdrm_edp_backlight_disableh]j)}(hdrm_edp_backlight_disableh]hdrm_edp_backlight_disable}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjf hhhjx hMubj)}(hA(struct drm_dp_aux *aux, const struct drm_edp_backlight_info *bl)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_edp_backlight_disableasbuh1hhj 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 ubj)}(h'const struct drm_edp_backlight_info *blh](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}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_edp_backlight_infoh]hdrm_edp_backlight_info}(hjR hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjT modnameN classnameNjj)}j]j c.drm_edp_backlight_disableasbuh1hhj ubj)}(h h]h }(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj~ hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hblh]hbl}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjf hhhjx hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjb hhhjx hMubah}(h]j] ah ](jjeh"]h$]h&]jj)jhuh1jhjx hMhj_ hhubj)}(hhh]h)}(h1Disable an eDP backlight using DPCD, if supportedh]h1Disable an eDP backlight using DPCD, if supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj_ hhhjx hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./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)}(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:269: ./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&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj 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}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj)ubj)}(hhh]h)}(h7Backlight capability info from drm_edp_backlight_init()h]h7Backlight capability info from drm_edp_backlight_init()}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhj ubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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 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, }(hjhhhNhNubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh will be set to }(hjhhhNhNubjz)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhw, this function becomes a no-op, and the driver is expected to handle powering the panel off 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj ubh)}(h:``0`` on success or no-op, negative error code on failure.h](jz)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh5 on success or no-op, negative error code on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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, u32 max_luminance, u16 driver_pwm_freq_hz, const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE], u32 *current_level, u8 *current_mode, bool need_luminance)h]j)}(hint drm_edp_backlight_init(struct drm_dp_aux *aux, struct drm_edp_backlight_info *bl, u32 max_luminance, u16 driver_pwm_freq_hz, const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE], u32 *current_level, u8 *current_mode, bool need_luminance)h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hMubj)}(hdrm_edp_backlight_inith]j)}(hdrm_edp_backlight_inith]hdrm_edp_backlight_init}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj6hMubj)}(h(struct drm_dp_aux *aux, struct drm_edp_backlight_info *bl, u32 max_luminance, u16 driver_pwm_freq_hz, const u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE], u32 *current_level, u8 *current_mode, bool need_luminance)h](j)}(hstruct drm_dp_aux *auxh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(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%)}jjKsbc.drm_edp_backlight_initasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hauxh]haux}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(h!struct drm_edp_backlight_info *blh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(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]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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hu32 max_luminanceh](h)}(hhh]j)}(hu32h]hu32}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjCubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h max_luminanceh]h max_luminance}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hu16 driver_pwm_freq_hzh](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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdriver_pwm_freq_hzh]hdriver_pwm_freq_hz}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(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]jc.drm_edp_backlight_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hedp_dpcdh]hedp_dpcd}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj0h]h[}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubh)}(hhh]j)}(hEDP_DISPLAY_CTL_CAP_SIZEh]hEDP_DISPLAY_CTL_CAP_SIZE}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjubj9)}(hj1h]h]}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hu32 *current_levelh](h)}(hhh]j)}(hu32h]hu32}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]jc.drm_edp_backlight_initasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(h current_levelh]h current_level}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hu8 *current_modeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h current_modeh]h current_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubj)}(hbool need_luminanceh](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hneed_luminanceh]hneed_luminance}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubeh}(h]h ]h"]h$]h&]jjuh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhjhhubj)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjhNhNubj)}(hXN**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 ``u32 max_luminance`` max luminance when need luminance is set as true ``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 ``u32 *current_level`` Where to store the probed brightness level, if any ``u8 *current_mode`` Where to store the currently set backlight control mode ``bool need_luminance`` Tells us if a we want to manipulate backlight using luminance values **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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h$The DP aux device to use for probingh]h$The DP aux device to use for probing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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)}(hjh]h!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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hYThe :c:type:`drm_edp_backlight_info` struct to fill out with information on the backlighth](hThe }(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_infouh1hhjhMhjubh5 struct to fill out with information on the backlight}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``u32 max_luminance`` max luminance when need luminance is set as true h](jt)}(h``u32 max_luminance``h]jz)}(hj:h]hu32 max_luminance}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj4ubj)}(hhh]h)}(h0max luminance when need luminance is set as trueh]h0max luminance when need luminance is set as true}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhMhjubjn)}(hH``u16 driver_pwm_freq_hz`` Optional PWM frequency from the driver in hz h](jt)}(h``u16 driver_pwm_freq_hz``h]jz)}(hjsh]hu16 driver_pwm_freq_hz}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjmubj)}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hJ``u32 *current_level`` Where to store the probed brightness level, if any h](jt)}(h``u32 *current_level``h]jz)}(hjh]hu32 *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:269: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hM``u8 *current_mode`` Where to store the currently set backlight control mode h](jt)}(h``u8 *current_mode``h]jz)}(hjh]hu8 *current_mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h7Where to store the currently set backlight control modeh]h7Where to store the currently set backlight control mode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hMhjubjn)}(h]``bool need_luminance`` Tells us if a we want to manipulate backlight using luminance values h](jt)}(h``bool need_luminance``h]jz)}(hjWh]hbool need_luminance}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjQubj)}(hhh]h)}(hDTells us if a we want to manipulate backlight using luminance valuesh]hDTells us if a we want to manipulate backlight using luminance values}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjubeh}(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:269: ./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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh struct by probing }(hjhhhNhNubj%)}(h**aux**h]haux}(hjhhhNhNubah}(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&]uh1hhjhMhjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(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:269: ./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:269: ./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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM!ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjphM!ubj)}(hdrm_panel_dp_aux_backlighth]j)}(hdrm_panel_dp_aux_backlighth]hdrm_panel_dp_aux_backlight}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhjphM!ubj)}(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 }(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_dp_aux *auxh](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_dp_auxh]h drm_dp_aux}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jc.drm_panel_dp_aux_backlightasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hauxh]haux}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj^hhhjphM!ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZhhhjphM!ubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjphM!hjWhhubj)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphM!ubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM%hjubji)}(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&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.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)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM#hjubj)}(hhh]h)}(hThe DP AUX channel to useh]hThe DP AUX channel to use}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM%hjubh)}(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.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM$hjubh)}(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 }(hjlhhhNhNubh)}(h6:c:type:`drm_panel_funcs.enable\(\) `h]jz)}(hjvh]hdrm_panel_funcs.enable()}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_panel_funcsuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM(hjlubeh}(h]h ]h"]h$]h&]uh1hhjhM(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 }(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM+hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM+hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM.hjubh)}(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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM3hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM5hjubh)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_link_symbol_cycles (C function)c.drm_dp_link_symbol_cycleshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hzint drm_dp_link_symbol_cycles (int lane_count, int pixels, int dsc_slice_count, int bpp_x16, int symbol_size, bool is_mst)h]j)}(hyint drm_dp_link_symbol_cycles(int lane_count, int pixels, int dsc_slice_count, int bpp_x16, int symbol_size, bool is_mst)h](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMyubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj?hMyubj)}(hdrm_dp_link_symbol_cyclesh]j)}(hdrm_dp_link_symbol_cyclesh]hdrm_dp_link_symbol_cycles}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj?hMyubj)}(h\(int lane_count, int pixels, int dsc_slice_count, int bpp_x16, int symbol_size, bool is_mst)h](j)}(hint lane_counth](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h lane_counth]h lane_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h int pixelsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpixelsh]hpixels}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(hint dsc_slice_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdsc_slice_counth]hdsc_slice_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h int bpp_x16h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hbpp_x16h]hbpp_x16}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(hint symbol_sizeh](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h symbol_sizeh]h symbol_size}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubj)}(h bool is_msth](j)}(hjAh]hbool}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(his_msth]his_mst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubeh}(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)}(h0calculate the link symbol count with/without dsch]h0calculate the link symbol count with/without dsc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``int lane_count`` DP link lane count ``int pixels`` number of pixels in a scanline ``int dsc_slice_count`` number of slices for DSC or '0' for non-DSC ``int bpp_x16`` bits per pixel in .4 binary fixed format ``int symbol_size`` DP symbol size ``bool is_mst`` ``true`` for MST and ``false`` for SST **Description** Calculate the link symbol cycles for both DSC (**dsc_slice_count** !=0) and non-DSC case (**dsc_slice_count** == 0) and return the count.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:269: ./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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMzhjubj)}(hhh]h)}(hDP link lane counth]hDP link lane count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMzhjubjn)}(h.``int pixels`` number of pixels in a scanline h](jt)}(h``int pixels``h]jz)}(hj6h]h int pixels}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM{hj0ubj)}(hhh]h)}(hnumber of pixels in a scanlineh]hnumber of pixels in a scanline}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM{hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhM{hjubjn)}(hD``int dsc_slice_count`` number of slices for DSC or '0' for non-DSC h](jt)}(h``int dsc_slice_count``h]jz)}(hjoh]hint dsc_slice_count}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM|hjiubj)}(hhh]h)}(h+number of slices for DSC or '0' for non-DSCh]h/number of slices for DSC or ‘0’ for non-DSC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhM|hjubjn)}(h9``int bpp_x16`` bits per pixel in .4 binary fixed format 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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM}hjubj)}(hhh]h)}(h(bits per pixel in .4 binary fixed formath]h(bits per pixel in .4 binary fixed format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM}hjubjn)}(h#``int symbol_size`` DP symbol size h](jt)}(h``int symbol_size``h]jz)}(hjh]hint symbol_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM~hjubj)}(hhh]h)}(hDP symbol sizeh]hDP symbol size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM~hjubjn)}(h7``bool is_mst`` ``true`` for MST and ``false`` for SST h](jt)}(h``bool is_mst``h]jz)}(hjh]h bool is_mst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h&``true`` for MST and ``false`` for SSTh](jz)}(h``true``h]htrue}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh for MST and }(hj3hhhNhNubjz)}(h ``false``h]hfalse}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubh for SST}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhjubeh}(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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubh)}(hCalculate the link symbol cycles for both DSC (**dsc_slice_count** !=0) and non-DSC case (**dsc_slice_count** == 0) and return the count.h](h/Calculate the link symbol cycles for both DSC (}(hjhhhNhNubj%)}(h**dsc_slice_count**h]hdsc_slice_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh !=0) and non-DSC case (}(hjhhhNhNubj%)}(h**dsc_slice_count**h]hdsc_slice_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh == 0) and return the count.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_bw_overheadh]j)}(hdrm_dp_bw_overheadh]hdrm_dp_bw_overhead}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hT(int lane_count, int hactive, int dsc_slice_count, int bpp_x16, unsigned long flags)h](j)}(hint lane_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h lane_counth]h lane_count}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int hactiveh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hhactiveh]hhactive}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint dsc_slice_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdsc_slice_counth]hdsc_slice_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int bpp_x16h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbpp_x16h]hbpp_x16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned long flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(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-Calculate the BW overhead of a DP link streamh]h-Calculate the BW overhead of a DP link stream}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjNhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhjhNhNubj)}(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`` number of slices for DSC or '0' for non-DSC ``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 (**dsc_slice_count** != 0) 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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjmubji)}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(hDP link lane counth]hDP link lane count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hD``int dsc_slice_count`` number of slices for DSC or '0' for non-DSC h](jt)}(h``int dsc_slice_count``h]jz)}(hjh]hint dsc_slice_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjubj)}(hhh]h)}(h+number of slices for DSC or '0' for non-DSCh]h/number of slices for DSC or ‘0’ for non-DSC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h8``int bpp_x16`` bits per pixel in .4 binary fixed point h](jt)}(h``int bpp_x16``h]jz)}(hj=h]h int bpp_x16}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj7ubj)}(hhh]h)}(h'bits per pixel in .4 binary fixed pointh]h'bits per pixel in .4 binary fixed point}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhjubjn)}(h0``unsigned long flags`` DRM_DP_OVERHEAD_x flags h](jt)}(h``unsigned long flags``h]jz)}(hjvh]hunsigned long flags}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjpubj)}(hhh]h)}(hDRM_DP_OVERHEAD_x flagsh]hDRM_DP_OVERHEAD_x flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubeh}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjmubh)}(hXOCalculate 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 (**dsc_slice_count** != 0) 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 - }(hjhhhNhNubj%)}(h**lane_count**h]h lane_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh - SST/MST mode (}(hjhhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh / }(hjhhhNhNubjz)}(h``DRM_DP_OVERHEAD_MST``h]hDRM_DP_OVERHEAD_MST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) - symbol size (}(hjhhhNhNubj%)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh / }hjsbjz)}(h``DRM_DP_OVERHEAD_UHBR``h]hDRM_DP_OVERHEAD_UHBR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) - FEC mode (}(hjhhhNhNubj%)}(h **flags**h]hflags}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh / }hjsbjz)}(h``DRM_DP_OVERHEAD_FEC``h]hDRM_DP_OVERHEAD_FEC}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) - SSC/REF_CLK mode (}(hjhhhNhNubj%)}(h **flags**h]hflags}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh / }hjsbjz)}(h``DRM_DP_OVERHEAD_SSC_REF_CLK``h]hDRM_DP_OVERHEAD_SSC_REF_CLK}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh) as well as the stream’s - }(hjhhhNhNubj%)}(h **hactive**h]hhactive}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh timing - }(hjhhhNhNubj%)}(h **bpp_x16**h]hbpp_x16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh! color depth - compression mode (}(hjhhhNhNubj%)}(h**dsc_slice_count**h]hdsc_slice_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhs != 0) Note that this overhead doesn’t account for the 8b/10b, 128b/132b channel coding efficiency, for that see }(hjhhhNhNubj%)}(h0**drm_dp_link_bw_channel_coding_efficiency\(\)**h]h,drm_dp_link_bw_channel_coding_efficiency()}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjmubh)}(h7Returns the overhead as 100% + overhead% in 1ppm units.h]h7Returns the overhead as 100% + overhead% in 1ppm units.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjmubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h#drm_dp_bw_channel_coding_efficiencyh]j)}(h#drm_dp_bw_channel_coding_efficiencyh]h#drm_dp_bw_channel_coding_efficiency}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(bool is_uhbr)h]j)}(h bool is_uhbrh](j)}(hjAh]hbool}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj( ubj)}(h h]h }(hj9 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj( ubj)}(his_uhbrh]his_uhbr}(hjG 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)Get a DP link's channel coding efficiencyh]h+Get a DP link’s channel coding efficiency}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhjn hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubji)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubj)}(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&]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&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(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().}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj ubh)}(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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./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_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}(hjA!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=!hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM ubj)}(h h]h }(hjP!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=!hhhjO!hM ubj)}(hdrm_dp_max_dprx_data_rateh]j)}(hdrm_dp_max_dprx_data_rateh]hdrm_dp_max_dprx_data_rate}(hjb!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=!hhhjO!hM ubj)}(h"(int max_link_rate, int max_lanes)h](j)}(hint max_link_rateh](j)}(hinth]hint}(hj~!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz!ubj)}(h max_link_rateh]h max_link_rate}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv!ubj)}(h int max_lanesh](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_lanesh]h max_lanes}(hj!hhhNhNubah}(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)Get the max data bandwidth of a DPRX sinkh]h)Get the max data bandwidth of a DPRX sink}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj!hhubah}(h]h ]h"]h$]h&]uh1jhj6!hhhjO!hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhjhNhNubj)}(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%)}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj"ubji)}(hhh](jn)}(h9``int max_link_rate`` max DPRX link rate in 10kbps units h](jt)}(h``int max_link_rate``h]jz)}(hj:"h]hint max_link_rate}(hj<"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8"ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj4"ubj)}(hhh]h)}(h"max DPRX link rate in 10kbps unitsh]h"max DPRX link rate in 10kbps units}(hjS"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO"hM hjP"ubah}(h]h ]h"]h$]h&]uh1jhj4"ubeh}(h]h ]h"]h$]h&]uh1jmhjO"hM hj1"ubjn)}(h&``int max_lanes`` max DPRX lane count h](jt)}(h``int max_lanes``h]jz)}(hjs"h]h int max_lanes}(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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hjm"ubj)}(hhh]h)}(hmax DPRX lane counth]hmax DPRX lane count}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jhjm"ubeh}(h]h ]h"]h$]h&]uh1jmhj"hM hj1"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:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj"ubh)}(h4Given a link rate and lanes, get the data bandwidth.h]h4Given a link rate and lanes, get the data bandwidth.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chM hj"ubh)}(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.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj"ubh)}(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.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj"ubh)}(h,Returns the maximum data rate in kBps units.h]h,Returns the maximum data rate in kBps units.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:269: ./drivers/gpu/drm/display/drm_dp_helper.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]'display-port-helper-functions-referenceah ]h"]'display port helper functions referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h+Display Port CEC Helper Functions Referenceh]h+Display Port CEC Helper Functions Reference}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhMubh)}(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.}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:275: ./drivers/gpu/drm/display/drm_dp_cec.chK8hj#hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_cec_irq (C function)c.drm_dp_cec_irqhNtauh1jxhj#hhhNhNubj)}(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}(hjH#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chKubj)}(h h]h }(hjW#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD#hhhjV#hKubj)}(hdrm_dp_cec_irqh]j)}(hdrm_dp_cec_irqh]hdrm_dp_cec_irq}(hji#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjD#hhhjV#hKubj)}(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%)}jjk#sbc.drm_dp_cec_irqasbuh1hhj#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&]jjuh1jhjD#hhhjV#hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj@#hhhjV#hKubah}(h]j;#ah ](jjeh"]h$]h&]jj)jhuh1jhjV#hKhj=#hhubj)}(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:278: ./drivers/gpu/drm/display/drm_dp_cec.chKhj$hhubah}(h]h ]h"]h$]h&]uh1jhj=#hhhjV#hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj $jj $jjjuh1jhhhj#hNhNubj)}(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%)}(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:278: ./drivers/gpu/drm/display/drm_dp_cec.chKhj$$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&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chKhjC$ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjb$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^$hKhj_$ubah}(h]h ]h"]h$]h&]uh1jhjC$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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chKhj$$ubh)}(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:278: ./drivers/gpu/drm/display/drm_dp_cec.chKhj$$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dp_cec_register_connector (C function)c.drm_dp_cec_register_connectorhNtauh1jxhj#hhhNhNubj)}(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&]uh1jhj$hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hMubj)}(hdrm_dp_cec_register_connectorh]j)}(hdrm_dp_cec_register_connectorh]hdrm_dp_cec_register_connector}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj$hMubj)}(h9(struct drm_dp_aux *aux, struct drm_connector *connector)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_cec_register_connectorasbuh1hhj%ubj)}(h h]h }(hjD%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(hj9h]h*}(hjR%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)}(hstruct drm_connector *connectorh](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_connectorh]h drm_connector}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j@%c.drm_dp_cec_register_connectorasbuh1hhjt%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt%ubj9)}(hj9h]h*}(hj%hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjt%ubj)}(h connectorh]h connector}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt%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 new connectorh]hregister a new connector}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhj#hNhNubj)}(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%)}(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:278: ./drivers/gpu/drm/display/drm_dp_cec.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&]uh1jyhj8&ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chMhj4&ubj)}(hhh]h)}(hDisplayPort AUX channelh]hDisplayPort AUX channel}(hjS&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO&hMhjP&ubah}(h]h ]h"]h$]h&]uh1jhj4&ubeh}(h]h ]h"]h$]h&]uh1jmhjO&hMhj1&ubjn)}(h2``struct drm_connector *connector`` drm connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjs&h]hstruct drm_connector *connector}(hju&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq&ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chMhjm&ubj)}(hhh]h)}(h drm connectorh]h drm connector}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhjm&ubeh}(h]h ]h"]h$]h&]uh1jmhj&hMhj1&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:278: ./drivers/gpu/drm/display/drm_dp_cec.chMhj&ubh)}(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.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:278: ./drivers/gpu/drm/display/drm_dp_cec.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_cec_unregister_connector (C function)!c.drm_dp_cec_unregister_connectorhNtauh1jxhj#hhhNhNubj)}(hhh](j)}(h=void drm_dp_cec_unregister_connector (struct drm_dp_aux *aux)h]j)}(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&]uh1jyhj+ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./include/drm/display/drm_dp_dual_mode_helper.hhKphj+ubj)}(hhh]h)}(h"Level shifter / protocol converterh]h"Level shifter / protocol converter}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:287: ./include/drm/display/drm_dp_dual_mode_helper.hhKqhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKphjN*ubeh}(h]h ]h"]h$]h&]uh1jhhj2*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_dual_mode_read (C function)c.drm_dp_dual_mode_readhNtauh1jxhj=(hhhNhNubj)}(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&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj ,modnameN classnameNjj)}j]j%)}jdrm_dp_dual_mode_readsbc.drm_dp_dual_mode_readasbuh1hhj,hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK3ubj)}(h h]h }(hj,,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj+,hK3ubj)}(hdrm_dp_dual_mode_readh]j)}(hj(,h]hdrm_dp_dual_mode_read}(hj>,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj+,hK3ubj)}(hC(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h](j)}(hstruct i2c_adapter *adapterh](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 i2c_adapterh]h i2c_adapter}(hjw,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjy,modnameN classnameNjj)}j]j&,c.drm_dp_dual_mode_readasbuh1hhjU,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU,ubj9)}(hj9h]h*}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjU,ubj)}(hadapterh]hadapter}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ,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]j&,c.drm_dp_dual_mode_readasbuh1hhj,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&]noemphjjuh1jhjQ,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&]noemphjjuh1jhjQ,ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjV-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjX-modnameN classnameNjj)}j]j&,c.drm_dp_dual_mode_readasbuh1hhjO-ubj)}(h h]h }(hjt-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO-ubj)}(hsizeh]hsize}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQ,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)}(h.Read from the DP dual mode adaptor register(s)h]h.Read from the DP dual mode adaptor register(s)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK3hj-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+,hK3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jhhhj=(hNhNubj)}(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%)}(hj-h]h Parameters}(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:290: ./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}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK4hj-ubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hK4hj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj.hK4hj-ubjn)}(h``u8 offset`` register offset 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&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK5hj .ubj)}(hhh]h)}(hregister offseth]hregister offset}(hj?.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;.hK5hj<.ubah}(h]h ]h"]h$]h&]uh1jhj .ubeh}(h]h ]h"]h$]h&]uh1jmhj;.hK5hj-ubjn)}(h(``void *buffer`` buffer for return data h](jt)}(h``void *buffer``h]jz)}(hj_.h]h void *buffer}(hja.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj].ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK6hjY.ubj)}(hhh]h)}(hbuffer for return datah]hbuffer for return data}(hjx.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt.hK6hju.ubah}(h]h ]h"]h$]h&]uh1jhjY.ubeh}(h]h ]h"]h$]h&]uh1jmhjt.hK6hj-ubjn)}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK7hj.ubj)}(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&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hK7hj-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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubh; bytes from the DP dual mode adaptor registers starting at }(hj.hhhNhNubj%)}(h **offset**h]hoffset}(hj/hhhNhNubah}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK8hj-ubh)}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chK;hj-ubh)}(h,0 on success, negative error code on failureh]h,0 on success, negative error code on failure}(hj4/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./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.}(hj=5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjo4ubh)}(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 }(hjL5hhhNhNubj%)}(h**DRM_DP_DUAL_MODE_UNKNOWN**h]hDRM_DP_DUAL_MODE_UNKNOWN}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjL5ubh 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.}(hjL5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjo4ubh)}(h **Return**h]j%)}(hjo5h]hReturn}(hjq5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjm5ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjo4ubh)}(h)The type of the DP dual mode adaptor usedh]h)The type of the DP dual mode adaptor used}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chKhjo4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(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_clockhNtauh1jxhj=(hhhNhNubj)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMubj)}(hdrm_dp_dual_mode_max_tmds_clockh]j)}(hdrm_dp_dual_mode_max_tmds_clockh]hdrm_dp_dual_mode_max_tmds_clock}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5hhhj5hMubj)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hstruct}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj*6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,6modnameN classnameNjj)}j]j%)}jj5sb!c.drm_dp_dual_mode_max_tmds_clockasbuh1hhj5ubj)}(h h]h }(hjJ6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hj9h]h*}(hjX6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hdevh]hdev}(hje6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(henum drm_dp_dual_mode_type typeh](j)}(hjh]henum}(hj~6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz6ubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jF6!c.drm_dp_dual_mode_max_tmds_clockasbuh1hhjz6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz6ubj)}(htypeh]htype}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]jF6!c.drm_dp_dual_mode_max_tmds_clockasbuh1hhj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hj+7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(hadapterh]hadapter}(hj87hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhj5hMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhj5hMhj5hhubj)}(hhh]h)}(h'Max TMDS clock for DP dual mode adaptorh]h'Max TMDS clock for DP dual mode adaptor}(hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj_7hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjz7jjz7jjjuh1jhhhj=(hNhNubj)}(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%)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hj~7ubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hj7h]hconst struct drm_device *dev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj7ubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hj7h]h drm_device}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhj7hMhj7ubh to use}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhj7ubjn)}(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)}(hj7h]henum drm_dp_dual_mode_type type}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj7ubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj8hMhj7ubjn)}(h<``struct i2c_adapter *adapter`` I2C adapter for the DDC bus h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj48h]hstruct i2c_adapter *adapter}(hj68hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj28ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hj.8ubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hjM8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI8hM hjJ8ubah}(h]h ]h"]h$]h&]uh1jhj.8ubeh}(h]h ]h"]h$]h&]uh1jmhjI8hM hj7ubeh}(h]h ]h"]h$]h&]uh1jhhj~7ubh)}(h**Description**h]j%)}(hjo8h]h Description}(hjq8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjm8ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hj~7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM hj~7ubh)}(h **Return**h]j%)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj~7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj~7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(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_outputhNtauh1jxhj=(hhhNhNubj)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM2ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hM2ubj)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hM2ubj)}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj%9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hstruct}(hj39hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj@9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjQ9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjS9modnameN classnameNjj)}j]j%)}jj8sb"c.drm_dp_dual_mode_get_tmds_outputasbuh1hhj9ubj)}(h h]h }(hjq9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(hdevh]hdev}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(henum drm_dp_dual_mode_type typeh](j)}(hjh]henum}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jm9"c.drm_dp_dual_mode_get_tmds_outputasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(htypeh]htype}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(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}(hj&:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(:modnameN classnameNjj)}j]jm9"c.drm_dp_dual_mode_get_tmds_outputasbuh1hhj:ubj)}(h h]h }(hjD:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hjR:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubj)}(hadapterh]hadapter}(hj_:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(h bool *enabledh](j)}(hjAh]hbool}(hjx:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt:ubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjt:ubj)}(henabledh]henabled}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj8hM2ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj8hM2ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj8hM2hj8hhubj)}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM2hj:hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jhhhj=(hNhNubj)}(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}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM6hj: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)}(hj ;h]hconst struct drm_device *dev}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM3hj;ubj)}(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&]uh1jyhj(;ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhj ;hM3hj$;ubh to use}(hj$;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ;hM3hj!;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj ;hM3hj;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)}(hjc;h]henum drm_dp_dual_mode_type type}(hje;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhja;ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM4hj];ubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hj|;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx;hM4hjy;ubah}(h]h ]h"]h$]h&]uh1jhj];ubeh}(h]h ]h"]h$]h&]uh1jmhjx;hM4hj;ubjn)}(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}(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:290: ./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;hM5hj;ubjn)}(h;``bool *enabled`` current state of the TMDS output buffers h](jt)}(h``bool *enabled``h]jz)}(hj;h]h bool *enabled}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM6hj;ubj)}(hhh]h)}(h(current state of the TMDS output buffersh]h(current state of the TMDS output buffers}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM6hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hM6hj;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&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM8hj:ubh)}(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.}(hj&<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM7hj:ubh)}(h **Return**h]j%)}(hj7<h]hReturn}(hj9<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5<ubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM>hj:ubh)}(h,0 on success, negative error code on failureh]h,0 on success, negative error code on failure}(hjM<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM?hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(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_outputhNtauh1jxhj=(hhhNhNubj)}(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}(hj|<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx<hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM\ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx<hhhj<hM\ubj)}(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}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjx<hhhj<hM\ubj)}(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 }(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_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_dp_dual_mode_set_tmds_outputasbuh1hhj<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)}(henum drm_dp_dual_mode_type typeh](j)}(hjh]henum}(hjF=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB=ubj)}(h h]h }(hjS=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB=ubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(hjd=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjf=modnameN classnameNjj)}j]j="c.drm_dp_dual_mode_set_tmds_outputasbuh1hhjB=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB=ubj)}(htypeh]htype}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(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}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j="c.drm_dp_dual_mode_set_tmds_outputasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hj9h]h*}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubj)}(hadapterh]hadapter}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<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}(hj4>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhjx<hhhj<hM\ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjt<hhhj<hM\ubah}(h]jo<ah ](jjeh"]h$]h&]jj)jhuh1jhj<hM\hjq<hhubj)}(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}(hj^>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM\hj[>hhubah}(h]h ]h"]h$]h&]uh1jhjq<hhhj<hM\ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjv>jjv>jjjuh1jhhhj=(hNhNubj)}(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%)}(hj>h]h Parameters}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM`hjz>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)}(hj>h]hconst struct drm_device *dev}(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:290: ./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)}(hj>h]h drm_device}(hj>hhhNhNubah}(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)}(hj>h]henum drm_dp_dual_mode_type type}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM^hj>ubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(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 i2c_adapter *adapter`` I2C adapter for the DDC bus h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj0?h]hstruct i2c_adapter *adapter}(hj2?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.?ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM_hj*?ubj)}(hhh]h)}(hI2C adapter for the DDC bush]hI2C adapter for the DDC bus}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE?hM_hjF?ubah}(h]h ]h"]h$]h&]uh1jhj*?ubeh}(h]h ]h"]h$]h&]uh1jmhjE?hM_hj>ubjn)}(hG``bool enable`` enable (as opposed to disable) the TMDS output buffers h](jt)}(h``bool enable``h]jz)}(hji?h]h bool enable}(hjk?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjg?ubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chM`hjc?ubj)}(hhh]h)}(h6enable (as opposed to disable) the TMDS output buffersh]h6enable (as opposed to disable) the TMDS output buffers}(hj?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>ubeh}(h]h ]h"]h$]h&]uh1jhhjz>ubh)}(h**Description**h]j%)}(hj?h]h Description}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMbhjz>ubh)}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMahjz>ubh)}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMehjz>ubh)}(h,0 on success, negative error code on failureh]h,0 on success, negative error code on failure}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMfhjz>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(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_namehNtauh1jxhj=(hhhNhNubj)}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @hhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @hhhj@hMubj)}(hcharh]hchar}(hj,@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @hhhj@hMubj)}(h h]h }(hj:@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @hhhj@hMubj9)}(hj9h]h*}(hjH@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj @hhhj@hMubj)}(hdrm_dp_get_dual_mode_type_nameh]j)}(hdrm_dp_get_dual_mode_type_nameh]hdrm_dp_get_dual_mode_type_name}(hjY@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj @hhhj@hMubj)}(h!(enum drm_dp_dual_mode_type type)h]j)}(henum drm_dp_dual_mode_type typeh](j)}(hjh]henum}(hju@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq@ubh)}(hhh]j)}(hdrm_dp_dual_mode_typeh]hdrm_dp_dual_mode_type}(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_get_dual_mode_type_nameasbuh1hhjq@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq@ubj)}(htypeh]htype}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjm@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)}(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:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jhhhj=(hNhNubj)}(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%)}(hj Ah]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Aubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjAubji)}(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)}(hj,Ah]henum drm_dp_dual_mode_type type}(hj.AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj*Aubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj&Aubj)}(hhh]h)}(hDP dual mode adaptor typeh]hDP dual mode adaptor type}(hjEAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAAhMhjBAubah}(h]h ]h"]h$]h&]uh1jhj&Aubeh}(h]h ]h"]h$]h&]uh1jmhjAAhMhj#Aubah}(h]h ]h"]h$]h&]uh1jhhjAubh)}(h **Return**h]j%)}(hjgAh]hReturn}(hjiAhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeAubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjAubh)}(h6String representation of the DP dual mode adaptor typeh]h6String representation of the DP dual mode adaptor type}(hj}AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_lspcon_get_mode (C function)c.drm_lspcon_get_modehNtauh1jxhj=(hhhNhNubj)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjAhMubj)}(hdrm_lspcon_get_modeh]j)}(hdrm_lspcon_get_modeh]hdrm_lspcon_get_mode}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjAhhhjAhMubj)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj"BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$BmodnameN classnameNjj)}j]j%)}jjAsbc.drm_lspcon_get_modeasbuh1hhjAubj)}(h h]h }(hjBBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj9h]h*}(hjPBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj)}(hdevh]hdev}(hj]BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjvBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrBubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j>Bc.drm_lspcon_get_modeasbuh1hhjrBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrBubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrBubj)}(hadapterh]hadapter}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(henum drm_lspcon_mode *modeh](j)}(hjh]henum}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hdrm_lspcon_modeh]hdrm_lspcon_mode}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j>Bc.drm_lspcon_get_modeasbuh1hhjBubj)}(h h]h }(hj"ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj9)}(hj9h]h*}(hj0ChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjBubj)}(hmodeh]hmode}(hj=ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjAhhhjAhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjAhMubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhjAhMhjAhhubj)}(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)}(hjgChhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjdChhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhj=(hNhNubj)}(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%)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjCubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hjCh]hconst struct drm_device *dev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjCubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hjCh]h drm_device}(hjChhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjChMhjCubh to use}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChMhjCubjn)}(h5``struct i2c_adapter *adapter`` I2C-over-aux adapter h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjDh]hstruct i2c_adapter *adapter}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjCubj)}(hhh]h)}(hI2C-over-aux adapterh]hI2C-over-aux adapter}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhjCubjn)}(hP``enum drm_lspcon_mode *mode`` current lspcon mode of operation output variable h](jt)}(h``enum drm_lspcon_mode *mode``h]jz)}(hj9Dh]henum drm_lspcon_mode *mode}(hj;DhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7Dubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj3Dubj)}(hhh]h)}(h0current lspcon mode of operation output variableh]h0current lspcon mode of operation output variable}(hjRDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNDhMhjODubah}(h]h ]h"]h$]h&]uh1jhj3Dubeh}(h]h ]h"]h$]h&]uh1jmhjNDhMhjCubeh}(h]h ]h"]h$]h&]uh1jhhjCubh)}(h **Return**h]j%)}(hjtDh]hReturn}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrDubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjCubh)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_lspcon_set_mode (C function)c.drm_lspcon_set_modehNtauh1jxhj=(hhhNhNubj)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjDhMubj)}(hdrm_lspcon_set_modeh]j)}(hdrm_lspcon_set_modeh]hdrm_lspcon_set_mode}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhhjDhMubj)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj/EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1EmodnameN classnameNjj)}j]j%)}jjDsbc.drm_lspcon_set_modeasbuh1hhjDubj)}(h h]h }(hjOEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hj]EhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hdevh]hdev}(hjjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]jKEc.drm_lspcon_set_modeasbuh1hhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(hadapterh]hadapter}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubj)}(henum drm_lspcon_mode modeh](j)}(hjh]henum}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hdrm_lspcon_modeh]hdrm_lspcon_mode}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]jKEc.drm_lspcon_set_modeasbuh1hhjEubj)}(h h]h }(hj/FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hmodeh]hmode}(hj=FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubj)}(h int time_outh](j)}(hinth]hint}(hjVFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRFubj)}(h h]h }(hjdFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRFubj)}(htime_outh]htime_out}(hjrFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRFubeh}(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@Change LSPCON's mode of operation by writing offset (0x80, 0x40)h]hBChange LSPCON’s mode of operation by writing offset (0x80, 0x40)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhj=(hNhNubj)}(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%)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjFubji)}(hhh](jn)}(h=``const struct drm_device *dev`` :c:type:`drm_device` to use h](jt)}(h ``const struct drm_device *dev``h]jz)}(hjFh]hconst struct drm_device *dev}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjFubj)}(hhh]h)}(h:c:type:`drm_device` to useh](h)}(h:c:type:`drm_device`h]jz)}(hjFh]h drm_device}(hjFhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_deviceuh1hhjFhMhjFubh to use}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjFhMhjFubjn)}(h5``struct i2c_adapter *adapter`` I2C-over-aux adapter h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj5Gh]hstruct i2c_adapter *adapter}(hj7GhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3Gubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhj/Gubj)}(hhh]h)}(hI2C-over-aux adapterh]hI2C-over-aux adapter}(hjNGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJGhMhjKGubah}(h]h ]h"]h$]h&]uh1jhj/Gubeh}(h]h ]h"]h$]h&]uh1jmhjJGhMhjFubjn)}(h9``enum drm_lspcon_mode mode`` required mode of operation h](jt)}(h``enum drm_lspcon_mode mode``h]jz)}(hjnGh]henum drm_lspcon_mode mode}(hjpGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlGubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjhGubj)}(hhh]h)}(hrequired mode of operationh]hrequired mode of operation}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjhGubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhjFubjn)}(h3``int time_out`` LSPCON mode change settle timeout h](jt)}(h``int time_out``h]jz)}(hjGh]h int time_out}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjGubj)}(hhh]h)}(h!LSPCON mode change settle timeouth]h!LSPCON mode change settle timeout}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhjFubeh}(h]h ]h"]h$]h&]uh1jhhjFubh)}(h **Return**h]j%)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjFubh)}(h'0 on success, -error on failure/timeouth]h'0 on success, -error on failure/timeout}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhv/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:290: ./drivers/gpu/drm/display/drm_dp_dual_mode_helper.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj=(hhhNhNubeh}(h]9display-port-dual-mode-adaptor-helper-functions-referenceah ]h"]9display port dual mode adaptor helper functions referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hDisplay Port MST Helpersh]hDisplay Port MST Helpers}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhhhhhM&ubh)}(hhh](h)}(hOverviewh]hOverview}(hj*HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'HhhhhhM)ubh)}(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.}(hj8HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:299: ./drivers/gpu/drm/display/drm_dp_mst_topology.chK6hj'Hhhubh)}(hhh](h)}(hTopology refcount overviewh]hTopology refcount overview}(hjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGHhNhNubh)}(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 }(hjXHhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjbHh]hstruct drm_dp_mst_branch}(hjdHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj`Hubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMThjXHubh and }(hjXHhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjHh]hstruct drm_dp_mst_port}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjHhMThjXHubh are somewhat unusual. Both ports and branch devices have two different kinds of refcounts: topology refcounts, and malloc refcounts.}(hjXHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMThjGHubh)}(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 }(hjHhhhNhNubh)}(h.:c:type:`struct drm_connector `h]jz)}(hjHh]hstruct drm_connector}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMXhjHubhK will stay registered with userspace until the port’s refcount reaches 0.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMXhjGHubeh}(h]topology-refcount-overviewah ]h"]topology refcount overviewah$]h&]uh1hhj'HhhhNhNubh)}(hhh](h)}(hMalloc refcount overviewh]hMalloc refcount overview}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhNhNubh)}(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 }(hjHhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjIh]hstruct drm_dp_mst_port}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMdhjHubh or }(hjHhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hj&Ih]hstruct drm_dp_mst_branch}(hj(IhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$Iubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjIhMdhjHubhX( 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 }(hjHhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjIIh]hstruct drm_dp_mst_branch}(hjKIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjIhMdhjHubh or }hjHsbh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjlIh]hstruct drm_dp_mst_port}(hjnIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjIhMdhjHubh respectively will be freed.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMdhjHubh)}(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 }(hjIhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjIh]hstruct drm_dp_mst_branch}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMlhjIubh, malloc refcounts are not currently exposed to drivers. As of writing this documentation, there are no drivers that have a usecase for accessing }(hjIhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjIh]hstruct drm_dp_mst_branch}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjIhMlhjIubh 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.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIhMlhjHubeh}(h]malloc-refcount-overviewah ]h"]malloc refcount overviewah$]h&]uh1hhj'HhhhNhNubh)}(hhh](h)}(h$Refcount relationships in a topologyh]h$Refcount relationships in a topology}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhNhNubh)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMvhjIubkfigure 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}j9j(Jsuh1jJhjJhhhKubhcaption)}(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.}(hj-JhhhNhNubah}(h]h ]h"]h$]h&]uh1j+Jhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM{hjJubeh}(h]id5ah ]h"]h$]h&]uh1jJhjJubah}(h]h ]h"]h$]h&]uh1jJhjIubh)}(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.}(hjIJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjIubh)}(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.}(hjXJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjIubjJ)}(hhh]jJ)}(hhh](jJ)}(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)J}j9jxJsuh1jJhjjJhhhKubj,J)}(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.}(hjzJhhhNhNubah}(h]h ]h"]h$]h&]uh1j+Jhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjjJubeh}(h]id6ah ]h"]h$]h&]uh1jJhjgJubah}(h]h ]h"]h$]h&]uh1jJhjIubh)}(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 }(hjJhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjJh]hstruct drm_dp_mst_port}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjJubhy is still accessible from memory. This also means port #3 has not yet decremented the malloc refcount of MSTB #3, so its }(hjJhhhNhNubh)}(h6:c:type:`struct drm_dp_mst_branch `h]jz)}(hjJh]hstruct drm_dp_mst_branch}(hjJhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjJhMhjJubhP will also stay allocated in memory until port #3’s malloc refcount reaches 0.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhMhjIubh)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjIubjJ)}(hhh]jJ)}(hhh]jJ)}(h0.. kernel-figure:: dp-mst/topology-figure-3.dot h]h}(h]h ]h"]h$]h&]uri gpu/dp-mst/topology-figure-3.dotj)J}j9j Ksuh1jJhjJhhhKubah}(h]h ]h"]h$]h&]uh1jJhjJubah}(h]h ]h"]h$]h&]uh1jJhjIubh)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:302: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjIubeh}(h]$refcount-relationships-in-a-topologyah ]h"]$refcount relationships in a topologyah$]h&]uh1hhj'HhhhNhNubeh}(h]id3ah ]h"]h$]overviewah&]uh1hhjHhhhhhM)j;Kubh)}(hhh](h)}(hFunctions Referenceh]hFunctions Reference}(hj;KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8KhhhhhM2ubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_mst_port (C struct)c.drm_dp_mst_porthNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_porth]j)}(hstruct drm_dp_mst_porth](j)}(hjh]hstruct}(hjbKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Khhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKubj)}(h h]h }(hjpKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^KhhhjoKhKubj)}(hdrm_dp_mst_porth]j)}(hj\Kh]hdrm_dp_mst_port}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Kubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^KhhhjoKhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjZKhhhjoKhKubah}(h]jUKah ](jjeh"]h$]h&]jj)jhuh1jhjoKhKhjWKhhubj)}(hhh]h)}(hMST porth]hMST port}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./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}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK@hjKubj@)}(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; };}hjKsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKBhjKubh)}(h **Members**h]j%)}(hjKh]hMembers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK]hjKubji)}(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)}(hjLh]h topology_kref}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKahj Lubj)}(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}(hj*LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK`hj'Lubah}(h]h ]h"]h$]h&]uh1jhj Lubeh}(h]h ]h"]h$]h&]uh1jmhj&LhKahjLubjn)}(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)}(hjKLh]h malloc_kref}(hjMLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjILubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhhjELubj)}(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().}(hjdLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKfhjaLubah}(h]h ]h"]h$]h&]uh1jhjELubeh}(h]h ]h"]h$]h&]uh1jmhj`LhKhhjLubjn)}(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)}(hjLh]htopology_ref_history}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKohjLubj)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKnhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjLhKohjLubjn)}(h``port_num`` port number h](jt)}(h ``port_num``h]jz)}(hjLh]hport_num}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK>hjLubj)}(hhh]h)}(h port numberh]h port number}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK>hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjLhK>hjLubjn)}(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)}(hjLh]hinput}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK@hjLubj)}(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 }(hjMhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjMh]hdrm_dp_mst_topology_mgr.base}(hjMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK?hjMubh.lock.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8MhK?hjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhj MhK@hjLubjn)}(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)}(hjUMh]hmcs}(hjWMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSMubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKBhjOMubj)}(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 }(hjnMhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjxMh]hdrm_dp_mst_topology_mgr.base}(hjzMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjvMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKAhjnMubh.lock.}(hjnMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhKAhjkMubah}(h]h ]h"]h$]h&]uh1jhjOMubeh}(h]h ]h"]h$]h&]uh1jmhjjMhKBhjLubjn)}(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)}(hjMh]hddps}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKDhjMubj)}(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 }(hjMhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjMh]hdrm_dp_mst_topology_mgr.base}(hjMhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKChjMubh.lock.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjMhKChjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjMhKDhjLubjn)}(hn``pdt`` Peer Device Type. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``pdt``h]jz)}(hjNh]hpdt}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj Nubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKFhj Nubj)}(hhh]h)}(hePeer Device Type. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock.h](hPeer Device Type. Protected by }(hj(NhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hj2Nh]hdrm_dp_mst_topology_mgr.base}(hj4NhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0Nubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKEhj(Nubh.lock.}(hj(NhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjONhKEhj%Nubah}(h]h ]h"]h$]h&]uh1jhj Nubeh}(h]h ]h"]h$]h&]uh1jmhj$NhKFhjLubjn)}(hx``ldps`` Legacy Device Plug Status. Protected by :c:type:`drm_dp_mst_topology_mgr.base `.lock. h](jt)}(h``ldps``h]jz)}(hjlNh]hldps}(hjnNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKHhjfNubj)}(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 }(hjNhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjNh]hdrm_dp_mst_topology_mgr.base}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKGhjNubh.lock.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhKGhjNubah}(h]h ]h"]h$]h&]uh1jhjfNubeh}(h]h ]h"]h$]h&]uh1jmhjNhKHhjLubjn)}(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)}(hjNh]hdpcd_rev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKJhjNubj)}(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 }(hjNhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjNh]hdrm_dp_mst_topology_mgr.base}(hjNhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKIhjNubh.lock.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj OhKIhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjNhKJhjLubjn)}(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)}(hj&Oh]hnum_sdp_streams}(hj(OhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$Oubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKLhj Oubj)}(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 }(hj?OhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjIOh]hdrm_dp_mst_topology_mgr.base}(hjKOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKKhj?Oubh.lock.}(hj?OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfOhKKhj`.lock. h](jt)}(h``num_sdp_stream_sinks``h]jz)}(hjOh]hnum_sdp_stream_sinks}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKNhj}Oubj)}(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 }(hjOhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjOh]hdrm_dp_mst_topology_mgr.base}(hjOhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKMhjOubh.lock.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhKMhjOubah}(h]h ]h"]h$]h&]uh1jhj}Oubeh}(h]h ]h"]h$]h&]uh1jmhjOhKNhjLubjn)}(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)}(hjOh]hfull_pbn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKPhjOubj)}(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 }(hjOhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjPh]hdrm_dp_mst_topology_mgr.base}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKOhjOubh.lock.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj PhKOhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjOhKPhjLubjn)}(h1``next`` link to next port on this branch device h](jt)}(h``next``h]jz)}(hj=Ph]hnext}(hj?PhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;Pubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKQhj7Pubj)}(hhh]h)}(h'link to next port on this branch deviceh]h'link to next port on this branch device}(hjVPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRPhKQhjSPubah}(h]h ]h"]h$]h&]uh1jhj7Pubeh}(h]h ]h"]h$]h&]uh1jmhjRPhKQhjLubjn)}(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)}(hjvPh]hmstb}(hjxPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtPubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjpPubj)}(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 }(hjPhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hjPh]hdrm_dp_mst_topology_mgr.lock}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjPubh$. There are two exceptions to this: }(hjPhhhNhNubh)}(hG:c:type:`drm_dp_mst_topology_mgr.up_req_work `h]jz)}(hjPh]h#drm_dp_mst_topology_mgr.up_req_work}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjPhKhjPubh and }(hjPhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.work `h]jz)}(hjPh]hdrm_dp_mst_topology_mgr.work}(hjPhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjPhKhjPubh, which do not grab }(hjPhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hjQh]hdrm_dp_mst_topology_mgr.lock}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjPhKhjPubhd during reads but are the only updaters of this list and are protected from writing concurrently by }(hjPhhhNhNubh)}(hF:c:type:`drm_dp_mst_topology_mgr.probe_lock `h]jz)}(hj&Qh]h"drm_dp_mst_topology_mgr.probe_lock}(hj(QhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$Qubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjPhKhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjPhKhjPubah}(h]h ]h"]h$]h&]uh1jhjpPubeh}(h]h ]h"]h$]h&]uh1jmhjPhKhjLubjn)}(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)}(hj_Qh]haux}(hjaQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]Qubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKShjYQubj)}(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 }(hjxQhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjQh]hdrm_dp_mst_topology_mgr.base}(hjQhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKRhjxQubh.lock.}(hjxQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhKRhjuQubah}(h]h ]h"]h$]h&]uh1jhjYQubeh}(h]h ]h"]h$]h&]uh1jmhjtQhKShjLubjn)}(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)}(hjQh]hpassthrough_aux}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKUhjQubj)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKThjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjQhKUhjLubjn)}(h-``parent`` branch device parent of this port h](jt)}(h ``parent``h]jz)}(hjQh]hparent}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKVhjQubj)}(hhh]h)}(h!branch device parent of this porth]h!branch device parent of this port}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj RhKVhj Rubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhj RhKVhjLubjn)}(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)}(hj/Rh]h connector}(hj1RhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-Rubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKXhj)Rubj)}(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 }(hjHRhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.base `h]jz)}(hjRRh]hdrm_dp_mst_topology_mgr.base}(hjTRhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPRubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKWhjHRubh.lock.}(hjHRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjoRhKWhjERubah}(h]h ]h"]h$]h&]uh1jhj)Rubeh}(h]h ]h"]h$]h&]uh1jmhjDRhKXhjLubjn)}(h0``mgr`` topology manager this port lives under. h](jt)}(h``mgr``h]jz)}(hjRh]hmgr}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKYhjRubj)}(hhh]h)}(h'topology manager this port lives under.h]h'topology manager this port lives under.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhKYhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjRhKYhjLubjn)}(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)}(hjRh]h cached_edid}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjRubj)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjRhKhjLubjn)}(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}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjRubj)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjSubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjShKhjLubeh}(h]h ]h"]h$]h&]uh1jhhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubh)}(h**Description**h]j%)}(hjASh]h Description}(hjCShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?Subah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj8Khhubh)}(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.}(hjWShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKYhj8Khhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_mst_branch (C struct)c.drm_dp_mst_branchhNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_branchh]j)}(hstruct drm_dp_mst_branchh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Shhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhK_ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ShhhjShK_ubj)}(hdrm_dp_mst_branchh]j)}(hjySh]hdrm_dp_mst_branch}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{ShhhjShK_ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwShhhjShK_ubah}(h]jrSah ](jjeh"]h$]h&]jj)jhuh1jhjShK_hjtShhubj)}(hhh]h)}(hMST branch device.h]hMST branch device.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjShhubah}(h]h ]h"]h$]h&]uh1jhjtShhhjShK_ubeh}(h]h ](jstructeh"]h$]h&]jjjjSjjSjjjuh1jhhhj8KhNhNubj)}(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}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjSubj@)}(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; };}hjSsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjSubh)}(h **Members**h]j%)}(hjTh]hMembers}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj Tubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjSubji)}(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)}(hj.Th]h topology_kref}(hj0ThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj,Tubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj(Tubj)}(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}(hjGThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjDTubah}(h]h ]h"]h$]h&]uh1jhj(Tubeh}(h]h ]h"]h$]h&]uh1jmhjCThKhj%Tubjn)}(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)}(hjhTh]h malloc_kref}(hjjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfTubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjbTubj)}(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().}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj~Tubah}(h]h ]h"]h$]h&]uh1jhjbTubeh}(h]h ]h"]h$]h&]uh1jmhj}ThKhj%Tubjn)}(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)}(hjTh]htopology_ref_history}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjTubj)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThKhj%Tubjn)}(hI``destroy_next`` linked-list entry used by drm_dp_delayed_destroy_work() h](jt)}(h``destroy_next``h]jz)}(hjTh]h destroy_next}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjTubj)}(hhh]h)}(h7linked-list entry used by drm_dp_delayed_destroy_work()h]h7linked-list entry used by drm_dp_delayed_destroy_work()}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThKhj%Tubjn)}(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)}(hjUh]hrad}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjUubj)}(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 }(hj/UhhhNhNubh)}(hG:c:type:`drm_dp_mst_topology_mgr.mst_primary `h]jz)}(hj9Uh]h#drm_dp_mst_topology_mgr.mst_primary}(hj;UhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7Uubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj/Uubh, 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.}(hj/UhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjVUhKhj,Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhj+UhKhj%Tubjn)}(h8``lct`` Link count total to talk to this branch device. h](jt)}(h``lct``h]jz)}(hjsUh]hlct}(hjuUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjmUubj)}(hhh]h)}(h/Link count total to talk to this branch device.h]h/Link count total to talk to this branch device.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjmUubeh}(h]h ]h"]h$]h&]uh1jmhjUhKhj%Tubjn)}(h-``num_ports`` number of ports on the branch. h](jt)}(h ``num_ports``h]jz)}(hjUh]h num_ports}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjUubj)}(hhh]h)}(hnumber of ports on the branch.h]hnumber of ports on the branch.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhKhj%Tubjn)}(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)}(hjUh]hports}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjUubj)}(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 }(hjUhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hjVh]hdrm_dp_mst_topology_mgr.lock}(hj VhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjUubh$. There are two exceptions to this: }(hjUhhhNhNubh)}(hG:c:type:`drm_dp_mst_topology_mgr.up_req_work `h]jz)}(hj,Vh]h#drm_dp_mst_topology_mgr.up_req_work}(hj.VhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj*Vubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj%VhKhjUubh and }(hjUhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.work `h]jz)}(hjOVh]hdrm_dp_mst_topology_mgr.work}(hjQVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjMVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj%VhKhjUubh, which do not grab }(hjUhhhNhNubh)}(h@:c:type:`drm_dp_mst_topology_mgr.lock `h]jz)}(hjrVh]hdrm_dp_mst_topology_mgr.lock}(hjtVhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj%VhKhjUubhn during reads but are the only updaters of this list and are protected from updating the list concurrently by }(hjUhhhNhNubj%)}(h&**drm_dp_mst_topology_mgr.probe_lock**h]h"drm_dp_mst_topology_mgr.probe_lock}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]uh1hhj%VhKhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjUhKhj%Tubjn)}(h>``port_parent`` pointer to the port parent, NULL if toplevel. h](jt)}(h``port_parent``h]jz)}(hjVh]h port_parent}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjVubj)}(hhh]h)}(h-pointer to the port parent, NULL if toplevel.h]h-pointer to the port parent, NULL if toplevel.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjVhKhj%Tubjn)}(h1``mgr`` topology manager for this branch device. h](jt)}(h``mgr``h]jz)}(hjVh]hmgr}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhjVubj)}(hhh]h)}(h(topology manager for this branch device.h]h(topology manager for this branch device.}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhKhjWubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjWhKhj%Tubjn)}(hR``link_address_sent`` if a link address message has been sent to this device yet. h](jt)}(h``link_address_sent``h]jz)}(hj+Wh]hlink_address_sent}(hj-WhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)Wubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj%Wubj)}(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.}(hjDWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@WhKhjAWubah}(h]h ]h"]h$]h&]uh1jhj%Wubeh}(h]h ]h"]h$]h&]uh1jmhj@WhKhj%Tubjn)}(h[``guid`` guid for DP 1.2 branch device. port under this branch can be identified by port #.h](jt)}(h``guid``h]jz)}(hjdWh]hguid}(hjfWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbWubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj^Wubj)}(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 #.}(hj}WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyWhKhjzWubah}(h]h ]h"]h$]h&]uh1jhj^Wubeh}(h]h ]h"]h$]h&]uh1jmhjyWhKhj%Tubeh}(h]h ]h"]h$]h&]uh1jhhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubh)}(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:308: ./include/drm/display/drm_dp_mst_helper.hhKhj8Khhubh)}(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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKhj8Khhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_atomic_payload (C struct)c.drm_dp_mst_atomic_payloadhNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_atomic_payloadh]j)}(h struct drm_dp_mst_atomic_payloadh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhKubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhKubj)}(hdrm_dp_mst_atomic_payloadh]j)}(hjWh]hdrm_dp_mst_atomic_payload}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjWhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjWhKubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjWhKhjWhhubj)}(hhh]h)}(h&Atomic state struct for an MST payloadh]h&Atomic state struct for an MST payload}(hj&XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj#Xhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhKubeh}(h]h ](jstructeh"]h$]h&]jjjj>Xjj>Xjjjuh1jhhhj8KhNhNubj)}(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}(hjJXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFXubh:}(hjFXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjBXubj@)}(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; };}hjcXsbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjBXubh)}(h **Members**h]j%)}(hjtXh]hMembers}(hjvXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrXubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM$hjBXubji)}(hhh](jn)}(h/``port`` The MST port assigned to this payload h](jt)}(h``port``h]jz)}(hjXh]hport}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjXubj)}(hhh]h)}(h%The MST port assigned to this payloadh]h%The MST port assigned to this payload}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhMhjXubjn)}(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)}(hjXh]h vc_start_slot}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM2hjXubj)}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhjXubh)}(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:}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM"hjXubh)}(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 YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM'hjYubah}(h]h ]h"]h$]h&]uh1hhjYubh)}(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 }(hj#YhhhNhNubh)}(h:c:type:`drm_crtc_commit`h]jz)}(hj-Yh]hdrm_crtc_commit}(hj/YhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj+Yubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_commituh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM,hj#Yubh structs in }(hj#YhhhNhNubh)}(hK:c:type:`drm_dp_mst_topology_state.commit_deps `h]jz)}(hjQYh]h%drm_dp_mst_topology_state.commit_deps}(hjSYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOYubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhjJYhM,hj#Yubh.}(hj#YhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJYhM,hjYubah}(h]h ]h"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]j8j9uh1hhjYhM'hjXubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM0hjXubeh}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjXhM2hjXubjn)}(h0``vcpi`` The Virtual Channel Payload Identifier h](jt)}(h``vcpi``h]jz)}(hjYh]hvcpi}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM6hjYubj)}(hhh]h)}(h&The Virtual Channel Payload Identifierh]h&The Virtual Channel Payload Identifier}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhM6hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhM6hjXubjn)}(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)}(hjYh]h time_slots}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM:hjYubj)}(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}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM9hjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhM:hjXubjn)}(h/``pbn`` The payload bandwidth for this payload h](jt)}(h``pbn``h]jz)}(hjZh]hpbn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM>hjZubj)}(hhh]h)}(h&The payload bandwidth for this payloadh]h&The payload bandwidth for this payload}(hj1ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ZhM>hj.Zubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhj-ZhM>hjXubjn)}(hU``delete`` Whether or not we intend to delete this payload during this atomic commit h](jt)}(h ``delete``h]jz)}(hjQZh]hdelete}(hjSZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOZubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMAhjKZubj)}(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}(hjjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfZhMAhjgZubah}(h]h ]h"]h$]h&]uh1jhjKZubeh}(h]h ]h"]h$]h&]uh1jmhjfZhMAhjXubjn)}(h<``dsc_enabled`` Whether or not this payload has DSC enabled h](jt)}(h``dsc_enabled``h]jz)}(hjZh]h dsc_enabled}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMChjZubj)}(hhh]h)}(h+Whether or not this payload has DSC enabledh]h+Whether or not this payload has DSC enabled}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMChjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjZhMChjXubjn)}(hD``payload_allocation_status`` The allocation status of this payload h](jt)}(h``payload_allocation_status``h]jz)}(hjZh]hpayload_allocation_status}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMFhjZubj)}(hhh]h)}(h%The allocation status of this payloadh]h%The allocation status of this payload}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMFhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjZhMFhjXubjn)}(h'``next`` The list node for this payloadh](jt)}(h``next``h]jz)}(hjZh]hnext}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMHhjZubj)}(hhh]h)}(hThe list node for this payloadh]hThe list node for this payload}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMIhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhj[hMHhjXubeh}(h]h ]h"]h$]h&]uh1jhhjBXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubh)}(h**Description**h]j%)}(hj?[h]h Description}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMLhj8Khhubh)}(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.}(hjU[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj8Khhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_topology_state (C struct)c.drm_dp_mst_topology_statehNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_topology_stateh]j)}(h struct drm_dp_mst_topology_stateh](j)}(hjh]hstruct}(hj}[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy[hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy[hhhj[hMubj)}(hdrm_dp_mst_topology_stateh]j)}(hjw[h]hdrm_dp_mst_topology_state}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]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%DisplayPort MST topology atomic stateh]h%DisplayPort MST topology atomic state}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjr[hhhj[hMubeh}(h]h ](jstructeh"]h$]h&]jjjj[jj[jjjuh1jhhhj8KhNhNubj)}(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}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMQhj[ubj@)}(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; };}hj[sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMShj[ubh)}(h **Members**h]j%)}(hj \h]hMembers}(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:308: ./include/drm/display/drm_dp_mst_helper.hhM`hj[ubji)}(hhh](jn)}(h'``base`` Base private state for atomic h](jt)}(h``base``h]jz)}(hj,\h]hbase}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMShj&\ubj)}(hhh]h)}(hBase private state for atomich]hBase private state for atomic}(hjE\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA\hMShjB\ubah}(h]h ]h"]h$]h&]uh1jhj&\ubeh}(h]h ]h"]h$]h&]uh1jmhjA\hMShj#\ubjn)}(h``mgr`` The topology manager h](jt)}(h``mgr``h]jz)}(hje\h]hmgr}(hjg\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjc\ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMVhj_\ubj)}(hhh]h)}(hThe topology managerh]hThe topology manager}(hj~\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz\hMVhj{\ubah}(h]h ]h"]h$]h&]uh1jhj_\ubeh}(h]h ]h"]h$]h&]uh1jmhjz\hMVhj#\ubjn)}(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)}(hj\h]hpending_crtc_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:308: ./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:308: ./include/drm/display/drm_dp_mst_helper.hhMZhj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhj\hM[hj#\ubjn)}(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)}(hj\h]h commit_deps}(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:308: ./include/drm/display/drm_dp_mst_helper.hhM`hj\ubj)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM_hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhj\hM`hj#\ubjn)}(hB``num_commit_deps`` The number of CRTC commits in **commit_deps** h](jt)}(h``num_commit_deps``h]jz)}(hj]h]hnum_commit_deps}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMchj ]ubj)}(hhh]h)}(h-The number of CRTC commits in **commit_deps**h](hThe number of CRTC commits in }(hj+]hhhNhNubj%)}(h**commit_deps**h]h commit_deps}(hj3]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+]ubeh}(h]h ]h"]h$]h&]uh1hhj']hMchj(]ubah}(h]h ]h"]h$]h&]uh1jhj ]ubeh}(h]h ]h"]h$]h&]uh1jmhj']hMchj#\ubjn)}(hI``payload_mask`` A bitmask of allocated VCPIs, used for VCPI assignments h](jt)}(h``payload_mask``h]jz)}(hjY]h]h payload_mask}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMfhjS]ubj)}(hhh]h)}(h7A bitmask of allocated VCPIs, used for VCPI assignmentsh]h7A bitmask of allocated VCPIs, used for VCPI assignments}(hjr]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn]hMfhjo]ubah}(h]h ]h"]h$]h&]uh1jhjS]ubeh}(h]h ]h"]h$]h&]uh1jmhjn]hMfhj#\ubjn)}(hH``payloads`` The list of payloads being created/destroyed in this state h](jt)}(h ``payloads``h]jz)}(hj]h]hpayloads}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhhj]ubj)}(hhh]h)}(h:The list of payloads being created/destroyed in this stateh]h:The list of payloads being created/destroyed in this state}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hMhhj#\ubjn)}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMkhj]ubj)}(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)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMkhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hMkhj#\ubjn)}(hD``start_slot`` The first usable time slot in this topology (1 or 0) h](jt)}(h``start_slot``h]jz)}(hj^h]h 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:308: ./include/drm/display/drm_dp_mst_helper.hhMmhj]ubj)}(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)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMmhj^ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj^hMmhj#\ubjn)}(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)}(hj=^h]hpbn_div}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMqhj7^ubj)}(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.}(hjV^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR^hMqhjS^ubah}(h]h ]h"]h$]h&]uh1jhj7^ubeh}(h]h ]h"]h$]h&]uh1jmhjR^hMqhj#\ubeh}(h]h ]h"]h$]h&]uh1jhhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubh)}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMuhj8Khhubh)}(hOThis struct represents the atomic state of the toplevel DisplayPort MST managerh]hOThis struct represents the atomic state of the toplevel DisplayPort MST manager}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMNhj8Khhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_dp_mst_topology_mgr (C struct)c.drm_dp_mst_topology_mgrhNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_topology_mgrh]j)}(hstruct drm_dp_mst_topology_mgrh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(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}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMyhj^hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMSubeh}(h]h ](jstructeh"]h$]h&]jjjj_jj_jjjuh1jhhhj8KhNhNubj)}(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}(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:308: ./include/drm/display/drm_dp_mst_helper.hhM}hj_ubj@)}(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; };}hj<_sbah}(h]h ]h"]h$]h&]jjuh1j?hl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj_ubh)}(h **Members**h]j%)}(hjM_h]hMembers}(hjO_hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjK_ubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj_ubji)}(hhh](jn)}(h(``base`` Base private object for atomic h](jt)}(h``base``h]jz)}(hjl_h]hbase}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhjf_ubj)}(hhh]h)}(hBase private object for atomich]hBase private object for atomic}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjf_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhjc_ubjn)}(h3``dev`` device pointer for adding i2c devices etc. 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:308: ./include/drm/display/drm_dp_mst_helper.hhMhj_ubj)}(hhh]h)}(h*device pointer for adding i2c devices etc.h]h*device pointer for adding i2c devices etc.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhjc_ubjn)}(h:``cbs`` callbacks for connector addition and destruction. h](jt)}(h``cbs``h]jz)}(hj_h]hcbs}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhj_ubj)}(hhh]h)}(h1callbacks for connector addition and destruction.h]h1callbacks for connector addition and destruction.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj_hMhjc_ubjn)}(hP``max_dpcd_transaction_bytes`` maximum number of bytes to read/write in one go. h](jt)}(h``max_dpcd_transaction_bytes``h]jz)}(hj`h]hmax_dpcd_transaction_bytes}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhj`ubj)}(hhh]h)}(h0maximum number of bytes to read/write in one go.h]h0maximum number of bytes to read/write in one go.}(hj0`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj-`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj,`hMhjc_ubjn)}(hN``aux`` AUX channel for the DP MST connector this topolgy mgr is controlling. h](jt)}(h``aux``h]jz)}(hjQ`h]haux}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhjK`ubj)}(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.}(hjj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjg`ubah}(h]h ]h"]h$]h&]uh1jhjK`ubeh}(h]h ]h"]h$]h&]uh1jmhjf`hMhjc_ubjn)}(hB``max_payloads`` maximum number of payloads the GPU can generate. h](jt)}(h``max_payloads``h]jz)}(hj`h]h max_payloads}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhj`ubj)}(hhh]h)}(h0maximum number of payloads the GPU can generate.h]h0maximum number of payloads the GPU can generate.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj`hMhjc_ubjn)}(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)}(hj`h]h conn_base_id}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhj`ubj)}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj`hMhjc_ubjn)}(h8``up_req_recv`` Message receiver state for up requests. h](jt)}(h``up_req_recv``h]jz)}(hj`h]h up_req_recv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj`ubj)}(hhh]h)}(h'Message receiver state for up requests.h]h'Message receiver state for up requests.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjc_ubjn)}(hG``down_rep_recv`` Message receiver state for replies to down requests. h](jt)}(h``down_rep_recv``h]jz)}(hj7ah]h down_rep_recv}(hj9ahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5aubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj1aubj)}(hhh]h)}(h4Message receiver state for replies to down requests.h]h4Message receiver state for replies to down requests.}(hjPahhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjMaubah}(h]h ]h"]h$]h&]uh1jhj1aubeh}(h]h ]h"]h$]h&]uh1jmhjLahMhjc_ubjn)}(h^``lock`` protects **mst_state**, **mst_primary**, **dpcd**, and **payload_id_table_cleared**. h](jt)}(h``lock``h]jz)}(hjqah]hlock}(hjsahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoaubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjkaubj)}(hhh]h)}(hTprotects **mst_state**, **mst_primary**, **dpcd**, and **payload_id_table_cleared**.h](h protects }(hjahhhNhNubj%)}(h **mst_state**h]h mst_state}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, }(hjahhhNhNubj%)}(h**mst_primary**h]h mst_primary}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, }hjasbj%)}(h**dpcd**h]hdpcd}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, and }(hjahhhNhNubj%)}(h**payload_id_table_cleared**h]hpayload_id_table_cleared}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjaubah}(h]h ]h"]h$]h&]uh1jhjkaubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjc_ubjn)}(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)}(hjah]h probe_lock}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjaubj)}(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 }(hj bhhhNhNubj%)}(h**work**h]hwork}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj bubh and }(hj bhhhNhNubj%)}(h**up_req_work**h]h up_req_work}(hj&bhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj bubh, the only writers of }(hj bhhhNhNubh)}(h0:c:type:`drm_dp_mst_port.mstb `h]jz)}(hj:bh]hdrm_dp_mst_port.mstb}(hj`h]jz)}(hj^bh]hdrm_dp_mst_branch.ports}(hj`bhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj\bubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjWbhMhj bubh-, from racing while they update the topology.}(hj bhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWbhMhj bubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjc_ubjn)}(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)}(hjbh]h mst_state}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjbubj)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjc_ubjn)}(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)}(hjbh]hpayload_id_table_cleared}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjbubj)}(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 }(hjbhhhNhNubj%)}(h**mst_primary**h]h mst_primary}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubh. Protected by }(hjbhhhNhNubj%)}(h**lock**h]hlock}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjc_ubjn)}(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)}(hj/ch]hreset_rx_state}(hj1chhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-cubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj)cubj)}(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 }(hjHchhhNhNubj%)}(h**lock**h]hlock}(hjPchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHcubh.}(hjHchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjEcubah}(h]h ]h"]h$]h&]uh1jhj)cubeh}(h]h ]h"]h$]h&]uh1jmhjDchMhjc_ubjn)}(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)}(hj{ch]h payload_count}(hj}chhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjycubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjucubj)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjcubah}(h]h ]h"]h$]h&]uh1jhjucubeh}(h]h ]h"]h$]h&]uh1jmhjchMhjc_ubjn)}(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)}(hjch]hnext_start_slot}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjcubj)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhjchMhjc_ubjn)}(h<``mst_primary`` Pointer to the primary/first branch device. h](jt)}(h``mst_primary``h]jz)}(hjch]h mst_primary}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjcubj)}(hhh]h)}(h+Pointer to the primary/first branch device.h]h+Pointer to the primary/first branch device.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjc_ubjn)}(h)``dpcd`` Cache of DPCD for primary port. h](jt)}(h``dpcd``h]jz)}(hj(dh]hdpcd}(hj*dhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&dubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj"dubj)}(hhh]h)}(hCache of DPCD for primary port.h]hCache of DPCD for primary port.}(hjAdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=dhMhj>dubah}(h]h ]h"]h$]h&]uh1jhj"dubeh}(h]h ]h"]h$]h&]uh1jmhj=dhMhjc_ubjn)}(h?``sink_count`` Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0. h](jt)}(h``sink_count``h]jz)}(hjadh]h sink_count}(hjcdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_dubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj[dubj)}(hhh]h)}(h/Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0.h]h/Sink count from DEVICE_SERVICE_IRQ_VECTOR_ESI0.}(hjzdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvdhMhjwdubah}(h]h ]h"]h$]h&]uh1jhj[dubeh}(h]h ]h"]h$]h&]uh1jmhjvdhMhjc_ubjn)}(h"``funcs`` Atomic helper callbacks h](jt)}(h ``funcs``h]jz)}(hjdh]hfuncs}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjdubj)}(hhh]h)}(hAtomic helper callbacksh]hAtomic helper callbacks}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjc_ubjn)}(hh``qlock`` protects **tx_msg_downq** and :c:type:`drm_dp_sideband_msg_tx.state ` h](jt)}(h ``qlock``h]jz)}(hjdh]hqlock}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjdubj)}(hhh]h)}(h]protects **tx_msg_downq** and :c:type:`drm_dp_sideband_msg_tx.state `h](h protects }(hjdhhhNhNubj%)}(h**tx_msg_downq**h]h tx_msg_downq}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdubh and }(hjdhhhNhNubh)}(h?:c:type:`drm_dp_sideband_msg_tx.state `h]jz)}(hjeh]hdrm_dp_sideband_msg_tx.state}(hj ehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_sideband_msg_txuh1hhjdhMhjdubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjdhMhjc_ubjn)}(h/``tx_msg_downq`` List of pending down requests h](jt)}(h``tx_msg_downq``h]jz)}(hj=eh]h tx_msg_downq}(hj?ehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj;eubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj7eubj)}(hhh]h)}(hList of pending down requestsh]hList of pending down requests}(hjVehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRehMhjSeubah}(h]h ]h"]h$]h&]uh1jhj7eubeh}(h]h ]h"]h$]h&]uh1jmhjRehMhjc_ubjn)}(h4``tx_waitq`` Wait to queue stall for the tx worker. h](jt)}(h ``tx_waitq``h]jz)}(hjveh]htx_waitq}(hjxehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjteubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjpeubj)}(hhh]h)}(h&Wait to queue stall for the tx worker.h]h&Wait to queue stall for the tx worker.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjpeubeh}(h]h ]h"]h$]h&]uh1jmhjehMhjc_ubjn)}(h``work`` Probe work. h](jt)}(h``work``h]jz)}(hjeh]hwork}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjeubj)}(hhh]h)}(h Probe work.h]h Probe work.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjehMhjc_ubjn)}(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)}(hjeh]htx_work}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjeubj)}(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 }(hjfhhhNhNubj%)}(h**work**h]hwork}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubh worker for each transaction }(hjfhhhNhNubj%)}(h**work**h]hwork}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubh launches.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjehMhjc_ubjn)}(h:``destroy_port_list`` List of to be destroyed connectors. h](jt)}(h``destroy_port_list``h]jz)}(hjFfh]hdestroy_port_list}(hjHfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDfubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj@fubj)}(hhh]h)}(h#List of to be destroyed connectors.h]h#List of to be destroyed connectors.}(hj_fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[fhMhj\fubah}(h]h ]h"]h$]h&]uh1jhj@fubeh}(h]h ]h"]h$]h&]uh1jmhj[fhMhjc_ubjn)}(hG``destroy_branch_device_list`` List of to be destroyed branch devices. h](jt)}(h``destroy_branch_device_list``h]jz)}(hjfh]hdestroy_branch_device_list}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}fubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM hjyfubj)}(hhh]h)}(h'List of to be destroyed branch devices.h]h'List of to be destroyed branch devices.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM hjfubah}(h]h ]h"]h$]h&]uh1jhjyfubeh}(h]h ]h"]h$]h&]uh1jmhjfhM hjc_ubjn)}(h\``delayed_destroy_lock`` Protects **destroy_port_list** and **destroy_branch_device_list**. h](jt)}(h``delayed_destroy_lock``h]jz)}(hjfh]hdelayed_destroy_lock}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjfubj)}(hhh]h)}(hBProtects **destroy_port_list** and **destroy_branch_device_list**.h](h Protects }(hjfhhhNhNubj%)}(h**destroy_port_list**h]hdestroy_port_list}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubh and }(hjfhhhNhNubj%)}(h**destroy_branch_device_list**h]hdestroy_branch_device_list}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjc_ubjn)}(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)}(hjgh]hdelayed_destroy_wq}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjgubj)}(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.}(hj0ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj-gubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhj,ghMhjc_ubjn)}(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)}(hjQgh]hdelayed_destroy_work}(hjSghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOgubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjKgubj)}(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.}(hjjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjggubah}(h]h ]h"]h$]h&]uh1jhjKgubeh}(h]h ]h"]h$]h&]uh1jmhjfghMhjc_ubjn)}(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)}(hjgh]h up_req_list}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM$hjgubj)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM#hjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjghM$hjc_ubjn)}(h)``up_req_lock`` Protects **up_req_list** h](jt)}(h``up_req_lock``h]jz)}(hjgh]h up_req_lock}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM(hjgubj)}(hhh]h)}(hProtects **up_req_list**h](h Protects }(hjghhhNhNubj%)}(h**up_req_list**h]h up_req_list}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]uh1hhjghM(hjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjghM(hjc_ubjn)}(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)}(hj hh]h up_req_work}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj hubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM.hjhubj)}(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.}(hj%hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM,hj"hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhj!hhM.hjc_ubjn)}(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)}(hjFhh]htopology_ref_history_lock}(hjHhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDhubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM5hj@hubj)}(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 }(hj_hhhhNhNubh)}(h@:c:type:`drm_dp_mst_port.topology_ref_history `h]jz)}(hjihh]h$drm_dp_mst_port.topology_ref_history}(hjkhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjghubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM4hj_hubh and }(hj_hhhhNhNubh)}(hD:c:type:`drm_dp_mst_branch.topology_ref_history `h]jz)}(hjhh]h&drm_dp_mst_branch.topology_ref_history}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhhM4hj_hubh.}(hj_hhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhM4hj\hubah}(h]h ]h"]h$]h&]uh1jhj@hubeh}(h]h ]h"]h$]h&]uh1jmhj[hhM5hjc_ubeh}(h]h ]h"]h$]h&]uh1jhhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubh)}(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:308: ./include/drm/display/drm_dp_mst_helper.hhM9hj8Khhubh)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMzhj8Khhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_dp_mst_mode (C enum)c.drm_dp_mst_modehNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hdrm_dp_mst_modeh]j)}(henum drm_dp_mst_modeh](j)}(hjh]henum}(hj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ihhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ihhhjihMubj)}(hdrm_dp_mst_modeh]j)}(hjih]hdrm_dp_mst_mode}(hj-ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)iubah}(h]h ](jjeh"]h$]h&]jjuh1jhj ihhhjihMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjihMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhjihMhjihhubj)}(hhh]h)}(hsink's MST mode capabilityh]hsink’s MST mode capability}(hjOihhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMChjLihhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMubeh}(h]h ](jenumeh"]h$]h&]jjjjgijjgijjjuh1jhhhj8KhNhNubj)}(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%)}(hjqih]h Constants}(hjsihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoiubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMGhjkiubji)}(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)}(hjih]h DRM_DP_SST}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMKhjiubj)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMJhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjihMKhjiubjn)}(h]``DRM_DP_MST`` Sink supports MST, more than one stream and single stream sideband messaging. h](jt)}(h``DRM_DP_MST``h]jz)}(hjih]h DRM_DP_MST}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMOhjiubj)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMNhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjihMOhjiubjn)}(h_``DRM_DP_SST_SIDEBAND_MSG`` Sink supports only one stream and single stream sideband messaging.h](jt)}(h``DRM_DP_SST_SIDEBAND_MSG``h]jz)}(hjjh]hDRM_DP_SST_SIDEBAND_MSG}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMRhjiubj)}(hhh]h)}(hCSink supports only one stream and single stream sideband messaging.h]hCSink supports only one stream and single stream sideband messaging.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMRhjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjjhMRhjiubeh}(h]h ]h"]h$]h&]uh1jhhjkiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(__drm_dp_mst_state_iter_get (C function)c.__drm_dp_mst_state_iter_gethNtauh1jxhj8KhhhNhNubj)}(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}(hj]jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYjhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMubj)}(h h]h }(hjkjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYjhhhjjjhMubj)}(h__drm_dp_mst_state_iter_geth]j)}(h__drm_dp_mst_state_iter_geth]h__drm_dp_mst_state_iter_get}(hj}jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYjhhhjjjhMubj)}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j%)}jjjsbc.__drm_dp_mst_state_iter_getasbuh1hhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjubj)}(hstateh]hstate}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h$struct drm_dp_mst_topology_mgr **mgrh](j)}(hjh]hstruct}(hj khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj)khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&kubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+kmodnameN classnameNjj)}j]jjc.__drm_dp_mst_state_iter_getasbuh1hhjkubj)}(h h]h }(hjGkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjUkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj9)}(hj9h]h*}(hjbkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hmgrh]hmgr}(hjokhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h,struct drm_dp_mst_topology_state **old_stateh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jjc.__drm_dp_mst_state_iter_getasbuh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(h old_stateh]h old_state}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h,struct drm_dp_mst_topology_state **new_stateh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hj#lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%lmodnameN classnameNjj)}j]jjc.__drm_dp_mst_state_iter_getasbuh1hhjlubj)}(h h]h }(hjAlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hjOlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj9)}(hj9h]h*}(hj\lhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(h new_stateh]h new_state}(hjilhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hint ih](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~lubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~lubj)}(hih]hi}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhjYjhhhjjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUjhhhjjjhMubah}(h]jPjah ](jjeh"]h$]h&]jj)jhuh1jhjjjhMhjRjhhubj)}(hhh]h)}(h=private atomic state iterator function for macro-internal useh]h=private atomic state iterator function for macro-internal use}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjlhhubah}(h]h ]h"]h$]h&]uh1jhjRjhhhjjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jhhhj8KhNhNubj)}(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%)}(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:308: ./include/drm/display/drm_dp_mst_helper.hhMhjlubji)}(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 mh]hstruct drm_atomic_state *state}(hj mhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjmubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hj(mh]hstruct drm_atomic_state}(hj*mhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj&mubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjmhMhj"mubh pointer}(hj"mhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjmhMhjmubjn)}(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)}(hjamh]h$struct drm_dp_mst_topology_mgr **mgr}(hjcmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_mubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj[mubj)}(hhh]h)}(hbpointer to the :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursorh](hpointer to the }(hjzmhhhNhNubh)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hjmh]hstruct drm_dp_mst_topology_mgr}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjvmhMhjzmubh iteration cursor}(hjzmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjvmhMhjwmubah}(h]h ]h"]h$]h&]uh1jhj[mubeh}(h]h ]h"]h$]h&]uh1jmhjvmhMhjmubjn)}(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)}(hjmh]h,struct drm_dp_mst_topology_state **old_state}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjmubj)}(hhh]h)}(hsoptional pointer to the old :c:type:`struct drm_dp_mst_topology_state ` iteration cursorh](hoptional pointer to the old }(hjmhhhNhNubh)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hjmh]h struct drm_dp_mst_topology_state}(hjmhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjmubh iteration cursor}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjmhMhjmubjn)}(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)}(hjnh]h,struct drm_dp_mst_topology_state **new_state}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjnubj)}(hhh]h)}(hsoptional pointer to the new :c:type:`struct drm_dp_mst_topology_state ` iteration cursorh](hoptional pointer to the new }(hj3nhhhNhNubh)}(hF:c:type:`struct drm_dp_mst_topology_state `h]jz)}(hj=nh]h struct drm_dp_mst_topology_state}(hj?nhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj;nubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj3nubh iteration cursor}(hj3nhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZnhMhj0nubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhj/nhMhjmubjn)}(h7``int i`` int iteration cursor, for macro-internal use h](jt)}(h ``int i``h]jz)}(hjwnh]hint i}(hjynhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjunubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjqnubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjqnubeh}(h]h ]h"]h$]h&]uh1jmhjnhMhjmubeh}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjlubh)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjlubh)}(h **Return**h]j%)}(hjnh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjlubh)}(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 }(hjnhhhNhNubh)}(h2:c:type:`struct drm_private_obj `h]jz)}(hjnh]hstruct drm_private_obj}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_private_objuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjnubh is a }(hjnhhhNhNubh)}(hB:c:type:`struct drm_dp_mst_topology_mgr `h]jz)}(hjoh]hstruct drm_dp_mst_topology_mgr}(hjohhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjohMhjnubh, false otherwise.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_statehNtauh1jxhj8KhhhNhNubj)}(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^oh]h for_each_oldnew_mst_mgr_in_state}(hjhohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdoubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`ohhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhj\ohhhj{ohMubah}(h]jWoah ](jjeh"]h$]h&]jj)jhuh1jhj{ohMhjYohhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjYohhhj{ohMubeh}(h]h ](jmacroeh"]h$]h&]jjjjojjojjjuh1jhhhj8KhNhNubh)}(hN``for_each_oldnew_mst_mgr_in_state (__state, mgr, old_state, new_state, __i)``h]jz)}(hjoh]hJfor_each_oldnew_mst_mgr_in_state (__state, mgr, old_state, new_state, __i)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj8Khhubjb=)}(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}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjoubah}(h]h ]h"]h$]h&]uh1ja=hjohMhj8Khhubj)}(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%)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjoubji)}(hhh](jn)}(hI``__state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h ``__state``h]jz)}(hjoh]h__state}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjoubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hj ph]hstruct drm_atomic_state}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj pubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjphMhjpubh pointer}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjoubjn)}(h\``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h``mgr``h]jz)}(hjFph]hmgr}(hjHphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDpubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj@pubj)}(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)}(hjeph]hstruct drm_dp_mst_topology_mgr}(hjgphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjcpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhj[phMhj_pubh iteration cursor}(hj_phhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[phMhj\pubah}(h]h ]h"]h$]h&]uh1jhj@pubeh}(h]h ]h"]h$]h&]uh1jmhj[phMhjoubjn)}(hx``old_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the old state h](jt)}(h ``old_state``h]jz)}(hjph]h old_state}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjpubj)}(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)}(hjph]h struct drm_dp_mst_topology_state}(hjphhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjpubh# iteration cursor for the old state}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjoubjn)}(hx``new_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new state h](jt)}(h ``new_state``h]jz)}(hjph]h new_state}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjpubj)}(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)}(hjqh]h struct drm_dp_mst_topology_state}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjqubh# iteration cursor for the new state}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3qhMhj qubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jmhj qhMhjoubjn)}(h5``__i`` int iteration cursor, for macro-internal use h](jt)}(h``__i``h]jz)}(hjPqh]h__i}(hjRqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNqubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjJqubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hjiqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeqhMhjfqubah}(h]h ]h"]h$]h&]uh1jhjJqubeh}(h]h ]h"]h$]h&]uh1jmhjeqhMhjoubeh}(h]h ]h"]h$]h&]uh1jhhjoubh)}(h**Description**h]j%)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM hjoubh)}(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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_statehNtauh1jxhj8KhhhNhNubj)}(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)}(hjqh]hfor_each_old_mst_mgr_in_state}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjqhhhjqhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhjqhMhjqhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjqhhhjqhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjrjjrjjjuh1jhhhj8KhNhNubh)}(h@``for_each_old_mst_mgr_in_state (__state, mgr, old_state, __i)``h]jz)}(hjrh]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}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjrubah}(h]h ]h"]h$]h&]uh1ja=hj.rhMhj8Khhubj)}(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%)}(hj;rh]h Parameters}(hj=rhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9rubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj5rubji)}(hhh](jn)}(hI``__state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h ``__state``h]jz)}(hjZrh]h__state}(hj\rhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXrubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjTrubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hjyrh]hstruct drm_atomic_state}(hj{rhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjorhMhjsrubh pointer}(hjsrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjorhMhjprubah}(h]h ]h"]h$]h&]uh1jhjTrubeh}(h]h ]h"]h$]h&]uh1jmhjorhMhjQrubjn)}(h\``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h``mgr``h]jz)}(hjrh]hmgr}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjrubj)}(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)}(hjrh]hstruct drm_dp_mst_topology_mgr}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjrhMhjrubh iteration cursor}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjQrubjn)}(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 sh]h old_state}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhjsubj)}(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)}(hj)sh]h struct drm_dp_mst_topology_state}(hj+shhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj'subah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj#subh# iteration cursor for the old state}(hj#shhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFshMhj subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjshMhjQrubjn)}(h5``__i`` int iteration cursor, for macro-internal use h](jt)}(h``__i``h]jz)}(hjcsh]h__i}(hjeshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjasubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj]subj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hj|shhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxshMhjysubah}(h]h ]h"]h$]h&]uh1jhj]subeh}(h]h ]h"]h$]h&]uh1jmhjxshMhjQrubeh}(h]h ]h"]h$]h&]uh1jhhj5rubh)}(h**Description**h]j%)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj5rubh)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhMhj5rubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_statehNtauh1jxhj8KhhhNhNubj)}(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)}(hjsh]hfor_each_new_mst_mgr_in_state}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM#ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjshM#ubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjshM#hjshhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjshhhjshM#ubeh}(h]h ](jmacroeh"]h$]h&]jjjjtjjtjjjuh1jhhhj8KhNhNubh)}(h@``for_each_new_mst_mgr_in_state (__state, mgr, new_state, __i)``h]jz)}(hjth]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}(hj3thhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM#hj/tubah}(h]h ]h"]h$]h&]uh1ja=hjAthM#hj8Khhubj)}(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%)}(hjNth]h Parameters}(hjPthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLtubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM'hjHtubji)}(hhh](jn)}(hI``__state`` :c:type:`struct drm_atomic_state ` pointer h](jt)}(h ``__state``h]jz)}(hjmth]h__state}(hjothhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjktubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM%hjgtubj)}(hhh]h)}(h<:c:type:`struct drm_atomic_state ` pointerh](h)}(h4:c:type:`struct drm_atomic_state `h]jz)}(hjth]hstruct drm_atomic_state}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_atomic_stateuh1hhjthM%hjtubh pointer}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthM%hjtubah}(h]h ]h"]h$]h&]uh1jhjgtubeh}(h]h ]h"]h$]h&]uh1jmhjthM%hjdtubjn)}(h\``mgr`` :c:type:`struct drm_dp_mst_topology_mgr ` iteration cursor h](jt)}(h``mgr``h]jz)}(hjth]hmgr}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM&hjtubj)}(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)}(hjth]hstruct drm_dp_mst_topology_mgr}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_mgruh1hhjthM&hjtubh iteration cursor}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthM&hjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthM&hjdtubjn)}(hx``new_state`` :c:type:`struct drm_dp_mst_topology_state ` iteration cursor for the new state h](jt)}(h ``new_state``h]jz)}(hjuh]h new_state}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM(hjuubj)}(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)}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj:uubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM'hj6uubh# iteration cursor for the new state}(hj6uhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYuhM'hj3uubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhj2uhM(hjdtubjn)}(h5``__i`` int iteration cursor, for macro-internal use h](jt)}(h``__i``h]jz)}(hjvuh]h__i}(hjxuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtuubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM)hjpuubj)}(hhh]h)}(h,int iteration cursor, for macro-internal useh]h,int iteration cursor, for macro-internal use}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM)hjuubah}(h]h ]h"]h$]h&]uh1jhjpuubeh}(h]h ]h"]h$]h&]uh1jmhjuhM)hjdtubeh}(h]h ]h"]h$]h&]uh1jhhjHtubh)}(h**Description**h]j%)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM+hjHtubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:308: ./include/drm/display/drm_dp_mst_helper.hhM*hjHtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_get_port_malloc (C function)c.drm_dp_mst_get_port_mallochNtauh1jxhj8KhhhNhNubj)}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjvhMubj)}(hdrm_dp_mst_get_port_malloch]j)}(hdrm_dp_mst_get_port_malloch]hdrm_dp_mst_get_port_malloc}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjvhMubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj3vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/vubj)}(h h]h }(hj@vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/vubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjQvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSvmodnameN classnameNjj)}j]j%)}jjvsbc.drm_dp_mst_get_port_mallocasbuh1hhj/vubj)}(h h]h }(hjqvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/vubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/vubj)}(hporth]hport}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj+vubah}(h]h ]h"]h$]h&]jjuh1jhjuhhhjvhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjvhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjvhMhjuhhubj)}(hhh]h)}(h,Increment the malloc refcount of an MST porth]h,Increment the malloc refcount of an MST port}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjvhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjvhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjvubji)}(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)}(hjvh]hstruct drm_dp_mst_port *port}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjvubj)}(hhh]h)}(hZThe :c:type:`struct drm_dp_mst_port ` to increment the malloc refcount ofh](hThe }(hjwhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjwh]hstruct drm_dp_mst_port}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhj whMhjwubh$ to increment the malloc refcount of}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj whMhj wubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhj whMhjvubah}(h]h ]h"]h$]h&]uh1jhhjvubh)}(h**Description**h]j%)}(hjUwh]h Description}(hjWwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSwubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjvubh)}(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 }(hjkwhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjuwh]hdrm_dp_mst_port.malloc_kref}(hjwwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjswubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjkwubh. When }(hjkwhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjwh]hdrm_dp_mst_port.malloc_kref}(hjwhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjwhMhjkwubh& reaches 0, the memory allocation for }(hjkwhhhNhNubj%)}(h**port**h]hport}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkwubh will be released and }(hjkwhhhNhNubj%)}(h**port**h]hport}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkwubh may no longer be used.}(hjkwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhMhjvubh)}(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}(hjwhhhNhNubah}(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)}(hjxh]hdrm_dp_mst_port.malloc_kref}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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)}(hj$xh]hstruct drm_dp_mst_port}(hj&xhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj"xubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjxhMhjwubhW 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)}(hjGxh]h%drm_dp_mst_topology_cbs.add_connector}(hjIxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjExubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_cbsuh1hhjxhMhjwubh9. This callback is called before there is any chance for }(hjwhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjjxh]hdrm_dp_mst_port.malloc_kref}(hjlxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjhxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjxhMhjwubh to reach 0.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjvubh)}(h&See also: drm_dp_mst_put_port_malloc()h]h&See also: drm_dp_mst_put_port_malloc()}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_put_port_malloc (C function)c.drm_dp_mst_put_port_mallochNtauh1jxhj8KhhhNhNubj)}(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}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjxhMubj)}(hdrm_dp_mst_put_port_malloch]j)}(hdrm_dp_mst_put_port_malloch]hdrm_dp_mst_put_port_malloc}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjxhMubj)}(h(struct drm_dp_mst_port *port)h]j)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hj yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j%)}jjxsbc.drm_dp_mst_put_port_mallocasbuh1hhjxubj)}(h h]h }(hj;yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hjIyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hporth]hport}(hjVyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhjxhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjxhhhjxhMubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jhjxhMhjxhhubj)}(hhh]h)}(h,Decrement the malloc refcount of an MST porth]h,Decrement the malloc refcount of an MST port}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj}yhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jhhhj8KhNhNubj)}(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%)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubji)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubj)}(hhh]h)}(hZThe :c:type:`struct drm_dp_mst_port ` to decrement the malloc refcount ofh](hThe }(hjyhhhNhNubh)}(h2:c:type:`struct drm_dp_mst_port `h]jz)}(hjyh]hstruct drm_dp_mst_port}(hjyhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjyhMhjyubh$ to decrement the malloc refcount of}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhhjyubh)}(h**Description**h]j%)}(hjzh]h Description}(hj!zhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubh)}(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 }(hj5zhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hj?zh]hdrm_dp_mst_port.malloc_kref}(hjAzhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj=zubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj5zubh. When }(hj5zhhhNhNubh)}(h7:c:type:`drm_dp_mst_port.malloc_kref `h]jz)}(hjczh]hdrm_dp_mst_port.malloc_kref}(hjezhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjazubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhj\zhMhj5zubh& reaches 0, the memory allocation for }(hj5zhhhNhNubj%)}(h**port**h]hport}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5zubh will be released and }(hj5zhhhNhNubj%)}(h**port**h]hport}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5zubh may no longer be used.}(hj5zhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\zhMhjyubh)}(h&See also: drm_dp_mst_get_port_malloc()h]h&See also: drm_dp_mst_get_port_malloc()}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_dp_mst_connector_late_register (C function)$c.drm_dp_mst_connector_late_registerhNtauh1jxhj8KhhhNhNubj)}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMubj)}(h"drm_dp_mst_connector_late_registerh]j)}(h"drm_dp_mst_connector_late_registerh]h"drm_dp_mst_connector_late_register}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjzhMubj)}(h?(struct drm_connector *connector, 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}(hj8{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:{modnameN classnameNjj)}j]j%)}jj{sb$c.drm_dp_mst_connector_late_registerasbuh1hhj{ubj)}(h h]h }(hjX{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hjf{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(h connectorh]h connector}(hjs{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]jT{$c.drm_dp_mst_connector_late_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)}(hporth]hport}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjzhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjzhhhjzhMubah}(h]jzah ](jjeh"]h$]h&]jj)jhuh1jhjzhMhjzhhubj)}(hhh]h)}(hLate MST connector registrationh]hLate MST connector registration}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj |hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%|jj%|jjjuh1jhhhj8KhNhNubj)}(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%)}(hj/|h]h Parameters}(hj1|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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj)|ubji)}(hhh](jn)}(h6``struct drm_connector *connector`` The MST connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjN|h]hstruct drm_connector *connector}(hjP|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL|ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjH|ubj)}(hhh]h)}(hThe MST connectorh]hThe MST connector}(hjg|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc|hMhjd|ubah}(h]h ]h"]h$]h&]uh1jhjH|ubeh}(h]h ]h"]h$]h&]uh1jmhjc|hMhjE|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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj|ubj)}(hhh]h)}(hThe MST port for this connectorh]hThe MST port for this connector}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj|hMhjE|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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj)|ubh)}(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.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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$hj|ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj)|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_dp_mst_connector_early_unregister (C function)'c.drm_dp_mst_connector_early_unregisterhNtauh1jxhj8KhhhNhNubj)}(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}(hj.}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*}hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj=}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*}hhhj<}hMubj)}(h%drm_dp_mst_connector_early_unregisterh]j)}(h%drm_dp_mst_connector_early_unregisterh]h%drm_dp_mst_connector_early_unregister}(hjO}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*}hhhj<}hMubj)}(h?(struct drm_connector *connector, struct drm_dp_mst_port *port)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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j%)}jjQ}sb'c.drm_dp_mst_connector_early_unregisterasbuh1hhjg}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}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_connector_early_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)}(hporth]hport}(hj4~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjc}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"Early MST connector unregistrationh]h"Early MST connector unregistration}(hj^~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj[~hhubah}(h]h ]h"]h$]h&]uh1jhj#}hhhj<}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjv~jjv~jjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjz~ubji)}(hhh](jn)}(h6``struct drm_connector *connector`` The MST 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubj)}(hhh]h)}(hThe MST port for this connectorh]hThe MST port for this 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&]uh1jhhjz~ubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjz~ubh)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjz~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_add_payload_part1 (C function)c.drm_dp_add_payload_part1hNtauh1jxhj8KhhhNhNubj)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjfhM ubj)}(hdrm_dp_add_payload_part1h]j)}(hdrm_dp_add_payload_part1h]hdrm_dp_add_payload_part1}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjfhM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj{sbc.drm_dp_add_payload_part1asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h+struct drm_dp_mst_topology_state *mst_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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]jc.drm_dp_add_payload_part1asbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h mst_stateh]h mst_state}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)struct drm_dp_mst_atomic_payload *payloadh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(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 reftargetjmodnameN classnameNjj)}j]jc.drm_dp_add_payload_part1asbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hpayloadh]hpayload}(hj΀hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjThhhjfhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjPhhhjfhM ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjfhM hjMhhubj)}(hhh]h)}(hExecute payload update part 1h]hExecute payload update part 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjfhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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:311: ./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)}(hj9h]h#struct drm_dp_mst_topology_mgr *mgr}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hj3ubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhjNhM hj0ubjn)}(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)}(hjrh]h+struct drm_dp_mst_topology_state *mst_state}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjpubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjlubj)}(hhh]h)}(hThe MST atomic stateh]hThe MST atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj0ubjn)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubj)}(hhh]h)}(hThe payload to writeh]hThe payload to write}(hjāhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hj0ubeh}(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:311: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubh)}(h **Return**h]j%)}(hj h]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:311: ./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.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_remove_payload_part1 (C function)c.drm_dp_remove_payload_part1hNtauh1jxhj8KhhhNhNubj)}(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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM" ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhj`hM" ubj)}(hdrm_dp_remove_payload_part1h]j)}(hdrm_dp_remove_payload_part1h]hdrm_dp_remove_payload_part1}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjNhhhj`hM" 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjusbc.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)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h+struct drm_dp_mst_topology_state *mst_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 reftargetj!modnameN classnameNjj)}j]jɂc.drm_dp_remove_payload_part1asbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h mst_stateh]h mst_state}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)struct drm_dp_mst_atomic_payload *payloadh](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(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 reftargetjmodnameN classnameNjj)}j]jɂc.drm_dp_remove_payload_part1asbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hpayloadh]hpayload}(hjȃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjNhhhj`hM" ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjJhhhj`hM" ubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jhj`hM" hjGhhubj)}(hhh]h)}(h/Remove an MST payload along the virtual channelh]h/Remove an MST payload along the virtual channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM" hjhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhj`hM" ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./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)}(hj3h]h#struct drm_dp_mst_topology_mgr *mgr}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM# hj-ubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM# hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhM# 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)}(hjlh]h+struct drm_dp_mst_topology_state *mst_state}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM$ hjfubj)}(hhh]h)}(hThe MST atomic stateh]hThe MST atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$ hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jmhjhM$ 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)}(hjh]h)struct drm_dp_mst_atomic_payload *payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM% hjubj)}(hhh]h)}(hThe payload to removeh]hThe payload to remove}(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$hjބubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM' hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM& hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_remove_payload_part2 (C function)c.drm_dp_remove_payload_part2hNtauh1jxhj8KhhhNhNubj)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMA ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj3hMA ubj)}(hdrm_dp_remove_payload_part2h]j)}(hdrm_dp_remove_payload_part2h]hdrm_dp_remove_payload_part2}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj3hMA 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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjHsbc.drm_dp_remove_payload_part2asbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^ubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h+struct drm_dp_mst_topology_state *mst_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_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]jc.drm_dp_remove_payload_part2asbuh1hhjЅubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЅubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjЅubj)}(h mst_stateh]h mst_state}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЅubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h3const struct drm_dp_mst_atomic_payload *old_payloadh](j)}(hjch]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjlhhhNhNubah}(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&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_remove_payload_part2asbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubj)}(h old_payloadh]h old_payload}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h-struct drm_dp_mst_atomic_payload *new_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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dp_remove_payload_part2asbuh1hhjˆubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˆubj9)}(hj9h]h*}(hjhhhNhNubah}(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&]noemphjjuh1jhjZubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj3hMA ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj3hMA ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj3hMA hjhhubj)}(hhh]h)}(hRemove an MST payload locallyh]hRemove an MST payload locally}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMA hjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hMA ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jhhhj8KhNhNubj)}(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%)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chME hjlubji)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMB hjubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMB hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMB 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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMC hjćubj)}(hhh]h)}(hThe MST atomic stateh]hThe MST atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj߇hMC hjubah}(h]h ]h"]h$]h&]uh1jhjćubeh}(h]h ]h"]h$]h&]uh1jmhj߇hMC hjubjn)}(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)}(hjh]h3const struct drm_dp_mst_atomic_payload *old_payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMD hjubj)}(hhh]h)}(hThe payload with its old stateh]hThe payload with its old state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMD hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMD hjubjn)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chME hj6ubj)}(hhh]h)}(h!The payload with its latest stateh]h!The payload with its latest state}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhME hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhME hjubeh}(h]h ]h"]h$]h&]uh1jhhjlubh)}(h**Description**h]j%)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMG hjlubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMF hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_add_payload_part2 (C function)c.drm_dp_add_payload_part2hNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMd ubj)}(h h]h }(hjˈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjʈhMd ubj)}(hdrm_dp_add_payload_part2h]j)}(hdrm_dp_add_payload_part2h]hdrm_dp_add_payload_part2}(hj݈hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjوubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjʈhMd 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}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj߈sbc.drm_dp_add_payload_part2asbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h)struct drm_dp_mst_atomic_payload *payloadh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(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 reftargetjmodnameN classnameNjj)}j]j3c.drm_dp_add_payload_part2asbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjgubj)}(hpayloadh]hpayload}(hj‰hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjʈhMd ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjʈhMd ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjʈhMd hjhhubj)}(hhh]h)}(hExecute payload update part 2h]hExecute payload update part 2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMd hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjʈhMd ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(hjh]h Parameters}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMh 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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMe hj'ubj)}(hhh]h)}(hManager to use.h]hManager to use.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMe hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMe 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)}(hjfh]h)struct drm_dp_mst_atomic_payload *payload}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMf hj`ubj)}(hhh]h)}(hThe payload to updateh]hThe payload to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMf hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMf 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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMh hjubh)}(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 }(hjhhhNhNubj%)}(h **payload**h]hpayload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMg hjubh)}(h **Return**h]j%)}(hjڊh]hReturn}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMj hjubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMk hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_get_vc_payload_bw (C function)c.drm_dp_get_vc_payload_bwhNtauh1jxhj8KhhhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j%)}jdrm_dp_get_vc_payload_bwsbc.drm_dp_get_vc_payload_bwasbuh1hhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjChM ubj)}(hdrm_dp_get_vc_payload_bwh]j)}(hj@h]hdrm_dp_get_vc_payload_bw}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjChM ubj)}(h$(int link_rate, int link_lane_count)h](j)}(h int link_rateh](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h link_rateh]h link_rate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hint link_lane_counth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlink_lane_counth]hlink_lane_count}(hj‹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjChM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjChM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjChM hjhhubj)}(hhh]h)}(h%get the VC payload BW for an MTP linkh]h%get the VC payload BW for an MTP link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjChM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(hjh]h Parameters}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hj'ubj)}(hhh]h)}(hlink rate in 10kbits/s unitsh]hlink rate in 10kbits/s units}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhM hj$ubjn)}(h#``int link_lane_count`` lane count h](jt)}(h``int link_lane_count``h]jz)}(hjfh]hint link_lane_count}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj`ubj)}(hhh]h)}(h lane counth]h lane count}(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&]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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubji)}(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)}(hjjh]h#struct drm_dp_mst_topology_mgr *mgr}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjdubj)}(hhh]h)}(hmanager to probeh]hmanager to probe}(hjhhhNhNubah}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_mst_topology_mgr_suspend (C function)!c.drm_dp_mst_topology_mgr_suspendhNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]j%)}jj sb!c.drm_dp_mst_topology_mgr_suspendasbuh1hhj#ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#ubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jݒah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjߒhhubj)}(hhh]h)}(hsuspend the MST managerh]hsuspend the MST manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjߒhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj“jj“jjjuh1jhhhj8KhNhNubj)}(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̓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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjƓubji)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hmanager to suspendh]hmanager to suspend}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjƓubh)}(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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjƓubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_mst_topology_mgr_resume (C function) c.drm_dp_mst_topology_mgr_resumehNtauh1jxhj8KhhhNhNubj)}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjyhMubj)}(hdrm_dp_mst_topology_mgr_resumeh]j)}(hdrm_dp_mst_topology_mgr_resumeh]hdrm_dp_mst_topology_mgr_resume}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjyhMubj)}(h0(struct drm_dp_mst_topology_mgr *mgr, bool sync)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%)}jjsb c.drm_dp_mst_topology_mgr_resumeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool synch](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsynch]hsync}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjghhhjyhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjchhhjyhMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhjyhMhj`hhubj)}(hhh]h)}(hresume the MST managerh]hresume the MST manager}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubji)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hmanager to resumeh]hmanager to resume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hI``bool sync`` whether or not to perform topology reprobing synchronously h](jt)}(h ``bool sync``h]jz)}(hjٕh]h bool sync}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjӕubj)}(hhh]h)}(h:whether or not to perform topology reprobing synchronouslyh]h:whether or not to perform topology reprobing synchronously}(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&]uh1jhhj{ubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh)}(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.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh)}(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 }(hjHhhhNhNubj%)}(h**sync**h]hsync}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubh 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 }(hjHhhhNhNubj%)}(h**sync**h]hsync}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubh, set to false in order to avoid deadlocking.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh)}(h **Return**h]j%)}(hj}h]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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_eventhNtauh1jxhj8KhhhNhNubj)}(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}(hj–hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMtubj)}(h h]h }(hjіhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjЖhMtubj)}(hdrm_dp_mst_hpd_irq_handle_eventh]j)}(hdrm_dp_mst_hpd_irq_handle_eventh]hdrm_dp_mst_hpd_irq_handle_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߖubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjЖhMtubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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]j%)}jjsb!c.drm_dp_mst_hpd_irq_handle_eventasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const u8 *esih](j)}(hjch]hconst}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9!c.drm_dp_mst_hpd_irq_handle_eventasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hesih]hesi}(hjȗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *ackh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9!c.drm_dp_mst_hpd_irq_handle_eventasbuh1hhjݗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݗubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjݗubj)}(hackh]hack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݗubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool *handledh](j)}(hjAh]hbool}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubj)}(hhandledh]hhandled}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjЖhMtubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjЖhMtubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjЖhMthjhhubj)}(hhh]h)}(h MST hotplug IRQ handle MST eventh]h MST hotplug IRQ handle MST event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMthjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjЖhMtubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMxhjubji)}(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ɘ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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMuhjØubj)}(hhh]h)}(hmanager to notify irq for.h]hmanager to notify irq for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjޘhMuhjߘubah}(h]h ]h"]h$]h&]uh1jhjØubeh}(h]h ]h"]h$]h&]uh1jmhjޘhMuhjubjn)}(h.``const u8 *esi`` 4 bytes from SINK_COUNT_ESI h](jt)}(h``const u8 *esi``h]jz)}(hjh]h const u8 *esi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMvhjubj)}(hhh]h)}(h4 bytes from SINK_COUNT_ESIh]h4 bytes from SINK_COUNT_ESI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMvhjubjn)}(hD``u8 *ack`` 4 bytes used to ack events starting from SINK_COUNT_ESI h](jt)}(h ``u8 *ack``h]jz)}(hj;h]hu8 *ack}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMwhj5ubj)}(hhh]h)}(h74 bytes used to ack events starting from SINK_COUNT_ESIh]h74 bytes used to ack events starting from SINK_COUNT_ESI}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMwhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhjPhMwhjubjn)}(h@``bool *handled`` whether the hpd interrupt was consumed or not h](jt)}(h``bool *handled``h]jz)}(hjth]h bool *handled}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMxhjnubj)}(hhh]h)}(h-whether the hpd interrupt was consumed or noth]h-whether the hpd interrupt was consumed or not}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjhMxhjubeh}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMzhjubh)}(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.}(hjřhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMyhjubh)}(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.}(hjԙhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h/See also: drm_dp_mst_hpd_irq_send_new_request()h]h/See also: drm_dp_mst_hpd_irq_send_new_request()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_requesthNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h%(struct drm_dp_mst_topology_mgr *mgr)h]j)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j%)}jj5sb%c.drm_dp_mst_hpd_irq_send_new_requestasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubah}(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)}(h$MST hotplug IRQ kick off new requesth]h$MST hotplug IRQ kick off new request}(hjҚhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjϚhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj ubj)}(hhh]h)}(hmanager to notify irq for.h]hmanager to notify irq 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 ubah}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_dp_mst_detect_port (C function)c.drm_dp_mst_detect_porthNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_mst_detect_porth]j)}(hdrm_dp_mst_detect_porth]hdrm_dp_mst_detect_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_detect_portasbuh1hhj̛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}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(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 reftargetjbmodnameN classnameNjj)}j]j c.drm_dp_mst_detect_portasbuh1hhj>ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>ubj)}(hctxh]hctx}(hjhhhNhNubah}(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}(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 c.drm_dp_mst_detect_portasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjțubj)}(hstruct drm_dp_mst_port *porth](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_dp_mst_porth]hdrm_dp_mst_port}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j c.drm_dp_mst_detect_portasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjyhhhNhNubah}(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%get connection status for an MST porth]h%get connection status for an MST port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h@``struct drm_connector *connector`` DRM connector for this port 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjޝubj)}(hhh]h)}(hDRM connector for this porth]hDRM connector for this port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjޝubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj۝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)}(hjh]h#struct drm_modeset_acquire_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h1The acquisition context to use for grabbing locksh]h1The acquisition context to use for grabbing locks}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhj۝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)}(hjVh]h#struct drm_dp_mst_topology_mgr *mgr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjPubj)}(hhh]h)}(hmanager for this porth]hmanager for this port}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhj۝ubjn)}(h3``struct drm_dp_mst_port *port`` pointer to a port 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hpointer to a porth]hpointer to a port}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h5This returns the current connection state for a port.h]h5This returns the current connection state for a port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_mst_edid_read (C function)c.drm_dp_mst_edid_readhNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j%)}jdrm_dp_mst_edid_readsbc.drm_dp_mst_edid_readasbuh1hhj hhhjhMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj hhhjhMubj)}(hdrm_dp_mst_edid_readh]j)}(hjgh]hdrm_dp_mst_edid_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj)}(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}(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]jec.drm_dp_mst_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&]noemphjjuh1jhjubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](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_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]jec.drm_dp_mst_edid_readasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjkhhhNhNubah}(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 }(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]jec.drm_dp_mst_edid_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjΠhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hj۠hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hget EDID for an MST porth]hget EDID for an MST port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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:311: ./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)}(hjFh]hstruct drm_connector *connector}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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)}(hjh]h#struct drm_dp_mst_topology_mgr *mgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubj)}(hhh]h)}(hmanager for this porth]hmanager for this port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj=ubjn)}(h?``struct drm_dp_mst_port *port`` unverified pointer to a port. 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hunverified pointer to a port.h]hunverified pointer to a port.}(hjѡhhhNhNubah}(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&]uh1jhhj!ubh)}(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:311: ./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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dp_mst_get_edid (C function)c.drm_dp_mst_get_edidhNtauh1jxhj8KhhhNhNubj)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhMubh)}(hhh]j)}(hedidh]hedid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j%)}jdrm_dp_mst_get_edidsbc.drm_dp_mst_get_edidasbuh1hhj4hhhjEhMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4hhhjEhMubj)}(hdrm_dp_mst_get_edidh]j)}(hjuh]hdrm_dp_mst_get_edid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhjEhMubj)}(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}(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&]uh1jhj͢ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjҢmodnameN classnameNjj)}j]jsc.drm_dp_mst_get_edidasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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)}(h#struct drm_dp_mst_topology_mgr *mgrh](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_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jsc.drm_dp_mst_get_edidasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjyhhhNhNubah}(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 }(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]jsc.drm_dp_mst_get_edidasbuh1hhjubj)}(h h]h }(hjΣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjܣhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhjEhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhjEhMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jhjEhMhj-hhubj)}(hhh]h)}(hget EDID for an MST porth]hget EDID for an MST port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj-hhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhj8KhNhNubj)}(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%)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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)}(hjTh]hstruct drm_connector *connector}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjNubj)}(hhh]h)}(h"toplevel connector to get EDID forh]h"toplevel connector to get EDID for}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihMhjKubjn)}(h>``struct drm_dp_mst_topology_mgr *mgr`` manager for this port 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hmanager for this porth]hmanager for this port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjKubjn)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hunverified pointer to a port.h]hunverified pointer to a port.}(hjߤhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjۤhMhjܤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjۤhMhjKubeh}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM"hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dp_atomic_find_time_slots (C function)c.drm_dp_atomic_find_time_slotshNtauh1jxhj8KhhhNhNubj)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM9ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjchM9ubj)}(hdrm_dp_atomic_find_time_slotsh]j)}(hdrm_dp_atomic_find_time_slotsh]hdrm_dp_atomic_find_time_slots}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjchM9ubj)}(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}(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%)}jjxsbc.drm_dp_atomic_find_time_slotsasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(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̥c.drm_dp_atomic_find_time_slotsasbuh1hhjubj)}(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)}(hstruct drm_dp_mst_port *porth](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_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_atomic_find_time_slotsasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hporth]hport}(hj˦hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint pbnh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpbnh]hpbn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjQhhhjchM9ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjMhhhjchM9ubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhjchM9hjJhhubj)}(hhh]h)}(h$Find and add time slots to the stateh]h$Find and add time slots to the state}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM9hj'hhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchM9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhj8KhNhNubj)}(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%)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM=hjFubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM:hjeubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhM:hjbubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM;hjubj)}(hhh]h)}(h!MST topology manager for the porth]h!MST topology manager for the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM;hjbubjn)}(h=``struct drm_dp_mst_port *port`` port to find time slots for 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM<hjקubj)}(hhh]h)}(hport to find time slots forh]hport to find time slots for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjקubeh}(h]h ]h"]h$]h&]uh1jmhjhM<hjbubjn)}(h3``int pbn`` bandwidth required for the mode in PBN h](jt)}(h ``int pbn``h]jz)}(hjh]hint pbn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM=hjubj)}(hhh]h)}(h&bandwidth required for the mode in PBNh]h&bandwidth required for the mode in PBN}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM=hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj+hM=hjbubeh}(h]h ]h"]h$]h&]uh1jhhjFubh)}(h**Description**h]j%)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM?hjFubh)}(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 }(hjghhhNhNubj%)}(h**port**h]hport}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubh, replacing any previous time slot allocations it may have had. Any atomic drivers which support MST must call this function in their }(hjghhhNhNubh)}(hN:c:type:`drm_encoder_helper_funcs.atomic_check\(\) `h]jz)}(hjh]h'drm_encoder_helper_funcs.atomic_check()}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM>hjgubh 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.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM>hjFubh)}(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 }(hjhhhNhNubj%)}(h**mgr**h]hmgr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 until the driver calls drm_dp_mst_atomic_check().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMDhjFubh)}(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̨hhhNhNubj%)}(h**port**h]hport}(hjԨhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj̨ubh~ 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̨hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMGhjFubh)}(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()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMKhjFubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMOhjFubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMPhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_dp_atomic_release_time_slots (C function)"c.drm_dp_atomic_release_time_slotshNtauh1jxhj8KhhhNhNubj)}(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}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjQhMubj)}(h drm_dp_atomic_release_time_slotsh]j)}(h drm_dp_atomic_release_time_slotsh]h drm_dp_atomic_release_time_slots}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjQhMubj)}(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}(hjhhhNhNubah}(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%)}jjfsb"c.drm_dp_atomic_release_time_slotsasbuh1hhj|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}(hj٩hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_dp_atomic_release_time_slotsasbuh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hstruct drm_dp_mst_port *porth](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_dp_mst_porth]hdrm_dp_mst_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_dp_atomic_release_time_slotsasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhjQhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;hhhjQhMubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhjQhMhj8hhubj)}(hhh]h)}(hRelease allocated time slotsh]hRelease allocated time slots}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhjubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjWubj)}(hhh]h)}(h!MST topology manager for the porth]h!MST topology manager for the port}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h'The port to release the time slots fromh]h'The port to release the time slots from}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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 }(hjhhhNhNubh)}(hR:c:type:`drm_connector_helper_funcs.atomic_check\(\) `h]jz)}(hjh]h)drm_connector_helper_funcs.atomic_check()}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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 }(hjhhhNhNubj%)}(h**port**h]hport}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhk has been removed from the system. Additionally, it is OK to call this function multiple times on the same }(hjhhhNhNubj%)}(h**port**h]hport}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhh as needed. It is not OK however, to call this function and drm_dp_atomic_find_time_slots() on the same }(hjhhhNhNubj%)}(h**port**h]hport}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh in a single atomic check phase.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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()}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h **Return**h]j%)}(hjoh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h+0 on success, negative error code otherwiseh]h+0 on success, negative error code otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_dp_mst_atomic_setup_commit (C function) c.drm_dp_mst_atomic_setup_commithNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjìhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj¬hMubj)}(hdrm_dp_mst_atomic_setup_commith]j)}(hdrm_dp_mst_atomic_setup_commith]hdrm_dp_mst_atomic_setup_commit}(hjլhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѬubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj¬hMubj)}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj׬sb c.drm_dp_mst_atomic_setup_commitasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hstateh]hstate}(hjJhhhNhNubah}(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!setup_commit hook for MST helpersh]h!setup_commit hook for MST helpers}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj¬hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(h7``struct drm_atomic_state *state`` global atomic state 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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 }(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_commituh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh structs in an atomic state that touch any CRTCs currently assigned to an MST topology. Drivers must call this hook from their }(hjhhhNhNubh)}(hY:c:type:`drm_mode_config_helper_funcs.atomic_commit_setup `h]jz)}(hj4h]h0drm_mode_config_helper_funcs.atomic_commit_setup}(hj6hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_helper_funcsuh1hhj-hMhjubh hook.}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hP0 if all CRTC commits were retrieved successfully, negative error code otherwiseh]hP0 if all CRTC commits were retrieved successfully, negative error code otherwise}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_dp_mst_atomic_wait_for_dependencies (C function))c.drm_dp_mst_atomic_wait_for_dependencieshNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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}(hjîhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(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%)}jjŮsb)c.drm_dp_mst_atomic_wait_for_dependenciesasbuh1hhjۮ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}(hj8hhhNhNubah}(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)}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubji)}(hhh]jn)}(h7``struct drm_atomic_state *state`` global atomic state 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(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}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_checkhNtauh1jxhj8KhhhNhNubj)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMDubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMDubj)}(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}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhMDubj)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(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%)}jjdsb#c.drm_dp_mst_root_conn_atomic_checkasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjʰhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hnew_conn_stateh]hnew_conn_state}(hjװhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j#c.drm_dp_mst_root_conn_atomic_checkasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhMDubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhMDubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhMDhj6hhubj)}(hhh]h)}(hFSerialize CRTC commits on MST-capable connectors operating in SST modeh]hFSerialize CRTC commits on MST-capable connectors operating in SST mode}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMDhjnhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMHhjubji)}(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)}(hjh]h*struct drm_connector_state *new_conn_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMFhjubj)}(hhh]h)}(h6The new connector state of the :c:type:`drm_connector`h](hThe new connector state of 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_connectoruh1hhjDZhMFhj˱ubeh}(h]h ]h"]h$]h&]uh1hhjDZhMFhjȱubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjDZhMFhjubjn)}(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 h]h#struct drm_dp_mst_topology_mgr *mgr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMGhjubj)}(hhh]h)}(h8The MST topology manager for the :c:type:`drm_connector`h](h!The MST topology manager for 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_connectoruh1hhjhMGhj#ubeh}(h]h ]h"]h$]h&]uh1hhjhMGhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMGhjubeh}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMIhjubh)}(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 }(hjzhhhNhNubh)}(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_encoderuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMHhjzubhX& 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 }(hjzhhhNhNubh)}(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_encoderuh1hhjhMHhjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMHhjubh)}(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 }(hjϲhhhNhNubh)}(hQ:c:type:`drm_dp_mst_topology_state.pending_crtc_mask `h]jz)}(hjٲh]h+drm_dp_mst_topology_state.pending_crtc_mask}(hj۲hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjײubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_topology_stateuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMMhjϲubh.}(hjϲhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMMhjubh)}(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 }(hjhhhNhNubh)}(hN:c:type:`drm_connector_helper_funcs.atomic_check `h]jz)}(hj h]h'drm_connector_helper_funcs.atomic_check}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMQhjubh hook of any physical DP }(hjhhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj/h]h drm_connector}(hj1hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhj(hMQhjubh capable of driving MST sinks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hMQhjubh)}(h **Return**h]j%)}(hjXh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMUhjubh)}(h+0 on success, negative error code otherwiseh]h+0 on success, negative error code otherwise}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_update_slots (C function)c.drm_dp_mst_update_slotshNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_mst_update_slotsh]j)}(hdrm_dp_mst_update_slotsh]hdrm_dp_mst_update_slots}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hjڳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֳubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֳubh)}(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%)}jjsbc.drm_dp_mst_update_slotsasbuh1hhjֳubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֳubj9)}(hj9h]h*}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjֳubj)}(h mst_stateh]h mst_state}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֳubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҳubj)}(huint8_t link_encoding_caph](h)}(hhh]j)}(huint8_th]huint8_t}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]jc.drm_dp_mst_update_slotsasbuh1hhjHubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hlink_encoding_caph]hlink_encoding_cap}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(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)}(h8updates the slot info depending on the DP ecoding formath]h8updates the slot info depending on the DP ecoding format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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Ǵ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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(hD``struct drm_dp_mst_topology_state *mst_state`` mst_state to update 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hmst_state to updateh]hmst_state to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjݴubjn)}(h<``uint8_t link_encoding_cap`` the ecoding format on the linkh](jt)}(h``uint8_t link_encoding_cap``h]jz)}(hjh]huint8_t link_encoding_cap}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hthe ecoding format on the linkh]hthe ecoding format on the link}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hMhjݴubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_check_act_status (C function)c.drm_dp_check_act_statushNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hAint drm_dp_check_act_status (struct drm_dp_mst_topology_mgr *mgr)h]j)}(h@int drm_dp_check_act_status(struct drm_dp_mst_topology_mgr *mgr)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjhMubj)}(hdrm_dp_check_act_statush]j)}(hdrm_dp_check_act_statush]hdrm_dp_check_act_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjhMubj)}(h%(struct drm_dp_mst_topology_mgr *mgr)h]j)}(h#struct drm_dp_mst_topology_mgr *mgrh](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_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_check_act_statusasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjuhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjqhhhjhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjnhhubj)}(hhh]h)}(hPolls for ACT handled status.h]hPolls for ACT handled status.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jhhhj8KhNhNubj)}(hXK**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to use **Description** Tries waiting for the MST hub to finish updating it's payload table by polling for the ACT handled bit for up to 3 seconds (yes-some hubs really take that long). **Return** 0 if the ACT was handled in time, negative error code 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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjUubji)}(hhh]jn)}(h7``struct drm_dp_mst_topology_mgr *mgr`` manager to use h](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjzh]h#struct drm_dp_mst_topology_mgr *mgr}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjtubj)}(hhh]h)}(hmanager to useh]hmanager to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjqubah}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjUubh)}(hTries waiting for the MST hub to finish updating it's payload table by polling for the ACT handled bit for up to 3 seconds (yes-some hubs really take that long).h]hTries waiting for the MST hub to finish updating it’s payload table by polling for the ACT handled bit for up to 3 seconds (yes-some hubs really take that long).}(hj˶hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjUubh)}(h **Return**h]j%)}(hjܶh]hReturn}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjUubh)}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_dp_calc_pbn_mode (C function)c.drm_dp_calc_pbn_modehNtauh1jxhj8KhhhNhNubj)}(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}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMubj)}(hdrm_dp_calc_pbn_modeh]j)}(hdrm_dp_calc_pbn_modeh]hdrm_dp_calc_pbn_mode}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hMubj)}(h(int clock, int bpp)h](j)}(h int clockh](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hclockh]hclock}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hint bpph](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbpph]hbpp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj/hMhjhhubj)}(hhh]h)}(hCalculate the PBN for a mode.h]hCalculate the PBN for a mode.}(hjٷhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjַhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h``int clock`` dot clock h](jt)}(h ``int clock``h]jz)}(hjh]h int clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h dot clockh]h dot clock}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hMhjubjn)}(h)``int bpp`` bpp as .4 binary fixed point h](jt)}(h ``int bpp``h]jz)}(hjSh]hint bpp}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjMubj)}(hhh]h)}(hbpp as .4 binary fixed pointh]hbpp as .4 binary fixed point}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjubeh}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dp_mst_dump_topology (C function)c.drm_dp_mst_dump_topologyhNtauh1jxhj8KhhhNhNubj)}(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}(hjӸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϸhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM$ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϸhhhjhM$ubj)}(hdrm_dp_mst_dump_topologyh]j)}(hdrm_dp_mst_dump_topologyh]hdrm_dp_mst_dump_topology}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjϸhhhjhM$ubj)}(h9(struct seq_file *m, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct seq_file *mh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hseq_fileh]hseq_file}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_dump_topologyasbuh1hhj ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hj}h]hm}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](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_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]jJc.drm_dp_mst_dump_topologyasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(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&]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)}(hdump topology to seq file.h]hdump topology to seq file.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jhjȸhhhjhM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM(hjubji)}(hhh](jn)}(h2``struct seq_file *m`` seq_file to dump output to h](jt)}(h``struct seq_file *m``h]jz)}(hjCh]hstruct seq_file *m}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM%hj=ubj)}(hhh]h)}(hseq_file to dump output toh]hseq_file to dump output to}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM%hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhM%hj:ubjn)}(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)}(hj|h]h#struct drm_dp_mst_topology_mgr *mgr}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM(hjubh)}(h6helper to dump MST topology to a seq file for debugfs.h]h6helper to dump MST topology to a seq file for debugfs.}(hjͺhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_dp_mst_port_downstream_of_parent (C function)&c.drm_dp_mst_port_downstream_of_parenthNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMmubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMmubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMmubj)}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j%)}jjsb&c.drm_dp_mst_port_downstream_of_parentasbuh1hhj4ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(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}(hjȻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŻubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjʻmodnameN classnameNjj)}j]jr&c.drm_dp_mst_port_downstream_of_parentasbuh1hhjubj)}(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&]noemphjjuh1jhj0ubj)}(hstruct drm_dp_mst_port *parenth](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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]jr&c.drm_dp_mst_port_downstream_of_parentasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjdhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hparenth]hparent}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMmubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMmubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMmhjhhubj)}(hhh]h)}(h.check if a port is downstream of a parent porth]h.check if a port is downstream of a parent port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMqhjubji)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMnhjּubj)}(hhh]h)}(hMST topology managerh]hMST topology manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjּubeh}(h]h ]h"]h$]h&]uh1jmhjhMnhjӼubjn)}(h:``struct drm_dp_mst_port *port`` the port being looked up 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMohjubj)}(hhh]h)}(hthe port being looked uph]hthe port being looked up}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMohj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj*hMohjӼubjn)}(h3``struct drm_dp_mst_port *parent`` the parent port h](jt)}(h"``struct drm_dp_mst_port *parent``h]jz)}(hjNh]hstruct drm_dp_mst_port *parent}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMphjHubj)}(hhh]h)}(hthe parent porth]hthe parent port}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMphjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchMphjӼ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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMrhjubh)}(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 }(hjhhhNhNubjz)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }(hjhhhNhNubj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is downstream of }(hjhhhNhNubj%)}(h **parent**h]hparent}(hj˽hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh. If }(hjhhhNhNubj%)}(h **parent**h]hparent}(hjݽhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is }(hjhhhNhNubjz)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh1 - denoting the root port - the function returns }(hjhhhNhNubjz)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if }hjsbj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh is in }(hjhhhNhNubj%)}(h**mgr**h]hmgr}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh’s topology.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMqhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(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_crtcshNtauh1jxhj8KhhhNhNubj)}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)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_dp_mst_add_affected_dsc_crtcsasbuh1hhjubj)}(h h]h }(hjپhhhNhNubah}(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&]noemphjjuh1jhjubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](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_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_add_affected_dsc_crtcsasbuh1hhj ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hmgrh]hmgr}(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}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubji)}(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)}(hjh]hstruct drm_atomic_state *state}(hj¿hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h3Pointer to the new struct drm_dp_mst_topology_stateh]h3Pointer to the new struct drm_dp_mst_topology_state}(hjٿhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjտhMhjֿubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjտhMhjubjn)}(h=``struct drm_dp_mst_topology_mgr *mgr`` MST topology manager 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hMST topology managerh]hMST topology manager}(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%)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hjubh)}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h(See also: drm_dp_mst_atomic_enable_dsc()h]h(See also: drm_dp_mst_atomic_enable_dsc()}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_atomic_enable_dsc (C function)c.drm_dp_mst_atomic_enable_dschNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMYubj)}(hdrm_dp_mst_atomic_enable_dsch]j)}(hdrm_dp_mst_atomic_enable_dsch]hdrm_dp_mst_atomic_enable_dsc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMYubj)}(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}(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%)}jjsbc.drm_dp_mst_atomic_enable_dscasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(hstruct drm_dp_mst_port *porth](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jc.drm_dp_mst_atomic_enable_dscasbuh1hhj3ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint pbnh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpbnh]hpbn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMYubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMYubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jhjhMYhj}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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMYhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhjhMYubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhj8KhNhNubj)}(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%)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./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)}(hjbh]hstruct drm_atomic_state *state}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMZhj\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&]uh1hhjwhMZhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhMZhjYubjn)}(hB``struct drm_dp_mst_port *port`` Pointer to the affected MST Port 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM[hjubj)}(hhh]h)}(h Pointer to the affected MST Porth]h Pointer to the affected MST Port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM[hjYubjn)}(hE``int pbn`` Newly recalculated bw required for link with DSC enabled h](jt)}(h ``int pbn``h]jz)}(hjh]hint pbn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM\hjubj)}(hhh]h)}(h8Newly recalculated bw required for link with DSC enabledh]h8Newly recalculated bw required for link with DSC enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM\hjYubjn)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM]hjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hM]hjYubeh}(h]h ]h"]h$]h&]uh1jhhj=ubh)}(h**Description**h]j%)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM_hj=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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM^hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_mst_atomic_check_mgr (C function)c.drm_dp_mst_atomic_check_mgrhNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_mst_atomic_check_mgrh]j)}(hdrm_dp_mst_atomic_check_mgrh]hdrm_dp_mst_atomic_check_mgr}(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 *mst_state, struct drm_dp_mst_port **failing_port)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%)}jjsbc.drm_dp_mst_atomic_check_mgrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hdrm_dp_mst_topology_mgrh]hdrm_dp_mst_topology_mgr}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]jc.drm_dp_mst_atomic_check_mgrasbuh1hhj8ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h+struct drm_dp_mst_topology_state *mst_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]jc.drm_dp_mst_atomic_check_mgrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h mst_stateh]h mst_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h%struct drm_dp_mst_port **failing_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}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]jc.drm_dp_mst_atomic_check_mgrasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h failing_porth]h failing_port}(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)}(h1Check the atomic state of an MST topology managerh]h1Check the atomic state of an MST topology manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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() - 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. **Return** - 0 if the new state is valid - ``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to: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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h;``struct drm_atomic_state *state`` The global atomic state 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hThe global atomic stateh]hThe global atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h9``struct drm_dp_mst_topology_mgr *mgr`` Manager to check 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hManager to checkh]hManager to check}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj9hMhjubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjWubj)}(hhh]h)}(h The MST atomic state for **mgr**h](hThe MST atomic state for }(hjvhhhNhNubj%)}(h**mgr**h]hmgr}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhMhjubjn)}(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)}(hjh]h%struct drm_dp_mst_port **failing_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h%Returns the port with a BW limitationh]h%Returns the port with a BW limitation}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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 }(hjhhhNhNubh)}(hH:c:type:`drm_mode_config_funcs.atomic_check\(\) `h]jz)}(hjh]h$drm_mode_config_funcs.atomic_check()}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hMhjubh)}(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()}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubjb=)}(hX - 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](jb=)}(hXg- 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]h)}(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 }(hjThhhNhNubj%)}(h**failing_port**h]h failing_port}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubhs passing the BW limit check. The returned port pointer is valid until at least one payload downstream of it exists.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjPubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhy if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj{ubah}(h]h ]h"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]j8j4uh1hhjthMhjIubah}(h]h ]h"]h$]h&]uh1ja=hjthMhjEubh)}(hhh]h)}(hW``-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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubhK, if the new state is invalid, because the root port has too many payloads.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]j8j4uh1hhjhMhjEubeh}(h]h ]h"]h$]h&]uh1ja=hjthMhjubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hhh](h)}(h0 if the new state is validh]h)}(hjh]h0 if the new state is valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hb``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to:h]ji)}(hhh]jn)}(h^``-ENOSPC``, if the new state is invalid, because of BW limitation **failing_port** is set to:h](jt)}(hB``-ENOSPC``, if the new state is invalid, because of BW limitationh](jz)}(h ``-ENOSPC``h]h-ENOSPC}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubh7, if the new state is invalid, because of BW limitation}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h**failing_port** is set to:h](j%)}(h**failing_port**h]h failing_port}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubh is set to:}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj?ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dp_mst_atomic_check (C function)c.drm_dp_mst_atomic_checkhNtauh1jxhj8KhhhNhNubj)}(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%)}(hjh]h Parameters}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubji)}(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)}(hjh]hstruct drm_atomic_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hYPointer to the new :c:type:`struct drm_dp_mst_topology_state `h](hPointer to the new }(hjhhhNhNubh)}(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_stateuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubh)}(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 }(hjhhhNhNubh)}(hH: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_funcsuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjyubh)}(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()}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubh)}(h **Return**h]j%)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubh)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_atomic_get_mst_topology_state (C function)#c.drm_atomic_get_mst_topology_statehNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(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%)}j!drm_atomic_get_mst_topology_statesb#c.drm_atomic_get_mst_topology_stateasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(h!drm_atomic_get_mst_topology_stateh]j)}(hjh]h!drm_atomic_get_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)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}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j#c.drm_atomic_get_mst_topology_stateasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j#c.drm_atomic_get_mst_topology_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(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)}(hget MST topology stateh]hget MST topology state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhj8KhNhNubj)}(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%)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj,ubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjQh]hstruct drm_atomic_state *state}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjKubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjHubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h:MST topology manager, also the private object in this caseh]h:MST topology manager, also the private object in this case}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj,ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj,ubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj,ubh)}(h(The MST topology state or error pointer.h]h(The MST topology state or error pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_get_old_mst_topology_state (C function)'c.drm_atomic_get_old_mst_topology_statehNtauh1jxhj8KhhhNhNubj)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj>hMubh)}(hhh]j)}(hdrm_dp_mst_topology_stateh]hdrm_dp_mst_topology_state}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j%)}j%drm_atomic_get_old_mst_topology_statesb'c.drm_atomic_get_old_mst_topology_stateasbuh1hhj-hhhj>hMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj>hMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-hhhj>hMubj)}(h%drm_atomic_get_old_mst_topology_stateh]j)}(hjnh]h%drm_atomic_get_old_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj>hMubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)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]jl'c.drm_atomic_get_old_mst_topology_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&]noemphjjuh1jhjubj)}(h#struct drm_dp_mst_topology_mgr *mgrh](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_topology_mgrh]hdrm_dp_mst_topology_mgr}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]jl'c.drm_atomic_get_old_mst_topology_stateasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjrhhhNhNubah}(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&]jjjuh1jjjhj)hhhj>hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jhj>hMhj&hhubj)}(hhh]h)}(h2get old MST topology state in atomic state, if anyh]h2get old MST topology state in atomic state, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h:MST topology manager, also the private object in this caseh]h:MST topology manager, also the private object in this case}(hj/hhhNhNubah}(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%)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h **Return**h]j%)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2drm_atomic_get_new_mst_topology_state (C function)'c.drm_atomic_get_new_mst_topology_statehNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM'ubh)}(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%)}j%drm_atomic_get_new_mst_topology_statesb'c.drm_atomic_get_new_mst_topology_stateasbuh1hhjhhhjhM'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM'ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhM'ubj)}(h%drm_atomic_get_new_mst_topology_stateh]j)}(hjh]h%drm_atomic_get_new_mst_topology_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM'ubj)}(hE(struct drm_atomic_state *state, struct drm_dp_mst_topology_mgr *mgr)h](j)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j'c.drm_atomic_get_new_mst_topology_stateasbuh1hhj3ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j'c.drm_atomic_get_new_mst_topology_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(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)}(h2get new MST topology state in atomic state, if anyh]h2get new MST topology state in atomic state, if any}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM'hj%hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jhhhj8KhNhNubj)}(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%)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+hjDubji)}(hhh](jn)}(h7``struct drm_atomic_state *state`` global atomic state h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjih]hstruct drm_atomic_state *state}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM(hjcubj)}(hhh]h)}(hglobal atomic stateh]hglobal atomic state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM(hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj~hM(hj`ubjn)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM)hjubj)}(hhh]h)}(h:MST topology manager, also the private object in this caseh]h:MST topology manager, also the private object in this case}(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&]uh1jhhjDubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM+hjDubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM*hjDubh)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM.hjDubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM/hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_mgr_init (C function)c.drm_dp_mst_topology_mgr_inithNtauh1jxhj8KhhhNhNubj)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM?ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjWhM?ubj)}(hdrm_dp_mst_topology_mgr_inith]j)}(hdrm_dp_mst_topology_mgr_inith]hdrm_dp_mst_topology_mgr_init}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjWhM?ubj)}(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}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjlsbc.drm_dp_mst_topology_mgr_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(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]jc.drm_dp_mst_topology_mgr_initasbuh1hhjubj)}(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&]noemphjjuh1jhj~ubj)}(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]jc.drm_dp_mst_topology_mgr_initasbuh1hhjdubj)}(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)}(hint max_dpcd_transaction_bytesh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_dpcd_transaction_bytesh]hmax_dpcd_transaction_bytes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hint max_payloadsh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h max_payloadsh]h max_payloads}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubj)}(hint conn_base_idh](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h conn_base_idh]h conn_base_id}(hj^hhhNhNubah}(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)}(hinitialise a topology managerh]hinitialise a topology manager}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjWhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMChjubji)}(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)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM@hjubj)}(hhh]h)}(hmanager struct to initialiseh]hmanager struct to initialise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM@hjubjn)}(hO``struct drm_device *dev`` device providing this structure - for i2c addition. 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&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMAhjubj)}(hhh]h)}(h3device providing this structure - for i2c addition.h]h3device providing this structure - for i2c addition.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMAhjubjn)}(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)}(hj;h]hstruct drm_dp_aux *aux}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMBhj5ubj)}(hhh]h)}(h,DP helper aux channel to talk to this deviceh]h,DP helper aux channel to talk to this device}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMBhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhjPhMBhjubjn)}(hF``int max_dpcd_transaction_bytes`` hw specific DPCD transaction limit h](jt)}(h"``int max_dpcd_transaction_bytes``h]jz)}(hjth]hint max_dpcd_transaction_bytes}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMChjnubj)}(hhh]h)}(h"hw specific DPCD transaction limith]h"hw specific DPCD transaction limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjhMChjubjn)}(hD``int max_payloads`` maximum number of payloads this GPU can source h](jt)}(h``int max_payloads``h]jz)}(hjh]hint max_payloads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMDhjubj)}(hhh]h)}(h.maximum number of payloads this GPU can sourceh]h.maximum number of payloads this GPU can source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMDhjubjn)}(hM``int conn_base_id`` the connector object ID the MST device is connected to. h](jt)}(h``int conn_base_id``h]jz)}(hjh]hint conn_base_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMEhjubj)}(hhh]h)}(h7the connector object ID the MST device is connected to.h]h7the connector object ID the MST device is connected to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMEhjubeh}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMGhjubh)}(h7Return 0 for success, or negative error code on failureh]h7Return 0 for success, or negative error code on failure}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_dp_mst_topology_mgr_destroy (C function)!c.drm_dp_mst_topology_mgr_destroyhNtauh1jxhj8KhhhNhNubj)}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjthMubj)}(hdrm_dp_mst_topology_mgr_destroyh]j)}(hdrm_dp_mst_topology_mgr_destroyh]hdrm_dp_mst_topology_mgr_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjthMubj)}(h%(struct drm_dp_mst_topology_mgr *mgr)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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsb!c.drm_dp_mst_topology_mgr_destroyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmgrh]hmgr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjbhhhjthMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhjthMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjthMhj[hhubj)}(hhh]h)}(hdestroy topology manager.h]hdestroy topology manager.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjthMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhj8KhNhNubj)}(hL**Parameters** ``struct drm_dp_mst_topology_mgr *mgr`` manager to destroyh](h)}(h**Parameters**h]j%)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjBubji)}(hhh]jn)}(h:``struct drm_dp_mst_topology_mgr *mgr`` manager to destroyh](jt)}(h'``struct drm_dp_mst_topology_mgr *mgr``h]jz)}(hjgh]h#struct drm_dp_mst_topology_mgr *mgr}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjaubj)}(hhh]h)}(hmanager to destroyh]hmanager to destroy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.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&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dp_mst_aux_for_parent (C function)c.drm_dp_mst_aux_for_parenthNtauh1jxhj8KhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(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%)}jdrm_dp_mst_aux_for_parentsbc.drm_dp_mst_aux_for_parentasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdrm_dp_mst_aux_for_parenth]j)}(hjh]hdrm_dp_mst_aux_for_parent}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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&]uh1jhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]jc.drm_dp_mst_aux_for_parentasbuh1hhj7ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h+Get the AUX device for an MST port's parenth]h-Get the AUX device for an MST port’s parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(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%)}(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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(hP``struct drm_dp_mst_port *port`` MST port whose parent's AUX device is returned 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h.MST port whose parent's AUX device is returnedh]h0MST port whose parent’s AUX device is returned}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hVReturn the AUX device for **port**'s parent or NULL if port's parent is the root port.h](hReturn the AUX device for }(hjNhhhNhNubj%)}(h**port**h]hport}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubh8’s parent or NULL if port’s parent is the root port.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dp_mst_dsc_aux_for_port (C function)c.drm_dp_mst_dsc_aux_for_porthNtauh1jxhj8KhhhNhNubj)}(hhh](j)}(hNstruct drm_dp_aux * drm_dp_mst_dsc_aux_for_port (struct drm_dp_mst_port *port)h]j)}(hLstruct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(struct drm_dp_mst_port *port)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(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%)}jdrm_dp_mst_dsc_aux_for_portsbc.drm_dp_mst_dsc_aux_for_portasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhMubj)}(hdrm_dp_mst_dsc_aux_for_porth]j)}(hjh]hdrm_dp_mst_dsc_aux_for_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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]jc.drm_dp_mst_dsc_aux_for_portasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(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)}(hFind the correct aux for DSCh]hFind the correct aux for DSC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj8KhNhNubj)}(hX**Parameters** ``struct drm_dp_mst_port *port`` The port to check. A leaf of the MST tree with an attached display. **Description** Depending on the situation, DSC may be enabled via the endpoint aux, the immediately upstream aux, or the connector's physical aux. This is both the correct aux to read DSC_CAPABILITY and the correct aux to write DSC_ENABLED. This operation can be expensive (up to four aux reads), so the caller should cache the return. **Return** NULL if DSC cannot be enabled on this port, otherwise the aux deviceh](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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(hhh]jn)}(he``struct drm_dp_mst_port *port`` The port to check. A leaf of the MST tree with an attached display. 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:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(hCThe port to check. A leaf of the MST tree with an attached display.h]hCThe port to check. A leaf of the MST tree with an attached display.}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hDepending on the situation, DSC may be enabled via the endpoint aux, the immediately upstream aux, or the connector's physical aux.h]hDepending on the situation, DSC may be enabled via the endpoint aux, the immediately upstream aux, or the connector’s physical aux.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h]This is both the correct aux to read DSC_CAPABILITY and the correct aux to write DSC_ENABLED.h]h]This is both the correct aux to read DSC_CAPABILITY and the correct aux to write DSC_ENABLED.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h^This operation can be expensive (up to four aux reads), so the caller should cache the return.h]h^This operation can be expensive (up to four aux reads), so the caller should cache the return.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(h **Return**h]j%)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hDNULL if DSC cannot be enabled on this port, otherwise the aux deviceh]hDNULL if DSC cannot be enabled on this port, otherwise the aux device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:311: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj8KhhhNhNubeh}(h]id4ah ]h"]h$]j ah&]uh1hhjHhhhhhM2j;Kubh)}(hhh](h)}(hTopology Lifetime Internalsh]hTopology Lifetime Internals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hhhhhM;ubh)}(h~These functions aren't exported to drivers, but are documented here to help make the MST topology helpers easier to understandh]hThese functions aren’t exported to drivers, but are documented here to help make the MST topology helpers easier to understand}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM=hj~hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_get_mstb_malloc (C function)c.drm_dp_mst_get_mstb_mallochNtauh1jxhj~hhhNhNubj)}(hhh](j)}(h@void drm_dp_mst_get_mstb_malloc (struct drm_dp_mst_branch *mstb)h]j)}(h?void drm_dp_mst_get_mstb_malloc(struct drm_dp_mst_branch *mstb)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_mst_get_mstb_malloch]j)}(hdrm_dp_mst_get_mstb_malloch]hdrm_dp_mst_get_mstb_malloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_get_mstb_mallocasbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmstbh]hmstb}(hjLhhhNhNubah}(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)}(h0Increment the malloc refcount of a branch deviceh]h0Increment the malloc refcount of a branch device}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj~hNhNubj)}(hX**Parameters** ``struct drm_dp_mst_branch *mstb`` The :c:type:`struct drm_dp_mst_branch ` 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%)}(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:320: ./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 malloc 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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h^The :c:type:`struct drm_dp_mst_branch ` to increment the malloc 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 malloc 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%)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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 }(hj+hhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hj5h]hdrm_dp_mst_branch.malloc_kref}(hj7hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj+ubh. When }(hj+hhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hjYh]hdrm_dp_mst_branch.malloc_kref}(hj[hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjRhMhj+ubh& reaches 0, the memory allocation for }(hj+hhhNhNubj%)}(h**mstb**h]hmstb}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubh will be released and }(hj+hhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ubh may no longer be used.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjRhMhjubh)}(h&See also: drm_dp_mst_put_mstb_malloc()h]h&See also: drm_dp_mst_put_mstb_malloc()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dp_mst_put_mstb_malloc (C function)c.drm_dp_mst_put_mstb_mallochNtauh1jxhj~hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dp_mst_put_mstb_malloch]j)}(hdrm_dp_mst_put_mstb_malloch]hdrm_dp_mst_put_mstb_malloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h (struct drm_dp_mst_branch *mstb)h]j)}(hstruct drm_dp_mst_branch *mstbh](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_dp_mst_branchh]hdrm_dp_mst_branch}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_put_mstb_mallocasbuh1hhj ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj\hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hmstbh]hmstb}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(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)}(h0Decrement the malloc refcount of a branch deviceh]h0Decrement the malloc refcount of a branch device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj~hNhNubj)}(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%)}(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:320: ./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 decrement the malloc 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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(hhh]h)}(h^The :c:type:`struct drm_dp_mst_branch ` to decrement the malloc 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 decrement the malloc 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%)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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 }(hjHhhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hjRh]hdrm_dp_mst_branch.malloc_kref}(hjThhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjHubh. When }(hjHhhhNhNubh)}(h;:c:type:`drm_dp_mst_branch.malloc_kref `h]jz)}(hjvh]hdrm_dp_mst_branch.malloc_kref}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjohMhjHubh& reaches 0, the memory allocation for }(hjHhhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubh will be released and }(hjHhhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubh may no longer be used.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohMhjubh)}(h&See also: drm_dp_mst_get_mstb_malloc()h]h&See also: drm_dp_mst_get_mstb_malloc()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(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_mstbhNtauh1jxhj~hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j%)}jjsb"c.drm_dp_mst_topology_try_get_mstbasbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj9)}(hj9h]h*}(hjyhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)ubj)}(hmstbh]hmstb}(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)}(hCIncrement the topology refcount of a branch device unless it's zeroh]hEIncrement the topology refcount of a branch device unless it’s zero}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj~hNhNubj)}(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%)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubji)}(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)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubj)}(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)}(hjh]hstruct drm_dp_mst_branch}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_branchuh1hhjhMhj ubh& to increment the topology refcount of}(hj hhhNhNubeh}(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%)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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 }(hjahhhNhNubj%)}(h**mstb**h]hmstb}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh:, if it hasn’t yet been removed from the topology (e.g. }(hjahhhNhNubh)}(h=:c:type:`drm_dp_mst_branch.topology_kref `h]jz)}(hj}h]hdrm_dp_mst_branch.topology_kref}(hjhhhNhNubah}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjaubh^ has reached 0). Holding a topology reference implies that a malloc reference will be held to }(hjahhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh2 as long as the user holds the topology reference.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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 }(hjhhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.. If you already have a topology reference to }(hjhhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh8, you should use drm_dp_mst_topology_get_mstb() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh)}(hhh](h)}(h01: A topology reference was grabbed successfullyh]h)}(hjh]h01: A topology reference was grabbed successfully}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hB0: **port** is no longer in the topology, no reference was grabbedh]h)}(hj.h](h0: }(hj0hhhNhNubj%)}(h**port**h]hport}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubh7 is no longer in the topology, no reference was grabbed}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj,ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j9uh1hhj%hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_get_mstb (C function)c.drm_dp_mst_topology_get_mstbhNtauh1jxhj~hhhNhNubj)}(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&]uh1jhjxhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhMubj)}(hdrm_dp_mst_topology_get_mstbh]j)}(hdrm_dp_mst_topology_get_mstbh]hdrm_dp_mst_topology_get_mstb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_topology_get_mstbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmstbh]hmstb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjthhhjhMubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjqhhubj)}(hhh]h)}(h2Increment the topology refcount of a branch deviceh]h2Increment the topology refcount of a branch device}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhj~hNhNubj)}(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%)}(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:320: ./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 topology refcount of h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hj}h]hstruct drm_dp_mst_branch *mstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjtubah}(h]h ]h"]h$]h&]uh1jhhjXubh)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjXubh)}(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 }(hjhhhNhNubh)}(hA:c:type:`drm_dp_mst_branch.topology_refcount `h]jz)}(hjh]h#drm_dp_mst_branch.topology_refcount}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh 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**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh=. Otherwise, drm_dp_mst_topology_try_get_mstb() must be used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjXubh)}(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()}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_put_mstb (C function)c.drm_dp_mst_topology_put_mstbhNtauh1jxhj~hhhNhNubj)}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhM ubj)}(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&]jjuh1jhj`hhhjrhM ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_topology_put_mstbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmstbh]hmstb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhjrhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhjrhM ubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjrhM hjYhhubj)}(hhh]h)}(h/release a topology reference to a branch deviceh]h/release a topology reference to a branch device}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM hj!hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhj~hNhNubj)}(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%)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./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 release the topology reference from h](jt)}(h"``struct drm_dp_mst_branch *mstb``h]jz)}(hjeh]hstruct drm_dp_mst_branch *mstb}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj_ubj)}(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_branchuh1hhjzhMhj~ubh' to release the topology reference from}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhMhj\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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj@ubh)}(hzReleases a topology reference from **mstb** by decrementing :c:type:`drm_dp_mst_branch.topology_kref `.h](h#Releases a topology reference from }(hjhhhNhNubj%)}(h**mstb**h]hmstb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh by decrementing }(hjhhhNhNubh)}(h=:c:type:`drm_dp_mst_branch.topology_kref `h]jz)}(hjh]hdrm_dp_mst_branch.topology_kref}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj@ubh)}(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()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(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_porthNtauh1jxhj~hhhNhNubj)}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM>ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjZhM>ubj)}(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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjZhM>ubj)}(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%)}jjosb"c.drm_dp_mst_topology_try_get_portasbuh1hhjubj)}(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&]jjuh1jhjHhhhjZhM>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjZhM>ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjZhM>hjAhhubj)}(hhh]h)}(h:Increment the topology refcount of a port unless it's zeroh]hhj hhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjZhM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhj~hNhNubj)}(hXp**Parameters** ``struct drm_dp_mst_port *port`` :c:type:`struct drm_dp_mst_port ` 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%)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMBhj(ubji)}(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)}(hjMh]hstruct drm_dp_mst_port *port}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM@hjGubj)}(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)}(hjlh]hstruct drm_dp_mst_port}(hjnhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhjbhM@hjfubh& to increment the topology refcount of}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhM@hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjbhM@hjDubah}(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&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMBhj(ubh)}(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}(hjhhhNhNubah}(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)}(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:320: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh2 as long as the user holds the topology reference.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMAhj(ubh)}(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 }(hjhhhNhNubj%)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh.. If you already have a topology reference to }(hjhhhNhNubj%)}(h**port**h]hport}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh8, you should use drm_dp_mst_topology_get_port() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMFhj(ubh)}(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()}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMJhj(ubh)}(h **Return**h]j%)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMNhj(ubh)}(hhh](h)}(h01: A topology reference was grabbed successfullyh]h)}(hjrh]h01: A topology reference was grabbed successfully}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMOhjpubah}(h]h ]h"]h$]h&]uh1hhjmubh)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMPhjubah}(h]h ]h"]h$]h&]uh1hhjmubeh}(h]h ]h"]h$]h&]j8j9uh1hhjhMOhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_get_port (C function)c.drm_dp_mst_topology_get_porthNtauh1jxhj~hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMdubj)}(hdrm_dp_mst_topology_get_porth]j)}(hdrm_dp_mst_topology_get_porth]hdrm_dp_mst_topology_get_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMdubj)}(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 }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_dp_mst_porth]hdrm_dp_mst_port}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j%)}jjsbc.drm_dp_mst_topology_get_portasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjahhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hporth]hport}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMdhjhhubj)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj~hNhNubj)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhhjubji)}(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)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMehjubj)}(hhh]h)}(h\The :c:type:`struct drm_dp_mst_port ` to increment the topology 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_portuh1hhjhMehjubh& to increment the topology refcount of}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMehjubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMghjubh)}(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 }(hjMhhhNhNubh)}(h=:c:type:`drm_dp_mst_port.topology_refcount `h]jz)}(hjWh]h!drm_dp_mst_port.topology_refcount}(hjYhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMfhjMubh 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 }(hjMhhhNhNubj%)}(h**port**h]hport}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubh=. Otherwise, drm_dp_mst_topology_try_get_port() must be used.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthMfhjubh)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_dp_mst_topology_put_port (C function)c.drm_dp_mst_topology_put_porthNtauh1jxhj~hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM}ubj)}(hdrm_dp_mst_topology_put_porth]j)}(hdrm_dp_mst_topology_put_porth]hdrm_dp_mst_topology_put_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM}ubj)}(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 }(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%)}jjsbc.drm_dp_mst_topology_put_portasbuh1hhjubj)}(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&]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)}(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:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chM}hj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj~hNhNubj)}(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:320: ./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)}(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:320: ./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 }(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_portuh1hhjhM~hjubh' to release the topology reference from}(hjhhhNhNubeh}(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}(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:320: ./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 }(hj5hhhNhNubj%)}(h**port**h]hport}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubh by decrementing }(hj5hhhNhNubh)}(h9:c:type:`drm_dp_mst_port.topology_kref `h]jz)}(hjQh]hdrm_dp_mst_port.topology_kref}(hjShhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dp_mst_portuh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhj5ubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMhjubh)}(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()}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhr/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:320: ./drivers/gpu/drm/display/drm_dp_mst_topology.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhNhNubeh}(h]topology-lifetime-internalsah ]h"]topology lifetime internalsah$]h&]uh1hhjHhhhhhM;ubeh}(h]display-port-mst-helpersah ]h"]display port mst helpersah$]h&]uh1hhhhhhhhM&ubh)}(hhh](h)}(h#MIPI DBI Helper Functions Referenceh]h#MIPI DBI Helper Functions Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMHubh)}(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:330: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK3hjhhubh)}(h*There are 3 MIPI DBI implementation types:h]h*There are 3 MIPI DBI implementation types:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK5hjhhubjQH)}(hhh](h)}(h Motorola 6800 type parallel bus h]h)}(hMotorola 6800 type parallel bush]hMotorola 6800 type parallel bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK7hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hIntel 8080 type parallel bus h]h)}(hIntel 8080 type parallel bush]hIntel 8080 type parallel bus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK9hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(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:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK;hj!ubjQH)}(hhh](h)}(h39-bit with the Data/Command signal as the ninth bith]h)}(hj9h]h39-bit with the Data/Command signal as the ninth bit}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK=hj7ubah}(h]h ]h"]h$]h&]uh1hhj4ubh)}(h)Same as above except it's sent as 16 bitsh]h)}(hjQh]h+Same as above except it’s sent as 16 bits}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK>hjOubah}(h]h ]h"]h$]h&]uh1hhj4ubh)}(h:8-bit with the Data/Command signal as a separate D/CX pin h]h)}(h98-bit with the Data/Command signal as a separate D/CX pinh]h98-bit with the Data/Command signal as a separate D/CX pin}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./drivers/gpu/drm/drm_mipi_dbi.chK?hjgubah}(h]h ]h"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]jMJjNJjOJhjPJjQJuh1jPHhj!ubeh}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jMJ upperalphajOJhjPJjQJuh1jPHhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:330: ./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:330: ./drivers/gpu/drm/drm_mipi_dbi.chKAhjhhubjy)}(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:333: ./include/drm/drm_mipi_dbi.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hmipi_dbih]j)}(hjh]hmipi_dbi}(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)}(hMIPI DBI interfaceh]hMIPI DBI interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhKhjubj@)}(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; };}hj;sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhKhjubh)}(h **Members**h]j%)}(hjLh]hMembers}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhK*hjubji)}(hhh](jn)}(h``cmdlock`` Command lock h](jt)}(h ``cmdlock``h]jz)}(hjkh]hcmdlock}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjiubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhKhjeubj)}(hhh]h)}(h Command lockh]h Command lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjbubjn)}(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:333: ./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!hjbubjn)}(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)}(hjh]h read_commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhK'hjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjhK'hjubj)}(hhh]h)}(h$Reading is disabled if this is NULL.h]h$Reading is disabled if this is NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK'hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK'hjbubjn)}(h4``swap_bytes`` Swap bytes in buffer before transfer h](jt)}(h``swap_bytes``h]jz)}(hj@h]h swap_bytes}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhK,hj:ubj)}(hhh]h)}(h$Swap bytes in buffer before transferh]h$Swap bytes in buffer before transfer}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhK,hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhjUhK,hjbubjn)}(h``reset`` Optional reset gpio h](jt)}(h ``reset``h]jz)}(hjyh]hreset}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhK1hjsubj)}(hhh]h)}(hOptional reset gpioh]hOptional reset gpio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjhK1hjbubjn)}(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:333: ./include/drm/drm_mipi_dbi.hhK8hjubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK8hjbubjn)}(hR``write_memory_bpw`` Bits per word used on a MIPI_DCS_WRITE_MEMORY_START transfer h](jt)}(h``write_memory_bpw``h]jz)}(hjh]hwrite_memory_bpw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:333: ./include/drm/drm_mipi_dbi.hhK=hjubj)}(hhh]h)}(hsbc.mipi_dbi_command_readasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubj)}(hdbih]hdbi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(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_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubj)}(hu8 *valh](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_readasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvalh]hval}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj)hK{ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj)hK{ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj)hK{hjhhubj)}(hhh]h)}(hMIPI DCS read commandh]hMIPI DCS read command}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chK{hjuhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hK{ubeh}(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:336: ./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:336: ./drivers/gpu/drm/drm_mipi_dbi.chK|hjubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK|hjubjn)}(h``u8 cmd`` Command h](jt)}(h ``u8 cmd``h]jz)}(hjh]hu8 cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chK}hjubj)}(hhh]h)}(hCommandh]hCommand}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK}hjubjn)}(h``u8 *val`` Value read h](jt)}(h ``u8 *val``h]jz)}(hj+h]hu8 *val}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chK~hj%ubj)}(hhh]h)}(h Value readh]h Value read}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hK~hjAubah}(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%)}(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:336: ./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:336: ./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:336: ./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:336: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hmipi_dbi_command_bufh]j)}(hmipi_dbi_command_bufh]hmipi_dbi_command_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h4(struct mipi_dbi *dbi, u8 cmd, u8 *data, size_t len)h](j)}(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 reftargetj/modnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_command_bufasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdbih]hdbi}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 cmdh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jIc.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&]noemphjjuh1jhjubj)}(hu8 *datah](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jIc.mipi_dbi_command_bufasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(h size_t lenh](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]jIc.mipi_dbi_command_bufasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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.MIPI DCS command with parameter(s) in an arrayh]h.MIPI DCS command with parameter(s) in an array}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjthhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(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:336: ./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:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``u8 cmd`` Command h](jt)}(h ``u8 cmd``h]jz)}(hjh]hu8 cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hCommandh]hCommand}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``u8 *data`` Parameter buffer h](jt)}(h ``u8 *data``h]jz)}(hj*h]hu8 *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:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhj$ubj)}(hhh]h)}(hParameter bufferh]hParameter buffer}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhjubjn)}(h``size_t len`` Buffer length h](jt)}(h``size_t len``h]jz)}(hjch]h size_t len}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhj]ubj)}(hhh]h)}(h Buffer lengthh]h Buffer length}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhjxhKhjubeh}(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:336: ./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:336: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hmipi_dbi_buf_copyh]j)}(hmipi_dbi_buf_copyh]hmipi_dbi_buf_copy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(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}(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)}(hdsth]hdst}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct iosys_map *srch](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(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%)}jjsbc.mipi_dbi_buf_copyasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(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&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN 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)}(hfbh]hfb}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct drm_rect *cliph](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_recth]hdrm_rect}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]jc.mipi_dbi_buf_copyasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj9)}(hj9h]h*}(hjhhhNhNubah}(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 swaph](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hswaph]hswap}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h*struct drm_format_conv_state *fmtcnv_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.mipi_dbi_buf_copyasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h fmtcnv_stateh]h fmtcnv_state}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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)}(h0Copy a framebuffer, transforming it if necessaryh]h0Copy a framebuffer, transforming it if necessary}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubji)}(hhh](jn)}(h%``void *dst`` The destination buffer h](jt)}(h ``void *dst``h]jz)}(hjh]h void *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hThe destination bufferh]hThe destination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h,``struct iosys_map *src`` The source buffer h](jt)}(h``struct iosys_map *src``h]jz)}(hjh]hstruct iosys_map *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hThe source bufferh]hThe source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h6``struct drm_framebuffer *fb`` The source 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&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hThe source framebufferh]hThe source framebuffer}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hKhjubjn)}(hF``struct drm_rect *clip`` Clipping rectangle of the area to be copied h](jt)}(h``struct drm_rect *clip``h]jz)}(hjUh]hstruct drm_rect *clip}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjOubj)}(hhh]h)}(h+Clipping rectangle of the area to be copiedh]h+Clipping rectangle of the area to be copied}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhKhjubjn)}(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:336: ./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)}(hjh]h*struct drm_format_conv_state *fmtcnv_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chKhjubj)}(hhh]h)}(hFormat-conversion stateh]hFormat-conversion 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 **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:336: ./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:336: ./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)}(hjh]henum}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM?ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjThM?ubh)}(hhh]j)}(hdrm_mode_statush]hdrm_mode_status}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j%)}jmipi_dbi_pipe_mode_validsbc.mipi_dbi_pipe_mode_validasbuh1hhjChhhjThM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjThM?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&]jjuh1jhjChhhjThM?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 }(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]jc.mipi_dbi_pipe_mode_validasbuh1hhjubj)}(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#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]jc.mipi_dbi_pipe_mode_validasbuh1hhj 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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjChhhjThM?ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj?hhhjThM?ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1jhjThM?hj<hhubj)}(hhh]h)}(hMIPI DBI mode-valid helperh]hMIPI DBI mode-valid helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjThM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMChjubji)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM@hjubj)}(hhh]h)}(hSimple display pipeh]hSimple display pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM@hjubjn)}(h9``const struct drm_display_mode *mode`` The mode to test 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&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMAhj4ubj)}(hhh]h)}(hThe mode to testh]hThe mode to test}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMAhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhMAhjubeh}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMChjubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMBhjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMBhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMQubj)}(hmipi_dbi_pipe_updateh]j)}(hmipi_dbi_pipe_updateh]hmipi_dbi_pipe_update}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMQubj)}(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}(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_pipe_updateasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jTc.mipi_dbi_pipe_updateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h old_stateh]h old_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMQubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMQhjhhubj)}(hhh]h)}(hDisplay pipe update helperh]hDisplay pipe update helper}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMQhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjhNhNubj)}(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%)}(hj/h]h Parameters}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMUhj)ubji)}(hhh](jn)}(h=``struct drm_simple_display_pipe *pipe`` Simple display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjNh]h$struct drm_simple_display_pipe *pipe}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMRhjHubj)}(hhh]h)}(hSimple display pipeh]hSimple display pipe}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMRhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchMRhjEubjn)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMShjubj)}(hhh]h)}(hOld plane stateh]hOld plane state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMShjEubeh}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMUhj)ubh)}(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 }(hjhhhNhNubh)}(hO:c:type:`drm_simple_display_pipe_funcs->update `h]jz)}(hjh]h%drm_simple_display_pipe_funcs->update}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMThjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMThj)ubeh}(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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMsubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hMsubj)}(hmipi_dbi_enable_flushh]j)}(hmipi_dbi_enable_flushh]hmipi_dbi_enable_flush}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj8hMsubj)}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(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_enable_flushasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjcubj)}(hdbidevh]hdbidev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(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]jc.mipi_dbi_enable_flushasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h crtc_stateh]h crtc_state}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(h#struct drm_plane_state *plane_stateh](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]jc.mipi_dbi_enable_flushasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(h plane_stateh]h plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj8hMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj"hhhj8hMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj8hMshjhhubj)}(hhh]h)}(hMIPI DBI enable helperh]hMIPI DBI enable helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMshjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMwhjubji)}(hhh](jn)}(h:``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hj h]hstruct mipi_dbi_dev *dbidev}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMthj ubj)}(hhh]h)}(hMIPI DBI device structureh]hMIPI DBI device structure}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMthj! ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hMthj ubjn)}(h1``struct drm_crtc_state *crtc_state`` CRTC state h](jt)}(h%``struct drm_crtc_state *crtc_state``h]jz)}(hjD h]h!struct drm_crtc_state *crtc_state}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMuhj> ubj)}(hhh]h)}(h CRTC stateh]h CRTC state}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY hMuhjZ ubah}(h]h ]h"]h$]h&]uh1jhj> ubeh}(h]h ]h"]h$]h&]uh1jmhjY hMuhj ubjn)}(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}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMvhjw ubj)}(hhh]h)}(h Plane stateh]h Plane state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMvhj ubah}(h]h ]h"]h$]h&]uh1jhjw ubeh}(h]h ]h"]h$]h&]uh1jmhj hMvhj 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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMxhjubh)}(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)}(hj h]h%drm_simple_display_pipe_funcs->enable}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMwhj ubh callback.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMwhjubh)}(h**Note**h]j%)}(hj h]hNote}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMzhjubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./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_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}(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC hhhjU hMubj)}(hmipi_dbi_pipe_disableh]j)}(hmipi_dbi_pipe_disableh]hmipi_dbi_pipe_disable}(hjh hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjC hhhjU hMubj)}(h&(struct drm_simple_display_pipe *pipe)h]j)}(h$struct drm_simple_display_pipe *pipeh](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_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%)}jjj sbc.mipi_dbi_pipe_disableasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hpipeh]hpipe}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj| ubah}(h]h ]h"]h$]h&]jjuh1jhjC hhhjU hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj? hhhjU hMubah}(h]j: ah ](jjeh"]h$]h&]jj)jhuh1jhjU hMhj< hhubj)}(hhh]h)}(hMIPI DBI pipe disable helperh]hMIPI DBI pipe disable helper}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj< hhhjU hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj# ubji)}(hhh]jn)}(h6``struct drm_simple_display_pipe *pipe`` Display pipe h](jt)}(h(``struct drm_simple_display_pipe *pipe``h]jz)}(hjH h]h$struct drm_simple_display_pipe *pipe}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjB ubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj] hMhj^ ubah}(h]h ]h"]h$]h&]uh1jhjB 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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj# ubh)}(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 }(hj hhhNhNubh)}(hP:c:type:`drm_simple_display_pipe_funcs->disable `h]jz)}(hj h]h&drm_simple_display_pipe_funcs->disable}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipe_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj ubh callback.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj# ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hmipi_dbi_pipe_begin_fb_accessh]j)}(hmipi_dbi_pipe_begin_fb_accessh]hmipi_dbi_pipe_begin_fb_access}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(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&]uh1jhj$ ubj)}(h h]h }(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ ubh)}(hhh]j)}(hdrm_simple_display_pipeh]hdrm_simple_display_pipe}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjH modnameN classnameNjj)}j]j%)}jj sbc.mipi_dbi_pipe_begin_fb_accessasbuh1hhj$ ubj)}(h h]h }(hjf hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ ubj9)}(hj9h]h*}(hjt hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj$ ubj)}(hpipeh]hpipe}(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]jb c.mipi_dbi_pipe_begin_fb_accessasbuh1hhj 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 plane_stateh]h plane_state}(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!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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3 jj3 jjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj7 ubji)}(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&]uh1jyhjZ ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjV ubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq hMhjr ubah}(h]h ]h"]h$]h&]uh1jhjV ubeh}(h]h ]h"]h$]h&]uh1jmhjq hMhjS ubjn)}(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}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj ubj)}(hhh]h)}(h Plane stateh]h 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 hMhjS ubeh}(h]h ]h"]h$]h&]uh1jhhj7 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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj7 ubh)}(hnThis function implements struct :c:type:`drm_simple_display_funcs.begin_fb_access `.h](h This function implements struct }(hj hhhNhNubh)}(hM:c:type:`drm_simple_display_funcs.begin_fb_access `h]jz)}(hj h]h(drm_simple_display_funcs.begin_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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj7 ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj7 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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj7 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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj7 ubeh}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj|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&]jjuh1jhjjhhhj|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}(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%)}jjsbc.mipi_dbi_pipe_end_fb_accessasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(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 }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdrm_plane_stateh]hdrm_plane_state}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]jc.mipi_dbi_pipe_end_fb_accessasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h plane_stateh]h plane_state}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjjhhhj|hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfhhhj|hMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhj|hMhjchhubj)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjchhhj|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%)}(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:336: ./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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display pipeh]h Display pipe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Plane stateh]h Plane state}(hj1hhhNhNubah}(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%)}(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:336: ./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 }(hjihhhNhNubh)}(hK:c:type:`drm_simple_display_funcs.end_fb_access `h]jz)}(hjsh]h&drm_simple_display_funcs.end_fb_access}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjiubh.}(hjihhhNhNubeh}(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:336: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dbi_pipe_reset_planeh]j)}(hmipi_dbi_pipe_reset_planeh]hmipi_dbi_pipe_reset_plane}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j%)}jjsbc.mipi_dbi_pipe_reset_planeasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjShhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(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)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(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%)}(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:336: ./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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display pipeh]h 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%)}(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:336: ./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 }(hjhhhNhNubh)}(hI:c:type:`drm_simple_display_funcs.reset_plane `h]jz)}(hj&h]h$drm_simple_display_funcs.reset_plane}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh for MIPI DBI planes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChMhjubeh}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj{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_stateasbuh1hhjjhhhj{hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj{hMubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjjhhhj{hMubj)}(h#mipi_dbi_pipe_duplicate_plane_stateh]j)}(hjh]h#mipi_dbi_pipe_duplicate_plane_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhj{hMubj)}(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%c.mipi_dbi_pipe_duplicate_plane_stateasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hpipeh]hpipe}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjjhhhj{hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfhhhj{hMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhj{hMhjchhubj)}(hhh]h)}(hduplicates MIPI DBI plane stateh]hduplicates MIPI DBI plane state}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjchhhj{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:336: ./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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(hhh]h)}(h Display pipeh]h 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%)}(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:336: ./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 }(hjhhhNhNubh)}(hS:c:type:`drm_simple_display_funcs.duplicate_plane_state `h]jz)}(hjh]h.drm_simple_display_funcs.duplicate_plane_state}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh for MIPI DBI planes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hMhjubh)}(hBSee drm_gem_duplicate_shadow_plane_state() for additional details.h]hBSee drm_gem_duplicate_shadow_plane_state() for additional details.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.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:336: ./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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]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.mipi_dbi_pipe_destroy_plane_stateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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}(hj2hhhNhNubah}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j#c.mipi_dbi_pipe_destroy_plane_stateasbuh1hhj.ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hj|hhhNhNubah}(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&]jjjuh1jjjhj{hhhjhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjxhhubj)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./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:336: ./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)}(hj-h]h#struct drm_plane_state *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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj'ubj)}(hhh]h)}(h Plane stateh]h Plane state}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMhjubeh}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubeh}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMOubj)}(hmipi_dbi_dev_init_with_formatsh]j)}(hmipi_dbi_dev_init_with_formatsh]hmipi_dbi_dev_init_with_formats}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMOubj)}(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}(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_dev_init_with_formatsasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdbidevh]hdbidev}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h1const struct drm_simple_display_pipe_funcs *funcsh](j)}(hjch]hconst}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(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]j3 c.mipi_dbi_dev_init_with_formatsasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjgubj)}(hfuncsh]hfuncs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst uint32_t *formatsh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(huint32_th]huint32_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j3 c.mipi_dbi_dev_init_with_formatsasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hformatsh]hformats}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int format_counth](j)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h format_counth]h format_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(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]j3 c.mipi_dbi_dev_init_with_formatsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int rotationh](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)}(hrotationh]hrotation}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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]j3 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMOubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMOubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMOhjhhubj)}(hhh]h)}(h2MIPI DBI device initialization with custom formatsh]h2MIPI DBI device initialization with custom formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMOubeh}(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 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%)}(hjh]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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMShjubji)}(hhh](jn)}(hH``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure to initialize h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hj-h]hstruct mipi_dbi_dev *dbidev}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMPhj'ubj)}(hhh]h)}(h'MIPI DBI device structure to initializeh]h'MIPI DBI device structure to initialize}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMPhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhjBhMPhj$ubjn)}(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)}(hjfh]h1const struct drm_simple_display_pipe_funcs *funcs}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMQhj`ubj)}(hhh]h)}(hDisplay pipe functionsh]hDisplay pipe functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMQhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hMQhj$ubjn)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMRhjubj)}(hhh]h)}(h,Array of supported formats (DRM_FORMAT\_\*).h]h,Array of supported formats (DRM_FORMAT_*).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMRhj$ubjn)}(h@``unsigned int format_count`` Number of elements in **formats** h](jt)}(h``unsigned int format_count``h]jz)}(hjh]hunsigned int format_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMShjubj)}(hhh]h)}(h!Number of elements in **formats**h](hNumber of elements in }(hjhhhNhNubj%)}(h **formats**h]hformats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMShj$ubjn)}(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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMThjubj)}(hhh]h)}(h Display modeh]h Display mode}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMThj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hMThj$ubjn)}(hI``unsigned int rotation`` Initial rotation in degrees Counter Clock Wise h](jt)}(h``unsigned int rotation``h]jz)}(hjXh]hunsigned int rotation}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMUhjRubj)}(hhh]h)}(h.Initial rotation in degrees Counter Clock Wiseh]h.Initial rotation in degrees Counter Clock Wise}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMUhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhMUhj$ubjn)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMVhjubj)}(hhh]h)}(h(Allocate a transmit buffer of this size.h]h(Allocate a transmit buffer of this size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMVhj$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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMXhjubh)}(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 }(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMWhjubh with a }(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_connectoruh1hhj hMWhjubh that has one fixed }(hjhhhNhNubh)}(h:c:type:`drm_display_mode`h]jz)}(hj3h]hdrm_display_mode}(hj5hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_modeuh1hhj hMWhjubh which is rotated according to }(hjhhhNhNubj%)}(h **rotation**h]hrotation}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhK. This mode is used to set the mode config min/max width/height properties.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMWhjubh)}(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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM[hjubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM]hjubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMahjubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMbhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dbi_dev_inith]j)}(hmipi_dbi_dev_inith]hmipi_dbi_dev_init}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(h mipi_dbi_devh]h mipi_dbi_dev}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j%)}jj sbc.mipi_dbi_dev_initasbuh1hhj"ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"ubj)}(hdbidevh]hdbidev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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_initasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(h#const struct drm_display_mode *modeh](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)}(hdrm_display_modeh]hdrm_display_mode}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j`c.mipi_dbi_dev_initasbuh1hhjubj)}(h h]h }(hjzhhhNhNubah}(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&]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)}(hrotationh]hrotation}(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)}(hMIPI DBI device initializationh]hMIPI DBI device initialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,ubji)}(hhh](jn)}(hH``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure to initialize h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjQh]hstruct mipi_dbi_dev *dbidev}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjKubj)}(hhh]h)}(h'MIPI DBI device structure to initializeh]h'MIPI DBI device structure to initialize}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhMhjHubjn)}(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:336: ./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&]uh1jmhjhMhjHubjn)}(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&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.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&]uh1jmhjhMhjHubjn)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjubj)}(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 hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjHubeh}(h]h ]h"]h$]h&]uh1jhhj,ubh)}(h**Description**h]j%)}(hj7 h]h Description}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5 ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,ubh)}(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 }(hjM hhhNhNubh)}(h!:c:type:`drm_simple_display_pipe`h]jz)}(hjW h]hdrm_simple_display_pipe}(hjY hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjU ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipeuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjM ubh with a }(hjM hhhNhNubh)}(h:c:type:`drm_connector`h]jz)}(hj{ h]h drm_connector}(hj} hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjy ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_connectoruh1hhjt hMhjM ubh that has one fixed }(hjM 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_modeuh1hhjt hMhjM ubh which is rotated according to }(hjM hhhNhNubj%)}(h **rotation**h]hrotation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjM ubhY. This mode is used to set the mode config min/max width/height properties. Additionally }(hjM hhhNhNubh)}(h$:c:type:`mipi_dbi.tx_buf `h]jz)}(hj h]hmipi_dbi.tx_buf}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dbiuh1hhjt hMhjM ubh is allocated.}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjt hMhj,ubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,ubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hj!!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,ubeh}(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}(hjP!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL!hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj_!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL!hhhj^!hMubj)}(hmipi_dbi_hw_reseth]j)}(hmipi_dbi_hw_reseth]hmipi_dbi_hw_reset}(hjq!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjL!hhhj^!hMubj)}(h(struct mipi_dbi *dbi)h]j)}(hstruct mipi_dbi *dbih](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_dbih]hmipi_dbi}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j%)}jjs!sbc.mipi_dbi_hw_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)}(hdbih]hdbi}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubah}(h]h ]h"]h$]h&]jjuh1jhjL!hhhj^!hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjH!hhhj^!hMubah}(h]jC!ah ](jjeh"]h$]h&]jj)jhuh1jhj^!hMhjE!hhubj)}(hhh]h)}(hHardware reset of controllerh]hHardware reset of controller}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj "hhubah}(h]h ]h"]h$]h&]uh1jhjE!hhhj^!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj("jj("jjjuh1jhhhjhNhNubj)}(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%)}(hj2"h]h Parameters}(hj4"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0"ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,"ubji)}(hhh]jn)}(h,``struct mipi_dbi *dbi`` MIPI DBI structure h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hjQ"h]hstruct mipi_dbi *dbi}(hjS"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO"ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjK"ubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI structure}(hjj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf"hMhjg"ubah}(h]h ]h"]h$]h&]uh1jhjK"ubeh}(h]h ]h"]h$]h&]uh1jmhjf"hMhjH"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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,"ubh)}(hIReset controller if the :c:type:`mipi_dbi->reset ` gpio is set.h](hReset controller if the }(hj"hhhNhNubh)}(h$:c:type:`mipi_dbi->reset `h]jz)}(hj"h]hmipi_dbi->reset}(hj"hhhNhNubah}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj"ubh gpio is set.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hMhj,"ubeh}(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}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj#hMubj)}(hmipi_dbi_display_is_onh]j)}(hmipi_dbi_display_is_onh]hmipi_dbi_display_is_on}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj#hMubj)}(h(struct mipi_dbi *dbi)h]j)}(hstruct mipi_dbi *dbih](j)}(hjh]hstruct}(hj0#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,#ubj)}(h h]h }(hj=#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,#ubh)}(hhh]j)}(hmipi_dbih]hmipi_dbi}(hjN#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjP#modnameN classnameNjj)}j]j%)}jj#sbc.mipi_dbi_display_is_onasbuh1hhj,#ubj)}(h h]h }(hjn#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,#ubj9)}(hj9h]h*}(hj|#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,#ubj)}(hdbih]hdbi}(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)}(hCheck if display is onh]hCheck if display is on}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj#hMubeh}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#ubji)}(hhh]jn)}(h,``struct mipi_dbi *dbi`` MIPI DBI structure h](jt)}(h``struct mipi_dbi *dbi``h]jz)}(hj#h]hstruct mipi_dbi *dbi}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#ubj)}(hhh]h)}(hMIPI DBI structureh]hMIPI DBI 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#ubah}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#ubh)}(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.}(hjE$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#ubh)}(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.}(hjl$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj#ubeh}(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}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM&ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hM&ubj)}(hmipi_dbi_poweron_reseth]j)}(hmipi_dbi_poweron_reseth]hmipi_dbi_poweron_reset}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj$hM&ubj)}(h(struct mipi_dbi_dev *dbidev)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}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j%)}jj$sbc.mipi_dbi_poweron_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)}(hdbidevh]hdbidev}(hj1%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)}(hMIPI DBI poweron and reseth]hMIPI DBI poweron and reset}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM&hjX%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjs%jjs%jjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM*hjw%ubji)}(hhh]jn)}(h:``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hj%h]hstruct mipi_dbi_dev *dbidev}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM'hj%ubj)}(hhh]h)}(hMIPI DBI device structureh]hMIPI DBI device structure}(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&]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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM)hjw%ubh)}(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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM(hjw%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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM+hjw%ubh)}(h*Zero on success, or a negative error code.h]h*Zero on success, or a negative error code.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM,hjw%ubeh}(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}(hjC&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?&hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM6ubj)}(h h]h }(hjR&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?&hhhjQ&hM6ubj)}(h"mipi_dbi_poweron_conditional_reseth]j)}(h"mipi_dbi_poweron_conditional_reseth]h"mipi_dbi_poweron_conditional_reset}(hjd&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?&hhhjQ&hM6ubj)}(h(struct mipi_dbi_dev *dbidev)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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j%)}jjf&sb$c.mipi_dbi_poweron_conditional_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)}(hdbidevh]hdbidev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjx&ubah }(h]h ]h"]h$]h&]jjuh1jhj?&hhhjQ&hM6ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj;&hhhjQ&hM6ubah}(h]j6&ah ](jjeh"]h$]h&]jj)jhuh1jhjQ&hM6hj8&hhubj)}(hhh]h)}(h&MIPI DBI poweron and conditional reseth]h&MIPI DBI poweron and conditional reset}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM6hj'hhubah}(h]h ]h"]h$]h&]uh1jhj8&hhhjQ&hM6ubeh}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM:hj'ubji)}(hhh]jn)}(h:``struct mipi_dbi_dev *dbidev`` MIPI DBI device structure h](jt)}(h``struct mipi_dbi_dev *dbidev``h]jz)}(hjD'h]hstruct mipi_dbi_dev *dbidev}(hjF'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjB'ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM7hj>'ubj)}(hhh]h)}(hMIPI DBI device structureh]hMIPI DBI device structure}(hj]'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY'hM7hjZ'ubah}(h]h ]h"]h$]h&]uh1jhj>'ubeh}(h]h ]h"]h$]h&]uh1jmhjY'hM7hj;'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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM9hj'ubh)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM8hj'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:336: ./drivers/gpu/drm/drm_mipi_dbi.chM<hj'ubh)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM=hj'ubeh}(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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j%)}jmipi_dbi_spi_cmd_max_speedsbc.mipi_dbi_spi_cmd_max_speedasbuh1hhj'hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMJubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj(hMJubj)}(hmipi_dbi_spi_cmd_max_speedh]j)}(hj (h]hmipi_dbi_spi_cmd_max_speed}(hj"(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj(hMJubj)}(h$(struct spi_device *spi, size_t len)h](j)}(hstruct spi_device *spih](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)}(h spi_deviceh]h spi_device}(hj[(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj](modnameN classnameNjj)}j]j (c.mipi_dbi_spi_cmd_max_speedasbuh1hhj9(ubj)}(h h]h }(hjy(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9(ubj9)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9(ubj)}(hspih]hspi}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5(ubj)}(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]j (c.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&]noemphjjuh1jhj5(ubeh}(h]h ]h"]h$]h&]jjuh1jhj'hhhj(hMJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj'hhhj(hMJubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhj(hMJhj'hhubj)}(hhh]h)}(hget the maximum SPI bus speedh]hget the maximum SPI bus speed}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMJhj)hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj(hMJubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjhNhNubj)}(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%)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMNhj")ubji)}(hhh](jn)}(h&``struct spi_device *spi`` SPI device h](jt)}(h``struct spi_device *spi``h]jz)}(hjG)h]hstruct spi_device *spi}(hjI)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE)ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMKhjA)ubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hj`)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\)hMKhj])ubah}(h]h ]h"]h$]h&]uh1jhjA)ubeh}(h]h ]h"]h$]h&]uh1jmhj\)hMKhj>)ubjn)}(h+``size_t len`` The transfer 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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMLhjz)ubj)}(hhh]h)}(hThe transfer buffer length.h]hThe transfer buffer length.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMLhj)ubah}(h]h ]h"]h$]h&]uh1jhjz)ubeh}(h]h ]h"]h$]h&]uh1jmhj)hMLhj>)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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMNhj")ubh)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMMhj")ubeh}(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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj*hMubj)}(hmipi_dbi_spi_inith]j)}(hmipi_dbi_spi_inith]hmipi_dbi_spi_init}(hj!*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj*hMubj)}(hD(struct spi_device *spi, struct mipi_dbi *dbi, struct gpio_desc *dc)h](j)}(hstruct spi_device *spih](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)}(h spi_deviceh]h spi_device}(hj[*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]*modnameN classnameNjj)}j]j%)}jj#*sbc.mipi_dbi_spi_initasbuh1hhj9*ubj)}(h h]h }(hj{*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9*ubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9*ubj)}(hspih]hspi}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5*ubj)}(hstruct mipi_dbi *dbih](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_dbih]hmipi_dbi}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]jw*c.mipi_dbi_spi_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)}(hdbih]hdbi}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5*ubj)}(hstruct gpio_desc *dch](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 gpio_desch]h gpio_desc}(hj=+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?+modnameN classnameNjj)}j]jw*c.mipi_dbi_spi_initasbuh1hhj+ubj)}(h h]h }(hj[+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hji+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hdch]hdc}(hjv+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(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)}(h!Initialize MIPI DBI SPI interfaceh]h!Initialize MIPI DBI SPI interface}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjhNhNubj)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubji)}(hhh](jn)}(h&``struct spi_device *spi`` SPI device h](jt)}(h``struct spi_device *spi``h]jz)}(hj+h]hstruct spi_device *spi}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubj)}(hhh]h)}(h SPI deviceh]h SPI 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)}(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&]uh1jyhj,ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,ubj)}(hhh]h)}(h MIPI DBI structure to initializeh]h MIPI DBI structure to initialize}(hj3,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/,hMhj0,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhj/,hMhj+ubjn)}(h-``struct gpio_desc *dc`` D/C gpio (optional) h](jt)}(h``struct gpio_desc *dc``h]jz)}(hjS,h]hstruct gpio_desc *dc}(hjU,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQ,ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjM,ubj)}(hhh]h)}(hD/C gpio (optional)h]hD/C gpio (optional)}(hjl,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh,hMhji,ubah}(h]h ]h"]h$]h&]uh1jhjM,ubeh}(h]h ]h"]h$]h&]uh1jmhjh,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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubh)}(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 }(hj,hhhNhNubh)}(h&:c:type:`mipi_dbi->command `h]jz)}(hj,h]hmipi_dbi->command}(hj,hhhNhNubah}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj,ubh , enables }(hj,hhhNhNubh)}(h,:c:type:`mipi_dbi->read_commands `h]jz)}(hj,h]hmipi_dbi->read_commands}(hj,hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjmipi_dbiuh1hhj,hMhj,ubho for the usual read commands. It should be followed by a call to mipi_dbi_dev_init() or a driver-specific init.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hMhj+ubh)}(hQIf **dc** is set, a Type C Option 3 interface is assumed, if not Type C Option 1.h](hIf }(hj,hhhNhNubj%)}(h**dc**h]hdc}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubhH is set, a Type C Option 3 interface is assumed, if not Type C Option 1.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubh)}(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}(hj"-hhhNhNubah}(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}(hj4-hhhNhNubah}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubh)}(h"This is how endianness is handled:h]h"This is how endianness is handled:}(hjM-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubji)}(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}(hjc-hhhNhNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj_-ubj)}(hhh]h)}(hbyteswapped before transfer.h]hbyteswapped before transfer.}(hju-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq-hMhjr-ubah}(h]h ]h"]h$]h&]uh1jhj_-ubeh}(h]h ]h"]h$]h&]uh1jmhjq-hMhj\-ubjn)}(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}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj-ubj)}(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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhj-hMhj\-ubeh}(h]h ]h"]h$]h&]uh1jhhj+ubh)}(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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubh)}(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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.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:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj+ubeh}(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}(hj=.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9.hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM(ubj)}(h h]h }(hjL.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9.hhhjK.hM(ubj)}(hmipi_dbi_spi_transferh]j)}(hmipi_dbi_spi_transferh]hmipi_dbi_spi_transfer}(hj^.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9.hhhjK.hM(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}(hjz.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv.ubh)}(hhh]j)}(h spi_deviceh]h spi_device}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j%)}jj`.sbc.mipi_dbi_spi_transferasbuh1hhjv.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv.ubj9)}(hj9h]h*}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjv.ubj)}(hspih]hspi}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr.ubj)}(h u32 speed_hzh](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.mipi_dbi_spi_transferasbuh1hhj.ubj)}(h h]h }(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hspeed_hzh]hspeed_hz}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr.ubj)}(hu8 bpwh](h)}(hhh]j)}(hu8h]hu8}(hj7/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9/modnameN classnameNjj)}j]j.c.mipi_dbi_spi_transferasbuh1hhj0/ubj)}(h h]h }(hjU/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0/ubj)}(hbpwh]hbpw}(hjc/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr.ubj)}(hconst void *bufh](j)}(hjch]hconst}(hj|/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx/ubj)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx/ubj9)}(hj9h]h*}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjx/ubj)}(hbufh]hbuf}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr.ubj)}(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]j.c.mipi_dbi_spi_transferasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hlenh]hlen}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr.ubeh}(h]h ]h"]h$]h&]jjuh1jhj9.hhhjK.hM(ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5.hhhjK.hM(ubah}(h]j0.ah ](jjeh"]h$]h&]jj)jhuh1jhjK.hM(hj2.hhubj)}(hhh]h)}(hSPI transfer helperh]hSPI transfer helper}(hj20hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM(hj/0hhubah}(h]h ]h"]h$]h&]uh1jhj2.hhhjK.hM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJ0jjJ0jjjuh1jhhhjhNhNubj)}(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%)}(hjT0h]h Parameters}(hjV0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjR0ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM,hjN0ubji)}(hhh](jn)}(h&``struct spi_device *spi`` SPI device h](jt)}(h``struct spi_device *spi``h]jz)}(hjs0h]hstruct spi_device *spi}(hju0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjq0ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM)hjm0ubj)}(hhh]h)}(h SPI deviceh]h SPI device}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM)hj0ubah}(h]h ]h"]h$]h&]uh1jhjm0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hM)hjj0ubjn)}(h+``u32 speed_hz`` Override speed (optional) h](jt)}(h``u32 speed_hz``h]jz)}(hj0h]h u32 speed_hz}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM*hj0ubj)}(hhh]h)}(hOverride speed (optional)h]hOverride speed (optional)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM*hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hM*hjj0ubjn)}(h``u8 bpw`` Bits per word h](jt)}(h ``u8 bpw``h]jz)}(hj0h]hu8 bpw}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM+hj0ubj)}(hhh]h)}(h Bits per wordh]h Bits per word}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM+hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hM+hjj0ubjn)}(h'``const void *buf`` Buffer to transfer h](jt)}(h``const void *buf``h]jz)}(hj1h]hconst void *buf}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM,hj1ubj)}(hhh]h)}(hBuffer to transferh]hBuffer to transfer}(hj71hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj31hM,hj41ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj31hM,hjj0ubjn)}(h``size_t len`` Buffer length h](jt)}(h``size_t len``h]jz)}(hjW1h]h size_t len}(hjY1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU1ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM-hjQ1ubj)}(hhh]h)}(h Buffer lengthh]h Buffer length}(hjp1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl1hM-hjm1ubah}(h]h ]h"]h$]h&]uh1jhjQ1ubeh}(h]h ]h"]h$]h&]uh1jmhjl1hM-hjj0ubeh}(h]h ]h"]h$]h&]uh1jhhjN0ubh)}(h**Description**h]j%)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM/hjN0ubh)}(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 }(hj1hhhNhNubj%)}(h**buf**h]hbuf}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubhf into chunks which the SPI controller driver can handle. The SPI bus must be locked when calling this.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM.hjN0ubh)}(h **Return**h]j%)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM2hjN0ubh)}(h0Zero on success, negative error code on failure.h]h0Zero on success, negative error code on failure.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chM3hjN0ubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 2hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 2hhhj2hMubj)}(hmipi_dbi_debugfs_inith]j)}(hmipi_dbi_debugfs_inith]hmipi_dbi_debugfs_init}(hj12hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj 2hhhj2hMubj)}(h(struct drm_minor *minor)h]j)}(hstruct drm_minor *minorh](j)}(hjh]hstruct}(hjM2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI2ubj)}(h h]h }(hjZ2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI2ubh)}(hhh]j)}(h drm_minorh]h drm_minor}(hjk2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm2modnameN classnameNjj)}j]j%)}jj32sbc.mipi_dbi_debugfs_initasbuh1hhjI2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI2ubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjI2ubj)}(hminorh]hminor}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjE2ubah}(h]h ]h"]h$]h&]jjuh1jhj 2hhhj2hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj2hhhj2hMubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1jhj2hMhj2hhubj)}(hhh]h)}(hCreate debugfs entriesh]hCreate debugfs entries}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhjhNhNubj)}(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%)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj2ubji)}(hhh]jn)}(h&``struct drm_minor *minor`` DRM minor h](jt)}(h``struct drm_minor *minor``h]jz)}(hj3h]hstruct drm_minor *minor}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj 3ubj)}(hhh]h)}(h DRM minorh]h DRM minor}(hj*3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&3hMhj'3ubah}(h]h ]h"]h$]h&]uh1jhj 3ubeh}(h]h ]h"]h$]h&]uh1jmhj&3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhhj2ubh)}(h**Description**h]j%)}(hjL3h]h Description}(hjN3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJ3ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhj2ubh)}(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 }(hjb3hhhNhNubh)}(h/:c:type:`drm_driver->debugfs_init `h]jz)}(hjl3h]hdrm_driver->debugfs_init}(hjn3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj drm_driveruh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:336: ./drivers/gpu/drm/drm_mipi_dbi.chMhjb3ubh callback.}(hjb3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]#mipi-dbi-helper-functions-referenceah ]h"]#mipi dbi helper functions referenceah$]h&]uh1hhhhhhhhMHubh)}(hhh](h)}(h#MIPI DSI Helper Functions Referenceh]h#MIPI DSI Helper Functions Reference}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hhhhhMTubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./drivers/gpu/drm/drm_mipi_dsi.chK-hj3hhubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:342: ./drivers/gpu/drm/drm_mipi_dsi.chK0hj3hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_msg (C struct)c.mipi_dsi_msghNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h mipi_dsi_msgh]j)}(hstruct mipi_dsi_msgh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hKubj)}(h mipi_dsi_msgh]j)}(hj3h]h mipi_dsi_msg}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhj3hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj3hhhj3hKubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jhj3hKhj3hhubj)}(hhh]h)}(hread/write DSI bufferh]hread/write DSI buffer}(hj-4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj*4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hKubeh}(h]h ](jstructeh"]h$]h&]jjjjE4jjE4jjjuh1jhhhj3hNhNubj)}(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}(hjQ4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjM4ubh:}(hjM4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhjI4ubj@)}(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; };}hjj4sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhjI4ubh)}(h **Members**h]j%)}(hj{4h]hMembers}(hj}4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjy4ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK)hjI4ubji)}(hhh](jn)}(h``channel`` virtual channel id h](jt)}(h ``channel``h]jz)}(hj4h]hchannel}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj4ubj)}(hhh]h)}(hvirtual channel idh]hvirtual channel id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhj4hKhj4ubjn)}(h``type`` payload data type h](jt)}(h``type``h]jz)}(hj4h]htype}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj4ubj)}(hhh]h)}(hpayload data typeh]hpayload data type}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhj4hKhj4ubjn)}(h6``flags`` flags controlling this message transmission h](jt)}(h ``flags``h]jz)}(hj 5h]hflags}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 5ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj5ubj)}(hhh]h)}(h+flags controlling this message transmissionh]h+flags controlling this message transmission}(hj%5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!5hKhj"5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj!5hKhj4ubjn)}(h ``tx_len`` length of **tx_buf** h](jt)}(h ``tx_len``h]jz)}(hjE5h]htx_len}(hjG5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC5ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj?5ubj)}(hhh]h)}(hlength of **tx_buf**h](h length of }(hj^5hhhNhNubj%)}(h **tx_buf**h]htx_buf}(hjf5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^5ubeh}(h]h ]h"]h$]h&]uh1hhjZ5hKhj[5ubah}(h]h ]h"]h$]h&]uh1jhj?5ubeh}(h]h ]h"]h$]h&]uh1jmhjZ5hKhj4ubjn)}(h``tx_buf`` data to be written h](jt)}(h ``tx_buf``h]jz)}(hj5h]htx_buf}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj5ubj)}(hhh]h)}(hdata to be writtenh]hdata to be written}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hKhj4ubjn)}(h ``rx_len`` length of **rx_buf** h](jt)}(h ``rx_len``h]jz)}(hj5h]hrx_len}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK hj5ubj)}(hhh]h)}(hlength of **rx_buf**h](h length of }(hj5hhhNhNubj%)}(h **rx_buf**h]hrx_buf}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]uh1hhj5hK hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hK hj4ubjn)}(h#``rx_buf`` data to be read, or NULLh](jt)}(h ``rx_buf``h]jz)}(hj 6h]hrx_buf}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj 6ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK hj6ubj)}(hhh]h)}(hdata to be read, or NULLh]hdata to be read, or NULL}(hj%6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK!hj"6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhj!6hK hj4ubeh}(h]h ]h"]h$]h&]uh1jhhjI4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_packet (C struct)c.mipi_dsi_packethNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_packeth]j)}(hstruct mipi_dsi_packeth](j)}(hjh]hstruct}(hjf6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb6hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK'ubj)}(h h]h }(hjt6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb6hhhjs6hK'ubj)}(hmipi_dsi_packeth]j)}(hj`6h]hmipi_dsi_packet}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjb6hhhjs6hK'ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^6hhhjs6hK'ubah}(h]jY6ah ](jjeh"]h$]h&]jj)jhuh1jhjs6hK'hj[6hhubj)}(hhh]h)}(h/represents a MIPI DSI packet in protocol formath]h/represents a MIPI DSI packet in protocol format}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK2hj6hhubah}(h]h ]h"]h$]h&]uh1jhj[6hhhjs6hK'ubeh}(h]h ](jstructeh"]h$]h&]jjjj6jj6jjjuh1jhhhj3hNhNubj)}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubh:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK6hj6ubj@)}(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; };}hj6sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK8hj6ubh)}(h **Members**h]j%)}(hj6h]hMembers}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK?hj6ubji)}(hhh](jn)}(h'``size`` size (in bytes) of the packet h](jt)}(h``size``h]jz)}(hj7h]hsize}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK4hj7ubj)}(hhh]h)}(hsize (in bytes) of the packeth]hsize (in bytes) of the packet}(hj.7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*7hK4hj+7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj*7hK4hj 7ubjn)}(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)}(hjN7h]hheader}(hjP7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjL7ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK6hjH7ubj)}(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)}(hjg7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK5hjd7ubah}(h]h ]h"]h$]h&]uh1jhjH7ubeh}(h]h ]h"]h$]h&]uh1jmhjc7hK6hj 7ubjn)}(h2``payload_length`` number of bytes in the payload h](jt)}(h``payload_length``h]jz)}(hj7h]hpayload_length}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK7hj7ubj)}(hhh]h)}(hnumber of bytes in the payloadh]hnumber of bytes in the payload}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hK7hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hK7hj 7ubjn)}(h@``payload`` a pointer to a buffer containing the payload, if anyh](jt)}(h ``payload``h]jz)}(hj7h]hpayload}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK7hj7ubj)}(hhh]h)}(h4a pointer to a buffer containing the payload, if anyh]h4a pointer to a buffer containing the payload, if any}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK8hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hK7hj 7ubeh}(h]h ]h"]h$]h&]uh1jhhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_host_ops (C struct)c.mipi_dsi_host_opshNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_host_opsh]j)}(hstruct mipi_dsi_host_opsh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK>ubj)}(h h]h }(hj)8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj(8hK>ubj)}(hmipi_dsi_host_opsh]j)}(hj8h]hmipi_dsi_host_ops}(hj;8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj78ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj(8hK>ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj(8hK>ubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj(8hK>hj8hhubj)}(hhh]h)}(hDSI bus operationsh]hDSI bus operations}(hj]8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKDhjZ8hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj(8hK>ubeh}(h]h ](jstructeh"]h$]h&]jjjju8jju8jjjuh1jhhhj3hNhNubj)}(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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}8ubh:}(hj}8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKHhjy8ubj@)}(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); };}hj8sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKJhjy8ubh)}(h **Members**h]j%)}(hj8h]hMembers}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKPhjy8ubji)}(hhh](jn)}(h)``attach`` attach DSI device to DSI host h](jt)}(h ``attach``h]jz)}(hj8h]hattach}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKFhj8ubj)}(hhh]h)}(hattach DSI device to DSI hosth]hattach DSI device to DSI host}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKFhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj8hKFhj8ubjn)}(h+``detach`` detach DSI device from DSI host h](jt)}(h ``detach``h]jz)}(hj9h]hdetach}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKGhj8ubj)}(hhh]h)}(hdetach DSI device from DSI hosth]hdetach DSI device from DSI host}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hKGhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj9hKGhj8ubjn)}(h"``transfer`` transmit a DSI packeth](jt)}(h ``transfer``h]jz)}(hj<9h]htransfer}(hj>9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj:9ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKGhj69ubj)}(hhh]h)}(htransmit a DSI packeth]htransmit a DSI packet}(hjU9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKHhjR9ubah}(h]h ]h"]h$]h&]uh1jhj69ubeh}(h]h ]h"]h$]h&]uh1jmhjQ9hKGhj8ubeh}(h]h ]h"]h$]h&]uh1jhhjy8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubh)}(h**Description**h]j%)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}9ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKKhj3hhubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKHhj3hhubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKPhj3hhubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKThj3hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_host (C struct)c.mipi_dsi_hosthNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h mipi_dsi_hosth]j)}(hstruct mipi_dsi_hosth](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhK\ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hK\ubj)}(h mipi_dsi_hosth]j)}(hj9h]h mipi_dsi_host}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhj9hK\ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhj9hK\ubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhj9hK\hj9hhubj)}(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:345: ./include/drm/drm_mipi_dsi.hhKdhj:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj9hK\ubeh}(h]h ](jstructeh"]h$]h&]jjjj5:jj5:jjjuh1jhhhj3hNhNubj)}(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}(hjA: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:345: ./include/drm/drm_mipi_dsi.hhKhhj9:ubj@)}(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; };}hjZ:sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKjhj9:ubh)}(h **Members**h]j%)}(hjk:h]hMembers}(hjm:hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hji:ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKphj9:ubji)}(hhh](jn)}(h3``dev`` driver model device node for this DSI host 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:345: ./include/drm/drm_mipi_dsi.hhKfhj:ubj)}(hhh]h)}(h*driver model device node for this DSI hosth]h*driver model device node for this DSI host}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKfhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj:hKfhj:ubjn)}(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:345: ./include/drm/drm_mipi_dsi.hhKghj:ubj)}(hhh]h)}(hDSI host operationsh]hDSI host operations}(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)}(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:345: ./include/drm/drm_mipi_dsi.hhKghj:ubj)}(hhh]h)}(hlist managementh]hlist management}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKghj:ubeh}(h]h ]h"]h$]h&]uh1jhhj9:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_device_info (C struct)c.mipi_dsi_device_infohNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_device_infoh]j)}(hstruct mipi_dsi_device_infoh](j)}(hjh]hstruct}(hjV;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR;hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKnubj)}(h h]h }(hjd;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR;hhhjc;hKnubj)}(hmipi_dsi_device_infoh]j)}(hjP;h]hmipi_dsi_device_info}(hjv;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjR;hhhjc;hKnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjN;hhhjc;hKnubah}(h]jI;ah ](jjeh"]h$]h&]jj)jhuh1jhjc;hKnhjK;hhubj)}(hhh]h)}(h'template for creating a mipi_dsi_deviceh]h'template for creating a mipi_dsi_device}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj;hhubah}(h]h ]h"]h$]h&]uh1jhjK;hhhjc;hKnubeh}(h]h ](jstructeh"]h$]h&]jjjj;jj;jjjuh1jhhhj3hNhNubj)}(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}(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:345: ./include/drm/drm_mipi_dsi.hhKhj;ubj@)}(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; };}hj;sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj;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:345: ./include/drm/drm_mipi_dsi.hhKhj;ubji)}(hhh](jn)}(h"``type`` DSI peripheral chip type 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:345: ./include/drm/drm_mipi_dsi.hhKhj;ubj)}(hhh]h)}(hDSI peripheral chip typeh]hDSI peripheral chip type}(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``channel`` DSI virtual channel assigned to peripheral h](jt)}(h ``channel``h]jz)}(hj><h]hchannel}(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:345: ./include/drm/drm_mipi_dsi.hhKhj8<ubj)}(hhh]h)}(h*DSI virtual channel assigned to peripheralh]h*DSI virtual channel assigned to peripheral}(hjW<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS<hKhjT<ubah}(h]h ]h"]h$]h&]uh1jhj8<ubeh}(h]h ]h"]h$]h&]uh1jmhjS<hKhj;ubjn)}(h*``node`` pointer to OF device node or NULLh](jt)}(h``node``h]jz)}(hjw<h]hnode}(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:345: ./include/drm/drm_mipi_dsi.hhKhjq<ubj)}(hhh]h)}(h!pointer to OF device node or NULLh]h!pointer to OF device node or NULL}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj<ubah}(h]h ]h"]h$]h&]uh1jhjq<ubeh}(h]h ]h"]h$]h&]uh1jmhj<hKhj;ubeh}(h]h ]h"]h$]h&]uh1jhhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubh)}(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:345: ./include/drm/drm_mipi_dsi.hhKhj3hhubh)}(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}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj3hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_device (C struct)c.mipi_dsi_devicehNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_deviceh]j)}(hstruct mipi_dsi_deviceh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj=hKubj)}(hmipi_dsi_deviceh]j)}(hj<h]hmipi_dsi_device}(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)}(hDSI peripheral deviceh]hDSI peripheral device}(hj:=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj7=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj=hKubeh}(h]h ](jstructeh"]h$]h&]jjjjR=jjR=jjjuh1jhhhj3hNhNubj)}(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}(hj^=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZ=ubh:}(hjZ=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhjV=ubj@)}(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; };}hjw=sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhjV=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:345: ./include/drm/drm_mipi_dsi.hhKhjV=ubji)}(hhh](jn)}(h&``host`` DSI host for this peripheral h](jt)}(h``host``h]jz)}(hj=h]hhost}(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:345: ./include/drm/drm_mipi_dsi.hhKhj=ubj)}(hhh]h)}(hDSI host for this peripheralh]hDSI host for this peripheral}(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)}(h5``dev`` driver model device node for this peripheral 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:345: ./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}(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;``attached`` the DSI device has been successfully attached h](jt)}(h ``attached``h]jz)}(hj>h]hattached}(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:345: ./include/drm/drm_mipi_dsi.hhKhj>ubj)}(hhh]h)}(h-the DSI device has been successfully attachedh]h-the DSI device has been successfully attached}(hj2>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"``name`` DSI peripheral chip type h](jt)}(h``name``h]jz)}(hjR>h]hname}(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:345: ./include/drm/drm_mipi_dsi.hhKhjL>ubj)}(hhh]h)}(hDSI peripheral chip typeh]hDSI peripheral chip type}(hjk>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg>hKhjh>ubah}(h]h ]h"]h$]h&]uh1jhjL>ubeh}(h]h ]h"]h$]h&]uh1jmhjg>hKhj=ubjn)}(h7``channel`` virtual channel assigned to the peripheral h](jt)}(h ``channel``h]jz)}(hj>h]hchannel}(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:345: ./include/drm/drm_mipi_dsi.hhKhj>ubj)}(hhh]h)}(h*virtual channel assigned to the peripheralh]h*virtual channel assigned to the peripheral}(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&``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:345: ./include/drm/drm_mipi_dsi.hhKhj>ubj)}(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&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhj>hKhj=ubjn)}(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:345: ./include/drm/drm_mipi_dsi.hhKhj>ubj)}(hhh]h)}(hpixel format for video modeh]hpixel format for video mode}(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)}(h0``mode_flags`` DSI operation mode related flags h](jt)}(h``mode_flags``h]jz)}(hj6?h]h mode_flags}(hj8?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4?ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj0?ubj)}(hhh]h)}(h DSI operation mode related flagsh]h DSI operation mode related flags}(hjO?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK?hKhjL?ubah}(h]h ]h"]h$]h&]uh1jhj0?ubeh}(h]h ]h"]h$]h&]uh1jmhjK?hKhj=ubjn)}(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)}(hjo?h]hhs_rate}(hjq?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjm?ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhji?ubj)}(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}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj?ubah}(h]h ]h"]h$]h&]uh1jhji?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhj=ubjn)}(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&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj?ubj)}(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:345: ./include/drm/drm_mipi_dsi.hhKhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhj=ubjn)}(h/``dsc`` panel/bridge DSC pps payload to be senth](jt)}(h``dsc``h]jz)}(hj?h]hdsc}(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:345: ./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:345: ./include/drm/drm_mipi_dsi.hhKhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhj?hKhj=ubeh}(h]h ]h"]h$]h&]uh1jhhjV=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!mipi_dsi_multi_context (C struct)c.mipi_dsi_multi_contexthNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_multi_contexth]j)}(hstruct mipi_dsi_multi_contexth](j)}(hjh]hstruct}(hj=@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9@hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjK@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9@hhhjJ@hKubj)}(hmipi_dsi_multi_contexth]j)}(hj7@h]hmipi_dsi_multi_context}(hj]@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9@hhhjJ@hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5@hhhjJ@hKubah}(h]j0@ah ](jjeh"]h$]h&]jj)jhuh1jhjJ@hKhj2@hhubj)}(hhh]h)}(h0Context to call multiple MIPI DSI funcs in a rowh]h0Context to call multiple MIPI DSI funcs in a row}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj|@hhubah}(h]h ]h"]h$]h&]uh1jhj2@hhhjJ@hKubeh}(h]h ](jstructeh"]h$]h&]jjjj@jj@jjjuh1jhhhj3hNhNubj)}(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}(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:345: ./include/drm/drm_mipi_dsi.hhKhj@ubj@)}(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; };}hj@sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj@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:345: ./include/drm/drm_mipi_dsi.hhKhj@ubji)}(hhh](jn)}(h'``dsi`` Pointer to the MIPI DSI device h](jt)}(h``dsi``h]jz)}(hj@h]hdsi}(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:345: ./include/drm/drm_mipi_dsi.hhKhj@ubj)}(hhh]h)}(hPointer to the MIPI DSI deviceh]hPointer to the MIPI DSI device}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhjAhKhj@ubjn)}(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)}(hj%Ah]h accum_err}(hj'AhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#Aubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhjAubj)}(hhh](h)}(h9Storage for the accumulated error over the multiple callsh]h9Storage for the accumulated error over the multiple calls}(hj>AhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj;Aubh)}(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.}(hjMAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj;Aubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj:AhKhj@ubeh}(h]h ]h"]h$]h&]uh1jhhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_pixel_format_to_bpp (C function)c.mipi_dsi_pixel_format_to_bpphNtauh1jxhj3hhhNhNubj)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjAhKubj)}(hmipi_dsi_pixel_format_to_bpph]j)}(hmipi_dsi_pixel_format_to_bpph]hmipi_dsi_pixel_format_to_bpp}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjAhhhjAhKubj)}(h (enum mipi_dsi_pixel_format fmt)h]j)}(henum mipi_dsi_pixel_format fmth](j)}(hjh]henum}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hmipi_dsi_pixel_formath]hmipi_dsi_pixel_format}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j%)}jjAsbc.mipi_dsi_pixel_format_to_bppasbuh1hhjAubj)}(h h]h }(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hfmth]hfmt}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubah}(h]h ]h"]h$]h&]jjuh1jhjAhhhjAhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjAhKubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jhjAhKhjAhhubj)}(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}(hjABhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj>Bhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYBjjYBjjjuh1jhhhj3hNhNubj)}(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%)}(hjcBh]h Parameters}(hjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaBubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj]Bubji)}(hhh]jn)}(h9``enum mipi_dsi_pixel_format fmt`` MIPI DSI pixel format h](jt)}(h"``enum mipi_dsi_pixel_format fmt``h]jz)}(hjBh]henum mipi_dsi_pixel_format fmt}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj|Bubj)}(hhh]h)}(hMIPI DSI pixel formath]hMIPI DSI pixel format}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjBubah}(h]h ]h"]h$]h&]uh1jhj|Bubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjyBubah}(h]h ]h"]h$]h&]uh1jhhj]Bubh)}(h **Return**h]j%)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj]Bubh)}(h7The number of bits per pixel of the given pixel format.h]h7The number of bits per pixel of the given pixel format.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKhj]Bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_tear_mode (C enum)c.mipi_dsi_dcs_tear_modehNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_dcs_tear_modeh]j)}(henum mipi_dsi_dcs_tear_modeh](j)}(hjh]henum}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhKubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjChKubj)}(hmipi_dsi_dcs_tear_modeh]j)}(hjBh]hmipi_dsi_dcs_tear_mode}(hj"ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjChKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjChKubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhjChKhjBhhubj)}(hhh]h)}(hTearing Effect Output Line modeh]hTearing Effect Output Line mode}(hjDChhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhM8hjAChhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjChKubeh}(h]h ](jenumeh"]h$]h&]jjjj\Cjj\Cjjjuh1jhhhj3hNhNubj)}(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%)}(hjfCh]h Constants}(hjhChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjdCubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhM<hj`Cubji)}(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)}(hjCh]hMIPI_DSI_DCS_TEAR_MODE_VBLANK}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhM@hjCubj)}(hhh]h)}(h:the TE output line consists of V-Blanking information onlyh]h:the TE output line consists of V-Blanking information only}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhM?hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChM@hj|Cubjn)}(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)}(hjCh]hMIPI_DSI_DCS_TEAR_MODE_VHBLANK}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMChjCubj)}(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}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMChjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhjChMChj|Cubeh}(h]h ]h"]h$]h&]uh1jhhj`Cubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$mipi_dsi_generic_write_seq (C macro)c.mipi_dsi_generic_write_seqhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_generic_write_seqh]j)}(hmipi_dsi_generic_write_seqh]j)}(hmipi_dsi_generic_write_seqh]j)}(hjDh]hmipi_dsi_generic_write_seq}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhj/DhMubah}(h]j Dah ](jjeh"]h$]h&]jj)jhuh1jhj/DhMhj Dhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj Dhhhj/DhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjHDjjHDjjjuh1jhhhj3hNhNubh)}(h,``mipi_dsi_generic_write_seq (dsi, seq...)``h]jz)}(hjNDh]h(mipi_dsi_generic_write_seq (dsi, seq...)}(hjPDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLDubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj3hhubjb=)}(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}(hjhDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjdDubah}(h]h ]h"]h$]h&]uh1ja=hjvDhMhj3hhubj)}(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%)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj}Dubji)}(hhh](jn)}(h``dsi`` DSI peripheral device h](jt)}(h``dsi``h]jz)}(hjDh]hdsi}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjDubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhjDubjn)}(h)``seq...`` buffer containing the payload h](jt)}(h ``seq...``h]jz)}(hjDh]hseq...}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjDubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhjDubeh}(h]h ]h"]h$]h&]uh1jhhj}Dubh)}(h**Description**h]j%)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj}Dubh)}(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,EhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj}Dubh)}(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().}(hj;EhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj}Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_generic_write_seq_multi (C macro)"c.mipi_dsi_generic_write_seq_multihNtauh1jxhj3hhhNhNubj)}(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)}(hjdEh]h mipi_dsi_generic_write_seq_multi}(hjnEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfEhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjbEhhhjEhMubah}(h]j]Eah ](jjeh"]h$]h&]jj)jhuh1jhjEhMhj_Ehhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj_EhhhjEhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjEjjEjjjuh1jhhhj3hNhNubh)}(h2``mipi_dsi_generic_write_seq_multi (ctx, seq...)``h]jz)}(hjEh]h.mipi_dsi_generic_write_seq_multi (ctx, seq...)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj3hhubjb=)}(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}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjEubah}(h]h ]h"]h$]h&]uh1ja=hjEhMhj3hhubj)}(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%)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjEubji)}(hhh](jn)}(h.``ctx`` Context for multiple DSI transactions h](jt)}(h``ctx``h]jz)}(hjEh]hctx}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjEubj)}(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&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj FhMhjEubjn)}(h)``seq...`` buffer containing the payload h](jt)}(h ``seq...``h]jz)}(hj-Fh]hseq...}(hj/FhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj+Fubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj'Fubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjFFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBFhMhjCFubah}(h]h ]h"]h$]h&]uh1jhj'Fubeh}(h]h ]h"]h$]h&]uh1jmhjBFhMhjEubeh}(h]h ]h"]h$]h&]uh1jhhjEubh)}(h**Description**h]j%)}(hjhFh]h Description}(hjjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfFubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjEubh)}(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.}(hj~FhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&mipi_dsi_dcs_write_seq_multi (C macro)c.mipi_dsi_dcs_write_seq_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_dcs_write_seq_multih]j)}(hmipi_dsi_dcs_write_seq_multih]j)}(hmipi_dsi_dcs_write_seq_multih]j)}(hjFh]hmipi_dsi_dcs_write_seq_multi}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjFhhhjFhMubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1jhjFhMhjFhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjFhhhjFhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjFjjFjjjuh1jhhhj3hNhNubh)}(h3``mipi_dsi_dcs_write_seq_multi (ctx, cmd, seq...)``h]jz)}(hjFh]h/mipi_dsi_dcs_write_seq_multi (ctx, cmd, seq...)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj3hhubjb=)}(h$transmit a DCS command with payload h]h)}(h#transmit a DCS command with payloadh]h#transmit a DCS command with payload}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjFubah}(h]h ]h"]h$]h&]uh1ja=hj GhMhj3hhubj)}(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%)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjGubji)}(hhh](jn)}(h.``ctx`` Context for multiple DSI transactions h](jt)}(h``ctx``h]jz)}(hj7Gh]hctx}(hj9GhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5Gubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj1Gubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjPGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLGhMhjMGubah}(h]h ]h"]h$]h&]uh1jhj1Gubeh}(h]h ]h"]h$]h&]uh1jmhjLGhMhj.Gubjn)}(h``cmd`` Command h](jt)}(h``cmd``h]jz)}(hjpGh]hcmd}(hjrGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnGubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjjGubj)}(hhh]h)}(hCommandh]hCommand}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjjGubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhj.Gubjn)}(h4``seq...`` buffer containing data to be transmitted h](jt)}(h ``seq...``h]jz)}(hjGh]hseq...}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjGubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhj.Gubeh}(h]h ]h"]h$]h&]uh1jhhjGubh)}(h**Description**h]j%)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjGubh)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_driver (C struct)c.mipi_dsi_driverhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hmipi_dsi_driverh]j)}(hstruct mipi_dsi_driverh](j)}(hjh]hstruct}(hj)HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Hhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMubj)}(h h]h }(hj7HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Hhhhj6HhMubj)}(hmipi_dsi_driverh]j)}(hj#Hh]hmipi_dsi_driver}(hjIHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%Hhhhj6HhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj!Hhhhj6HhMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhj6HhMhjHhhubj)}(hhh]h)}(h DSI driverh]h DSI driver}(hjkHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjhHhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhj6HhMubeh}(h]h ](jstructeh"]h$]h&]jjjjHjjHjjjuh1jhhhj3hNhNubj)}(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}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubh:}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjHubj@)}(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); };}hjHsbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjHubh)}(h **Members**h]j%)}(hjHh]hMembers}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjHubji)}(hhh](jn)}(h&``driver`` device driver model driver h](jt)}(h ``driver``h]jz)}(hjHh]hdriver}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjHubj)}(hhh]h)}(hdevice driver model driverh]hdevice driver model driver}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjHhMhjHubjn)}(h&``probe`` callback for device binding h](jt)}(h ``probe``h]jz)}(hjIh]hprobe}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj Iubj)}(hhh]h)}(hcallback for device bindingh]hcallback for device binding}(hj*IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&IhMhj'Iubah}(h]h ]h"]h$]h&]uh1jhj Iubeh}(h]h ]h"]h$]h&]uh1jmhj&IhMhjHubjn)}(h)``remove`` callback for device unbinding h](jt)}(h ``remove``h]jz)}(hjJIh]hremove}(hjLIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHIubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjDIubj)}(hhh]h)}(hcallback for device unbindingh]hcallback for device unbinding}(hjcIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_IhMhj`Iubah}(h]h ]h"]h$]h&]uh1jhjDIubeh}(h]h ]h"]h$]h&]uh1jmhj_IhMhjHubjn)}(h:``shutdown`` called at shutdown time to quiesce the deviceh](jt)}(h ``shutdown``h]jz)}(hjIh]hshutdown}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhj}Iubj)}(hhh]h)}(h-called at shutdown time to quiesce the deviceh]h-called at shutdown time to quiesce the device}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:345: ./include/drm/drm_mipi_dsi.hhMhjIubah}(h]h ]h"]h$]h&]uh1jhj}Iubeh}(h]h ]h"]h$]h&]uh1jmhjIhMhjHubeh}(h]h ]h"]h$]h&]uh1jhhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(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_nodehNtauh1jxhj3hhhNhNubj)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chKhubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhKhubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jof_find_mipi_dsi_device_by_nodesb!c.of_find_mipi_dsi_device_by_nodeasbuh1hhjIhhhjIhKhubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhKhubj9)}(hj9h]h*}(hj+JhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIhhhjIhKhubj)}(hof_find_mipi_dsi_device_by_nodeh]j)}(hjJh]hof_find_mipi_dsi_device_by_node}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\ubj)}(hpacketh]hpacket}(hjK]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hconst struct mipi_dsi_msg *msgh](j)}(hjch]hconst}(hjd]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`]ubj)}(h h]h }(hjq]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 mipi_dsi_msgh]h mipi_dsi_msg}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j,]c.mipi_dsi_create_packetasbuh1hhj`]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`]ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`]ubj)}(hmsgh]hmsg}(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)}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMKubj)}(h h]h }(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj_hMKubj)}(hmipi_dsi_shutdown_peripheralh]j)}(hmipi_dsi_shutdown_peripheralh]hmipi_dsi_shutdown_peripheral}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj_hMKubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj7_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubj)}(h h]h }(hjD_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjU_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjW_modnameN classnameNjj)}j]j%)}jj_sbc.mipi_dsi_shutdown_peripheralasbuh1hhj3_ubj)}(h h]h }(hju_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3_ubj)}(hdsih]hdsi}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/_ubah}(h]h ]h"]h$]h&]jjuh1jhj^hhhj_hMKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhj_hMKubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jhj_hMKhj^hhubj)}(hhh]h)}(h#sends a Shutdown Peripheral commandh]h#sends a Shutdown Peripheral command}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMKhj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj_hMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMLhj_ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMLhj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhj`hMLhj_ubah}(h]h ]h"]h$]h&]uh1jhhj_ubh)}(h **Return**h]j%)}(hj6`h]hReturn}(hj8`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4`ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMNhj_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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMNhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dsi_turn_on_peripheral (C function)c.mipi_dsi_turn_on_peripheralhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h=int mipi_dsi_turn_on_peripheral (struct mipi_dsi_device *dsi)h]j)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-jubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjOjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQjmodnameN classnameNjj)}j]jic.mipi_dsi_generic_writeasbuh1hhj-jubj)}(h h]h }(hjmjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-jubj9)}(hj9h]h*}(hj{jhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-jubj)}(hdsih]hdsi}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)jubj)}(hconst void *payloadh](j)}(hjch]hconst}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(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)}(hpayloadh]hpayload}(hjjhhhNhNubah}(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&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jic.mipi_dsi_generic_writeasbuh1hhjjubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hsizeh]hsize}(hj-khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)jubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjjhMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhjjhMhjihhubj)}(hhh]h)}(h*transmit data using a generic write packeth]h*transmit data using a generic write packet}(hjWkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjTkhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjokjjokjjjuh1jhhhj3hNhNubj)}(hXv**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``const void *payload`` buffer containing the payload ``size_t size`` size of payload buffer **Description** This function will automatically choose the right data type depending on the payload length. **Return** The number of bytes transmitted on success or a negative error code on failure.h](h)}(h**Parameters**h]j%)}(hjykh]h Parameters}(hj{khhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwkubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjskubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjkh]hstruct mipi_dsi_device *dsi}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjkubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjkubjn)}(h6``const void *payload`` buffer containing the payload h](jt)}(h``const void *payload``h]jz)}(hjkh]hconst void *payload}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjkubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjkhMhjkubjn)}(h'``size_t size`` size of payload buffer h](jt)}(h``size_t size``h]jz)}(hj lh]h size_t size}(hj lhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjlubj)}(hhh]h)}(hsize of payload bufferh]hsize of payload buffer}(hj#lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhj lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhMhjkubeh}(h]h ]h"]h$]h&]uh1jhhjskubh)}(h**Description**h]j%)}(hjElh]h Description}(hjGlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjClubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjskubh)}(h\This function will automatically choose the right data type depending on the payload length.h]h\This function will automatically choose the right data type depending on the payload length.}(hj[lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjskubh)}(h **Return**h]j%)}(hjllh]hReturn}(hjnlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjjlubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjskubh)}(hOThe number of bytes transmitted on success or a negative error code on failure.h]hOThe number of bytes transmitted on success or a negative error code on failure.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjskubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_generic_write_chatty (C function)c.mipi_dsi_generic_write_chattyhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(haint mipi_dsi_generic_write_chatty (struct mipi_dsi_device *dsi, const void *payload, size_t size)h]j)}(h`int mipi_dsi_generic_write_chatty(struct mipi_dsi_device *dsi, const void *payload, size_t size)h](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhjlhMubj)}(hmipi_dsi_generic_write_chattyh]j)}(hmipi_dsi_generic_write_chattyh]hmipi_dsi_generic_write_chatty}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhjlhMubj)}(h?(struct mipi_dsi_device *dsi, const void *payload, size_t size)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j%)}jjlsbc.mipi_dsi_generic_write_chattyasbuh1hhjlubj)}(h h]h }(hj,mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj9)}(hj9h]h*}(hj:mhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjlubj)}(hdsih]hdsi}(hjGmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hconst void *payloadh](j)}(hjch]hconst}(hj`mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\mubj)}(h h]h }(hjmmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\mubj)}(hvoidh]hvoid}(hj{mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\mubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\mubj9)}(hj9h]h*}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj\mubj)}(hpayloadh]hpayload}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\mubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j(mc.mipi_dsi_generic_write_chattyasbuh1hhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hsizeh]hsize}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjlhhhjlhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jhjlhMhjlhhubj)}(hhh]h)}(h(mipi_dsi_generic_write() w/ an error logh]h(mipi_dsi_generic_write() w/ an error log}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.njj.njjjuh1jhhhj3hNhNubj)}(hXy**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``const void *payload`` buffer containing the payload ``size_t size`` size of payload buffer **Description** Like mipi_dsi_generic_write() 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%)}(hj8nh]h Parameters}(hj:nhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6nubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hj2nubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjWnh]hstruct mipi_dsi_device *dsi}(hjYnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUnubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjQnubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjpnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlnhM hjmnubah}(h]h ]h"]h$]h&]uh1jhjQnubeh}(h]h ]h"]h$]h&]uh1jmhjlnhM hjNnubjn)}(h6``const void *payload`` buffer containing the payload h](jt)}(h``const void *payload``h]jz)}(hjnh]hconst void *payload}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjnubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjnhM hjNnubjn)}(h'``size_t size`` size of payload buffer h](jt)}(h``size_t size``h]jz)}(hjnh]h size_t size}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjnubj)}(hhh]h)}(hsize of payload bufferh]hsize of payload buffer}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjnhM hjNnubeh}(h]h ]h"]h$]h&]uh1jhhj2nubh)}(h**Description**h]j%)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hj2nubh)}(h}Like mipi_dsi_generic_write() but includes a dev_err() call for you and returns 0 upon success, not the number of bytes sent.h]h}Like mipi_dsi_generic_write() but includes a dev_err() call for you and returns 0 upon success, not the number of bytes sent.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hj2nubh)}(h **Return**h]j%)}(hj+oh]hReturn}(hj-ohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj)oubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj2nubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjAohhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj2nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_generic_write_multi (C function)c.mipi_dsi_generic_write_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hhvoid mipi_dsi_generic_write_multi (struct mipi_dsi_multi_context *ctx, const void *payload, size_t size)h]j)}(hgvoid mipi_dsi_generic_write_multi(struct mipi_dsi_multi_context *ctx, const void *payload, size_t size)h](j)}(hvoidh]hvoid}(hjpohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlohhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM$ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlohhhj~ohM$ubj)}(hmipi_dsi_generic_write_multih]j)}(hmipi_dsi_generic_write_multih]hmipi_dsi_generic_write_multi}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlohhhj~ohM$ubj)}(hF(struct mipi_dsi_multi_context *ctx, const void *payload, size_t size)h](j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j)}(hmipi_dsi_multi_contexth]hmipi_dsi_multi_context}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j%)}jjosbc.mipi_dsi_generic_write_multiasbuh1hhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(hj9h]h*}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoubj)}(hctxh]hctx}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubj)}(hconst void *payloadh](j)}(hjch]hconst}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hj,phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hvoidh]hvoid}(hj:phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjHphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjVphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hpayloadh]hpayload}(hjcphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|pubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]joc.mipi_dsi_generic_write_multiasbuh1hhjxpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxpubj)}(hsizeh]hsize}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubeh}(h]h ]h"]h$]h&]jjuh1jhjlohhhj~ohM$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhohhhj~ohM$ubah}(h]jcoah ](jjeh"]h$]h&]jj)jhuh1jhj~ohM$hjeohhubj)}(hhh]h)}(h,mipi_dsi_generic_write_chatty() w/ accum_errh]h,mipi_dsi_generic_write_chatty() w/ accum_err}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM$hjphhubah}(h]h ]h"]h$]h&]uh1jhjeohhhj~ohM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpjjpjjjuh1jhhhj3hNhNubj)}(hXP**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``const void *payload`` buffer containing the payload ``size_t size`` size of payload buffer **Description** Like mipi_dsi_generic_write_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%)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM(hjpubji)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM%hjqubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj/qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+qhM%hj,qubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhj+qhM%hj qubjn)}(h6``const void *payload`` buffer containing the payload h](jt)}(h``const void *payload``h]jz)}(hjOqh]hconst void *payload}(hjQqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMqubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM&hjIqubj)}(hhh]h)}(hbuffer containing the payloadh]hbuffer containing the payload}(hjhqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdqhM&hjequbah}(h]h ]h"]h$]h&]uh1jhjIqubeh}(h]h ]h"]h$]h&]uh1jmhjdqhM&hj qubjn)}(h'``size_t size`` size of payload buffer h](jt)}(h``size_t size``h]jz)}(hjqh]h size_t size}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM'hjqubj)}(hhh]h)}(hsize of payload bufferh]hsize of payload buffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM'hjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqhM'hj qubeh}(h]h ]h"]h$]h&]uh1jhhjpubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM)hjpubh)}(h|Like mipi_dsi_generic_write_chatty() but deals with errors in a way that makes it convenient to make several calls in a row.h]h|Like mipi_dsi_generic_write_chatty() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM(hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mipi_dsi_generic_read (C function)c.mipi_dsi_generic_readhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h{ssize_t mipi_dsi_generic_read (struct mipi_dsi_device *dsi, const void *params, size_t num_params, void *data, size_t size)h]j)}(hzssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, size_t num_params, void *data, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj rmodnameN classnameNjj)}j]j%)}jmipi_dsi_generic_readsbc.mipi_dsi_generic_readasbuh1hhjrhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM@ubj)}(h h]h }(hj-rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhj,rhM@ubj)}(hmipi_dsi_generic_readh]j)}(hj)rh]hmipi_dsi_generic_read}(hj?rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;rubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhj,rhM@ubj)}(h](struct mipi_dsi_device *dsi, const void *params, size_t num_params, void *data, size_t size)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjZrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVrubj)}(h h]h }(hjgrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVrubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjxrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjurubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzrmodnameN classnameNjj)}j]j'rc.mipi_dsi_generic_readasbuh1hhjVrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVrubj9)}(hj9h]h*}(hjrhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVrubj)}(hdsih]hdsi}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRrubj)}(hconst void *paramsh](j)}(hjch]hconst}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(hparamsh]hparams}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRrubj)}(hsize_t num_paramsh](h)}(hhh]j)}(hsize_th]hsize_t}(hj*shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,smodnameN classnameNjj)}j]j'rc.mipi_dsi_generic_readasbuh1hhj#subj)}(h h]h }(hjHshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#subj)}(h num_paramsh]h num_params}(hjVshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#subeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRrubj)}(h void *datah](j)}(hvoidh]hvoid}(hjoshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjksubj)}(h h]h }(hj}shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjksubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjksubj)}(hdatah]hdata}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjksubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRrubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j'rc.mipi_dsi_generic_readasbuh1hhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hsizeh]hsize}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRrubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhj,rhM@ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhj,rhM@ubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jhj,rhM@hjqhhubj)}(hhh]h)}(h(receive data using a generic read packeth]h(receive data using a generic read packet}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM@hjthhubah}(h]h ]h"]h$]h&]uh1jhjqhhhj,rhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"tjj"tjjjuh1jhhhj3hNhNubj)}(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%)}(hj,th]h Parameters}(hj.thhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj*tubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMDhj&tubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjKth]hstruct mipi_dsi_device *dsi}(hjMthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjItubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMAhjEtubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjdthhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`thMAhjatubah}(h]h ]h"]h$]h&]uh1jhjEtubeh}(h]h ]h"]h$]h&]uh1jmhj`thMAhjBtubjn)}(h@``const void *params`` buffer containing the request parameters h](jt)}(h``const void *params``h]jz)}(hjth]hconst void *params}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMBhj~tubj)}(hhh]h)}(h(buffer containing the request parametersh]h(buffer containing the request parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMBhjtubah}(h]h ]h"]h$]h&]uh1jhj~tubeh}(h]h ]h"]h$]h&]uh1jmhjthMBhjBtubjn)}(h3``size_t num_params`` number of request parameters h](jt)}(h``size_t num_params``h]jz)}(hjth]hsize_t num_params}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMChjtubj)}(hhh]h)}(hnumber of request parametersh]hnumber of request parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMChjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthMChjBtubjn)}(h;``void *data`` buffer in which to return the received data h](jt)}(h``void *data``h]jz)}(hjth]h void *data}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMDhjtubj)}(hhh]h)}(h+buffer in which to return the received datah]h+buffer in which to return the received data}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj uhMDhj uubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhj uhMDhjBtubjn)}(h'``size_t size`` size of receive buffer h](jt)}(h``size_t size``h]jz)}(hj/uh]h size_t size}(hj1uhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-uubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMEhj)uubj)}(hhh]h)}(hsize of receive bufferh]hsize of receive buffer}(hjHuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDuhMEhjEuubah}(h]h ]h"]h$]h&]uh1jhj)uubeh}(h]h ]h"]h$]h&]uh1jmhjDuhMEhjBtubeh}(h]h ]h"]h$]h&]uh1jhhj&tubh)}(h**Description**h]j%)}(hjjuh]h Description}(hjluhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhuubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMGhj&tubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMFhj&tubh)}(h **Return**h]j%)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMIhj&tubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMJhj&tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_mipi_dsi_get_input_bus_fmt (C function) c.drm_mipi_dsi_get_input_bus_fmthNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hJu32 drm_mipi_dsi_get_input_bus_fmt (enum mipi_dsi_pixel_format dsi_format)h]j)}(hIu32 drm_mipi_dsi_get_input_bus_fmt(enum mipi_dsi_pixel_format dsi_format)h](h)}(hhh]j)}(hu32h]hu32}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j%)}jdrm_mipi_dsi_get_input_bus_fmtsb c.drm_mipi_dsi_get_input_bus_fmtasbuh1hhjuhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMnubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhMnubj)}(hdrm_mipi_dsi_get_input_bus_fmth]j)}(hjuh]hdrm_mipi_dsi_get_input_bus_fmt}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj vubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjuhMnubj)}(h'(enum mipi_dsi_pixel_format dsi_format)h]j)}(h%enum mipi_dsi_pixel_format dsi_formath](j)}(hjh]henum}(hj(vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$vubj)}(h h]h }(hj5vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$vubh)}(hhh]j)}(hmipi_dsi_pixel_formath]hmipi_dsi_pixel_format}(hjFvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHvmodnameN classnameNjj)}j]ju c.drm_mipi_dsi_get_input_bus_fmtasbuh1hhj$vubj)}(h h]h }(hjdvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$vubj)}(h dsi_formath]h dsi_format}(hjrvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj vubah}(h]h ]h"]h$]h&]jjuh1jhjuhhhjuhMnubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjuhMnubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjuhMnhjuhhubj)}(hhh]h)}(h]Get the required MEDIA_BUS_FMT_* based input pixel format for a given DSI output pixel formath]h]Get the required MEDIA_BUS_FMT_* based input pixel format for a given DSI output pixel format}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMnhjvhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhj3hNhNubj)}(hX**Parameters** ``enum mipi_dsi_pixel_format dsi_format`` pixel format that a DSI host needs to output **Description** Various DSI hosts can use this function during their :c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts ` operation to ascertain the MEDIA_BUS_FMT_* pixel format required as input. **Return** a 32-bit MEDIA_BUS_FMT_* value on success or 0 in case of failure.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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMrhjvubji)}(hhh]jn)}(hW``enum mipi_dsi_pixel_format dsi_format`` pixel format that a DSI host needs to output h](jt)}(h)``enum mipi_dsi_pixel_format dsi_format``h]jz)}(hjvh]h%enum mipi_dsi_pixel_format dsi_format}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjvubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMqhjvubj)}(hhh]h)}(h,pixel format that a DSI host needs to outputh]h,pixel format that a DSI host needs to output}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMqhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjvhMqhjvubah}(h]h ]h"]h$]h&]uh1jhhjvubh)}(h**Description**h]j%)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMshjvubh)}(hVarious DSI hosts can use this function during their :c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts ` operation to ascertain the MEDIA_BUS_FMT_* pixel format required as input.h](h5Various DSI hosts can use this function during their }(hj.whhhNhNubh)}(hG:c:type:`drm_bridge_funcs.atomic_get_input_bus_fmts `h]jz)}(hj8wh]h*drm_bridge_funcs.atomic_get_input_bus_fmts}(hj:whhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj6wubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMrhj.wubhK operation to ascertain the MEDIA_BUS_FMT_* pixel format required as input.}(hj.whhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUwhMrhjvubh)}(h **Return**h]j%)}(hjbwh]hReturn}(hjdwhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`wubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMvhjvubh)}(hBa 32-bit MEDIA_BUS_FMT_* value on success or 0 in case of failure.h]hBa 32-bit MEDIA_BUS_FMT_* value on success or 0 in case of failure.}(hjxwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMwhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&mipi_dsi_dcs_write_buffer (C function)c.mipi_dsi_dcs_write_bufferhNtauh1jxhj3hhhNhNubj)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j%)}jmipi_dsi_dcs_write_buffersbc.mipi_dsi_dcs_write_bufferasbuh1hhjwhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjwhMubj)}(hmipi_dsi_dcs_write_bufferh]j)}(hjwh]hmipi_dsi_dcs_write_buffer}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjwhMubj)}(h;(struct mipi_dsi_device *dsi, const void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]jwc.mipi_dsi_dcs_write_bufferasbuh1hhjwubj)}(h h]h }(hj5xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj9)}(hj9h]h*}(hjCxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjwubj)}(hdsih]hdsi}(hjPxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hconst void *datah](j)}(hjch]hconst}(hjixhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(h h]h }(hjvxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubj9)}(hj9h]h*}(hjxhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjexubj)}(hdatah]hdata}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjexubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]jwc.mipi_dsi_dcs_write_bufferasbuh1hhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hlenh]hlen}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhjwhhhjwhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwhhhjwhMubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjwhMhjwhhubj)}(hhh]h)}(h#transmit a DCS command with payloadh]h#transmit a DCS command with payload}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7yjj7yjjjuh1jhhhj3hNhNubj)}(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%)}(hjAyh]h Parameters}(hjCyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?yubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj;yubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj`yh]hstruct mipi_dsi_device *dsi}(hjbyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^yubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjZyubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjyyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuyhMhjvyubah}(h]h ]h"]h$]h&]uh1jhjZyubeh}(h]h ]h"]h$]h&]uh1jmhjuyhMhjWyubjn)}(h>``const void *data`` buffer containing data to be transmitted h](jt)}(h``const void *data``h]jz)}(hjyh]hconst void *data}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjyubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjWyubjn)}(h+``size_t len`` size of transmission buffer h](jt)}(h``size_t len``h]jz)}(hjyh]h size_t len}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjyubj)}(hhh]h)}(hsize of transmission bufferh]hsize of transmission buffer}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhjWyubeh}(h]h ]h"]h$]h&]uh1jhhj;yubh)}(h**Description**h]j%)}(hj zh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj zubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj;yubh)}(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.}(hj#zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj;yubh)}(h **Return**h]j%)}(hj4zh]hReturn}(hj6zhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2zubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj;yubh)}(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.}(hjJzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj;yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-mipi_dsi_dcs_write_buffer_chatty (C function)"c.mipi_dsi_dcs_write_buffer_chattyhNtauh1jxhj3hhhNhNubj)}(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}(hjyzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuzhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuzhhhjzhMubj)}(h mipi_dsi_dcs_write_buffer_chattyh]j)}(h mipi_dsi_dcs_write_buffer_chattyh]h mipi_dsi_dcs_write_buffer_chatty}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuzhhhjzhMubj)}(h;(struct mipi_dsi_device *dsi, const void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j%)}jjzsb"c.mipi_dsi_dcs_write_buffer_chattyasbuh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hdsih]hdsi}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubj)}(hconst void *datah](j)}(hjch]hconst}(hj({hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj${ubj)}(h h]h }(hj5{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj${ubj)}(hvoidh]hvoid}(hjC{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj${ubj)}(h h]h }(hjQ{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj${ubj9)}(hj9h]h*}(hj_{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj${ubj)}(hdatah]hdata}(hjl{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj${ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubj)}(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]jz"c.mipi_dsi_dcs_write_buffer_chattyasbuh1hhj{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&]noemphjjuh1jhjzubeh}(h]h ]h"]h$]h&]jjuh1jhjuzhhhjzhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjqzhhhjzhMubah}(h]jlzah ](jjeh"]h$]h&]jj)jhuh1jhjzhMhjnzhhubj)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjnzhhhjzhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{jj{jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj|ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj8|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4|hMhj5|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj4|hMhj|ubjn)}(h>``const void *data`` buffer containing data to be transmitted h](jt)}(h``const void *data``h]jz)}(hjX|h]hconst void *data}(hjZ|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjV|ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjR|ubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hjq|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm|hMhjn|ubah}(h]h ]h"]h$]h&]uh1jhjR|ubeh}(h]h ]h"]h$]h&]uh1jmhjm|hMhj|ubjn)}(h+``size_t len`` size of transmission 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj|ubj)}(hhh]h)}(hsize of transmission bufferh]hsize of transmission 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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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:348: ./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:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,mipi_dsi_dcs_write_buffer_multi (C function)!c.mipi_dsi_dcs_write_buffer_multihNtauh1jxhj3hhhNhNubj)}(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}(hj8}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4}hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjG}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4}hhhjF}hMubj)}(hmipi_dsi_dcs_write_buffer_multih]j)}(hmipi_dsi_dcs_write_buffer_multih]hmipi_dsi_dcs_write_buffer_multi}(hjY}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4}hhhjF}hMubj)}(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}(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_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_write_buffer_multiasbuh1hhjq}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq}ubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjq}ubj)}(hctxh]hctx}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjm}ubj)}(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}(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}(hj+~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjm}ubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjG~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjI~modnameN classnameNjj)}j]j}!c.mipi_dsi_dcs_write_buffer_multiasbuh1hhj@~ubj)}(h h]h }(hje~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@~ubj)}(hlenh]hlen}(hjs~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjm}ubeh}(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)}(h/mipi_dsi_dcs_write_buffer_chatty() w/ accum_errh]h/mipi_dsi_dcs_write_buffer_chatty() w/ accum_err}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhj-}hhhjF}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(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 *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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h(buffer containing data to be transmittedh]h(buffer containing data to be transmitted}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj,hMhj~ubjn)}(h+``size_t len`` size of transmission buffer h](jt)}(h``size_t len``h]jz)}(hjPh]h size_t len}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjJubj)}(hhh]h)}(hsize of transmission bufferh]hsize of transmission buffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehMhj~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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~ubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_write (C function)c.mipi_dsi_dcs_writehNtauh1jxhj3hhhNhNubj)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dsi_dcs_writeh]j)}(hjh]hmipi_dsi_dcs_write}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hC(struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hj"hhhNhNubah}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jc.mipi_dsi_dcs_writeasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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_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&]noemphjjuh1jhjubj)}(hconst void *datah](j)}(hjch]hconst}(hjڀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjրubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjրubj)}(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)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjր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&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]jc.mipi_dsi_dcs_writeasbuh1hhj3ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hlenh]hlen}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjˁubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjˁubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjȁubjn)}(h``u8 cmd`` DCS command h](jt)}(h ``u8 cmd``h]jz)}(hj h]hu8 cmd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h DCS commandh]h DCS command}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjȁubjn)}(h;``const void *data`` buffer containing the command payload h](jt)}(h``const void *data``h]jz)}(hjCh]hconst void *data}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj=ubj)}(hhh]h)}(h%buffer containing the command payloadh]h%buffer containing the command payload}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhMhjȁubjn)}(h&``size_t len`` command payload length h](jt)}(h``size_t len``h]jz)}(hj|h]h size_t len}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjvubj)}(hhh]h)}(hcommand payload lengthh]hcommand payload length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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.}(hj͂hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h **Return**h]j%)}(hjނh]hReturn}(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:348: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_read (C function)c.mipi_dsi_dcs_readhNtauh1jxhj3hhhNhNubj)}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}jmipi_dsi_dcs_readsbc.mipi_dsi_dcs_readasbuh1hhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjGhMubj)}(hmipi_dsi_dcs_readh]j)}(hjDh]hmipi_dsi_dcs_read}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjGhMubj)}(h=(struct mipi_dsi_device *dsi, u8 cmd, void *data, size_t len)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jBc.mipi_dsi_dcs_readasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqubj)}(hdsih]hdsi}(hj̃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(hu8 cmdh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jBc.mipi_dsi_dcs_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(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*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)ubj)}(hdatah]hdata}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]jBc.mipi_dsi_dcs_readasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjGhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjGhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjGhMhjhhubj)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjńhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjGhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM#hjubji)}(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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h``u8 cmd`` DCS command h](jt)}(h ``u8 cmd``h]jz)}(hjBh]hu8 cmd}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM!hj<ubj)}(hhh]h)}(h DCS commandh]h DCS command}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM!hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhjWhM!hjubjn)}(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&]uh1jyhjyubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM"hjuubj)}(hhh]h)}(hbuffer in which to receive datah]hbuffer in which to receive data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhjhM"hjubjn)}(h&``size_t len`` size of receive 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM#hjubj)}(hhh]h)}(hsize of receive bufferh]hsize of receive buffer}(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 **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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM%hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM%hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jmipi_dsi_dcs_nop (C function)c.mipi_dsi_dcs_nophNtauh1jxhj3hhhNhNubj)}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM8ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhjBhM8ubj)}(hmipi_dsi_dcs_noph]j)}(hmipi_dsi_dcs_noph]hmipi_dsi_dcs_nop}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhjBhM8ubj)}(h(struct mipi_dsi_device *dsi)h]j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(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%)}jjWsbc.mipi_dsi_dcs_nopasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hdsih]hdsi}(hjʆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubah}(h]h ]h"]h$]h&]jjuh1jhj0hhhjBhM8ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj,hhhjBhM8ubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhjBhM8hj)hhubj)}(hhh]h)}(hsend DCS nop packeth]hsend DCS nop packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM8hjhhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjBhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM<hjubji)}(hhh]jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hj5h]hstruct mipi_dsi_device *dsi}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM9hj/ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM9hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhjJhM9hj,ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM;hjubh)}(hBThis function is deprecated. Use mipi_dsi_dcs_nop_multi() instead.h]hBThis function is deprecated. Use mipi_dsi_dcs_nop_multi() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$mipi_dsi_dcs_soft_reset (C function)c.mipi_dsi_dcs_soft_resethNtauh1jxhj3hhhNhNubj)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؇hhhjhMLubj)}(hmipi_dsi_dcs_soft_reseth]j)}(hmipi_dsi_dcs_soft_reseth]hmipi_dsi_dcs_soft_reset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj؇hhhjhMLubj)}(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 }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_dcs_soft_resetasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjehhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj؇hhhjhMLubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjԇhhhjhMLubah}(h]jχah ](jjeh"]h$]h&]jj)jhuh1jhjhMLhjчhhubj)}(hhh]h)}(h.perform a software reset of the display moduleh]h.perform a software reset of the display module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjчhhhjhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMPhjubji)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMMhj׈ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhj׈ubeh}(h]h ]h"]h$]h&]uh1jmhjhMMhjԈ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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMOhjubh)}(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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMNhjubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMPhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dsi_dcs_get_power_mode (C function)c.mipi_dsi_dcs_get_power_modehNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM`ubj)}(hmipi_dsi_dcs_get_power_modeh]j)}(hmipi_dsi_dcs_get_power_modeh]hmipi_dsi_dcs_get_power_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM`ubj)}(h'(struct mipi_dsi_device *dsi, u8 *mode)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}(hj߉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܉ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_dcs_get_power_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *modeh](h)}(hhh]j)}(hu8h]hu8}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]jc.mipi_dsi_dcs_get_power_modeasbuh1hhj/ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hmodeh]hmode}(hjohhhNhNubah}(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&]jjjuh1jjjhj|hhhjhM`ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjhM`hjyhhubj)}(hhh]h)}(h-query the display module's current power modeh]h/query the display module’s current power mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM`hjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMdhjubji)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMbhjԊubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjԊubeh}(h]h ]h"]h$]h&]uh1jmhjhMbhjъubjn)}(h8``u8 *mode`` return location for the current power mode h](jt)}(h ``u8 *mode``h]jz)}(hjh]hu8 *mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMchj ubj)}(hhh]h)}(h*return location for the current power modeh]h*return location for the current power mode}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMchj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMchjъubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjNh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMehjubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMehjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_get_pixel_format (C function)c.mipi_dsi_dcs_get_pixel_formathNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMyubj)}(hmipi_dsi_dcs_get_pixel_formath]j)}(hmipi_dsi_dcs_get_pixel_formath]hmipi_dsi_dcs_get_pixel_format}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMyubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_dcs_get_pixel_formatasbuh1hhj̋ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̋ubj9)}(hj9h]h*}(hjhhhNhNubah}(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 u8 *formath](h)}(hhh]j)}(hu8h]hu8}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]j c.mipi_dsi_dcs_get_pixel_formatasbuh1hhj>ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj9)}(hj9h]h*}(hjqhhhNhNubah}(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&]jjuh1jhjhhhjhMyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMyubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMyhjhhubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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}(hǰ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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM{hjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM{hjubjn)}(h4``u8 *format`` return location for the 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM|hjubj)}(hhh]h)}(h$return location for the pixel formath]h$return location for the pixel format}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM|hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj7hM|hjubeh}(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:348: ./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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM~hjČubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_enter_sleep_mode (C function)c.mipi_dsi_dcs_enter_sleep_modehNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۍubh)}(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%)}jjōsbc.mipi_dsi_dcs_enter_sleep_modeasbuh1hhjۍubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۍubj9)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjۍubj)}(hdsih]hdsi}(hj8hhhNhNubah}(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)}(hWdisable all unnecessary blocks inside the display module except interface communicationh]hWdisable all unnecessary blocks inside the display module except interface communication}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(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&]uh1jmhjhMhjubah}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~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:348: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_dcs_exit_sleep_mode (C function)c.mipi_dsi_dcs_exit_sleep_modehNtauh1jxhj3hhhNhNubj)}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMubj)}(hmipi_dsi_dcs_exit_sleep_modeh]j)}(hmipi_dsi_dcs_exit_sleep_modeh]hmipi_dsi_dcs_exit_sleep_mode}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjXhMubj)}(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%)}jjmsbc.mipi_dsi_dcs_exit_sleep_modeasbuh1hhjubj)}(h h]h }(hjŏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjӏhhhNhNubah}(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&]jjuh1jhjFhhhjXhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjBhhhjXhMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jhjXhMhj?hhubj)}(hhh]h)}(h+enable all blocks inside the display moduleh]h+enable all blocks inside the display module}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjKh]hstruct mipi_dsi_device *dsi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjIubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjEubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhj`hMhjBubah}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj&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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj&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:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)mipi_dsi_dcs_set_display_off (C function)c.mipi_dsi_dcs_set_display_offhNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dsi_dcs_set_display_offh]j)}(hmipi_dsi_dcs_set_display_offh]hmipi_dsi_dcs_set_display_off}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_dcs_set_display_offasbuh1hhj+ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj9)}(hj9h]h*}(hj{hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubj)}(hdsih]hdsi}(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)}(h4stop displaying the image data on the display deviceh]h4stop displaying the image data on the display device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjʑjjʑjjjuh1jhhhj3hNhNubj)}(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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjΑubh)}(h **Return**h]j%)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjΑubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mipi_dsi_dcs_set_display_on (C function)c.mipi_dsi_dcs_set_display_onhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h=int mipi_dsi_dcs_set_display_on (struct mipi_dsi_device *dsi)h]j)}(hhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhMubj)}(hmipi_dsi_dcs_set_column_addressh]j)}(hmipi_dsi_dcs_set_column_addressh]hmipi_dsi_dcs_set_column_address}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMubj)}(h1(struct mipi_dsi_device *dsi, u16 start, u16 end)h](j)}(hstruct mipi_dsi_device *dsih](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_dsi_deviceh]hmipi_dsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjesb!c.mipi_dsi_dcs_set_column_addressasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjwubj)}(h u16 starth](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.mipi_dsi_dcs_set_column_addressasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstarth]hstart}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hu16 endh](h)}(hhh]j)}(hu16h]hu16}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j!c.mipi_dsi_dcs_set_column_addressasbuh1hhj5ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hendh]hend}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhjPhMhj7hhubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(hXC**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 start`` first column of frame memory ``u16 end`` last column of frame memory **Description** This function is deprecated. Use mipi_dsi_dcs_set_column_address_multi() instead. **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:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj͕ubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj͕ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjʕubjn)}(h+``u16 start`` first column of frame memory h](jt)}(h ``u16 start``h]jz)}(hj h]h u16 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hfirst column of frame memoryh]hfirst column of frame memory}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMhjʕubjn)}(h(``u16 end`` last column of frame memory h](jt)}(h ``u16 end``h]jz)}(hjEh]hu16 end}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMhjʕ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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hQThis function is deprecated. Use mipi_dsi_dcs_set_column_address_multi() instead.h]hQThis function is deprecated. Use mipi_dsi_dcs_set_column_address_multi() instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_set_page_address (C function)c.mipi_dsi_dcs_set_page_addresshNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hSint mipi_dsi_dcs_set_page_address (struct mipi_dsi_device *dsi, u16 start, u16 end)h]j)}(hRint mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start, u16 end)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dsi_dcs_set_page_addressh]j)}(hmipi_dsi_dcs_set_page_addressh]hmipi_dsi_dcs_set_page_address}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h1(struct mipi_dsi_device *dsi, u16 start, u16 end)h](j)}(hstruct mipi_dsi_device *dsih](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)}(hmipi_dsi_deviceh]hmipi_dsi_device}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_dcs_set_page_addressasbuh1hhj%ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj9)}(hj9h]h*}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj%ubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(h u16 starth](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jcc.mipi_dsi_dcs_set_page_addressasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstarth]hstart}(hjʗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hu16 endh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jcc.mipi_dsi_dcs_set_page_addressasbuh1hhjߗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߗubj)}(hendh]hend}(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]jߖah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hIdefine the page extent of the frame memory accessed by the host processorh]hIdefine the page extent of the frame memory accessed by the host processor}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhj3hNhNubj)}(hX=**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``u16 start`` first page of frame memory ``u16 end`` last page of frame memory **Description** This function is deprecated. Use mipi_dsi_dcs_set_page_address_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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjXubji)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjwubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjtubjn)}(h)``u16 start`` first page of frame memory h](jt)}(h ``u16 start``h]jz)}(hjh]h u16 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hfirst page of frame memoryh]hfirst page of frame memory}(hjϘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj˘hMhj̘ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj˘hMhjtubjn)}(h&``u16 end`` last page of frame memory h](jt)}(h ``u16 end``h]jz)}(hjh]hu16 end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hlast page of frame memoryh]hlast page of frame memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjtubeh}(h]h ]h"]h$]h&]uh1jhhjXubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjXubh)}(hOThis function is deprecated. Use mipi_dsi_dcs_set_page_address_multi() instead.h]hOThis function is deprecated. Use mipi_dsi_dcs_set_page_address_multi() instead.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjXubh)}(h **Return**h]j%)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjXubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%mipi_dsi_dcs_set_tear_on (C function)c.mipi_dsi_dcs_set_tear_onhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h\int mipi_dsi_dcs_set_tear_on (struct mipi_dsi_device *dsi, enum mipi_dsi_dcs_tear_mode mode)h]j)}(h[int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, enum mipi_dsi_dcs_tear_mode mode)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dsi_dcs_set_tear_onh]j)}(hmipi_dsi_dcs_set_tear_onh]hmipi_dsi_dcs_set_tear_on}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h?(struct mipi_dsi_device *dsi, enum mipi_dsi_dcs_tear_mode mode)h](j)}(hstruct mipi_dsi_device *dsih](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)}(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_dcs_set_tear_onasbuh1hhjϙubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϙubj9)}(hj9h]h*}(hjhhhNhNubah}(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 enum mipi_dsi_dcs_tear_mode modeh](j)}(hjh]henum}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(hmipi_dsi_dcs_tear_modeh]hmipi_dsi_dcs_tear_mode}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j c.mipi_dsi_dcs_set_tear_onasbuh1hhjAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(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)}(hPturn on the display module's Tearing Effect output signal on the TE signal line.h]hRturn on the display module’s Tearing Effect output signal on the TE signal line.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjњjjњjjjuh1jhhhj3hNhNubj)}(hX.**Parameters** ``struct mipi_dsi_device *dsi`` DSI peripheral device ``enum mipi_dsi_dcs_tear_mode mode`` the Tearing Effect Output Line mode **Description** This function is deprecated. Use mipi_dsi_dcs_set_tear_on_multi() instead. **Return** 0 on success or a negative 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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(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)}(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)}(hj3h]h enum mipi_dsi_dcs_tear_mode mode}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj-ubj)}(hhh]h)}(h#the Tearing Effect Output Line modeh]h#the Tearing Effect Output Line mode}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jmhjHhMhjubeh}(h]h ]h"]h$]h&]uh1jhhj՚ubh)}(h**Description**h]j%)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM!hj՚ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hj՚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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM"hj՚ubh)}(h00 on success or a negative error code on failureh]h00 on success or a negative error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM#hj՚ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_set_pixel_format (C function)c.mipi_dsi_dcs_set_pixel_formathNtauh1jxhj3hhhNhNubj)}(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ڛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֛hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֛hhhjhM5ubj)}(hmipi_dsi_dcs_set_pixel_formath]j)}(hmipi_dsi_dcs_set_pixel_formath]hmipi_dsi_dcs_set_pixel_format}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj֛hhhjhM5ubj)}(h((struct mipi_dsi_device *dsi, u8 format)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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_dcs_set_pixel_formatasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjchhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 formath](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jQc.mipi_dsi_dcs_set_pixel_formatasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hformath]hformat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj֛hhhjhM5ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjқhhhjhM5ubah}(h]j͛ah ](jjeh"]h$]h&]jj)jhuh1jhjhM5hjϛ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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM5hjߜhhubah}(h]h ]h"]h$]h&]uh1jhjϛhhhjhM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM9hjubji)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM7hjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM7hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hM7hjubjn)}(h``u8 format`` pixel format h](jt)}(h ``u8 format``h]jz)}(hj\h]h u8 format}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM8hjVubj)}(hhh]h)}(h pixel formath]h pixel format}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM8hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jmhjqhM8hjubeh}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM:hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM9hjubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM<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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+mipi_dsi_dcs_set_tear_scanline (C function) c.mipi_dsi_dcs_set_tear_scanlinehNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMMubj)}(hmipi_dsi_dcs_set_tear_scanlineh]j)}(hmipi_dsi_dcs_set_tear_scanlineh]hmipi_dsi_dcs_set_tear_scanline}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMMubj)}(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 }(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&sb c.mipi_dsi_dcs_set_tear_scanlineasbuh1hhj<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&]noemphjjuh1jhj8ubj)}(h u16 scanlineh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jz c.mipi_dsi_dcs_set_tear_scanlineasbuh1hhjubj)}(h h]h }(hjӞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hscanlineh]hscanline}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMMhjhhubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMQhj'ubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjLh]hstruct mipi_dsi_device *dsi}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjJubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMOhjFubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMOhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMOhjCubjn)}(h,``u16 scanline`` scanline to use as trigger h](jt)}(h``u16 scanline``h]jz)}(hjh]h u16 scanline}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMPhjubj)}(hhh]h)}(hscanline to use as triggerh]hscanline to use as trigger}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMPhjCubeh}(h]h ]h"]h$]h&]uh1jhhj'ubh)}(h**Description**h]j%)}(hjh]h Description}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMRhj'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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMQhj'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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMThj'ubh)}(h00 on success or a negative error code on failureh]h00 on success or a negative error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMUhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_set_display_brightness (C function)%c.mipi_dsi_dcs_set_display_brightnesshNtauh1jxhj3hhhNhNubj)}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMfubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj:hMfubj)}(h#mipi_dsi_dcs_set_display_brightnessh]j)}(h#mipi_dsi_dcs_set_display_brightnessh]h#mipi_dsi_dcs_set_display_brightness}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj:hMfubj)}(h-(struct mipi_dsi_device *dsi, u16 brightness)h](j)}(hstruct mipi_dsi_device *dsih](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(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%)}jjOsb%c.mipi_dsi_dcs_set_display_brightnessasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hdsih]hdsi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(hu16 brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjޠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۠ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.mipi_dsi_dcs_set_display_brightnessasbuh1hhjנubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjנubj)}(h brightnessh]h brightness}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjנubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj:hMfubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj$hhhj:hMfubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj:hMfhj!hhubj)}(hhh]h)}(h(sets the brightness value of the displayh]h(sets the brightness value of the display}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMfhj1hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhj3hNhNubj)}(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%)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMjhjPubji)}(hhh](jn)}(h6``struct mipi_dsi_device *dsi`` DSI peripheral device h](jt)}(h``struct mipi_dsi_device *dsi``h]jz)}(hjuh]hstruct mipi_dsi_device *dsi}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhhjoubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhMhhjlubjn)}(h$``u16 brightness`` brightness value h](jt)}(h``u16 brightness``h]jz)}(hjh]hu16 brightness}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMihjubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hjǡhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjáhMihjġubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjáhMihjlubeh}(h]h ]h"]h$]h&]uh1jhhjPubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMkhjPubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMjhjPubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMmhjPubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMnhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_get_display_brightness (C function)%c.mipi_dsi_dcs_get_display_brightnesshNtauh1jxhj3hhhNhNubj)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjchMubj)}(h#mipi_dsi_dcs_get_display_brightnessh]j)}(h#mipi_dsi_dcs_get_display_brightnessh]h#mipi_dsi_dcs_get_display_brightness}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjchMubj)}(h.(struct mipi_dsi_device *dsi, u16 *brightness)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%)}jjxsb%c.mipi_dsi_dcs_get_display_brightnessasbuh1hhjubj)}(h h]h }(hjТhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjޢhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsih]hdsi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 *brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j̢%c.mipi_dsi_dcs_get_display_brightnessasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h brightnessh]h brightness}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjQhhhjchMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjMhhhjchMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhjchMhjJhhubj)}(hhh]h)}(h0gets the current brightness value of the displayh]h0gets the current brightness value of the display}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjģhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h%``u16 *brightness`` brightness value h](jt)}(h``u16 *brightness``h]jz)}(hjh]hu16 *brightness}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjޣubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(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&]uh1jhhjubh)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6mipi_dsi_dcs_set_display_brightness_large (C function)+c.mipi_dsi_dcs_set_display_brightness_largehNtauh1jxhj3hhhNhNubj)}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhjrhMubj)}(h-(struct mipi_dsi_device *dsi, u16 brightness)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%)}jjsb+c.mipi_dsi_dcs_set_display_brightness_largeasbuh1hhjubj)}(h h]h }(hjߤhhhNhNubah}(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&]noemphjjuh1jhjubj)}(hu16 brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jۤ+c.mipi_dsi_dcs_set_display_brightness_largeasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h brightnessh]h brightness}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjYhhubj)}(hhh]h)}(h/sets the 16-bit brightness value of the displayh]h/sets the 16-bit brightness value of the display}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjƥhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj¥hMhjåubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj¥hMhjubjn)}(h$``u16 brightness`` brightness value h](jt)}(h``u16 brightness``h]jz)}(hjh]hu16 brightness}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(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%)}(hj!h]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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6mipi_dsi_dcs_get_display_brightness_large (C function)+c.mipi_dsi_dcs_get_display_brightness_largehNtauh1jxhj3hhhNhNubj)}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjthMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjthMubj)}(h.(struct mipi_dsi_device *dsi, u16 *brightness)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 reftargetjæmodnameN classnameNjj)}j]j%)}jjsb+c.mipi_dsi_dcs_get_display_brightness_largeasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(hu16 *brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jݦ+c.mipi_dsi_dcs_get_display_brightness_largeasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h brightnessh]h brightness}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjthMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhjthMubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjthMhj[hhubj)}(hhh]h)}(h7gets the current 16-bit brightness value of the displayh]h7gets the current 16-bit brightness value of the display}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjthMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hDSI peripheral deviceh]hDSI peripheral device}(hjէhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѧhMhjҧubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjѧhMhjubjn)}(h%``u16 *brightness`` brightness value h](jt)}(h``u16 *brightness``h]jz)}(hjh]hu16 *brightness}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(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 **Return**h]j%)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1mipi_dsi_picture_parameter_set_multi (C function)&c.mipi_dsi_picture_parameter_set_multihNtauh1jxhj3hhhNhNubj)}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubj)}(h$mipi_dsi_picture_parameter_set_multih]j)}(h$mipi_dsi_picture_parameter_set_multih]h$mipi_dsi_picture_parameter_set_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhjhMubj)}(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}(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}(hjШhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͨubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjҨmodnameN classnameNjj)}j]j%)}jjsb&c.mipi_dsi_picture_parameter_set_multiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h/const struct drm_dsc_picture_parameter_set *ppsh](j)}(hjch]hconst}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdrm_dsc_picture_parameter_seth]hdrm_dsc_picture_parameter_set}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j&c.mipi_dsi_picture_parameter_set_multiasbuh1hhj ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hppsh]hpps}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjjhhubj)}(hhh]h)}(h&transmit the DSC PPS to the peripheralh]h&transmit the DSC PPS to the peripheral}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjةjjةjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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)}(hj:h]h/const struct drm_dsc_picture_parameter_set *pps}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj4ubj)}(hhh]h)}(h"VESA DSC 1.1 Picture Parameter Seth]h"VESA DSC 1.1 Picture Parameter Set}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjܩubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjܩubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_compression_mode_ext_multi (C function)%c.mipi_dsi_compression_mode_ext_multihNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjɪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjȪhMubj)}(h#mipi_dsi_compression_mode_ext_multih]j)}(h#mipi_dsi_compression_mode_ext_multih]h#mipi_dsi_compression_mode_ext_multi}(hj۪hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjתubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjȪhMubj)}(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}(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%)}jjݪsb%c.mipi_dsi_compression_mode_ext_multiasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool enableh](j)}(hjAh]hbool}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(henableh]henable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h#enum mipi_dsi_compression_algo algoh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_compression_algoh]hmipi_dsi_compression_algo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j1%c.mipi_dsi_compression_mode_ext_multiasbuh1hhjubj)}(h h]h }(hj٫hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halgoh]halgo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int pps_selectorh](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)}(h pps_selectorh]h pps_selector}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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$enable/disable DSC on the peripheralh]h$enable/disable DSC on the peripheral}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjȪhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h5``bool enable`` Whether to enable or disable the DSC 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&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj֬ubj)}(hhh]h)}(h$Whether to enable or disable the DSCh]h$Whether to enable or disable the DSC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֬ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hG``enum mipi_dsi_compression_algo algo`` Selected compression algorithm h](jt)}(h'``enum mipi_dsi_compression_algo algo``h]jz)}(hjh]h#enum mipi_dsi_compression_algo algo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(hSelected compression algorithmh]hSelected compression algorithm}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj*hMhjubjn)}(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)}(hjNh]hunsigned int pps_selector}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjHubj)}(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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jmhjchMhjubeh}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,mipi_dsi_compression_mode_multi (C function)!c.mipi_dsi_compression_mode_multihNtauh1jxhj3hhhNhNubj)}(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}(hjέhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʭhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjݭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʭhhhjܭhMubj)}(hmipi_dsi_compression_mode_multih]j)}(hmipi_dsi_compression_mode_multih]hmipi_dsi_compression_mode_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjʭhhhjܭhMubj)}(h1(struct mipi_dsi_multi_context *ctx, bool enable)h](j)}(h"struct mipi_dsi_multi_context *ctxh](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_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%)}jjsb!c.mipi_dsi_compression_mode_multiasbuh1hhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h bool enableh](j)}(hjAh]hbool}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(henableh]henable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(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$enable/disable DSC on the peripheralh]h$enable/disable DSC on the peripheral}(hj®hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjíhhhjܭhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjڮjjڮjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjޮ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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjubjn)}(h5``bool enable`` Whether to enable or disable the DSC 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&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hj6ubj)}(hhh]h)}(h$Whether to enable or disable the DSCh]h$Whether to enable or disable the DSC}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjޮubh)}(h**Description**h]j%)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjޮubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM hjޮubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mipi_dsi_dcs_nop_multi (C function)c.mipi_dsi_dcs_nop_multihNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj˯hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjʯhMubj)}(hmipi_dsi_dcs_nop_multih]j)}(hmipi_dsi_dcs_nop_multih]hmipi_dsi_dcs_nop_multi}(hjݯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٯubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjʯhMubj)}(h$(struct mipi_dsi_multi_context *ctx)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%)}jj߯sbc.mipi_dsi_dcs_nop_multiasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjRhhhNhNubah}(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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjʯhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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&]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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hoLike mipi_dsi_dcs_nop() but deals with errors in a way that makes it convenient to make several calls in a row.h]hoLike mipi_dsi_dcs_nop() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_enter_sleep_mode_multi (C function)%c.mipi_dsi_dcs_enter_sleep_mode_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hMvoid mipi_dsi_dcs_enter_sleep_mode_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hLvoid mipi_dsi_dcs_enter_sleep_mode_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM1ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhjKhM1ubj)}(h#mipi_dsi_dcs_enter_sleep_mode_multih]j)}(h#mipi_dsi_dcs_enter_sleep_mode_multih]h#mipi_dsi_dcs_enter_sleep_mode_multi}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhjKhM1ubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(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%)}jj`sb%c.mipi_dsi_dcs_enter_sleep_mode_multiasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjƱhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(hctxh]hctx}(hjӱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhj9hhhjKhM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhjKhM1ubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhjKhM1hj2hhubj)}(hhh]h)}(h send DCS ENTER_SLEEP_MODE packeth]h send DCS ENTER_SLEEP_MODE packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM1hjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** Like mipi_dsi_dcs_enter_sleep_mode() 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}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM5hjubji)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM2hj8ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM2hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShM2hj5ubah}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM4hjubh)}(h|Like mipi_dsi_dcs_enter_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_enter_sleep_mode() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/mipi_dsi_dcs_exit_sleep_mode_multi (C function)$c.mipi_dsi_dcs_exit_sleep_mode_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hLvoid mipi_dsi_dcs_exit_sleep_mode_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hKvoid mipi_dsi_dcs_exit_sleep_mode_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMJubj)}(h h]h }(hjͲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̲hMJubj)}(h"mipi_dsi_dcs_exit_sleep_mode_multih]j)}(h"mipi_dsi_dcs_exit_sleep_mode_multih]h"mipi_dsi_dcs_exit_sleep_mode_multi}(hj߲hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۲ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj̲hMJubj)}(h$(struct mipi_dsi_multi_context *ctx)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_exit_sleep_mode_multiasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj̲hMJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj̲hMJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj̲hMJhjhhubj)}(hhh]h)}(hsend DCS EXIT_SLEEP_MODE packeth]hsend DCS EXIT_SLEEP_MODE packet}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMJhj{hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj̲hMJubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** 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)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMNhjubji)}(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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMKhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjسhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԳhMKhjճubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMLhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(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_multihNtauh1jxhj3hhhNhNubj)}(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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMcubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhMcubj)}(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}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhjMhMcubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(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%)}jjbsb$c.mipi_dsi_dcs_set_display_off_multiasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj9)}(hj9h]h*}(hjȴhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjxubj)}(hctxh]hctx}(hjմhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubah}(h]h ]h"]h$]h&]jjuh1jhj;hhhjMhMcubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhjMhMcubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1jhjMhMchj4hhubj)}(hhh]h)}(hsend DCS SET_DISPLAY_OFF packeth]hsend DCS SET_DISPLAY_OFF packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMchjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMghjubji)}(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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMdhj:ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMdhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jmhjUhMdhj7ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h**Description**h]j%)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMfhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMehjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(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_multihNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM|ubj)}(h h]h }(hjϵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjεhM|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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݵubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjεhM|ubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](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_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_set_display_on_multiasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjVhhhNhNubah}(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)}(hsend DCS SET_DISPLAY_ON packeth]hsend DCS SET_DISPLAY_ON packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM|hj}hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjεhM|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjöhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM}hjubj)}(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&]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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(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_multihNtauh1jxhj3hhhNhNubj)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjOhMubj)}(hmipi_dsi_dcs_set_tear_on_multih]j)}(hmipi_dsi_dcs_set_tear_on_multih]hmipi_dsi_dcs_set_tear_on_multi}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhjOhMubj)}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(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%)}jjdsb c.mipi_dsi_dcs_set_tear_on_multiasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj9)}(hj9h]h*}(hjʷhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjzubj)}(hctxh]hctx}(hj׷hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h enum mipi_dsi_dcs_tear_mode modeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_dcs_tear_modeh]hmipi_dsi_dcs_tear_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.mipi_dsi_dcs_set_tear_on_multiasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmodeh]hmode}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhj=hhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhjOhMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjOhMhj6hhubj)}(hhh]h)}(hsend DCS SET_TEAR_ON packeth]hsend DCS SET_TEAR_ON packet}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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޸h]h enum mipi_dsi_dcs_tear_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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjظubj)}(hhh]h)}(h#the Tearing Effect Output Line modeh]h#the Tearing Effect Output Line mode}(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&]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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.mipi_dsi_turn_on_peripheral_multi (C function)#c.mipi_dsi_turn_on_peripheral_multihNtauh1jxhj3hhhNhNubj)}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubj)}(h!mipi_dsi_turn_on_peripheral_multih]j)}(h!mipi_dsi_turn_on_peripheral_multih]h!mipi_dsi_turn_on_peripheral_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMubj)}(h$(struct mipi_dsi_multi_context *ctx)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_turn_on_peripheral_multiasbuh1hhjubj)}(h h]h }(hjٹhhhNhNubah}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjlhMhjShhubj)}(hhh]h)}(h"sends a Turn On Peripheral commandh]h"sends a Turn On Peripheral command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hj_h]h"struct mipi_dsi_multi_context *ctx}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjYubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthMhjVubah}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj:ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(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_multihNtauh1jxhj3hhhNhNubj)}(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ߺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۺhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۺhhhjhMubj)}(hmipi_dsi_dcs_set_tear_off_multih]j)}(hmipi_dsi_dcs_set_tear_off_multih]hmipi_dsi_dcs_set_tear_off_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjۺhhhjhMubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](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_multi_contexth]hmipi_dsi_multi_context}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j%)}jjsb!c.mipi_dsi_dcs_set_tear_off_multiasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(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)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjԺhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(h^**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactionsh](h)}(h**Parameters**h]j%)}(hjh]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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh]jn)}(hL``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactionsh](jt)}(h&``struct mipi_dsi_multi_context *ctx``h]jz)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj޻ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjڻubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubah}(h]h ]h"]h$]h&]uh1jhjڻubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj׻ubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_dcs_soft_reset_multi (C function)c.mipi_dsi_dcs_soft_reset_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hGvoid mipi_dsi_dcs_soft_reset_multi (struct mipi_dsi_multi_context *ctx)h]j)}(hFvoid mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjHhMubj)}(hmipi_dsi_dcs_soft_reset_multih]j)}(hmipi_dsi_dcs_soft_reset_multih]hmipi_dsi_dcs_soft_reset_multi}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhjHhMubj)}(h$(struct mipi_dsi_multi_context *ctx)h]j)}(h"struct mipi_dsi_multi_context *ctxh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(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%)}jj]sbc.mipi_dsi_dcs_soft_reset_multiasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj9)}(hj9h]h*}(hjühhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsubj)}(hctxh]hctx}(hjмhhhNhNubah}(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.perform a software reset of the display moduleh]h.perform a software reset of the display module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(h**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions **Description** Like mipi_dsi_dcs_soft_reset() 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:348: ./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&]uh1jyhj9ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj5ubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(hvLike mipi_dsi_dcs_soft_reset() but deals with errors in a way that makes it convenient to make several calls in a row.h]hvLike mipi_dsi_dcs_soft_reset() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j6mipi_dsi_dcs_set_display_brightness_multi (C function)+c.mipi_dsi_dcs_set_display_brightness_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hcvoid mipi_dsi_dcs_set_display_brightness_multi (struct mipi_dsi_multi_context *ctx, u16 brightness)h]j)}(hbvoid mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, u16 brightness)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjʽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjɽhMubj)}(h)mipi_dsi_dcs_set_display_brightness_multih]j)}(h)mipi_dsi_dcs_set_display_brightness_multih]h)mipi_dsi_dcs_set_display_brightness_multi}(hjܽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؽubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjɽhMubj)}(h4(struct mipi_dsi_multi_context *ctx, u16 brightness)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%)}jj޽sb+c.mipi_dsi_dcs_set_display_brightness_multiasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjDhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 brightnessh](h)}(hhh]j)}(hu16h]hu16}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNjj)}j]j2+c.mipi_dsi_dcs_set_display_brightness_multiasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h brightnessh]h brightness}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(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(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjɽhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj۾jj۾jjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj7ubj)}(hhh]h)}(hbrightness valueh]hbrightness value}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhMhjubeh}(h]h ]h"]h$]h&]uh1jhhj߾ubh)}(h**Description**h]j%)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj߾ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_set_pixel_format_multi (C function)%c.mipi_dsi_dcs_set_pixel_format_multihNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hj̿hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj˿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&]jjuh1jhjhhhj˿hMubj)}(h/(struct mipi_dsi_multi_context *ctx, u8 format)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_set_pixel_format_multiasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 formath](h)}(hhh]j)}(hu8h]hu8}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]j4%c.mipi_dsi_dcs_set_pixel_format_multiasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hformath]hformat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(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)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj˿hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(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%)}(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:348: ./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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``u8 format`` pixel format h](jt)}(h ``u8 format``h]jz)}(hj?h]h u8 format}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj=ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj9ubj)}(hhh]h)}(h pixel formath]h pixel format}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjubeh}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j2mipi_dsi_dcs_set_column_address_multi (C function)'c.mipi_dsi_dcs_set_column_address_multihNtauh1jxhj3hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM1ubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM1ubj)}(h8(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h](j)}(h"struct mipi_dsi_multi_context *ctxh](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_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_set_column_address_multiasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 starth](h)}(hhh]j)}(hu16h]hu16}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j6'c.mipi_dsi_dcs_set_column_address_multiasbuh1hhjjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 endh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j6'c.mipi_dsi_dcs_set_column_address_multiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hendh]hend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM1ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM1hjhhubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM1hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhj3hNhNubj)}(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%)}(hj1h]h Parameters}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM5hj+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)}(hjPh]h"struct mipi_dsi_multi_context *ctx}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM3hjJubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehM3hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehM3hjGubjn)}(h+``u16 start`` first column of frame memory h](jt)}(h ``u16 start``h]jz)}(hjh]h u16 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM4hjubj)}(hhh]h)}(hfirst column of frame memoryh]hfirst column of frame memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM4hjGubjn)}(h(``u16 end`` last column of frame memory h](jt)}(h ``u16 end``h]jz)}(hjh]hu16 end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM5hjubj)}(hhh]h)}(hlast column of frame memoryh]hlast column of frame memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM5hjGubeh}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chM7hj+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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chM6hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0mipi_dsi_dcs_set_page_address_multi (C function)%c.mipi_dsi_dcs_set_page_address_multihNtauh1jxhj3hhhNhNubj)}(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}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMNubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhMNubj)}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMNubj)}(h8(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)h](j)}(h"struct mipi_dsi_multi_context *ctxh](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_dsi_multi_contexth]hmipi_dsi_multi_context}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjesb%c.mipi_dsi_dcs_set_page_address_multiasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj{ubj)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h u16 starth](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.mipi_dsi_dcs_set_page_address_multiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstarth]hstart}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hu16 endh](h)}(hhh]j)}(hu16h]hu16}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j%c.mipi_dsi_dcs_set_page_address_multiasbuh1hhj5ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hendh]hend}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhMNubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj:hhhjPhMNubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhjPhMNhj7hhubj)}(hhh]h)}(hIdefine the page extent of the frame memory accessed by the host processorh]hIdefine the page extent of the frame memory accessed by the host processor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMNubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(hXB**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``u16 start`` first page of frame memory ``u16 end`` last page of frame memory **Description** Like mipi_dsi_dcs_set_page_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%)}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMRhjubji)}(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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMPhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMPhjubjn)}(h)``u16 start`` first page of frame memory h](jt)}(h ``u16 start``h]jz)}(hj h]h u16 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMQhjubj)}(hhh]h)}(hfirst page of frame memoryh]hfirst page of frame memory}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMQhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj!hMQhjubjn)}(h&``u16 end`` last page of frame memory h](jt)}(h ``u16 end``h]jz)}(hjEh]hu16 end}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMRhj?ubj)}(hhh]h)}(hlast page of frame memoryh]hlast page of frame memory}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMRhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhMRhjubeh}(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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMThjubh)}(h|Like mipi_dsi_dcs_set_page_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_page_address() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1mipi_dsi_dcs_set_tear_scanline_multi (C function)&c.mipi_dsi_dcs_set_tear_scanline_multihNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h\void mipi_dsi_dcs_set_tear_scanline_multi (struct mipi_dsi_multi_context *ctx, u16 scanline)h]j)}(h[void mipi_dsi_dcs_set_tear_scanline_multi(struct mipi_dsi_multi_context *ctx, u16 scanline)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMkubj)}(h$mipi_dsi_dcs_set_tear_scanline_multih]j)}(h$mipi_dsi_dcs_set_tear_scanline_multih]h$mipi_dsi_dcs_set_tear_scanline_multi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMkubj)}(h2(struct mipi_dsi_multi_context *ctx, u16 scanline)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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j%)}jjsb&c.mipi_dsi_dcs_set_tear_scanline_multiasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hctxh]hctx}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 scanlineh](h)}(hhh]j)}(hu16h]hu16}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j<&c.mipi_dsi_dcs_set_tear_scanline_multiasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hscanlineh]hscanline}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMkubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMkubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMkhjhhubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMkhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMkubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(hX**Parameters** ``struct mipi_dsi_multi_context *ctx`` Context for multiple DSI transactions ``u16 scanline`` scanline to use as trigger **Description** Like mipi_dsi_dcs_set_tear_scanline() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMohjubji)}(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)}(hjh]h"struct mipi_dsi_multi_context *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMmhjubj)}(hhh]h)}(h%Context for multiple DSI transactionsh]h%Context for multiple DSI transactions}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMmhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj#hMmhjubjn)}(h,``u16 scanline`` scanline to use as trigger h](jt)}(h``u16 scanline``h]jz)}(hjGh]h u16 scanline}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMnhjAubj)}(hhh]h)}(hscanline to use as triggerh]hscanline to use as trigger}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMnhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jmhj\hMnhjubeh}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMphjubh)}(h}Like mipi_dsi_dcs_set_tear_scanline() 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_tear_scanline() 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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*mipi_dsi_driver_register_full (C function)c.mipi_dsi_driver_register_fullhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hUint mipi_dsi_driver_register_full (struct mipi_dsi_driver *drv, struct module *owner)h]j)}(hTint mipi_dsi_driver_register_full(struct mipi_dsi_driver *drv, struct module *owner)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hmipi_dsi_driver_register_fullh]j)}(hmipi_dsi_driver_register_fullh]hmipi_dsi_driver_register_full}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h3(struct mipi_dsi_driver *drv, struct module *owner)h](j)}(hstruct mipi_dsi_driver *drvh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmipi_dsi_driverh]hmipi_dsi_driver}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j%)}jjsbc.mipi_dsi_driver_register_fullasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrvh]hdrv}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct module *ownerh](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j>c.mipi_dsi_driver_register_fullasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrubj)}(hownerh]howner}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(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!register a driver for DSI devicesh]h!register a driver for DSI devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj3hNhNubj)}(h**Parameters** ``struct mipi_dsi_driver *drv`` DSI driver structure ``struct module *owner`` owner module **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:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubji)}(hhh](jn)}(h5``struct mipi_dsi_driver *drv`` DSI driver structure h](jt)}(h``struct mipi_dsi_driver *drv``h]jz)}(hj8h]hstruct mipi_dsi_driver *drv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhj2ubj)}(hhh]h)}(hDSI driver structureh]hDSI driver structure}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhMhj/ubjn)}(h&``struct module *owner`` owner module h](jt)}(h``struct module *owner``h]jz)}(hjqh]hstruct module *owner}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjkubj)}(hhh]h)}(h owner moduleh]h owner module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj/ubeh}(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:348: ./drivers/gpu/drm/drm_mipi_dsi.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&]uh1hhc/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:348: ./drivers/gpu/drm/drm_mipi_dsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'mipi_dsi_driver_unregister (C function)c.mipi_dsi_driver_unregisterhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(h=void mipi_dsi_driver_unregister (struct mipi_dsi_driver *drv)h]j)}(h` ``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}(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:357: ./include/drm/display/drm_dsc.hhKGhjubj@)}(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; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKIhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKvhjubji)}(hhh](jn)}(hM``line_buf_depth`` Bits per component for previous reconstructed line buffer h](jt)}(h``line_buf_depth``h]jz)}(hjh]hline_buf_depth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKKhjubj)}(hhh]h)}(h9Bits per component for previous reconstructed line bufferh]h9Bits per component for previous reconstructed line buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKKhjubjn)}(h<``bits_per_component`` Bits per component to code (8/10/12) h](jt)}(h``bits_per_component``h]jz)}(hj4h]hbits_per_component}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKPhj.ubj)}(hhh]h)}(h$Bits per component to code (8/10/12)h]h$Bits per component to code (8/10/12)}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKPhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhjIhKPhjubjn)}(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)}(hjmh]h convert_rgb}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKUhjgubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKThjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhjhKUhjubjn)}(hB``slice_count`` Number fo slices per line used by the DSC encoder h](jt)}(h``slice_count``h]jz)}(hjh]h slice_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKZhjubj)}(hhh]h)}(h1Number fo slices per line used by the DSC encoderh]h1Number fo slices per line used by the DSC encoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKZhjubjn)}(h.``slice_width`` Width of each slice in pixels h](jt)}(h``slice_width``h]jz)}(hjh]h slice_width}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhK^hjubj)}(hhh]h)}(hWidth of each slice in pixelsh]hWidth of each slice in pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK^hjubjn)}(h(``slice_height`` Slice height in pixels h](jt)}(h``slice_height``h]jz)}(hjh]h slice_height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKbhjubj)}(hhh]h)}(hSlice height in pixelsh]hSlice height in pixels}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKbhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj.hKbhjubjn)}(h?``simple_422`` True if simple 4_2_2 mode is enabled else False h](jt)}(h``simple_422``h]jz)}(hjRh]h simple_422}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKfhjLubj)}(hhh]h)}(h/True if simple 4_2_2 mode is enabled else Falseh]h/True if simple 4_2_2 mode is enabled else False}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKfhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjghKfhjubjn)}(h9``pic_width`` Width of the input display frame in pixels h](jt)}(h ``pic_width``h]jz)}(hjh]h pic_width}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKjhjubj)}(hhh]h)}(h*Width of the input display frame in pixelsh]h*Width of the input display frame in pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKjhjubjn)}(h:``pic_height`` Vertical height of the input display frame h](jt)}(h``pic_height``h]jz)}(hjh]h pic_height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKnhjubj)}(hhh]h)}(h*Vertical height of the input display frameh]h*Vertical height of the input display frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKnhjubjn)}(hR``rc_tgt_offset_high`` Offset to bits/group used by RC to determine QP adjustment h](jt)}(h``rc_tgt_offset_high``h]jz)}(hjh]hrc_tgt_offset_high}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKrhjubj)}(hhh]h)}(h:Offset to bits/group used by RC to determine QP adjustmenth]h:Offset to bits/group used by RC to determine QP adjustment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKrhjubjn)}(hQ``rc_tgt_offset_low`` Offset to bits/group used by RC to determine QP adjustment h](jt)}(h``rc_tgt_offset_low``h]jz)}(hj6h]hrc_tgt_offset_low}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKwhj0ubj)}(hhh]h)}(h:Offset to bits/group used by RC to determine QP adjustmenth]h:Offset to bits/group used by RC to determine QP adjustment}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKwhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhKwhjubjn)}(hU``bits_per_pixel`` Target bits per pixel with 4 fractional bits, bits_per_pixel << 4 h](jt)}(h``bits_per_pixel``h]jz)}(hjoh]hbits_per_pixel}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhK|hjiubj)}(hhh]h)}(hATarget bits per pixel with 4 fractional bits, bits_per_pixel << 4h]hATarget bits per pixel with 4 fractional bits, bits_per_pixel << 4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhK|hjubjn)}(hX``rc_edge_factor`` Factor to determine if an edge is present based on the bits produced h](jt)}(h``rc_edge_factor``h]jz)}(hjh]hrc_edge_factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(hDFactor to determine if an edge is present based on the bits producedh]hDFactor to determine if an edge is present based on the bits produced}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hR``rc_quant_incr_limit1`` Slow down incrementing once the range reaches this value h](jt)}(h``rc_quant_incr_limit1``h]jz)}(hjh]hrc_quant_incr_limit1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h8Slow down incrementing once the range reaches this valueh]h8Slow down incrementing once the range reaches this value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hR``rc_quant_incr_limit0`` Slow down incrementing once the range reaches this value h](jt)}(h``rc_quant_incr_limit0``h]jz)}(hjh]hrc_quant_incr_limit0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h8Slow down incrementing once the range reaches this valueh]h8Slow down incrementing once the range reaches this value}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hKhjubjn)}(hJ``initial_xmit_delay`` Number of pixels to delay the initial transmission h](jt)}(h``initial_xmit_delay``h]jz)}(hjSh]hinitial_xmit_delay}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjMubj)}(hhh]h)}(h2Number of pixels to delay the initial transmissionh]h2Number of pixels to delay the initial transmission}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhKhjubjn)}(h``initial_dec_delay`` Initial decoder delay, 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)}(hjh]hinitial_dec_delay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(hInitial decoder delay, number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels.h]hInitial decoder delay, number of pixel times that the decoder accumulates data in its rate buffer before starting to decode and output pixels.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hs``block_pred_enable`` True if block prediction is used to code any groups within the picture. False if BP not used h](jt)}(h``block_pred_enable``h]jz)}(hjh]hblock_pred_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h\True if block prediction is used to code any groups within the picture. False if BP not usedh]h\True if block prediction is used to code any groups within the picture. False if BP not used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hi``first_line_bpg_offset`` Number of additional bits allocated for each group on the first line of slice. h](jt)}(h``first_line_bpg_offset``h]jz)}(hjh]hfirst_line_bpg_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(hNNumber of additional bits allocated for each group on the first line of slice.h]hNNumber of additional bits allocated for each group on the first line of slice.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hC``initial_offset`` Value to use for RC model offset at slice start h](jt)}(h``initial_offset``h]jz)}(hj:h]hinitial_offset}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhj4ubj)}(hhh]h)}(h/Value to use for RC model offset at slice starth]h/Value to use for RC model offset at slice start}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjOhKhjubjn)}(h@``rc_buf_thresh`` Thresholds defining each of the buffer ranges h](jt)}(h``rc_buf_thresh``h]jz)}(hjsh]h rc_buf_thresh}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjmubj)}(hhh]h)}(h-Thresholds defining each of the buffer rangesh]h-Thresholds defining each of the buffer ranges}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h``rc_range_params`` Parameters for each of the RC ranges defined in :c:type:`struct drm_dsc_rc_range_parameters ` h](jt)}(h``rc_range_params``h]jz)}(hjh]hrc_range_params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(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 }(hjhhhNhNubh)}(hJ:c:type:`struct drm_dsc_rc_range_parameters `h]jz)}(hjh]h"struct drm_dsc_rc_range_parameters}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_rc_range_parametersuh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h)``rc_model_size`` Total size of RC model h](jt)}(h``rc_model_size``h]jz)}(hjh]h rc_model_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(hTotal size of RC modelh]hTotal size of RC model}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(hB``flatness_min_qp`` Minimum QP where flatness information is sent h](jt)}(h``flatness_min_qp``h]jz)}(hj>h]hflatness_min_qp}(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:357: ./include/drm/display/drm_dsc.hhKhj8ubj)}(hhh]h)}(h-Minimum QP where flatness information is senth]h-Minimum QP where flatness information is sent}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShKhjubjn)}(hB``flatness_max_qp`` Maximum QP where flatness information is sent h](jt)}(h``flatness_max_qp``h]jz)}(hjwh]hflatness_max_qp}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjqubj)}(hhh]h)}(h-Maximum QP where flatness information is senth]h-Maximum QP where flatness information is sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h;``initial_scale_value`` Initial value for the scale factor h](jt)}(h``initial_scale_value``h]jz)}(hjh]hinitial_scale_value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h"Initial value for the scale factorh]h"Initial value for the scale factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(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)}(hjh]hscale_decrement_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(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)}(hj#h]hscale_increment_interval}(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:357: ./include/drm/display/drm_dsc.hhKhjubj)}(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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hKhjubjn)}(h8``nfl_bpg_offset`` Non first line BPG offset to be used h](jt)}(h``nfl_bpg_offset``h]jz)}(hj]h]hnfl_bpg_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:357: ./include/drm/display/drm_dsc.hhKhjWubj)}(hhh]h)}(h$Non first line BPG offset to be usedh]h$Non first line BPG offset to be used}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhKhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhjrhKhjubjn)}(h:``slice_bpg_offset`` BPG offset used to enforce slice bit h](jt)}(h``slice_bpg_offset``h]jz)}(hjh]hslice_bpg_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h$BPG offset used to enforce slice bith]h$BPG offset used to enforce slice bit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h=``final_offset`` Final RC linear transformation offset value h](jt)}(h``final_offset``h]jz)}(hjh]h final_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h+Final RC linear transformation offset valueh]h+Final RC linear transformation offset value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h>``vbr_enable`` True if VBR mode is enabled, false if disabled h](jt)}(h``vbr_enable``h]jz)}(hjh]h vbr_enable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h.True if VBR mode is enabled, false if disabledh]h.True if VBR mode is enabled, false if disabled}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h7``mux_word_size`` Mux word size (in bits) for SSM mode h](jt)}(h``mux_word_size``h]jz)}(hjAh]h mux_word_size}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhj;ubj)}(hhh]h)}(h$Mux word size (in bits) for SSM modeh]h$Mux word size (in bits) for SSM mode}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhjVhKhjubjn)}(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)}(hjzh]hslice_chunk_size}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjtubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h-``rc_bits`` Rate control buffer size in bits h](jt)}(h ``rc_bits``h]jz)}(hjh]hrc_bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h Rate control buffer size in bitsh]h Rate control buffer size in bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h(``dsc_version_minor`` DSC minor version h](jt)}(h``dsc_version_minor``h]jz)}(hjh]hdsc_version_minor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(hDSC minor versionh]hDSC minor version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h(``dsc_version_major`` DSC major version h](jt)}(h``dsc_version_major``h]jz)}(hj&h]hdsc_version_major}(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:357: ./include/drm/display/drm_dsc.hhKhj ubj)}(hhh]h)}(hDSC major versionh]hDSC major version}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKhjubjn)}(h:``native_422`` True if Native 4:2:2 supported, else false h](jt)}(h``native_422``h]jz)}(hj_h]h native_422}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjYubj)}(hhh]h)}(h*True if Native 4:2:2 supported, else falseh]h*True if Native 4:2:2 supported, else false}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthKhjubjn)}(h:``native_420`` True if Native 4:2:0 supported else false. h](jt)}(h``native_420``h]jz)}(hjh]h native_420}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKhjubj)}(hhh]h)}(h*True if Native 4:2:0 supported else false.h]h*True if Native 4:2:0 supported else false.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(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)}(hjh]hsecond_line_bpg_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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)}(hj h]hnsl_bpg_offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(hQ``second_line_offset_adj`` Offset adjustment for second line in Native 4:2:0 modeh](jt)}(h``second_line_offset_adj``h]jz)}(hjDh]hsecond_line_offset_adj}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM hj>ubj)}(hhh]h)}(h6Offset adjustment for second line in Native 4:2:0 modeh]h6Offset adjustment for second line in Native 4:2:0 mode}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhM hjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhjhNubh)}(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:357: ./include/drm/display/drm_dsc.hhMhjahhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKDhjahhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dsc_picture_parameter_set (C struct)c.drm_dsc_picture_parameter_sethNtauh1jxhjahhhjhNubj)}(hhh](j)}(hdrm_dsc_picture_parameter_seth]j)}(h$struct drm_dsc_picture_parameter_seth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhKJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKJubj)}(hdrm_dsc_picture_parameter_seth]j)}(hjh]hdrm_dsc_picture_parameter_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKJubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKJhjhhubj)}(hhh]h)}(h-Represents 128 bytes of Picture Parameter Seth]h-Represents 128 bytes of Picture Parameter Set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKJubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjahjhNubj)}(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}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj'ubh:}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj#ubj@)}(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; };}hjDsbah}(h]h ]h"]h$]h&]jjuh1j?hb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj#ubh)}(h **Members**h]j%)}(hjUh]hMembers}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMIhj#ubji)}(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)}(hjth]h dsc_version}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjnubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(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)}(hjh]hpps_identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM%hjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM%hjkubjn)}(h*``pps_reserved`` PPS2[7:0]- RESERVED Byte h](jt)}(h``pps_reserved``h]jz)}(hjh]h pps_reserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM*hjubj)}(hhh]h)}(hPPS2[7:0]- RESERVED Byteh]hPPS2[7:0]- RESERVED Byte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM*hjkubjn)}(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)}(hj!h]hpps_3}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM7hjubj)}(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)}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM/hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hM7hjkubjn)}(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)}(hj[h]hpps_4}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMEhjUubj)}(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}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM<hjqubah}(h[]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphMEhjkubjn)}(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)}(hjh]hbits_per_pixel_low}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMKhjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMKhjkubjn)}(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)}(hjh]h pic_height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMQhjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMQhjkubjn)}(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)}(hj h]h pic_width}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMWhjubj)}(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.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMWhjkubjn)}(hK``slice_height`` PPS10[7:0], PPS11[7:0] - Slice height in units of pixels. h](jt)}(h``slice_height``h]jz)}(hjCh]h slice_height}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM\hj=ubj)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM\hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jmhjXhM\hjkubjn)}(hI``slice_width`` PPS12[7:0], PPS13[7:0] - Slice width in terms of pixels. h](jt)}(h``slice_width``h]jz)}(hj|h]h slice_width}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMahjvubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjhMahjkubjn)}(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)}(hjh]h chunk_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMghjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMghjkubjn)}(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)}(hjh]hinitial_xmit_delay_high}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMohjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMohjkubjn)}(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)}(hj)h]hinitial_xmit_delay_low}(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:357: ./include/drm/display/drm_dsc.hhMthj#ubj)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMthj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMthjkubjn)}(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)}(hjbh]hinitial_dec_delay}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhM{hj\ubj)}(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.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMyhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhM{hjkubjn)}(h)``pps20_reserved`` PPS20[7:0] - Reserved h](jt)}(h``pps20_reserved``h]jz)}(hjh]hpps20_reserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(hhh]h)}(hPPS20[7:0] - Reservedh]hPPS20[7:0] - Reserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(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)}(hjh]hinitial_scale_value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(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)}(hjh]hscale_increment_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj ubj)}(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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhjkubjn)}(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)}(hjIh]hscale_decrement_interval_high}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjCubj)}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jmhj^hMhjkubjn)}(hW``scale_decrement_interval_low`` PPS25[7:0] - Lower 8 bits of scale decrement interval h](jt)}(h ``scale_decrement_interval_low``h]jz)}(hjh]hscale_decrement_interval_low}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj}ubj)}(hhh]h)}(h5PPS25[7:0] - Lower 8 bits of scale decrement intervalh]h5PPS25[7:0] - Lower 8 bits of scale decrement interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(h``pps26_reserved`` PPS26[7:0] h](jt)}(h``pps26_reserved``h]jz)}(hjh]hpps26_reserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(hhh]h)}(h PPS26[7:0]h]h PPS26[7:0]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(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)}(hjh]hfirst_line_bpg_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjkubjn)}(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)}(hj/h]hnfl_bpg_offset}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhj)ubj)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhjkubjn)}(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)}(hjih]hslice_bpg_offset}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjgubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjcubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jmhj~hMhjkubjn)}(hC``initial_offset`` PPS32,33[7:0] - Initial value for rcXformOffset h](jt)}(h``initial_offset``h]jz)}(hjh]hinitial_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(hhh]h)}(h/PPS32,33[7:0] - Initial value for rcXformOffseth]h/PPS32,33[7:0] - Initial value for rcXformOffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjkubjn)}(hN``final_offset`` PPS34,35[7:0] - Maximum end-of-slice value for rcXformOffset h](jt)}(h``final_offset``h]jz)}(hjh]h final_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMhjubj)}(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:357: ./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:357: ./include/drm/display/drm_dsc.hhMMhjubh)}(h **Members**h]j%)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./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)}(hjh]h pps_header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMRhjubj)}(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 }(hjhhhNhNubh)}(h.:c:type:`struct dp_sdp_header `h]jz)}(hj!h]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:357: ./include/drm/display/drm_dsc.hhMQhjubeh}(h]h ]h"]h$]h&]uh1hhj>hMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMRhjubjn)}(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)}(hjWh]h pps_payload}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshb/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:357: ./include/drm/display/drm_dsc.hhMShjQubj)}(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 }(hjphhhNhNubh)}(hN:c:type:`struct drm_dsc_picture_parameter_set `h]jz)}(hjzh]h$struct drm_dsc_picture_parameter_set}(hj|hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_picture_parameter_setuh1hhjlhMShjpubeh}(h]h ]h"]h$]h&]uh1hhjlhMShjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhMShjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhjhNubh)}(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:357: ./include/drm/display/drm_dsc.hhMWhjahhubh)}(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}(hjhhhNhNubah}(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:357: ./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)}(hjh]h$struct drm_dsc_picture_parameter_set}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_picture_parameter_setuh1hhjhMHhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMHhjahhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_dsc_dp_pps_header_init (C function)c.drm_dsc_dp_pps_header_inithNtauh1jxhjahhhNhNubj)}(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}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK$ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhK$ubj)}(hdrm_dsc_dp_pps_header_inith]j)}(hdrm_dsc_dp_pps_header_inith]hdrm_dsc_dp_pps_header_init}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhjJhK$ubj)}(h"(struct dp_sdp_header *pps_header)h]j)}(h struct dp_sdp_header *pps_headerh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h dp_sdp_headerh]h dp_sdp_header}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj_sbc.drm_dsc_dp_pps_header_initasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjuubj)}(h pps_headerh]h pps_header}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjqubah}(h]h ]h"]h$]h&]jjuh1jhj8hhhjJhK$ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjJhK$ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1jhjJhK$hj1hhubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK$hjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhK$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjahNhNubj)}(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%)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK(hjubji)}(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)}(hj=h]h struct dp_sdp_header *pps_header}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK'hj7ubj)}(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 }(hjVhhhNhNubh)}(h.:c:type:`struct dp_sdp_header `h]jz)}(hj`h]hstruct dp_sdp_header}(hjbhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj dp_sdp_headeruh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK&hjVubeh}(h]h ]h"]h$]h&]uh1hhj}hK&hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjRhK'hj4ubah}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK)hjubh)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK(hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dsc_dp_rc_buffer_size (C function)c.drm_dsc_dp_rc_buffer_sizehNtauh1jxhjahhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK8ubj)}(hdrm_dsc_dp_rc_buffer_sizeh]j)}(hdrm_dsc_dp_rc_buffer_sizeh]hdrm_dsc_dp_rc_buffer_size}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK8ubj)}(h,(u8 rc_buffer_block_size, u8 rc_buffer_size)h](j)}(hu8 rc_buffer_block_sizeh](h)}(hhh]j)}(hu8h]hu8}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j%)}jj#sbc.drm_dsc_dp_rc_buffer_sizeasbuh1hhj9ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hrc_buffer_block_sizeh]hrc_buffer_block_size}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubj)}(hu8 rc_buffer_sizeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j\c.drm_dsc_dp_rc_buffer_sizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrc_buffer_sizeh]hrc_buffer_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhK8ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK8ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK8hjhhubj)}(hhh]h)}(hget rc buffer size in bytesh]hget rc buffer size in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjahNhNubj)}(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%)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK` ``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%)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chKWhjAubji)}(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)}(hjfh]h1struct drm_dsc_picture_parameter_set *pps_payload}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjdubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chKVhj`ubj)}(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 }(hjhhhNhNubh)}(hN:c:type:`struct drm_dsc_picture_parameter_set `h]jz)}(hjh]h$struct drm_dsc_picture_parameter_set}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_picture_parameter_setuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chKUhjubeh}(h]h ]h"]h$]h&]uh1hhjhKUhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jmhj{hKVhj]ubjn)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chKYhjubj)}(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)}(hjh]hstruct drm_dsc_config}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_dsc_configuh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chKXhjubeh}(h]h ]h"]h$]h&]uh1hhjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKYhj]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&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK[hjAubh)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chK[hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_dsc_set_const_params (C function)c.drm_dsc_set_const_paramshNtauh1jxhjahhhNhNubj)}(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}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhjmhMubj)}(hdrm_dsc_set_const_paramsh]j)}(hdrm_dsc_set_const_paramsh]hdrm_dsc_set_const_params}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[hhhjmhMubj)}(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 }(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%)}jjsbc.drm_dsc_set_const_paramsasbuh1hhjubj)}(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&]jjuh1jhj[hhhjmhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjmhMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jhjmhMhjThhubj)}(hhh]h)}(hGSet DSC parameters considered typically constant across operation modesh]hGSet DSC parameters considered typically constant across operation modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjmhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhjahNhNubj)}(hg**Parameters** ``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](h)}(h**Parameters**h]j%)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./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)}(hj`h]hstruct drm_dsc_config *vdsc_cfg}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjZubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhMhjWubah}(h]h ]h"]h$]h&]uh1jhhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_dsc_set_rc_buf_thresh (C function)c.drm_dsc_set_rc_buf_threshhNtauh1jxhjahhhNhNubj)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chM0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM0ubj)}(hdrm_dsc_set_rc_buf_threshh]j)}(hdrm_dsc_set_rc_buf_threshh]hdrm_dsc_set_rc_buf_thresh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM0ubj)}(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 }(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%)}jjsbc.drm_dsc_set_rc_buf_threshasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvdsc_cfgh]hvdsc_cfg}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM0ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM0hjhhubj)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chM0hjwhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjahNhNubj)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chM4hjubji)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chM6hjubj)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_dsc_setup_rc_params (C function)c.drm_dsc_setup_rc_paramshNtauh1jxhjahhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hMubj)}(hdrm_dsc_setup_rc_paramsh]j)}(hdrm_dsc_setup_rc_paramsh]hdrm_dsc_setup_rc_params}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj#hMubj)}(h@(struct drm_dsc_config *vdsc_cfg, enum drm_dsc_params_type type)h](j)}(hstruct drm_dsc_config *vdsc_cfgh](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j%)}jj8sbc.drm_dsc_setup_rc_paramsasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubj)}(hvdsc_cfgh]hvdsc_cfg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(henum drm_dsc_params_type typeh](j)}(hjh]henum}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_dsc_setup_rc_paramsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubeh}(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)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj5hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj#hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1jhhhjahNhNubj)}(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%)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjTubji)}(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)}(hjyh]hstruct drm_dsc_config *vdsc_cfg}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjwubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjsubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjpubjn)}(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:360: ./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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjpubeh}(h]h ]h"]h$]h&]uh1jhhjTubh)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjTubh)}(h$0 or -error code in case of an errorh]h$0 or -error code in case of an error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_dsc_compute_rc_parameters (C function)c.drm_dsc_compute_rc_parametershNtauh1jxhjahhhNhNubj)}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hMubj)}(hdrm_dsc_compute_rc_parametersh]j)}(hdrm_dsc_compute_rc_parametersh]hdrm_dsc_compute_rc_parameters}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj@hMubj)}(h!(struct drm_dsc_config *vdsc_cfg)h]j)}(hstruct drm_dsc_config *vdsc_cfgh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(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%)}jjUsbc.drm_dsc_compute_rc_parametersasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hvdsc_cfgh]hvdsc_cfg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubah}(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)}(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 }(hjhhhNhNubh)}(h0:c:type:`struct drm_dsc_config `h]jz)}(hjh]hstruct drm_dsc_config}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]jc.drm_dsc_compute_rc_parametersasbjdrm_dsc_configuh1hhjJhK$hjubhd in accordance with the DSC 1.2 specification. Some configuration fields must be present beforehand.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhjahNhNubj)}(hg**Parameters** ``struct drm_dsc_config *vdsc_cfg`` DSC Configuration data partially filled by driverh](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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj6ubji)}(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)}(hj[h]hstruct drm_dsc_config *vdsc_cfg}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjUubj)}(hhh]h)}(h1DSC Configuration data partially filled by driverh]h1DSC Configuration data partially filled by driver}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jmhjphMhjRubah}(h]h ]h"]h$]h&]uh1jhhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dsc_get_bpp_int (C function)c.drm_dsc_get_bpp_inthNtauh1jxhjahhhNhNubj)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_dsc_get_bpp_inth]j)}(hjh]hdrm_dsc_get_bpp_int}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jc.drm_dsc_get_bpp_intasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hvdsc_cfgh]hvdsc_cfg}(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)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjahNhNubj)}(h{**Parameters** ``const struct drm_dsc_config *vdsc_cfg`` Pointer to DRM DSC config struct **Return** Integer BPP 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:360: ./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)}(hjh]h%const struct 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:360: ./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&]uh1jhhjubh)}(h **Return**h]j%)}(hjh]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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubh)}(hInteger BPP valueh]hInteger BPP value}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dsc_initial_scale_value (C function)c.drm_dsc_initial_scale_valuehNtauh1jxhjahhhNhNubj)}(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}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j%)}jdrm_dsc_initial_scale_valuesbc.drm_dsc_initial_scale_valueasbuh1hhj`hhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjhMubj)}(hdrm_dsc_initial_scale_valueh]j)}(hjh]hdrm_dsc_initial_scale_value}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhjhMubj)}(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}(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]jc.drm_dsc_initial_scale_valueasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdsch]hdsc}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj\hhhjhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjYhhubj)}(hhh]h)}(h:Calculate the initial scale value for the given DSC configh]h:Calculate the initial scale value for the given DSC config}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhjahNhNubj)}(h**Parameters** ``const struct drm_dsc_config *dsc`` Pointer to DRM DSC config struct **Return** Calculated initial scale valueh](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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjnubji)}(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:360: ./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&]uh1jhhjnubh)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjnubh)}(hCalculated initial scale valueh]hCalculated initial scale value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_dsc_flatness_det_thresh (C function)c.drm_dsc_flatness_det_threshhNtauh1jxhjahhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_dsc_flatness_det_threshsbc.drm_dsc_flatness_det_threshasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj7hMubj)}(hdrm_dsc_flatness_det_threshh]j)}(hj4h]hdrm_dsc_flatness_det_thresh}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj7hMubj)}(h"(const struct drm_dsc_config *dsc)h]j)}(h const struct drm_dsc_config *dsch](j)}(hjch]hconst}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hdrm_dsc_configh]hdrm_dsc_config}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j2c.drm_dsc_flatness_det_threshasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjaubj)}(hdsch]hdsc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj7hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj7hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj7hMhjhhubj)}(hhh]h)}(h:Calculate the flatness_det_thresh for the given DSC configh]h:Calculate the flatness_det_thresh for the given DSC config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjahNhNubj)}(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%)}(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:360: ./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)}(hjBh]h const struct drm_dsc_config *dsc}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./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}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jmhjWhMhj9ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj}h]hReturn}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubh)}(h$Calculated flatness det thresh valueh]h$Calculated flatness det thresh value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_dsc_dump_config (C function)c.drm_dsc_dump_confighNtauh1jxhjahhhNhNubj)}(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:360: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(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%)}jjsbc.drm_dsc_dump_configasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjDh]hp}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int indenth](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hindenth]hindent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j9c.drm_dsc_dump_configasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcfgh]hcfg}(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#Dump the provided DSC configurationh]h#Dump the provided DSC configuration}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjahNhNubj)}(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%)}(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:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj]ubji)}(hhh](jn)}(h6``struct drm_printer *p`` The printer used for output h](jt)}(h``struct drm_printer *p``h]jz)}(hjh]hstruct drm_printer *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjyubjn)}(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:360: ./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&]uh1jmhjhMhjyubjn)}(h@``const struct drm_dsc_config *cfg`` DSC configuration to print h](jt)}(h$``const struct drm_dsc_config *cfg``h]jz)}(hjh]h const struct drm_dsc_config *cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhjubj)}(hhh]h)}(hDSC configuration to printh]hDSC configuration to print}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjyubeh}(h]h ]h"]h$]h&]uh1jhhj]ubh)}(h**Description**h]j%)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj]ubh)}(h0Print the provided DSC configuration in **cfg**.h](h(Print the provided DSC configuration in }(hjEhhhNhNubj%)}(h**cfg**h]hcfg}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubh.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:360: ./drivers/gpu/drm/display/drm_dsc_helper.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjahhhNhNubeh}(h]5display-stream-compression-helper-functions-referenceah ]h"]5display stream compression helper functions referenceah$]h&]uh1hhhhhhhhM`ubh)}(hhh](h)}(h)Output Probing Helper Functions Referenceh]h)Output Probing Helper Functions Reference}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhhhhhMlubh)}(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 }(hjhhhNhNubh)}(h>:c:type:`drm_connector_funcs.fill_modes `h]jz)}(hjh]hdrm_connector_funcs.fill_modes}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./drivers/gpu/drm/drm_probe_helper.chK1hjubh: interface with drm_helper_probe_single_connector_modes().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjuhhubh)}(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:366: ./drivers/gpu/drm/drm_probe_helper.chK5hjuhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:366: ./drivers/gpu/drm/drm_probe_helper.chK9hjuhhubh)}(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)}(hjh]h!struct drm_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:366: ./drivers/gpu/drm/drm_probe_helper.chK=hjubh for the details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK=hjuhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_kms_helper_poll_enable (C function)c.drm_kms_helper_poll_enablehNtauh1jxhjuhhhNhNubj)}(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}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMubj)}(hdrm_kms_helper_poll_enableh]j)}(hdrm_kms_helper_poll_enableh]hdrm_kms_helper_poll_enable}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](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_deviceh]h drm_device}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j%)}jjDsbc.drm_kms_helper_poll_enableasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hdevh]hdev}(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)}(hre-enable output polling.h]hre-enable output polling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(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%)}(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:369: ./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)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM hjubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hj;hhhNhNubah}(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%)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM"hjubh)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM!hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM%hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM(hjubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_kms_helper_poll_reschedule (C function) c.drm_kms_helper_poll_reschedulehNtauh1jxhjuhhhNhNubj)}(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:369: ./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)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(hconnector to probeh]hconnector to probe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h&``uint32_t maxX`` max width for modes h](jt)}(h``uint32_t maxX``h]jz)}(hj(h]h uint32_t maxX}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj"ubj)}(hhh]h)}(hmax width for modesh]hmax width for modes}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj=hMhjubjn)}(h'``uint32_t maxY`` max height for modes h](jt)}(h``uint32_t maxY``h]jz)}(hjah]h uint32_t maxY}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj[ubj)}(hhh]h)}(hmax height for modesh]hmax height for modes}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jmhjvhMhjubeh}(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:369: ./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:369: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h**maxY**h]hmaxY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh0 parameters) and put into the normal modes list.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(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 }(hjhhhNhNubh)}(hB:c:type:`drm_connector_funcs.fill_modes\(\) `h]jz)}(hj$h]h drm_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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubhU vfunc for drivers that use the CRTC helpers for output mode filtering and detection.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjubh)}(h!The basic procedure is as followsh]h!The basic procedure is as follows}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj^ubah}(h]h ]h"]h$]h&]uh1hhj[ubh)}(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.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjwubh)}(hhh](h)}(hQ:c:type:`drm_connector_helper_funcs.get_modes ` vfunch]h)}(hjh](h)}(hK:c:type:`drm_connector_helper_funcs.get_modes `h]jz)}(hjh]h$drm_connector_helper_funcs.get_modes}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM hjubh vfunc}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM hjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j4uh1hhjhM hjwubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjwubeh}(h]h ]h"]h$]h&]uh1hhj[ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubah}(h]h ]h"]h$]h&]uh1hhj[ubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(hhh](h)}(h6drm_mode_validate_basic() performs basic sanity checksh]h)}(hj)h]h6drm_mode_validate_basic() performs basic sanity checks}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj'ubah}(h]h ]h"]h$]h&]uh1hhj$ubh)}(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 }(hjChhhNhNubj%)}(h**maxX**h]hmaxX}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh and }(hjChhhNhNubj%)}(h**maxY**h]hmaxY}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh (if specified)}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj?ubah}(h]h ]h"]h$]h&]uh1hhj$ubh)}(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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj|ubah}(h]h ]h"]h$]h&]uh1hhj$ubh)}(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 }(hjhhhNhNubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh or }(hjhhhNhNubh)}(hP:c:type:`drm_connector_helper_funcs.mode_valid_ctx `h]jz)}(hjh]h)drm_connector_helper_funcs.mode_valid_ctx}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhjhMhjubh7 helpers can perform driver and/or sink specific checks}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1hhj$ubh)}(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 }(hjhhhNhNubh)}(hB:c:type:`drm_crtc_helper_funcs.mode_valid `h]jz)}(hjh]h drm_crtc_helper_funcs.mode_valid}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM!hjubh, }(hjhhhNhNubh)}(h8:c:type:`drm_bridge_funcs.mode_valid `h]jz)}(hj&h]hdrm_bridge_funcs.mode_valid}(hj(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_bridge_funcsuh1hhjhM!hjubh and }(hjhhhNhNubh)}(hH:c:type:`drm_encoder_helper_funcs.mode_valid `h]jz)}(hjIh]h#drm_encoder_helper_funcs.mode_valid}(hjKhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjhM!hjubho helpers can perform driver and/or source specific checks which are also enforced by the modeset/atomic helpers}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1hhj$ubeh}(h]h ]h"]h$]h&]j8j4uh1hhj8hMhjubeh}(h]h ]h"]h$]h&]uh1hhj[ubh)}(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()).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM&hjubah}(h]h ]h"]h$]h&]uh1hhj[ubeh}(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:369: ./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:369: ./drivers/gpu/drm/drm_probe_helper.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_kms_helper_hotplug_event (C function)c.drm_kms_helper_hotplug_eventhNtauh1jxhjuhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_kms_helper_hotplug_eventh]j)}(hdrm_kms_helper_hotplug_eventh]hdrm_kms_helper_hotplug_event}(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}(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%)}jjsbc.drm_kms_helper_hotplug_eventasbuh1hhj3ubj)}(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/ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(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%)}(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:369: ./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)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(h(drm_device whose connector state changedh]h(drm_device whose connector state 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&]uh1jhhjubh)}(h**Description**h]j%)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_kms_helper_connector_hotplug_event (C function)(c.drm_kms_helper_connector_hotplug_eventhNtauh1jxhjuhhhNhNubj)}(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:369: ./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&]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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j%)}jjsb(c.drm_kms_helper_connector_hotplug_eventasbuh1hhjubj)}(h h]h }(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj1 hhhNhNubah}(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)}(h&fire off a KMS connector hotplug eventh]h&fire off a KMS connector hotplug event}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhje hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjuhNhNubj)}(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:369: ./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)}(hj h]hstruct drm_connector *connector}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubj)}(hhh]h)}(hdrm_connector which has changedh]hdrm_connector which has changed}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_kms_helper_is_poll_worker (C function)c.drm_kms_helper_is_poll_workerhNtauh1jxhjuhhhNhNubj)}(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}(hj) hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj% hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMVubj)}(h h]h }(hj7 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj% hhhj6 hMVubj)}(hdrm_kms_helper_is_poll_workerh]j)}(hdrm_kms_helper_is_poll_workerh]hdrm_kms_helper_is_poll_worker}(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj% hhhj6 hMVubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja ubah}(h]h ]h"]h$]h&]noemphjjuh1jhj] ubah}(h]h ]h"]h$]h&]jjuh1jhj% hhhj6 hMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj! hhhj6 hMVubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj6 hMVhj hhubj)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMVhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj6 hMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjuhNhNubj)}(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$hj ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMZhj ubji)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chKhj ubj)}(hhh]h)}(h no argumentsh]h no arguments}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chKhj ubh)}(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 }(hj3 hhhNhNubjz)}(h ``current``h]hcurrent}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3 ubhy task is an output poll worker. This can be used to select distinct code paths for output polling versus other contexts.}(hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMWhj ubh)}(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.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMZhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_kms_helper_poll_disable (C function)c.drm_kms_helper_poll_disablehNtauh1jxhjuhhhNhNubj)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMjubj)}(hdrm_kms_helper_poll_disableh]j)}(hdrm_kms_helper_poll_disableh]hdrm_kms_helper_poll_disable}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMjubj)}(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 }(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 sbc.drm_kms_helper_poll_disableasbuh1hhj 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 ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMjubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj{ hhhj hMjubah}(h]jv ah ](jjeh"]h$]h&]jj)jhuh1jhj hMjhjx hhubj)}(hhh]h)}(hdisable output pollingh]hdisable output polling}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMjhj@ hhubah}(h]h ]h"]h$]h&]uh1jhjx hhhj hMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[ jj[ jjjuh1jhhhjuhNhNubj)}(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%)}(hje h]h Parameters}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMnhj_ 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:369: ./drivers/gpu/drm/drm_probe_helper.chMkhj~ ubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMkhj ubah}(h]h ]h"]h$]h&]uh1jhj~ ubeh}(h]h ]h"]h$]h&]uh1jmhj hMkhj{ 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:369: ./drivers/gpu/drm/drm_probe_helper.chMmhj_ ubh)}(h/This function disables the output polling work.h]h/This function disables the output polling work.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMlhj_ ubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMnhj_ ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMrhj_ ubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMuhj_ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_kms_helper_poll_init (C function)c.drm_kms_helper_poll_inithNtauh1jxhjuhhhNhNubj)}(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}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj- hhhj? hMubj)}(hdrm_kms_helper_poll_inith]j)}(hdrm_kms_helper_poll_inith]hdrm_kms_helper_poll_init}(hjR hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj- hhhj? hMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjn hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj)}(h h]h }(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj 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%)}jjT sbc.drm_kms_helper_poll_initasbuh1hhjj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjj ubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjf 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$initialize and enable output pollingh]h$initialize and enable output polling}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj& hhhj? hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjuhNhNubj)}(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%)}(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:369: ./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)}(hj2h]hstruct drm_device *dev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj,ubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jmhjGhMhj)ubah}(h]h ]h"]h$]h&]uh1jhhj ubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubh)}(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 }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh. 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubh)}(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:369: ./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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_kms_helper_poll_fini (C function)c.drm_kms_helper_poll_finihNtauh1jxhjuhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_kms_helper_poll_finih]j)}(hdrm_kms_helper_poll_finih]hdrm_kms_helper_poll_fini}(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 reftargetj?modnameN classnameNjj)}j]j%)}jjsbc.drm_kms_helper_poll_finiasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(h7**Parameters** ``struct drm_device *dev`` drm_deviceh](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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubji)}(hhh]jn)}(h%``struct drm_device *dev`` drm_deviceh](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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_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&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drmm_kms_helper_poll_init (C function)c.drmm_kms_helper_poll_inithNtauh1jxhjuhhhNhNubj)}(hhh](j)}(h7void drmm_kms_helper_poll_init (struct drm_device *dev)h]j)}(h6void drmm_kms_helper_poll_init(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhjKhMubj)}(hdrmm_kms_helper_poll_inith]j)}(hdrmm_kms_helper_poll_inith]hdrmm_kms_helper_poll_init}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhjKhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(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.drmm_kms_helper_poll_initasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhj9hhhjKhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhjKhMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhjKhMhj2hhubj)}(hhh]h)}(h$initialize and enable output pollingh]h$initialize and enable output polling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(hXA**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.h](h)}(h**Parameters**h]j%)}(hjh]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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubji)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj8ubj)}(hhh]h)}(h drm_deviceh]h drm_device}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShMhj5ubah}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(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 }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubho similar to drm_kms_helper_poll_init(). Polling will automatically be cleaned up when the DRM device goes away.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_connector_helper_hpd_irq_event (C function)$c.drm_connector_helper_hpd_irq_eventhNtauh1jxhjuhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h"drm_connector_helper_hpd_irq_eventh]j)}(h"drm_connector_helper_hpd_irq_eventh]h"drm_connector_helper_hpd_irq_event}(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 }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j%)}jjsb$c.drm_connector_helper_hpd_irq_eventasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjghhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(h connectorh]h connector}(hjthhhNhNubah}(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)}(hhotplug processingh]hhotplug processing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(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%)}(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:369: ./drivers/gpu/drm/drm_probe_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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_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%)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(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 }(hj0hhhNhNubh)}(h:c:type:`polled`h]jz)}(hj:h]hpolled}(hj<hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpolleduh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj0ubh member.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhMhjubh)}(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().}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(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:369: ./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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_helper_hpd_irq_event (C function)c.drm_helper_hpd_irq_eventhNtauh1jxhjuhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_helper_hpd_irq_eventh]j)}(hdrm_helper_hpd_irq_eventh]hdrm_helper_hpd_irq_event}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjsbc.drm_helper_hpd_irq_eventasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdevh]hdev}(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)}(hhotplug processingh]hhotplug processing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(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%)}(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:369: ./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)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM hjubj)}(hhh]h)}(h drm_deviceh]h drm_device}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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 }(hj'hhhNhNubh)}(h:c:type:`polled`h]jz)}(hj1h]hpolled}(hj3hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpolleduh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM!hj'ubh[ member. All other connectors are ignored, which is useful to avoid reprobing fixed panels.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjNhM!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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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:369: ./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:369: ./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:369: ./drivers/gpu/drm/drm_probe_helper.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_crtc_helper_mode_valid_fixed (C function)"c.drm_crtc_helper_mode_valid_fixedhNtauh1jxhjuhhhNhNubj)}(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)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMbubh)}(hhh]j)}(hdrm_mode_statush]hdrm_mode_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j drm_crtc_helper_mode_valid_fixedsb"c.drm_crtc_helper_mode_valid_fixedasbuh1hhjhhhjhMbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMbubj)}(h drm_crtc_helper_mode_valid_fixedh]j)}(hjh]h drm_crtc_helper_mode_valid_fixed}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMbubj)}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j"c.drm_crtc_helper_mode_valid_fixedasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjEubj)}(hcrtch]hcrtc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(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_crtc_helper_mode_valid_fixedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hmodeh]hmode}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(h)const struct drm_display_mode *fixed_modeh](j)}(hjch]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j"c.drm_crtc_helper_mode_valid_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&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMbubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMbubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMbhjhhubj)}(hhh]h)}(hValidates a display modeh]hValidates a display mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMbhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(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%)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMfhjubji)}(hhh](jn)}(h#``struct drm_crtc *crtc`` the crtc 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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMchjubj)}(hhh]h)}(hthe crtch]hthe crtc}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMchj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hMchjubjn)}(h=``const struct drm_display_mode *mode`` the mode to validate h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjZh]h#const struct drm_display_mode *mode}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMdhjTubj)}(hhh]h)}(hthe mode to validateh]hthe mode to validate}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMdhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjohMdhjubjn)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMehjubj)}(hhh]h)}(hthe display hardware's modeh]hthe display hardware’s mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMehjubeh}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMghjubh)}(h:MODE_OK on success, or another mode-status code otherwise.h]h:MODE_OK on success, or another mode-status code otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_connector_helper_get_modes_fixed (C function)&c.drm_connector_helper_get_modes_fixedhNtauh1jxhjuhhhNhNubj)}(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&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMzubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hMzubj)}(h$drm_connector_helper_get_modes_fixedh]j)}(h$drm_connector_helper_get_modes_fixedh]h$drm_connector_helper_get_modes_fixed}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hMzubj)}(hL(struct drm_connector *connector, const struct drm_display_mode *fixed_mode)h](j)}(hstruct drm_connector *connectorh](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_connectorh]h drm_connector}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j%)}jj6sb&c.drm_connector_helper_get_modes_fixedasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(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}(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_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 fixed_modeh]h fixed_mode}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hMzubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj!hMzhjhhubj)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMzhj[hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjuhNhNubj)}(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$hj~ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM~hjzubji)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM{hjubj)}(hhh]h)}(h the connectorh]h the connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM{hjubjn)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM|hjubj)}(hhh]h)}(hthe display hardware's modeh]hthe display hardware’s mode}(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&]uh1jhhjzubh)}(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:369: ./drivers/gpu/drm/drm_probe_helper.chM~hjzubh)}(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.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM}hjzubh)}(h **Return**h]j%)}(hj:h]hReturn}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjzubh)}(hThe number of created modes.h]hThe number of created modes.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_connector_helper_get_modes (C function) c.drm_connector_helper_get_modeshNtauh1jxhjuhhhNhNubj)}(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&]uh1jhj{hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhMubj)}(hdrm_connector_helper_get_modesh]j)}(hdrm_connector_helper_get_modesh]hdrm_connector_helper_get_modes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhjhMubj)}(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_connector_helper_get_modesasbuh1hhjubj)}(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{hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjwhhhjhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjthhubj)}(hhh]h)}(hRead EDID and update connector.h]hRead EDID and update connector.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjuhNhNubj)}(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%)}(hjah]h Parameters}(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:369: ./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&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjzubj)}(hhh]h)}(h The connectorh]h The connector}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj[ubh)}(hNumber of modes.h]hNumber of modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_connector_helper_tv_get_modes (C function)#c.drm_connector_helper_tv_get_modeshNtauh1jxhjuhhhNhNubj)}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjDhMubj)}(h!drm_connector_helper_tv_get_modesh]j)}(h!drm_connector_helper_tv_get_modesh]h!drm_connector_helper_tv_get_modes}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1jhj2hhhjDhMubj)}(h!(struct drm_connector *connector)h]j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(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%)}jjYsb#c.drm_connector_helper_tv_get_modesasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjoubj)}(h connectorh]h connector}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjkubah}(h]h ]h"]h$]h&]jjuh1jhj2hhhjDhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj.hhhjDhMubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jhjDhMhj+hhubj)}(hhh]h)}(h,Fills the modes availables to a TV connectorh]h,Fills the modes availables to a TV connector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjDhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjuhNhNubj)}(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:369: ./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)}(hj7h]hstruct drm_connector *connector}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj1ubj)}(hhh]h)}(h The connectorh]h The connector}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhjLhMhj.ubah}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./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:369: ./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:369: ./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:369: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_connector_helper_detect_from_ddc (C function)&c.drm_connector_helper_detect_from_ddchNtauh1jxhjuhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h$drm_connector_helper_detect_from_ddch]j)}(h$drm_connector_helper_detect_from_ddch]h$drm_connector_helper_detect_from_ddc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hR(struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, bool force)h](j)}(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]j%)}jjsb&c.drm_connector_helper_detect_from_ddcasbuh1hhj&ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjvhhhNhNubah}(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_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]jd&c.drm_connector_helper_detect_from_ddcasbuh1hhjubj)}(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&]noemphjjuh1jhj"ubj)}(h bool forceh](j)}(hjAh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hforceh]hforce}(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&Read EDID and detect connector status.h]h&Read EDID and detect connector status.}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjN hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjji jji jjjuh1jhhhjuhNhNubj)}(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%)}(hjs h]h Parameters}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjq ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjm ubji)}(hhh](jn)}(h2``struct drm_connector *connector`` The 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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubj)}(hhh]h)}(h The connectorh]h The 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)}(h8``struct drm_modeset_acquire_ctx *ctx`` Acquire context 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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubj)}(hhh]h)}(hAcquire contexth]hAcquire context}(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)}(hC``bool force`` Perform screen-destructive operations, if necessary h](jt)}(h``bool force``h]jz)}(hj!h]h bool force}(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:369: ./drivers/gpu/drm/drm_probe_helper.chMhj ubj)}(hhh]h)}(h3Perform screen-destructive operations, if necessaryh]h3Perform screen-destructive operations, if necessary}(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&]uh1jhhjm ubh)}(h**Description**h]j%)}(hj?!h]h Description}(hjA!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:369: ./drivers/gpu/drm/drm_probe_helper.chMhjm 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.}(hjU!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chMhjm ubh)}(h **Return**h]j%)}(hjf!h]hReturn}(hjh!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjd!ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM!hjm ubh)}(h=The connector status as defined by enum drm_connector_status.h]h=The connector status as defined by enum drm_connector_status.}(hj|!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:369: ./drivers/gpu/drm/drm_probe_helper.chM"hjm ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjuhhhNhNubeh}(h])output-probing-helper-functions-referenceah ]h"])output probing helper functions referenceah$]h&]uh1hhhhhhhhMlubh)}(hhh](h)}(hEDID Helper Functions Referenceh]hEDID Helper Functions Reference}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hhhhhMuubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_edid_decode_mfg_id (C function)c.drm_edid_decode_mfg_idhNtauh1jxhj!hhhNhNubj)}(hhh](j)}(h>const char * drm_edid_decode_mfg_id (u16 mfg_id, char vend[4])h]j)}(h 0x09e52d08 **Return** a 32-bit ID per panel.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:375: ./include/drm/drm_edid.hhMhj$ubji)}(hhh](jn)}(h5``vend_chr_0`` First character of the vendor string. h](jt)}(h``vend_chr_0``h]jz)}(hj=$h]h vend_chr_0}(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:375: ./include/drm/drm_edid.hhMhj7$ubj)}(hhh]h)}(h%First character of the vendor string.h]h%First character of the vendor string.}(hjV$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR$hMhjS$ubah}(h]h ]h"]h$]h&]uh1jhj7$ubeh}(h]h ]h"]h$]h&]uh1jmhjR$hMhj4$ubjn)}(h6``vend_chr_1`` Second character of the vendor string. h](jt)}(h``vend_chr_1``h]jz)}(hjv$h]h vend_chr_1}(hjx$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt$ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhjp$ubj)}(hhh]h)}(h&Second character of the vendor string.h]h&Second character of the vendor string.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjp$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj4$ubjn)}(h5``vend_chr_2`` Third character of the vendor string. h](jt)}(h``vend_chr_2``h]jz)}(hj$h]h vend_chr_2}(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:375: ./include/drm/drm_edid.hhMhj$ubj)}(hhh]h)}(h%Third character of the vendor string.h]h%Third character of the vendor string.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj4$ubjn)}(h&``product_id`` The 16-bit product ID. h](jt)}(h``product_id``h]jz)}(hj$h]h product_id}(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:375: ./include/drm/drm_edid.hhMhj$ubj)}(hhh]h)}(hThe 16-bit product ID.h]hThe 16-bit product ID.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMhj4$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:375: ./include/drm/drm_edid.hhMhj$ubh)}(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.}(hj9%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj$ubji)}(hhh]jn)}(hLFor instance: drm_edid_encode_panel_id('B', 'O', 'E', 0x2d08) => 0x09e52d08 h](jt)}(h For instance:h]h For instance:}(hjO%hhhNhNubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhjK%ubj)}(hhh]h)}(h=drm_edid_encode_panel_id('B', 'O', 'E', 0x2d08) => 0x09e52d08h]hIdrm_edid_encode_panel_id(‘B’, ‘O’, ‘E’, 0x2d08) => 0x09e52d08}(hja%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]%hMhj^%ubah}(h]h ]h"]h$]h&]uh1jhjK%ubeh}(h]h ]h"]h$]h&]uh1jmhj]%hMhjH%ubah}(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:375: ./include/drm/drm_edid.hhMhj$ubh)}(ha 32-bit ID per panel.h]ha 32-bit ID per panel.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edid_decode_panel_id (C function)c.drm_edid_decode_panel_idhNtauh1jxhj!hhhNhNubj)}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMubj)}(hdrm_edid_decode_panel_idh]j)}(hdrm_edid_decode_panel_idh]hdrm_edid_decode_panel_id}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj%hMubj)}(h-(u32 panel_id, char vend[4], u16 *product_id)h](j)}(h u32 panel_idh](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%)}jj%sbc.drm_edid_decode_panel_idasbuh1hhj&ubj)}(h h]h }(hj(&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hpanel_idh]hpanel_id}(hj6&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(h char vend[4]h](j)}(hcharh]hchar}(hjO&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK&ubj)}(h h]h }(hj]&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK&ubj)}(hvendh]hvend}(hjk&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK&ubj9)}(hj0h]h[}(hjy&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjK&ubj})}(hj}h]h4}(hj&hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1j}hjK&ubj9)}(hj1h]h]}(hj&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjK&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubj)}(hu16 *product_idh](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.drm_edid_decode_panel_idasbuh1hhj&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 product_idh]h product_id}(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)}(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:375: ./include/drm/drm_edid.hhMhj'hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)'jj)'jjjuh1jhhhj!hNhNubj)}(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%)}(hj3'h]h Parameters}(hj5'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1'ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj-'ubji)}(hhh](jn)}(h)``u32 panel_id`` The panel ID to decode. h](jt)}(h``u32 panel_id``h]jz)}(hjR'h]h u32 panel_id}(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:375: ./include/drm/drm_edid.hhMhjL'ubj)}(hhh]h)}(hThe panel ID to decode.h]hThe panel ID to decode.}(hjk'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg'hMhjh'ubah}(h]h ]h"]h$]h&]uh1jhjL'ubeh}(h]h ]h"]h$]h&]uh1jmhjg'hMhjI'ubjn)}(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)}(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:375: ./include/drm/drm_edid.hhMhj'ubj)}(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}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhjI'ubjn)}(h:``u16 *product_id`` The product ID will be returned here. h](jt)}(h``u16 *product_id``h]jz)}(hj'h]hu16 *product_id}(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:375: ./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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj'hMhjI'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:375: ./include/drm/drm_edid.hhMhj-'ubji)}(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:}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj(ubj)}(hhh]h)}(h@drm_edid_decode_panel_id(0x09e52d08, vend, :c:type:`product_id`)h](h+drm_edid_decode_panel_id(0x09e52d08, vend, }(hj/(hhhNhNubh)}(h:c:type:`product_id`h]jz)}(hj9(h]h product_id}(hj;(hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj7(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj product_iduh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj/(ubh)}(hj/(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjV(hMhj,(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jmhj+(hMhj(ubjn)}(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:}(hjq(hhhNhNubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhjm(ubj)}(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}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:375: ./include/drm/drm_edid.hhMhj(ubah}(h]h ]h"]h$]h&]uh1jhjm(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hMhj(ubeh}(h]h ]h"]h$]h&]uh1jhhj-'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_edid_header_is_valid (C function)c.drm_edid_header_is_validhNtauh1jxhj!hhhNhNubj)}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj(hMubj)}(h(const void *_edid)h]j)}(hconst void *_edidh](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*}(hj8)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubj)}(h_edidh]h_edid}(hjE)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.sanity check the header of the base EDID blockh]h.sanity check the header of the base EDID block}(hjo)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjl)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhj!hNhNubj)}(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%)}(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:378: ./drivers/gpu/drm/drm_edid.chMhj)ubji)}(hhh]jn)}(h5``const void *_edid`` pointer to raw base EDID block h](jt)}(h``const void *_edid``h]jz)}(hj)h]hconst void *_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:378: ./drivers/gpu/drm/drm_edid.chMhj)ubj)}(hhh]h)}(hpointer to raw base EDID blockh]hpointer to raw base EDID block}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj)ubh)}(h/Sanity check the header of the base EDID block.h]h/Sanity check the header of the base EDID block.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./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:378: ./drivers/gpu/drm/drm_edid.chMhj)ubh)}(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.}(hj(*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_is_valid (C function)c.drm_edid_is_validhNtauh1jxhj!hhhNhNubj)}(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}(hjW*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS*hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hje*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS*hhhjd*hMubj)}(hdrm_edid_is_validh]j)}(hdrm_edid_is_validh]hdrm_edid_is_valid}(hjw*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjS*hhhjd*hMubj)}(h(struct edid *edid)h]j)}(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 reftargetj*modnameN classnameNjj)}j]j%)}jjy*sbc.drm_edid_is_validasbuh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj*ubj)}(hedidh]hedid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubah}(h]h ]h"]h$]h&]jjuh1jhjS*hhhjd*hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjO*hhhjd*hMubah}(h]jJ*ah ](jjeh"]h$]h&]jj)jhuh1jhjd*hMhjL*hhubj)}(hhh]h)}(hsanity check EDID datah]hsanity check EDID data}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj+hhubah}(h]h ]h"]h$]h&]uh1jhjL*hhhjd*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.+jj.+jjjuh1jhhhj!hNhNubj)}(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%)}(hj8+h]h Parameters}(hj:+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6+ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj2+ubji)}(hhh]jn)}(h ``struct edid *edid`` EDID data h](jt)}(h``struct edid *edid``h]jz)}(hjW+h]hstruct edid *edid}(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:378: ./drivers/gpu/drm/drm_edid.chMhjQ+ubj)}(hhh]h)}(h EDID datah]h EDID data}(hjp+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl+hMhjm+ubah}(h]h ]h"]h$]h&]uh1jhjQ+ubeh}(h]h ]h"]h$]h&]uh1jmhjl+hMhjN+ubah}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj2+ubh)}(h9Sanity-check an entire EDID record (including extensions)h]h9Sanity-check an entire EDID record (including extensions)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj2+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:378: ./drivers/gpu/drm/drm_edid.chMhj2+ubh)}(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:378: ./drivers/gpu/drm/drm_edid.chMhj2+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_valid (C function)c.drm_edid_validhNtauh1jxhj!hhhNhNubj)}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj ,hM ubj)}(hdrm_edid_validh]j)}(hdrm_edid_validh]hdrm_edid_valid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj ,hM 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&]uh1jhj6,ubj)}(h h]h }(hjG,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubj)}(hjh]hstruct}(hjU,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubj)}(h h]h }(hjb,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjs,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetju,modnameN classnameNjj)}j]j%)}jj ,sbc.drm_edid_validasbuh1hhj6,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubj9)}(hj9h]h*}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6,ubj)}(hdrm_edidh]hdrm_edid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2,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)}(hsanity check EDID datah]hsanity check EDID data}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj ,hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jhhhj!hNhNubj)}(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%)}(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:378: ./drivers/gpu/drm/drm_edid.chMhj,ubji)}(hhh]jn)}(h.``const struct drm_edid *drm_edid`` EDID data 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:378: ./drivers/gpu/drm/drm_edid.chM hj-ubj)}(hhh]h)}(h EDID datah]h EDID data}(hj2-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%)}(hjT-h]h Description}(hjV-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjR-ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj,ubh)}(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.}(hjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj,ubh)}(h **Return**h]j%)}(hj{-h]hReturn}(hj}-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjy-ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj,ubh)}(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:378: ./drivers/gpu/drm/drm_edid.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j/drm_edid_override_connector_update (C function)$c.drm_edid_override_connector_updatehNtauh1jxhj!hhhNhNubj)}(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:378: ./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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj-hMubj)}(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 }(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_edid_override_connector_updateasbuh1hhj-ubj)}(h h]h }(hj;.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj9)}(hj9h]h*}(hjI.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-ubj)}(h connectorh]h connector}(hjV.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%add modes from override/firmware EDIDh]h%add modes from override/firmware EDID}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj}.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhj!hNhNubj)}(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%)}(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:378: ./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}(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:378: ./drivers/gpu/drm/drm_edid.chMhj.ubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./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:378: ./drivers/gpu/drm/drm_edid.chM hj.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.}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_raw (C function)c.drm_edid_rawhNtauh1jxhj!hhhNhNubj)}(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}(hjh/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjv/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/hhhju/hM ubj)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/hhhju/hM ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/hhhju/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%)}j drm_edid_rawsbc.drm_edid_rawasbuh1hhjd/hhhju/hM ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/hhhju/hM ubj9)}(hj9h]h*}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjd/hhhju/hM ubj)}(h drm_edid_rawh]j)}(hj/h]h drm_edid_raw}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjd/hhhju/hM 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 }(hj 0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj%0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj60hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj30ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj80modnameN classnameNjj)}j]j/c.drm_edid_rawasbuh1hhj/ubj)}(h h]h }(hjT0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj9)}(hj9h]h*}(hjb0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubj)}(hdrm_edidh]hdrm_edid}(hjo0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubah}(h]h ]h"]h$]h&]jjuh1jhjd/hhhju/hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj`/hhhju/hM ubah}(h]j[/ah ](jjeh"]h$]h&]jj)jhuh1jhju/hM hj]/hhubj)}(hhh]h)}(h#Get a pointer to the raw EDID data.h]h#Get a pointer to the raw EDID data.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0hhubah}(h]h ]h"]h$]h&]uh1jhj]/hhhju/hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhj!hNhNubj)}(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%)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubji)}(hhh]jn)}(h7``const struct drm_edid *drm_edid`` drm_edid container h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj0h]hconst struct drm_edid *drm_edid}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubj)}(hhh]h)}(hdrm_edid containerh]hdrm_edid container}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhj0hM hj0ubah}(h]h ]h"]h$]h&]uh1jhhj0ubh)}(h**Description**h]j%)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubh)}(h#Get a pointer to the raw EDID data.h]h#Get a pointer to the raw EDID data.}(hj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubh)}(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.}(hj:1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubh)}(h **Return**h]j%)}(hjK1h]hReturn}(hjM1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjI1ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubh)}(hPointer to raw EDID data.h]hPointer to raw EDID data.}(hja1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_alloc (C function)c.drm_edid_allochNtauh1jxhj!hhhNhNubj)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hM ubj)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hM ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j%)}jdrm_edid_allocsbc.drm_edid_allocasbuh1hhj1hhhj1hM ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hM ubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1hhhj1hM ubj)}(hdrm_edid_alloch]j)}(hj1h]hdrm_edid_alloc}(hj 2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj1hhhj1hM ubj)}(h(const void *edid, size_t size)h](j)}(hconst void *edidh](j)}(hjch]hconst}(hj%2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!2ubj)}(h h]h }(hj22hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!2ubj)}(hvoidh]hvoid}(hj@2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!2ubj)}(h h]h }(hjN2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!2ubj9)}(hj9h]h*}(hj\2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!2ubj)}(hedidh]hedid}(hji2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j1c.drm_edid_allocasbuh1hhj~2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~2ubj)}(hsizeh]hsize}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(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!Allocate a new drm_edid containerh]h!Allocate a new drm_edid container}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhj!hNhNubj)}(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%)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2ubji)}(hhh](jn)}(h.``const void *edid`` Pointer to raw EDID data h](jt)}(h``const void *edid``h]jz)}(hj3h]hconst void *edid}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj3ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj3ubj)}(hhh]h)}(hPointer to raw EDID datah]hPointer to raw EDID data}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj13hM hj23ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jmhj13hM hj3ubjn)}(h2``size_t size`` Size of memory allocated for EDID h](jt)}(h``size_t size``h]jz)}(hjU3h]h size_t size}(hjW3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjS3ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjO3ubj)}(hhh]h)}(h!Size of memory allocated for EDIDh]h!Size of memory allocated for EDID}(hjn3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj3hM hjk3ubah}(h]h ]h"]h$]h&]uh1jhjO3ubeh}(h]h ]h"]h$]h&]uh1jmhjj3hM hj3ubeh}(h]h ]h"]h$]h&]uh1jhhj2ubh)}(h**Description**h]j%)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2ubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2ubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2ubh)}(h **Return**h]j%)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2ubh)}(h%drm_edid container, or NULL on errorsh]h%drm_edid container, or NULL on errors}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_dup (C function)c.drm_edid_duphNtauh1jxhj!hhhNhNubj)}(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}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hM ubj)}(hjh]hstruct}(hj'4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hM ubj)}(h h]h }(hj44hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hM ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjE4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG4modnameN classnameNjj)}j]j%)}j drm_edid_dupsbc.drm_edid_dupasbuh1hhj4hhhj4hM ubj)}(h h]h }(hjf4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hM ubj9)}(hj9h]h*}(hjt4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4hhhj4hM ubj)}(h drm_edid_duph]j)}(hjc4h]h drm_edid_dup}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhj4hM ubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]ja4c.drm_edid_dupasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hdrm_edidh]hdrm_edid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj4ubah}(h]h ]h"]h$]h&]jjuh1jhj4hhhj4hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhj4hM ubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jhj4hM hj4hhubj)}(hhh]h)}(hDuplicate a drm_edid containerh]hDuplicate a drm_edid container}(hj<5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj95hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjT5jjT5jjjuh1jhhhj!hNhNubj)}(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%)}(hj^5h]h Parameters}(hj`5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\5ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjX5ubji)}(hhh]jn)}(h6``const struct drm_edid *drm_edid`` EDID to duplicate h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj}5h]hconst struct drm_edid *drm_edid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{5ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjw5ubj)}(hhh]h)}(hEDID to duplicateh]hEDID to duplicate}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM hj5ubah}(h]h ]h"]h$]h&]uh1jhjw5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hM hjt5ubah}(h]h ]h"]h$]h&]uh1jhhjX5ubh)}(h**Description**h]j%)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjX5ubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjX5ubh)}(h **Return**h]j%)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjX5ubh)}(h*drm_edid container copy, or NULL on errorsh]h*drm_edid container copy, or NULL on errors}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjX5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_free (C function)c.drm_edid_freehNtauh1jxhj!hhhNhNubj)}(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}(hj$6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 6hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj36hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 6hhhj26hM ubj)}(h drm_edid_freeh]j)}(h drm_edid_freeh]h drm_edid_free}(hjE6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj 6hhhj26hM ubj)}(h!(const struct drm_edid *drm_edid)h]j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hja6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubj)}(h h]h }(hjn6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubj)}(hjh]hstruct}(hj|6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j%)}jjG6sbc.drm_edid_freeasbuh1hhj]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&]noemphjjuh1jhjY6ubah}(h]h ]h"]h$]h&]jjuh1jhj 6hhhj26hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj6hhhj26hM ubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jhj26hM hj6hhubj)}(hhh]h)}(hFree the drm_edid containerh]hFree the drm_edid container}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj6hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj26hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhj!hNhNubj)}(hB**Parameters** ``const struct drm_edid *drm_edid`` EDID to freeh](h)}(h**Parameters**h]j%)}(hj!7h]h Parameters}(hj#7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj7ubji)}(hhh]jn)}(h0``const struct drm_edid *drm_edid`` EDID to freeh](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hj@7h]hconst struct drm_edid *drm_edid}(hjB7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj>7ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj:7ubj)}(hhh]h)}(h EDID to freeh]h EDID to free}(hjY7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjV7ubah}(h]h ]h"]h$]h&]uh1jhj:7ubeh}(h]h ]h"]h$]h&]uh1jmhjU7hM hj77ubah}(h]h ]h"]h$]h&]uh1jhhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_probe_ddc (C function)c.drm_probe_ddchNtauh1jxhj!hhhNhNubj)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hM ubj)}(h drm_probe_ddch]j)}(h drm_probe_ddch]h drm_probe_ddc}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7hhhj7hM ubj)}(h(struct i2c_adapter *adapter)h]j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j%)}jj7sbc.drm_probe_ddcasbuh1hhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(hj9h]h*}(hj"8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubj)}(hadapterh]hadapter}(hj/8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubah}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj7hhhj7hM ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhj7hM hj7hhubj)}(hhh]h)}(hprobe DDC presenceh]hprobe DDC presence}(hjY8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjV8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjq8jjq8jjjuh1jhhhj!hNhNubj)}(hv**Parameters** ``struct i2c_adapter *adapter`` I2C adapter to probe **Return** True on success, false on failure.h](h)}(h**Parameters**h]j%)}(hj{8h]h Parameters}(hj}8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjy8ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hju8ubji)}(hhh]jn)}(h5``struct i2c_adapter *adapter`` I2C adapter to probe h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hj8h]hstruct i2c_adapter *adapter}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj8ubj)}(hhh]h)}(hI2C adapter to probeh]hI2C adapter to probe}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM hj8ubah}(h]h ]h"']h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhhju8ubh)}(h **Return**h]j%)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hju8ubh)}(h"True on success, false on failure.h]h"True on success, false on failure.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hju8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_get_edid (C function)c.drm_get_edidhNtauh1jxhj!hhhNhNubj)}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hj(9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj'9hM ubh)}(hhh]j)}(hedidh]hedid}(hj99hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj69ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;9modnameN classnameNjj)}j]j%)}j drm_get_edidsbc.drm_get_edidasbuh1hhj9hhhj'9hM ubj)}(h h]h }(hjZ9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj'9hM ubj9)}(hj9h]h*}(hjh9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9hhhj'9hM ubj)}(h drm_get_edidh]j)}(hjW9h]h drm_get_edid}(hjy9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhj'9hM ubj)}(h>(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jU9c.drm_get_edidasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(h connectorh]h connector}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubj)}(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}(hj":hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$:modnameN classnameNjj)}j]jU9c.drm_get_edidasbuh1hhj:ubj)}(h h]h }(hj@:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj9)}(hj9h]h*}(hjN:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:ubj)}(hadapterh]hadapter}(hj[:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhj'9hM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj9hhhj'9hM ubah}(h]j 9ah ](jjeh"]h$]h&]jj)jhuh1jhj'9hM hj9hhubj)}(hhh]h)}(hget EDID data, if availableh]hget EDID data, if available}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hj:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj'9hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jhhhj!hNhNubj)}(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%)}(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:378: ./drivers/gpu/drm/drm_edid.chM$ hj: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}(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:378: ./drivers/gpu/drm/drm_edid.chM! hj:ubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re 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 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&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM" hj:ubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(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$hj8;ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM$ hj:ubh)}(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.}(hjP;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM# hj:ubh)}(h **Return**h]j%)}(hja;h]hReturn}(hjc;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:378: ./drivers/gpu/drm/drm_edid.chM& hj:ubh)}(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.}(hjw;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM' hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_edid_read_custom (C function)c.drm_edid_read_customhNtauh1jxhj!hhhNhNubj)}(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}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.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_edid_read_customsbc.drm_edid_read_customasbuh1hhj;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_edid_read_customh]j)}(hj;h]hdrm_edid_read_custom}(hj <hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhj;hM; ubj)}(hJ(struct drm_connector *connector, read_block_fn read_block, void *context)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj;<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7<ubj)}(h h]h }(hjH<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7<ubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjY<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[<modnameN classnameNjj)}j]j;c.drm_edid_read_customasbuh1hhj7<ubj)}(h h]h }(hjw<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7<ubj9)}(hj9h]h*}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7<ubj)}(h connectorh]h connector}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3<ubj)}(hread_block_fn read_blockh](h)}(hhh]j)}(h read_block_fnh]h read_block_fn}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j;c.drm_edid_read_customasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h read_blockh]h read_block}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3<ubj)}(h void *contexth](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)}(hcontexth]hcontext}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3<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)}(h3Read EDID data using given EDID block read functionh]h3Read EDID data using given EDID block read function}(hjF=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM; hjC=hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj;hM; ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^=jj^=jjjuh1jhhhj!hNhNubj)}(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]h Parameters}(hjj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf=ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM? hjb=ubji)}(hhh](jn)}(h5``struct drm_connector *connector`` Connector to use 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:378: ./drivers/gpu/drm/drm_edid.chM< hj=ubj)}(hhh]h)}(hConnector to useh]hConnector 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)}(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:378: ./drivers/gpu/drm/drm_edid.chM= hj=ubj)}(hhh]h)}(hEDID block read functionh]hEDID block read function}(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)}(hA``void *context`` Private data passed to the block read function h](jt)}(h``void *context``h]jz)}(hj=h]h void *context}(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:378: ./drivers/gpu/drm/drm_edid.chM> hj=ubj)}(hhh]h)}(h.Private data passed to the block read functionh]h.Private data passed to the block read function}(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&]uh1jhhjb=ubh)}(h**Description**h]j%)}(hj4>h]h Description}(hj6>hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj2>ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM@ hjb=ubh)}(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.}(hjJ>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM? hjb=ubh)}(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.}(hjY>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMC hjb=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.}(hjh>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMH hjb=ubh)}(h9The returned pointer must be freed using drm_edid_free().h]h9The returned pointer must be freed using drm_edid_free().}(hjw>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chML hjb=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:378: ./drivers/gpu/drm/drm_edid.chMN hjb=ubh)}(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:378: ./drivers/gpu/drm/drm_edid.chMO hjb=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_read_ddc (C function)c.drm_edid_read_ddchNtauh1jxhj!hhhNhNubj)}(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&]uh1jhj>hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMi ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMi ubj)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMi ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMi 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_ddcsbc.drm_edid_read_ddcasbuh1hhj>hhhj>hMi ubj)}(h h]h }(hj(?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMi ubj9)}(hj9h]h*}(hj6?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj>hhhj>hMi ubj)}(hdrm_edid_read_ddch]j)}(hj%?h]hdrm_edid_read_ddc}(hjG?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj>hMi ubj)}(h>(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](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)}(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#?c.drm_edid_read_ddcasbuh1hhj^?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&]noemphjjuh1jhjZ?ubj)}(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}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j#?c.drm_edid_read_ddcasbuh1hhj?ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubj)}(hadapterh]hadapter}(hj)@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZ?ubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hMi ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj>hhhj>hMi ubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jhj>hMi hj>hhubj)}(hhh]h)}(h&Read EDID data using given I2C adapterh]h&Read EDID data using given I2C adapter}(hjS@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMi hjP@hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hMi ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjk@jjk@jjjuh1jhhhj!hNhNubj)}(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%)}(hju@h]h Parameters}(hjw@hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjs@ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMm hjo@ubji)}(hhh](jn)}(h5``struct drm_connector *connector`` Connector to use 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:378: ./drivers/gpu/drm/drm_edid.chMj hj@ubj)}(hhh]h)}(hConnector to useh]hConnector to use}(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@ubjn)}(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&]uh1jyhj@ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMk hj@ubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMk hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj@hMk hj@ubeh}(h]h ]h"]h$]h&]uh1jhhjo@ubh)}(h**Description**h]j%)}(hjAh]h Description}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMm hjo@ubh)}(h&Read EDID using the given I2C adapter.h]h&Read EDID using the given I2C adapter.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMl hjo@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.}(hj-AhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMn hjo@ubh)}(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.}(hj(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hj/MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Mubj)}(h h]h }(hj(struct drm_connector *connector, struct i2c_adapter *adapter)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jOc.drm_edid_read_switcherooasbuh1hhjOubj)}(h h]h }(hj$PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj9)}(hj9h]h*}(hj2PhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjOubj)}(h connectorh]h connector}(hj?PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hjXPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTPubj)}(h h]h }(hjePhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTPubh)}(hhh]j)}(h i2c_adapterh]h i2c_adapter}(hjvPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxPmodnameN classnameNjj)}j]jOc.drm_edid_read_switcherooasbuh1hhjTPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTPubj9)}(hj9h]h*}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTPubj)}(hadapterh]hadapter}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjOOhhhj`OhMR ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjKOhhhj`OhMR ubah}(h]jFOah ](jjeh"]h$]h&]jj)jhuh1jhj`OhMR hjHOhhubj)}(hhh]h)}(h)get EDID data for a vga_switcheroo outputh]h)get EDID data for a vga_switcheroo output}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMR hjPhhubah}(h]h ]h"]h$]h&]uh1jhjHOhhhj`OhMR ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1jhhhj!hNhNubj)}(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%)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMV hjPubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjQh]hstruct drm_connector *connector}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMS hjQubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hj3QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/QhMS hj0Qubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhj/QhMS hjQubjn)}(h;``struct i2c_adapter *adapter`` I2C adapter to use for DDC h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjSQh]hstruct i2c_adapter *adapter}(hjUQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQQubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMT hjMQubj)}(hhh]h)}(hI2C adapter to use for DDCh]hI2C adapter to use for DDC}(hjlQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhQhMT hjiQubah}(h]h ]h"]h$]h&]uh1jhjMQubeh}(h]h ]h"]h$]h&]uh1jmhjhQhMT hjQubeh}(h]h ]h"]h$]h&]uh1jhhjPubh)}(h**Description**h]j%)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMV hjPubh)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMU hjPubh)}(h **Return**h]j%)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMY hjPubh)}(h:Pointer to valid EDID or ``NULL`` if we couldn't find any.h](hPointer to valid EDID or }(hjQhhhNhNubjz)}(h``NULL``h]hNULL}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubh if we couldn’t find any.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMZ hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_duplicate (C function)c.drm_edid_duplicatehNtauh1jxhj!hhhNhNubj)}(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}(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMo ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhMo ubh)}(hhh]j)}(hedidh]hedid}(hj+RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-RmodnameN classnameNjj)}j]j%)}jdrm_edid_duplicatesbc.drm_edid_duplicateasbuh1hhjRhhhjRhMo ubj)}(h h]h }(hjLRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhMo ubj9)}(hj9h]h*}(hjZRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRhhhjRhMo ubj)}(hdrm_edid_duplicateh]j)}(hjIRh]hdrm_edid_duplicate}(hjkRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgRubah}(h]h ](jjeh"]h$]h&]jjuh1jhjRhhhjRhMo ubj)}(h(const struct edid *edid)h]j)}(hconst struct edid *edidh](j)}(hjch]hconst}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hedidh]hedid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jGRc.drm_edid_duplicateasbuh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(hj9h]h*}(hjRhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj)}(hedidh]hedid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~Rubah}(h]h ]h"]h$]h&]jjuh1jhjRhhhjRhMo ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjRhhhjRhMo ubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjRhMo hjRhhubj)}(hhh]h)}(h$duplicate an EDID and the extensionsh]h$duplicate an EDID and the extensions}(hj"ShhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMo hjShhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjRhMo ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:Sjj:Sjjjuh1jhhhj!hNhNubj)}(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%)}(hjDSh]h Parameters}(hjFShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBSubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMs hj>Subji)}(hhh]jn)}(h.``const struct edid *edid`` EDID to duplicate h](jt)}(h``const struct edid *edid``h]jz)}(hjcSh]hconst struct edid *edid}(hjeShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaSubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMp hj]Subj)}(hhh]h)}(hEDID to duplicateh]hEDID to duplicate}(hj|ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxShMp hjySubah}(h]h ]h"]h$]h&]uh1jhj]Subeh}(h]h ]h"]h$]h&]uh1jmhjxShMp hjZSubah}(h]h ]h"]h$]h&]uh1jhhj>Subh)}(h **Return**h]j%)}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMr hj>Subh)}(h9Pointer to duplicated EDID or NULL on allocation failure.h]h9Pointer to duplicated EDID or NULL on allocation failure.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMr hj>Subeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_match_cea_mode (C function)c.drm_match_cea_modehNtauh1jxhj!hhhNhNubj)}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j%)}jdrm_match_cea_modesbc.drm_match_cea_modeasbuh1hhjShhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjThMubj)}(hdrm_match_cea_modeh]j)}(hjTh]hdrm_match_cea_mode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjThMubj)}(h)(const struct drm_display_mode *to_match)h]j)}(h'const struct drm_display_mode *to_matchh](j)}(hjch]hconst}(hj5ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Tubj)}(h h]h }(hjBThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Tubj)}(hjh]hstruct}(hjPThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Tubj)}(h h]h }(hj]ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Tubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjnThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpTmodnameN classnameNjj)}j]jTc.drm_match_cea_modeasbuh1hhj1Tubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Tubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1Tubj)}(hto_matchh]hto_match}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-Tubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjThMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjShhhjThMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjThMhjShhubj)}(hhh]h)}(h'look for a CEA mode matching given modeh]h'look for a CEA mode matching given mode}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhj!hNhNubj)}(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%)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjTubji)}(hhh]jn)}(h9``const struct drm_display_mode *to_match`` display mode h](jt)}(h+``const struct drm_display_mode *to_match``h]jz)}(hjUh]h'const struct drm_display_mode *to_match}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj Uubj)}(hhh]h)}(h display modeh]h display mode}(hj+UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'UhMhj(Uubah}(h]h ]h"]h$]h&]uh1jhj Uubeh}(h]h ]h"]h$]h&]uh1jmhj'UhMhj Uubah}(h]h ]h"]h$]h&]uh1jhhjTubh)}(h **Return**h]j%)}(hjMUh]hReturn}(hjOUhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjKUubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjTubh)}(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.}(hjcUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_display_mode_from_cea_vic (C function)c.drm_display_mode_from_cea_vichNtauh1jxhj!hhhNhNubj)}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhMubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]j%)}jdrm_display_mode_from_cea_vicsbc.drm_display_mode_from_cea_vicasbuh1hhjUhhhjUhMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhMubj9)}(hj9h]h*}(hjUhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUhhhjUhMubj)}(hdrm_display_mode_from_cea_vich]j)}(hjUh]hdrm_display_mode_from_cea_vic}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhMubj)}(h'(struct drm_device *dev, u8 video_code)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj*VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,VmodnameN classnameNjj)}j]jUc.drm_display_mode_from_cea_vicasbuh1hhjVubj)}(h h]h }(hjHVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjVVhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hdevh]hdev}(hjcVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(h u8 video_codeh](h)}(hhh]j)}(hu8h]hu8}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNjj)}j]jUc.drm_display_mode_from_cea_vicasbuh1hhjxVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxVubj)}(h video_codeh]h video_code}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jhjUhMhjUhhubj)}(hhh]h)}(hreturn a mode for CEA VICh]hreturn a mode for CEA VIC}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhj!hNhNubj)}(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%)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjVubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjWh]hstruct drm_device *dev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjWubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj/WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+WhMhj,Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jmhj+WhMhj Wubjn)}(h&``u8 video_code`` CEA VIC of the mode h](jt)}(h``u8 video_code``h]jz)}(hjOWh]h u8 video_code}(hjQWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMWubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjIWubj)}(hhh]h)}(hCEA VIC of the modeh]hCEA VIC of the mode}(hjhWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdWhMhjeWubah}(h]h ]h"]h$]h&]uh1jhjIWubeh}(h]h ]h"]h$]h&]uh1jmhjdWhMhj Wubeh}(h]h ]h"]h$]h&]uh1jhhjVubh)}(h**Description**h]j%)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjVubh)}(h2Creates a new mode matching the specified CEA VIC.h]h2Creates a new mode matching the specified CEA VIC.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjVubh)}(h **Return**h]j%)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjVubh)}(h4A new drm_display_mode on success or NULL on failureh]h4A new drm_display_mode on success or NULL on failure}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_edid_match (C function)c.drm_edid_matchhNtauh1jxhj!hhhNhNubj)}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjXhMubj)}(hdrm_edid_matchh]j)}(hdrm_edid_matchh]hdrm_edid_match}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjXhMubj)}(hE(const struct drm_edid *drm_edid, const struct drm_edid_ident *ident)h](j)}(hconst struct drm_edid *drm_edidh](j)}(hjch]hconst}(hj2XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Xubj)}(h h]h }(hj?XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Xubj)}(hjh]hstruct}(hjMXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Xubj)}(h h]h }(hjZXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Xubh)}(hhh]j)}(hdrm_edidh]hdrm_edid}(hjkXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmXmodnameN classnameNjj)}j]j%)}jjXsbc.drm_edid_matchasbuh1hhj.Xubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Xubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.Xubj)}(hdrm_edidh]hdrm_edid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Xubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*Xubj)}(h"const struct drm_edid_ident *identh](j)}(hjch]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hdrm_edid_identh]hdrm_edid_ident}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]jXc.drm_edid_matchasbuh1hhjXubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hj$YhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hidenth]hident}(hj1YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*Xubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjXhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjXhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjXhMhjWhhubj)}(hhh]h)}(h"match drm_edid with given identityh]h"match drm_edid with given identity}(hj[YhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjXYhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjXhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsYjjsYjjjuh1jhhhj!hNhNubj)}(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%)}(hj}Yh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{Yubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjwYubji)}(hhh](jn)}(h)``const struct drm_edid *drm_edid`` EDID h](jt)}(h#``const struct drm_edid *drm_edid``h]jz)}(hjYh]hconst struct drm_edid *drm_edid}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjYubj)}(hhh]h)}(hEDIDh]hEDID}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhMhjYubjn)}(hG``const struct drm_edid_ident *ident`` the EDID identity to match with h](jt)}(h&``const struct drm_edid_ident *ident``h]jz)}(hjYh]h"const struct drm_edid_ident *ident}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjYubj)}(hhh]h)}(hthe EDID identity to match withh]hthe EDID identity to match with}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjYhMhjYubeh}(h]h ]h"]h$]h&]uh1jhhjwYubh)}(h**Description**h]j%)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjwYubh)}(h2Check if the EDID matches with the given identity.h]h2Check if the EDID matches with the given identity.}(hj&ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjwYubh)}(h **Return**h]j%)}(hj7Zh]hReturn}(hj9ZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5Zubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjwYubh)}(h>True if the given identity matched with EDID, false otherwise.h]h>True if the given identity matched with EDID, false otherwise.}(hjMZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjwYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_edid_get_monitor_name (C function)c.drm_edid_get_monitor_namehNtauh1jxhj!hhhNhNubj)}(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}(hj|ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxZhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxZhhhjZhMubj)}(hdrm_edid_get_monitor_nameh]j)}(hdrm_edid_get_monitor_nameh]hdrm_edid_get_monitor_name}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxZhhhjZhMubj)}(h2(const struct edid *edid, char *name, int bufsize)h](j)}(hconst struct edid *edidh](j)}(hjch]hconst}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hedidh]hedid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j%)}jjZsbc.drm_edid_get_monitor_nameasbuh1hhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hj [hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hedidh]hedid}(hj-[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h char *nameh](j)}(hcharh]hchar}(hjF[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB[ubj)}(h h]h }(hjT[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB[ubj9)}(hj9h]h*}(hjb[hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjB[ubj)}(hnameh]hname}(hjo[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubj)}(h int bufsizeh](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hbufsizeh]hbufsize}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubeh}(h]h ]h"]h$]h&]jjuh1jhjxZhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjtZhhhjZhMubah}(h]joZah ](jjeh"]h$]h&]jj)jhuh1jhjZhMhjqZhhubj)}(hhh]h)}(h$fetch the monitor name from the edidh]h$fetch the monitor name from the edid}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jhjqZhhhjZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jhhhj!hNhNubj)}(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%)}(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:378: ./drivers/gpu/drm/drm_edid.chMhj[ubji)}(hhh](jn)}(h5``const struct edid *edid`` monitor EDID information 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:378: ./drivers/gpu/drm/drm_edid.chMhj \ubj)}(hhh]h)}(hmonitor EDID informationh]hmonitor EDID information}(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``char *name`` pointer to a character array to hold the name of the monitor h](jt)}(h``char *name``h]jz)}(hjH\h]h char *name}(hjJ\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjF\ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjB\ubj)}(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%)}(hjAeh]h Parameters}(hjCehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?eubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj;eubji)}(hhh]jn)}(h5``const struct edid *edid`` monitor EDID information h](jt)}(h``const struct edid *edid``h]jz)}(hj`eh]hconst struct edid *edid}(hjbehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^eubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjZeubj)}(hhh]h)}(hmonitor EDID informationh]hmonitor EDID information}(hjyehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuehMhjveubah}(h]h ]h"]h$]h&]uh1jhjZeubeh}(h]h ]h"]h$]h&]uh1jmhjuehMhjWeubah}(h]h ]h"]h$]h&]uh1jhhj;eubh)}(h**Description**h]j%)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj;eubh)}(h/Parse the CEA extension according to CEA-861-B.h]h/Parse the CEA extension according to CEA-861-B.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj;eubh)}(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 }(hjehhhNhNubh)}(h5:c:type:`drm_display_info.is_hdmi `h]jz)}(hjeh]hdrm_display_info.is_hdmi}(hjehhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjeubh" instead of calling this function.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehMhj;eubh)}(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:378: ./drivers/gpu/drm/drm_edid.chMhj;eubh)}(h5True if the monitor is HDMI, false if not or unknown.h]h5True if the monitor is HDMI, false if not or unknown.}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhj;eubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_detect_monitor_audio (C function)c.drm_detect_monitor_audiohNtauh1jxhj!hhhNhNubj)}(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}(hj9fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5fhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMSubj)}(h h]h }(hjGfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5fhhhjFfhMSubj)}(hdrm_detect_monitor_audioh]j)}(hdrm_detect_monitor_audioh]hdrm_detect_monitor_audio}(hjYfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUfubah}(h]h ](jjeh"]h$]h&]jjuh1jhj5fhhhjFfhMSubj)}(h(const struct edid *edid)h]j)}(hconst struct edid *edidh](j)}(hjch]hconst}(hjufhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqfubj)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqfubh)}(hhh]j)}(hedidh]hedid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j%)}jj[fsbc.drm_detect_monitor_audioasbuh1hhjqfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqfubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqfubj)}(hedidh]hedid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmfubah}(h]h ]h"]h$]h&]jjuh1jhj5fhhhjFfhMSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1fhhhjFfhMSubah}(h]j,fah ](jjeh"]h$]h&]jj)jhuh1jhjFfhMShj.fhhubj)}(hhh]h)}(hcheck monitor audio capabilityh]hcheck monitor audio capability}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMShjghhubah}(h]h ]h"]h$]h&]uh1jhj.fhhhjFfhMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+gjj+gjjjuh1jhhhj!hNhNubj)}(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%)}(hj5gh]h Parameters}(hj7ghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3gubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMWhj/gubji)}(hhh]jn)}(h/``const struct edid *edid`` EDID block to scan h](jt)}(h``const struct edid *edid``h]jz)}(hjTgh]hconst struct edid *edid}(hjVghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRgubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMThjNgubj)}(hhh]h)}(hEDID block to scanh]hEDID block to scan}(hjmghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjighMThjjgubah}(h]h ]h"]h$]h&]uh1jhjNgubeh}(h]h ]h"]h$]h&]uh1jmhjighMThjKgubah}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMVhj/gubh)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMUhj/gubh)}(h **Return**h]j%)}(hjgh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM[hj/gubh)}(h4True if the monitor supports audio, false otherwise.h]h4True if the monitor supports audio, false otherwise.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM\hj/gubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_default_rgb_quant_range (C function)c.drm_default_rgb_quant_rangehNtauh1jxhj!hhhNhNubj)}(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)}(hjh]henum}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhubj)}(h h]h }(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjhhMhubh)}(hhh]j)}(hhdmi_quantization_rangeh]hhdmi_quantization_range}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j%)}jdrm_default_rgb_quant_rangesbc.drm_default_rgb_quant_rangeasbuh1hhjghhhjhhMhubj)}(h h]h }(hj;hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjhhMhubj)}(hdrm_default_rgb_quant_rangeh]j)}(hj8hh]hdrm_default_rgb_quant_range}(hjMhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjhhMhubj)}(h%(const struct drm_display_mode *mode)h]j)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hjhhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhubj)}(h h]h }(hjuhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhubj)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j6hc.drm_default_rgb_quant_rangeasbuh1hhjdhubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhubj9)}(hj9h]h*}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdhubj)}(hmodeh]hmode}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`hubah}(h]h ]h"]h$]h&]jjuh1jhjghhhjhhMhubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhjhhMhubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhjhhMhhjghhubj)}(hhh]h)}(hdefault RGB quantization rangeh]hdefault RGB quantization range}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhhjihhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhhMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jhhhj!hNhNubj)}(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%)}(hj&ih]h Parameters}(hj(ihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$iubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMlhj iubji)}(hhh]jn)}(h5``const struct drm_display_mode *mode`` display mode h](jt)}(h'``const struct drm_display_mode *mode``h]jz)}(hjEih]h#const struct drm_display_mode *mode}(hjGihhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCiubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMihj?iubj)}(hhh]h)}(h display modeh]h display mode}(hj^ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZihMihj[iubah}(h]h ]h"]h$]h&]uh1jhj?iubeh}(h]h ]h"]h$]h&]uh1jmhjZihMihjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(hstruct edid *edidh](j)}(hjh]hstruct}(hjWqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSqubj)}(h h]h }(hjdqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSqubh)}(hhh]j)}(hedidh]hedid}(hjuqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwqmodnameN classnameNjj)}j]jqc.drm_add_edid_modesasbuh1hhjSqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSqubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSqubj)}(hedidh]hedid}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhjphhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjphMhjphhubj)}(hhh]h)}(h&add modes from EDID data, if availableh]h&add modes from EDID data, if available}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhj!hNhNubj)}(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%)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjqubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjrh]hstruct drm_connector *connector}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjrubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hj2rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.rhMhj/rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jmhj.rhMhjrubjn)}(h ``struct edid *edid`` EDID data h](jt)}(h``struct edid *edid``h]jz)}(hjRrh]hstruct edid *edid}(hjTrhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPrubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjLrubj)}(hhh]h)}(h EDID datah]h EDID data}(hjkrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgrhMhjhrubah}(h]h ]h"]h$]h&]uh1jhjLrubeh}(h]h ]h"]h$]h&]uh1jmhjgrhMhjrubeh}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjqubh)}(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 }(hjrhhhNhNubh)}(h:c:type:`drm_display_info`h]jz)}(hjrh]hdrm_display_info}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_display_infouh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjrubh structure and ELD in }(hjrhhhNhNubj%)}(h **connector**h]h connector}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh9 with any information which can be derived from the edid.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjqubh)}(hHThis function is deprecated. Use drm_edid_connector_add_modes() instead.h]hHThis function is deprecated. Use drm_edid_connector_add_modes() instead.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjqubh)}(h **Return**h]j%)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjqubh)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_add_modes_noedid (C function)c.drm_add_modes_noedidhNtauh1jxhj!hhhNhNubj)}(hhh](j)}(hhint drm_add_modes_noedid (struct drm_connector *connector, unsigned int hdisplay, unsigned int vdisplay)h]j)}(hgint drm_add_modes_noedid(struct drm_connector *connector, unsigned int hdisplay, unsigned int vdisplay)h](j)}(hinth]hint}(hj=shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9shhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM ubj)}(h h]h }(hjLshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9shhhjKshM ubj)}(hdrm_add_modes_noedidh]j)}(hdrm_add_modes_noedidh]hdrm_add_modes_noedid}(hj^shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZsubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9shhhjKshM ubj)}(hO(struct drm_connector *connector, unsigned int hdisplay, unsigned int vdisplay)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjzshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvsubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j%)}jj`ssbc.drm_add_modes_noedidasbuh1hhjvsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvsubj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvsubj)}(h connectorh]h connector}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrsubj)}(hunsigned int hdisplayh](j)}(hunsignedh]hunsigned}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hhdisplayh]hhdisplay}(hj$thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrsubj)}(hunsigned int vdisplayh](j)}(hunsignedh]hunsigned}(hj=thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9tubj)}(h h]h }(hjKthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9tubj)}(hinth]hint}(hjYthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9tubj)}(h h]h }(hjgthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9tubj)}(hvdisplayh]hvdisplay}(hjuthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9tubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrsubeh}(h]h ]h"]h$]h&]jjuh1jhj9shhhjKshM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5shhhjKshM ubah}(h]j0sah ](jjeh"]h$]h&]jj)jhuh1jhjKshM hj2shhubj)}(hhh]h)}(h)add modes for the connectors without EDIDh]h)add modes for the connectors without EDID}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjthhubah}(h]h ]h"]h$]h&]uh1jhj2shhhjKshM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhj!hNhNubj)}(hX**Parameters** ``struct drm_connector *connector`` connector we're probing ``unsigned int hdisplay`` the horizontal display limit ``unsigned 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%)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjtubji)}(hhh](jn)}(h<``struct drm_connector *connector`` connector we're probing h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjth]hstruct drm_connector *connector}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjtubj)}(hhh]h)}(hconnector we're probingh]hconnector we’re probing}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM hjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthM hjtubjn)}(h7``unsigned int hdisplay`` the horizontal display limit h](jt)}(h``unsigned int hdisplay``h]jz)}(hjuh]hunsigned int hdisplay}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjuubj)}(hhh]h)}(hthe horizontal display limith]hthe horizontal display limit}(hj2uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.uhM hj/uubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jmhj.uhM hjtubjn)}(h5``unsigned int vdisplay`` the vertical display limit h](jt)}(h``unsigned int vdisplay``h]jz)}(hjRuh]hunsigned int vdisplay}(hjTuhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPuubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjLuubj)}(hhh]h)}(hthe vertical display limith]hthe vertical display limit}(hjkuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjguhM hjhuubah}(h]h ]h"]h$]h&]uh1jhjLuubeh}(h]h ]h"]h$]h&]uh1jmhjguhM hjtubeh}(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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjtubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chM hjtubh)}(h **Return**h]j%)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjtubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_hdmi_avi_infoframe_from_display_mode (C function)*c.drm_hdmi_avi_infoframe_from_display_modehNtauh1jxhj!hhhNhNubj)}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMsubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjvhMsubj)}(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}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjvhMsubj)}(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}(hj6vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2vubj)}(h h]h }(hjCvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2vubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjTvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVvmodnameN classnameNjj)}j]j%)}jjvsb*c.drm_hdmi_avi_infoframe_from_display_modeasbuh1hhj2vubj)}(h h]h }(hjtvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2vubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2vubj)}(hframeh]hframe}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.vubj)}(h%const struct drm_connector *connectorh](j)}(hjch]hconst}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]jpv*c.drm_hdmi_avi_infoframe_from_display_modeasbuh1hhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hj whhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(h connectorh]h connector}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.vubj)}(h#const struct drm_display_mode *modeh](j)}(hjch]hconst}(hj3whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/wubj)}(h h]h }(hj@whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/wubj)}(hjh]hstruct}(hjNwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/wubj)}(h h]h }(hj[whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/wubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hjlwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnwmodnameN classnameNjj)}j]jpv*c.drm_hdmi_avi_infoframe_from_display_modeasbuh1hhj/wubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/wubj9)}(hj9h]h*}(hjwhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/wubj)}(hmodeh]hmode}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.vubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjvhMsubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjvhMsubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjvhMshjuhhubj)}(hhh]h)}(h``struct hdmi_vendor_infoframe *frame`` HDMI vendor infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hj~h]h#struct hdmi_vendor_infoframe *frame}(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:378: ./drivers/gpu/drm/drm_edid.chMhj~ubj)}(hhh]h)}(hHDMI vendor infoframeh]hHDMI vendor 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)}(h8``const struct drm_connector *connector`` the connector h](jt)}(h)``const struct drm_connector *connector``h]jz)}(hj~h]h%const struct 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:378: ./drivers/gpu/drm/drm_edid.chMhj~ubj)}(hhh]h)}(h the connectorh]h the 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)}(h9``const struct drm_display_mode *mode`` DRM 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&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjubj)}(hhh]h)}(hDRM display modeh]hDRM display mode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1jhhjs~ubh)}(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:378: ./drivers/gpu/drm/drm_edid.chMhjs~ubh)}(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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjs~ubh)}(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:378: ./drivers/gpu/drm/drm_edid.chMhjs~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:378: ./drivers/gpu/drm/drm_edid.chMhjs~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_edid_is_digital (C function)c.drm_edid_is_digitalhNtauh1jxhj!hhhNhNubj)}(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&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdrm_edid_is_digitalh]j)}(hdrm_edid_is_digitalh]hdrm_edid_is_digital}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j%)}jjsbc.drm_edid_is_digitalasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjThhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hdrm_edidh]hdrm_edid}(hjahhhNhNubah}(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 is digital?h]h is digital?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(hq**Parameters** ``const struct drm_edid *drm_edid`` The EDID **Description** Return true if input is digital.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:378: ./drivers/gpu/drm/drm_edid.chMhjubji)}(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:378: ./drivers/gpu/drm/drm_edid.chMhjƀubj)}(hhh]h)}(hThe EDIDh]hThe EDID}(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**Description**h]j%)}(hjh]h Description}(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:378: ./drivers/gpu/drm/drm_edid.chMhjubh)}(h Return true if input is digital.h]h Return true if input is digital.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:378: ./drivers/gpu/drm/drm_edid.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_mnl (C function) c.drm_eld_mnlhNtauh1jxhj!hhhNhNubj)}(hhh](j)}(hint drm_eld_mnl (const u8 *eld)h]j)}(hint drm_eld_mnl(const u8 *eld)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKHubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjZhKHubj)}(h drm_eld_mnlh]j)}(h drm_eld_mnlh]h drm_eld_mnl}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjHhhhjZhKHubj)}(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 reftargetjmodnameN classnameNjj)}j]j%)}jjosb c.drm_eld_mnlasbuh1hhjubj)}(h h]h }(hjǁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjՁhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heldh]held}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjHhhhjZhKHubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjDhhhjZhKHubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jhjZhKHhjAhhubj)}(hhh]h)}(h%Get ELD monitor name length in bytes.h]h%Get ELD monitor name length in bytes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKHhj hhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjZhKHubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhj!hNhNubj)}(hS**Parameters** ``const u8 *eld`` pointer to an eld memory structure with mnl seth](h)}(h**Parameters**h]j%)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKLhj(ubji)}(hhh]jn)}(hA``const u8 *eld`` pointer to an eld memory structure with mnl seth](jt)}(h``const u8 *eld``h]jz)}(hjMh]h const u8 *eld}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKNhjGubj)}(hhh]h)}(h/pointer to an eld memory structure with mnl seth]h/pointer to an eld memory structure with mnl set}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKIhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jmhjbhKNhjDubah}(h]h ]h"]h$]h&]uh1jhhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad (C function) c.drm_eld_sadhNtauh1jxhj!hhhNhNubj)}(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:381: ./include/drm/drm_eld.hhKTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKTubh)}(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_sadasbuh1hhjhhhjhKTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKTubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhjhKTubj)}(h drm_eld_sadh]j)}(hjh]h drm_eld_sad}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKTubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j c.drm_eld_sadasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heldh]held}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKTubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKThjhhubj)}(hhh]h)}(hGet ELD SAD structures.h]hGet ELD SAD structures.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKTubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(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:381: ./include/drm/drm_eld.hhKXhjubji)}(hhh]jn)}(hG``const u8 *eld`` pointer to an eld memory structure with sad_count 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:381: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKUhjubah}(h]h ]h"]h$]h&]uh1jhj݃ubeh}(h]h ]h"]h$]h&]uh1jmhjhKZhjڃubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad_count (C function)c.drm_eld_sad_counthNtauh1jxhj!hhhNhNubj)}(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&]uh1jhj9hhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKgubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhjKhKgubj)}(hdrm_eld_sad_counth]j)}(hdrm_eld_sad_counth]hdrm_eld_sad_count}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhjKhKgubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj`sbc.drm_eld_sad_countasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj9)}(hj9h]h*}(hjƄhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjvubj)}(heldh]held}(hjӄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhj9hhhjKhKgubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj5hhhjKhKgubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhjKhKghj2hhubj)}(hhh]h)}(hGet ELD SAD count.h]hGet ELD SAD count.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKghjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhKgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(hY**Parameters** ``const u8 *eld`` pointer to an eld memory structure with sad_count seth](h)}(h**Parameters**h]j%)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKkhjubji)}(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:381: ./include/drm/drm_eld.hhKmhj8ubj)}(hhh]h)}(h5pointer to an eld memory structure with sad_count seth]h5pointer to an eld memory structure with sad_count set}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShKmhj5ubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_eld_calc_baseline_block_size (C function)"c.drm_eld_calc_baseline_block_sizehNtauh1jxhj!hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKqubj)}(h drm_eld_calc_baseline_block_sizeh]j)}(h drm_eld_calc_baseline_block_sizeh]h drm_eld_calc_baseline_block_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKqubj)}(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 }(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%)}jjsb"c.drm_eld_calc_baseline_block_sizeasbuh1hhjхubj)}(h h]h }(hjhhhNhNubah}(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&]jjuh1jhjhhhjhKqubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKqubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKqhjhhubj)}(hhh]h)}(h&Calculate baseline block size in bytesh]h&Calculate baseline block size in bytes}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKqhjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpjjpjjjuh1jhhhj!hNhNubj)}(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%)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKuhjtubji)}(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)}(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:381: ./include/drm/drm_eld.hhKrhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhhjtubh)}(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:381: ./include/drm/drm_eld.hhKthjtubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKshjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_size (C function)c.drm_eld_sizehNtauh1jxhj!hhhNhNubj)}(hhh](j)}(h int drm_eld_size (const u8 *eld)h]j)}(hint drm_eld_size(const u8 *eld)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhK~ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj'hK~ubj)}(h drm_eld_sizeh]j)}(h drm_eld_sizeh]h drm_eld_size}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj'hK~ubj)}(h(const u8 *eld)h]j)}(h const u8 *eldh](j)}(hjch]hconst}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hu8h]hu8}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j%)}jj<sbc.drm_eld_sizeasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjRubj)}(heldh]held}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj'hK~ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj'hK~ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj'hK~hjhhubj)}(hhh]h)}(hGet ELD size in bytesh]hGet ELD size in bytes}(hjهhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhK~hjևhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hK~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(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%)}(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:381: ./include/drm/drm_eld.hhKhjubji)}(hhh]jn)}(h=``const u8 *eld`` pointer to a complete eld memory structure h](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:381: ./include/drm/drm_eld.hhKhjubj)}(hhh]h)}(h*pointer to a complete eld memory structureh]h*pointer to a complete eld memory structure}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hKhjubah}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhjubh)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhjubh)}(h7The returned value is guaranteed to be a multiple of 4.h]h7The returned value is guaranteed to be a multiple of 4.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_eld_get_spk_alloc (C function)c.drm_eld_get_spk_allochNtauh1jxhj!hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jdrm_eld_get_spk_allocsbc.drm_eld_get_spk_allocasbuh1hhjhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKubj)}(h h]h }(hjΈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj͈hKubj)}(hdrm_eld_get_spk_alloch]j)}(hjʈh]hdrm_eld_get_spk_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj܈ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj͈hKubj)}(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 reftargetjmodnameN classnameNjj)}j]jȈc.drm_eld_get_spk_allocasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heldh]held}(hjRhhhNhNubah}(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)}(hGet speaker allocationh]hGet speaker allocation}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj͈hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(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%)}(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:381: ./include/drm/drm_eld.hhKhjubji)}(hhh]jn)}(h5``const u8 *eld`` pointer to an ELD memory structure h](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:381: ./include/drm/drm_eld.hhKhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj҉hKhjubah}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhjubh)}(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 }(hjhhhNhNubjz)}(h``DRM_ELD_SPEAKER``h]hDRM_ELD_SPEAKER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh( field definitions to identify speakers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_eld_get_conn_type (C function)c.drm_eld_get_conn_typehNtauh1jxhj!hhhNhNubj)}(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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j%)}jdrm_eld_get_conn_typesbc.drm_eld_get_conn_typeasbuh1hhjKhhhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjshKubj)}(hdrm_eld_get_conn_typeh]j)}(hjph]hdrm_eld_get_conn_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhjshKubj)}(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 reftargetjmodnameN classnameNjj)}j]jnc.drm_eld_get_conn_typeasbuh1hhjubj)}(h h]h }(hj݊hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(heldh]held}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhjshKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjGhhhjshKubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1jhjshKhjDhhubj)}(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:381: ./include/drm/drm_eld.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjshKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jhhhj!hNhNubj)}(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%)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./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)}(hjch]h const u8 *eld}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./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&]uh1hhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhjxhKhjZubah}(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&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./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 }(hjhhhNhNubjz)}(h``DRM_ELD_CONN_TYPE_HDMI``h]hDRM_ELD_CONN_TYPE_HDMI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh or }(hjhhhNhNubjz)}(h``DRM_ELD_CONN_TYPE_DP``h]hDRM_ELD_CONN_TYPE_DP}(hj΋hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh( to identify the display type connected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:381: ./include/drm/drm_eld.hhKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad_get (C function)c.drm_eld_sad_gethNtauh1jxhj!hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(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&]jjuh1jhjhhhjhKubj)}(h7(const u8 *eld, int sad_index, struct cea_sad *cta_sad)h](j)}(h const u8 *eldh](j)}(hjch]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hu8h]hu8}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j%)}jj*sbc.drm_eld_sad_getasbuh1hhj@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&]noemphjjuh1jhj<ubj)}(h int sad_indexh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjČhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h sad_indexh]h sad_index}(hjҌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hstruct cea_sad *cta_sadh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hcea_sadh]hcea_sad}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j~c.drm_eld_sad_getasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hcta_sadh]hcta_sad}(hjBhhhNhNubah}(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"get SAD from ELD to struct cea_sadh]h"get SAD from ELD to struct cea_sad}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(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%)}(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:384: ./drivers/gpu/drm/drm_eld.chKhjubji)}(hhh](jn)}(h``const u8 *eld`` ELD buffer h](jt)}(h``const u8 *eld``h]jz)}(hjh]h const u8 *eld}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKhjubj)}(hhh]h)}(h ELD bufferh]h ELD 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``int sad_index`` SAD index h](jt)}(h``int sad_index``h]jz)}(hjh]h int sad_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKhjubj)}(hhh]h)}(h SAD indexh]h SAD index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h7``struct cea_sad *cta_sad`` destination struct cea_sad h](jt)}(h``struct cea_sad *cta_sad``h]jz)}(hjh]hstruct cea_sad *cta_sad}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKhjubj)}(hhh]h)}(hdestination struct cea_sadh]hdestination struct cea_sad}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKhjubh)}(h#0 on success, or negative on errorsh]h#0 on success, or negative on errors}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_eld_sad_set (C function)c.drm_eld_sad_sethNtauh1jxhj!hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK%ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK%ubj)}(hdrm_eld_sad_seth]j)}(hdrm_eld_sad_seth]hdrm_eld_sad_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK%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 reftargetjmodnameN classnameNjj)}j]j%)}jjŽsbc.drm_eld_sad_setasbuh1hhj؎ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؎ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj؎ubj)}(heldh]held}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؎ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjԎubj)}(h int sad_indexh](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h sad_indexh]h sad_index}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjԎubj)}(hconst struct cea_sad *cta_sadh](j)}(hjch]hconst}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hcea_sadh]hcea_sad}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_eld_sad_setasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj9)}(hj9h]h*}(hj͏hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubj)}(hcta_sadh]hcta_sad}(hjڏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(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)}(h"set SAD to ELD from struct cea_sadh]h"set SAD to ELD from struct cea_sad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK%hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK%ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj!hNhNubj)}(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:384: ./drivers/gpu/drm/drm_eld.chK)hj ubji)}(hhh](jn)}(h``u8 *eld`` ELD buffer h](jt)}(h ``u8 *eld``h]jz)}(hjEh]hu8 *eld}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK&hj?ubj)}(hhh]h)}(h ELD bufferh]h ELD buffer}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhK&hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhK&hj<ubjn)}(h``int sad_index`` SAD index h](jt)}(h``int sad_index``h]jz)}(hj~h]h int sad_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK'hjxubj)}(hhh]h)}(h SAD indexh]h SAD index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhK'hj<ubjn)}(h8``const struct cea_sad *cta_sad`` source struct cea_sad h](jt)}(h!``const struct cea_sad *cta_sad``h]jz)}(hjh]hconst struct cea_sad *cta_sad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK(hjubj)}(hhh]h)}(hsource struct cea_sadh]hsource struct cea_sad}(hjАhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̐hK(hj͐ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj̐hK(hj<ubeh}(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&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK*hj ubh)}(h#0 on success, or negative on errorsh]h#0 on success, or negative on errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:384: ./drivers/gpu/drm/drm_eld.chK*hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj!hhhNhNubeh}(h]edid-helper-functions-referenceah ]h"]edid helper functions referenceah$]h&]uh1hhhhhhhhMuubh)}(hhh](h)}(hSCDC Helper Functions Referenceh]hSCDC Helper Functions Reference}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hhhhhMubh)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:390: ./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).}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:390: ./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().}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:390: ./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&]uh1jhjyhhhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhK(ubj)}(hdrm_scdc_readbh]j)}(hdrm_scdc_readbh]hdrm_scdc_readb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhK(ubj)}(h3(struct i2c_adapter *adapter, u8 offset, u8 *value)h](j)}(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&]uh1jhjՑubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjڑmodnameN classnameNjj)}j]j%)}jjsbc.drm_scdc_readbasbuh1hhjubj)}(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&]noemphjjuh1jhjubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]jc.drm_scdc_readbasbuh1hhj(ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hoffseth]hoffset}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u8 *valueh](h)}(hhh]j)}(hu8h]hu8}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]jc.drm_scdc_readbasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhK(ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjhK(ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhK(hjrhhubj)}(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:393: ./include/drm/display/drm_scdc_helper.hhK(hjגhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhK(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj&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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK,hjubji)}(hhh](jn)}(h,``struct i2c_adapter *adapter`` I2C 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&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK)hjubj)}(hhh]h)}(h I2C adapterh]h I2C adapter}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hK)hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj0hK)hjubjn)}(h)``u8 offset`` offset of register to read h](jt)}(h ``u8 offset``h]jz)}(hjTh]h u8 offset}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjRubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK*hjNubj)}(hhh]h)}(hoffset of register to readh]hoffset of register to read}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihK*hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jmhjihK*hjubjn)}(h5``u8 *value`` return location for the register value h](jt)}(h ``u8 *value``h]jz)}(hjh]h u8 *value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK+hjubj)}(hhh]h)}(h&return location for the register valueh]h&return location for the register value}(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&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK-hjubh)}(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ޓhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK,hjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK/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&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK0hjubeh}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK:ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhjBhK:ubj)}(hdrm_scdc_writebh]j)}(hdrm_scdc_writebh]hdrm_scdc_writeb}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhjBhK:ubj)}(h2(struct i2c_adapter *adapter, u8 offset, u8 value)h](j)}(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]j%)}jjWsbc.drm_scdc_writebasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hadapterh]hadapter}(hjʔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_scdc_writebasbuh1hhjߔubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߔubj)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߔubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hu8 valueh](h)}(hhh]j)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]jc.drm_scdc_writebasbuh1hhj'ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hvalueh]hvalue}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhj0hhhjBhK:ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj,hhhjBhK:ubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhjBhK:hj)hhubj)}(hhh]h)}(hwrite a single byte to SCDCh]hwrite a single byte to SCDC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK:hjhhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjBhK:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj&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%)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK>hjubji)}(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&]uh1jyhjÕubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhK;hjubj)}(hhh]h)}(h I2C adapterh]h I2C adapter}(hjޕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjڕhK;hjەubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjڕhK;hjubjn)}(h)``u8 offset`` offset of register to read h](jt)}(h ``u8 offset``h]jz)}(hjh]h u8 offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhKhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhKAhjubh)}(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&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:393: ./include/drm/display/drm_scdc_helper.hhKBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_scdc_read (C function)c.drm_scdc_readhNtauh1jxhj&hhhNhNubj)}(hhh](j)}(hYssize_t drm_scdc_read (struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h]j)}(hXssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޖubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j drm_scdc_readsbc.drm_scdc_readasbuh1hhjږhhhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chK;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjږhhhjhK;ubj)}(h drm_scdc_readh]j)}(hjh]h drm_scdc_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjږhhhjhK;ubj)}(hC(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size)h](j)}(hstruct i2c_adapter *adapterh](j)}(hjh]hstruct}(hj0hhhNhNubah}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jc.drm_scdc_readasbuh1hhj,ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj9)}(hj9h]h*}(hjzhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubj)}(hadapterh]hadapter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h u8 offseth](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_scdc_readasbuh1hhjubj)}(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&]noemphjjuh1jhj(ubj)}(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&]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]jc.drm_scdc_readasbuh1hhj&ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hsizeh]hsize}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(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)}(hread a block of data from SCDCh]hread a block of data from SCDC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chK;hjhhubah}(h]h ]h"]h$]h&]uh1jhjӖhhhjhK;ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj&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%)}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chK?hjubji)}(hhh](jn)}(h/``struct i2c_adapter *adapter`` I2C controller h](jt)}(h``struct i2c_adapter *adapter``h]jz)}(hjĘh]hstruct i2c_adapter *adapter}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj0ubj)}(hhh]h)}(h%return location for the block to readh]h%return location for the block to read}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhK>hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhK>hjubjn)}(h*``size_t size`` size of the block to read h](jt)}(h``size_t size``h]jz)}(hjoh]h size_t size}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chK?hjiubj)}(hhh]h)}(hsize of the block to readh]hsize of the block to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK?hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhK?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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKAhjubh)}(hubj)}(hhh]h)}(h connectorh]h connector}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhKhj;ubjn)}(hI``bool enable`` bool to indicate if scrambling is to be enabled/disabled h](jt)}(h``bool enable``h]jz)}(hj}h]h bool enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj{ubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjwubj)}(hhh]h)}(h8bool to indicate if scrambling is to be enabled/disabledh]h8bool to indicate if scrambling is to be enabled/disabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj;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&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubh)}(h~Writes the TMDS config register over SCDC channel, and: enables scrambling when enable = 1 disables scrambling when enable = 0h]h~Writes the TMDS config register over SCDC channel, and: enables scrambling when enable = 1 disables scrambling when enable = 0}(hjΠhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubh)}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubh)}(h>True if scrambling is set/reset successfully, false otherwise.h]h>True if scrambling is set/reset successfully, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubeh}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hKubj)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj1hKubj)}(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 }(hjmhhhNhNubah}(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 reftargetjmodnameN classnameNjj)}j]j%)}jjFsb$c.drm_scdc_set_high_tmds_clock_ratioasbuh1hhj\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)}(hbool seth](j)}(hjAh]hbool}(hjҡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΡubj)}(h h]h }(hjߡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΡubj)}(hseth]hset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΡubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj1hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj1hKhjhhubj)}(hhh]h)}(hset TMDS clock ratioh]hset TMDS clock ratio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1jhhhj&hNhNubj)}(hX|**Parameters** ``struct drm_connector *connector`` connector ``bool set`` ret or reset the high clock ratio **Description** 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%)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj3ubji)}(hhh](jn)}(h.``struct drm_connector *connector`` connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjXh]hstruct drm_connector *connector}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjRubj)}(hhh]h)}(h connectorh]h connector}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhKhjOubjn)}(h/``bool set`` ret or reset the high clock ratio h](jt)}(h ``bool set``h]jz)}(hjh]hbool set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubj)}(hhh]h)}(h!ret or reset the high clock ratioh]h!ret or reset the high clock ratio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjOubeh}(h]h ]h"]h$]h&]uh1jhhj3ubh)}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj3ubjb=)}(hX}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]ji)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubj)}(hhh](h)}(h*TMDS character = 10 bit TMDS encoded valueh]h*TMDS character = 10 bit TMDS encoded value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubh)}(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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubh)}(h'TMDS bit rate = 10x TMDS character rateh]h'TMDS bit rate = 10x TMDS character rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(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:}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj7ubj)}(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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjJubh)}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjJubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhjIhKhjubjn)}(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&]uh1jshn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjwubj)}(hhh](h)}(h*sets TMDS clock ratio to 1/40 when set = 1h]h*sets TMDS clock ratio to 1/40 when set = 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhjubh)}(h*sets TMDS clock ratio to 1/10 when set = 0h]h*sets TMDS clock ratio to 1/10 when set = 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubah}(h]h ]h"]h$]h&]uh1ja=hn/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj3ubh)}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj3ubh)}(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:396: ./drivers/gpu/drm/display/drm_scdc_helper.chKhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj&hhhNhNubeh}(h]scdc-helper-functions-referenceah ]h"]scdc helper functions referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h HDMI Infoframes Helper Referenceh]h HDMI Infoframes Helper Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jhdr_sink_metadata (C struct)c.hdr_sink_metadatahNtauh1jxhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhNubj)}(hhh](j)}(hhdr_sink_metadatah]j)}(hstruct hdr_sink_metadatah](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhKubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj?hKubj)}(hhdr_sink_metadatah]j)}(hj,h]hhdr_sink_metadata}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(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)}(hHDR sink metadatah]hHDR sink metadata}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjqhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj?hKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhj&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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubj@)}(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; }; };}hjsbah}(h]h ]h"]h$]h&]jjuh1j?hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubh)}(h **Members**h]j%)}(hj¤h]hMembers}(hjĤhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubji)}(hhh](jn)}(h1``metadata_type`` Static_Metadata_Descriptor_ID. h](jt)}(h``metadata_type``h]jz)}(hjh]h metadata_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjߤubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjۤubj)}(hhh]h)}(hStatic_Metadata_Descriptor_ID.h]hStatic_Metadata_Descriptor_ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjۤubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjؤubjn)}(h``{unnamed_union}`` anonymous h](jt)}(h``{unnamed_union}``h]jz)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhKhjubj)}(hhh]h)}(h anonymoush]h anonymous}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj/hKhjؤubjn)}(h&``hdmi_type1`` HDR Metadata Infoframe.h](jt)}(h``hdmi_type1``h]jz)}(hjSh]h hdmi_type1}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjMubj)}(hhh]h)}(hHDR Metadata Infoframe.h]hHDR Metadata Infoframe.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjؤubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj&hNubh)}(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:407: ./include/linux/hdmi.hhMhjhhubh)}(h*Metadata Information read from Sink's EDIDh]h,Metadata Information read from Sink’s EDID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jhdmi_infoframe (C union)c.hdmi_infoframehNtauh1jxhjhhhj&hNubj)}(hhh](j)}(hhdmi_infoframeh]j)}(hunion hdmi_infoframeh](j)}(hunionh]hunion}(hjԥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjХhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjХhhhjhMubj)}(hhdmi_infoframeh]j)}(hjΥh]hhdmi_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjХhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj̥hhhjhMubah}(h]jǥah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjɥhhubj)}(hhh]h)}(h7overall union of all abstract infoframe representationsh]h7overall union of all abstract infoframe representations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjɥhhhjhMubeh}(h]h ](junioneh"]h$]h&]jjjj/jj/jjjuh1jhhhjhj&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}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubh:}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhj3ubj@)}(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; };}hjTsbah}(h]h ]h"]h$]h&]jjuh1j?hY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhj3ubh)}(h **Members**h]j%)}(hjeh]hMembers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhj3ubji)}(hhh](jn)}(h``any`` generic infoframe h](jt)}(h``any``h]jz)}(hjh]hany}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhj~ubj)}(hhh]h)}(hgeneric infoframeh]hgeneric infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubjn)}(h``avi`` avi infoframe h](jt)}(h``avi``h]jz)}(hjh]havi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubj)}(hhh]h)}(h avi infoframeh]h avi infoframe}(hj֦hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjҦhMhjӦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjҦhMhj{ubjn)}(h``spd`` spd infoframe h](jt)}(h``spd``h]jz)}(hjh]hspd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubj)}(hhh]h)}(h spd infoframeh]h spd infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhj{ubjn)}(h*``vendor`` union of all vendor infoframes h](jt)}(h ``vendor``h]jz)}(hj/h]hvendor}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhj)ubj)}(hhh]h)}(hunion of all vendor infoframesh]hunion of all vendor infoframes}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhMhj{ubjn)}(h``audio`` audio infoframe h](jt)}(h ``audio``h]jz)}(hjhh]haudio}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjbubj)}(hhh]h)}(haudio infoframeh]haudio infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hMhj{ubjn)}(h-``drm`` Dynamic Range and Mastering infoframeh](jt)}(h``drm``h]jz)}(hjh]hdrm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubj)}(hhh]h)}(h%Dynamic Range and Mastering infoframeh]h%Dynamic Range and Mastering infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj{ubeh}(h]h ]h"]h$]h&]uh1jhhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj&hNubh)}(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:407: ./include/linux/hdmi.hhMhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:407: ./include/linux/hdmi.hhMhjhhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_avi_infoframe_init (C function)c.hdmi_avi_infoframe_inithNtauh1jxhjhhhNhNubj)}(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"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chK7ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hK7ubj)}(hhdmi_avi_infoframe_inith]j)}(hhdmi_avi_infoframe_inith]hhdmi_avi_infoframe_init}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj0hK7ubj)}(h"(struct hdmi_avi_infoframe *frame)h]j)}(h struct hdmi_avi_infoframe *frameh](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)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjEsbc.hdmi_avi_infoframe_initasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj[ubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj0hK7ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj0hK7ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj0hK7hjhhubj)}(hhh]h)}(h initialize an HDMI AVI infoframeh]h initialize an HDMI AVI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chK7hjߨhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hK7ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hI**Parameters** ``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframeh](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:410: ./drivers/video/hdmi.chK;hjubji)}(hhh]jn)}(h7``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframeh](jt)}(h$``struct hdmi_avi_infoframe *frame``h]jz)}(hj#h]h struct hdmi_avi_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:410: ./drivers/video/hdmi.chK=hjubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chK8hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj8hK=hjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_avi_infoframe_check (C function)c.hdmi_avi_infoframe_checkhNtauh1jxhjhhhNhNubj)}(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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhKRubj)}(hhdmi_avi_infoframe_checkh]j)}(hhdmi_avi_infoframe_checkh]hhdmi_avi_infoframe_check}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhKRubj)}(h"(struct hdmi_avi_infoframe *frame)h]j)}(h struct hdmi_avi_infoframe *frameh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjǩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjةhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjթubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjکmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_avi_infoframe_checkasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhKRubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjhKRubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhKRhjrhhubj)}(hhh]h)}(hcheck a HDMI AVI infoframeh]hcheck a HDMI AVI infoframe}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKRhj:hhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhKRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1jhhhjhNhNubj)}(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%)}(hj_h]h Parameters}(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:410: ./drivers/video/hdmi.chKVhjYubji)}(hhh]jn)}(h8``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe h](jt)}(h$``struct hdmi_avi_infoframe *frame``h]jz)}(hj~h]h struct hdmi_avi_infoframe *frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKShjxubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhKShjuubah}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKUhjYubh)}(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ϪhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKThjYubh)}(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:410: ./drivers/video/hdmi.chKWhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)hdmi_avi_infoframe_pack_only (C function)c.hdmi_avi_infoframe_pack_onlyhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_avi_infoframe_pack_onlysbc.hdmi_avi_infoframe_pack_onlyasbuh1hhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKaubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj1hKaubj)}(hhdmi_avi_infoframe_pack_onlyh]j)}(hj.h]hhdmi_avi_infoframe_pack_only}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj1hKaubj)}(hC(const struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h](j)}(h&const struct hdmi_avi_infoframe *frameh](j)}(hjch]hconst}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubh)}(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,c.hdmi_avi_infoframe_pack_onlyasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjWubj)}(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&]noemphjjuh1jhjWubj)}(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 reftargetj1modnameN classnameNjj)}j]j,c.hdmi_avi_infoframe_pack_onlyasbuh1hhj(ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hsizeh]hsize}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj1hKaubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj1hKaubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj1hKahjhhubj)}(hhh]h)}(h)write HDMI AVI infoframe to binary bufferh]h)write HDMI AVI infoframe to binary buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKahjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hKaubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chKehjubji)}(hhh](jn)}(h>``const struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe h](jt)}(h*``const struct hdmi_avi_infoframe *frame``h]jz)}(hjƬh]h&const struct hdmi_avi_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:410: ./drivers/video/hdmi.chKbhjubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hj߬hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj۬hKbhjܬubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj۬hKbhjubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chKchjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKchjubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hj8h]h size_t size}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKdhj2ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKdhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhKdhjubeh}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKfhjubh)}(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 }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKehjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_avi_infoframe_pack (C function)c.hdmi_avi_infoframe_packhNtauh1jxhjhhhNhNubj)}(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}(hjܭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٭ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjޭmodnameN classnameNjj)}j]j%)}jhdmi_avi_infoframe_packsbc.hdmi_avi_infoframe_packasbuh1hhjխhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjխhhhjhKubj)}(hhdmi_avi_infoframe_packh]j)}(hjh]hhdmi_avi_infoframe_pack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjխhhhjhKubj)}(h=(struct hdmi_avi_infoframe *frame, void *buffer, size_t size)h](j)}(h struct hdmi_avi_infoframe *frameh](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)}(hhdmi_avi_infoframeh]hhdmi_avi_infoframe}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]jc.hdmi_avi_infoframe_packasbuh1hhj'ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj9)}(hj9h]h*}(hjuhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj'ubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(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}(hjĮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݮubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.hdmi_avi_infoframe_packasbuh1hhjٮubj)}(h h]h }(hjhhhNhNubah}(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խhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjѭhhhjhKubah}(h]j̭ah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjέhhubj)}(hhh]h)}(h9check a HDMI AVI infoframe, and write it to binary bufferh]h9check a HDMI AVI infoframe, and write it to binary buffer}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jhjέhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1jhhhjhNhNubj)}(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%)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjRubji)}(hhh](jn)}(h8``struct hdmi_avi_infoframe *frame`` HDMI AVI infoframe h](jt)}(h$``struct hdmi_avi_infoframe *frame``h]jz)}(hjwh]h struct hdmi_avi_infoframe *frame}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjqubj)}(hhh]h)}(hHDMI AVI infoframeh]hHDMI AVI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjnubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chKhjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjɯhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjůhKhjƯubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjůhKhjnubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjnubeh}(h]h ]h"]h$]h&]uh1jhhjRubh)}(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:410: ./drivers/video/hdmi.chKhjRubh)}(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}(hjBhhhNhNubah}(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:410: ./drivers/video/hdmi.chKhjRubh)}(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:410: ./drivers/video/hdmi.chKhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_spd_infoframe_init (C function)c.hdmi_spd_infoframe_inithNtauh1jxhjhhhNhNubj)}(hhh](j)}(hgint hdmi_spd_infoframe_init (struct hdmi_spd_infoframe *frame, const char *vendor, const char *product)h]j)}(hfint hdmi_spd_infoframe_init(struct hdmi_spd_infoframe *frame, const char *vendor, const char *product)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hhdmi_spd_infoframe_inith]j)}(hhdmi_spd_infoframe_inith]hhdmi_spd_infoframe_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(hK(struct hdmi_spd_infoframe *frame, const char *vendor, const char *product)h](j)}(h struct hdmi_spd_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_spd_infoframeh]hhdmi_spd_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_spd_infoframe_initasbuh1hhjðubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjðubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjðubj)}(hframeh]hframe}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjðubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *vendorh](j)}(hjch]hconst}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hcharh]hchar}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hvendorh]hvendor}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *producth](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjͱhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hproducth]hproduct}(hjڱhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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)jhuh1jhjhKhjhhubj)}(hhh]h)}(h initialize an HDMI SPD infoframeh]h initialize an HDMI SPD infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chKhj ubji)}(hhh](jn)}(h8``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h$``struct hdmi_spd_infoframe *frame``h]jz)}(hjEh]h struct hdmi_spd_infoframe *frame}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhj?ubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jmhjZhKhj<ubjn)}(h%``const char *vendor`` vendor string h](jt)}(h``const char *vendor``h]jz)}(hj~h]hconst char *vendor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjxubj)}(hhh]h)}(h vendor stringh]h vendor string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj<ubjn)}(h'``const char *product`` product string h](jt)}(h``const char *product``h]jz)}(hjh]hconst char *product}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjubj)}(hhh]h)}(hproduct stringh]hproduct string}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhj ubh)}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_spd_infoframe_check (C function)c.hdmi_spd_infoframe_checkhNtauh1jxhjhhhNhNubj)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjEhKubj)}(hhdmi_spd_infoframe_checkh]j)}(hhdmi_spd_infoframe_checkh]hhdmi_spd_infoframe_check}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhjEhKubj)}(h"(struct hdmi_spd_infoframe *frame)h]j)}(h struct hdmi_spd_infoframe *frameh](j)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(hhdmi_spd_infoframeh]hhdmi_spd_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjZsbc.hdmi_spd_infoframe_checkasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hframeh]hframe}(hjͳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubah}(h]h ]h"]h$]h&]jjuh1jhj3hhhjEhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj/hhhjEhKubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhjEhKhj,hhubj)}(hhh]h)}(hcheck a HDMI SPD infoframeh]hcheck a HDMI SPD infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh]jn)}(h8``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h$``struct hdmi_spd_infoframe *frame``h]jz)}(hj8h]h struct hdmi_spd_infoframe *frame}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj6ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhj2ubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jmhjMhKhj/ubah}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chKhjubh)}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)hdmi_spd_infoframe_pack_only (C function)c.hdmi_spd_infoframe_pack_onlyhNtauh1jxhjhhhNhNubj)}(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}(hjʴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǴubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj̴modnameN classnameNjj)}j]j%)}jhdmi_spd_infoframe_pack_onlysbc.hdmi_spd_infoframe_pack_onlyasbuh1hhjôhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjôhhhjhM ubj)}(hhdmi_spd_infoframe_pack_onlyh]j)}(hjh]hhdmi_spd_infoframe_pack_only}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjôhhhjhM ubj)}(hC(const struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h](j)}(h&const struct hdmi_spd_infoframe *frameh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_spd_infoframeh]hhdmi_spd_infoframe}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]jc.hdmi_spd_infoframe_pack_onlyasbuh1hhjubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj~hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}(hj͵hhhNhNubah}(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.hdmi_spd_infoframe_pack_onlyasbuh1hhjubj)}(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&]jjuh1jhjôhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(h)write HDMI SPD infoframe to binary bufferh]h)write HDMI SPD infoframe to binary buffer}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM hj<hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjhNhNubj)}(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%)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj[ubji)}(hhh](jn)}(h>``const struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h*``const struct hdmi_spd_infoframe *frame``h]jz)}(hjh]h&const struct hdmi_spd_infoframe *frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj~ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM hjzubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jmhjhM hjwubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjҶhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjζhMhj϶ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjζhMhjwubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj hhhNhNubah}(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%)}(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:410: ./drivers/video/hdmi.chMhj[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 }(hjChhhNhNubj%)}(h **frame**h]hframe}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubh 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.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_spd_infoframe_pack (C function)c.hdmi_spd_infoframe_packhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_spd_infoframe_packsbc.hdmi_spd_infoframe_packasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM?ubj)}(hhdmi_spd_infoframe_packh]j)}(hjh]hhdmi_spd_infoframe_pack}(hjʷhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƷubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM?ubj)}(h=(struct hdmi_spd_infoframe *frame, void *buffer, size_t size)h](j)}(h struct hdmi_spd_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_spd_infoframeh]hhdmi_spd_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.hdmi_spd_infoframe_packasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjݷubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjQubj)}(hbufferh]hbuffer}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjݷubj)}(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.hdmi_spd_infoframe_packasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjƸhhhNhNubah}(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)}(h9check a HDMI SPD infoframe, and write it to binary bufferh]h9check a HDMI SPD infoframe, and write it to binary buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMChj ubji)}(hhh](jn)}(h8``struct hdmi_spd_infoframe *frame`` HDMI SPD infoframe h](jt)}(h$``struct hdmi_spd_infoframe *frame``h]jz)}(hj1h]h struct hdmi_spd_infoframe *frame}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj/ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMAhj+ubj)}(hhh]h)}(hHDMI SPD infoframeh]hHDMI SPD infoframe}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMAhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhjFhMAhj(ubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjjh]h void *buffer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMBhjdubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jmhjhMBhj(ubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMChjubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMChj(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMEhj 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 }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMDhj 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&hdmi_audio_infoframe_init (C function)c.hdmi_audio_infoframe_inithNtauh1jxhjhhhNhNubj)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM]ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjRhM]ubj)}(hhdmi_audio_infoframe_inith]j)}(hhdmi_audio_infoframe_inith]hhdmi_audio_infoframe_init}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjRhM]ubj)}(h$(struct hdmi_audio_infoframe *frame)h]j)}(h"struct hdmi_audio_infoframe *frameh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjgsbc.hdmi_audio_infoframe_initasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(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&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhj@hhhjRhM]ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj<hhhjRhM]ubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1jhjRhM]hj9hhubj)}(hhh]h)}(h"initialize an HDMI audio infoframeh]h"initialize an HDMI audio infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM]hjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhM]ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMahj ubji)}(hhh]jn)}(h<``struct hdmi_audio_infoframe *frame`` HDMI audio infoframe h](jt)}(h&``struct hdmi_audio_infoframe *frame``h]jz)}(hjEh]h"struct hdmi_audio_infoframe *frame}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM^hj?ubj)}(hhh]h)}(hHDMI audio infoframeh]hHDMI audio infoframe}(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$hj~ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM_hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hdmi_audio_infoframe_check (C function)c.hdmi_audio_infoframe_checkhNtauh1jxhjhhhNhNubj)}(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}(hjŻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMyubj)}(h h]h }(hjԻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjӻhMyubj)}(hhdmi_audio_infoframe_checkh]j)}(hhdmi_audio_infoframe_checkh]hhdmi_audio_infoframe_check}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjӻhMyubj)}(h*(const struct hdmi_audio_infoframe *frame)h]j)}(h(const struct hdmi_audio_infoframe *frameh](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)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j%)}jjsbc.hdmi_audio_infoframe_checkasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjӻhMyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjӻhMyubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjӻhMyhjhhubj)}(hhh]h)}(hcheck a HDMI audio infoframeh]hcheck a HDMI audio infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjӻhMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(hj¼h]h Parameters}(hjļhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM}hjubji)}(hhh]jn)}(hB``const struct hdmi_audio_infoframe *frame`` HDMI audio infoframe h](jt)}(h,``const struct hdmi_audio_infoframe *frame``h]jz)}(hjh]h(const struct hdmi_audio_infoframe *frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj߼ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMzhjۼubj)}(hhh]h)}(hHDMI audio infoframeh]hHDMI audio infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjۼubeh}(h]h ]h"]h$]h&]uh1jmhjhMzhjؼ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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM|hjubh)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM{hjubh)}(h9Returns 0 on success or a negative error code on failure.h]h9Returns 0 on success or a negative error code on failure.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+hdmi_audio_infoframe_pack_only (C function) c.hdmi_audio_infoframe_pack_onlyhNtauh1jxhjhhhNhNubj)}(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}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j%)}jhdmi_audio_infoframe_pack_onlysb c.hdmi_audio_infoframe_pack_onlyasbuh1hhjlhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhjhMubj)}(hhdmi_audio_infoframe_pack_onlyh]j)}(hjh]hhdmi_audio_infoframe_pack_only}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhjhMubj)}(hE(const struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h](j)}(h(const struct hdmi_audio_infoframe *frameh](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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.hdmi_audio_infoframe_pack_onlyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj9)}(hj9h]h*}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubj)}(hbufferh]hbuffer}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(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]j c.hdmi_audio_infoframe_pack_onlyasbuh1hhjubj)}(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&]jjuh1jhjlhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhhjhMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjehhubj)}(hhh]h)}(h+write HDMI audio infoframe to binary bufferh]h+write HDMI audio infoframe to binary buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubji)}(hhh](jn)}(hB``const struct hdmi_audio_infoframe *frame`` HDMI audio infoframe h](jt)}(h,``const struct hdmi_audio_infoframe *frame``h]jz)}(hj)h]h(const 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:410: ./drivers/video/hdmi.chMhj#ubj)}(hhh]h)}(hHDMI audio infoframeh]hHDMI audio infoframe}(hjBhhhNhNubah}(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)}(hjbh]h void *buffer}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj\ubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhj ubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of 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&]uh1jhhjubh)}(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:410: ./drivers/video/hdmi.chMhjubh)}(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 }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&hdmi_audio_infoframe_pack (C function)c.hdmi_audio_infoframe_packhNtauh1jxhjhhhNhNubj)}(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&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j%)}jhdmi_audio_infoframe_packsbc.hdmi_audio_infoframe_packasbuh1hhj8hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj`hMubj)}(hhdmi_audio_infoframe_packh]j)}(hj]h]hhdmi_audio_infoframe_pack}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj`hMubj)}(h?(struct hdmi_audio_infoframe *frame, void *buffer, size_t size)h](j)}(h"struct hdmi_audio_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_audio_infoframeh]hhdmi_audio_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j[c.hdmi_audio_infoframe_packasbuh1hhjubj)}(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 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*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbufferh]hbuffer}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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_audio_infoframe_packasbuh1hhj<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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj`hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhj`hMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1jhj`hMhj1hhubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh](jn)}(h<``struct hdmi_audio_infoframe *frame`` HDMI Audio infoframe h](jt)}(h&``struct hdmi_audio_infoframe *frame``h]jz)}(hjh]h"struct hdmi_audio_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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI Audio infoframeh]hHDMI Audio infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./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(hMhjubjn)}(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:410: ./drivers/video/hdmi.chMhjFubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhjahMhjubeh}(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:410: ./drivers/video/hdmi.chMhjubh)}(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 }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-hdmi_audio_infoframe_pack_for_dp (C function)"c.hdmi_audio_infoframe_pack_for_dphNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}j hdmi_audio_infoframe_pack_for_dpsb"c.hdmi_audio_infoframe_pack_for_dpasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h hdmi_audio_infoframe_pack_for_dph]j)}(hjh]h hdmi_audio_infoframe_pack_for_dp}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(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&]uh1jhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(hhdmi_audio_infoframeh]hhdmi_audio_infoframe}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j "c.hdmi_audio_infoframe_pack_for_dpasbuh1hhj;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct dp_sdp *sdph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdp_sdph]hdp_sdp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j "c.hdmi_audio_infoframe_pack_for_dpasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hsdph]hsdp}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h u8 dp_versionh](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.hdmi_audio_infoframe_pack_for_dpasbuh1hhj6ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h dp_versionh]h dp_version}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(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+Pack a HDMI Audio infoframe for DisplayPorth]h+Pack a HDMI Audio infoframe for DisplayPort}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh](jn)}(hB``const struct hdmi_audio_infoframe *frame`` HDMI Audio infoframe h](jt)}(h,``const struct hdmi_audio_infoframe *frame``h]jz)}(hjh]h(const struct hdmi_audio_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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI Audio infoframeh]hHDMI Audio infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h>``struct dp_sdp *sdp`` Secondary data packet for DisplayPort. 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(h&Secondary data packet for DisplayPort.h]h&Secondary data packet for DisplayPort.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjubjn)}(hB``u8 dp_version`` DisplayPort version to be encoded in the header h](jt)}(h``u8 dp_version``h]jz)}(hjFh]h u8 dp_version}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj@ubj)}(hhh]h)}(h/DisplayPort version to be encoded in the headerh]h/DisplayPort version to be encoded in the header}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jmhj[hMhjubeh}(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:410: ./drivers/video/hdmi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(h **Return**h]j%)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hdmi_vendor_infoframe_init (C function)c.hdmi_vendor_infoframe_inithNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hhdmi_vendor_infoframe_inith]j)}(hhdmi_vendor_infoframe_inith]hhdmi_vendor_infoframe_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h%(struct hdmi_vendor_infoframe *frame)h]j)}(h#struct hdmi_vendor_infoframe *frameh](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)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_vendor_infoframe_initasbuh1hhj&ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(hframeh]hframe}(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#initialize an HDMI vendor infoframeh]h#initialize an HDMI vendor infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI vendor infoframeh]hHDMI vendor infoframe}(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$hj'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(hdmi_vendor_infoframe_check (C function)c.hdmi_vendor_infoframe_checkhNtauh1jxhjhhhNhNubj)}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMEubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj|hMEubj)}(hhdmi_vendor_infoframe_checkh]j)}(hhdmi_vendor_infoframe_checkh]hhdmi_vendor_infoframe_check}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjjhhhj|hMEubj)}(h%(struct hdmi_vendor_infoframe *frame)h]j)}(h#struct hdmi_vendor_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_vendor_infoframeh]hhdmi_vendor_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_vendor_infoframe_checkasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjjhhhj|hMEubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfhhhj|hMEubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhj|hMEhjchhubj)}(hhh]h)}(hcheck a HDMI vendor infoframeh]hcheck a HDMI vendor infoframe}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMEhj+hhubah}(h]h ]h"]h$]h&]uh1jhjchhhj|hMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhjhNhNubj)}(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%)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMIhjJubji)}(hhh]jn)}(h7``struct hdmi_vendor_infoframe *frame`` HDMI infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hjoh]h#struct hdmi_vendor_infoframe *frame}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMFhjiubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhMFhjfubah}(h]h ]h"]h$]h&]uh1jhhjJubh)}(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:410: ./drivers/video/hdmi.chMHhjJubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMGhjJubh)}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMJhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,hdmi_vendor_infoframe_pack_only (C function)!c.hdmi_vendor_infoframe_pack_onlyhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_vendor_infoframe_pack_onlysb!c.hdmi_vendor_infoframe_pack_onlyasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMVubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMVubj)}(hhdmi_vendor_infoframe_pack_onlyh]j)}(hjh]hhdmi_vendor_infoframe_pack_only}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hMVubj)}(hF(const struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h](j)}(h)const struct hdmi_vendor_infoframe *frameh](j)}(hjch]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j!c.hdmi_vendor_infoframe_pack_onlyasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(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&]noemphjjuh1jhjHubj)}(h size_t sizeh](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]j!c.hdmi_vendor_infoframe_pack_onlyasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj"hMVubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj"hMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj"hMVhjhhubj)}(hhh]h)}(h.write a HDMI vendor infoframe to binary bufferh]h.write a HDMI vendor infoframe to binary buffer}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMVhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhj"hMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMZhjubji)}(hhh](jn)}(h=``const struct hdmi_vendor_infoframe *frame`` HDMI infoframe h](jt)}(h-``const struct hdmi_vendor_infoframe *frame``h]jz)}(hjh]h)const struct hdmi_vendor_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:410: ./drivers/video/hdmi.chMWhjubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMWhjubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chMXhjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMXhjubjn)}(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:410: ./drivers/video/hdmi.chMYhj#ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMYhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMYhjubeh}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM[hjubh)}(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 }(hjzhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzubh 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.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMZhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hdmi_vendor_infoframe_pack (C function)c.hdmi_vendor_infoframe_packhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_vendor_infoframe_packsbc.hdmi_vendor_infoframe_packasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hhdmi_vendor_infoframe_packh]j)}(hjh]hhdmi_vendor_infoframe_pack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h@(struct hdmi_vendor_infoframe *frame, void *buffer, size_t size)h](j)}(h#struct hdmi_vendor_infoframe *frameh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_vendor_infoframeh]hhdmi_vendor_infoframe}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]jc.hdmi_vendor_infoframe_packasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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&]uh1j8hjub;j)}(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.hdmi_vendor_infoframe_packasbuh1hhjubj)}(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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h``struct hdmi_vendor_infoframe *frame`` HDMI Vendor infoframe h](jt)}(h'``struct hdmi_vendor_infoframe *frame``h]jz)}(hjhh]h#struct hdmi_vendor_infoframe *frame}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjbubj)}(hhh]h)}(hHDMI Vendor infoframeh]hHDMI Vendor infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hMhj_ubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj_ubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of 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&]uh1jhhjCubh)}(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:410: ./drivers/video/hdmi.chMhjCubh)}(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}(hj3hhhNhNubah}(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:410: ./drivers/video/hdmi.chMhjCubh)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_drm_infoframe_init (C function)c.hdmi_drm_infoframe_inithNtauh1jxhjhhhNhNubj)}(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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjhMubj)}(hhdmi_drm_infoframe_inith]j)}(hhdmi_drm_infoframe_inith]hhdmi_drm_infoframe_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjhMubj)}(h"(struct hdmi_drm_infoframe *frame)h]j)}(h struct hdmi_drm_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_drm_infoframeh]hhdmi_drm_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_drm_infoframe_initasbuh1hhjubj)}(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&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjwhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhjhMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjphhubj)}(hhh]h)}(h9initialize an HDMI Dynaminc Range and mastering infoframeh]h9initialize an HDMI Dynaminc Range and mastering infoframe}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjWubji)}(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&]uh1jyhjzubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjvubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjsubah}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjWubh)}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_drm_infoframe_check (C function)c.hdmi_drm_infoframe_checkhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(hhdmi_drm_infoframe_checkh]j)}(hhdmi_drm_infoframe_checkh]hhdmi_drm_infoframe_check}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h"(struct hdmi_drm_infoframe *frame)h]j)}(h struct hdmi_drm_infoframe *frameh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_drm_infoframe_checkasbuh1hhj5ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(hcheck a HDMI DRM infoframeh]hcheck a HDMI DRM infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh]jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hjh]h struct hdmi_drm_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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(heValidates that the infoframe is consistent. Returns 0 on success or a negative error code on failure.h]heValidates that the infoframe is consistent. Returns 0 on success or a negative error code on failure.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)hdmi_drm_infoframe_pack_only (C function)c.hdmi_drm_infoframe_pack_onlyhNtauh1jxhjhhhNhNubj)}(hhh](j)}(hhssize_t hdmi_drm_infoframe_pack_only (const struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h]j)}(hgssize_t hdmi_drm_infoframe_pack_only(const struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_drm_infoframe_pack_onlysbc.hdmi_drm_infoframe_pack_onlyasbuh1hhjyhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubj)}(hhdmi_drm_infoframe_pack_onlyh]j)}(hjh]hhdmi_drm_infoframe_pack_only}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhhjhMubj)}(hC(const struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h](j)}(h&const struct hdmi_drm_infoframe *frameh](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)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.hdmi_drm_infoframe_pack_onlyasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *bufferh](j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj9)}(hj9h]h*}(hjvhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjVubj)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(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.hdmi_drm_infoframe_pack_onlyasbuh1hhjubj)}(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&]jjuh1jhjyhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjuhhhjhMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjrhhubj)}(hhh]h)}(h)write HDMI DRM infoframe to binary bufferh]h)write HDMI DRM infoframe to binary buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct hdmi_drm_infoframe *frame`` HDMI DRM 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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh](jn)}(h>``const struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h*``const struct hdmi_drm_infoframe *frame``h]jz)}(hj6h]h&const struct hdmi_drm_infoframe *frame}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj0ubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jmhjKhMhj-ubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjoh]h void *buffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjmubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjiubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj-ubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of 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&]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:410: ./drivers/video/hdmi.chMhjubh)}(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 }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hdmi_drm_infoframe_pack (C function)c.hdmi_drm_infoframe_packhNtauh1jxhjhhhNhNubj)}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]j%)}jhdmi_drm_infoframe_packsbc.hdmi_drm_infoframe_packasbuh1hhjEhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjmhM,ubj)}(hhdmi_drm_infoframe_packh]j)}(hjjh]hhdmi_drm_infoframe_pack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjmhM,ubj)}(h=(struct hdmi_drm_infoframe *frame, void *buffer, size_t size)h](j)}(h struct hdmi_drm_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_drm_infoframeh]hhdmi_drm_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jhc.hdmi_drm_infoframe_packasbuh1hhjubj)}(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 void *bufferh](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbufferh]hbuffer}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jhc.hdmi_drm_infoframe_packasbuh1hhjIubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hsizeh]hsize}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjmhM,ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjAhhhjmhM,ubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhjmhM,hj>hhubj)}(hhh]h)}(h9check a HDMI DRM infoframe, and write it to binary bufferh]h9check a HDMI DRM infoframe, and write it to binary buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM,hjhhubah}(h]h ]h"]h$]h&]uh1jhj>hhhjmhM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chM0hjubji)}(hhh](jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hjh]h struct hdmi_drm_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:410: ./drivers/video/hdmi.chM.hjubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM.hjubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hj h]h void *buffer}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM/hjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM/hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj5hM/hjubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjYh]h size_t size}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM0hjSubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhM0hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjnhM0hjubeh}(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:410: ./drivers/video/hdmi.chM2hjubh)}(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 }(hjhhhNhNubj%)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM1hjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%hdmi_infoframe_pack_only (C function)c.hdmi_infoframe_pack_onlyhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_infoframe_pack_onlysbc.hdmi_infoframe_pack_onlyasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hhdmi_infoframe_pack_onlyh]j)}(hjh]hhdmi_infoframe_pack_only}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h>(const union hdmi_infoframe *frame, void *buffer, size_t size)h](j)}(h!const union hdmi_infoframe *frameh](j)}(hjch]hconst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hj֥h]hunion}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.hdmi_infoframe_pack_onlyasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubj)}(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&]noemphjjuh1jhjDubj)}(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.hdmi_infoframe_pack_onlyasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h'write a HDMI infoframe to binary bufferh]h'write a HDMI infoframe to binary buffer}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjohhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh](jn)}(h5``const union hdmi_infoframe *frame`` HDMI infoframe h](jt)}(h%``const union hdmi_infoframe *frame``h]jz)}(hjh]h!const union 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj>hhhNhNubah}(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%)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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 }(hjvhhhNhNubj%)}(h **frame**h]hframe}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjvubh 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.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j hdmi_infoframe_pack (C function)c.hdmi_infoframe_packhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jhdmi_infoframe_packsbc.hdmi_infoframe_packasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hhdmi_infoframe_packh]j)}(hjh]hhdmi_infoframe_pack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h8(union hdmi_infoframe *frame, void *buffer, size_t size)h](j)}(hunion hdmi_infoframe *frameh](j)}(hj֥h]hunion}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]jc.hdmi_infoframe_packasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hframeh]hframe}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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.hdmi_infoframe_packasbuh1hhjubj)}(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&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h5check a HDMI infoframe, and write it to binary bufferh]h5check a HDMI 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:410: ./drivers/video/hdmi.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jhhhjhNhNubj)}(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%)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj?ubji)}(hhh](jn)}(h/``union hdmi_infoframe *frame`` HDMI infoframe h](jt)}(h``union hdmi_infoframe *frame``h]jz)}(hjdh]hunion hdmi_infoframe *frame}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj^ubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jmhjyhMhj[ubjn)}(h$``void *buffer`` destination buffer h](jt)}(h``void *buffer``h]jz)}(hjh]h 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhj[ubjn)}(h``size_t size`` size of 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&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hsize of bufferh]hsize of 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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./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:410: ./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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jhdmi_infoframe_log (C function)c.hdmi_infoframe_loghNtauh1jxhjhhhNhNubj)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMubj)}(hhdmi_infoframe_logh]j)}(hhdmi_infoframe_logh]hhdmi_infoframe_log}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhjhMubj)}(hJ(const char *level, struct device *dev, const union hdmi_infoframe *frame)h](j)}(hconst char *levelh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(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)}(hlevelh]hlevel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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 reftargetj1modnameN classnameNjj)}j]j%)}jjsbc.hdmi_infoframe_logasbuh1hhj ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj]hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdevh]hdev}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!const union hdmi_infoframe *frameh](j)}(hjch]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj֥h]hunion}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jKc.hdmi_infoframe_logasbuh1hhjubj)}(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&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjohhhjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjlhhubj)}(hhh]h)}(hlog info of HDMI infoframeh]hlog info of HDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const char *level`` logging level ``struct device *dev`` device ``const union hdmi_infoframe *frame`` HDMI infoframeh](h)}(h**Parameters**h]j%)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj;ubji)}(hhh](jn)}(h$``const char *level`` logging level h](jt)}(h``const char *level``h]jz)}(hj`h]hconst char *level}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjZubj)}(hhh]h)}(h logging levelh]h logging level}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhMhjWubjn)}(h``struct device *dev`` device h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjWubjn)}(h4``const union hdmi_infoframe *frame`` HDMI infoframeh](jt)}(h%``const union hdmi_infoframe *frame``h]jz)}(hjh]h!const union 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI infoframeh]hHDMI infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjWubeh}(h]h ]h"]h$]h&]uh1jhhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+hdmi_drm_infoframe_unpack_only (C function) c.hdmi_drm_infoframe_unpack_onlyhNtauh1jxhjhhhNhNubj)}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj:hMubj)}(hhdmi_drm_infoframe_unpack_onlyh]j)}(hhdmi_drm_infoframe_unpack_onlyh]hhdmi_drm_infoframe_unpack_only}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj:hMubj)}(hC(struct hdmi_drm_infoframe *frame, const void *buffer, size_t size)h](j)}(h struct hdmi_drm_infoframe *frameh](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubh)}(hhh]j)}(hhdmi_drm_infoframeh]hhdmi_drm_infoframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjOsb c.hdmi_drm_infoframe_unpack_onlyasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjeubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(hconst void *bufferh](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)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j c.hdmi_drm_infoframe_unpack_onlyasbuh1hhj4ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hsizeh]hsize}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(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)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:410: ./drivers/video/hdmi.chMhjubji)}(hhh](jn)}(h8``struct hdmi_drm_infoframe *frame`` HDMI DRM infoframe h](jt)}(h$``struct hdmi_drm_infoframe *frame``h]jz)}(hjh]h struct hdmi_drm_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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(hHDMI DRM infoframeh]hHDMI DRM infoframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h%``const void *buffer`` source buffer h](jt)}(h``const void *buffer``h]jz)}(hj h]hconst 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:410: ./drivers/video/hdmi.chMhjubj)}(hhh]h)}(h source bufferh]h source buffer}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hMhjubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjDh]h size_t size}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhj>ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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 }(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$hjubh9 of the HDMI Dynamic Range and Mastering (DRM) infoframe.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubh)}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"hdmi_infoframe_unpack (C function)c.hdmi_infoframe_unpackhNtauh1jxhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMUubj)}(hhdmi_infoframe_unpackh]j)}(hhdmi_infoframe_unpackh]hhdmi_infoframe_unpack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMUubj)}(h>(union hdmi_infoframe *frame, const void *buffer, size_t size)h](j)}(hunion hdmi_infoframe *frameh](j)}(hj֥h]hunion}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hhdmi_infoframeh]hhdmi_infoframe}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j%)}jjsbc.hdmi_infoframe_unpackasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hframeh]hframe}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubj)}(hconst void *bufferh](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)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubj)}(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]jnc.hdmi_infoframe_unpackasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hj2hhhNhNubah}(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)}(h(unpack binary buffer to a HDMI infoframeh]h(unpack binary buffer to a HDMI infoframe}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMUhjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jhhhjhNhNubj)}(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%)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMYhjxubji)}(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:410: ./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:410: ./drivers/video/hdmi.chMWhjubj)}(hhh]h)}(h source bufferh]h source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMWhjubjn)}(h``size_t size`` size of buffer h](jt)}(h``size_t size``h]jz)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMXhj ubj)}(hhh]h)}(hsize of bufferh]hsize of buffer}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMXhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$hMXhjubeh}(h]h ]h"]h$]h&]uh1jhhjxubh)}(h**Description**h]j%)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chMZhjxubh)}(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 }(hj`hhhNhNubj%)}(h **buffer**h]hbuffer}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubh into a structured }(hj`hhhNhNubj%)}(h **frame**h]hframe}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj`ubhl of a HDMI infoframe. Also verifies 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:410: ./drivers/video/hdmi.chMYhjxubh)}(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&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:410: ./drivers/video/hdmi.chM^hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(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:416: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_recth]j)}(hjh]hdrm_rect}(hj hhhNhNubah}(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)}(htwo dimensional rectangleh]htwo dimensional rectangle}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK%hj)hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjDjjDjjjuh1jhhhjhNhNubj)}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubh:}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK)hjHubj@)}(h,struct drm_rect { int x1, y1, x2, y2; };h]h,struct drm_rect { int x1, y1, x2, y2; };}hjisbah}(h]h ]h"]h$]h&]jjuh1j?h[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK+hjHubh)}(h **Members**h]j%)}(hjzh]hMembers}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK/hjHubji)}(hhh](jn)}(h2``x1`` horizontal starting coordinate (inclusive) h](jt)}(h``x1``h]jz)}(hjh]hx1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK'hjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK'hjubjn)}(h0``y1`` vertical starting coordinate (inclusive) h](jt)}(h``y1``h]jz)}(hjh]hy1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK)hjubj)}(hhh]h)}(h(vertical starting coordinate (inclusive)h]h(vertical starting coordinate (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK)hjubjn)}(h0``x2`` horizontal ending coordinate (exclusive) h](jt)}(h``x2``h]jz)}(hj h]hx2}(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:419: ./include/drm/drm_rect.hhK(hjubj)}(hhh]h)}(h(horizontal ending coordinate (exclusive)h]h(horizontal ending coordinate (exclusive)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK(hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hK(hjubjn)}(h-``y2`` vertical ending coordinate (exclusive)h](jt)}(h``y2``h]jz)}(hjDh]hy2}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK)hj>ubj)}(hhh]h)}(h&vertical ending coordinate (exclusive)h]h&vertical ending coordinate (exclusive)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK*hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jmhjYhK)hjubeh}(h]h ]h"]h$]h&]uh1jhhjHubeh}(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:419: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./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:419: ./include/drm/drm_rect.hhK3ubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhK3ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK3hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK3ubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_INIT (x, y, w, h)``h]jz)}(hjh]hDRM_RECT_INIT (x, y, w, h)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK5hjhhubjb=)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK3hjubah}(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%)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK7hj*ubji)}(hhh](jn)}(h``x`` x coordinate h](jt)}(h``x``h]jz)}(hjOh]hx}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK4hjIubj)}(hhh]h)}(h x coordinateh]h x coordinate}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhK4hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jmhjdhK4hjFubjn)}(h``y`` y coordinate h](jt)}(h``y``h]jz)}(hjh]hy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK5hjubj)}(hhh]h)}(h y coordinateh]h y coordinate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK5hjFubjn)}(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:419: ./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&]uh1jmhjhK6hjFubjn)}(h ``h`` height h](jt)}(h``h``h]jz)}(hjh]hh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK7hjubj)}(hhh]h)}(hheighth]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhK7hjFubeh}(h]h ]h"]h$]h&]uh1jhhj*ubh)}(h **Return**h]j%)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK9hj*ubh)}(h&A new rectangle of the specified size.h]h&A new rectangle of the specified size.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK9hj*ubeh}(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)}(hjth]h DRM_RECT_FMT}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKCubah}(h]h ]h"]h$]h&]jjjuh1jjjhjrhhhjhKCubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jhjhKChjohhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjohhhjhKCubeh}(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:419: ./include/drm/drm_rect.hhKEhjhhubjb=)}(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:419: ./include/drm/drm_rect.hhKChjubeh}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1ja=hjhKChjhhubjy)}(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)}(hjh]h DRM_RECT_ARG}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKGubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj.hKGubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj.hKGhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj.hKGubeh}(h]h ](jmacroeh"]h$]h&]jjjjGjjGjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_ARG (r)``h]jz)}(hjMh]hDRM_RECT_ARG (r)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjKubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKIhjhhubjb=)}(h:printf arguments for :c:type:`struct drm_rect ` h]h)}(h9printf arguments for :c:type:`struct drm_rect `h](hprintf arguments for }(hjghhhNhNubh)}(h$:c:type:`struct drm_rect `h]jz)}(hjqh]hstruct drm_rect}(hjshhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_rectuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKGhjgubeh}(h]h ]h"]h$]h&]uh1hhjhKGhjcubah}(h]h ]h"]h$]h&]uh1ja=hjhKGhjhhubj)}(h(**Parameters** ``r`` rectangle structh](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:419: ./include/drm/drm_rect.hhKKhjubji)}(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:419: ./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:419: ./include/drm/drm_rect.hhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKMhjubah}(h]h ]h"]h$]h&]uh1jhhjubeh}(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)}(hjh]hDRM_RECT_FP_FMT}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKMubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj1hKMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj1hKMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj1hKMubeh}(h]h ](jmacroeh"]h$]h&]jjjjJjjJjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_FP_FMT``h]jz)}(hjPh]hDRM_RECT_FP_FMT}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKOhjhhubjb=)}(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 }(hjjhhhNhNubh)}(h$:c:type:`struct drm_rect `h]jz)}(hjth]hstruct drm_rect}(hjvhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_rectuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKMhjjubh in 16.16 fixed point}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKMhjfubah}(h]h ]h"]h$]h&]uh1ja=hjhKMhjhhubjy)}(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:419: ./include/drm/drm_rect.hhKQubah}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKQhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKQubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubh)}(h``DRM_RECT_FP_ARG (r)``h]jz)}(hjh]hDRM_RECT_FP_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:419: ./include/drm/drm_rect.hhKShjhhubjb=)}(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 }(hj hhhNhNubh)}(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:419: ./include/drm/drm_rect.hhKQhj ubh in 16.16 fixed point}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hKQhjubah}(h]h ]h"]h$]h&]uh1ja=hj2hKQhjhhubj)}(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%)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKUhjCubji)}(hhh]jn)}(h``r`` rectangle struct h](jt)}(h``r``h]jz)}(hjhh]hr}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKRhjbubj)}(hhh]h)}(hrectangle structh]hrectangle struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKRhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hKRhj_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&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKThjCubh)}(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:419: ./include/drm/drm_rect.hhKShjCubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK^ubj)}(h drm_rect_inith]j)}(h drm_rect_inith]h drm_rect_init}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK^ubj)}(h9(struct drm_rect *r, int x, int y, int width, int height)h](j)}(hstruct drm_rect *rh](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_recth]hdrm_rect}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j%)}jj sbc.drm_rect_initasbuh1hhj!ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj9)}(hj9h]h*}(hjqhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubj)}(hrh]hr}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint xh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hxh]hx}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint yh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hyh]hy}(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&]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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hheighth]hheight}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(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)}(h%initialize the rectangle from x/y/w/hh]h%initialize the rectangle from x/y/w/h}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK^hjyhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK^ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(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%)}(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:419: ./include/drm/drm_rect.hhKbhjubji)}(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:419: ./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)}(hjh]hint x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhK`hjubj)}(hhh]h)}(h x coordinateh]h x coordinate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK`hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj hK`hjubjn)}(h``int y`` y coordinate h](jt)}(h ``int y``h]jz)}(hj/h]hint y}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKahj)ubj)}(hhh]h)}(h y coordinateh]h y coordinate}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKahjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jmhjDhKahjubjn)}(h``int width`` width h](jt)}(h ``int width``h]jz)}(hjhh]h int width}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKbhjbubj)}(hhh]h)}(hwidthh]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hKbhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhj}hKbhjubjn)}(h``int height`` heighth](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:419: ./include/drm/drm_rect.hhKdhjubj)}(hhh]h)}(hheighth]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKdhjubeh}(h]h ]h"]h$]h&]uh1jhhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKoubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKoubj)}(hdrm_rect_adjust_sizeh]j)}(hdrm_rect_adjust_sizeh]hdrm_rect_adjust_size}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hKoubj)}(h$(struct drm_rect *r, int dw, int dh)h](j)}(hstruct drm_rect *rh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_adjust_sizeasbuh1hhj4ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(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&]noemphjjuh1jhj0ubj)}(hint dhh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdhh]hdh}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKoubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj hKoubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hKohjhhubj)}(hhh]h)}(h adjust the size of the rectangleh]h adjust the size of the rectangle}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKohj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKoubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjhNhNubj)}(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%)}(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:419: ./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)}(hjeh]hstruct drm_rect *r}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKphj_ubj)}(hhh]h)}(hrectangle to be adjustedh]hrectangle to be adjusted}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKphj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhKphj\ubjn)}(h!``int dw`` horizontal adjustment h](jt)}(h ``int dw``h]jz)}(hjh]hint dw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKqhjubj)}(hhh]h)}(hhorizontal adjustmenth]hhorizontal adjustment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKqhj\ubjn)}(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:419: ./include/drm/drm_rect.hhKrhjubj)}(hhh]h)}(hvertical adjustmenth]hvertical adjustment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKrhj\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:419: ./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 }(hj(hhhNhNubj%)}(h**r**h]hr}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh by }(hj(hhhNhNubj%)}(h**dw**h]hdw}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh% in the horizontal direction, and by }(hj(hhhNhNubj%)}(h**dh**h]hdh}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh8 in the vertical direction, while keeping the center of }(hj(hhhNhNubj%)}(h**r**h]hr}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(ubh stationary.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKshj@ubh)}(hJPositive **dw** and **dh** increase the size, negative values decrease it.h](h Positive }(hjhhhNhNubj%)}(h**dw**h]hdw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h**dh**h]hdh}(hjhhhNhNubah}(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:419: ./include/drm/drm_rect.hhKwhj@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&]uh1jyhj:ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhj6ubj)}(hhh]h)}(hrectangle to be translatedh]hrectangle to be translated}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhKhj3ubjn)}(h"``int dx`` horizontal translation h](jt)}(h ``int dx``h]jz)}(hjuh]hint dx}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjsubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjoubj)}(hhh]h)}(hhorizontal translationh]hhorizontal translation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj3ubjn)}(h ``int dy`` vertical translation h](jt)}(h ``int dy``h]jz)}(hjh]hint dy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hvertical translationh]hvertical translation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubh)}(hdMove rectangle **r** by **dx** in the horizontal direction, and by **dy** in the vertical direction.h](hMove rectangle }(hjhhhNhNubj%)}(h**r**h]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh by }(hjhhhNhNubj%)}(h**dx**h]hdx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh% in the horizontal direction, and by }(hjhhhNhNubj%)}(h**dy**h]hdy}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh in the vertical direction.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_rect_translate_to (C function)c.drm_rect_translate_tohNtauh1jxhjhhhNhNubj)}(hhh](j)}(h=void drm_rect_translate_to (struct drm_rect *r, int x, int y)h]j)}(hh]hint y}(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:419: ./include/drm/drm_rect.hhKhj8ubj)}(hhh]h)}(hvertical positionh]hvertical position}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjShKhjubeh}(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&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubh)}(hbMove rectangle **r** to **x** in the horizontal direction, and to **y** in the vertical direction.h](hMove rectangle }(hjhhhNhNubj%)}(h**r**h]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh to }(hjhhhNhNubj%)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh% in the horizontal direction, and to }(hjhhhNhNubj%)}(h**y**h]hy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh in the vertical direction.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_downscale (C function)c.drm_rect_downscalehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h@void drm_rect_downscale (struct drm_rect *r, int horz, int vert)h]j)}(h?void drm_rect_downscale(struct drm_rect *r, int horz, int vert)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_rect_downscaleh]j)}(hdrm_rect_downscaleh]hdrm_rect_downscale}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h((struct drm_rect *r, int horz, int vert)h](j)}(hstruct drm_rect *rh](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_recth]hdrm_rect}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_downscaleasbuh1hhj-ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj9)}(hj9h]h*}(hj}hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-ubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hint horzh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhorzh]hhorz}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hint verth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hverth]hvert}(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)}(hdownscale a rectangleh]hdownscale a rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_rect *r`` rectangle to be downscaled ``int horz`` horizontal downscale factor ``int vert`` vertical downscale factor **Description** Divide the coordinates of rectangle **r** by **horz** and **vert**.h](h)}(h**Parameters**h]j%)}(hj?h]h Parameters}(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:419: ./include/drm/drm_rect.hhKhj9ubji)}(hhh](jn)}(h2``struct drm_rect *r`` rectangle to be downscaled h](jt)}(h``struct drm_rect *r``h]jz)}(hj^h]hstruct drm_rect *r}(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:419: ./include/drm/drm_rect.hhKhjXubj)}(hhh]h)}(hrectangle to be downscaledh]hrectangle to be downscaled}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jmhjshKhjUubjn)}(h)``int horz`` horizontal downscale factor h](jt)}(h ``int horz``h]jz)}(hjh]hint horz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hhorizontal downscale factorh]hhorizontal downscale factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjUubjn)}(h'``int vert`` vertical downscale factor h](jt)}(h ``int vert``h]jz)}(hjh]hint vert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hvertical downscale factorh]hvertical downscale factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjUubeh}(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&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhj9ubh)}(hCDivide the coordinates of rectangle **r** by **horz** and **vert**.h](h$Divide the coordinates of rectangle }(hj!hhhNhNubj%)}(h**r**h]hr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubh by }(hj!hhhNhNubj%)}(h**horz**h]hhorz}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!ubh and }(hj!hhhNhNubj%)}(h**vert**h]hvert}(hjMhhhNhNubah}(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:419: ./include/drm/drm_rect.hhKhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_width (C function)c.drm_rect_widthhNtauh1jxhjhhhNhNubj)}(hhh](j)}(h-int drm_rect_width (const struct drm_rect *r)h]j)}(h,int drm_rect_width(const struct drm_rect *r)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_rect_widthh]j)}(hdrm_rect_widthh]hdrm_rect_width}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(const struct drm_rect *r)h]j)}(hconst struct drm_rect *rh](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]j%)}jjsbc.drm_rect_widthasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hr}(hj7hhhNhNubah}(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]jyah ](jjeh"]h$]h&]jj)jhuh1jhjhKhj{hhubj)}(hhh]h)}(hdetermine the rectangle widthh]hdetermine the rectangle width}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhj]hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjhNhNubj)}(hy**Parameters** ``const struct drm_rect *r`` rectangle whose width is returned **Return** The width of the 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:419: ./include/drm/drm_rect.hhKhj|ubji)}(hhh]jn)}(h?``const struct drm_rect *r`` rectangle whose width is returned h](jt)}(h``const struct drm_rect *r``h]jz)}(hjh]hconst struct 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:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(h!rectangle whose width is returnedh]h!rectangle whose width is returned}(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 **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:419: ./include/drm/drm_rect.hhKhj|ubh)}(hThe width of the rectangle.h]hThe width of the rectangle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_height (C function)c.drm_rect_heighthNtauh1jxhjhhhNhNubj)}(hhh](j)}(h.int drm_rect_height (const struct drm_rect *r)h]j)}(h-int drm_rect_height(const struct drm_rect *r)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hKubj)}(hdrm_rect_heighth]j)}(hdrm_rect_heighth]hdrm_rect_height}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj/hKubj)}(h(const struct drm_rect *r)h]j)}(hconst struct drm_rect *rh](j)}(hjch]hconst}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjDsbc.drm_rect_heightasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjZubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhj/hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj/hKhjhhubj)}(hhh]h)}(hdetermine the rectangle heighth]hdetermine the rectangle height}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h{**Parameters** ``const struct drm_rect *r`` rectangle whose height is returned **Return** The height of the 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:419: ./include/drm/drm_rect.hhKhjubji)}(hhh]jn)}(h@``const struct drm_rect *r`` rectangle whose height is returned h](jt)}(h``const struct drm_rect *r``h]jz)}(hj<h]hconst struct drm_rect *r}(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:419: ./include/drm/drm_rect.hhKhj6ubj)}(hhh]h)}(h"rectangle whose height is returnedh]h"rectangle whose height is returned}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jmhjQhKhj3ubah}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubh)}(hThe height of the rectangle.h]hThe height of the rectangle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_visible (C function)c.drm_rect_visiblehNtauh1jxhjhhhNhNubj)}(hhh](j)}(h0bool drm_rect_visible (const struct drm_rect *r)h]j)}(h/bool drm_rect_visible(const struct drm_rect *r)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_rect_visibleh]j)}(hdrm_rect_visibleh]hdrm_rect_visible}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(const struct drm_rect *r)h]j)}(hconst struct drm_rect *rh](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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j%)}jjsbc.drm_rect_visibleasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hr}(hjlhhhNhNubah}(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%determine if the rectangle is visibleh]h%determine if the rectangle is visible}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_rect *r`` rectangle whose visibility is returned **Return** ``true`` if the rectangle is visible, ``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:419: ./include/drm/drm_rect.hhKhjubji)}(hhh]jn)}(hD``const struct drm_rect *r`` rectangle whose visibility is returned h](jt)}(h``const struct drm_rect *r``h]jz)}(hjh]hconst struct 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:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(h&rectangle whose visibility is returnedh]h&rectangle whose visibility is returned}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubh)}(h:``true`` if the rectangle is visible, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh if the rectangle is visible, }(hj'hhhNhNubjz)}(h ``false``h]hfalse}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubh otherwise.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_equals (C function)c.drm_rect_equalshNtauh1jxhjhhhNhNubj)}(hhh](j)}(hKbool drm_rect_equals (const struct drm_rect *r1, const struct drm_rect *r2)h]j)}(hJbool drm_rect_equals(const struct drm_rect *r1, const struct drm_rect *r2)h](j)}(hjAh]hbool}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjhKubj)}(hdrm_rect_equalsh]j)}(hdrm_rect_equalsh]hdrm_rect_equals}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjhKubj)}(h6(const struct drm_rect *r1, const struct drm_rect *r2)h](j)}(hconst struct drm_rect *r1h](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]j%)}jjsbc.drm_rect_equalsasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hr1h]hr1}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *r2h](j)}(hjch]hconst}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]jc.drm_rect_equalsasbuh1hhj;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubj)}(hr2h]hr2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjnhhhjhKubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjkhhubj)}(hhh]h)}(h%determine if two rectangles are equalh]h%determine if two rectangles are equal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_rect *r1`` first rectangle ``const struct drm_rect *r2`` second rectangle **Return** ``true`` if the rectangles are equal, ``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:419: ./include/drm/drm_rect.hhKhjubji)}(hhh](jn)}(h.``const struct drm_rect *r1`` first rectangle h](jt)}(h``const struct drm_rect *r1``h]jz)}(hjh]hconst struct drm_rect *r1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hfirst rectangleh]hfirst rectangle}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj1hKhjubjn)}(h/``const struct drm_rect *r2`` second rectangle h](jt)}(h``const struct drm_rect *r2``h]jz)}(hjUh]hconst struct drm_rect *r2}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjOubj)}(hhh]h)}(hsecond rectangleh]hsecond rectangle}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjjhKhjubeh}(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:419: ./include/drm/drm_rect.hhKhjubh)}(h:``true`` if the rectangles are equal, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if the rectangles are equal, }(hjhhhNhNubjz)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_fp_to_int (C function)c.drm_rect_fp_to_inthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJvoid drm_rect_fp_to_int (struct drm_rect *dst, const struct drm_rect *src)h]j)}(hIvoid drm_rect_fp_to_int(struct drm_rect *dst, const struct drm_rect *src)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hdrm_rect_fp_to_inth]j)}(hdrm_rect_fp_to_inth]hdrm_rect_fp_to_int}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h2(struct drm_rect *dst, const struct drm_rect *src)h](j)}(hstruct drm_rect *dsth](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)}(hdrm_recth]hdrm_rect}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_fp_to_intasbuh1hhj.ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj9)}(hj9h]h*}(hj~hhhNhNubah}(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 struct drm_rect *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)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jlc.drm_rect_fp_to_intasbuh1hhjubj)}(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&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h5Convert a rect in 16.16 fixed point form to int form.h]h5Convert a rect in 16.16 fixed point form to int form.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_rect *dst`` rect to be stored the converted value ``const struct drm_rect *src`` rect in 16.16 fixed point formh](h)}(h**Parameters**h]j%)}(hjbh]h Parameters}(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:419: ./include/drm/drm_rect.hhKhj\ubji)}(hhh](jn)}(h?``struct drm_rect *dst`` rect to be stored the converted value h](jt)}(h``struct drm_rect *dst``h]jz)}(hjh]hstruct 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:419: ./include/drm/drm_rect.hhKhj{ubj)}(hhh]h)}(h%rect to be stored the converted valueh]h%rect to be stored the converted value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjxubjn)}(h=``const struct drm_rect *src`` rect in 16.16 fixed point formh](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:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hrect in 16.16 fixed point formh]hrect in 16.16 fixed point form}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjxubeh}(h]h ]h"]h$]h&]uh1jhhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_overlap (C function)c.drm_rect_overlaphNtauh1jxhjhhhNhNubj)}(hhh](j)}(hJbool drm_rect_overlap (const struct drm_rect *a, const struct drm_rect *b)h]j)}(hIbool drm_rect_overlap(const struct drm_rect *a, const struct drm_rect *b)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hKubj)}(hdrm_rect_overlaph]j)}(hdrm_rect_overlaph]hdrm_rect_overlap}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hKubj)}(h4(const struct drm_rect *a, const struct drm_rect *b)h](j)}(hconst struct drm_rect *ah](j)}(hjch]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jj6sbc.drm_rect_overlapasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjLubj)}(hah]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(hconst struct drm_rect *bh](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_rect_overlapasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hbh]hb}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj hhhj!hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj!hKhj hhubj)}(hhh]h)}(hCheck if two rectangles overlaph]hCheck if two rectangles overlap}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjvhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj!hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct drm_rect *a`` first rectangle ``const struct drm_rect *b`` second rectangle **Return** ``true`` if the rectangles overlap, ``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:419: ./include/drm/drm_rect.hhKhjubji)}(hhh](jn)}(h-``const struct drm_rect *a`` first rectangle h](jt)}(h``const struct drm_rect *a``h]jz)}(hjh]hconst struct drm_rect *a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hfirst rectangleh]hfirst 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 *b`` second rectangle h](jt)}(h``const struct drm_rect *b``h]jz)}(hjh]hconst struct drm_rect *b}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubj)}(hhh]h)}(hsecond rectangleh]hsecond rectangle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhhjubh)}(h **Return**h]j%)}(hj.h]hReturn}(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:419: ./include/drm/drm_rect.hhKhjubh)}(h8``true`` if the rectangles overlap, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh if the rectangles overlap, }(hjDhhhNhNubjz)}(h ``false``h]hfalse}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjDubh otherwise.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:419: ./include/drm/drm_rect.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_rect_intersect (C function)c.drm_rect_intersecthNtauh1jxhjhhhNhNubj)}(hhh](j)}(hHbool drm_rect_intersect (struct drm_rect *r1, const struct drm_rect *r2)h]j)}(hGbool drm_rect_intersect(struct drm_rect *r1, const struct drm_rect *r2)h](j)}(hjAh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chK!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK!ubj)}(hdrm_rect_intersecth]j)}(hdrm_rect_intersecth]hdrm_rect_intersect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK!ubj)}(h0(struct drm_rect *r1, const struct drm_rect *r2)h](j)}(hstruct drm_rect *r1h](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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_intersectasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hr1h]hr1}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst struct drm_rect *r2h](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 }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j c.drm_rect_intersectasbuh1hhj=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj=ubj)}(hr2h]hr2}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(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)}(hintersect two rectanglesh]hintersect two rectangles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chK!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hXP**Parameters** ``struct drm_rect *r1`` first rectangle ``const struct drm_rect *r2`` second rectangle **Description** Calculate the intersection of rectangles **r1** and **r2**. **r1** will be overwritten with the intersection. **Return** ``true`` if rectangle **r1** is still visible after the operation, ``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:422: ./drivers/gpu/drm/drm_rect.chK%hjubji)}(hhh](jn)}(h(``struct drm_rect *r1`` first rectangle h](jt)}(h``struct drm_rect *r1``h]jz)}(hjh]hstruct drm_rect *r1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chK"hjubj)}(hhh]h)}(hfirst rectangleh]hfirst rectangle}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hK"hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hK"hjubjn)}(h/``const struct drm_rect *r2`` second rectangle h](jt)}(h``const struct drm_rect *r2``h]jz)}(hjWh]hconst struct drm_rect *r2}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chK#hjQubj)}(hhh]h)}(hsecond rectangleh]hsecond rectangle}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhK#hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhK#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:422: ./drivers/gpu/drm/drm_rect.chK%hjubh)}(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:422: ./drivers/gpu/drm/drm_rect.chK$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:422: ./drivers/gpu/drm/drm_rect.chK'hjubh)}(hW``true`` if rectangle **r1** is still visible after the operation, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh if rectangle }(hjhhhNhNubj%)}(h**r1**h]hr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh' is still visible after the operation, }(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:422: ./drivers/gpu/drm/drm_rect.chK(hjubeh}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKNubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjshKNubj)}(hdrm_rect_clip_scaledh]j)}(hdrm_rect_clip_scaledh]hdrm_rect_clip_scaled}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjshKNubj)}(hI(struct drm_rect *src, struct drm_rect *dst, const struct drm_rect *clip)h](j)}(hstruct drm_rect *srch](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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjsbc.drm_rect_clip_scaledasbuh1hhjubj)}(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)}(hstruct drm_rect *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)}(hdrm_recth]hdrm_rect}(hj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4 modnameN classnameNjj)}j]jc.drm_rect_clip_scaledasbuh1hhj ubj)}(h h]h }(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj^ hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdsth]hdst}(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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 }(hj hhhNhNubah}(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 reftargetj modnameN classnameNjj)}j]jc.drm_rect_clip_scaledasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hcliph]hclip}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjshKNubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj^hhhjshKNubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jhjshKNhj[hhubj)}(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:422: ./drivers/gpu/drm/drm_rect.chKNhj hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjshKNubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8 jj8 jjjuh1jhhhjhNhNubj)}(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%)}(hjB h]h Parameters}(hjD 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:422: ./drivers/gpu/drm/drm_rect.chKRhj< ubji)}(hhh](jn)}(h1``struct drm_rect *src`` source window rectangle h](jt)}(h``struct drm_rect *src``h]jz)}(hja h]hstruct drm_rect *src}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ ubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKOhj[ ubj)}(hhh]h)}(hsource window rectangleh]hsource window rectangle}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv hKOhjw ubah}(h]h ]h"]h$]h&]uh1jhj[ ubeh}(h]h ]h"]h$]h&]uh1jmhjv hKOhjX ubjn)}(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:422: ./drivers/gpu/drm/drm_rect.chKPhj ubj)}(hhh]h)}(hdestination window rectangleh]hdestination window rectangle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKPhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hKPhjX ubjn)}(h/``const struct drm_rect *clip`` clip rectangle 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&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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 hKQhjX 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:422: ./drivers/gpu/drm/drm_rect.chKShj< ubh)}(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 }(hj$ hhhNhNubj%)}(h**dst**h]hdst}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ ubh by rectangle }(hj$ hhhNhNubj%)}(h**clip**h]hclip}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ ubh. Clip rectangle }(hj$ hhhNhNubj%)}(h**src**h]hsrc}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ ubhZ by the corresponding amounts, retaining the vertical and horizontal scaling factors from }(hj$ hhhNhNubj%)}(h**src**h]hsrc}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj$ ubh to }(hj$ hhhNhNubj%)}(h**dst**h]hdst}(hjt 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:422: ./drivers/gpu/drm/drm_rect.chKRhj< 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:422: ./drivers/gpu/drm/drm_rect.chKVhj< ubh)}(hX``true`` if rectangle **dst** is still visible after being clipped, ``false`` otherwise.h](jz)}(h``true``h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh if rectangle }(hj hhhNhNubj%)}(h**dst**h]hdst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh' is still visible after being clipped, }(hj hhhNhNubjz)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKWhj< ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKubj)}(hdrm_rect_calc_hscaleh]j)}(hdrm_rect_calc_hscaleh]hdrm_rect_calc_hscale}(hj' hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj# ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hKubj)}(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}(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubj)}(h h]h }(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubj)}(hjh]hstruct}(hj^ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubj)}(h h]h }(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubh)}(hhh]j)}(hdrm_recth]hdrm_rect}(hj| hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~ modnameN classnameNjj)}j]j%)}jj) sbc.drm_rect_calc_hscaleasbuh1hhj? 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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj; ubj)}(hconst struct drm_rect *dsth](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_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_rect_calc_hscaleasbuh1hhj ubj)}(h h]h }(hj' hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj9)}(hj9h]h*}(hj5 hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubj)}(hdsth]hdst}(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj; ubj)}(hint min_hscaleh](j)}(hinth]hint}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubj)}(h h]h }(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubj)}(h min_hscaleh]h min_hscale}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj; ubj)}(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}(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)}(h'calculate the horizontal scaling factorh]h'calculate the horizontal scaling factor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(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%)}(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:422: ./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:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hsource window rectangleh]hsource window rectangle}(hj0hhhNhNubah}(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 *dst`` destination window rectangle h](jt)}(h``const struct drm_rect *dst``h]jz)}(hjPh]hconst struct drm_rect *dst}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjJubj)}(hhh]h)}(hdestination window rectangleh]hdestination window rectangle}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehKhjubjn)}(h=``int min_hscale`` minimum allowed horizontal scaling factor h](jt)}(h``int min_hscale``h]jz)}(hjh]hint min_hscale}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h)minimum allowed horizontal scaling factorh]h)minimum allowed horizontal scaling factor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(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:422: ./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&]uh1jmhjhKhjubeh}(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:422: ./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 (}(hjhhhNhNubj%)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh width) / (}(hjhhhNhNubj%)}(h**dst**h]hdst}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh width).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhj ubh)}(h **Return**h]j%)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(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&]jjuh1jhjhhhjhKubj)}(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 }(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]j%)}jjsbc.drm_rect_calc_vscaleasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(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)}(hconst struct drm_rect *dsth](j)}(hjch]hconst}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(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_rect_calc_vscaleasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbubj)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint min_vscaleh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h min_vscaleh]h min_vscale}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint max_vscaleh](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_vscaleh]h max_vscale}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(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%calculate the vertical scaling factorh]h%calculate the vertical scaling factor}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(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%)}(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:422: ./drivers/gpu/drm/drm_rect.chKhjubji)}(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:422: ./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)}(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:422: ./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&]uh1jmhjhKhjubjn)}(h;``int min_vscale`` minimum allowed vertical scaling factor h](jt)}(h``int min_vscale``h]jz)}(hjh]hint min_vscale}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h'minimum allowed vertical scaling factorh]h'minimum allowed vertical scaling factor}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj4hKhjubjn)}(h;``int max_vscale`` maximum allowed vertical scaling factor h](jt)}(h``int max_vscale``h]jz)}(hjXh]hint max_vscale}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjVubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjRubj)}(hhh]h)}(h'maximum allowed vertical scaling factorh]h'maximum allowed vertical scaling factor}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jmhjmhKhjubeh}(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:422: ./drivers/gpu/drm/drm_rect.chKhjubh)}(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:422: ./drivers/gpu/drm/drm_rect.chKhjubh)}(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:422: ./drivers/gpu/drm/drm_rect.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:422: ./drivers/gpu/drm/drm_rect.chKhjubh)}(h7The vertical scaling factor, or errno of out of limits.h]h7The vertical 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:422: ./drivers/gpu/drm/drm_rect.chKhjubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hKubj)}(hdrm_rect_debug_printh]j)}(hdrm_rect_debug_printh]hdrm_rect_debug_print}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj@hKubj)}(h@(const char *prefix, const struct drm_rect *r, bool fixed_point)h](j)}(hconst char *prefixh](j)}(hjch]hconst}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hprefixh]hprefix}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hconst struct drm_rect *rh](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]j%)}jjUsbc.drm_rect_debug_printasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hr}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hbool fixed_pointh](j)}(hjAh]hbool}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h fixed_pointh]h fixed_point}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(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)}(hprint the rectangle informationh]hprint the rectangle information}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@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:422: ./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:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(h prefix stringh]h prefix string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjubjn)}(h0``const struct drm_rect *r`` rectangle to print h](jt)}(h``const struct drm_rect *r``h]jz)}(hjh]hconst struct 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:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hrectangle to printh]hrectangle to print}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj,hKhjubjn)}(h=``bool fixed_point`` rectangle is in 16.16 fixed point formath](jt)}(h``bool fixed_point``h]jz)}(hjPh]hbool fixed_point}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjNubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjJubj)}(hhh]h)}(h(rectangle is in 16.16 fixed point formath]h(rectangle is in 16.16 fixed point format}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jmhjehKhjubeh}(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:422: ./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}(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]j%)}jjsbc.drm_rect_rotateasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hjh]hr}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int widthh](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hwidthh]hwidth}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int heighth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hheighth]hheight}(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&]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)}(hrotationh]hrotation}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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)}(hRotate the rectangleh]hRotate the rectangle}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jhhhjhNhNubj)}(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%)}(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:422: ./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)}(hjeh]hstruct drm_rect *r}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhj_ubj)}(hhh]h)}(hrectangle to be rotatedh]hrectangle to be rotated}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jmhjzhKhj\ubjn)}(h,``int width`` Width of the coordinate space 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:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hWidth of the coordinate spaceh]hWidth of the coordinate space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj\ubjn)}(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:422: ./drivers/gpu/drm/drm_rect.chKhjubj)}(hhh]h)}(hHeight of the coordinate spaceh]hHeight of the coordinate space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj\ubjn)}(h7``unsigned int rotation`` Transformation to be applied h](jt)}(h``unsigned int rotation``h]jz)}(hjh]hunsigned int rotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chKhj ubj)}(hhh]h)}(hTransformation to be appliedh]hTransformation to be applied}(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%)}(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:422: ./drivers/gpu/drm/drm_rect.chKhj@ubh)}(h9Apply **rotation** to the coordinates of rectangle **r**.h](hApply }(hjahhhNhNubj%)}(h **rotation**h]hrotation}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh! to the coordinates of rectangle }(hjahhhNhNubj%)}(h**r**h]hr}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **height**h]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh combined with }(hjhhhNhNubj%)}(h **rotation**h]hrotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh' define the location of the new origin.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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}(hjhhhNhNubah}(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:422: ./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}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chM/ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj2hM/ubj)}(hdrm_rect_rotate_invh]j)}(hdrm_rect_rotate_invh]hdrm_rect_rotate_inv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj2hM/ubj)}(hB(struct drm_rect *r, int width, int height, unsigned int rotation)h](j)}(hstruct drm_rect *rh](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_recth]hdrm_rect}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%)}jjGsbc.drm_rect_rotate_invasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]ubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(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&]noemphjjuh1jhjYubj)}(h int heighth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hheighth]hheight}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(hunsigned int rotationh](j)}(hunsignedh]hunsigned}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hrotationh]hrotation}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(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)}(hInverse rotate the rectangleh]hInverse rotate the rectangle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hM/ubeh}(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:422: ./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:422: ./drivers/gpu/drm/drm_rect.chM0hjubj)}(hhh]h)}(hrectangle to be rotatedh]hrectangle to be rotated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM0hjubjn)}(h,``int width`` Width of the coordinate space 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:422: ./drivers/gpu/drm/drm_rect.chM1hjubj)}(hhh]h)}(hWidth of the coordinate spaceh]hWidth of the coordinate space}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM1hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj-hM1hjubjn)}(h.``int height`` Height of the coordinate space h](jt)}(h``int height``h]jz)}(hjQh]h int height}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chM2hjKubj)}(hhh]h)}(hHeight of the coordinate spaceh]hHeight of the coordinate space}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM2hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jmhjfhM2hjubjn)}(hH``unsigned int rotation`` Transformation whose inverse is to be applied h](jt)}(h``unsigned int rotation``h]jz)}(hjh]hunsigned int rotation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jsh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhM3hjubeh}(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:422: ./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}(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:422: ./drivers/gpu/drm/drm_rect.chM4hjubh)}(hZ**width** and **height** combined with **rotation** define the location of the new origin.h](j%)}(h **width**h]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **height**h]hheight}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh combined with }(hjhhhNhNubj%)}(h **rotation**h]hrotation}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh' define the location of the new origin.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chM7hjubh)}(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}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubh$ correcsponds to the horizontal and }(hjOhhhNhNubj%)}(h **height**h]hheight}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubh 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}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./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);}hj~sbah}(h]h ]h"]h$]h&]jjuh1j?h_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chM@hjubh)}(h0you will always get back the original rectangle.h]h0you will always get back the original rectangle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:422: ./drivers/gpu/drm/drm_rect.chMChjubeh}(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:428: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:431: ./include/drm/drm_flip_work.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h drm_flip_workh]j)}(hjh]h drm_flip_work}(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)}(hflip work queueh]hflip work queue}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:431: ./include/drm/drm_flip_work.hhK6hj#hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh:}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:431: ./include/drm/drm_flip_work.hhK:hjBubj@)}(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; };}hjcsbah}(h]h ]h"]h$]h&]jjuh1j?h`/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:431: ./include/drm/drm_flip_work.hhK 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:434: ./drivers/gpu/drm/drm_flip_work.chK=hj6 ubji)}(hhh](jn)}(h-``struct drm_flip_work *work`` the flip-work h](jt)}(h``struct drm_flip_work *work``h]jz)}(hj[ h]hstruct drm_flip_work *work}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjY ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chK:hjU ubj)}(hhh]h)}(h the flip-workh]h the flip-work}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp hK:hjq ubah}(h]h ]h"]h$]h&]uh1jhjU ubeh}(h]h ]h"]h$]h&]uh1jmhjp hK:hjR ubjn)}(h!``void *val`` the value to queue h](jt)}(h ``void *val``h]jz)}(hj h]h void *val}(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:434: ./drivers/gpu/drm/drm_flip_work.chK;hj ubj)}(hhh]h)}(hthe value to queueh]hthe value to queue}(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 ubeh}(h]h ]h"]h$]h&]uh1jhhj6 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:434: ./drivers/gpu/drm/drm_flip_work.chK=hj6 ubh)}(hQueues work, that will later be run (passed back to drm_flip_func_t func) on a work queue after drm_flip_work_commit() is called.h]hQueues work, that will later be run (passed back to drm_flip_func_t func) on a work queue after drm_flip_work_commit() is called.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chK#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:#hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKubj)}(h h]h }(hjM#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:#hhhjL#hKubj)}(hdrm_flip_work_inith]j)}(hdrm_flip_work_inith]hdrm_flip_work_init}(hj_#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:#hhhjL#hKubj)}(hD(struct drm_flip_work *work, const char *name, drm_flip_func_t func)h](j)}(hstruct drm_flip_work *workh](j)}(hjh]hstruct}(hj{#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw#ubh)}(hhh]j)}(h drm_flip_workh]h drm_flip_work}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j%)}jja#sbc.drm_flip_work_initasbuh1hhjw#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw#ubj9)}(hj9h]h*}(hj#hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjw#ubj)}(hworkh]hwork}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjs#ubj)}(hconst char *nameh](j)}(hjch]hconst}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hcharh]hchar}(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)}(hnameh]hname}(hj1$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjs#ubj)}(hdrm_flip_func_t funch](h)}(hhh]j)}(hdrm_flip_func_th]hdrm_flip_func_t}(hjM$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO$modnameN classnameNjj)}j]j#c.drm_flip_work_initasbuh1hhjF$ubj)}(h h]h }(hjk$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF$ubj)}(hfunch]hfunc}(hjy$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjs#ubeh}(h]h ]h"]h$]h&]jjuh1jhj:#hhhjL#hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj6#hhhjL#hKubah}(h]j1#ah ](jjeh"]h$]h&]jj)jhuh1jhjL#hKhj3#hhubj)}(hhh]h)}(hinitialize flip-workh]hinitialize flip-work}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhj$hhubah}(h]h ]h"]h$]h&]uh1jhj3#hhhjL#hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_flip_work *work`` the flip-work to initialize ``const char *name`` debug name ``drm_flip_func_t func`` the callback work function **Description** Initializes/allocates resources for the flip-workh](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:434: ./drivers/gpu/drm/drm_flip_work.chKhj$ubji)}(hhh](jn)}(h;``struct drm_flip_work *work`` the flip-work to initialize h](jt)}(h``struct drm_flip_work *work``h]jz)}(hj$h]hstruct drm_flip_work *work}(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:434: ./drivers/gpu/drm/drm_flip_work.chKhj$ubj)}(hhh]h)}(hthe flip-work to initializeh]hthe flip-work to initialize}(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 ``const char *name`` debug name h](jt)}(h``const char *name``h]jz)}(hj%h]hconst char *name}(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:434: ./drivers/gpu/drm/drm_flip_work.chKhj%ubj)}(hhh]h)}(h debug nameh]h debug name}(hj6%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2%hKhj3%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jmhj2%hKhj$ubjn)}(h4``drm_flip_func_t func`` the callback work function h](jt)}(h``drm_flip_func_t func``h]jz)}(hjV%h]hdrm_flip_func_t func}(hjX%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjT%ubah}(h]h ]h"]h$]h&]uh1jshd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhjP%ubj)}(hhh]h)}(hthe callback work functionh]hthe callback work function}(hjo%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk%hKhjl%ubah}(h]h ]h"]h$]h&]uh1jhjP%ubeh}(h]h ]h"]h$]h&]uh1jmhjk%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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhj$ubh)}(h1Initializes/allocates resources for the flip-workh]h1Initializes/allocates resources for the flip-work}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_flip_work_cleanup (C function)c.drm_flip_work_cleanuphNtauh1jxhjhhhNhNubj)}(hhh](j)}(h7void drm_flip_work_cleanup (struct drm_flip_work *work)h]j)}(h6void drm_flip_work_cleanup(struct drm_flip_work *work)h](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hKubj)}(hdrm_flip_work_cleanuph]j)}(hdrm_flip_work_cleanuph]hdrm_flip_work_cleanup}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%hhhj%hKubj)}(h(struct drm_flip_work *work)h]j)}(hstruct drm_flip_work *workh](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_flip_workh]h drm_flip_work}(hj1&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3&modnameN classnameNjj)}j]j%)}jj%sbc.drm_flip_work_cleanupasbuh1hhj&ubj)}(h h]h }(hjQ&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj9)}(hj9h]h*}(hj_&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj&ubj)}(hworkh]hwork}(hjl&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)}(hcleans up flip-workh]hcleans up flip-work}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct drm_flip_work *work`` the flip-work to cleanup **Description** Destroy resources allocated for the flip-workh](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:434: ./drivers/gpu/drm/drm_flip_work.chKhj&ubji)}(hhh]jn)}(h8``struct drm_flip_work *work`` the flip-work to cleanup h](jt)}(h``struct drm_flip_work *work``h]jz)}(hj&h]hstruct drm_flip_work *work}(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:434: ./drivers/gpu/drm/drm_flip_work.chKhj&ubj)}(hhh]h)}(hthe flip-work to cleanuph]hthe flip-work to cleanup}(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&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhj&ubh)}(h-Destroy resources allocated for the flip-workh]h-Destroy resources allocated for the flip-work}(hj('hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:434: ./drivers/gpu/drm/drm_flip_work.chKhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]flip-work-helper-referenceah ]h"]flip-work helper referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hAuxiliary Modeset Helpersh]hAuxiliary Modeset Helpers}(hjI'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF'hhhhhMubh)}(h~This helper library contains various one-off functions which don't really fit anywhere else in the DRM modeset helper library.h]hThis helper library contains various one-off functions which don’t really fit anywhere else in the DRM modeset helper library.}(hjW'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:440: ./drivers/gpu/drm/drm_modeset_helper.chK#hjF'hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j5drm_helper_move_panel_connectors_to_head (C function)*c.drm_helper_move_panel_connectors_to_headhNtauh1jxhjF'hhhNhNubj)}(hhh](j)}(hFvoid drm_helper_move_panel_connectors_to_head (struct drm_device *dev)h]j)}(hEvoid drm_helper_move_panel_connectors_to_head(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{'hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK*ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{'hhhj'hK*ubj)}(h(drm_helper_move_panel_connectors_to_headh]j)}(h(drm_helper_move_panel_connectors_to_headh]h(drm_helper_move_panel_connectors_to_head}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{'hhhj'hK*ubj)}(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 }(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_helper_move_panel_connectors_to_headasbuh1hhj'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'ubah}(h]h ]h"]h$]h&]jjuh1jhj{'hhhj'hK*ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjw'hhhj'hK*ubah}(h]jr'ah ](jjeh"]h$]h&]jj)jhuh1jhj'hK*hjt'hhubj)}(hhh]h)}(h.move panels to the front in the connector listh]h.move panels to the front in the connector list}(hj?(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK*hj<(hhubah}(h]h ]h"]h$]h&]uh1jhjt'hhhj'hK*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjW(jjW(jjjuh1jhhhjF'hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` drm device to operate on **Description** Some userspace presumes that the first connected connector is the main display, where it's supposed to display e.g. the login screen. For laptops, this should be the main panel. Use this function to sort all (eDP/LVDS/DSI) panels to the front of the connector list, instead of painstakingly trying to initialize them in the right order.h](h)}(h**Parameters**h]j%)}(hja(h]h Parameters}(hjc(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:443: ./drivers/gpu/drm/drm_modeset_helper.chK.hj[(ubji)}(hhh]jn)}(h4``struct drm_device *dev`` drm device to operate on 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:443: ./drivers/gpu/drm/drm_modeset_helper.chK,hjz(ubj)}(hhh]h)}(hdrm device to operate onh]hdrm device to operate on}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hK,hj(ubah}(h]h ]h"]h$]h&]uh1jhjz(ubeh}(h]h ]h"]h$]h&]uh1jmhj(hK,hjw(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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK.hj[(ubh)}(hXPSome userspace presumes that the first connected connector is the main display, where it's supposed to display e.g. the login screen. For laptops, this should be the main panel. Use this function to sort all (eDP/LVDS/DSI) panels to the front of the connector list, instead of painstakingly trying to initialize them in the right order.h]hXRSome userspace presumes that the first connected connector is the main display, where it’s supposed to display e.g. the login screen. For laptops, this should be the main panel. Use this function to sort all (eDP/LVDS/DSI) panels to the front of the connector list, instead of painstakingly trying to initialize them in the right order.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK-hj[(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjF'hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_helper_mode_fill_fb_struct (C function) c.drm_helper_mode_fill_fb_structhNtauh1jxhjF'hhhNhNubj)}(hhh](j)}(hvoid drm_helper_mode_fill_fb_struct (struct drm_device *dev, struct drm_framebuffer *fb, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd)h]j)}(hvoid drm_helper_mode_fill_fb_struct(struct drm_device *dev, struct drm_framebuffer *fb, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKJubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj)hKJubj)}(hdrm_helper_mode_fill_fb_structh]j)}(hdrm_helper_mode_fill_fb_structh]hdrm_helper_mode_fill_fb_struct}(hj!)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj)hKJubj)}(h(struct drm_device *dev, struct drm_framebuffer *fb, const struct drm_format_info *info, const struct drm_mode_fb_cmd2 *mode_cmd)h](j)}(hstruct drm_device *devh](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)}(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%)}jj#)sb c.drm_helper_mode_fill_fb_structasbuh1hhj9)ubj)}(h h]h }(hj{)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9)ubj9)}(hj9h]h*}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9)ubj)}(hdevh]hdev}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5)ubj)}(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]jw) c.drm_helper_mode_fill_fb_structasbuh1hhj)ubj)}(h h]h }(hj)hhhNhNubah}(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&]noemphjjuh1jhj5)ubj)}(h"const struct drm_format_info *infoh](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 }(hjG*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(hdrm_format_infoh]hdrm_format_info}(hjX*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZ*modnameN classnameNjj)}j]jw) c.drm_helper_mode_fill_fb_structasbuh1hhj*ubj)}(h h]h }(hjv*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj9)}(hj9h]h*}(hj*hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj*ubj)}(hinfoh]hinfo}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5)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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj*hhhNhNubah}(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]jw) c.drm_helper_mode_fill_fb_structasbuh1hhj*ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj9)}(hj9h]h*}(hj+hhhNhNubah}(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&]noemphjjuh1jhj5)ubeh}(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)}(hfill out framebuffer metadatah]hfill out framebuffer metadata}(hjF+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKJhjC+hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj)hKJubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^+jj^+jjjuh1jhhhjF'hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_framebuffer *fb`` drm_framebuffer object to fill out ``const struct drm_format_info *info`` pixel format information ``const struct drm_mode_fb_cmd2 *mode_cmd`` metadata from the userspace fb creation request **Description** This helper can be used in a drivers fb_create callback to pre-fill the fb's metadata fields.h](h)}(h**Parameters**h]j%)}(hjh+h]h Parameters}(hjj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjf+ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKNhjb+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&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKKhj+ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKKhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKKhj~+ubjn)}(hB``struct drm_framebuffer *fb`` drm_framebuffer object to fill out 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&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKLhj+ubj)}(hhh]h)}(h"drm_framebuffer object to fill outh]h"drm_framebuffer object to fill out}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKLhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj+hKLhj~+ubjn)}(h@``const struct drm_format_info *info`` pixel format information h](jt)}(h&``const struct drm_format_info *info``h]jz)}(hj+h]h"const struct drm_format_info *info}(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:443: ./drivers/gpu/drm/drm_modeset_helper.chKMhj+ubj)}(hhh]h)}(hpixel format informationh]hpixel format information}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jmhj,hKMhj~+ubjn)}(h\``const struct drm_mode_fb_cmd2 *mode_cmd`` metadata from the userspace fb creation request h](jt)}(h+``const struct drm_mode_fb_cmd2 *mode_cmd``h]jz)}(hj2,h]h'const struct drm_mode_fb_cmd2 *mode_cmd}(hj4,hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj0,ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKNhj,,ubj)}(hhh]h)}(h/metadata from the userspace fb creation requesth]h/metadata from the userspace fb creation request}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG,hKNhjH,ubah}(h]h ]h"]h$]h&]uh1jhj,,ubeh}(h]h ]h"]h$]h&]uh1jmhjG,hKNhj~+ubeh}(h]h ]h"]h$]h&]uh1jhhjb+ubh)}(h**Description**h]j%)}(hjm,h]h Description}(hjo,hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjk,ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKPhjb+ubh)}(h]This helper can be used in a drivers fb_create callback to pre-fill the fb's metadata fields.h]h_This helper can be used in a drivers fb_create callback to pre-fill the fb’s metadata fields.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKOhjb+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjF'hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_crtc_init (C function)c.drm_crtc_inithNtauh1jxhjF'hhhNhNubj)}(hhh](j)}(heint drm_crtc_init (struct drm_device *dev, struct drm_crtc *crtc, const struct drm_crtc_funcs *funcs)h]j)}(hdint drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, const struct drm_crtc_funcs *funcs)h](j)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKwubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj,hKwubj)}(h drm_crtc_inith]j)}(h drm_crtc_inith]h drm_crtc_init}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj,hKwubj)}(hS(struct drm_device *dev, struct drm_crtc *crtc, const struct drm_crtc_funcs *funcs)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,sbc.drm_crtc_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)}(hdevh]hdev}(hjH-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hja-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]-ubj)}(h h]h }(hjn-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]-ubh)}(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_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)}(hcrtch]hcrtc}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubj)}(h"const struct drm_crtc_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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(hdrm_crtc_funcsh]hdrm_crtc_funcs}(hj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj .modnameN classnameNjj)}j]j)-c.drm_crtc_initasbuh1hhj-ubj)}(h h]h }(hj(.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj9)}(hj9h]h*}(hj6.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj-ubj)}(hfuncsh]hfuncs}(hjC.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubeh}(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#Legacy CRTC initialization functionh]h#Legacy CRTC initialization function}(hjm.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKwhjj.hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hKwubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjF'hNhNubj)}(hX**Parameters** ``struct drm_device *dev`` DRM device ``struct drm_crtc *crtc`` CRTC object to init ``const struct drm_crtc_funcs *funcs`` callbacks for the new CRTC **Description** Initialize a CRTC object with a default helper-provided primary plane and no cursor plane. Note that we make some assumptions about hardware limitations that may not be true for all hardware: 1. Primary plane cannot be repositioned. 2. Primary plane cannot be scaled. 3. Primary plane must cover the entire CRTC. 4. Subpixel positioning is not supported. 5. The primary plane must always be on if the CRTC is enabled. This 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 :c:type:`struct drm_simple_display_pipe `, which encapsulates the above limitations into a nice interface. **Return** Zero on success, 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:443: ./drivers/gpu/drm/drm_modeset_helper.chK{hj.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&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKxhj.ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKxhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hKxhj.ubjn)}(h.``struct drm_crtc *crtc`` CRTC object to init 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&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKyhj.ubj)}(hhh]h)}(hCRTC object to inith]hCRTC object to init}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKyhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hKyhj.ubjn)}(hB``const struct drm_crtc_funcs *funcs`` callbacks for the new CRTC h](jt)}(h&``const struct drm_crtc_funcs *funcs``h]jz)}(hj /h]h"const struct drm_crtc_funcs *funcs}(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:443: ./drivers/gpu/drm/drm_modeset_helper.chKzhj/ubj)}(hhh]h)}(hcallbacks for the new CRTCh]hcallbacks for the new CRTC}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5/hKzhj6/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj5/hKzhj.ubeh}(h]h ]h"]h$]h&]uh1jhhj.ubh)}(h**Description**h]j%)}(hj[/h]h Description}(hj]/hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjY/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK|hj.ubh)}(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.}(hjq/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK{hj.ubh)}(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:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chK~hj.ubjQH)}(hhh](h)}(h%Primary plane cannot be repositioned.h]h)}(hj/h]h%Primary plane cannot be repositioned.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj/ubah}(h]h ]h"]h$]h&]uh1hhj/ubh)}(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:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj/ubah}(h]h ]h"]h$]h&]uh1hhj/ubh)}(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:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj/ubah}(h]h ]h"]h$]h&]uh1hhj/ubh)}(h&Subpixel positioning is not supported.h]h)}(hj/h]h&Subpixel positioning is not supported.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj/ubah}(h]h ]h"]h$]h&]uh1hhj/ubh)}(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 }(hj0hhhNhNubh)}(hB:c:type:`struct drm_simple_display_pipe `h]jz)}(hj0h]hstruct drm_simple_display_pipe}(hj0hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_simple_display_pipeuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj0ubhA, which encapsulates the above limitations into a nice interface.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj80hKhj.ubh)}(h **Return**h]j%)}(hjE0h]hReturn}(hjG0hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjC0ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj.ubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hj[0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjF'hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_mode_config_helper_suspend (C function) c.drm_mode_config_helper_suspendhNtauh1jxhjF'hhhNhNubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hKubj)}(hdrm_mode_config_helper_suspendh]j)}(hdrm_mode_config_helper_suspendh]hdrm_mode_config_helper_suspend}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhj0hKubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j%)}jj0sb c.drm_mode_config_helper_suspendasbuh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj9)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubj)}(hdevh]hdev}(hj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubah}(h]h ]h"]h$]h&]jjuh1jhj0hhhj0hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0hhhj0hKubah}(h]j}0ah ](jjeh"]h$]h&]jj)jhuh1jhj0hKhj0hhubj)}(hhh]h)}(hModeset suspend helperh]hModeset suspend helper}(hjJ1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjG1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj0hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjb1jjb1jjjuh1jhhhjF'hNhNubj)}(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%)}(hjl1h]h Parameters}(hjn1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjj1ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjf1ubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj1h]hstruct drm_device *dev}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj1ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj1ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jmhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhhjf1ubh)}(h**Description**h]j%)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjf1ubh)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjf1ubh)}(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().}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjf1ubh)}(h **Return**h]j%)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjf1ubh)}(h.Zero on success, negative error code on error.h]h.Zero on success, negative error code on error.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhjf1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjF'hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_mode_config_helper_resume (C function)c.drm_mode_config_helper_resumehNtauh1jxhjF'hhhNhNubj)}(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}(hjA2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=2hhhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKubj)}(h h]h }(hjP2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=2hhhjO2hKubj)}(hdrm_mode_config_helper_resumeh]j)}(hdrm_mode_config_helper_resumeh]hdrm_mode_config_helper_resume}(hjb2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=2hhhjO2hKubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj~2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz2ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]j%)}jjd2sbc.drm_mode_config_helper_resumeasbuh1hhjz2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz2ubj9)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjz2ubj)}(hdevh]hdev}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv2ubah}(h]h ]h"]h$]h&]jjuh1jhj=2hhhjO2hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj92hhhjO2hKubah}(h]j42ah ](jjeh"]h$]h&]jj)jhuh1jhjO2hKhj62hhubj)}(hhh]h)}(hModeset resume helperh]hModeset resume helper}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj2hhubah}(h]h ]h"]h$]h&]uh1jhj62hhhjO2hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jhhhjF'hNhNubj)}(hXn**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%)}(hj#3h]h Parameters}(hj%3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj!3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj3ubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjB3h]hstruct drm_device *dev}(hjD3hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj@3ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj<3ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj[3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW3hKhjX3ubah}(h]h ]h"]h$]h&]uh1jhj<3ubeh}(h]h ]h"]h$]h&]uh1jmhjW3hKhj93ubah}(h]h ]h"]h$]h&]uh1jhhj3ubh)}(h**Description**h]j%)}(hj}3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj{3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj3ubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj3ubh)}(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().}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj3ubh)}(h **Return**h]j%)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj3ubh)}(h.Zero on success, negative error code on error.h]h.Zero on success, negative error code on error.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:443: ./drivers/gpu/drm/drm_modeset_helper.chKhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjF'hhhNhNubeh}(h]auxiliary-modeset-helpersah ]h"]auxiliary modeset helpersah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h OF/DT Helpersh]h OF/DT Helpers}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hhhhhMubh)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:449: ./drivers/gpu/drm/drm_of.chKhj3hhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_of_crtc_port_mask (C function)c.drm_of_crtc_port_maskhNtauh1jxhj3hhhNhNubj)}(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}(hj#4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%4modnameN classnameNjj)}j]j%)}jdrm_of_crtc_port_masksbc.drm_of_crtc_port_maskasbuh1hhj4hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKubj)}(h h]h }(hjE4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjD4hKubj)}(hdrm_of_crtc_port_maskh]j)}(hjA4h]hdrm_of_crtc_port_mask}(hjW4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhjD4hKubj)}(h2(struct drm_device *dev, struct device_node *port)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjr4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn4ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j?4c.drm_of_crtc_port_maskasbuh1hhjn4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn4ubj9)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjn4ubj)}(hdevh]hdev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjj4ubj)}(hstruct device_node *porth](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j)}(h device_nodeh]h device_node}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j?4c.drm_of_crtc_port_maskasbuh1hhj4ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj9)}(hj9h]h*}(hj,5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj4ubj)}(hporth]hport}(hj95hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjj4ubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhjD4hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj4hhhjD4hKubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jhjD4hKhj4hhubj)}(hhh]h)}(h2find the mask of a registered CRTC by port OF nodeh]h2find the mask of a registered CRTC by port OF node}(hjc5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhj`5hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjD4hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj{5jj{5jjjuh1jhhhj3hNhNubj)}(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%)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhj5ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj5h]hstruct drm_device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhj5ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hKhj5ubjn)}(h*``struct device_node *port`` port OF node h](jt)}(h``struct device_node *port``h]jz)}(hj5h]hstruct device_node *port}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhj5ubj)}(hhh]h)}(h port OF nodeh]h port OF node}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jmhj5hKhj5ubeh}(h]h ]h"]h$]h&]uh1jhhj5ubh)}(h**Description**h]j%)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhj5ubh)}(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.}(hj.6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_of_find_possible_crtcs (C function)c.drm_of_find_possible_crtcshNtauh1jxhj3hhhNhNubj)}(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}(hj`6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb6modnameN classnameNjj)}j]j%)}jdrm_of_find_possible_crtcssbc.drm_of_find_possible_crtcsasbuh1hhjY6hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK2ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY6hhhj6hK2ubj)}(hdrm_of_find_possible_crtcsh]j)}(hj~6h]hdrm_of_find_possible_crtcs}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjY6hhhj6hK2ubj)}(h2(struct drm_device *dev, struct device_node *port)h](j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j|6c.drm_of_find_possible_crtcsasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj9)}(hj9h]h*}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubj)}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(hstruct device_node *porth](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj,7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(h device_nodeh]h device_node}(hj=7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?7modnameN classnameNjj)}j]j|6c.drm_of_find_possible_crtcsasbuh1hhj7ubj)}(h h]h }(hj[7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj9)}(hj9h]h*}(hji7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubj)}(hporth]hport}(hjv7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhjY6hhhj6hK2ubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjU6hhhj6hK2ubah}(h]jP6ah ](jjeh"]h$]h&]jj)jhuh1jhj6hK2hjR6hhubj)}(hhh]h)}(h+find the possible CRTCs for an encoder porth]h+find the possible CRTCs for an encoder port}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK2hj7hhubah}(h]h ]h"]h$]h&]uh1jhjR6hhhj6hK2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhj3hNhNubj)}(hX]**Parameters** ``struct drm_device *dev`` DRM device ``struct device_node *port`` encoder port to scan for endpoints **Description** Scan all endpoints attached to a port, locate their attached CRTCs, and generate the DRM mask of CRTCs which may be attached to this encoder. See Documentation/devicetree/bindings/graph.txt for the bindings.h](h)}(h**Parameters**h]j%)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK6hj7ubji)}(hhh](jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hj7h]hstruct drm_device *dev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK3hj7ubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hK3hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hK3hj7ubjn)}(h@``struct device_node *port`` encoder port to scan for endpoints h](jt)}(h``struct device_node *port``h]jz)}(hj8h]hstruct device_node *port}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK4hj8ubj)}(hhh]h)}(h"encoder port to scan for endpointsh]h"encoder port to scan for endpoints}(hj38hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/8hK4hj08ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jmhj/8hK4hj7ubeh}(h]h ]h"]h$]h&]uh1jhhj7ubh)}(h**Description**h]j%)}(hjU8h]h Description}(hjW8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjS8ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK6hj7ubh)}(hScan all endpoints attached to a port, locate their attached CRTCs, and generate the DRM mask of CRTCs which may be attached to this encoder.h]hScan all endpoints attached to a port, locate their attached CRTCs, and generate the DRM mask of CRTCs which may be attached to this encoder.}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK5hj7ubh)}(hASee Documentation/devicetree/bindings/graph.txt for the bindings.h]hASee Documentation/devicetree/bindings/graph.txt for the bindings.}(hjz8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chK9hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_of_component_match_add (C function)c.drm_of_component_match_addhNtauh1jxhj3hhhNhNubj)}(hhh](j)}(hvoid drm_of_component_match_add (struct device *master, struct component_match **matchptr, int (*compare)(struct device *, void *), struct device_node *node)h]j)}(hvoid drm_of_component_match_add(struct device *master, struct component_match **matchptr, int (*compare)(struct device*, void*), struct device_node *node)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKSubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hKSubj)}(hdrm_of_component_match_addh]j)}(hdrm_of_component_match_addh]hdrm_of_component_match_add}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hKSubj)}(h{(struct device *master, struct component_match **matchptr, int (*compare)(struct device*, void*), struct device_node *node)h](j)}(hstruct device *masterh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(hdeviceh]hdevice}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j%)}jj8sbc.drm_of_component_match_addasbuh1hhj8ubj)}(h h]h }(hj$9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj9)}(hj9h]h*}(hj29hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubj)}(hmasterh]hmaster}(hj?9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(h!struct component_match **matchptrh](j)}(hjh]hstruct}(hjX9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT9ubj)}(h h]h }(hje9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT9ubh)}(hhh]j)}(hcomponent_matchh]hcomponent_match}(hjv9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjx9modnameN classnameNjj)}j]j 9c.drm_of_component_match_addasbuh1hhjT9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT9ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjT9ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjT9ubj)}(hmatchptrh]hmatchptr}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(h%int (*compare)(struct device*, void*)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hjth]h(}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj9)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(hcompareh]hcompare}(hj :hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hjh]h)}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj9)}(hjth]h(}(hj&:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(hjh]hstruct}(hj3:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj@:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubh)}(hhh]j)}(hdeviceh]hdevice}(hjQ:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN:ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjS:modnameN classnameNjj)}j]j 9c.drm_of_component_match_addasbuh1hhj9ubj9)}(hj9h]h*}(hjo:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj9)}(hjh]h,}(hj|:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj9)}(hj9h]h*}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubj9)}(hjh]h)}(hj:hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubj)}(hstruct device_node *nodeh](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 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 9c.drm_of_component_match_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)}(hnodeh]hnode}(hj!;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj8ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj8hKSubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj8hhhj8hKSubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jhj8hKShj8hhubj)}(hhh]h)}(h)Add a component helper OF node match ruleh]h)Add a component helper OF node match rule}(hjK;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKShjH;hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hKSubeh}(h]h ](jfunctioneh"]h$]h&]jjjjc;jjc;jjjuh1jhhhj3hNhNubj)}(h**Parameters** ``struct device *master`` master device ``struct component_match **matchptr`` component match pointer ``int (*compare)(struct device *, void *)`` compare function used for matching component ``struct device_node *node`` of_node]h](h)}(h**Parameters**h]j%)}(hjm;h]h Parameters}(hjo;hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjk;ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKWhjg;ubji)}(hhh](jn)}(h(``struct device *master`` master device h](jt)}(h``struct device *master``h]jz)}(hj;h]hstruct device *master}(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:452: ./drivers/gpu/drm/drm_of.chKThj;ubj)}(hhh]h)}(h master deviceh]h master device}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKThj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKThj;ubjn)}(h>``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:452: ./drivers/gpu/drm/drm_of.chKUhj;ubj)}(hhh]h)}(hcomponent match pointerh]hcomponent match pointer}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKUhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj;hKUhj;ubjn)}(hY``int (*compare)(struct device *, void *)`` compare function used for matching component h](jt)}(h+``int (*compare)(struct device *, void *)``h]jz)}(hj;h]h'int (*compare)(struct device *, void *)}(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:452: ./drivers/gpu/drm/drm_of.chKVhj;ubj)}(hhh]h)}(h,compare function used for matching componenth]h,compare function used for matching component}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hKVhj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jmhj<hKVhj;ubjn)}(h$``struct device_node *node`` of_nodeh](jt)}(h``struct device_node *node``h]jz)}(hj7<h]hstruct device_node *node}(hj9<hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5<ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKXhj1<ubj)}(hhh]h)}(hof_nodeh]hof_node}(hjP<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKWhjM<ubah}(h]h ]h"]h$]h&]uh1jhj1<ubeh}(h]h ]h"]h$]h&]uh1jmhjL<hKXhj;ubeh}(h]h ]h"]h$]h&]uh1jhhjg;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_of_component_probe (C function)c.drm_of_component_probehNtauh1jxhj3hhhNhNubj)}(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&]uh1jhj<hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKeubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hKeubj)}(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&]jjuh1jhj<hhhj<hKeubj)}(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}(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 reftargetj<modnameN classnameNjj)}j]j%)}jj<sbc.drm_of_component_probeasbuh1hhj<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)}(h(int (*compare_of)(struct device*, void*)h](j)}(hinth]hint}(hj@=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=ubj)}(h h]h }(hjN=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=ubj9)}(hjth]h(}(hj\=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubj9)}(hj9h]h*}(hji=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubj)}(h compare_ofh]h compare_of}(hjv=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=ubj9)}(hjh]h)}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubj9)}(hjth]h(}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=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)}(hdeviceh]hdevice}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNjj)}j]j=c.drm_of_component_probeasbuh1hhj<=ubj9)}(hj9h]h*}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubj9)}(hjh]h,}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=ubj)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<=ubj9)}(hj9h]h*}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubj9)}(hjh]h)}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(h(const struct component_master_ops *m_opsh](j)}(hjch]hconst}(hj5>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1>ubj)}(h h]h }(hjB>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1>ubj)}(hjh]hstruct}(hjP>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1>ubj)}(h h]h }(hj]>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1>ubh)}(hhh]j)}(hcomponent_master_opsh]hcomponent_master_ops}(hjn>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjp>modnameN classnameNjj)}j]j=c.drm_of_component_probeasbuh1hhj1>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1>ubj9)}(hj9h]h*}(hj>hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1>ubj)}(hm_opsh]hm_ops}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhj<hhhj<hKeubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj<hhhj<hKeubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1jhj<hKehj<hhubj)}(hhh]h)}(h3Generic probe function for a component based masterh]h3Generic probe function for a component based master}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKehj>hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hKeubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhj3hNhNubj)}(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%)}(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:452: ./drivers/gpu/drm/drm_of.chKihj>ubji)}(hhh](jn)}(h<``struct device *dev`` master device containing the OF node 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&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKfhj ?ubj)}(hhh]h)}(h$master device containing the OF nodeh]h$master device containing the OF node}(hj+?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'?hKfhj(?ubah}(h]h ]h"]h$]h&]uh1jhj ?ubeh}(h]h ]h"]h$]h&]uh1jmhj'?hKfhj ?ubjn)}(h]``int (*compare_of)(struct device *, void *)`` compare function used for matching components h](jt)}(h.``int (*compare_of)(struct device *, void *)``h]jz)}(hjK?h]h*int (*compare_of)(struct device *, void *)}(hjM?hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjI?ubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKghjE?ubj)}(hhh]h)}(h-compare function used for matching componentsh]h-compare function used for matching components}(hjd?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`?hKghja?ubah}(h]h ]h"]h$]h&]uh1jhjE?ubeh}(h]h ]h"]h$]h&]uh1jmhj`?hKghj ?ubjn)}(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)}(hj?h]h(const struct component_master_ops *m_ops}(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:452: ./drivers/gpu/drm/drm_of.chKhhj~?ubj)}(hhh]h)}(hcomponent master ops to be usedh]hcomponent master ops to be used}(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&]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:452: ./drivers/gpu/drm/drm_of.chKjhj>ubh)}(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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKihj>ubh)}(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:452: ./drivers/gpu/drm/drm_of.chKnhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_of_find_panel_or_bridge (C function)c.drm_of_find_panel_or_bridgehNtauh1jxhj3hhhNhNubj)}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKubj)}(h h]h }(hj"@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj!@hKubj)}(hdrm_of_find_panel_or_bridgeh]j)}(hdrm_of_find_panel_or_bridgeh]hdrm_of_find_panel_or_bridge}(hj4@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhj!@hKubj)}(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}(hjP@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL@ubj)}(h h]h }(hj]@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL@ubj)}(hjh]hstruct}(hjk@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL@ubj)}(h h]h }(hjx@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL@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%)}jj6@sbc.drm_of_find_panel_or_bridgeasbuh1hhjL@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL@ubj9)}(hj9h]h*}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjL@ubj)}(hnph]hnp}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH@ubj)}(hint porth](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hporth]hport}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH@ubj)}(h int endpointh](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hendpointh]hendpoint}(hj.AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH@ubj)}(hstruct drm_panel **panelh](j)}(hjh]hstruct}(hjGAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCAubj)}(h h]h }(hjTAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCAubh)}(hhh]j)}(h drm_panelh]h drm_panel}(hjeAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgAmodnameN classnameNjj)}j]j@c.drm_of_find_panel_or_bridgeasbuh1hhjCAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCAubj9)}(hj9h]h*}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjCAubj9)}(hj9h]h*}(hjAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjCAubj)}(hpanelh]hpanel}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH@ubj)}(hstruct drm_bridge **bridgeh](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(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_of_find_panel_or_bridgeasbuh1hhjAubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj9)}(hj9h]h*}(hjBhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubj)}(hbridgeh]hbridge}(hj(BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH@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)}(h'return connected panel or bridge deviceh]h'return connected panel or bridge device}(hjRBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhjOBhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj!@hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjBjjjBjjjuh1jhhhj3hNhNubj)}(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%)}(hjtBh]h Parameters}(hjvBhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrBubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhjnBubji)}(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)}(hjBh]hconst struct device_node *np}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhjBubj)}(hhh]h)}(h0device tree node containing encoder output portsh]h0device tree node containing encoder output ports}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjBubjn)}(h*``int port`` port in the device tree node h](jt)}(h ``int port``h]jz)}(hjBh]hint port}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjBubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhjBubj)}(hhh]h)}(hport in the device tree nodeh]hport in the device tree node}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjBhKhjBubjn)}(h2``int endpoint`` endpoint in the device tree node h](jt)}(h``int endpoint``h]jz)}(hjCh]h int endpoint}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjCubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chKhjBubj)}(hhh]h)}(h endpoint in the device tree nodeh]h endpoint in the device tree node}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKhjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jmhjChKhjBubjn)}(h@``struct drm_panel **panel`` pointer to hold returned drm_panel h](jt)}(h``struct drm_panel **panel``h]jz)}(hj>Ch]hstruct drm_panel **panel}(hj@ChhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEmodnameN classnameNjj)}j]jD'c.drm_of_lvds_get_dual_link_pixel_orderasbuh1hhjDubj)}(h h]h }(hjZEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj9)}(hj9h]h*}(hjhEhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDubj)}(hport2h]hport2}(hjuEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnDubeh}(h]h ]h"]h$]h&]jjuh1jhj5DhhhjGDhMhubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj1DhhhjGDhMhubah}(h]j,Dah ](jjeh"]h$]h&]jj)jhuh1jhjGDhMhhj.Dhhubj)}(hhh]h)}(h%Get LVDS dual-link source pixel orderh]h%Get LVDS dual-link source pixel order}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhhjEhhubah}(h]h ]h"]h$]h&]uh1jhj.DhhhjGDhMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jhhhj3hNhNubj)}(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%)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMlhjEubji)}(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)}(hjEh]hconst struct device_node *port1}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjEubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMihjEubj)}(hhh]h)}(h/First DT port node of the Dual-link LVDS sourceh]h/First DT port node of the Dual-link LVDS source}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMihjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jmhjEhMihjEubjn)}(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)}(hjFh]hconst struct device_node *port2}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjFubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMjhjFubj)}(hhh]h)}(h0Second DT port node of the Dual-link LVDS sourceh]h0Second DT port node of the Dual-link LVDS source}(hj2FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.FhMjhj/Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jmhj.FhMjhjEubeh}(h]h ]h"]h$]h&]uh1jhhjEubh)}(h**Description**h]j%)}(hjTFh]h Description}(hjVFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRFubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMlhjEubh)}(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.}(hjjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMkhjEubh)}(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.}(hjyFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMphjEubh)}(h>If either port is not connected, this function returns -EPIPE.h]h>If either port is not connected, this function returns -EPIPE.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMuhjEubh)}(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}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh and }(hjFhhhNhNubj%)}(h **port2**h]hport2}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS encoders carry the even and odd pixels.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMwhjEubh)}(h **Return**h]j%)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chM{hjEubh)}(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 - }(hjFhhhNhNubj%)}(h **port1**h]hport1}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh carries even pixels and }(hjFhhhNhNubj%)}(h **port2**h]hport2}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjFubh carries odd pixels}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chM|hjFubah}(h]h ]h"]h$]h&]uh1hhjFubh)}(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 - }(hj"GhhhNhNubj%)}(h **port1**h]hport1}(hj*GhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"Gubh carries odd pixels and }(hj"GhhhNhNubj%)}(h **port2**h]hport2}(hjIf either port is not connected, this function returns -EPIPE.h]h>If either port is not connected, this function returns -EPIPE.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjFIubh)}(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}(hj&JhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"Jubh and }(hj"JhhhNhNubj%)}(h **port2**h]hport2}(hj8JhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj"Jubh are typically DT sibling nodes, but may have different parents when, for instance, two separate LVDS decoders receive the even and odd pixels.}(hj"JhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjFIubh)}(h **Return**h]j%)}(hjSJh]hReturn}(hjUJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjQJubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjFIubh)}(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 - }(hjpJhhhNhNubj%)}(h **port1**h]hport1}(hjxJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpJubh receives even pixels and }(hjpJhhhNhNubj%)}(h **port2**h]hport2}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjpJubh receives odd pixels}(hjpJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjlJubah}(h]h ]h"]h$]h&]uh1hhjiJubh)}(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 - }(hjJhhhNhNubj%)}(h **port1**h]hport1}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh receives odd pixels and }(hjJhhhNhNubj%)}(h **port2**h]hport2}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh receives even pixels}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjJubah}(h]h ]h"]h$]h&]uh1hhjiJubh)}(h)-EINVAL - **port1** or **port2** are NULLh]h)}(hjJh](h -EINVAL - }(hjJhhhNhNubj%)}(h **port1**h]hport1}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh or }(hjJhhhNhNubj%)}(h **port2**h]hport2}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjJubh are NULL}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjJubah}(h]h ]h"]h$]h&]uh1hhjiJubh)}(h6-EPIPE - when **port1** or **port2** are not connectedh]h)}(hj$Kh](h-EPIPE - when }(hj&KhhhNhNubj%)}(h **port1**h]hport1}(hj-KhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&Kubh or }(hj&KhhhNhNubj%)}(h **port2**h]hport2}(hj?KhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj&Kubh are not connected}(hj&KhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj"Kubah}(h]h ]h"]h$]h&]uh1hhjiJubeh}(h]h ]h"]h$]h&]j8j9uh1hhjJhMhjFIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_of_lvds_get_data_mapping (C function)c.drm_of_lvds_get_data_mappinghNtauh1jxhj3hhhNhNubj)}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubj)}(hdrm_of_lvds_get_data_mappingh]j)}(hdrm_of_lvds_get_data_mappingh]hdrm_of_lvds_get_data_mapping}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhjKhMubj)}(h (const struct device_node *port)h]j)}(hconst struct device_node *porth](j)}(hjch]hconst}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(h device_nodeh]h device_node}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j%)}jjKsbc.drm_of_lvds_get_data_mappingasbuh1hhjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj9)}(hj9h]h*}(hj(LhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubj)}(hporth]hport}(hj5LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhjKhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj|KhhhjKhMubah}(h]jwKah ](jjeh"]h$]h&]jj)jhuh1jhjKhMhjyKhhubj)}(hhh]h)}(hGet LVDS data mappingh]hGet LVDS data mapping}(hj_LhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj\Lhhubah}(h]h ]h"]h$]h&]uh1jhjyKhhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwLjjwLjjjuh1jhhhj3hNhNubj)}(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%)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj{Lubji)}(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)}(hjLh]hconst struct device_node *port}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjLubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjLubj)}(hhh]h)}(h'DT port node of the LVDS source or sinkh]h'DT port node of the LVDS source or sink}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jmhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhhj{Lubh)}(h**Description**h]j%)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj{Lubh)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj{Lubh)}(h **Return**h]j%)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj{Lubh)}(hhh](h)}(hMEDIA_BUS_FMT_RGB101010_1X7X5_SPWG - data-mapping is "vesa-30"h]h)}(hj}Mh]hBMEDIA_BUS_FMT_RGB101010_1X7X5_SPWG - data-mapping is “vesa-30”}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj{Mubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(h4-EINVAL - the "data-mapping" property is unsupportedh]h)}(hjMh]h8-EINVAL - the “data-mapping” property is unsupported}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjMubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(h0-ENODEV - the "data-mapping" property is missingh]h)}(hjMh]h4-ENODEV - the “data-mapping” property is missing}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjMubah}(h]h ]h"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]j8j9uh1hhj,MhMhj{Lubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_of_get_data_lanes_count (C function)c.drm_of_get_data_lanes_counthNtauh1jxhj3hhhNhNubj)}(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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhjMhMubj)}(hdrm_of_get_data_lanes_counth]j)}(hdrm_of_get_data_lanes_counth]hdrm_of_get_data_lanes_count}(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhjMhMubj)}(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}(hj&NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Nubj)}(h h]h }(hj3NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Nubj)}(hjh]hstruct}(hjANhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Nubj)}(h h]h }(hjNNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Nubh)}(hhh]j)}(h device_nodeh]h device_node}(hj_NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjaNmodnameN classnameNjj)}j]j%)}jj Nsbc.drm_of_get_data_lanes_countasbuh1hhj"Nubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Nubj9)}(hj9h]h*}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj"Nubj)}(hendpointh]hendpoint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubj)}(hconst unsigned int minh](j)}(hjch]hconst}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hinth]hint}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hminh]hmin}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubj)}(hconst unsigned int maxh](j)}(hjch]hconst}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hj,OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hunsignedh]hunsigned}(hj:OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjHOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hinth]hint}(hjVOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjdOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hmaxh]hmax}(hjrOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubeh}(h]h ]h"]h$]h&]jjuh1jhjMhhhjMhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjMhhhjMhMubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1jhjMhMhjMhhubj)}(hhh]h)}(hGet DSI/(e)DP data lane counth]hGet DSI/(e)DP data lane count}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.c\hMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jhhhj3hNhNubj)}(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%)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjOubji)}(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)}(hjOh]h"const struct device_node *endpoint}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjOubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjOubj)}(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&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jmhjOhMhjOubjn)}(hB``const unsigned int min`` minimum supported number of data lanes h](jt)}(h``const unsigned int min``h]jz)}(hjPh]hconst unsigned int min}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjPubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjPubj)}(hhh]h)}(h&minimum supported number of data lanesh]h&minimum supported number of data lanes}(hj/PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+PhMhj,Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhj+PhMhjOubjn)}(hB``const unsigned int max`` maximum supported number of data lanes h](jt)}(h``const unsigned int max``h]jz)}(hjOPh]hconst unsigned int max}(hjQPhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjMPubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjIPubj)}(hhh]h)}(h&maximum supported number of data lanesh]h&maximum supported number of data lanes}(hjhPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdPhMhjePubah}(h]h ]h"]h$]h&]uh1jhjIPubeh}(h]h ]h"]h$]h&]uh1jmhjdPhMhjOubeh}(h]h ]h"]h$]h&]uh1jhhjOubh)}(h**Description**h]j%)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjOubh)}(h?Count DT "data-lanes" property elements and check for validity.h]hCCount DT “data-lanes” property elements and check for validity.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjOubh)}(h **Return**h]j%)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjOubh)}(hhh](h)}(h:min..max - positive integer count of "data-lanes" elementsh]h)}(hjPh]h>min..max - positive integer count of “data-lanes” elements}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjPubah}(h]h ]h"]h$]h&]uh1hhjPubh)}(h5-ve - the "data-lanes" property is missing or invalidh]h)}(hjPh]h9-ve - the “data-lanes” property is missing or invalid}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjPubah}(h]h ]h"]h$]h&]uh1hhjPubh)}(h2-EINVAL - the "data-lanes" property is unsupportedh]h)}(hjPh]h6-EINVAL - the “data-lanes” property is unsupported}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjPubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]j8j9uh1hhjPhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(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_ephNtauh1jxhj3hhhNhNubj)}(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}(hj8QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Qhhh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMubj)}(h h]h }(hjGQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4QhhhjFQhMubj)}(hdrm_of_get_data_lanes_count_eph]j)}(hdrm_of_get_data_lanes_count_eph]hdrm_of_get_data_lanes_count_ep}(hjYQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4QhhhjFQhMubj)}(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}(hjuQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubj)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubh)}(hhh]j)}(h device_nodeh]h device_node}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j%)}jj[Qsb c.drm_of_get_data_lanes_count_epasbuh1hhjqQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubj9)}(hj9h]h*}(hjQhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqQubj)}(hporth]hport}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmQubj)}(h int port_regh](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hport_regh]hport_reg}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmQubj)}(hint regh](j)}(hinth]hint}(hj7RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Rubj)}(h h]h }(hjERhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Rubj)}(hregh]hreg}(hjSRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmQubj)}(hconst unsigned int minh](j)}(hjch]hconst}(hjlRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubj)}(h h]h }(hjyRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubj)}(hunsignedh]hunsigned}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubj)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubj)}(hminh]hmin}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmQubj)}(hconst unsigned int maxh](j)}(hjch]hconst}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hunsignedh]hunsigned}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hmaxh]hmax}(hj+ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmQubeh}(h]h ]h"]h$]h&]jjuh1jhj4QhhhjFQhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhj0QhhhjFQhMubah}(h]j+Qah ](jjeh"]h$]h&]jj)jhuh1jhjFQhMhj-Qhhubj)}(hhh]h)}(h)Get DSI/(e)DP data lane count by endpointh]h)Get DSI/(e)DP data lane count by endpoint}(hjUShhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjRShhubah}(h]h ]h"]h$]h&]uh1jhj-QhhhjFQhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmSjjmSjjjuh1jhhhj3hNhNubj)}(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%)}(hjwSh]h Parameters}(hjyShhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjuSubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjqSubji)}(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)}(hjSh]hconst struct device_node *port}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjSubj)}(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}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjShMhjSubjn)}(hL``int port_reg`` identifier (value of reg property) of the parent port node h](jt)}(h``int port_reg``h]jz)}(hjSh]h int port_reg}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjSubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjSubj)}(hhh]h)}(h:identifier (value of reg property) of the parent port nodeh]h:identifier (value of reg property) of the parent port node}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jmhjShMhjSubjn)}(hD``int reg`` identifier (value of reg property) of the endpoint node h](jt)}(h ``int reg``h]jz)}(hjTh]hint reg}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjTubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjTubj)}(hhh]h)}(h7identifier (value of reg property) of the endpoint nodeh]h7identifier (value of reg property) of the endpoint node}(hj!ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjSubjn)}(hB``const unsigned int min`` minimum supported number of data lanes h](jt)}(h``const unsigned int min``h]jz)}(hjATh]hconst unsigned int min}(hjCThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj?Tubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj;Tubj)}(hhh]h)}(h&minimum supported number of data lanesh]h&minimum supported number of data lanes}(hjZThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVThMhjWTubah}(h]h ]h"]h$]h&]uh1jhj;Tubeh}(h]h ]h"]h$]h&]uh1jmhjVThMhjSubjn)}(hB``const unsigned int max`` maximum supported number of data lanes h](jt)}(h``const unsigned int max``h]jz)}(hjzTh]hconst unsigned int max}(hj|ThhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjxTubah}(h]h ]h"]h$]h&]uh1jsh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjtTubj)}(hhh]h)}(h&maximum supported number of data lanesh]h&maximum supported number of data lanes}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjtTubeh}(h]h ]h"]h$]h&]uh1jmhjThMhjSubeh}(h]h ]h"]h$]h&]uh1jhhjqSubh)}(h**Description**h]j%)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjqSubh)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjqSubh)}(h **Return**h]j%)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjqSubh)}(hhh](h)}(h:min..max - positive integer count of "data-lanes" elementsh]h)}(hjTh]h>min..max - positive integer count of “data-lanes” elements}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhjTubah}(h]h ]h"]h$]h&]uh1hhjTubh)}(h4-EINVAL - the "data-mapping" property is unsupportedh]h)}(hjUh]h8-EINVAL - the “data-mapping” property is unsupported}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj Uubah}(h]h ]h"]h$]h&]uh1hhjTubh)}(h0-ENODEV - the "data-mapping" property is missingh]h)}(hj'Uh]h4-ENODEV - the “data-mapping” property is missing}(hj)UhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:452: ./drivers/gpu/drm/drm_of.chMhj%Uubah}(h]h ]h"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]j8j9uh1hhjUhMhjqSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj3hhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_of_get_dsi_bus (C function)c.drm_of_get_dsi_bushNtauh1jxhj3hhhNhNubj)}(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 }(hj=WhhhNhNubh)}(hB:c:type:`drm_mode_config_funcs.set_config `h]jz)}(hjGWh]h drm_mode_config_funcs.set_config}(hjIWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjEWubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_mode_config_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:458: ./drivers/gpu/drm/drm_plane_helper.chK*hj=Wubh 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.}(hj=WhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdWhK*hj,Whhubh)}(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.}(hjoWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:458: ./drivers/gpu/drm/drm_plane_helper.chK1hj,Whhubh)}(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 }(hj~WhhhNhNubh)}(h@:c:type:`struct drm_plane_helper_funcs `h]jz)}(hjWh]hstruct drm_plane_helper_funcs}(hjWhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjWubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_plane_helper_funcsuh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:458: ./drivers/gpu/drm/drm_plane_helper.chK5hj~Wubh for the details.}(hj~WhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhK5hj,Whhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_plane_helper_update_primary (C function)!c.drm_plane_helper_update_primaryhNtauh1jxhj,WhhhNhNubj)}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhjWhKubj)}(hdrm_plane_helper_update_primaryh]j)}(hdrm_plane_helper_update_primaryh]hdrm_plane_helper_update_primary}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjWhKubj)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj$XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Xubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&XmodnameN classnameNjj)}j]j%)}jjWsb!c.drm_plane_helper_update_primaryasbuh1hhjXubj)}(h h]h }(hjDXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hjRXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hplaneh]hplane}(hj_XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjxXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtXubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhjtXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtXubj9)}(hj9h]h*}(hjXhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjtXubj)}(hcrtch]hcrtc}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hstruct drm_framebuffer *fbh](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhjXubj)}(h h]h }(hj$YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj9)}(hj9h]h*}(hj2YhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjXubj)}(hfbh]hfb}(hj?YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(h int crtc_xh](j)}(hinth]hint}(hjXYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTYubj)}(h h]h }(hjfYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTYubj)}(hcrtc_xh]hcrtc_x}(hjtYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(h int crtc_yh](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hcrtc_yh]hcrtc_y}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hunsigned int crtc_wh](j)}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hcrtc_wh]hcrtc_w}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hunsigned int crtc_hh](j)}(hunsignedh]hunsigned}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj!ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hinth]hint}(hj/ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj=ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hcrtc_hh]hcrtc_h}(hjKZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(huint32_t src_xh](h)}(hhh]j)}(huint32_th]huint32_t}(hjgZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjiZmodnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhj`Zubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Zubj)}(hsrc_xh]hsrc_x}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(huint32_t src_yh](h)}(hhh]j)}(huint32_th]huint32_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hsrc_yh]hsrc_y}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(huint32_t src_wh](h)}(hhh]j)}(huint32_th]huint32_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hsrc_wh]hsrc_w}(hj#[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(huint32_t src_hh](h)}(hhh]j)}(huint32_th]huint32_t}(hj?[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjA[modnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhj8[ubj)}(h h]h }(hj][hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8[ubj)}(hsrc_hh]hsrc_h}(hjk[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(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}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j@X!c.drm_plane_helper_update_primaryasbuh1hhj[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&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjWhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjWhhhjWhKubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjWhKhjWhhubj)}(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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj\hhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1jhhhj,WhNhNubj)}(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%)}(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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj!\ubji)}(hhh](jn)}(h,``struct drm_plane *plane`` plane to update h](jt)}(h``struct drm_plane *plane``h]jz)}(hjF\h]hstruct drm_plane *plane}(hjH\hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjD\ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj@\ubj)}(hhh]h)}(hplane to updateh]hplane to update}(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 *crtc`` the plane's new 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:461: ./drivers/gpu/drm/drm_plane_helper.chKhjy\ubj)}(hhh]h)}(hthe plane's new CRTCh]hthe plane’s new CRTC}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj\ubah}(h]h ]h"]h$]h&]uh1jhjy\ubeh}(h]h ]h"]h$]h&]uh1jmhj\hKhj=\ubjn)}(h;``struct drm_framebuffer *fb`` the plane's new 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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj\ubj)}(hhh]h)}(hthe plane's new framebufferh]hthe plane’s new framebuffer}(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 crtc_x`` x coordinate within CRTC h](jt)}(h``int crtc_x``h]jz)}(hj\h]h int crtc_x}(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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj\ubj)}(hhh]h)}(hx coordinate within CRTCh]hx coordinate within 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(``int crtc_y`` y coordinate within CRTC h](jt)}(h``int crtc_y``h]jz)}(hj*]h]h int crtc_y}(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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj$]ubj)}(hhh]h)}(hy coordinate within CRTCh]hy coordinate within CRTC}(hjC]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?]hKhj@]ubah}(h]h ]h"]h$]h&]uh1jhj$]ubeh}(h]h ]h"]h$]h&]uh1jmhj?]hKhj=\ubjn)}(h5``unsigned int crtc_w`` width coordinate within CRTC h](jt)}(h``unsigned int crtc_w``h]jz)}(hjc]h]hunsigned int crtc_w}(hje]hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhja]ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj]]ubj)}(hhh]h)}(hwidth coordinate within CRTCh]hwidth coordinate within CRTC}(hj|]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx]hKhjy]ubah}(h]h ]h"]h$]h&]uh1jhj]]ubeh}(h]h ]h"]h$]h&]uh1jmhjx]hKhj=\ubjn)}(h6``unsigned int crtc_h`` height coordinate within CRTC h](jt)}(h``unsigned int crtc_h``h]jz)}(hj]h]hunsigned int crtc_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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj]ubj)}(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&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]hKhj=\ubjn)}(h.``uint32_t src_x`` x coordinate within source h](jt)}(h``uint32_t src_x``h]jz)}(hj]h]huint32_t src_x}(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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj]ubj)}(hhh]h)}(hx coordinate within sourceh]hx coordinate within source}(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.``uint32_t src_y`` y coordinate within source h](jt)}(h``uint32_t src_y``h]jz)}(hj^h]huint32_t src_y}(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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj^ubj)}(hhh]h)}(hy coordinate within sourceh]hy coordinate within source}(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)}(h2``uint32_t src_w`` width coordinate within source h](jt)}(h``uint32_t src_w``h]jz)}(hjG^h]huint32_t src_w}(hjI^hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE^ubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhjA^ubj)}(hhh]h)}(hwidth coordinate within sourceh]hwidth coordinate within source}(hj`^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\^hKhj]^ubah}(h]h ]h"]h$]h&]uh1jhjA^ubeh}(h]h ]h"]h$]h&]uh1jmhj\^hKhj=\ubjn)}(h3``uint32_t src_h`` height coordinate within source 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:461: ./drivers/gpu/drm/drm_plane_helper.chKhjz^ubj)}(hhh]h)}(hheight coordinate within sourceh]hheight coordinate within source}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKhj^ubah}(h]h ]h"]h$]h&]uh1jhjz^ubeh}(h]h ]h"]h$]h&]uh1jmhj^hKhj=\ubjn)}(h@``struct drm_modeset_acquire_ctx *ctx`` modeset locking context 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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj^ubj)}(hhh]h)}(hmodeset locking contexth]hmodeset locking context}(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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj!\ubh)}(hIThis helper validates the given parameters and updates the primary plane.h]hIThis helper validates the given parameters and updates the primary plane.}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj!\ubh)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj!\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:461: ./drivers/gpu/drm/drm_plane_helper.chKhj!\ubh)}(h,Zero on success, or an errno code otherwise.h]h,Zero on success, or an errno code otherwise.}(hj@_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj!\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,WhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_plane_helper_disable_primary (C function)"c.drm_plane_helper_disable_primaryhNtauh1jxhj,WhhhNhNubj)}(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}(hjo_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk_hhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKubj)}(h h]h }(hj~_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk_hhhj}_hKubj)}(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&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjk_hhhj}_hKubj)}(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 }(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_sb"c.drm_plane_helper_disable_primaryasbuh1hhj_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_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}(hj<`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>`modnameN classnameNjj)}j]j_"c.drm_plane_helper_disable_primaryasbuh1hhj`ubj)}(h h]h }(hjZ`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj9)}(hj9h]h*}(hjh`hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj`ubj)}(hctxh]hctx}(hju`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubeh}(h]h ]h"]h$]h&]jjuh1jhjk_hhhj}_hKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjg_hhhj}_hKubah}(h]jb_ah ](jjeh"]h$]h&]jj)jhuh1jhj}_hKhjd_hhubj)}(hhh]h)}(h#Helper for disabling primary planesh]h#Helper for disabling primary planes}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`hhubah}(h]h ]h"]h$]h&]uh1jhjd_hhhj}_hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj`jj`jjjuh1jhhhj,WhNhNubj)}(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$hj`ubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubji)}(hhh](jn)}(h-``struct drm_plane *plane`` plane to disable 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&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubj)}(hhh]h)}(hplane to disableh]hplane to disable}(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_modeset_acquire_ctx *ctx`` modeset locking context h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjah]h#struct drm_modeset_acquire_ctx *ctx}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjaubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhjaubj)}(hhh]h)}(hmodeset locking contexth]hmodeset locking context}(hj2ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ahKhj/aubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jmhj.ahKhj`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&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubh)}(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.}(hjjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubh)}(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.}(hjyahhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubh)}(h **Return**h]j%)}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubh)}(hAn errno code.h]hAn errno code.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chKhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,WhhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_plane_helper_destroy (C function)c.drm_plane_helper_destroyhNtauh1jxhj,WhhhNhNubj)}(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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chMubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjahMubj)}(hdrm_plane_helper_destroyh]j)}(hdrm_plane_helper_destroyh]hdrm_plane_helper_destroy}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjahMubj)}(h(struct drm_plane *plane)h]j)}(hstruct drm_plane *planeh](j)}(hjh]hstruct}(hj bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j)}(h drm_planeh]h drm_plane}(hj*bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'bubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,bmodnameN classnameNjj)}j]j%)}jjasbc.drm_plane_helper_destroyasbuh1hhjbubj)}(h h]h }(hjJbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj9)}(hj9h]h*}(hjXbhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbubj)}(hplaneh]hplane}(hjebhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjbubah}(h]h ]h"]h$]h&]jjuh1jhjahhhjahMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjahhhjahMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jhjahMhjahhubj)}(hhh]h)}(h$Helper for primary plane destructionh]h$Helper for primary plane destruction}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jhhhj,WhNhNubj)}(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%)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chMhjbubji)}(hhh]jn)}(h-``struct drm_plane *plane`` plane to destroy h](jt)}(h``struct drm_plane *plane``h]jz)}(hjbh]hstruct drm_plane *plane}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjbubah}(h]h ]h"]h$]h&]uh1jshg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chMhjbubj)}(hhh]h)}(hplane to destroyh]hplane to destroy}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jmhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhhjbubh)}(h**Description**h]j%)}(hj ch]h Description}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj cubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chMhjbubh)}(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.}(hj!chhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:461: ./drivers/gpu/drm/drm_plane_helper.chMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,WhhhNhNubeh}(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}(hjBchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?chhhhhMubh)}(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().}(hjPchhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./drivers/gpu/drm/drm_crtc_helper.chKBhj?chhubh)}(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 }(hj_chhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hjich]hdrm_encoder_helper_funcs.dpms}(hjkchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjgcubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./drivers/gpu/drm/drm_crtc_helper.chKGhj_cubhp even though the hardware is already in the desired state. This deficiency has been fixed in the atomic helpers.}(hj_chhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchKGhj?chhubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./drivers/gpu/drm/drm_crtc_helper.chKLhj?chhubh)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./drivers/gpu/drm/drm_crtc_helper.chKShj?chhubh)}(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 }(hjchhhNhNubh)}(h:c:type:`drm_crtc_helper_funcs`h]jz)}(hjch]hdrm_crtc_helper_funcs}(hjchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:467: ./drivers/gpu/drm/drm_crtc_helper.chKXhjcubh, }(hjchhhNhNubh)}(hD:c:type:`struct drm_encoder_helper_funcs `h]jz)}(hjch]hstruct drm_encoder_helper_funcs}(hjchhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjchKXhjcubh and struct }(hjchhhNhNubh)}(h$:c:type:`drm_connector_helper_funcs`h]jz)}(hjdh]hdrm_connector_helper_funcs}(hjdhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_helper_funcsuh1hhjchKXhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjchKXhj?chhubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_helper_encoder_in_use (C function)c.drm_helper_encoder_in_usehNtauh1jxhj?chhhNhNubj)}(hhh](j)}(heubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKbhj:eubj)}(hhh]h)}(hencoder to checkh]hencoder to check}(hjYehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUehKbhjVeubah}(h]h ]h"]h$]h&]uh1jhj:eubeh}(h]h ]h"]h$]h&]uh1jmhjUehKbhj7eubah}(h]h ]h"]h$]h&]uh1jhhjeubh)}(h**Description**h]j%)}(hj{eh]h Description}(hj}ehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyeubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKdhjeubh)}(hChecks whether **encoder** is with the current mode setting output configuration in use by any connector. This doesn't mean that it is actually enabled since the DPMS state is tracked separately.h](hChecks whether }(hjehhhNhNubj%)}(h **encoder**h]hencoder}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh is with the current mode setting output configuration in use by any connector. This doesn’t mean that it is actually enabled since the DPMS state is tracked separately.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKchjeubh)}(h **Return**h]j%)}(hjeh]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKghjeubh)}(h-True if **encoder** is used, false otherwise.h](hTrue if }(hjehhhNhNubj%)}(h **encoder**h]hencoder}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjeubh is used, false otherwise.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_helper_crtc_in_use (C function)c.drm_helper_crtc_in_usehNtauh1jxhj?chhhNhNubj)}(hhh](j)}(h3bool drm_helper_crtc_in_use (struct drm_crtc *crtc)h]j)}(h2bool drm_helper_crtc_in_use(struct drm_crtc *crtc)h](j)}(hjAh]hbool}(hj fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjfhKubj)}(hdrm_helper_crtc_in_useh]j)}(hdrm_helper_crtc_in_useh]hdrm_helper_crtc_in_use}(hj+fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'fubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjfhKubj)}(h(struct drm_crtc *crtc)h]j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjGfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCfubj)}(h h]h }(hjTfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCfubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjefhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgfmodnameN classnameNjj)}j]j%)}jj-fsbc.drm_helper_crtc_in_useasbuh1hhjCfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCfubj9)}(hj9h]h*}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjCfubj)}(hcrtch]hcrtc}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?fubah}(h]h ]h"]h$]h&]jjuh1jhjfhhhjfhKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjfhhhjfhKubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jhjfhKhjfhhubj)}(hhh]h)}(h)check if a given CRTC is in a mode_configh]h)check if a given CRTC is in a mode_config}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjfhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1jhhhj?chNhNubj)}(hXD**Parameters** ``struct drm_crtc *crtc`` CRTC to check **Description** Checks whether **crtc** is with the current mode setting output configuration in use by any connector. This doesn't mean that it is actually enabled since the DPMS state is tracked separately. **Return** True if **crtc** is used, false otherwise.h](h)}(h**Parameters**h]j%)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjfubji)}(hhh]jn)}(h(``struct drm_crtc *crtc`` CRTC to check h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj gh]hstruct drm_crtc *crtc}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj gubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjgubj)}(hhh]h)}(h CRTC to checkh]h CRTC to check}(hj$ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ghKhj!gubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jmhj ghKhjgubah}(h]h ]h"]h$]h&]uh1jhhjfubh)}(h**Description**h]j%)}(hjFgh]h Description}(hjHghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjDgubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjfubh)}(hChecks whether **crtc** is with the current mode setting output configuration in use by any connector. This doesn't mean that it is actually enabled since the DPMS state is tracked separately.h](hChecks whether }(hj\ghhhNhNubj%)}(h**crtc**h]hcrtc}(hjdghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj\gubh is with the current mode setting output configuration in use by any connector. This doesn’t mean that it is actually enabled since the DPMS state is tracked separately.}(hj\ghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjfubh)}(h **Return**h]j%)}(hjgh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj}gubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjfubh)}(h*True if **crtc** is used, false otherwise.h](hTrue if }(hjghhhNhNubj%)}(h**crtc**h]hcrtc}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjgubh is used, false otherwise.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_helper_disable_unused_functions (C function)%c.drm_helper_disable_unused_functionshNtauh1jxhj?chhhNhNubj)}(hhh](j)}(hAvoid drm_helper_disable_unused_functions (struct drm_device *dev)h]j)}(h@void drm_helper_disable_unused_functions(struct drm_device *dev)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghKubj)}(h#drm_helper_disable_unused_functionsh]j)}(h#drm_helper_disable_unused_functionsh]h#drm_helper_disable_unused_functions}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjghKubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hj hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hj1hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3hmodnameN classnameNjj)}j]j%)}jjgsb%c.drm_helper_disable_unused_functionsasbuh1hhjhubj)}(h h]h }(hjQhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj9)}(hj9h]h*}(hj_hhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhubj)}(hdevh]hdev}(hjlhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj hubah}(h]h ]h"]h$]h&]jjuh1jhjghhhjghKubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjghhhjghKubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhjghKhjghhubj)}(hhh]h)}(hdisable unused objectsh]hdisable unused objects}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jhhhj?chNhNubj)}(hX;**Parameters** ``struct drm_device *dev`` DRM device **Description** This 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. **NOTE** This 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](h)}(h**Parameters**h]j%)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhubji)}(hhh]jn)}(h&``struct drm_device *dev`` DRM device h](jt)}(h``struct drm_device *dev``h]jz)}(hjhh]hstruct drm_device *dev}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjhubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhubj)}(hhh]h)}(h DRM deviceh]h DRM device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jmhjhhKhjhubah}(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&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhubh)}(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 }(hj(ihhhNhNubj%)}(h**dev**h]hdev}(hj0ihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj(iubhX. 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.}(hj(ihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhubh)}(h**NOTE**h]j%)}(hjKih]hNOTE}(hjMihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjIiubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhubh)}(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.}(hjaihhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chKhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_crtc_helper_set_mode (C function)c.drm_crtc_helper_set_modehNtauh1jxhj?chhhNhNubj)}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhjihMubj)}(hdrm_crtc_helper_set_modeh]j)}(hdrm_crtc_helper_set_modeh]hdrm_crtc_helper_set_mode}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjihhhjihMubj)}(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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjimodnameN classnameNjj)}j]j%)}jjisbc.drm_crtc_helper_set_modeasbuh1hhjiubj)}(h h]h }(hj jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjiubj)}(hcrtch]hcrtc}(hj%jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hstruct drm_display_mode *modeh](j)}(hjh]hstruct}(hj>jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:jubj)}(h h]h }(hjKjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:jubh)}(hhh]j)}(hdrm_display_modeh]hdrm_display_mode}(hj\jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^jmodnameN classnameNjj)}j]jjc.drm_crtc_helper_set_modeasbuh1hhj:jubj)}(h h]h }(hjzjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:jubj9)}(hj9h]h*}(hjjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:jubj)}(hmodeh]hmode}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hint xh](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]hx}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hint yh](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]hy}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hstruct drm_framebuffer *old_fbh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj#khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hdrm_framebufferh]hdrm_framebuffer}(hj4khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1kubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6kmodnameN classnameNjj)}j]jjc.drm_crtc_helper_set_modeasbuh1hhjkubj)}(h h]h }(hjRkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj9)}(hj9h]h*}(hj`khhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjkubj)}(hold_fbh]hold_fb}(hjmkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhjihhhjihMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjihhhjihMubah}(h]jiah ](jjeh"]h$]h&]jj)jhuh1jhjihMhjihhubj)}(hhh]h)}(hinternal helper to set a modeh]hinternal helper to set a mode}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjihhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhj?chNhNubj)}(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%)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjkubji)}(hhh](jn)}(h*``struct drm_crtc *crtc`` CRTC to program h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hjkh]hstruct drm_crtc *crtc}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjkubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjkubj)}(hhh]h)}(hCRTC to programh]hCRTC to program}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhM hjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jmhjkhM hjkubjn)}(h.``struct drm_display_mode *mode`` mode to use h](jt)}(h!``struct drm_display_mode *mode``h]jz)}(hjlh]hstruct drm_display_mode *mode}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hj lubj)}(hhh]h)}(h mode to useh]h mode to use}(hj*lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&lhM hj'lubah}(h]h ]h"]h$]h&]uh1jhj lubeh}(h]h ]h"]h$]h&]uh1jmhj&lhM hjkubjn)}(h-``int x`` horizontal offset into the surface h](jt)}(h ``int x``h]jz)}(hjJlh]hint x}(hjLlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjHlubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjDlubj)}(hhh]h)}(h"horizontal offset into the surfaceh]h"horizontal offset into the surface}(hjclhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_lhM hj`lubah}(h]h ]h"]h$]h&]uh1jhjDlubeh}(h]h ]h"]h$]h&]uh1jmhj_lhM hjkubjn)}(h+``int y`` vertical offset into the surface h](jt)}(h ``int y``h]jz)}(hjlh]hint y}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hj}lubj)}(hhh]h)}(h vertical offset into the surfaceh]h vertical offset into the surface}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhj}lubeh}(h]h ]h"]h$]h&]uh1jmhjlhM hjkubjn)}(h@``struct drm_framebuffer *old_fb`` old framebuffer, for cleanup h](jt)}(h"``struct drm_framebuffer *old_fb``h]jz)}(hjlh]hstruct drm_framebuffer *old_fb}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjlubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjlubj)}(hhh]h)}(hold framebuffer, for cleanuph]hold framebuffer, for cleanup}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jmhjlhM hjkubeh}(h]h ]h"]h$]h&]uh1jhhjkubh)}(h**Description**h]j%)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjkubh)}(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 }(hj mhhhNhNubj%)}(h**mode**h]hmode}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj mubh on }(hj mhhhNhNubj%)}(h**crtc**h]hcrtc}(hj'mhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj mubh. Give }(hj mhhhNhNubj%)}(h**crtc**h]hcrtc}(hj9mhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj mubhX 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.}(hj mhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjkubh)}(h **Return**h]j%)}(hjTmh]hReturn}(hjVmhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjRmubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjkubh)}(h7True if the mode was set successfully, false otherwise.h]h7True if the mode was set successfully, false otherwise.}(hjjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_crtc_helper_atomic_check (C function)c.drm_crtc_helper_atomic_checkhNtauh1jxhj?chhhNhNubj)}(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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhMubj)}(hdrm_crtc_helper_atomic_checkh]j)}(hdrm_crtc_helper_atomic_checkh]hdrm_crtc_helper_atomic_check}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhjmhMubj)}(h7(struct drm_crtc *crtc, struct drm_atomic_state *state)h](j)}(hstruct drm_crtc *crtch](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubh)}(hhh]j)}(hdrm_crtch]hdrm_crtc}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j%)}jjmsbc.drm_crtc_helper_atomic_checkasbuh1hhjmubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj9)}(hj9h]h*}(hj"nhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjmubj)}(hcrtch]hcrtc}(hj/nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjmubj)}(hstruct drm_atomic_state *stateh](j)}(hjh]hstruct}(hjHnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDnubj)}(h h]h }(hjUnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDnubh)}(hhh]j)}(hdrm_atomic_stateh]hdrm_atomic_state}(hjfnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhnmodnameN classnameNjj)}j]jnc.drm_crtc_helper_atomic_checkasbuh1hhjDnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDnubj9)}(hj9h]h*}(hjnhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjDnubj)}(hstateh]hstate}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDnubeh}(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!Helper to check CRTC atomic-stateh]h!Helper to check CRTC atomic-state}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhj?chNhNubj)}(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%)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjnubji)}(hhh](jn)}(h(``struct drm_crtc *crtc`` CRTC to check h](jt)}(h``struct drm_crtc *crtc``h]jz)}(hj oh]hstruct drm_crtc *crtc}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjoubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjoubj)}(hhh]h)}(h CRTC to checkh]h CRTC to check}(hj#ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhj oubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjohMhjoubjn)}(h7``struct drm_atomic_state *state`` atomic state object h](jt)}(h"``struct drm_atomic_state *state``h]jz)}(hjCoh]hstruct drm_atomic_state *state}(hjEohhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjAoubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj=oubj)}(hhh]h)}(hatomic state objecth]hatomic state object}(hj\ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXohMhjYoubah}(h]h ]h"]h$]h&]uh1jhj=oubeh}(h]h ]h"]h$]h&]uh1jmhjXohMhjoubeh}(h]h ]h"]h$]h&]uh1jhhjnubh)}(h**Description**h]j%)}(hj~oh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj|oubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjnubh)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjnubh)}(h **Return**h]j%)}(hjoh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjnubh)}(h,Zero on success, or an errno code otherwise.h]h,Zero on success, or an errno code otherwise.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_crtc_helper_set_config (C function)c.drm_crtc_helper_set_confighNtauh1jxhj?chhhNhNubj)}(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}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjohMubj)}(hdrm_crtc_helper_set_configh]j)}(hdrm_crtc_helper_set_configh]hdrm_crtc_helper_set_config}(hj phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1jhjohhhjohMubj)}(h?(struct drm_mode_set *set, struct drm_modeset_acquire_ctx *ctx)h](j)}(hstruct drm_mode_set *seth](j)}(hjh]hstruct}(hj'phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#pubj)}(h h]h }(hj4phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#pubh)}(hhh]j)}(h drm_mode_seth]h drm_mode_set}(hjEphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGpmodnameN classnameNjj)}j]j%)}jj psbc.drm_crtc_helper_set_configasbuh1hhj#pubj)}(h h]h }(hjephhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#pubj9)}(hj9h]h*}(hjsphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj#pubj)}(hseth]hset}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#pubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubj)}(h#struct drm_modeset_acquire_ctx *ctxh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j)}(hdrm_modeset_acquire_ctxh]hdrm_modeset_acquire_ctx}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]japc.drm_crtc_helper_set_configasbuh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj9)}(hj9h]h*}(hjphhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubj)}(hctxh]hctx}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpubeh}(h]h ]h"]h$]h&]jjuh1jhjohhhjohMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjohhhjohMubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jhjohMhjohhubj)}(hhh]h)}(hset a new config from userspaceh]hset a new config from userspace}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2qjj2qjjjuh1jhhhj?chNhNubj)}(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%)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj:qubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj6qubji)}(hhh](jn)}(h4``struct drm_mode_set *set`` mode set configuration h](jt)}(h``struct drm_mode_set *set``h]jz)}(hj[qh]hstruct drm_mode_set *set}(hj]qhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYqubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjUqubj)}(hhh]h)}(hmode set configurationh]hmode set configuration}(hjtqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpqhMhjqqubah}(h]h ]h"]h$]h&]uh1jhjUqubeh}(h]h ]h"]h$]h&]uh1jmhjpqhMhjRqubjn)}(hL``struct drm_modeset_acquire_ctx *ctx`` lock acquire context, not used here h](jt)}(h'``struct drm_modeset_acquire_ctx *ctx``h]jz)}(hjqh]h#struct drm_modeset_acquire_ctx *ctx}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjqubj)}(hhh]h)}(h#lock acquire context, not used hereh]h#lock acquire context, not used here}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqhMhjRqubeh}(h]h ]h"]h$]h&]uh1jhhj6qubh)}(h**Description**h]j%)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj6qubh)}(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 }(hjqhhhNhNubh)}(h4:c:type:`drm_crtc_funcs.set_config `h]jz)}(hjqh]hdrm_crtc_funcs.set_config}(hjqhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjqubh4 callback for drivers using the legacy CRTC helpers.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj rhMhj6qubh)}(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 }(hjrhhhNhNubj%)}(h+**drm_connector_helper_funcs.best_encoder**h]h'drm_connector_helper_funcs.best_encoder}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubh helper operation.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hj6qubh)}(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.}(hj8rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hj6qubh)}(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 }(hjGrhhhNhNubh)}(hE:c:type:`drm_crtc_helper_funcs.mode_set_base `h]jz)}(hjQrh]h#drm_crtc_helper_funcs.mode_set_base}(hjSrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjOrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjGrubh helper operation.}(hjGrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnrhMhj6qubh)}(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 }(hjyrhhhNhNubh)}(h>:c:type:`struct drm_crtc_helper_funcs `h]jz)}(hjrh]hstruct drm_crtc_helper_funcs}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjyrubh and struct }(hjyrhhhNhNubh)}(h":c:type:`drm_encoder_helper_funcs`h]jz)}(hjrh]hdrm_encoder_helper_funcs}(hjrhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjrubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhjrhMhjyrubh.}(hjyrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMhj6qubh)}(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().}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hj6qubh)}(h **Return**h]j%)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM$hj6qubh)}(h8Returns 0 on success, negative errno numbers on failure.h]h8Returns 0 on success, negative errno numbers on failure.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM%hj6qubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_helper_connector_dpms (C function)c.drm_helper_connector_dpmshNtauh1jxhj?chhhNhNubj)}(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}(hj$shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj shhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMyubj)}(h h]h }(hj3shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj shhhj2shMyubj)}(hdrm_helper_connector_dpmsh]j)}(hdrm_helper_connector_dpmsh]hdrm_helper_connector_dpms}(hjEshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAsubah}(h]h ](jjeh"]h$]h&]jjuh1jhj shhhj2shMyubj)}(h+(struct drm_connector *connector, int mode)h](j)}(hstruct drm_connector *connectorh](j)}(hjh]hstruct}(hjashhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]subj)}(h h]h }(hjnshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]subh)}(hhh]j)}(h drm_connectorh]h drm_connector}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|subah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j%)}jjGssbc.drm_helper_connector_dpmsasbuh1hhj]subj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]subj9)}(hj9h]h*}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]subj)}(h connectorh]h connector}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]subeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYsubj)}(hint modeh](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hmodeh]hmode}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYsubeh}(h]h ]h"]h$]h&]jjuh1jhj shhhj2shMyubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjshhhj2shMyubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhj2shMyhjshhubj)}(hhh]h)}(h$connector dpms helper implementationh]h$connector dpms helper implementation}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMyhjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhj2shMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1tjj1tjjjuh1jhhhj?chNhNubj)}(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%)}(hj;th]h Parameters}(hj=thhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj9tubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM}hj5tubji)}(hhh](jn)}(h7``struct drm_connector *connector`` affected connector h](jt)}(h#``struct drm_connector *connector``h]jz)}(hjZth]hstruct drm_connector *connector}(hj\thhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjXtubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMzhjTtubj)}(hhh]h)}(haffected connectorh]haffected connector}(hjsthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjothMzhjptubah}(h]h ]h"]h$]h&]uh1jhjTtubeh}(h]h ]h"]h$]h&]uh1jmhjothMzhjQtubjn)}(h``int mode`` DPMS mode h](jt)}(h ``int mode``h]jz)}(hjth]hint mode}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM{hjtubj)}(hhh]h)}(h DPMS modeh]h DPMS mode}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM{hjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jmhjthM{hjQtubeh}(h]h ]h"]h$]h&]uh1jhhj5tubh)}(h**Description**h]j%)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM}hj5tubh)}(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 }(hjthhhNhNubh)}(h8:c:type:`drm_connector_funcs.dpms `h]jz)}(hjth]hdrm_connector_funcs.dpms}(hjthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_connector_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM|hjtubh4 callback for drivers using the legacy CRTC helpers.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj uhM|hj5tubh)}(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 }(hjuhhhNhNubh)}(h<:c:type:`drm_crtc_helper_funcs.dpms `h]jz)}(hj uh]hdrm_crtc_helper_funcs.dpms}(hj"uhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_crtc_helper_funcsuh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjuubh and }(hjuhhhNhNubh)}(hB:c:type:`drm_encoder_helper_funcs.dpms `h]jz)}(hjDuh]hdrm_encoder_helper_funcs.dpms}(hjFuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjBuubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_encoder_helper_funcsuh1hhj=uhMhjuubh" callbacks provided by the driver.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=uhMhj5tubh)}(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.}(hjkuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj5tubh)}(h **Return**h]j%)}(hj|uh]hReturn}(hj~uhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjzuubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj5tubh)}(hAlways returns 0.h]hAlways returns 0.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj5tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_helper_resume_force_mode (C function)c.drm_helper_resume_force_modehNtauh1jxhj?chhhNhNubj)}(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}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhMubj)}(hdrm_helper_resume_force_modeh]j)}(hdrm_helper_resume_force_modeh]hdrm_helper_resume_force_mode}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjuhMubj)}(h(struct drm_device *dev)h]j)}(hstruct drm_device *devh](j)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h drm_deviceh]h drm_device}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j%)}jjusbc.drm_helper_resume_force_modeasbuh1hhjuubj)}(h h]h }(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhj;xhhubah}(h]h ]h"]h$]h&]uh1jhjswhhhjwhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVxjjVxjjjuh1jhhhj?chNhNubj)}(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%)}(hj`xh]h Parameters}(hjbxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj^xubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjZxubji)}(hhh]jn)}(h>``struct drm_device *dev`` DRM device whose CRTCs to turn off h](jt)}(h``struct drm_device *dev``h]jz)}(hjxh]hstruct drm_device *dev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}xubah}(h]h ]h"]h$]h&]uh1jshf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjyxubj)}(hhh]h)}(h"DRM device whose CRTCs to turn offh]h"DRM device whose CRTCs to turn off}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM hjxubah}(h]h ]h"]h$]h&]uh1jhjyxubeh}(h]h ]h"]h$]h&]uh1jmhjxhM hjvxubah}(h]h ]h"]h$]h&]uh1jhhjZxubh)}(h**Description**h]j%)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjZxubh)}(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.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjZxubh)}(h**Note**h]j%)}(hjxh]hNote}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chM hjZxubh)}(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().}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjZxubh)}(h **Return**h]j%)}(hjyh]hReturn}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjZxubh)}(h'Zero on success, error code on failure.h]h'Zero on success, error code on failure.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:470: ./drivers/gpu/drm/drm_crtc_helper.chMhjZxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj?chhhNhNubeh}(h].legacy-crtc-modeset-helper-functions-referenceah ]h"].legacy crtc/modeset helper functions referenceah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hPrivacy-screen classh]hPrivacy-screen class}(hj?yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`.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 }(hjMyhhhNhNubh)}(hC:ref:`Standard Connector Properties`h]hinline)}(hjWyh]hStandard Connector Properties}(hj[yhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jYyhjUyubah}(h]h ]h"]h$]h&]refdocj refdomainjeyreftyperef refexplicitrefwarnjstandard_connector_propertiesuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:476: ./drivers/gpu/drm/drm_privacy_screen.chKhjMyubh.}(hjMyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwyhKhj` 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}(hj{{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjw{ubh:}(hjw{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhK1hjs{ubj@)}(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:479: ./include/drm/drm_privacy_screen_driver.hhK3hjs{ubh)}(h **Members**h]j%)}(hj{h]hMembers}(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:479: ./include/drm/drm_privacy_screen_driver.hhK>hjs{ubji)}(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:479: ./include/drm/drm_privacy_screen_driver.hhK4hj{ubj)}(hhh]h)}(h4device used to register the privacy-screen in sysfs.h]h4device used to register the privacy-screen in sysfs.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hK4hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhj{hK4hj{ubjn)}(h5``lock`` mutex protection all fields in this struct. h](jt)}(h``lock``h]jz)}(hj{h]hlock}(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:479: ./include/drm/drm_privacy_screen_driver.hhK6hj{ubj)}(hhh]h)}(h+mutex protection all fields in this struct.h]h+mutex protection all fields in this struct.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hK6hj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jmhj|hK6hj{ubjn)}(h1``list`` privacy-screen devices list list-entry. h](jt)}(h``list``h]jz)}(hj6|h]hlist}(hj8|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj4|ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhK8hj0|ubj)}(hhh]h)}(h'privacy-screen devices list list-entry.h]h'privacy-screen devices list list-entry.}(hjO|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK|hK8hjL|ubah}(h]h ]h"]h$]h&]uh1jhj0|ubeh}(h]h ]h"]h$]h&]uh1jmhjK|hK8hj{ubjn)}(h0``notifier_head`` privacy-screen notifier head. h](jt)}(h``notifier_head``h]jz)}(hjo|h]h notifier_head}(hjq|hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjm|ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhK:hji|ubj)}(hhh]h)}(hprivacy-screen notifier head.h]hprivacy-screen notifier head.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hK:hj|ubah}(h]h ]h"]h$]h&]uh1jhji|ubeh}(h]h ]h"]h$]h&]uh1jmhj|hK:hj{ubjn)}(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&]uh1jyhj|ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhK>hj|ubj)}(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}(hj|hhhNhNubah}(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:479: ./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=hj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj|hK>hj{ubjn)}(h``sw_state`` The privacy-screen's software state, see :ref:`Standard Connector Properties` for more info. h](jt)}(h ``sw_state``h]jz)}(hj}h]hsw_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:479: ./include/drm/drm_privacy_screen_driver.hhKDhj|ubj)}(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 }(hj}hhhNhNubh)}(hC:ref:`Standard Connector Properties`h]jZy)}(hj$}h]hStandard Connector Properties}(hj&}hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jYyhj"}ubah}(h]h ]h"]h$]h&]refdocj refdomainj0}reftyperef refexplicitrefwarnjstandard_connector_propertiesuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhKBhj}ubh for more info.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjB}hKBhj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jmhj}hKDhj{ubjn)}(h``hw_state`` The privacy-screen's hardware state, see :ref:`Standard Connector Properties` for more info. h](jt)}(h ``hw_state``h]jz)}(hj_}h]hhw_state}(hja}hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]}ubah}(h]h ]h"]h$]h&]uh1jshl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhKJhjY}ubj)}(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 }(hjx}hhhNhNubh)}(hC:ref:`Standard Connector Properties`h]jZy)}(hj}h]hStandard Connector Properties}(hj}hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jYyhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainj}reftyperef refexplicitrefwarnjstandard_connector_propertiesuh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhKHhjx}ubh for more info.}(hjx}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}hKHhju}ubah}(h]h ]h"]h$]h&]uh1jhjY}ubeh}(h]h ]h"]h$]h&]uh1jmhjt}hKJhj{ubjn)}(h=``drvdata`` Private data owned by the privacy screen providerh](jt)}(h ``drvdata``h]jz)}(hj}h]hdrvdata}(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:479: ./include/drm/drm_privacy_screen_driver.hhKMhj}ubj)}(hhh]h)}(h1Private data owned by the privacy screen providerh]h1Private data owned by the privacy screen provider}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhl/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:479: ./include/drm/drm_privacy_screen_driver.hhKNhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jmhj}hKMhj{ubeh}(h]h ]h"]h$]h&]uh1jhhjs{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj``dev_id`` Consumer device name or NULL to match all devices. h](jt)}(h ``dev_id``h]jz)}(hj'h]hdev_id}(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:482: ./include/drm/drm_privacy_screen_machine.hhKhj!ubj)}(hhh]h)}(h2Consumer device name or NULL to match all devices.h]h2Consumer device name or NULL to match all devices.}(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)}(hD``con_id`` Consumer connector name or NULL to match all connectors. h](jt)}(h ``con_id``h]jz)}(hj`h]hcon_id}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&]uh1jshm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:482: ./include/drm/drm_privacy_screen_machine.hhKhjZubj)}(hhh]h)}(h8Consumer connector name or NULL to match all connectors.h]h8Consumer connector name or NULL to match all connectors.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jmhjuhKhj~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:482: ./include/drm/drm_privacy_screen_machine.hhKhjubj)}(hhh]h)}(h*dev_name() of the privacy_screen provider.h]h*dev_name() of the privacy_screen provider.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:482: ./include/drm/drm_privacy_screen_machine.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhKhj~ubeh}(h]h ]h"]h$]h&]uh1jhhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj` 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%)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chK2hjubji)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chK0hjubj)}(hhh]h)}(hlookup list entry to addh]hlookup list entry to add}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hK0hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj0hK0hjubah}(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&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chK2hjubh)}(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 }(hjlhhhNhNubh)}(h&:c:type:`struct list_head `h]jz)}(hjvh]hstruct list_head}(hjxhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chK1hjlubh which is part of the }(hjlhhhNhNubh)}(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_lookupuh1hhjhK1hjlubhI gets added to a list owned by the privacy-screen core. So the passed in }(hjlhhhNhNubh)}(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_lookupuh1hhjhK1hjlubhl must not be free-ed until it is removed from the lookup list by calling drm_privacy_screen_lookup_remove().}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKEhjubh)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj` 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%)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chKkhjubji)}(hhh](jn)}(hR``struct device *dev`` consumer-device for which to get a privacy-screen provider h](jt)}(h``struct device *dev``h]jz)}(hjh]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKhhjubj)}(hhh]h)}(h:consumer-device for which to get a privacy-screen providerh]h:consumer-device for which to get a privacy-screen provider}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj3hKhhjubjn)}(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)}(hjWh]hconst char *con_id}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjUubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKihjQubj)}(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}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKihjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jmhjlhKihjubeh}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chKkhjubh)}(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 }(hjhhhNhNubj%)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh and }(hjhhhNhNubj%)}(h **con_id**h]hcon_id}(hj…hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKjhjubh)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chKmhjubh)}(hhh](h)}(hSA pointer to a :c:type:`struct drm_privacy_screen ` on success.h]h)}(hjh](hA pointer to a }(hjhhhNhNubh)}(h8:c:type:`struct drm_privacy_screen `h]jz)}(hjh]hstruct drm_privacy_screen}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screenuh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKnhjubh on success.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKnhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h7ERR_PTR(-ENODEV) if no matching privacy-screen is foundh]h)}(hj3h]h7ERR_PTR(-ENODEV) if no matching privacy-screen is found}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKohj1ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(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,}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKphjPubj)}(hhh]h)}(h#but it has not been registered yet.h]h#but it has not been registered yet.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chKqhjcubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jmhjbhKphjMubah}(h]h ]h"]h$]h&]uh1jhhjIubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]j8j9uh1hhj hKnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjah ](jjeh"]h$]h&]jj)jhuh1jhjYhMhj@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:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmodnameN classnameNjj)}j]j%)}jdrm_privacy_screen_registersbc.drm_privacy_screen_registerasbuh1hhjhhhj*hM|ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hM|ubj9)}(hj9h]h*}(hjkhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjhhhj*hM|ubj)}(hdrm_privacy_screen_registerh]j)}(hjZh]hdrm_privacy_screen_register}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj*hM|ubj)}(hM(struct device *parent, const struct drm_privacy_screen_ops *ops, void *data)h](j)}(hstruct device *parenth](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]jXc.drm_privacy_screen_registerasbuh1hhjubj)}(h h]h }(hjӒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h(const struct drm_privacy_screen_ops *opsh](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_privacy_screen_opsh]hdrm_privacy_screen_ops}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jXc.drm_privacy_screen_registerasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj9)}(hj9h]h*}(hjlhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubj)}(hopsh]hops}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(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&]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)}(hregister a privacy-screenh]hregister a privacy-screen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chM|hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj*hM|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj` 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%)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjubji)}(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:485: ./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}hjubjn)}(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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chM~hjYubj)}(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}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1jyhj|ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjdrm_privacy_screen_opsuh1hhjthM~hjxubh( pointer with ops for the privacy-screen}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthM~hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthM~hjubjn)}(hA``void *data`` Private data owned by the privacy screen provider h](jt)}(h``void *data``h]jz)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjubj)}(hhh]h)}(h1Private data owned by the privacy screen providerh]h1Private data owned by the privacy screen provider}(hjДhhhNhNubah}(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%)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjubh)}(h%Create and register a privacy-screen.h]h%Create and register a privacy-screen.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjubh)}(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:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjubh)}(hhh](h)}(h3A pointer to the created privacy-screen on success.h]h)}(hj4h]h3A pointer to the created privacy-screen on success.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chMhj2ubah}(h]h ]h"]h$]h&]uh1hhj/ubh)}(hAn ERR_PTR(errno) on failure.h]h)}(hjLh]hAn ERR_PTR(errno) on failure.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjJubah}(h]h ]h"]h$]h&]uh1hhj/ubeh}(h]h ]h"]h$]h&]j8j9uh1hhjChMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h notify consumers of state changeh]h notify consumers of state change}(hjɗhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/drm-kms-helpers:485: ./drivers/gpu/drm/drm_privacy_screen.chMhjƗhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjj>j?j?jAjAjCjCj9Fj>FjKjKjNj#NjRjRj2Tj7TjVjWjZjZj\j\j^j^jL`jQ`jbjbjejejgjgjijijkjkjLmjQmjojojqjqjtjtjWxj\xjzj!zj{j{j}j}jVj[jjjjjujzjjjCjHjjjjjj jYj^jѝj֝jOjTjjjjjBjGjCjHjjjjjYj^j!j&jj?j&jjjj޾jjjj<jAjfjkj"j'jjjjj jjjjgjljjjMjRjjjjj4j9jjjjjjjjjjjj"jjjZj_jjjjjjjjjj jQjVjj,jjj0j5jjjjj~jj-j2jjjjjjjjjjjQ jV j j jjjljqj5j:jjjjj*j/jjjjjz9jj j j%*j**j9,j>,ji.jn.j^1jc1j3j3j}sj9jQ:jW:j<j<j>j>j$Dj)DjDjDjRFjWFjGjGjIjIjKjKjOjOjPjPjSj Sj UjUjVjVj Xj%XjYjYj$\j)\j^j^jA`jF`jibjnbjdjej&gj+gjhjhjjjjjnj nj@pjEpjrj rj,jsjsjsj!uj&ujwjwjSzjXzj{j{j~j~jՃjڃjjjjj^jcjjjĠjɠjwj|j*j/jݱjjjjCjHjjjjj\jajjjjjujzj(j-jtjyjj2jjjjjjjjjd&jj]jbjjjjjjjs jx jjjjjbjgjjj jj^ jc j"j"ja&jj&jjj&j'j{&j(j'j%*j(jM/j+*j 0jS/jEj0j.0j30j11j61jF[jK[j ]j%]jajaj%kj*kjcmjhmj.oj3ojqjqjrjrjtjtjvjvjwjwjvyj{yjzjzjZ}j_}j~j~j{jj#j(jvj{j,j1jojtjjjDjIjjjNjSjНj՝jjj{jj.j3jZj_jjjjKjjjjjjjŰjʰj`jejjjcjhjjøjjjͽjҽjj$jj jjj]jbjjjajjCjHjjj9j>jjjjjjjjjjjjjjjjjejjjVj[jjjj$jjjAjFjjjXj]jjjjjjjjjjjjjjjjjjjjjjj(jjj jjj jUjZj j j j j|jjjjujzjjjjj4j9j=jBjjj #jj'j-jjj!j#!jx#j}#jc'jh'j(j(j*j*jG-jL-j?0jD0jp2ju2j4j4j6j6j8j8j9j9jAjAj$Dj)Dj9Gj>GjIjIjLjLjOj"OjQjQjRjRjUjUjkWjpWjYjYj\j\j]j]j_j_jajajcjcjejejhjhj(lj-ljenjjnj_qjdqjjsjosjuujzujxjxj5zj:zj]|jb|jjj.j3j/j4jŇjʇjjjrjwjjjޓjjjjjjjjjjejjj|jjݨjjWj\jjjBjGjjj}jjvj{jjjjj½jǽjjjmjrj%j*jcjhj%j*jjjjjjjjjjjnjsjj"j jjjjjjjjoj*j/jTjYjjjVj[jjjj jxj}jfjkjjjWj\jjjIjNjjjJjOjZj_j]jbjjjj j j j] jb jj jUjZj$j)jjjjj4!j9!j7(j#j;#j@#j$j$j&j&jHj=(j(j(j)j)j+j+jV/j[/j2j2j5j5j8j8jo<jt<j@j@jAjAjDjDjjHj2Kj'HjHjGHjIjHj*KjIjyj8KjUKjZKjrSjwSjWjWjp[ju[j^j^jijijPjjUjjWoj\ojqjqjsjsjujujxjxjzjzj!}j&}jKjPjEjJjjjjjjjjjnjsj\jajݒjj^jcjjjj jjjjj+j0jHjMj6j;jjjjj4j9jjjljqjjjƸj˸jjjQjVj{jjjjjjjj$j)jjj<jAjYj^jjjjjj~jjjjjjjojtjWj\j?jDjjjjj3jjjjjjOjTjjjjjjjjj:j?jjjj"j: j? j j jajfjjjajfjvj{jjjjjC!jH!j"j"j$j$j6&j;&j'j'j)j)j0.j5.j2j2j[j3j3j3jY6j^6j8j8j9j9jI;jN;j<j<j0@j5@jAjAjBjBj DjDj]EjbEjFjFjHj!HjIjIjKjKjENjJNjOjOjSjSjTjTj:Vj?VjWjWjYjYjP[jU[j\j\j^j^jn`js`jbjbjQejVejfgjkgjijijljljcojhojqjrjujujwjwjlzjqzj+}j0}jjjjj'j,jχjԇjwj|jjjjj=jBjjjjj5j:jߖjjjj͛jқjjjj$jHjMjWj\jYj^jhjmjjjjƭjjj0j5jjj2j7jjj4j9jQjVjҺj׺j-j2jjjjjjj5j:jjjjjjjojajjj?jDjjjBjGj/j4jjjjjRjWjjjj j%j*jjjWj\jj jjj!jujjjjjjjQjVjjjjj j! jv j{ j$ j) jjj0j5jjjjjjjj jrjwj)j.jjj j!j!j!j#j#j%j%j(j(jJ*jO*j+j+j-j-j[/j`/j1j1j3j4j6j6j7j7j 9j9j;j;j>j>jAjAjCjCjEjEjHjHjVJj[JjLjLjFOjKOjQjRjSjSjUjUjWjWjoZjtZj\j\jn_js_jajaj8dj=dj,fj1fjgjgjijijiljnlj nj%njpjpj0sj5sjujujxjxjt|jy|jjj?jDjjj0j5jjj jjjjBjGjjjjjj&jpjuj'j,jіj֖j jj\jajjjjjjj$j*jǥj̥jjjpjujjj̭jѭj}jj*j/jjjjj7j<jjjcjhj/j4jjjjjajfjjjjjnjsjjjpjuj<jAjjjjjjjojj$jjjjjjjjjmjrj jj jjjjjjjjjjWj\jjjyj~jjjjjijnjjjj jjjYj^j j jjj%j*jjjjj@'jjjj jj!j !j1#j6#j%j%j3jF'jr'jw'j(j(j,j,j}0j0j42j92j&Wj3j4j4jP6jU6j8j8j<j<j@j @j,Dj1DjGjGjwKj|KjMjMj+Qj0QjVUj[Uj9cj,WjWjWjb_jg_jajaj6yj?cj3dj8djejfjgjgjijijmjmjojojsjsjujujqwjvwjsjjCjjďjjj{jjjj>JjJjJjjJu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages](hsystem_message)}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]j'alevelKtypeINFOsourcehlineKuh1j hj{&hhhhhKubj )}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]jalevelKtypej&sourcehlineKuh1j hjhhhhhKubj )}(hhh]h)}(h+Duplicate implicit target name: "overview".h]h/Duplicate implicit target name: “overview”.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]j2KalevelKtypej&sourcehlineM)uh1j hj'HhhhhhM)ubj )}(hhh]h)}(h6Duplicate implicit target name: "functions reference".h]h:Duplicate implicit target name: “functions reference”.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&]jyalevelKtypej&sourcehlineM2uh1j hj8KhhhhhM2ubetransform_messages](j )}(hhh]h)}(hhh]h7Hyperlink target "drm-atomic-helper" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&]levelKtypej&sourcehlineK-uh1j ubj )}(hhh]h)}(hhh]h1Hyperlink target "drm-bridges" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypej&sourcehlineKuh1j ubj )}(hhh]h)}(hhh]h6Hyperlink target "drm-panel-helper" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypej&sourcehlineKuh1j ube transformerN include_log] decorationNhhub.