Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/gpu/drm/drm_bridge_helper.c
26444 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
3
#include <linux/export.h>
4
5
#include <drm/drm_atomic.h>
6
#include <drm/drm_atomic_helper.h>
7
#include <drm/drm_bridge.h>
8
#include <drm/drm_bridge_helper.h>
9
#include <drm/drm_modeset_lock.h>
10
11
/**
12
* drm_bridge_helper_reset_crtc - Reset the pipeline feeding a bridge
13
* @bridge: DRM bridge to reset
14
* @ctx: lock acquisition context
15
*
16
* Reset a @bridge pipeline. It will power-cycle all active components
17
* between the CRTC and connector that bridge is connected to.
18
*
19
* As it relies on drm_atomic_helper_reset_crtc(), the same limitations
20
* apply.
21
*
22
* Returns:
23
*
24
* 0 on success or a negative error code on failure. If the error
25
* returned is EDEADLK, the whole atomic sequence must be restarted.
26
*/
27
int drm_bridge_helper_reset_crtc(struct drm_bridge *bridge,
28
struct drm_modeset_acquire_ctx *ctx)
29
{
30
struct drm_connector *connector;
31
struct drm_encoder *encoder = bridge->encoder;
32
struct drm_device *dev = encoder->dev;
33
struct drm_crtc *crtc;
34
int ret;
35
36
ret = drm_modeset_lock(&dev->mode_config.connection_mutex, ctx);
37
if (ret)
38
return ret;
39
40
connector = drm_atomic_get_connector_for_encoder(encoder, ctx);
41
if (IS_ERR(connector)) {
42
ret = PTR_ERR(connector);
43
goto out;
44
}
45
46
if (!connector->state) {
47
ret = -EINVAL;
48
goto out;
49
}
50
51
crtc = connector->state->crtc;
52
ret = drm_atomic_helper_reset_crtc(crtc, ctx);
53
if (ret)
54
goto out;
55
56
out:
57
drm_modeset_unlock(&dev->mode_config.connection_mutex);
58
return ret;
59
}
60
EXPORT_SYMBOL(drm_bridge_helper_reset_crtc);
61
62