Lines Matching +full:lvds +full:- +full:encoder
2 * Copyright 2007-11 Advanced Micro Devices, Inc.
72 struct drm_device *dev = amdgpu_encoder->base.dev; in amdgpu_atombios_encoder_get_backlight_level()
75 if (!(adev->mode_info.firmware_flags & ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU)) in amdgpu_atombios_encoder_get_backlight_level()
85 struct drm_encoder *encoder = &amdgpu_encoder->base; in amdgpu_atombios_encoder_set_backlight_level() local
86 struct drm_device *dev = amdgpu_encoder->base.dev; in amdgpu_atombios_encoder_set_backlight_level()
90 if (!(adev->mode_info.firmware_flags & ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU)) in amdgpu_atombios_encoder_set_backlight_level()
93 if ((amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) && in amdgpu_atombios_encoder_set_backlight_level()
94 amdgpu_encoder->enc_priv) { in amdgpu_atombios_encoder_set_backlight_level()
95 dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_set_backlight_level()
96 dig->backlight_level = level; in amdgpu_atombios_encoder_set_backlight_level()
97 amdgpu_atombios_encoder_set_backlight_level_to_reg(adev, dig->backlight_level); in amdgpu_atombios_encoder_set_backlight_level()
99 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_set_backlight_level()
105 if (dig->backlight_level == 0) in amdgpu_atombios_encoder_set_backlight_level()
106 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, in amdgpu_atombios_encoder_set_backlight_level()
109 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, in amdgpu_atombios_encoder_set_backlight_level()
111 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, in amdgpu_atombios_encoder_set_backlight_level()
128 if (bd->props.brightness < 0) in amdgpu_atombios_encoder_backlight_level()
130 else if (bd->props.brightness > AMDGPU_MAX_BL_LEVEL) in amdgpu_atombios_encoder_backlight_level()
133 level = bd->props.brightness; in amdgpu_atombios_encoder_backlight_level()
141 struct amdgpu_encoder *amdgpu_encoder = pdata->encoder; in amdgpu_atombios_encoder_update_backlight_status()
153 struct amdgpu_encoder *amdgpu_encoder = pdata->encoder; in amdgpu_atombios_encoder_get_backlight_brightness()
154 struct drm_device *dev = amdgpu_encoder->base.dev; in amdgpu_atombios_encoder_get_backlight_brightness()
168 struct drm_device *dev = amdgpu_encoder->base.dev; in amdgpu_atombios_encoder_init_backlight()
180 if ((adev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) && in amdgpu_atombios_encoder_init_backlight()
181 (adev->pdev->device == 0x6741)) in amdgpu_atombios_encoder_init_backlight()
184 if (!amdgpu_encoder->enc_priv) in amdgpu_atombios_encoder_init_backlight()
187 if (!(adev->mode_info.firmware_flags & ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU)) in amdgpu_atombios_encoder_init_backlight()
200 "amdgpu_bl%d", dev->primary->index); in amdgpu_atombios_encoder_init_backlight()
201 bd = backlight_device_register(bl_name, drm_connector->kdev, in amdgpu_atombios_encoder_init_backlight()
208 pdata->encoder = amdgpu_encoder; in amdgpu_atombios_encoder_init_backlight()
212 dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_init_backlight()
213 dig->bl_dev = bd; in amdgpu_atombios_encoder_init_backlight()
215 bd->props.brightness = amdgpu_atombios_encoder_get_backlight_brightness(bd); in amdgpu_atombios_encoder_init_backlight()
216 bd->props.power = FB_BLANK_UNBLANK; in amdgpu_atombios_encoder_init_backlight()
231 struct drm_device *dev = amdgpu_encoder->base.dev; in amdgpu_atombios_encoder_fini_backlight()
236 if (!amdgpu_encoder->enc_priv) in amdgpu_atombios_encoder_fini_backlight()
239 if (!(adev->mode_info.firmware_flags & ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU)) in amdgpu_atombios_encoder_fini_backlight()
242 dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_fini_backlight()
243 bd = dig->bl_dev; in amdgpu_atombios_encoder_fini_backlight()
244 dig->bl_dev = NULL; in amdgpu_atombios_encoder_fini_backlight()
253 DRM_INFO("amdgpu atom LVDS backlight unloaded\n"); in amdgpu_atombios_encoder_fini_backlight()
259 void amdgpu_atombios_encoder_init_backlight(struct amdgpu_encoder *encoder) in amdgpu_atombios_encoder_init_backlight() argument
263 void amdgpu_atombios_encoder_fini_backlight(struct amdgpu_encoder *encoder) in amdgpu_atombios_encoder_fini_backlight() argument
269 bool amdgpu_atombios_encoder_is_digital(struct drm_encoder *encoder) in amdgpu_atombios_encoder_is_digital() argument
271 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_is_digital()
272 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_is_digital()
284 bool amdgpu_atombios_encoder_mode_fixup(struct drm_encoder *encoder, in amdgpu_atombios_encoder_mode_fixup() argument
288 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_mode_fixup()
290 /* set the active encoder to connector routing */ in amdgpu_atombios_encoder_mode_fixup()
291 amdgpu_encoder_set_active_device(encoder); in amdgpu_atombios_encoder_mode_fixup()
295 if ((mode->flags & DRM_MODE_FLAG_INTERLACE) in amdgpu_atombios_encoder_mode_fixup()
296 && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) in amdgpu_atombios_encoder_mode_fixup()
297 adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; in amdgpu_atombios_encoder_mode_fixup()
300 if (mode->crtc_vsync_start == mode->crtc_vdisplay) in amdgpu_atombios_encoder_mode_fixup()
301 adjusted_mode->crtc_vsync_start++; in amdgpu_atombios_encoder_mode_fixup()
304 if (amdgpu_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) in amdgpu_atombios_encoder_mode_fixup()
305 amdgpu_panel_mode_fixup(encoder, adjusted_mode); in amdgpu_atombios_encoder_mode_fixup()
306 else if (amdgpu_encoder->rmx_type != RMX_OFF) in amdgpu_atombios_encoder_mode_fixup()
307 amdgpu_panel_mode_fixup(encoder, adjusted_mode); in amdgpu_atombios_encoder_mode_fixup()
309 if ((amdgpu_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) || in amdgpu_atombios_encoder_mode_fixup()
310 (amdgpu_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)) { in amdgpu_atombios_encoder_mode_fixup()
311 struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_mode_fixup()
319 amdgpu_atombios_encoder_setup_dac(struct drm_encoder *encoder, int action) in amdgpu_atombios_encoder_setup_dac() argument
321 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_setup_dac()
323 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_setup_dac()
329 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dac()
342 args.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dac()
344 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_setup_dac()
348 static u8 amdgpu_atombios_encoder_get_bpc(struct drm_encoder *encoder) in amdgpu_atombios_encoder_get_bpc() argument
352 if (encoder->crtc) { in amdgpu_atombios_encoder_get_bpc()
353 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(encoder->crtc); in amdgpu_atombios_encoder_get_bpc()
354 bpc = amdgpu_crtc->bpc; in amdgpu_atombios_encoder_get_bpc()
382 amdgpu_atombios_encoder_setup_dvo(struct drm_encoder *encoder, int action) in amdgpu_atombios_encoder_setup_dvo() argument
384 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_setup_dvo()
386 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_setup_dvo()
393 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_setup_dvo()
403 if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dvo()
411 args.dvo.sDVOEncoder.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dvo()
415 if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dvo()
421 args.dvo_v3.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dvo()
427 args.dvo_v4.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dvo()
429 args.dvo_v4.ucBitPerColor = amdgpu_atombios_encoder_get_bpc(encoder); in amdgpu_atombios_encoder_setup_dvo()
441 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_setup_dvo()
444 int amdgpu_atombios_encoder_get_encoder_mode(struct drm_encoder *encoder) in amdgpu_atombios_encoder_get_encoder_mode() argument
446 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_get_encoder_mode()
452 if (amdgpu_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE) in amdgpu_atombios_encoder_get_encoder_mode()
456 if ((amdgpu_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DVO1) || in amdgpu_atombios_encoder_get_encoder_mode()
457 (amdgpu_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1)) in amdgpu_atombios_encoder_get_encoder_mode()
460 connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_get_encoder_mode()
462 * the connectors tied to the encoder. in amdgpu_atombios_encoder_get_encoder_mode()
465 connector = amdgpu_get_connector_for_encoder_init(encoder); in amdgpu_atombios_encoder_get_encoder_mode()
468 switch (connector->connector_type) { in amdgpu_atombios_encoder_get_encoder_mode()
470 case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ in amdgpu_atombios_encoder_get_encoder_mode()
472 if (amdgpu_connector->use_digital && in amdgpu_atombios_encoder_get_encoder_mode()
473 (amdgpu_connector->audio == AMDGPU_AUDIO_ENABLE)) in amdgpu_atombios_encoder_get_encoder_mode()
476 (amdgpu_connector->audio == AMDGPU_AUDIO_AUTO)) in amdgpu_atombios_encoder_get_encoder_mode()
478 else if (amdgpu_connector->use_digital) in amdgpu_atombios_encoder_get_encoder_mode()
482 } else if (amdgpu_connector->use_digital) { in amdgpu_atombios_encoder_get_encoder_mode()
492 if (amdgpu_connector->audio == AMDGPU_AUDIO_ENABLE) in amdgpu_atombios_encoder_get_encoder_mode()
495 (amdgpu_connector->audio == AMDGPU_AUDIO_AUTO)) in amdgpu_atombios_encoder_get_encoder_mode()
507 dig_connector = amdgpu_connector->con_priv; in amdgpu_atombios_encoder_get_encoder_mode()
508 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || in amdgpu_atombios_encoder_get_encoder_mode()
509 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) { in amdgpu_atombios_encoder_get_encoder_mode()
512 if (amdgpu_connector->audio == AMDGPU_AUDIO_ENABLE) in amdgpu_atombios_encoder_get_encoder_mode()
515 (amdgpu_connector->audio == AMDGPU_AUDIO_AUTO)) in amdgpu_atombios_encoder_get_encoder_mode()
540 * DIG Encoder/Transmitter Setup
543 * - 3 DIG transmitter blocks UNIPHY0/1/2 (links A and B).
545 * - 6 DIG encoder blocks.
546 * - DIG to PHY mapping is hardcoded
555 * crtc -> dig encoder -> UNIPHY/LVTMA (1 or 2 links)
557 * crtc0 -> dig2 -> LVTMA links A+B -> TMDS/HDMI
558 * crtc1 -> dig1 -> UNIPHY0 link B -> DP
559 * crtc0 -> dig1 -> UNIPHY2 link A -> LVDS
560 * crtc1 -> dig2 -> UNIPHY1 link B+A -> TMDS/HDMI
572 amdgpu_atombios_encoder_setup_dig_encoder(struct drm_encoder *encoder, in amdgpu_atombios_encoder_setup_dig_encoder() argument
575 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_setup_dig_encoder()
577 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
578 struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_setup_dig_encoder()
579 struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
590 amdgpu_connector->con_priv; in amdgpu_atombios_encoder_setup_dig_encoder()
592 dp_clock = dig_connector->dp_clock; in amdgpu_atombios_encoder_setup_dig_encoder()
593 dp_lane_count = dig_connector->dp_lane_count; in amdgpu_atombios_encoder_setup_dig_encoder()
594 hpd_id = amdgpu_connector->hpd.hpd; in amdgpu_atombios_encoder_setup_dig_encoder()
597 /* no dig encoder assigned */ in amdgpu_atombios_encoder_setup_dig_encoder()
598 if (dig->dig_encoder == -1) in amdgpu_atombios_encoder_setup_dig_encoder()
603 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_setup_dig_encoder()
611 args.v1.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_encoder()
615 args.v1.ucEncoderMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
619 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_encoder()
626 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_encoder()
638 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_encoder()
646 args.v3.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_encoder()
650 args.v3.ucEncoderMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
654 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_encoder()
661 args.v3.acConfig.ucDigSel = dig->dig_encoder; in amdgpu_atombios_encoder_setup_dig_encoder()
662 args.v3.ucBitPerColor = amdgpu_atombios_encoder_get_bpc(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
666 args.v4.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_encoder()
670 args.v4.ucEncoderMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
674 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_encoder()
689 args.v4.acConfig.ucDigSel = dig->dig_encoder; in amdgpu_atombios_encoder_setup_dig_encoder()
690 args.v4.ucBitPerColor = amdgpu_atombios_encoder_get_bpc(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
701 args.v5.asDPPanelModeParam.ucDigId = dig->dig_encoder; in amdgpu_atombios_encoder_setup_dig_encoder()
705 args.v5.asStreamParam.ucDigId = dig->dig_encoder; in amdgpu_atombios_encoder_setup_dig_encoder()
707 amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
710 else if (amdgpu_dig_monitor_is_duallink(encoder, in amdgpu_atombios_encoder_setup_dig_encoder()
711 amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_encoder()
716 cpu_to_le32(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_encoder()
718 amdgpu_atombios_encoder_get_bpc(encoder); in amdgpu_atombios_encoder_setup_dig_encoder()
730 args.v5.asCmdParam.ucDigId = dig->dig_encoder; in amdgpu_atombios_encoder_setup_dig_encoder()
747 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_setup_dig_encoder()
761 amdgpu_atombios_encoder_setup_dig_transmitter(struct drm_encoder *encoder, int action, in amdgpu_atombios_encoder_setup_dig_transmitter() argument
764 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_setup_dig_transmitter()
766 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_setup_dig_transmitter()
767 struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_setup_dig_transmitter()
778 int dig_encoder = dig->dig_encoder; in amdgpu_atombios_encoder_setup_dig_transmitter()
782 connector = amdgpu_get_connector_for_encoder_init(encoder); in amdgpu_atombios_encoder_setup_dig_transmitter()
783 /* just needed to avoid bailing in the encoder check. the encoder in amdgpu_atombios_encoder_setup_dig_transmitter()
788 connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_setup_dig_transmitter()
793 amdgpu_connector->con_priv; in amdgpu_atombios_encoder_setup_dig_transmitter()
795 hpd_id = amdgpu_connector->hpd.hpd; in amdgpu_atombios_encoder_setup_dig_transmitter()
796 dp_clock = dig_connector->dp_clock; in amdgpu_atombios_encoder_setup_dig_transmitter()
797 dp_lane_count = dig_connector->dp_lane_count; in amdgpu_atombios_encoder_setup_dig_transmitter()
799 (amdgpu_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; in amdgpu_atombios_encoder_setup_dig_transmitter()
802 if (encoder->crtc) { in amdgpu_atombios_encoder_setup_dig_transmitter()
803 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(encoder->crtc); in amdgpu_atombios_encoder_setup_dig_transmitter()
804 pll_id = amdgpu_crtc->pll_id; in amdgpu_atombios_encoder_setup_dig_transmitter()
807 /* no dig encoder assigned */ in amdgpu_atombios_encoder_setup_dig_transmitter()
808 if (dig_encoder == -1) in amdgpu_atombios_encoder_setup_dig_transmitter()
811 if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(encoder))) in amdgpu_atombios_encoder_setup_dig_transmitter()
816 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_transmitter()
831 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_setup_dig_transmitter()
847 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
848 args.v1.usPixelClock = cpu_to_le16((amdgpu_encoder->pixel_clock / 2) / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
850 args.v1.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
860 if ((adev->flags & AMD_IS_APU) && in amdgpu_atombios_encoder_setup_dig_transmitter()
861 (amdgpu_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_UNIPHY)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
863 !amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
880 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
887 else if (amdgpu_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
888 if (dig->coherent_mode) in amdgpu_atombios_encoder_setup_dig_transmitter()
890 if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
904 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
905 args.v2.usPixelClock = cpu_to_le16((amdgpu_encoder->pixel_clock / 2) / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
907 args.v2.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
911 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
914 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_transmitter()
929 } else if (amdgpu_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
930 if (dig->coherent_mode) in amdgpu_atombios_encoder_setup_dig_transmitter()
932 if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
946 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
947 args.v3.usPixelClock = cpu_to_le16((amdgpu_encoder->pixel_clock / 2) / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
949 args.v3.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
954 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
959 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
969 if (is_dp && adev->clock.dp_extclk) in amdgpu_atombios_encoder_setup_dig_transmitter()
974 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_transmitter()
988 else if (amdgpu_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
989 if (dig->coherent_mode) in amdgpu_atombios_encoder_setup_dig_transmitter()
991 if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
1005 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
1006 args.v4.usPixelClock = cpu_to_le16((amdgpu_encoder->pixel_clock / 2) / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
1008 args.v4.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
1013 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
1018 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1029 if (adev->clock.dp_extclk) in amdgpu_atombios_encoder_setup_dig_transmitter()
1036 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_transmitter()
1050 else if (amdgpu_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
1051 if (dig->coherent_mode) in amdgpu_atombios_encoder_setup_dig_transmitter()
1053 if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
1062 args.v5.usSymClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
1064 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_transmitter()
1066 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1072 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1078 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1089 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
1094 args.v5.ucDigMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_dig_transmitter()
1096 if (is_dp && adev->clock.dp_extclk) in amdgpu_atombios_encoder_setup_dig_transmitter()
1103 else if (amdgpu_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { in amdgpu_atombios_encoder_setup_dig_transmitter()
1104 if (dig->coherent_mode) in amdgpu_atombios_encoder_setup_dig_transmitter()
1119 args.v6.ulSymClock = cpu_to_le32(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_dig_transmitter()
1121 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_setup_dig_transmitter()
1123 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1129 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1135 if (dig->linkb) in amdgpu_atombios_encoder_setup_dig_transmitter()
1146 else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_dig_transmitter()
1154 args.v6.ucDigMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_dig_transmitter()
1172 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_setup_dig_transmitter()
1180 struct drm_device *dev = amdgpu_connector->base.dev; in amdgpu_atombios_encoder_set_edp_panel_power()
1186 if (connector->connector_type != DRM_MODE_CONNECTOR_eDP) in amdgpu_atombios_encoder_set_edp_panel_power()
1193 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_set_edp_panel_power()
1200 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_set_edp_panel_power()
1207 if (amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd)) in amdgpu_atombios_encoder_set_edp_panel_power()
1223 amdgpu_atombios_encoder_setup_external_encoder(struct drm_encoder *encoder, in amdgpu_atombios_encoder_setup_external_encoder() argument
1227 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_setup_external_encoder()
1229 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_setup_external_encoder()
1238 u32 ext_enum = (ext_amdgpu_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; in amdgpu_atombios_encoder_setup_external_encoder()
1241 connector = amdgpu_get_connector_for_encoder_init(encoder); in amdgpu_atombios_encoder_setup_external_encoder()
1243 connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_setup_external_encoder()
1248 amdgpu_connector->con_priv; in amdgpu_atombios_encoder_setup_external_encoder()
1250 dp_clock = dig_connector->dp_clock; in amdgpu_atombios_encoder_setup_external_encoder()
1251 dp_lane_count = dig_connector->dp_lane_count; in amdgpu_atombios_encoder_setup_external_encoder()
1253 (amdgpu_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; in amdgpu_atombios_encoder_setup_external_encoder()
1258 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_setup_external_encoder()
1270 args.v1.sDigEncoder.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_external_encoder()
1272 amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_external_encoder()
1278 } else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_external_encoder()
1288 args.v3.sExtEncoder.usPixelClock = cpu_to_le16(amdgpu_encoder->pixel_clock / 10); in amdgpu_atombios_encoder_setup_external_encoder()
1290 amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_setup_external_encoder()
1298 } else if (amdgpu_dig_monitor_is_duallink(encoder, amdgpu_encoder->pixel_clock)) in amdgpu_atombios_encoder_setup_external_encoder()
1313 args.v3.sExtEncoder.ucBitPerColor = amdgpu_atombios_encoder_get_bpc(encoder); in amdgpu_atombios_encoder_setup_external_encoder()
1324 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_setup_external_encoder()
1328 amdgpu_atombios_encoder_setup_dig(struct drm_encoder *encoder, int action) in amdgpu_atombios_encoder_setup_dig() argument
1330 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_setup_dig()
1331 struct drm_encoder *ext_encoder = amdgpu_get_external_encoder(encoder); in amdgpu_atombios_encoder_setup_dig()
1332 struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_setup_dig()
1333 struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_setup_dig()
1339 amdgpu_dig_connector = amdgpu_connector->con_priv; in amdgpu_atombios_encoder_setup_dig()
1344 dig->panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; in amdgpu_atombios_encoder_setup_dig()
1346 dig->panel_mode = amdgpu_atombios_dp_get_panel_mode(encoder, connector); in amdgpu_atombios_encoder_setup_dig()
1348 /* setup and enable the encoder */ in amdgpu_atombios_encoder_setup_dig()
1349 amdgpu_atombios_encoder_setup_dig_encoder(encoder, ATOM_ENCODER_CMD_SETUP, 0); in amdgpu_atombios_encoder_setup_dig()
1350 amdgpu_atombios_encoder_setup_dig_encoder(encoder, in amdgpu_atombios_encoder_setup_dig()
1352 dig->panel_mode); in amdgpu_atombios_encoder_setup_dig()
1354 amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, in amdgpu_atombios_encoder_setup_dig()
1356 if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(encoder)) && in amdgpu_atombios_encoder_setup_dig()
1358 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { in amdgpu_atombios_encoder_setup_dig()
1361 amdgpu_dig_connector->edp_on = true; in amdgpu_atombios_encoder_setup_dig()
1365 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, in amdgpu_atombios_encoder_setup_dig()
1368 if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(encoder)) && in amdgpu_atombios_encoder_setup_dig()
1371 amdgpu_atombios_dp_link_train(encoder, connector); in amdgpu_atombios_encoder_setup_dig()
1372 amdgpu_atombios_encoder_setup_dig_encoder(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0); in amdgpu_atombios_encoder_setup_dig()
1374 if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) in amdgpu_atombios_encoder_setup_dig()
1375 amdgpu_atombios_encoder_set_backlight_level(amdgpu_encoder, dig->backlight_level); in amdgpu_atombios_encoder_setup_dig()
1377 amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, ATOM_ENABLE); in amdgpu_atombios_encoder_setup_dig()
1379 if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(encoder)) && in amdgpu_atombios_encoder_setup_dig()
1381 amdgpu_atombios_encoder_setup_dig_encoder(encoder, in amdgpu_atombios_encoder_setup_dig()
1384 amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, ATOM_DISABLE); in amdgpu_atombios_encoder_setup_dig()
1385 if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) in amdgpu_atombios_encoder_setup_dig()
1386 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, in amdgpu_atombios_encoder_setup_dig()
1389 if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(encoder)) && in amdgpu_atombios_encoder_setup_dig()
1393 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, in amdgpu_atombios_encoder_setup_dig()
1395 if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(encoder)) && in amdgpu_atombios_encoder_setup_dig()
1397 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { in amdgpu_atombios_encoder_setup_dig()
1400 amdgpu_dig_connector->edp_on = false; in amdgpu_atombios_encoder_setup_dig()
1407 amdgpu_atombios_encoder_dpms(struct drm_encoder *encoder, int mode) in amdgpu_atombios_encoder_dpms() argument
1409 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_dpms()
1411 DRM_DEBUG_KMS("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n", in amdgpu_atombios_encoder_dpms()
1412 amdgpu_encoder->encoder_id, mode, amdgpu_encoder->devices, in amdgpu_atombios_encoder_dpms()
1413 amdgpu_encoder->active_device); in amdgpu_atombios_encoder_dpms()
1414 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_dpms()
1421 amdgpu_atombios_encoder_setup_dig(encoder, ATOM_ENABLE); in amdgpu_atombios_encoder_dpms()
1426 amdgpu_atombios_encoder_setup_dig(encoder, ATOM_DISABLE); in amdgpu_atombios_encoder_dpms()
1433 amdgpu_atombios_encoder_setup_dvo(encoder, ATOM_ENABLE); in amdgpu_atombios_encoder_dpms()
1438 amdgpu_atombios_encoder_setup_dvo(encoder, ATOM_DISABLE); in amdgpu_atombios_encoder_dpms()
1445 amdgpu_atombios_encoder_setup_dac(encoder, ATOM_ENABLE); in amdgpu_atombios_encoder_dpms()
1450 amdgpu_atombios_encoder_setup_dac(encoder, ATOM_DISABLE); in amdgpu_atombios_encoder_dpms()
1466 amdgpu_atombios_encoder_set_crtc_source(struct drm_encoder *encoder) in amdgpu_atombios_encoder_set_crtc_source() argument
1468 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_set_crtc_source()
1470 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1471 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(encoder->crtc); in amdgpu_atombios_encoder_set_crtc_source()
1479 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_set_crtc_source()
1487 args.v1.ucCRTC = amdgpu_crtc->crtc_id; in amdgpu_atombios_encoder_set_crtc_source()
1488 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_set_crtc_source()
1495 if (amdgpu_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) in amdgpu_atombios_encoder_set_crtc_source()
1507 if (amdgpu_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1509 else if (amdgpu_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1516 if (amdgpu_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1518 else if (amdgpu_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1526 args.v2.ucCRTC = amdgpu_crtc->crtc_id; in amdgpu_atombios_encoder_set_crtc_source()
1527 if (amdgpu_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE) { in amdgpu_atombios_encoder_set_crtc_source()
1528 struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1530 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) in amdgpu_atombios_encoder_set_crtc_source()
1532 else if (connector->connector_type == DRM_MODE_CONNECTOR_VGA) in amdgpu_atombios_encoder_set_crtc_source()
1535 args.v2.ucEncodeMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1536 } else if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { in amdgpu_atombios_encoder_set_crtc_source()
1539 args.v2.ucEncodeMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1541 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_set_crtc_source()
1547 dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_set_crtc_source()
1548 switch (dig->dig_encoder) { in amdgpu_atombios_encoder_set_crtc_source()
1576 if (amdgpu_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1578 else if (amdgpu_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1584 if (amdgpu_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1586 else if (amdgpu_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1594 args.v3.ucCRTC = amdgpu_crtc->crtc_id; in amdgpu_atombios_encoder_set_crtc_source()
1595 if (amdgpu_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE) { in amdgpu_atombios_encoder_set_crtc_source()
1596 struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1598 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) in amdgpu_atombios_encoder_set_crtc_source()
1600 else if (connector->connector_type == DRM_MODE_CONNECTOR_VGA) in amdgpu_atombios_encoder_set_crtc_source()
1603 args.v2.ucEncodeMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1604 } else if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { in amdgpu_atombios_encoder_set_crtc_source()
1607 args.v2.ucEncodeMode = amdgpu_atombios_encoder_get_encoder_mode(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1609 args.v3.ucDstBpc = amdgpu_atombios_encoder_get_bpc(encoder); in amdgpu_atombios_encoder_set_crtc_source()
1610 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_set_crtc_source()
1616 dig = amdgpu_encoder->enc_priv; in amdgpu_atombios_encoder_set_crtc_source()
1617 switch (dig->dig_encoder) { in amdgpu_atombios_encoder_set_crtc_source()
1645 if (amdgpu_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1647 else if (amdgpu_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1653 if (amdgpu_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1655 else if (amdgpu_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT)) in amdgpu_atombios_encoder_set_crtc_source()
1669 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_set_crtc_source()
1677 struct drm_encoder *encoder; in amdgpu_atombios_encoder_init_dig() local
1679 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { in amdgpu_atombios_encoder_init_dig()
1680 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_init_dig()
1681 struct drm_encoder *ext_encoder = amdgpu_get_external_encoder(encoder); in amdgpu_atombios_encoder_init_dig()
1683 switch (amdgpu_encoder->encoder_id) { in amdgpu_atombios_encoder_init_dig()
1688 amdgpu_atombios_encoder_setup_dig_transmitter(encoder, ATOM_TRANSMITTER_ACTION_INIT, in amdgpu_atombios_encoder_init_dig()
1694 amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, in amdgpu_atombios_encoder_init_dig()
1700 amdgpu_atombios_encoder_dac_load_detect(struct drm_encoder *encoder, in amdgpu_atombios_encoder_dac_load_detect() argument
1703 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_dac_load_detect()
1705 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_dac_load_detect()
1708 if (amdgpu_encoder->devices & (ATOM_DEVICE_TV_SUPPORT | in amdgpu_atombios_encoder_dac_load_detect()
1717 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_encoder_dac_load_detect()
1722 if ((amdgpu_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1) || in amdgpu_atombios_encoder_dac_load_detect()
1723 (amdgpu_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1)) in amdgpu_atombios_encoder_dac_load_detect()
1728 if (amdgpu_connector->devices & ATOM_DEVICE_CRT1_SUPPORT) in amdgpu_atombios_encoder_dac_load_detect()
1730 else if (amdgpu_connector->devices & ATOM_DEVICE_CRT2_SUPPORT) in amdgpu_atombios_encoder_dac_load_detect()
1732 else if (amdgpu_connector->devices & ATOM_DEVICE_CV_SUPPORT) { in amdgpu_atombios_encoder_dac_load_detect()
1736 } else if (amdgpu_connector->devices & ATOM_DEVICE_TV1_SUPPORT) { in amdgpu_atombios_encoder_dac_load_detect()
1742 amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); in amdgpu_atombios_encoder_dac_load_detect()
1750 amdgpu_atombios_encoder_dac_detect(struct drm_encoder *encoder, in amdgpu_atombios_encoder_dac_detect() argument
1753 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_dac_detect()
1755 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_dac_detect()
1759 if (!amdgpu_atombios_encoder_dac_load_detect(encoder, connector)) { in amdgpu_atombios_encoder_dac_detect()
1766 DRM_DEBUG_KMS("Bios 0 scratch %x %08x\n", bios_0_scratch, amdgpu_encoder->devices); in amdgpu_atombios_encoder_dac_detect()
1767 if (amdgpu_connector->devices & ATOM_DEVICE_CRT1_SUPPORT) { in amdgpu_atombios_encoder_dac_detect()
1771 if (amdgpu_connector->devices & ATOM_DEVICE_CRT2_SUPPORT) { in amdgpu_atombios_encoder_dac_detect()
1775 if (amdgpu_connector->devices & ATOM_DEVICE_CV_SUPPORT) { in amdgpu_atombios_encoder_dac_detect()
1779 if (amdgpu_connector->devices & ATOM_DEVICE_TV1_SUPPORT) { in amdgpu_atombios_encoder_dac_detect()
1789 amdgpu_atombios_encoder_dig_detect(struct drm_encoder *encoder, in amdgpu_atombios_encoder_dig_detect() argument
1792 struct drm_device *dev = encoder->dev; in amdgpu_atombios_encoder_dig_detect()
1794 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_dig_detect()
1796 struct drm_encoder *ext_encoder = amdgpu_get_external_encoder(encoder); in amdgpu_atombios_encoder_dig_detect()
1802 if ((amdgpu_connector->devices & ATOM_DEVICE_CRT_SUPPORT) == 0) in amdgpu_atombios_encoder_dig_detect()
1806 amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, in amdgpu_atombios_encoder_dig_detect()
1811 DRM_DEBUG_KMS("Bios 0 scratch %x %08x\n", bios_0_scratch, amdgpu_encoder->devices); in amdgpu_atombios_encoder_dig_detect()
1812 if (amdgpu_connector->devices & ATOM_DEVICE_CRT1_SUPPORT) { in amdgpu_atombios_encoder_dig_detect()
1816 if (amdgpu_connector->devices & ATOM_DEVICE_CRT2_SUPPORT) { in amdgpu_atombios_encoder_dig_detect()
1820 if (amdgpu_connector->devices & ATOM_DEVICE_CV_SUPPORT) { in amdgpu_atombios_encoder_dig_detect()
1824 if (amdgpu_connector->devices & ATOM_DEVICE_TV1_SUPPORT) { in amdgpu_atombios_encoder_dig_detect()
1834 amdgpu_atombios_encoder_setup_ext_encoder_ddc(struct drm_encoder *encoder) in amdgpu_atombios_encoder_setup_ext_encoder_ddc() argument
1836 struct drm_encoder *ext_encoder = amdgpu_get_external_encoder(encoder); in amdgpu_atombios_encoder_setup_ext_encoder_ddc()
1840 amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, in amdgpu_atombios_encoder_setup_ext_encoder_ddc()
1847 struct drm_encoder *encoder, in amdgpu_atombios_encoder_set_bios_scratch_regs() argument
1850 struct drm_device *dev = connector->dev; in amdgpu_atombios_encoder_set_bios_scratch_regs()
1854 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); in amdgpu_atombios_encoder_set_bios_scratch_regs()
1861 if ((amdgpu_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1862 (amdgpu_connector->devices & ATOM_DEVICE_LCD1_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1875 if ((amdgpu_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1876 (amdgpu_connector->devices & ATOM_DEVICE_CRT1_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1889 if ((amdgpu_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1890 (amdgpu_connector->devices & ATOM_DEVICE_CRT2_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1903 if ((amdgpu_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1904 (amdgpu_connector->devices & ATOM_DEVICE_DFP1_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1917 if ((amdgpu_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1918 (amdgpu_connector->devices & ATOM_DEVICE_DFP2_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1931 if ((amdgpu_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1932 (amdgpu_connector->devices & ATOM_DEVICE_DFP3_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1945 if ((amdgpu_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1946 (amdgpu_connector->devices & ATOM_DEVICE_DFP4_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1959 if ((amdgpu_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1960 (amdgpu_connector->devices & ATOM_DEVICE_DFP5_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1973 if ((amdgpu_encoder->devices & ATOM_DEVICE_DFP6_SUPPORT) && in amdgpu_atombios_encoder_set_bios_scratch_regs()
1974 (amdgpu_connector->devices & ATOM_DEVICE_DFP6_SUPPORT)) { in amdgpu_atombios_encoder_set_bios_scratch_regs()
1999 amdgpu_atombios_encoder_get_lcd_info(struct amdgpu_encoder *encoder) in amdgpu_atombios_encoder_get_lcd_info() argument
2001 struct drm_device *dev = encoder->base.dev; in amdgpu_atombios_encoder_get_lcd_info()
2003 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_encoder_get_lcd_info()
2008 struct amdgpu_encoder_atom_dig *lvds = NULL; in amdgpu_atombios_encoder_get_lcd_info() local
2009 int encoder_enum = (encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; in amdgpu_atombios_encoder_get_lcd_info()
2011 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, NULL, in amdgpu_atombios_encoder_get_lcd_info()
2014 (union lvds_info *)(mode_info->atom_context->bios + data_offset); in amdgpu_atombios_encoder_get_lcd_info()
2015 lvds = in amdgpu_atombios_encoder_get_lcd_info()
2018 if (!lvds) in amdgpu_atombios_encoder_get_lcd_info()
2021 lvds->native_mode.clock = in amdgpu_atombios_encoder_get_lcd_info()
2022 le16_to_cpu(lvds_info->info.sLCDTiming.usPixClk) * 10; in amdgpu_atombios_encoder_get_lcd_info()
2023 lvds->native_mode.hdisplay = in amdgpu_atombios_encoder_get_lcd_info()
2024 le16_to_cpu(lvds_info->info.sLCDTiming.usHActive); in amdgpu_atombios_encoder_get_lcd_info()
2025 lvds->native_mode.vdisplay = in amdgpu_atombios_encoder_get_lcd_info()
2026 le16_to_cpu(lvds_info->info.sLCDTiming.usVActive); in amdgpu_atombios_encoder_get_lcd_info()
2027 lvds->native_mode.htotal = lvds->native_mode.hdisplay + in amdgpu_atombios_encoder_get_lcd_info()
2028 le16_to_cpu(lvds_info->info.sLCDTiming.usHBlanking_Time); in amdgpu_atombios_encoder_get_lcd_info()
2029 lvds->native_mode.hsync_start = lvds->native_mode.hdisplay + in amdgpu_atombios_encoder_get_lcd_info()
2030 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncOffset); in amdgpu_atombios_encoder_get_lcd_info()
2031 lvds->native_mode.hsync_end = lvds->native_mode.hsync_start + in amdgpu_atombios_encoder_get_lcd_info()
2032 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncWidth); in amdgpu_atombios_encoder_get_lcd_info()
2033 lvds->native_mode.vtotal = lvds->native_mode.vdisplay + in amdgpu_atombios_encoder_get_lcd_info()
2034 le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time); in amdgpu_atombios_encoder_get_lcd_info()
2035 lvds->native_mode.vsync_start = lvds->native_mode.vdisplay + in amdgpu_atombios_encoder_get_lcd_info()
2036 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset); in amdgpu_atombios_encoder_get_lcd_info()
2037 lvds->native_mode.vsync_end = lvds->native_mode.vsync_start + in amdgpu_atombios_encoder_get_lcd_info()
2038 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth); in amdgpu_atombios_encoder_get_lcd_info()
2039 lvds->panel_pwr_delay = in amdgpu_atombios_encoder_get_lcd_info()
2040 le16_to_cpu(lvds_info->info.usOffDelayInMs); in amdgpu_atombios_encoder_get_lcd_info()
2041 lvds->lcd_misc = lvds_info->info.ucLVDS_Misc; in amdgpu_atombios_encoder_get_lcd_info()
2043 misc = le16_to_cpu(lvds_info->info.sLCDTiming.susModeMiscInfo.usAccess); in amdgpu_atombios_encoder_get_lcd_info()
2045 lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC; in amdgpu_atombios_encoder_get_lcd_info()
2047 lvds->native_mode.flags |= DRM_MODE_FLAG_NHSYNC; in amdgpu_atombios_encoder_get_lcd_info()
2049 lvds->native_mode.flags |= DRM_MODE_FLAG_CSYNC; in amdgpu_atombios_encoder_get_lcd_info()
2051 lvds->native_mode.flags |= DRM_MODE_FLAG_INTERLACE; in amdgpu_atombios_encoder_get_lcd_info()
2053 lvds->native_mode.flags |= DRM_MODE_FLAG_DBLSCAN; in amdgpu_atombios_encoder_get_lcd_info()
2055 lvds->native_mode.width_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageHSize); in amdgpu_atombios_encoder_get_lcd_info()
2056 lvds->native_mode.height_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageVSize); in amdgpu_atombios_encoder_get_lcd_info()
2059 drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V); in amdgpu_atombios_encoder_get_lcd_info()
2061 lvds->lcd_ss_id = lvds_info->info.ucSS_Id; in amdgpu_atombios_encoder_get_lcd_info()
2063 encoder->native_mode = lvds->native_mode; in amdgpu_atombios_encoder_get_lcd_info()
2066 lvds->linkb = true; in amdgpu_atombios_encoder_get_lcd_info()
2068 lvds->linkb = false; in amdgpu_atombios_encoder_get_lcd_info()
2071 if (le16_to_cpu(lvds_info->info.usModePatchTableOffset)) { in amdgpu_atombios_encoder_get_lcd_info()
2079 record = (u8 *)(mode_info->atom_context->bios + in amdgpu_atombios_encoder_get_lcd_info()
2080 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in amdgpu_atombios_encoder_get_lcd_info()
2083 record = (u8 *)(mode_info->atom_context->bios + in amdgpu_atombios_encoder_get_lcd_info()
2085 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in amdgpu_atombios_encoder_get_lcd_info()
2099 if (fake_edid_record->ucFakeEDIDLength) { in amdgpu_atombios_encoder_get_lcd_info()
2102 max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); in amdgpu_atombios_encoder_get_lcd_info()
2105 memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], in amdgpu_atombios_encoder_get_lcd_info()
2106 fake_edid_record->ucFakeEDIDLength); in amdgpu_atombios_encoder_get_lcd_info()
2109 adev->mode_info.bios_hardcoded_edid = edid; in amdgpu_atombios_encoder_get_lcd_info()
2110 adev->mode_info.bios_hardcoded_edid_size = edid_size; in amdgpu_atombios_encoder_get_lcd_info()
2115 record += fake_edid_record->ucFakeEDIDLength ? in amdgpu_atombios_encoder_get_lcd_info()
2116 fake_edid_record->ucFakeEDIDLength + 2 : in amdgpu_atombios_encoder_get_lcd_info()
2121 lvds->native_mode.width_mm = panel_res_record->usHSize; in amdgpu_atombios_encoder_get_lcd_info()
2122 lvds->native_mode.height_mm = panel_res_record->usVSize; in amdgpu_atombios_encoder_get_lcd_info()
2135 return lvds; in amdgpu_atombios_encoder_get_lcd_info()
2141 int encoder_enum = (amdgpu_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; in amdgpu_atombios_encoder_get_dig_info()
2148 dig->coherent_mode = true; in amdgpu_atombios_encoder_get_dig_info()
2149 dig->dig_encoder = -1; in amdgpu_atombios_encoder_get_dig_info()
2152 dig->linkb = true; in amdgpu_atombios_encoder_get_dig_info()
2154 dig->linkb = false; in amdgpu_atombios_encoder_get_dig_info()