Skip to content

Commit 3662bbf

Browse files
committed
drm: xlnx: zynqmp_dpsub: Allow configuration of layer mode
Add a mode parameter to the zynqmp_disp_layer_enable() to set the layer mode, to prepare for live mode support. Signed-off-by: Laurent Pinchart <[email protected]>
1 parent 52c2cf1 commit 3662bbf

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

drivers/gpu/drm/xlnx/zynqmp_disp.c

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,6 @@ struct zynqmp_disp_format {
7878
const u32 *sf;
7979
};
8080

81-
/**
82-
* enum zynqmp_disp_layer_mode - Layer mode
83-
* @ZYNQMP_DISP_LAYER_NONLIVE: non-live (memory) mode
84-
* @ZYNQMP_DISP_LAYER_LIVE: live (stream) mode
85-
*/
86-
enum zynqmp_disp_layer_mode {
87-
ZYNQMP_DISP_LAYER_NONLIVE,
88-
ZYNQMP_DISP_LAYER_LIVE
89-
};
90-
9181
/**
9282
* struct zynqmp_disp_layer_dma - DMA channel for one data plane of a layer
9383
* @chan: DMA channel
@@ -131,7 +121,7 @@ struct zynqmp_disp_layer {
131121

132122
const struct zynqmp_disp_format *disp_fmt;
133123
const struct drm_format_info *drm_fmt;
134-
enum zynqmp_disp_layer_mode mode;
124+
enum zynqmp_dpsub_layer_mode mode;
135125
};
136126

137127
/**
@@ -519,27 +509,25 @@ static void zynqmp_disp_avbuf_disable_audio(struct zynqmp_disp *disp)
519509
* zynqmp_disp_avbuf_enable_video - Enable a video layer
520510
* @disp: Display controller
521511
* @layer: The layer
522-
* @mode: Operating mode of layer
523512
*
524513
* Enable the video/graphics buffer for @layer.
525514
*/
526515
static void zynqmp_disp_avbuf_enable_video(struct zynqmp_disp *disp,
527-
struct zynqmp_disp_layer *layer,
528-
enum zynqmp_disp_layer_mode mode)
516+
struct zynqmp_disp_layer *layer)
529517
{
530518
u32 val;
531519

532520
val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT);
533521
if (zynqmp_disp_layer_is_video(layer)) {
534522
val &= ~ZYNQMP_DISP_AV_BUF_OUTPUT_VID1_MASK;
535-
if (mode == ZYNQMP_DISP_LAYER_NONLIVE)
523+
if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE)
536524
val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID1_MEM;
537525
else
538526
val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID1_LIVE;
539527
} else {
540528
val &= ~ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_MASK;
541529
val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_MEM;
542-
if (mode == ZYNQMP_DISP_LAYER_NONLIVE)
530+
if (layer->mode == ZYNQMP_DPSUB_LAYER_NONLIVE)
543531
val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_MEM;
544532
else
545533
val |= ZYNQMP_DISP_AV_BUF_OUTPUT_VID2_LIVE;
@@ -914,17 +902,17 @@ u32 *zynqmp_disp_layer_drm_formats(struct zynqmp_disp_layer *layer,
914902
/**
915903
* zynqmp_disp_layer_enable - Enable a layer
916904
* @layer: The layer
905+
* @mode: Operating mode of layer
917906
*
918907
* Enable the @layer in the audio/video buffer manager and the blender. DMA
919908
* channels are started separately by zynqmp_disp_layer_update().
920909
*/
921-
void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer)
910+
void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer,
911+
enum zynqmp_dpsub_layer_mode mode)
922912
{
923-
zynqmp_disp_avbuf_enable_video(layer->disp, layer,
924-
ZYNQMP_DISP_LAYER_NONLIVE);
913+
layer->mode = mode;
914+
zynqmp_disp_avbuf_enable_video(layer->disp, layer);
925915
zynqmp_disp_blend_layer_enable(layer->disp, layer);
926-
927-
layer->mode = ZYNQMP_DISP_LAYER_NONLIVE;
928916
}
929917

930918
/**

drivers/gpu/drm/xlnx/zynqmp_disp.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ enum zynqmp_dpsub_layer_id {
4242
ZYNQMP_DPSUB_LAYER_GFX,
4343
};
4444

45+
/**
46+
* enum zynqmp_dpsub_layer_mode - Layer mode
47+
* @ZYNQMP_DPSUB_LAYER_NONLIVE: non-live (memory) mode
48+
* @ZYNQMP_DPSUB_LAYER_LIVE: live (stream) mode
49+
*/
50+
enum zynqmp_dpsub_layer_mode {
51+
ZYNQMP_DPSUB_LAYER_NONLIVE,
52+
ZYNQMP_DPSUB_LAYER_LIVE,
53+
};
54+
4555
void zynqmp_disp_enable(struct zynqmp_disp *disp);
4656
void zynqmp_disp_disable(struct zynqmp_disp *disp);
4757
int zynqmp_disp_setup_clock(struct zynqmp_disp *disp,
@@ -52,7 +62,8 @@ void zynqmp_disp_blend_set_global_alpha(struct zynqmp_disp *disp,
5262

5363
u32 *zynqmp_disp_layer_drm_formats(struct zynqmp_disp_layer *layer,
5464
unsigned int *num_formats);
55-
void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer);
65+
void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer,
66+
enum zynqmp_dpsub_layer_mode mode);
5667
void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer);
5768
void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer,
5869
const struct drm_format_info *info);

drivers/gpu/drm/xlnx/zynqmp_kms.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static void zynqmp_dpsub_plane_atomic_update(struct drm_plane *plane,
123123

124124
/* Enable or re-enable the plane if the format has changed. */
125125
if (format_changed)
126-
zynqmp_disp_layer_enable(layer);
126+
zynqmp_disp_layer_enable(layer, ZYNQMP_DPSUB_LAYER_NONLIVE);
127127
}
128128

129129
static const struct drm_plane_helper_funcs zynqmp_dpsub_plane_helper_funcs = {

0 commit comments

Comments
 (0)