Skip to content

Commit f7c710d

Browse files
atseanpaulckhu-mediatek
authored andcommitted
drm/mediatek: Add plumbing for layer_check hook
This allows components to implement a .layer_check callback for their layers which is called during atomic_check. Signed-off-by: Sean Paul <[email protected]> Signed-off-by: CK Hu <[email protected]>
1 parent d6b53f6 commit f7c710d

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

drivers/gpu/drm/mediatek/mtk_drm_crtc.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,16 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc)
394394
}
395395
}
396396

397+
int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane,
398+
struct mtk_plane_state *state)
399+
{
400+
unsigned int local_layer;
401+
struct mtk_ddp_comp *comp;
402+
403+
comp = mtk_drm_ddp_comp_for_plane(crtc, plane, &local_layer);
404+
return mtk_ddp_comp_layer_check(comp, local_layer, state);
405+
}
406+
397407
static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc,
398408
struct drm_crtc_state *old_state)
399409
{

drivers/gpu/drm/mediatek/mtk_drm_crtc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ void mtk_crtc_ddp_irq(struct drm_crtc *crtc, struct mtk_ddp_comp *comp);
1919
int mtk_drm_crtc_create(struct drm_device *drm_dev,
2020
const enum mtk_ddp_comp_id *path,
2121
unsigned int path_len);
22+
int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane,
23+
struct mtk_plane_state *state);
2224

2325
#endif /* MTK_DRM_CRTC_H */

drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ struct mtk_ddp_comp_funcs {
8080
unsigned int (*layer_nr)(struct mtk_ddp_comp *comp);
8181
void (*layer_on)(struct mtk_ddp_comp *comp, unsigned int idx);
8282
void (*layer_off)(struct mtk_ddp_comp *comp, unsigned int idx);
83+
int (*layer_check)(struct mtk_ddp_comp *comp,
84+
unsigned int idx,
85+
struct mtk_plane_state *state);
8386
void (*layer_config)(struct mtk_ddp_comp *comp, unsigned int idx,
8487
struct mtk_plane_state *state);
8588
void (*gamma_set)(struct mtk_ddp_comp *comp,
@@ -152,6 +155,15 @@ static inline void mtk_ddp_comp_layer_off(struct mtk_ddp_comp *comp,
152155
comp->funcs->layer_off(comp, idx);
153156
}
154157

158+
static inline int mtk_ddp_comp_layer_check(struct mtk_ddp_comp *comp,
159+
unsigned int idx,
160+
struct mtk_plane_state *state)
161+
{
162+
if (comp->funcs && comp->funcs->layer_check)
163+
return comp->funcs->layer_check(comp, idx, state);
164+
return 0;
165+
}
166+
155167
static inline void mtk_ddp_comp_layer_config(struct mtk_ddp_comp *comp,
156168
unsigned int idx,
157169
struct mtk_plane_state *state)

drivers/gpu/drm/mediatek/mtk_drm_plane.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,19 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
9090
{
9191
struct drm_framebuffer *fb = state->fb;
9292
struct drm_crtc_state *crtc_state;
93+
int ret;
9394

9495
if (!fb)
9596
return 0;
9697

9798
if (!state->crtc)
9899
return 0;
99100

101+
ret = mtk_drm_crtc_plane_check(state->crtc, plane,
102+
to_mtk_plane_state(state));
103+
if (ret)
104+
return ret;
105+
100106
crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc);
101107
if (IS_ERR(crtc_state))
102108
return PTR_ERR(crtc_state);

0 commit comments

Comments
 (0)