hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
....@@ -700,7 +700,7 @@
700700 }
701701
702702 static enum drm_mode_status adv7511_mode_valid(struct adv7511 *adv7511,
703
- struct drm_display_mode *mode)
703
+ const struct drm_display_mode *mode)
704704 {
705705 if (mode->clock > 165000)
706706 return MODE_CLOCK_HIGH;
....@@ -789,13 +789,15 @@
789789 else
790790 low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
791791
792
- regmap_update_bits(adv7511->regmap, 0xfb,
793
- 0x6, low_refresh_rate << 1);
792
+ if (adv7511->type == ADV7511)
793
+ regmap_update_bits(adv7511->regmap, 0xfb,
794
+ 0x6, low_refresh_rate << 1);
795
+ else
796
+ regmap_update_bits(adv7511->regmap, 0x4a,
797
+ 0xc, low_refresh_rate << 2);
798
+
794799 regmap_update_bits(adv7511->regmap, 0x17,
795800 0x60, (vsync_polarity << 6) | (hsync_polarity << 5));
796
-
797
- if (adv7511->type == ADV7533 || adv7511->type == ADV7535)
798
- adv7533_mode_set(adv7511, adj_mode);
799801
800802 drm_mode_copy(&adv7511->curr_mode, adj_mode);
801803
....@@ -916,6 +918,18 @@
916918 adv7511_mode_set(adv, mode, adj_mode);
917919 }
918920
921
+static enum drm_mode_status adv7511_bridge_mode_valid(struct drm_bridge *bridge,
922
+ const struct drm_display_info *info,
923
+ const struct drm_display_mode *mode)
924
+{
925
+ struct adv7511 *adv = bridge_to_adv7511(bridge);
926
+
927
+ if (adv->type == ADV7533 || adv->type == ADV7535)
928
+ return adv7533_mode_valid(adv, mode);
929
+ else
930
+ return adv7511_mode_valid(adv, mode);
931
+}
932
+
919933 static int adv7511_bridge_attach(struct drm_bridge *bridge,
920934 enum drm_bridge_attach_flags flags)
921935 {
....@@ -966,6 +980,7 @@
966980 .enable = adv7511_bridge_enable,
967981 .disable = adv7511_bridge_disable,
968982 .mode_set = adv7511_bridge_mode_set,
983
+ .mode_valid = adv7511_bridge_mode_valid,
969984 .attach = adv7511_bridge_attach,
970985 .detect = adv7511_bridge_detect,
971986 .get_edid = adv7511_bridge_get_edid,