mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
drm/mgag200: Introduce custom CRTC state
Inherit from struct drm_crtc_state by embeding it and providing the rsp callbacks for simple-kms helpers. No functional changes. The new state struct mgag200_crtc_state will hold PLL values for modeset operations. v2: * move the simple-kms changes into a separate patch (Sam) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20210714142240.21979-13-tzimmermann@suse.de
This commit is contained in:
parent
38c5af44a7
commit
51b569394b
2 changed files with 55 additions and 0 deletions
|
@ -157,6 +157,15 @@ struct mgag200_pll {
|
||||||
const struct mgag200_pll_funcs *funcs;
|
const struct mgag200_pll_funcs *funcs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct mgag200_crtc_state {
|
||||||
|
struct drm_crtc_state base;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct mgag200_crtc_state *to_mgag200_crtc_state(struct drm_crtc_state *base)
|
||||||
|
{
|
||||||
|
return container_of(base, struct mgag200_crtc_state, base);
|
||||||
|
}
|
||||||
|
|
||||||
#define to_mga_connector(x) container_of(x, struct mga_connector, base)
|
#define to_mga_connector(x) container_of(x, struct mga_connector, base)
|
||||||
|
|
||||||
struct mga_i2c_chan {
|
struct mga_i2c_chan {
|
||||||
|
|
|
@ -964,6 +964,49 @@ mgag200_simple_display_pipe_update(struct drm_simple_display_pipe *pipe,
|
||||||
mgag200_handle_damage(mdev, fb, &damage, &shadow_plane_state->map[0]);
|
mgag200_handle_damage(mdev, fb, &damage, &shadow_plane_state->map[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct drm_crtc_state *
|
||||||
|
mgag200_simple_display_pipe_duplicate_crtc_state(struct drm_simple_display_pipe *pipe)
|
||||||
|
{
|
||||||
|
struct drm_crtc *crtc = &pipe->crtc;
|
||||||
|
struct drm_crtc_state *crtc_state = crtc->state;
|
||||||
|
struct mgag200_crtc_state *new_mgag200_crtc_state;
|
||||||
|
|
||||||
|
if (!crtc_state)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
new_mgag200_crtc_state = kzalloc(sizeof(*new_mgag200_crtc_state), GFP_KERNEL);
|
||||||
|
if (!new_mgag200_crtc_state)
|
||||||
|
return NULL;
|
||||||
|
__drm_atomic_helper_crtc_duplicate_state(crtc, &new_mgag200_crtc_state->base);
|
||||||
|
|
||||||
|
return &new_mgag200_crtc_state->base;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mgag200_simple_display_pipe_destroy_crtc_state(struct drm_simple_display_pipe *pipe,
|
||||||
|
struct drm_crtc_state *crtc_state)
|
||||||
|
{
|
||||||
|
struct mgag200_crtc_state *mgag200_crtc_state = to_mgag200_crtc_state(crtc_state);
|
||||||
|
|
||||||
|
__drm_atomic_helper_crtc_destroy_state(&mgag200_crtc_state->base);
|
||||||
|
kfree(mgag200_crtc_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mgag200_simple_display_pipe_reset_crtc(struct drm_simple_display_pipe *pipe)
|
||||||
|
{
|
||||||
|
struct drm_crtc *crtc = &pipe->crtc;
|
||||||
|
struct mgag200_crtc_state *mgag200_crtc_state;
|
||||||
|
|
||||||
|
if (crtc->state) {
|
||||||
|
mgag200_simple_display_pipe_destroy_crtc_state(pipe, crtc->state);
|
||||||
|
crtc->state = NULL; /* must be set to NULL here */
|
||||||
|
}
|
||||||
|
|
||||||
|
mgag200_crtc_state = kzalloc(sizeof(*mgag200_crtc_state), GFP_KERNEL);
|
||||||
|
if (!mgag200_crtc_state)
|
||||||
|
return;
|
||||||
|
__drm_atomic_helper_crtc_reset(crtc, &mgag200_crtc_state->base);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct drm_simple_display_pipe_funcs
|
static const struct drm_simple_display_pipe_funcs
|
||||||
mgag200_simple_display_pipe_funcs = {
|
mgag200_simple_display_pipe_funcs = {
|
||||||
.mode_valid = mgag200_simple_display_pipe_mode_valid,
|
.mode_valid = mgag200_simple_display_pipe_mode_valid,
|
||||||
|
@ -971,6 +1014,9 @@ mgag200_simple_display_pipe_funcs = {
|
||||||
.disable = mgag200_simple_display_pipe_disable,
|
.disable = mgag200_simple_display_pipe_disable,
|
||||||
.check = mgag200_simple_display_pipe_check,
|
.check = mgag200_simple_display_pipe_check,
|
||||||
.update = mgag200_simple_display_pipe_update,
|
.update = mgag200_simple_display_pipe_update,
|
||||||
|
.reset_crtc = mgag200_simple_display_pipe_reset_crtc,
|
||||||
|
.duplicate_crtc_state = mgag200_simple_display_pipe_duplicate_crtc_state,
|
||||||
|
.destroy_crtc_state = mgag200_simple_display_pipe_destroy_crtc_state,
|
||||||
DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS,
|
DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue