Change-Id: I9ae0699f26e3971e1f01cf36aa7a2f64dcade8dc
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
list_for_each_entry_safe(set, tmp, &mode_set_list, head) {
struct drm_crtc *crtc = set->crtc;
list_for_each_entry_safe(set, tmp, &mode_set_list, head) {
struct drm_crtc *crtc = set->crtc;
+ struct drm_connector *conn = set->connector;
+
+ if (!set->mode_changed) {
+ /*
+ * restore connector and crtc's state, keep all the
+ * reference fine.
+ */
+ WARN_ON(drm_atomic_set_crtc_for_connector(conn->state,
+ NULL));
+ WARN_ON(drm_atomic_set_mode_for_crtc(crtc->state,
+ NULL));
+ crtc->state->active = false;
+ }
list_del(&set->head);
kfree(set);
list_del(&set->head);
kfree(set);
u16 vact_end = vact_st + vdisplay;
uint32_t val;
u16 vact_end = vact_st + vdisplay;
uint32_t val;
+ if (vop->loader_protect) {
+ vop->loader_protect = false;
+ return;
+ }
+
vop_initial(crtc);
val = BIT(DCLK_INVERT);
vop_initial(crtc);
val = BIT(DCLK_INVERT);