@@ -2036,34 +2036,35 @@ intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo)
20362036 return hweight16 (intel_sdvo -> caps .output_flags ) > 1 ;
20372037}
20382038
2039- static struct edid *
2039+ static const struct drm_edid *
20402040intel_sdvo_get_edid (struct drm_connector * connector )
20412041{
20422042 struct intel_sdvo * sdvo = intel_attached_sdvo (to_intel_connector (connector ));
2043- return drm_get_edid (connector , & sdvo -> ddc );
2043+ return drm_edid_read_ddc (connector , & sdvo -> ddc );
20442044}
20452045
20462046/* Mac mini hack -- use the same DDC as the analog connector */
2047- static struct edid *
2047+ static const struct drm_edid *
20482048intel_sdvo_get_analog_edid (struct drm_connector * connector )
20492049{
2050- struct drm_i915_private * dev_priv = to_i915 (connector -> dev );
2050+ struct drm_i915_private * i915 = to_i915 (connector -> dev );
2051+ struct i2c_adapter * i2c ;
20512052
2052- return drm_get_edid ( connector ,
2053- intel_gmbus_get_adapter ( dev_priv ,
2054- dev_priv -> display . vbt . crt_ddc_pin ) );
2053+ i2c = intel_gmbus_get_adapter ( i915 , i915 -> display . vbt . crt_ddc_pin );
2054+
2055+ return drm_edid_read_ddc ( connector , i2c );
20552056}
20562057
20572058static enum drm_connector_status
20582059intel_sdvo_tmds_sink_detect (struct drm_connector * connector )
20592060{
20602061 struct intel_sdvo * intel_sdvo = intel_attached_sdvo (to_intel_connector (connector ));
20612062 enum drm_connector_status status ;
2062- struct edid * edid ;
2063+ const struct drm_edid * drm_edid ;
20632064
2064- edid = intel_sdvo_get_edid (connector );
2065+ drm_edid = intel_sdvo_get_edid (connector );
20652066
2066- if (edid == NULL && intel_sdvo_multifunc_encoder (intel_sdvo )) {
2067+ if (! drm_edid && intel_sdvo_multifunc_encoder (intel_sdvo )) {
20672068 u8 ddc , saved_ddc = intel_sdvo -> ddc_bus ;
20682069
20692070 /*
@@ -2072,42 +2073,45 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
20722073 */
20732074 for (ddc = intel_sdvo -> ddc_bus >> 1 ; ddc > 1 ; ddc >>= 1 ) {
20742075 intel_sdvo -> ddc_bus = ddc ;
2075- edid = intel_sdvo_get_edid (connector );
2076- if (edid )
2076+ drm_edid = intel_sdvo_get_edid (connector );
2077+ if (drm_edid )
20772078 break ;
20782079 }
20792080 /*
20802081 * If we found the EDID on the other bus,
20812082 * assume that is the correct DDC bus.
20822083 */
2083- if (edid == NULL )
2084+ if (! drm_edid )
20842085 intel_sdvo -> ddc_bus = saved_ddc ;
20852086 }
20862087
20872088 /*
20882089 * When there is no edid and no monitor is connected with VGA
20892090 * port, try to use the CRT ddc to read the EDID for DVI-connector.
20902091 */
2091- if (edid == NULL )
2092- edid = intel_sdvo_get_analog_edid (connector );
2092+ if (! drm_edid )
2093+ drm_edid = intel_sdvo_get_analog_edid (connector );
20932094
20942095 status = connector_status_unknown ;
2095- if (edid != NULL ) {
2096+ if (drm_edid ) {
2097+ const struct edid * edid = drm_edid_raw (drm_edid );
2098+
20962099 /* DDC bus is shared, match EDID to connector type */
20972100 if (edid -> input & DRM_EDID_INPUT_DIGITAL )
20982101 status = connector_status_connected ;
20992102 else
21002103 status = connector_status_disconnected ;
2101- kfree ( edid );
2104+ drm_edid_free ( drm_edid );
21022105 }
21032106
21042107 return status ;
21052108}
21062109
21072110static bool
21082111intel_sdvo_connector_matches_edid (struct intel_sdvo_connector * sdvo ,
2109- struct edid * edid )
2112+ const struct drm_edid * drm_edid )
21102113{
2114+ const struct edid * edid = drm_edid_raw (drm_edid );
21112115 bool monitor_is_digital = !!(edid -> input & DRM_EDID_INPUT_DIGITAL );
21122116 bool connector_is_digital = !!IS_DIGITAL (sdvo );
21132117
@@ -2150,22 +2154,23 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
21502154 else if (IS_TMDS (intel_sdvo_connector ))
21512155 ret = intel_sdvo_tmds_sink_detect (connector );
21522156 else {
2153- struct edid * edid ;
2157+ const struct drm_edid * drm_edid ;
21542158
21552159 /* if we have an edid check it matches the connection */
2156- edid = intel_sdvo_get_edid (connector );
2157- if (edid == NULL )
2158- edid = intel_sdvo_get_analog_edid (connector );
2159- if (edid != NULL ) {
2160+ drm_edid = intel_sdvo_get_edid (connector );
2161+ if (! drm_edid )
2162+ drm_edid = intel_sdvo_get_analog_edid (connector );
2163+ if (drm_edid ) {
21602164 if (intel_sdvo_connector_matches_edid (intel_sdvo_connector ,
2161- edid ))
2165+ drm_edid ))
21622166 ret = connector_status_connected ;
21632167 else
21642168 ret = connector_status_disconnected ;
21652169
2166- kfree ( edid );
2167- } else
2170+ drm_edid_free ( drm_edid );
2171+ } else {
21682172 ret = connector_status_connected ;
2173+ }
21692174 }
21702175
21712176 return ret ;
@@ -2174,31 +2179,31 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
21742179static int intel_sdvo_get_ddc_modes (struct drm_connector * connector )
21752180{
21762181 int num_modes = 0 ;
2177- struct edid * edid ;
2182+ const struct drm_edid * drm_edid ;
21782183
21792184 DRM_DEBUG_KMS ("[CONNECTOR:%d:%s]\n" ,
21802185 connector -> base .id , connector -> name );
21812186
21822187 /* set the bus switch and get the modes */
2183- edid = intel_sdvo_get_edid (connector );
2188+ drm_edid = intel_sdvo_get_edid (connector );
21842189
21852190 /*
21862191 * Mac mini hack. On this device, the DVI-I connector shares one DDC
21872192 * link between analog and digital outputs. So, if the regular SDVO
21882193 * DDC fails, check to see if the analog output is disconnected, in
21892194 * which case we'll look there for the digital DDC data.
21902195 */
2191- if (!edid )
2192- edid = intel_sdvo_get_analog_edid (connector );
2196+ if (!drm_edid )
2197+ drm_edid = intel_sdvo_get_analog_edid (connector );
21932198
2194- if (!edid )
2199+ if (!drm_edid )
21952200 return 0 ;
21962201
21972202 if (intel_sdvo_connector_matches_edid (to_intel_sdvo_connector (connector ),
2198- edid ))
2199- num_modes += intel_connector_update_modes (connector , edid );
2203+ drm_edid ))
2204+ num_modes += intel_connector_update_modes (connector , drm_edid );
22002205
2201- kfree ( edid );
2206+ drm_edid_free ( drm_edid );
22022207
22032208 return num_modes ;
22042209}
0 commit comments