Skip to content

Commit 04e6e5c

Browse files
sandy-huangrkhuangtao
authored andcommitted
drm/rockchip: vop: add support dclk invert config
Since some special hardware or panel need to invert dclk, so we add dclk invert config at dts display timing node: dts sample: display-timings { timing0: timing0 { ... pixelclk-active = <1>; ... } } Change-Id: I64f053ecda0f607bdd6fd392a0922489502ac274 Signed-off-by: Sandy Huang <hjc@rock-chips.com>
1 parent 27e0c54 commit 04e6e5c

3 files changed

Lines changed: 12 additions & 5 deletions

File tree

drivers/gpu/drm/drm_modes.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,9 @@ void drm_display_mode_from_videomode(const struct videomode *vm,
611611
dmode->flags |= DRM_MODE_FLAG_DBLSCAN;
612612
if (vm->flags & DISPLAY_FLAGS_DOUBLECLK)
613613
dmode->flags |= DRM_MODE_FLAG_DBLCLK;
614+
if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
615+
dmode->flags |= DRM_MODE_FLAG_PPIXDATA;
616+
614617
drm_mode_set_name(dmode);
615618
}
616619
EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode);

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2475,6 +2475,7 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
24752475
int act_end;
24762476
bool interlaced = !!(adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE);
24772477
int for_ddr_freq = 0;
2478+
bool dclk_inv;
24782479

24792480
rockchip_set_system_status(sys_status);
24802481
mutex_lock(&vop->vop_lock);
@@ -2492,7 +2493,9 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
24922493
*/
24932494
if (vop->lut_active)
24942495
vop_crtc_load_lut(crtc);
2495-
VOP_CTRL_SET(vop, dclk_pol, 1);
2496+
dclk_inv = (adjusted_mode->flags & DRM_MODE_FLAG_PPIXDATA) ? 0 : 1;
2497+
2498+
VOP_CTRL_SET(vop, dclk_pol, dclk_inv);
24962499
val = (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) ?
24972500
0 : BIT(HSYNC_POSITIVE);
24982501
val |= (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) ?
@@ -2509,15 +2512,15 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
25092512
case DRM_MODE_CONNECTOR_LVDS:
25102513
VOP_CTRL_SET(vop, rgb_en, 1);
25112514
VOP_CTRL_SET(vop, rgb_pin_pol, val);
2512-
VOP_CTRL_SET(vop, rgb_dclk_pol, 1);
2515+
VOP_CTRL_SET(vop, rgb_dclk_pol, dclk_inv);
25132516
VOP_CTRL_SET(vop, lvds_en, 1);
25142517
VOP_CTRL_SET(vop, lvds_pin_pol, val);
2515-
VOP_CTRL_SET(vop, lvds_dclk_pol, 1);
2518+
VOP_CTRL_SET(vop, lvds_dclk_pol, dclk_inv);
25162519
break;
25172520
case DRM_MODE_CONNECTOR_eDP:
25182521
VOP_CTRL_SET(vop, edp_en, 1);
25192522
VOP_CTRL_SET(vop, edp_pin_pol, val);
2520-
VOP_CTRL_SET(vop, edp_dclk_pol, 1);
2523+
VOP_CTRL_SET(vop, edp_dclk_pol, dclk_inv);
25212524
break;
25222525
case DRM_MODE_CONNECTOR_HDMIA:
25232526
VOP_CTRL_SET(vop, hdmi_en, 1);
@@ -2527,7 +2530,7 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
25272530
case DRM_MODE_CONNECTOR_DSI:
25282531
VOP_CTRL_SET(vop, mipi_en, 1);
25292532
VOP_CTRL_SET(vop, mipi_pin_pol, val);
2530-
VOP_CTRL_SET(vop, mipi_dclk_pol, 1);
2533+
VOP_CTRL_SET(vop, mipi_dclk_pol, dclk_inv);
25312534
VOP_CTRL_SET(vop, mipi_dual_channel_en,
25322535
!!(s->output_flags & ROCKCHIP_OUTPUT_DSI_DUAL_CHANNEL));
25332536
VOP_CTRL_SET(vop, data01_swap,

include/uapi/drm/drm_mode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
#define DRM_MODE_FLAG_PIC_AR_16_9 \
8888
(DRM_MODE_PICTURE_ASPECT_16_9<<19)
8989

90+
#define DRM_MODE_FLAG_PPIXDATA (1<<31)
9091
/* DPMS flags */
9192
/* bit compatible with the xorg definitions. */
9293
#define DRM_MODE_DPMS_ON 0

0 commit comments

Comments
 (0)