.. | .. |
---|
314 | 314 | rockchip_drm_unregister_sub_dev(sdev); |
---|
315 | 315 | } |
---|
316 | 316 | |
---|
| 317 | +static enum drm_mode_status |
---|
| 318 | +rockchip_dp_drm_encoder_mode_valid(struct drm_encoder *encoder, |
---|
| 319 | + const struct drm_display_mode *mode) |
---|
| 320 | +{ |
---|
| 321 | + struct rockchip_dp_device *dp = to_dp(encoder); |
---|
| 322 | + struct videomode vm; |
---|
| 323 | + |
---|
| 324 | + drm_display_mode_to_videomode(mode, &vm); |
---|
| 325 | + |
---|
| 326 | + if (!vm.hfront_porch || !vm.hback_porch || !vm.vfront_porch || !vm.vback_porch) { |
---|
| 327 | + DRM_DEV_ERROR(dp->dev, "front porch or back porch can not be 0\n"); |
---|
| 328 | + return MODE_BAD; |
---|
| 329 | + } |
---|
| 330 | + |
---|
| 331 | + return MODE_OK; |
---|
| 332 | +} |
---|
| 333 | + |
---|
317 | 334 | static bool |
---|
318 | 335 | rockchip_dp_drm_encoder_mode_fixup(struct drm_encoder *encoder, |
---|
319 | 336 | const struct drm_display_mode *mode, |
---|
.. | .. |
---|
484 | 501 | } |
---|
485 | 502 | |
---|
486 | 503 | static struct drm_encoder_helper_funcs rockchip_dp_encoder_helper_funcs = { |
---|
| 504 | + .mode_valid = rockchip_dp_drm_encoder_mode_valid, |
---|
487 | 505 | .mode_fixup = rockchip_dp_drm_encoder_mode_fixup, |
---|
488 | 506 | .mode_set = rockchip_dp_drm_encoder_mode_set, |
---|
489 | 507 | .atomic_enable = rockchip_dp_drm_encoder_enable, |
---|
.. | .. |
---|
681 | 699 | |
---|
682 | 700 | dp->plat_data.right = secondary->adp; |
---|
683 | 701 | dp->plat_data.split_mode = true; |
---|
| 702 | + secondary->plat_data.panel = dp->plat_data.panel; |
---|
684 | 703 | secondary->plat_data.left = dp->adp; |
---|
685 | 704 | secondary->plat_data.split_mode = true; |
---|
686 | 705 | } |
---|