Skip to content

Commit 2dae2f4

Browse files
yueshuck_zhang
authored andcommitted
drm/rockchip: vop: support mode_valid for crtc
Change-Id: I51f2377c5bd4bdecf44ad31f11e4e7131c2c10c1 Signed-off-by: Mark Yao <mark.yao@rock-chips.com> Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com>
1 parent bdfb3cb commit 2dae2f4

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

drivers/gpu/drm/rockchip/rockchip_drm_drv.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ struct rockchip_crtc_funcs {
4242
void (*disable_vblank)(struct drm_crtc *crtc);
4343
void (*wait_for_update)(struct drm_crtc *crtc);
4444
void (*cancel_pending_vblank)(struct drm_crtc *crtc, struct drm_file *file_priv);
45+
enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc,
46+
const struct drm_display_mode *mode,
47+
int output_type);
4548
};
4649

4750
struct drm_rockchip_subdrv {

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,11 +1486,37 @@ static void vop_crtc_cancel_pending_vblank(struct drm_crtc *crtc,
14861486
spin_unlock_irqrestore(&drm->event_lock, flags);
14871487
}
14881488

1489+
static enum drm_mode_status
1490+
vop_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode,
1491+
int output_type)
1492+
{
1493+
struct vop *vop = to_vop(crtc);
1494+
const struct vop_data *vop_data = vop->data;
1495+
int clock;
1496+
1497+
if (mode->hdisplay > vop_data->max_disably_output.width)
1498+
return MODE_BAD_HVALUE;
1499+
if (mode->vdisplay > vop_data->max_disably_output.height)
1500+
return MODE_BAD_VVALUE;
1501+
1502+
clock = clk_round_rate(vop->dclk, mode->clock * 1000) / 1000;
1503+
/*
1504+
* Hdmi or DisplayPort request a Accurate clock.
1505+
*/
1506+
if (output_type == DRM_MODE_CONNECTOR_HDMIA ||
1507+
output_type == DRM_MODE_CONNECTOR_DisplayPort)
1508+
if (clock != mode->clock)
1509+
return MODE_CLOCK_RANGE;
1510+
1511+
return MODE_OK;
1512+
}
1513+
14891514
static const struct rockchip_crtc_funcs private_crtc_funcs = {
14901515
.enable_vblank = vop_crtc_enable_vblank,
14911516
.disable_vblank = vop_crtc_disable_vblank,
14921517
.wait_for_update = vop_crtc_wait_for_update,
14931518
.cancel_pending_vblank = vop_crtc_cancel_pending_vblank,
1519+
.mode_valid = vop_crtc_mode_valid,
14941520
};
14951521

14961522
static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,

0 commit comments

Comments
 (0)