diff --git a/drivers/gpu/drm/bridge/it6263.c b/drivers/gpu/drm/bridge/it6263.c
index bb200c0f50d776e6cb72a474bdd4afeb78900e2b..6256fbfa7570e5ceecd46ddc4a1faa93b37cfd37 100644
--- a/drivers/gpu/drm/bridge/it6263.c
+++ b/drivers/gpu/drm/bridge/it6263.c
@@ -335,6 +335,21 @@ struct it6263 {
 	bool split_mode;
 };
 
+struct it6263_minimode {
+	int hdisplay;
+	int vdisplay;
+	int vrefresh;
+};
+
+static const struct it6263_minimode it6263_bad_mode_db[] = {
+	{1600, 900,  60},
+	{1280, 1024, 60},
+	{1280, 720,  30},
+	{1280, 720,  25},
+	{1280, 720,  24},
+	{1152, 864,  75},
+};
+
 static inline struct it6263 *bridge_to_it6263(struct drm_bridge *bridge)
 {
 	return container_of(bridge, struct it6263, bridge);
@@ -507,9 +522,20 @@ static int it6263_get_modes(struct drm_connector *connector)
 enum drm_mode_status it6263_mode_valid(struct drm_connector *connector,
 					struct drm_display_mode *mode)
 {
+	const struct it6263_minimode *m;
+	int i, vrefresh = drm_mode_vrefresh(mode);
+
 	if (mode->clock > 150000)
 		return MODE_CLOCK_HIGH;
 
+	for (i = 0; i < ARRAY_SIZE(it6263_bad_mode_db); i++) {
+		m = &it6263_bad_mode_db[i];
+		if ((mode->hdisplay == m->hdisplay) &&
+		    (mode->vdisplay == m->vdisplay) &&
+		    (vrefresh == m->vrefresh))
+			return MODE_BAD;
+	}
+
 	return MODE_OK;
 }