@@ -604,10 +604,10 @@ static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block,
604604 * ADV75xx helpers
605605 */
606606
607- static struct edid * adv7511_get_edid (struct adv7511 * adv7511 ,
608- struct drm_connector * connector )
607+ static const struct drm_edid * adv7511_edid_read (struct adv7511 * adv7511 ,
608+ struct drm_connector * connector )
609609{
610- struct edid * edid ;
610+ const struct drm_edid * drm_edid ;
611611
612612 /* Reading the EDID only works if the device is powered */
613613 if (!adv7511 -> powered ) {
@@ -621,31 +621,44 @@ static struct edid *adv7511_get_edid(struct adv7511 *adv7511,
621621 edid_i2c_addr );
622622 }
623623
624- edid = drm_do_get_edid (connector , adv7511_get_edid_block , adv7511 );
624+ drm_edid = drm_edid_read_custom (connector , adv7511_get_edid_block , adv7511 );
625625
626626 if (!adv7511 -> powered )
627627 __adv7511_power_off (adv7511 );
628628
629- adv7511_set_config_csc (adv7511 , connector , adv7511 -> rgb ,
630- drm_detect_hdmi_monitor (edid ));
629+ if (drm_edid ) {
630+ /*
631+ * FIXME: The CEC physical address should be set using
632+ * cec_s_phys_addr(adap,
633+ * connector->display_info.source_physical_address, false) from
634+ * a path that has read the EDID and called
635+ * drm_edid_connector_update().
636+ */
637+ const struct edid * edid = drm_edid_raw (drm_edid );
638+
639+ adv7511_set_config_csc (adv7511 , connector , adv7511 -> rgb ,
640+ drm_detect_hdmi_monitor (edid ));
631641
632- cec_s_phys_addr_from_edid (adv7511 -> cec_adap , edid );
642+ cec_s_phys_addr_from_edid (adv7511 -> cec_adap , edid );
643+ } else {
644+ cec_s_phys_addr_from_edid (adv7511 -> cec_adap , NULL );
645+ }
633646
634- return edid ;
647+ return drm_edid ;
635648}
636649
637650static int adv7511_get_modes (struct adv7511 * adv7511 ,
638651 struct drm_connector * connector )
639652{
640- struct edid * edid ;
653+ const struct drm_edid * drm_edid ;
641654 unsigned int count ;
642655
643- edid = adv7511_get_edid (adv7511 , connector );
656+ drm_edid = adv7511_edid_read (adv7511 , connector );
644657
645- drm_connector_update_edid_property (connector , edid );
646- count = drm_add_edid_modes (connector , edid );
658+ drm_edid_connector_update (connector , drm_edid );
659+ count = drm_edid_connector_add_modes (connector );
647660
648- kfree ( edid );
661+ drm_edid_free ( drm_edid );
649662
650663 return count ;
651664}
@@ -953,12 +966,12 @@ static enum drm_connector_status adv7511_bridge_detect(struct drm_bridge *bridge
953966 return adv7511_detect (adv , NULL );
954967}
955968
956- static struct edid * adv7511_bridge_get_edid (struct drm_bridge * bridge ,
957- struct drm_connector * connector )
969+ static const struct drm_edid * adv7511_bridge_edid_read (struct drm_bridge * bridge ,
970+ struct drm_connector * connector )
958971{
959972 struct adv7511 * adv = bridge_to_adv7511 (bridge );
960973
961- return adv7511_get_edid (adv , connector );
974+ return adv7511_edid_read (adv , connector );
962975}
963976
964977static void adv7511_bridge_hpd_notify (struct drm_bridge * bridge ,
@@ -977,7 +990,7 @@ static const struct drm_bridge_funcs adv7511_bridge_funcs = {
977990 .mode_valid = adv7511_bridge_mode_valid ,
978991 .attach = adv7511_bridge_attach ,
979992 .detect = adv7511_bridge_detect ,
980- .get_edid = adv7511_bridge_get_edid ,
993+ .edid_read = adv7511_bridge_edid_read ,
981994 .hpd_notify = adv7511_bridge_hpd_notify ,
982995};
983996
0 commit comments