150477Speter/* 235388Smjacob * Copyright 2007-8 Advanced Micro Devices, Inc. 339235Sgibbs * Copyright 2008 Red Hat Inc. 435388Smjacob * 535388Smjacob * Permission is hereby granted, free of charge, to any person obtaining a 673319Smjacob * copy of this software and associated documentation files (the "Software"), 766189Smjacob * to deal in the Software without restriction, including without limitation 835388Smjacob * the rights to use, copy, modify, merge, publish, distribute, sublicense, 935388Smjacob * and/or sell copies of the Software, and to permit persons to whom the 1035388Smjacob * Software is furnished to do so, subject to the following conditions: 1135388Smjacob * 1235388Smjacob * The above copyright notice and this permission notice shall be included in 1335388Smjacob * all copies or substantial portions of the Software. 1435388Smjacob * 1535388Smjacob * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1666189Smjacob * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1735388Smjacob * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1835388Smjacob * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 1935388Smjacob * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 2035388Smjacob * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2135388Smjacob * OTHER DEALINGS IN THE SOFTWARE. 2235388Smjacob * 2335388Smjacob * Authors: Dave Airlie 2435388Smjacob * Alex Deucher 2535388Smjacob */ 2635388Smjacob 2735388Smjacob#include <linux/pci.h> 2835388Smjacob 2935388Smjacob#include <drm/drm_edid.h> 3035388Smjacob#include <drm/drm_device.h> 3135388Smjacob#include <drm/radeon_drm.h> 3235388Smjacob 3335388Smjacob#include <acpi/video.h> 3435388Smjacob 3535388Smjacob#include "radeon.h" 3635388Smjacob#include "radeon_atombios.h" 3735388Smjacob#include "radeon_legacy_encoders.h" 3835388Smjacob#include "atom.h" 3935388Smjacob 4035388Smjacobstatic uint32_t radeon_encoder_clones(struct drm_encoder *encoder) 4135388Smjacob{ 4235388Smjacob struct drm_device *dev = encoder->dev; 4335388Smjacob struct radeon_device *rdev = dev->dev_private; 4435388Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 4535388Smjacob struct drm_encoder *clone_encoder; 4635388Smjacob uint32_t index_mask = 0; 4735388Smjacob int count; 4844819Smjacob 4944819Smjacob /* DIG routing gets problematic */ 5044819Smjacob if (rdev->family >= CHIP_R600) 5135388Smjacob return index_mask; 5242131Smjacob /* LVDS/TV are too wacky */ 5335388Smjacob if (radeon_encoder->devices & ATOM_DEVICE_LCD_SUPPORT) 5464095Smjacob return index_mask; 5564095Smjacob /* DVO requires 2x ppll clocks depending on tmds chip */ 5664095Smjacob if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) 5735388Smjacob return index_mask; 5835388Smjacob 5935388Smjacob count = -1; 6035388Smjacob list_for_each_entry(clone_encoder, &dev->mode_config.encoder_list, head) { 6135388Smjacob struct radeon_encoder *radeon_clone = to_radeon_encoder(clone_encoder); 6235388Smjacob 6335388Smjacob count++; 6435388Smjacob 6539235Sgibbs if (clone_encoder == encoder) 6635388Smjacob continue; 6770489Smjacob if (radeon_clone->devices & (ATOM_DEVICE_LCD_SUPPORT)) 6864095Smjacob continue; 6970489Smjacob if (radeon_clone->devices & ATOM_DEVICE_DFP2_SUPPORT) 7064095Smjacob continue; 7179234Smjacob else 7264095Smjacob index_mask |= (1 << count); 7370489Smjacob } 7464095Smjacob return index_mask; 7570489Smjacob} 7664095Smjacob 7770489Smjacobvoid radeon_setup_encoder_clones(struct drm_device *dev) 7864095Smjacob{ 7970489Smjacob struct drm_encoder *encoder; 8064095Smjacob 8170489Smjacob list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 8264095Smjacob encoder->possible_clones = radeon_encoder_clones(encoder); 8370489Smjacob } 8464095Smjacob} 8570489Smjacob 8664095Smjacobuint32_t 8770489Smjacobradeon_get_encoder_enum(struct drm_device *dev, uint32_t supported_device, uint8_t dac) 8869523Smjacob{ 8970489Smjacob struct radeon_device *rdev = dev->dev_private; 9064095Smjacob uint32_t ret = 0; 9170489Smjacob 9264095Smjacob switch (supported_device) { 9370489Smjacob case ATOM_DEVICE_CRT1_SUPPORT: 9464095Smjacob case ATOM_DEVICE_TV1_SUPPORT: 9570489Smjacob case ATOM_DEVICE_TV2_SUPPORT: 9664095Smjacob case ATOM_DEVICE_CRT2_SUPPORT: 9770489Smjacob case ATOM_DEVICE_CV_SUPPORT: 9864095Smjacob switch (dac) { 9970489Smjacob case 1: /* dac a */ 10072346Smjacob if ((rdev->family == CHIP_RS300) || 10181988Smjacob (rdev->family == CHIP_RS400) || 10281988Smjacob (rdev->family == CHIP_RS480)) 10381988Smjacob ret = ENCODER_INTERNAL_DAC2_ENUM_ID1; 10481988Smjacob else if (ASIC_IS_AVIVO(rdev)) 10581988Smjacob ret = ENCODER_INTERNAL_KLDSCP_DAC1_ENUM_ID1; 10681988Smjacob else 10781988Smjacob ret = ENCODER_INTERNAL_DAC1_ENUM_ID1; 10881988Smjacob break; 10939235Sgibbs case 2: /* dac b */ 11039235Sgibbs if (ASIC_IS_AVIVO(rdev)) 11139235Sgibbs ret = ENCODER_INTERNAL_KLDSCP_DAC2_ENUM_ID1; 11241524Smjacob else { 11339235Sgibbs /* if (rdev->family == CHIP_R200) 11453490Smjacob * ret = ENCODER_INTERNAL_DVO1_ENUM_ID1; 11535388Smjacob * else 11664095Smjacob */ 11773319Smjacob ret = ENCODER_INTERNAL_DAC2_ENUM_ID1; 11846971Smjacob } 11946971Smjacob break; 12035388Smjacob case 3: /* external dac */ 12144819Smjacob if (ASIC_IS_AVIVO(rdev)) 12272346Smjacob ret = ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1; 12344819Smjacob else 12448486Smjacob ret = ENCODER_INTERNAL_DVO1_ENUM_ID1; 12545040Smjacob break; 12664095Smjacob } 12772346Smjacob break; 12872346Smjacob case ATOM_DEVICE_LCD1_SUPPORT: 12948486Smjacob if (ASIC_IS_AVIVO(rdev)) 13070821Smjacob ret = ENCODER_INTERNAL_LVTM1_ENUM_ID1; 13135388Smjacob else 13264095Smjacob ret = ENCODER_INTERNAL_LVDS_ENUM_ID1; 13335388Smjacob break; 13446971Smjacob case ATOM_DEVICE_DFP1_SUPPORT: 13546971Smjacob if ((rdev->family == CHIP_RS300) || 13646971Smjacob (rdev->family == CHIP_RS400) || 13739235Sgibbs (rdev->family == CHIP_RS480)) 13839235Sgibbs ret = ENCODER_INTERNAL_DVO1_ENUM_ID1; 13957146Smjacob else if (ASIC_IS_AVIVO(rdev)) 14057146Smjacob ret = ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID1; 14157146Smjacob else 14257146Smjacob ret = ENCODER_INTERNAL_TMDS1_ENUM_ID1; 14339235Sgibbs break; 14435388Smjacob case ATOM_DEVICE_LCD2_SUPPORT: 14535388Smjacob case ATOM_DEVICE_DFP2_SUPPORT: 14639235Sgibbs if ((rdev->family == CHIP_RS600) || 14752682Smjacob (rdev->family == CHIP_RS690) || 14839235Sgibbs (rdev->family == CHIP_RS740)) 14939235Sgibbs ret = ENCODER_INTERNAL_DDI_ENUM_ID1; 15035388Smjacob else if (ASIC_IS_AVIVO(rdev)) 15182689Smjacob ret = ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1; 15235388Smjacob else 15374229Smjacob ret = ENCODER_INTERNAL_DVO1_ENUM_ID1; 15435388Smjacob break; 15535388Smjacob case ATOM_DEVICE_DFP3_SUPPORT: 15682689Smjacob ret = ENCODER_INTERNAL_LVTM1_ENUM_ID1; 15761776Smjacob break; 15882689Smjacob } 15935388Smjacob 16035388Smjacob return ret; 16135388Smjacob} 16235388Smjacob 16339235Sgibbsstatic void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder, 16439235Sgibbs struct drm_connector *connector) 16582689Smjacob{ 16682689Smjacob struct drm_device *dev = radeon_encoder->base.dev; 16764095Smjacob struct radeon_device *rdev = dev->dev_private; 16843789Smjacob bool use_bl = false; 16964095Smjacob 17043789Smjacob if (!(radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))) 17143789Smjacob return; 17243789Smjacob 17343420Smjacob if (radeon_backlight == 0) { 17443420Smjacob use_bl = false; 17543420Smjacob } else if (radeon_backlight == 1) { 17643420Smjacob use_bl = true; 17743420Smjacob } else if (radeon_backlight == -1) { 17843420Smjacob /* Quirks */ 17943420Smjacob /* Amilo Xi 2550 only works with acpi bl */ 18061776Smjacob if ((rdev->pdev->device == 0x9583) && 18143420Smjacob (rdev->pdev->subsystem_vendor == 0x1734) && 18264095Smjacob (rdev->pdev->subsystem_device == 0x1107)) 18364095Smjacob use_bl = false; 18482842Smjacob/* Older PPC macs use on-GPU backlight controller */ 18582842Smjacob#ifndef CONFIG_PPC_PMAC 18682842Smjacob /* disable native backlight control on older asics */ 18782842Smjacob else if (rdev->family < CHIP_R600) 18882842Smjacob use_bl = false; 18982842Smjacob#endif 19082842Smjacob else 19143420Smjacob use_bl = true; 19264095Smjacob } 19364095Smjacob 19464095Smjacob if (use_bl) { 19564095Smjacob if (rdev->is_atom_bios) 19664095Smjacob radeon_atom_backlight_init(radeon_encoder, connector); 19764095Smjacob else 19864095Smjacob radeon_legacy_backlight_init(radeon_encoder, connector); 19964095Smjacob } 20082842Smjacob 20164095Smjacob /* 20264095Smjacob * If there is no native backlight device (which may happen even when 20364095Smjacob * use_bl==true) try registering an ACPI video backlight device instead. 20464095Smjacob */ 20564095Smjacob if (!rdev->mode_info.bl_encoder) 20642462Smjacob acpi_video_register_backlight(); 20753490Smjacob} 20842462Smjacob 20942462Smjacobvoid 21045287Smjacobradeon_link_encoder_connector(struct drm_device *dev) 21182842Smjacob{ 21282689Smjacob struct drm_connector *connector; 21382689Smjacob struct radeon_connector *radeon_connector; 21482689Smjacob struct drm_encoder *encoder; 21582689Smjacob struct radeon_encoder *radeon_encoder; 21684149Smjacob 21784149Smjacob /* walk the list and link encoders to connectors */ 21884149Smjacob list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 21984149Smjacob radeon_connector = to_radeon_connector(connector); 22084149Smjacob list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 22184149Smjacob radeon_encoder = to_radeon_encoder(encoder); 22284149Smjacob if (radeon_encoder->devices & radeon_connector->devices) { 22384149Smjacob drm_connector_attach_encoder(connector, encoder); 22484149Smjacob if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) 22584149Smjacob radeon_encoder_add_backlight(radeon_encoder, connector); 22684149Smjacob } 22745287Smjacob } 22843420Smjacob } 22971074Smjacob} 23071074Smjacob 23143420Smjacobvoid radeon_encoder_set_active_device(struct drm_encoder *encoder) 23243420Smjacob{ 23343420Smjacob struct drm_device *dev = encoder->dev; 23448486Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 23548486Smjacob struct drm_connector *connector; 23648486Smjacob 23782689Smjacob list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 23848486Smjacob if (connector->encoder == encoder) { 23948486Smjacob struct radeon_connector *radeon_connector = to_radeon_connector(connector); 24082689Smjacob 24148486Smjacob radeon_encoder->active_device = radeon_encoder->devices & radeon_connector->devices; 24277365Smjacob DRM_DEBUG_KMS("setting active device to %08x from %08x %08x for encoder %d\n", 24382689Smjacob radeon_encoder->active_device, radeon_encoder->devices, 24477365Smjacob radeon_connector->devices, encoder->encoder_type); 24548486Smjacob } 24648486Smjacob } 24748486Smjacob} 24871074Smjacob 24971074Smjacobstruct drm_connector * 25071074Smjacobradeon_get_connector_for_encoder(struct drm_encoder *encoder) 25171074Smjacob{ 25271074Smjacob struct drm_device *dev = encoder->dev; 25371074Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 25471074Smjacob struct drm_connector *connector; 25571074Smjacob struct radeon_connector *radeon_connector; 25654671Smjacob 25754671Smjacob list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 25882689Smjacob radeon_connector = to_radeon_connector(connector); 25946971Smjacob if (radeon_encoder->active_device & radeon_connector->devices) 26054671Smjacob return connector; 26154671Smjacob } 26254671Smjacob return NULL; 26354671Smjacob} 26454671Smjacob 26554671Smjacobstruct drm_connector * 26654671Smjacobradeon_get_connector_for_encoder_init(struct drm_encoder *encoder) 26770489Smjacob{ 26845040Smjacob struct drm_device *dev = encoder->dev; 26944819Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 27054671Smjacob struct drm_connector *connector; 27154671Smjacob struct radeon_connector *radeon_connector; 27254671Smjacob 27357146Smjacob list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 27482689Smjacob radeon_connector = to_radeon_connector(connector); 27557146Smjacob if (radeon_encoder->devices & radeon_connector->devices) 27682689Smjacob return connector; 27757146Smjacob } 27882689Smjacob return NULL; 27957146Smjacob} 28082689Smjacob 28157146Smjacobstruct drm_encoder *radeon_get_external_encoder(struct drm_encoder *encoder) 28245040Smjacob{ 28345040Smjacob struct drm_device *dev = encoder->dev; 28445040Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 28545040Smjacob struct drm_encoder *other_encoder; 28664095Smjacob struct radeon_encoder *other_radeon_encoder; 28745040Smjacob 28845040Smjacob if (radeon_encoder->is_ext_encoder) 28945040Smjacob return NULL; 29064095Smjacob 29145040Smjacob list_for_each_entry(other_encoder, &dev->mode_config.encoder_list, head) { 29245040Smjacob if (other_encoder == encoder) 29345040Smjacob continue; 29464095Smjacob other_radeon_encoder = to_radeon_encoder(other_encoder); 29545040Smjacob if (other_radeon_encoder->is_ext_encoder && 29645040Smjacob (radeon_encoder->devices & other_radeon_encoder->devices)) 29764095Smjacob return other_encoder; 29864095Smjacob } 29945040Smjacob return NULL; 30045040Smjacob} 30154671Smjacob 30257146Smjacobu16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder) 30354671Smjacob{ 30454671Smjacob struct drm_encoder *other_encoder = radeon_get_external_encoder(encoder); 30554671Smjacob 30654671Smjacob if (other_encoder) { 30754671Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(other_encoder); 30854671Smjacob 30964095Smjacob switch (radeon_encoder->encoder_id) { 31054671Smjacob case ENCODER_OBJECT_ID_TRAVIS: 31154671Smjacob case ENCODER_OBJECT_ID_NUTMEG: 31254671Smjacob return radeon_encoder->encoder_id; 31364095Smjacob default: 31464095Smjacob return ENCODER_OBJECT_ID_NONE; 31554671Smjacob } 31654671Smjacob } 31754671Smjacob return ENCODER_OBJECT_ID_NONE; 31864095Smjacob} 31964095Smjacob 32054671Smjacobvoid radeon_panel_mode_fixup(struct drm_encoder *encoder, 32154671Smjacob struct drm_display_mode *adjusted_mode) 32264095Smjacob{ 32364095Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 32454671Smjacob struct drm_device *dev = encoder->dev; 32554671Smjacob struct radeon_device *rdev = dev->dev_private; 32654671Smjacob struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 32735388Smjacob unsigned int hblank = native_mode->htotal - native_mode->hdisplay; 32839235Sgibbs unsigned int vblank = native_mode->vtotal - native_mode->vdisplay; 32942462Smjacob unsigned int hover = native_mode->hsync_start - native_mode->hdisplay; 33042462Smjacob unsigned int vover = native_mode->vsync_start - native_mode->vdisplay; 33135388Smjacob unsigned int hsync_width = native_mode->hsync_end - native_mode->hsync_start; 33264095Smjacob unsigned int vsync_width = native_mode->vsync_end - native_mode->vsync_start; 33339235Sgibbs 33439235Sgibbs adjusted_mode->clock = native_mode->clock; 33582689Smjacob adjusted_mode->flags = native_mode->flags; 33635388Smjacob 33746971Smjacob if (ASIC_IS_AVIVO(rdev)) { 33835388Smjacob adjusted_mode->hdisplay = native_mode->hdisplay; 33935388Smjacob adjusted_mode->vdisplay = native_mode->vdisplay; 34039235Sgibbs } 34139235Sgibbs 34239235Sgibbs adjusted_mode->htotal = native_mode->hdisplay + hblank; 34339235Sgibbs adjusted_mode->hsync_start = native_mode->hdisplay + hover; 34439235Sgibbs adjusted_mode->hsync_end = adjusted_mode->hsync_start + hsync_width; 34582689Smjacob 34639235Sgibbs adjusted_mode->vtotal = native_mode->vdisplay + vblank; 34746971Smjacob adjusted_mode->vsync_start = native_mode->vdisplay + vover; 34835388Smjacob adjusted_mode->vsync_end = adjusted_mode->vsync_start + vsync_width; 34935388Smjacob 35082689Smjacob drm_mode_set_crtcinfo(adjusted_mode, CRTC_INTERLACE_HALVE_V); 35139235Sgibbs 35246971Smjacob if (ASIC_IS_AVIVO(rdev)) { 35339235Sgibbs adjusted_mode->crtc_hdisplay = native_mode->hdisplay; 35439235Sgibbs adjusted_mode->crtc_vdisplay = native_mode->vdisplay; 35582689Smjacob } 35635388Smjacob 35746971Smjacob adjusted_mode->crtc_htotal = adjusted_mode->crtc_hdisplay + hblank; 35835388Smjacob adjusted_mode->crtc_hsync_start = adjusted_mode->crtc_hdisplay + hover; 35935388Smjacob adjusted_mode->crtc_hsync_end = adjusted_mode->crtc_hsync_start + hsync_width; 36082689Smjacob 36135388Smjacob adjusted_mode->crtc_vtotal = adjusted_mode->crtc_vdisplay + vblank; 36246971Smjacob adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + vover; 36335388Smjacob adjusted_mode->crtc_vsync_end = adjusted_mode->crtc_vsync_start + vsync_width; 36479234Smjacob 36582689Smjacob} 36645287Smjacob 36746971Smjacobbool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder, 36879234Smjacob u32 pixel_clock) 36935388Smjacob{ 37039235Sgibbs struct drm_device *dev = encoder->dev; 37143420Smjacob struct radeon_device *rdev = dev->dev_private; 37243420Smjacob struct drm_connector *connector; 37339235Sgibbs struct radeon_connector *radeon_connector; 37443420Smjacob struct radeon_connector_atom_dig *dig_connector; 37564095Smjacob 37643420Smjacob connector = radeon_get_connector_for_encoder(encoder); 37742462Smjacob /* if we don't have an active device yet, just use one of 37843420Smjacob * the connectors tied to the encoder. 37939235Sgibbs */ 38043420Smjacob if (!connector) 38143420Smjacob connector = radeon_get_connector_for_encoder_init(encoder); 38243420Smjacob radeon_connector = to_radeon_connector(connector); 38343420Smjacob 38443420Smjacob switch (connector->connector_type) { 38543420Smjacob case DRM_MODE_CONNECTOR_DVII: 38643420Smjacob case DRM_MODE_CONNECTOR_HDMIB: 38764095Smjacob if (radeon_connector->use_digital) { 38843420Smjacob /* HDMI 1.3 supports up to 340 Mhz over single link */ 38944819Smjacob if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 39044819Smjacob if (pixel_clock > 340000) 39144819Smjacob return true; 39244819Smjacob else 39346971Smjacob return false; 39445040Smjacob } else { 39543420Smjacob if (pixel_clock > 165000) 39644819Smjacob return true; 39744819Smjacob else 39844819Smjacob return false; 39943420Smjacob } 40039235Sgibbs } else 40139235Sgibbs return false; 40239235Sgibbs case DRM_MODE_CONNECTOR_DVID: 40339235Sgibbs case DRM_MODE_CONNECTOR_HDMIA: 40439235Sgibbs case DRM_MODE_CONNECTOR_DisplayPort: 40539235Sgibbs dig_connector = radeon_connector->con_priv; 40646971Smjacob if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || 40746971Smjacob (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) 40839235Sgibbs return false; 40939235Sgibbs else { 41043420Smjacob /* HDMI 1.3 supports up to 340 Mhz over single link */ 41135388Smjacob if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 41235388Smjacob if (pixel_clock > 340000) 41335388Smjacob return true; 41469523Smjacob else 41569523Smjacob return false; 41669523Smjacob } else { 41769523Smjacob if (pixel_clock > 165000) 41869523Smjacob return true; 41935388Smjacob else 42035388Smjacob return false; 42135388Smjacob } 42235388Smjacob } 42343420Smjacob default: 42439235Sgibbs return false; 42535388Smjacob } 42635388Smjacob} 42735388Smjacob 42835388Smjacobbool radeon_encoder_is_digital(struct drm_encoder *encoder) 42935388Smjacob{ 43044819Smjacob struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 43135388Smjacob 43235388Smjacob switch (radeon_encoder->encoder_id) { 43335388Smjacob case ENCODER_OBJECT_ID_INTERNAL_LVDS: 43435388Smjacob case ENCODER_OBJECT_ID_INTERNAL_TMDS1: 43564095Smjacob case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: 43635388Smjacob case ENCODER_OBJECT_ID_INTERNAL_LVTM1: 43735388Smjacob case ENCODER_OBJECT_ID_INTERNAL_DVO1: 43835388Smjacob case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1: 43935388Smjacob case ENCODER_OBJECT_ID_INTERNAL_DDI: 44035388Smjacob case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: 44145040Smjacob case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: 44235388Smjacob case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: 44345040Smjacob case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: 44444819Smjacob case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: 44544819Smjacob return true; 44635388Smjacob default: 44735388Smjacob return false; 44835388Smjacob } 44935388Smjacob} 45035388Smjacob