.. | .. |
---|
23 | 23 | * Authors: Dave Airlie |
---|
24 | 24 | * Alex Deucher |
---|
25 | 25 | */ |
---|
26 | | -#include <drm/drmP.h> |
---|
| 26 | + |
---|
27 | 27 | #include <drm/drm_edid.h> |
---|
28 | 28 | #include <drm/drm_crtc_helper.h> |
---|
29 | 29 | #include <drm/drm_fb_helper.h> |
---|
30 | 30 | #include <drm/drm_dp_mst_helper.h> |
---|
| 31 | +#include <drm/drm_probe_helper.h> |
---|
31 | 32 | #include <drm/radeon_drm.h> |
---|
32 | 33 | #include "radeon.h" |
---|
33 | 34 | #include "radeon_audio.h" |
---|
.. | .. |
---|
248 | 249 | struct drm_encoder *encoder; |
---|
249 | 250 | const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; |
---|
250 | 251 | bool connected; |
---|
251 | | - int i; |
---|
252 | 252 | |
---|
253 | 253 | best_encoder = connector_funcs->best_encoder(connector); |
---|
254 | 254 | |
---|
255 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) { |
---|
| 255 | + drm_connector_for_each_possible_encoder(connector, encoder) { |
---|
256 | 256 | if ((encoder == best_encoder) && (status == connector_status_connected)) |
---|
257 | 257 | connected = true; |
---|
258 | 258 | else |
---|
.. | .. |
---|
268 | 268 | static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type) |
---|
269 | 269 | { |
---|
270 | 270 | struct drm_encoder *encoder; |
---|
271 | | - int i; |
---|
272 | 271 | |
---|
273 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) { |
---|
| 272 | + drm_connector_for_each_possible_encoder(connector, encoder) { |
---|
274 | 273 | if (encoder->encoder_type == encoder_type) |
---|
275 | 274 | return encoder; |
---|
276 | 275 | } |
---|
.. | .. |
---|
379 | 378 | static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector) |
---|
380 | 379 | { |
---|
381 | 380 | struct drm_encoder *encoder; |
---|
382 | | - int i; |
---|
383 | 381 | |
---|
384 | 382 | /* pick the first one */ |
---|
385 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) |
---|
| 383 | + drm_connector_for_each_possible_encoder(connector, encoder) |
---|
386 | 384 | return encoder; |
---|
387 | 385 | |
---|
388 | 386 | return NULL; |
---|
.. | .. |
---|
427 | 425 | |
---|
428 | 426 | list_for_each_entry(conflict, &dev->mode_config.connector_list, head) { |
---|
429 | 427 | struct drm_encoder *enc; |
---|
430 | | - int i; |
---|
431 | 428 | |
---|
432 | 429 | if (conflict == connector) |
---|
433 | 430 | continue; |
---|
434 | 431 | |
---|
435 | 432 | radeon_conflict = to_radeon_connector(conflict); |
---|
436 | 433 | |
---|
437 | | - drm_connector_for_each_possible_encoder(conflict, enc, i) { |
---|
| 434 | + drm_connector_for_each_possible_encoder(conflict, enc) { |
---|
438 | 435 | /* if the IDs match */ |
---|
439 | 436 | if (enc == encoder) { |
---|
440 | 437 | if (conflict->status != connector_status_connected) |
---|
.. | .. |
---|
443 | 440 | if (radeon_conflict->use_digital) |
---|
444 | 441 | continue; |
---|
445 | 442 | |
---|
446 | | - if (priority == true) { |
---|
| 443 | + if (priority) { |
---|
447 | 444 | DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n", |
---|
448 | 445 | conflict->name); |
---|
449 | 446 | DRM_DEBUG_KMS("in favor of %s\n", |
---|
.. | .. |
---|
476 | 473 | native_mode->vdisplay != 0 && |
---|
477 | 474 | native_mode->clock != 0) { |
---|
478 | 475 | mode = drm_mode_duplicate(dev, native_mode); |
---|
| 476 | + if (!mode) |
---|
| 477 | + return NULL; |
---|
479 | 478 | mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; |
---|
480 | 479 | drm_mode_set_name(mode); |
---|
481 | 480 | |
---|
.. | .. |
---|
490 | 489 | * simpler. |
---|
491 | 490 | */ |
---|
492 | 491 | mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false); |
---|
| 492 | + if (!mode) |
---|
| 493 | + return NULL; |
---|
493 | 494 | mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; |
---|
494 | 495 | DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name); |
---|
495 | 496 | } |
---|
.. | .. |
---|
703 | 704 | else |
---|
704 | 705 | ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds); |
---|
705 | 706 | } |
---|
706 | | - if (val == 1 || ret == false) { |
---|
| 707 | + if (val == 1 || !ret) |
---|
707 | 708 | radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds); |
---|
708 | | - } |
---|
| 709 | + |
---|
709 | 710 | radeon_property_change_mode(&radeon_encoder->base); |
---|
710 | 711 | } |
---|
711 | 712 | |
---|
.. | .. |
---|
1370 | 1371 | |
---|
1371 | 1372 | /* find analog encoder */ |
---|
1372 | 1373 | if (radeon_connector->dac_load_detect) { |
---|
1373 | | - int i; |
---|
1374 | | - |
---|
1375 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) { |
---|
| 1374 | + drm_connector_for_each_possible_encoder(connector, encoder) { |
---|
1376 | 1375 | if (encoder->encoder_type != DRM_MODE_ENCODER_DAC && |
---|
1377 | 1376 | encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) |
---|
1378 | 1377 | continue; |
---|
.. | .. |
---|
1450 | 1449 | { |
---|
1451 | 1450 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
---|
1452 | 1451 | struct drm_encoder *encoder; |
---|
1453 | | - int i; |
---|
1454 | 1452 | |
---|
1455 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) { |
---|
| 1453 | + drm_connector_for_each_possible_encoder(connector, encoder) { |
---|
1456 | 1454 | if (radeon_connector->use_digital == true) { |
---|
1457 | 1455 | if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS) |
---|
1458 | 1456 | return encoder; |
---|
.. | .. |
---|
1467 | 1465 | |
---|
1468 | 1466 | /* then check use digitial */ |
---|
1469 | 1467 | /* pick the first one */ |
---|
1470 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) |
---|
| 1468 | + drm_connector_for_each_possible_encoder(connector, encoder) |
---|
1471 | 1469 | return encoder; |
---|
1472 | 1470 | |
---|
1473 | 1471 | return NULL; |
---|
.. | .. |
---|
1610 | 1608 | { |
---|
1611 | 1609 | struct drm_encoder *encoder; |
---|
1612 | 1610 | struct radeon_encoder *radeon_encoder; |
---|
1613 | | - int i; |
---|
1614 | 1611 | |
---|
1615 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) { |
---|
| 1612 | + drm_connector_for_each_possible_encoder(connector, encoder) { |
---|
1616 | 1613 | radeon_encoder = to_radeon_encoder(encoder); |
---|
1617 | 1614 | |
---|
1618 | 1615 | switch (radeon_encoder->encoder_id) { |
---|
.. | .. |
---|
1631 | 1628 | { |
---|
1632 | 1629 | struct drm_encoder *encoder; |
---|
1633 | 1630 | struct radeon_encoder *radeon_encoder; |
---|
1634 | | - int i; |
---|
1635 | 1631 | bool found = false; |
---|
1636 | 1632 | |
---|
1637 | | - drm_connector_for_each_possible_encoder(connector, encoder, i) { |
---|
| 1633 | + drm_connector_for_each_possible_encoder(connector, encoder) { |
---|
1638 | 1634 | radeon_encoder = to_radeon_encoder(encoder); |
---|
1639 | 1635 | if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2) |
---|
1640 | 1636 | found = true; |
---|
.. | .. |
---|
1879 | 1875 | struct radeon_connector_atom_dig *radeon_dig_connector; |
---|
1880 | 1876 | struct drm_encoder *encoder; |
---|
1881 | 1877 | struct radeon_encoder *radeon_encoder; |
---|
| 1878 | + struct i2c_adapter *ddc = NULL; |
---|
1882 | 1879 | uint32_t subpixel_order = SubPixelNone; |
---|
1883 | 1880 | bool shared_ddc = false; |
---|
1884 | 1881 | bool is_dp_bridge = false; |
---|
.. | .. |
---|
1956 | 1953 | radeon_connector->con_priv = radeon_dig_connector; |
---|
1957 | 1954 | if (i2c_bus->valid) { |
---|
1958 | 1955 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
1959 | | - if (radeon_connector->ddc_bus) |
---|
| 1956 | + if (radeon_connector->ddc_bus) { |
---|
1960 | 1957 | has_aux = true; |
---|
1961 | | - else |
---|
| 1958 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
| 1959 | + } else { |
---|
1962 | 1960 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 1961 | + } |
---|
1963 | 1962 | } |
---|
1964 | 1963 | switch (connector_type) { |
---|
1965 | 1964 | case DRM_MODE_CONNECTOR_VGA: |
---|
1966 | 1965 | case DRM_MODE_CONNECTOR_DVIA: |
---|
1967 | 1966 | default: |
---|
1968 | | - drm_connector_init(dev, &radeon_connector->base, |
---|
1969 | | - &radeon_dp_connector_funcs, connector_type); |
---|
| 1967 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 1968 | + &radeon_dp_connector_funcs, |
---|
| 1969 | + connector_type, |
---|
| 1970 | + ddc); |
---|
1970 | 1971 | drm_connector_helper_add(&radeon_connector->base, |
---|
1971 | 1972 | &radeon_dp_connector_helper_funcs); |
---|
1972 | 1973 | connector->interlace_allowed = true; |
---|
.. | .. |
---|
1988 | 1989 | case DRM_MODE_CONNECTOR_HDMIA: |
---|
1989 | 1990 | case DRM_MODE_CONNECTOR_HDMIB: |
---|
1990 | 1991 | case DRM_MODE_CONNECTOR_DisplayPort: |
---|
1991 | | - drm_connector_init(dev, &radeon_connector->base, |
---|
1992 | | - &radeon_dp_connector_funcs, connector_type); |
---|
| 1992 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 1993 | + &radeon_dp_connector_funcs, |
---|
| 1994 | + connector_type, |
---|
| 1995 | + ddc); |
---|
1993 | 1996 | drm_connector_helper_add(&radeon_connector->base, |
---|
1994 | 1997 | &radeon_dp_connector_helper_funcs); |
---|
1995 | 1998 | drm_object_attach_property(&radeon_connector->base.base, |
---|
.. | .. |
---|
2036 | 2039 | break; |
---|
2037 | 2040 | case DRM_MODE_CONNECTOR_LVDS: |
---|
2038 | 2041 | case DRM_MODE_CONNECTOR_eDP: |
---|
2039 | | - drm_connector_init(dev, &radeon_connector->base, |
---|
2040 | | - &radeon_lvds_bridge_connector_funcs, connector_type); |
---|
| 2042 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2043 | + &radeon_lvds_bridge_connector_funcs, |
---|
| 2044 | + connector_type, |
---|
| 2045 | + ddc); |
---|
2041 | 2046 | drm_connector_helper_add(&radeon_connector->base, |
---|
2042 | 2047 | &radeon_dp_connector_helper_funcs); |
---|
2043 | 2048 | drm_object_attach_property(&radeon_connector->base.base, |
---|
.. | .. |
---|
2051 | 2056 | } else { |
---|
2052 | 2057 | switch (connector_type) { |
---|
2053 | 2058 | case DRM_MODE_CONNECTOR_VGA: |
---|
2054 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
---|
2055 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2056 | 2059 | if (i2c_bus->valid) { |
---|
2057 | 2060 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2058 | 2061 | if (!radeon_connector->ddc_bus) |
---|
2059 | 2062 | DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2063 | + else |
---|
| 2064 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2060 | 2065 | } |
---|
| 2066 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2067 | + &radeon_vga_connector_funcs, |
---|
| 2068 | + connector_type, |
---|
| 2069 | + ddc); |
---|
| 2070 | + drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2061 | 2071 | radeon_connector->dac_load_detect = true; |
---|
2062 | 2072 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2063 | 2073 | rdev->mode_info.load_detect_property, |
---|
.. | .. |
---|
2076 | 2086 | connector->doublescan_allowed = true; |
---|
2077 | 2087 | break; |
---|
2078 | 2088 | case DRM_MODE_CONNECTOR_DVIA: |
---|
2079 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
---|
2080 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2081 | 2089 | if (i2c_bus->valid) { |
---|
2082 | 2090 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2083 | 2091 | if (!radeon_connector->ddc_bus) |
---|
2084 | 2092 | DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2093 | + else |
---|
| 2094 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2085 | 2095 | } |
---|
| 2096 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2097 | + &radeon_vga_connector_funcs, |
---|
| 2098 | + connector_type, |
---|
| 2099 | + ddc); |
---|
| 2100 | + drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2086 | 2101 | radeon_connector->dac_load_detect = true; |
---|
2087 | 2102 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2088 | 2103 | rdev->mode_info.load_detect_property, |
---|
.. | .. |
---|
2107 | 2122 | goto failed; |
---|
2108 | 2123 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
---|
2109 | 2124 | radeon_connector->con_priv = radeon_dig_connector; |
---|
2110 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); |
---|
2111 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
---|
2112 | 2125 | if (i2c_bus->valid) { |
---|
2113 | 2126 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2114 | 2127 | if (!radeon_connector->ddc_bus) |
---|
2115 | 2128 | DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2129 | + else |
---|
| 2130 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2116 | 2131 | } |
---|
| 2132 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2133 | + &radeon_dvi_connector_funcs, |
---|
| 2134 | + connector_type, |
---|
| 2135 | + ddc); |
---|
| 2136 | + drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
---|
2117 | 2137 | subpixel_order = SubPixelHorizontalRGB; |
---|
2118 | 2138 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2119 | 2139 | rdev->mode_info.coherent_mode_property, |
---|
.. | .. |
---|
2164 | 2184 | goto failed; |
---|
2165 | 2185 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
---|
2166 | 2186 | radeon_connector->con_priv = radeon_dig_connector; |
---|
2167 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); |
---|
2168 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
---|
2169 | 2187 | if (i2c_bus->valid) { |
---|
2170 | 2188 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2171 | 2189 | if (!radeon_connector->ddc_bus) |
---|
2172 | 2190 | DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2191 | + else |
---|
| 2192 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2173 | 2193 | } |
---|
| 2194 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2195 | + &radeon_dvi_connector_funcs, |
---|
| 2196 | + connector_type, |
---|
| 2197 | + ddc); |
---|
| 2198 | + drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
---|
2174 | 2199 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2175 | 2200 | rdev->mode_info.coherent_mode_property, |
---|
2176 | 2201 | 1); |
---|
.. | .. |
---|
2214 | 2239 | goto failed; |
---|
2215 | 2240 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
---|
2216 | 2241 | radeon_connector->con_priv = radeon_dig_connector; |
---|
2217 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); |
---|
2218 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); |
---|
2219 | 2242 | if (i2c_bus->valid) { |
---|
2220 | 2243 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2221 | | - if (radeon_connector->ddc_bus) |
---|
| 2244 | + if (radeon_connector->ddc_bus) { |
---|
2222 | 2245 | has_aux = true; |
---|
2223 | | - else |
---|
| 2246 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
| 2247 | + } else { |
---|
2224 | 2248 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2249 | + } |
---|
2225 | 2250 | } |
---|
| 2251 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2252 | + &radeon_dp_connector_funcs, |
---|
| 2253 | + connector_type, |
---|
| 2254 | + ddc); |
---|
| 2255 | + drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); |
---|
2226 | 2256 | subpixel_order = SubPixelHorizontalRGB; |
---|
2227 | 2257 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2228 | 2258 | rdev->mode_info.coherent_mode_property, |
---|
.. | .. |
---|
2264 | 2294 | goto failed; |
---|
2265 | 2295 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
---|
2266 | 2296 | radeon_connector->con_priv = radeon_dig_connector; |
---|
2267 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type); |
---|
2268 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); |
---|
2269 | 2297 | if (i2c_bus->valid) { |
---|
2270 | 2298 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2271 | | - if (radeon_connector->ddc_bus) |
---|
| 2299 | + if (radeon_connector->ddc_bus) { |
---|
2272 | 2300 | has_aux = true; |
---|
2273 | | - else |
---|
| 2301 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
| 2302 | + } else { |
---|
2274 | 2303 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2304 | + } |
---|
2275 | 2305 | } |
---|
| 2306 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2307 | + &radeon_edp_connector_funcs, |
---|
| 2308 | + connector_type, |
---|
| 2309 | + ddc); |
---|
| 2310 | + drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); |
---|
2276 | 2311 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2277 | 2312 | dev->mode_config.scaling_mode_property, |
---|
2278 | 2313 | DRM_MODE_SCALE_FULLSCREEN); |
---|
.. | .. |
---|
2283 | 2318 | case DRM_MODE_CONNECTOR_SVIDEO: |
---|
2284 | 2319 | case DRM_MODE_CONNECTOR_Composite: |
---|
2285 | 2320 | case DRM_MODE_CONNECTOR_9PinDIN: |
---|
2286 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
---|
| 2321 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2322 | + &radeon_tv_connector_funcs, |
---|
| 2323 | + connector_type, |
---|
| 2324 | + ddc); |
---|
2287 | 2325 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
---|
2288 | 2326 | radeon_connector->dac_load_detect = true; |
---|
2289 | 2327 | drm_object_attach_property(&radeon_connector->base.base, |
---|
.. | .. |
---|
2303 | 2341 | goto failed; |
---|
2304 | 2342 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
---|
2305 | 2343 | radeon_connector->con_priv = radeon_dig_connector; |
---|
2306 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type); |
---|
2307 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); |
---|
2308 | 2344 | if (i2c_bus->valid) { |
---|
2309 | 2345 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2310 | 2346 | if (!radeon_connector->ddc_bus) |
---|
2311 | 2347 | DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2348 | + else |
---|
| 2349 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2312 | 2350 | } |
---|
| 2351 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2352 | + &radeon_lvds_connector_funcs, |
---|
| 2353 | + connector_type, |
---|
| 2354 | + ddc); |
---|
| 2355 | + drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); |
---|
2313 | 2356 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2314 | 2357 | dev->mode_config.scaling_mode_property, |
---|
2315 | 2358 | DRM_MODE_SCALE_FULLSCREEN); |
---|
.. | .. |
---|
2353 | 2396 | struct radeon_device *rdev = dev->dev_private; |
---|
2354 | 2397 | struct drm_connector *connector; |
---|
2355 | 2398 | struct radeon_connector *radeon_connector; |
---|
| 2399 | + struct i2c_adapter *ddc = NULL; |
---|
2356 | 2400 | uint32_t subpixel_order = SubPixelNone; |
---|
2357 | 2401 | |
---|
2358 | 2402 | if (connector_type == DRM_MODE_CONNECTOR_Unknown) |
---|
.. | .. |
---|
2387 | 2431 | |
---|
2388 | 2432 | switch (connector_type) { |
---|
2389 | 2433 | case DRM_MODE_CONNECTOR_VGA: |
---|
2390 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
---|
2391 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2392 | 2434 | if (i2c_bus->valid) { |
---|
2393 | 2435 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2394 | 2436 | if (!radeon_connector->ddc_bus) |
---|
2395 | 2437 | DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2438 | + else |
---|
| 2439 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2396 | 2440 | } |
---|
| 2441 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2442 | + &radeon_vga_connector_funcs, |
---|
| 2443 | + connector_type, |
---|
| 2444 | + ddc); |
---|
| 2445 | + drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2397 | 2446 | radeon_connector->dac_load_detect = true; |
---|
2398 | 2447 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2399 | 2448 | rdev->mode_info.load_detect_property, |
---|
.. | .. |
---|
2404 | 2453 | connector->doublescan_allowed = true; |
---|
2405 | 2454 | break; |
---|
2406 | 2455 | case DRM_MODE_CONNECTOR_DVIA: |
---|
2407 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
---|
2408 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2409 | 2456 | if (i2c_bus->valid) { |
---|
2410 | 2457 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2411 | 2458 | if (!radeon_connector->ddc_bus) |
---|
2412 | 2459 | DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2460 | + else |
---|
| 2461 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2413 | 2462 | } |
---|
| 2463 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2464 | + &radeon_vga_connector_funcs, |
---|
| 2465 | + connector_type, |
---|
| 2466 | + ddc); |
---|
| 2467 | + drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
---|
2414 | 2468 | radeon_connector->dac_load_detect = true; |
---|
2415 | 2469 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2416 | 2470 | rdev->mode_info.load_detect_property, |
---|
.. | .. |
---|
2422 | 2476 | break; |
---|
2423 | 2477 | case DRM_MODE_CONNECTOR_DVII: |
---|
2424 | 2478 | case DRM_MODE_CONNECTOR_DVID: |
---|
2425 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); |
---|
2426 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
---|
2427 | 2479 | if (i2c_bus->valid) { |
---|
2428 | 2480 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2429 | 2481 | if (!radeon_connector->ddc_bus) |
---|
2430 | 2482 | DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2483 | + else |
---|
| 2484 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2431 | 2485 | } |
---|
| 2486 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2487 | + &radeon_dvi_connector_funcs, |
---|
| 2488 | + connector_type, |
---|
| 2489 | + ddc); |
---|
| 2490 | + drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
---|
2432 | 2491 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
---|
2433 | 2492 | radeon_connector->dac_load_detect = true; |
---|
2434 | 2493 | drm_object_attach_property(&radeon_connector->base.base, |
---|
.. | .. |
---|
2445 | 2504 | case DRM_MODE_CONNECTOR_SVIDEO: |
---|
2446 | 2505 | case DRM_MODE_CONNECTOR_Composite: |
---|
2447 | 2506 | case DRM_MODE_CONNECTOR_9PinDIN: |
---|
2448 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
---|
| 2507 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2508 | + &radeon_tv_connector_funcs, |
---|
| 2509 | + connector_type, |
---|
| 2510 | + ddc); |
---|
2449 | 2511 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
---|
2450 | 2512 | radeon_connector->dac_load_detect = true; |
---|
2451 | 2513 | /* RS400,RC410,RS480 chipset seems to report a lot |
---|
.. | .. |
---|
2467 | 2529 | connector->doublescan_allowed = false; |
---|
2468 | 2530 | break; |
---|
2469 | 2531 | case DRM_MODE_CONNECTOR_LVDS: |
---|
2470 | | - drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type); |
---|
2471 | | - drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); |
---|
2472 | 2532 | if (i2c_bus->valid) { |
---|
2473 | 2533 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
---|
2474 | 2534 | if (!radeon_connector->ddc_bus) |
---|
2475 | 2535 | DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
---|
| 2536 | + else |
---|
| 2537 | + ddc = &radeon_connector->ddc_bus->adapter; |
---|
2476 | 2538 | } |
---|
| 2539 | + drm_connector_init_with_ddc(dev, &radeon_connector->base, |
---|
| 2540 | + &radeon_lvds_connector_funcs, |
---|
| 2541 | + connector_type, |
---|
| 2542 | + ddc); |
---|
| 2543 | + drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); |
---|
2477 | 2544 | drm_object_attach_property(&radeon_connector->base.base, |
---|
2478 | 2545 | dev->mode_config.scaling_mode_property, |
---|
2479 | 2546 | DRM_MODE_SCALE_FULLSCREEN); |
---|