Lines Matching +full:lvds +full:- +full:encoder
2 * Copyright 2007-8 Advanced Micro Devices, Inc.
43 static void radeon_legacy_encoder_disable(struct drm_encoder *encoder) in radeon_legacy_encoder_disable() argument
45 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_encoder_disable()
48 encoder_funcs = encoder->helper_private; in radeon_legacy_encoder_disable()
49 encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_encoder_disable()
50 radeon_encoder->active_device = 0; in radeon_legacy_encoder_disable()
53 static void radeon_legacy_lvds_update(struct drm_encoder *encoder, int mode) in radeon_legacy_lvds_update() argument
55 struct drm_device *dev = encoder->dev; in radeon_legacy_lvds_update()
56 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_lvds_update()
57 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_lvds_update()
67 if (radeon_encoder->enc_priv) { in radeon_legacy_lvds_update()
68 if (rdev->is_atom_bios) { in radeon_legacy_lvds_update()
69 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_update() local
70 panel_pwr_delay = lvds->panel_pwr_delay; in radeon_legacy_lvds_update()
71 if (lvds->bl_dev) in radeon_legacy_lvds_update()
72 backlight_level = lvds->backlight_level; in radeon_legacy_lvds_update()
74 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_update() local
75 panel_pwr_delay = lvds->panel_pwr_delay; in radeon_legacy_lvds_update()
76 if (lvds->bl_dev) in radeon_legacy_lvds_update()
77 backlight_level = lvds->backlight_level; in radeon_legacy_lvds_update()
81 /* macs (and possibly some x86 oem systems?) wire up LVDS strangely in radeon_legacy_lvds_update()
84 if ((rdev->mode_info.connector_table == CT_IBOOK) || in radeon_legacy_lvds_update()
85 (rdev->mode_info.connector_table == CT_POWERBOOK_EXTERNAL) || in radeon_legacy_lvds_update()
86 (rdev->mode_info.connector_table == CT_POWERBOOK_INTERNAL) || in radeon_legacy_lvds_update()
87 (rdev->mode_info.connector_table == CT_POWERBOOK_VGA)) in radeon_legacy_lvds_update()
135 if (rdev->is_atom_bios) in radeon_legacy_lvds_update()
136 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_lvds_update()
138 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_lvds_update()
142 static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_lvds_dpms() argument
144 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_lvds_dpms()
145 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_lvds_dpms()
148 if (radeon_encoder->enc_priv) { in radeon_legacy_lvds_dpms()
149 if (rdev->is_atom_bios) { in radeon_legacy_lvds_dpms()
150 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_dpms() local
151 lvds->dpms_mode = mode; in radeon_legacy_lvds_dpms()
153 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_dpms() local
154 lvds->dpms_mode = mode; in radeon_legacy_lvds_dpms()
158 radeon_legacy_lvds_update(encoder, mode); in radeon_legacy_lvds_dpms()
161 static void radeon_legacy_lvds_prepare(struct drm_encoder *encoder) in radeon_legacy_lvds_prepare() argument
163 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_lvds_prepare()
165 if (rdev->is_atom_bios) in radeon_legacy_lvds_prepare()
166 radeon_atom_output_lock(encoder, true); in radeon_legacy_lvds_prepare()
168 radeon_combios_output_lock(encoder, true); in radeon_legacy_lvds_prepare()
169 radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_lvds_prepare()
172 static void radeon_legacy_lvds_commit(struct drm_encoder *encoder) in radeon_legacy_lvds_commit() argument
174 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_lvds_commit()
176 radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_lvds_commit()
177 if (rdev->is_atom_bios) in radeon_legacy_lvds_commit()
178 radeon_atom_output_lock(encoder, false); in radeon_legacy_lvds_commit()
180 radeon_combios_output_lock(encoder, false); in radeon_legacy_lvds_commit()
183 static void radeon_legacy_lvds_mode_set(struct drm_encoder *encoder, in radeon_legacy_lvds_mode_set() argument
187 struct drm_device *dev = encoder->dev; in radeon_legacy_lvds_mode_set()
188 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_lvds_mode_set()
189 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_lvds_mode_set()
190 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_lvds_mode_set()
199 if (rdev->is_atom_bios) { in radeon_legacy_lvds_mode_set()
203 radeon_encoder->pixel_clock = adjusted_mode->clock; in radeon_legacy_lvds_mode_set()
204 atombios_digital_setup(encoder, PANEL_ENCODER_ACTION_ENABLE); in radeon_legacy_lvds_mode_set()
207 struct radeon_encoder_lvds *lvds = (struct radeon_encoder_lvds *)radeon_encoder->enc_priv; in radeon_legacy_lvds_mode_set() local
208 if (lvds) { in radeon_legacy_lvds_mode_set()
209 DRM_DEBUG_KMS("bios LVDS_GEN_CNTL: 0x%x\n", lvds->lvds_gen_cntl); in radeon_legacy_lvds_mode_set()
210 lvds_gen_cntl = lvds->lvds_gen_cntl; in radeon_legacy_lvds_mode_set()
213 lvds_ss_gen_cntl |= ((lvds->panel_digon_delay << RADEON_LVDS_PWRSEQ_DELAY1_SHIFT) | in radeon_legacy_lvds_mode_set()
214 (lvds->panel_blon_delay << RADEON_LVDS_PWRSEQ_DELAY2_SHIFT)); in radeon_legacy_lvds_mode_set()
227 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_lvds_mode_set()
229 if (radeon_encoder->rmx_type != RMX_OFF) in radeon_legacy_lvds_mode_set()
244 if (rdev->family == CHIP_RV410) in radeon_legacy_lvds_mode_set()
247 if (rdev->is_atom_bios) in radeon_legacy_lvds_mode_set()
248 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_lvds_mode_set()
250 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_lvds_mode_set()
253 static bool radeon_legacy_mode_fixup(struct drm_encoder *encoder, in radeon_legacy_mode_fixup() argument
257 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_mode_fixup()
259 /* set the active encoder to connector routing */ in radeon_legacy_mode_fixup()
260 radeon_encoder_set_active_device(encoder); in radeon_legacy_mode_fixup()
263 /* get the native mode for LVDS */ in radeon_legacy_mode_fixup()
264 if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) in radeon_legacy_mode_fixup()
265 radeon_panel_mode_fixup(encoder, adjusted_mode); in radeon_legacy_mode_fixup()
282 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_get_backlight_level()
283 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_get_backlight_level()
295 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_set_backlight_level()
296 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_set_backlight_level()
299 if (radeon_encoder->enc_priv) { in radeon_legacy_set_backlight_level()
300 if (rdev->is_atom_bios) { in radeon_legacy_set_backlight_level()
301 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_set_backlight_level() local
302 if (lvds->backlight_level > 0) in radeon_legacy_set_backlight_level()
303 dpms_mode = lvds->dpms_mode; in radeon_legacy_set_backlight_level()
306 lvds->backlight_level = level; in radeon_legacy_set_backlight_level()
308 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_set_backlight_level() local
309 if (lvds->backlight_level > 0) in radeon_legacy_set_backlight_level()
310 dpms_mode = lvds->dpms_mode; in radeon_legacy_set_backlight_level()
313 lvds->backlight_level = level; in radeon_legacy_set_backlight_level()
317 radeon_legacy_lvds_update(&radeon_encoder->base, dpms_mode); in radeon_legacy_set_backlight_level()
328 if (bd->props.brightness < 0) in radeon_legacy_lvds_level()
330 else if (bd->props.brightness > RADEON_MAX_BL_LEVEL) in radeon_legacy_lvds_level()
333 level = bd->props.brightness; in radeon_legacy_lvds_level()
335 if (pdata->negative) in radeon_legacy_lvds_level()
336 level = RADEON_MAX_BL_LEVEL - level; in radeon_legacy_lvds_level()
344 struct radeon_encoder *radeon_encoder = pdata->encoder; in radeon_legacy_backlight_update_status()
355 struct radeon_encoder *radeon_encoder = pdata->encoder; in radeon_legacy_backlight_get_brightness()
356 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_backlight_get_brightness()
357 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_backlight_get_brightness()
363 return pdata->negative ? RADEON_MAX_BL_LEVEL - backlight_level : backlight_level; in radeon_legacy_backlight_get_brightness()
374 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_backlight_init()
375 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_backlight_init()
382 if (!radeon_encoder->enc_priv) in radeon_legacy_backlight_init()
401 "radeon_bl%d", dev->primary->index); in radeon_legacy_backlight_init()
402 bd = backlight_device_register(bl_name, drm_connector->kdev, in radeon_legacy_backlight_init()
409 pdata->encoder = radeon_encoder; in radeon_legacy_backlight_init()
418 pdata->negative = true; in radeon_legacy_backlight_init()
420 pdata->negative = false; in radeon_legacy_backlight_init()
425 pdata->negative = (rdev->family != CHIP_RV200 && in radeon_legacy_backlight_init()
426 rdev->family != CHIP_RV250 && in radeon_legacy_backlight_init()
427 rdev->family != CHIP_RV280 && in radeon_legacy_backlight_init()
428 rdev->family != CHIP_RV350); in radeon_legacy_backlight_init()
431 pdata->negative = (pdata->negative || in radeon_legacy_backlight_init()
438 if (rdev->is_atom_bios) { in radeon_legacy_backlight_init()
439 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_init() local
440 lvds->bl_dev = bd; in radeon_legacy_backlight_init()
442 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_init() local
443 lvds->bl_dev = bd; in radeon_legacy_backlight_init()
446 bd->props.brightness = radeon_legacy_backlight_get_brightness(bd); in radeon_legacy_backlight_init()
447 bd->props.power = FB_BLANK_UNBLANK; in radeon_legacy_backlight_init()
450 DRM_INFO("radeon legacy LVDS backlight initialized\n"); in radeon_legacy_backlight_init()
451 rdev->mode_info.bl_encoder = radeon_encoder; in radeon_legacy_backlight_init()
462 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_backlight_exit()
463 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_backlight_exit()
466 if (!radeon_encoder->enc_priv) in radeon_legacy_backlight_exit()
469 if (rdev->is_atom_bios) { in radeon_legacy_backlight_exit()
470 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_exit() local
471 bd = lvds->bl_dev; in radeon_legacy_backlight_exit()
472 lvds->bl_dev = NULL; in radeon_legacy_backlight_exit()
474 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_exit() local
475 bd = lvds->bl_dev; in radeon_legacy_backlight_exit()
476 lvds->bl_dev = NULL; in radeon_legacy_backlight_exit()
486 DRM_INFO("radeon legacy LVDS backlight unloaded\n"); in radeon_legacy_backlight_exit()
492 void radeon_legacy_backlight_init(struct radeon_encoder *encoder) in radeon_legacy_backlight_init() argument
496 static void radeon_legacy_backlight_exit(struct radeon_encoder *encoder) in radeon_legacy_backlight_exit() argument
503 static void radeon_lvds_enc_destroy(struct drm_encoder *encoder) in radeon_lvds_enc_destroy() argument
505 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_lvds_enc_destroy()
507 if (radeon_encoder->enc_priv) { in radeon_lvds_enc_destroy()
509 kfree(radeon_encoder->enc_priv); in radeon_lvds_enc_destroy()
511 drm_encoder_cleanup(encoder); in radeon_lvds_enc_destroy()
519 static void radeon_legacy_primary_dac_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_primary_dac_dpms() argument
521 struct drm_device *dev = encoder->dev; in radeon_legacy_primary_dac_dpms()
522 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_primary_dac_dpms()
549 if (!(rdev->flags & RADEON_SINGLE_CRTC)) in radeon_legacy_primary_dac_dpms()
554 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_dpms()
555 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_primary_dac_dpms()
557 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_primary_dac_dpms()
561 static void radeon_legacy_primary_dac_prepare(struct drm_encoder *encoder) in radeon_legacy_primary_dac_prepare() argument
563 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_primary_dac_prepare()
565 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_prepare()
566 radeon_atom_output_lock(encoder, true); in radeon_legacy_primary_dac_prepare()
568 radeon_combios_output_lock(encoder, true); in radeon_legacy_primary_dac_prepare()
569 radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_primary_dac_prepare()
572 static void radeon_legacy_primary_dac_commit(struct drm_encoder *encoder) in radeon_legacy_primary_dac_commit() argument
574 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_primary_dac_commit()
576 radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_primary_dac_commit()
578 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_commit()
579 radeon_atom_output_lock(encoder, false); in radeon_legacy_primary_dac_commit()
581 radeon_combios_output_lock(encoder, false); in radeon_legacy_primary_dac_commit()
584 static void radeon_legacy_primary_dac_mode_set(struct drm_encoder *encoder, in radeon_legacy_primary_dac_mode_set() argument
588 struct drm_device *dev = encoder->dev; in radeon_legacy_primary_dac_mode_set()
589 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_primary_dac_mode_set()
590 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_primary_dac_mode_set()
591 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_primary_dac_mode_set()
596 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_primary_dac_mode_set()
597 if (rdev->family == CHIP_R200 || ASIC_IS_R300(rdev)) { in radeon_legacy_primary_dac_mode_set()
606 if (rdev->family == CHIP_R200 || ASIC_IS_R300(rdev)) { in radeon_legacy_primary_dac_mode_set()
619 /* TODO 6-bits */ in radeon_legacy_primary_dac_mode_set()
627 if (radeon_encoder->enc_priv) { in radeon_legacy_primary_dac_mode_set()
628 …struct radeon_encoder_primary_dac *p_dac = (struct radeon_encoder_primary_dac *)radeon_encoder->en… in radeon_legacy_primary_dac_mode_set()
629 dac_macro_cntl = p_dac->ps2_pdac_adj; in radeon_legacy_primary_dac_mode_set()
635 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_mode_set()
636 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_primary_dac_mode_set()
638 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_primary_dac_mode_set()
641 static enum drm_connector_status radeon_legacy_primary_dac_detect(struct drm_encoder *encoder, in radeon_legacy_primary_dac_detect() argument
644 struct drm_device *dev = encoder->dev; in radeon_legacy_primary_dac_detect()
645 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_primary_dac_detect()
653 * everyone happy report the encoder as always connected. in radeon_legacy_primary_dac_detect()
731 static void radeon_legacy_tmds_int_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_tmds_int_dpms() argument
733 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_int_dpms()
734 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_int_dpms()
751 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_dpms()
752 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_int_dpms()
754 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_int_dpms()
758 static void radeon_legacy_tmds_int_prepare(struct drm_encoder *encoder) in radeon_legacy_tmds_int_prepare() argument
760 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_int_prepare()
762 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_prepare()
763 radeon_atom_output_lock(encoder, true); in radeon_legacy_tmds_int_prepare()
765 radeon_combios_output_lock(encoder, true); in radeon_legacy_tmds_int_prepare()
766 radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_tmds_int_prepare()
769 static void radeon_legacy_tmds_int_commit(struct drm_encoder *encoder) in radeon_legacy_tmds_int_commit() argument
771 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_int_commit()
773 radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_tmds_int_commit()
775 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_commit()
776 radeon_atom_output_lock(encoder, true); in radeon_legacy_tmds_int_commit()
778 radeon_combios_output_lock(encoder, true); in radeon_legacy_tmds_int_commit()
781 static void radeon_legacy_tmds_int_mode_set(struct drm_encoder *encoder, in radeon_legacy_tmds_int_mode_set() argument
785 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_int_mode_set()
786 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_int_mode_set()
787 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_tmds_int_mode_set()
788 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tmds_int_mode_set()
796 if (rdev->family == CHIP_RV280) { in radeon_legacy_tmds_int_mode_set()
797 /* bit 22 of TMDS_PLL_CNTL is read-back inverted */ in radeon_legacy_tmds_int_mode_set()
802 if (radeon_encoder->enc_priv) { in radeon_legacy_tmds_int_mode_set()
803 struct radeon_encoder_int_tmds *tmds = (struct radeon_encoder_int_tmds *)radeon_encoder->enc_priv; in radeon_legacy_tmds_int_mode_set()
806 if (tmds->tmds_pll[i].freq == 0) in radeon_legacy_tmds_int_mode_set()
808 if ((uint32_t)(mode->clock / 10) < tmds->tmds_pll[i].freq) { in radeon_legacy_tmds_int_mode_set()
809 tmp = tmds->tmds_pll[i].value ; in radeon_legacy_tmds_int_mode_set()
815 if (ASIC_IS_R300(rdev) || (rdev->family == CHIP_RV280)) { in radeon_legacy_tmds_int_mode_set()
828 if (rdev->family == CHIP_R200 || in radeon_legacy_tmds_int_mode_set()
829 rdev->family == CHIP_R100 || in radeon_legacy_tmds_int_mode_set()
854 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tmds_int_mode_set()
855 if (ASIC_IS_R300(rdev) || rdev->family == CHIP_R200) { in radeon_legacy_tmds_int_mode_set()
857 if (radeon_encoder->rmx_type != RMX_OFF) in radeon_legacy_tmds_int_mode_set()
864 if (ASIC_IS_R300(rdev) || rdev->family == CHIP_R200) { in radeon_legacy_tmds_int_mode_set()
875 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_mode_set()
876 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_int_mode_set()
878 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_int_mode_set()
895 static void radeon_legacy_tmds_ext_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_tmds_ext_dpms() argument
897 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_ext_dpms()
898 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_ext_dpms()
917 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_dpms()
918 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_ext_dpms()
920 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_ext_dpms()
924 static void radeon_legacy_tmds_ext_prepare(struct drm_encoder *encoder) in radeon_legacy_tmds_ext_prepare() argument
926 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_ext_prepare()
928 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_prepare()
929 radeon_atom_output_lock(encoder, true); in radeon_legacy_tmds_ext_prepare()
931 radeon_combios_output_lock(encoder, true); in radeon_legacy_tmds_ext_prepare()
932 radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_tmds_ext_prepare()
935 static void radeon_legacy_tmds_ext_commit(struct drm_encoder *encoder) in radeon_legacy_tmds_ext_commit() argument
937 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_ext_commit()
938 radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_tmds_ext_commit()
940 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_commit()
941 radeon_atom_output_lock(encoder, false); in radeon_legacy_tmds_ext_commit()
943 radeon_combios_output_lock(encoder, false); in radeon_legacy_tmds_ext_commit()
946 static void radeon_legacy_tmds_ext_mode_set(struct drm_encoder *encoder, in radeon_legacy_tmds_ext_mode_set() argument
950 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_ext_mode_set()
951 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_ext_mode_set()
952 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_tmds_ext_mode_set()
953 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tmds_ext_mode_set()
958 if (rdev->is_atom_bios) { in radeon_legacy_tmds_ext_mode_set()
959 radeon_encoder->pixel_clock = adjusted_mode->clock; in radeon_legacy_tmds_ext_mode_set()
960 atombios_dvo_setup(encoder, ATOM_ENABLE); in radeon_legacy_tmds_ext_mode_set()
976 if ((dev->pdev->device == 0x4850) && in radeon_legacy_tmds_ext_mode_set()
977 (dev->pdev->subsystem_vendor == 0x1028) && in radeon_legacy_tmds_ext_mode_set()
978 (dev->pdev->subsystem_device == 0x2001)) /* Dell Inspiron 8600 */ in radeon_legacy_tmds_ext_mode_set()
983 /*if (mode->clock > 165000) in radeon_legacy_tmds_ext_mode_set()
986 if (!radeon_combios_external_tmds_setup(encoder)) in radeon_legacy_tmds_ext_mode_set()
987 radeon_external_tmds_setup(encoder); in radeon_legacy_tmds_ext_mode_set()
990 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tmds_ext_mode_set()
991 if ((rdev->family == CHIP_R200) || ASIC_IS_R300(rdev)) { in radeon_legacy_tmds_ext_mode_set()
993 if (radeon_encoder->rmx_type != RMX_OFF) in radeon_legacy_tmds_ext_mode_set()
1000 if ((rdev->family == CHIP_R200) || ASIC_IS_R300(rdev)) { in radeon_legacy_tmds_ext_mode_set()
1009 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_mode_set()
1010 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_ext_mode_set()
1012 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_ext_mode_set()
1015 static void radeon_ext_tmds_enc_destroy(struct drm_encoder *encoder) in radeon_ext_tmds_enc_destroy() argument
1017 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_ext_tmds_enc_destroy()
1019 kfree(radeon_encoder->enc_priv); in radeon_ext_tmds_enc_destroy()
1020 drm_encoder_cleanup(encoder); in radeon_ext_tmds_enc_destroy()
1038 static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_tv_dac_dpms() argument
1040 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_dac_dpms()
1041 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_dac_dpms()
1042 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tv_dac_dpms()
1048 is_tv = radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT ? true : false; in radeon_legacy_tv_dac_dpms()
1050 if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_dpms()
1062 if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_dpms()
1070 if (rdev->family == CHIP_R420 || in radeon_legacy_tv_dac_dpms()
1071 rdev->family == CHIP_R423 || in radeon_legacy_tv_dac_dpms()
1072 rdev->family == CHIP_RV410) in radeon_legacy_tv_dac_dpms()
1087 if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_dpms()
1095 if (rdev->family == CHIP_R420 || in radeon_legacy_tv_dac_dpms()
1096 rdev->family == CHIP_R423 || in radeon_legacy_tv_dac_dpms()
1097 rdev->family == CHIP_RV410) in radeon_legacy_tv_dac_dpms()
1111 if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_dpms()
1117 else if (!(rdev->flags & RADEON_SINGLE_CRTC)) in radeon_legacy_tv_dac_dpms()
1122 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_dpms()
1123 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tv_dac_dpms()
1125 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tv_dac_dpms()
1129 static void radeon_legacy_tv_dac_prepare(struct drm_encoder *encoder) in radeon_legacy_tv_dac_prepare() argument
1131 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tv_dac_prepare()
1133 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_prepare()
1134 radeon_atom_output_lock(encoder, true); in radeon_legacy_tv_dac_prepare()
1136 radeon_combios_output_lock(encoder, true); in radeon_legacy_tv_dac_prepare()
1137 radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_tv_dac_prepare()
1140 static void radeon_legacy_tv_dac_commit(struct drm_encoder *encoder) in radeon_legacy_tv_dac_commit() argument
1142 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tv_dac_commit()
1144 radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_tv_dac_commit()
1146 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_commit()
1147 radeon_atom_output_lock(encoder, true); in radeon_legacy_tv_dac_commit()
1149 radeon_combios_output_lock(encoder, true); in radeon_legacy_tv_dac_commit()
1152 static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder, in radeon_legacy_tv_dac_mode_set() argument
1156 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_dac_mode_set()
1157 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_dac_mode_set()
1158 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_tv_dac_mode_set()
1159 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tv_dac_mode_set()
1160 struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv; in radeon_legacy_tv_dac_mode_set()
1167 is_tv = radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT ? true : false; in radeon_legacy_tv_dac_mode_set()
1169 if (rdev->family != CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1171 if (rdev->family == CHIP_R420 || in radeon_legacy_tv_dac_mode_set()
1172 rdev->family == CHIP_R423 || in radeon_legacy_tv_dac_mode_set()
1173 rdev->family == CHIP_RV410) { in radeon_legacy_tv_dac_mode_set()
1193 if (tv_dac->tv_std == TV_STD_NTSC || in radeon_legacy_tv_dac_mode_set()
1194 tv_dac->tv_std == TV_STD_NTSC_J || in radeon_legacy_tv_dac_mode_set()
1195 tv_dac->tv_std == TV_STD_PAL_M || in radeon_legacy_tv_dac_mode_set()
1196 tv_dac->tv_std == TV_STD_PAL_60) in radeon_legacy_tv_dac_mode_set()
1197 tv_dac_cntl |= tv_dac->ntsc_tvdac_adj; in radeon_legacy_tv_dac_mode_set()
1199 tv_dac_cntl |= tv_dac->pal_tvdac_adj; in radeon_legacy_tv_dac_mode_set()
1201 if (tv_dac->tv_std == TV_STD_NTSC || in radeon_legacy_tv_dac_mode_set()
1202 tv_dac->tv_std == TV_STD_NTSC_J) in radeon_legacy_tv_dac_mode_set()
1208 tv_dac->ps2_tvdac_adj); in radeon_legacy_tv_dac_mode_set()
1216 } else if (rdev->family != CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1218 else if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1221 if (rdev->family >= CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1235 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tv_dac_mode_set()
1241 if (rdev->family >= CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1251 if (rdev->family >= CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1262 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tv_dac_mode_set()
1266 } else if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1275 } else if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1288 } else if (rdev->family != CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1290 else if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1293 if (rdev->family >= CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1297 radeon_legacy_tv_mode_set(encoder, mode, adjusted_mode); in radeon_legacy_tv_dac_mode_set()
1299 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_mode_set()
1300 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tv_dac_mode_set()
1302 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tv_dac_mode_set()
1306 static bool r300_legacy_tv_detect(struct drm_encoder *encoder, in r300_legacy_tv_detect() argument
1309 struct drm_device *dev = encoder->dev; in r300_legacy_tv_detect()
1310 struct radeon_device *rdev = dev->dev_private; in r300_legacy_tv_detect()
1362 DRM_DEBUG_KMS("S-video TV connection detected\n"); in r300_legacy_tv_detect()
1377 static bool radeon_legacy_tv_detect(struct drm_encoder *encoder, in radeon_legacy_tv_detect() argument
1380 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_detect()
1381 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_detect()
1387 return r300_legacy_tv_detect(encoder, connector); in radeon_legacy_tv_detect()
1428 DRM_DEBUG_KMS("S-video TV connection detected\n"); in radeon_legacy_tv_detect()
1441 static bool radeon_legacy_ext_dac_detect(struct drm_encoder *encoder, in radeon_legacy_ext_dac_detect() argument
1444 struct drm_device *dev = encoder->dev; in radeon_legacy_ext_dac_detect()
1445 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_ext_dac_detect()
1531 static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder *encoder, in radeon_legacy_tv_dac_detect() argument
1534 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_dac_detect()
1535 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_dac_detect()
1540 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tv_dac_detect()
1541 struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv; in radeon_legacy_tv_dac_detect()
1545 /* find out if crtc2 is in use or if this encoder is using it */ in radeon_legacy_tv_dac_detect()
1546 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in radeon_legacy_tv_dac_detect()
1548 if ((radeon_crtc->crtc_id == 1) && crtc->enabled) { in radeon_legacy_tv_dac_detect()
1549 if (encoder->crtc != crtc) { in radeon_legacy_tv_dac_detect()
1555 if (connector->connector_type == DRM_MODE_CONNECTOR_SVIDEO || in radeon_legacy_tv_dac_detect()
1556 connector->connector_type == DRM_MODE_CONNECTOR_Composite || in radeon_legacy_tv_dac_detect()
1557 connector->connector_type == DRM_MODE_CONNECTOR_9PinDIN) { in radeon_legacy_tv_dac_detect()
1560 if (radeon_encoder->active_device && !(radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT)) in radeon_legacy_tv_dac_detect()
1563 tv_detect = radeon_legacy_tv_detect(encoder, connector); in radeon_legacy_tv_dac_detect()
1569 /* don't probe if the encoder is being used for something else not CRT related */ in radeon_legacy_tv_dac_detect()
1570 if (radeon_encoder->active_device && !(radeon_encoder->active_device & ATOM_DEVICE_CRT_SUPPORT)) { in radeon_legacy_tv_dac_detect()
1571 DRM_INFO("not detecting due to %08x\n", radeon_encoder->active_device); in radeon_legacy_tv_dac_detect()
1576 if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_detect()
1577 if (radeon_legacy_ext_dac_detect(encoder, connector)) in radeon_legacy_tv_dac_detect()
1585 if (rdev->flags & RADEON_SINGLE_CRTC) { in radeon_legacy_tv_dac_detect()
1604 if (rdev->flags & RADEON_SINGLE_CRTC) { in radeon_legacy_tv_dac_detect()
1664 if (rdev->flags & RADEON_SINGLE_CRTC) { in radeon_legacy_tv_dac_detect()
1698 static struct radeon_encoder_int_tmds *radeon_legacy_get_tmds_info(struct radeon_encoder *encoder) in radeon_legacy_get_tmds_info() argument
1700 struct drm_device *dev = encoder->base.dev; in radeon_legacy_get_tmds_info()
1701 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_get_tmds_info()
1710 if (rdev->is_atom_bios) in radeon_legacy_get_tmds_info()
1711 ret = radeon_atombios_get_tmds_info(encoder, tmds); in radeon_legacy_get_tmds_info()
1713 ret = radeon_legacy_get_tmds_info_from_combios(encoder, tmds); in radeon_legacy_get_tmds_info()
1716 radeon_legacy_get_tmds_info_from_table(encoder, tmds); in radeon_legacy_get_tmds_info()
1721 …tic struct radeon_encoder_ext_tmds *radeon_legacy_get_ext_tmds_info(struct radeon_encoder *encoder) in radeon_legacy_get_ext_tmds_info() argument
1723 struct drm_device *dev = encoder->base.dev; in radeon_legacy_get_ext_tmds_info()
1724 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_get_ext_tmds_info()
1728 if (rdev->is_atom_bios) in radeon_legacy_get_ext_tmds_info()
1736 ret = radeon_legacy_get_ext_tmds_info_from_combios(encoder, tmds); in radeon_legacy_get_ext_tmds_info()
1739 radeon_legacy_get_ext_tmds_info_from_table(encoder, tmds); in radeon_legacy_get_ext_tmds_info()
1747 struct radeon_device *rdev = dev->dev_private; in radeon_add_legacy_encoder()
1748 struct drm_encoder *encoder; in radeon_add_legacy_encoder() local
1752 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { in radeon_add_legacy_encoder()
1753 radeon_encoder = to_radeon_encoder(encoder); in radeon_add_legacy_encoder()
1754 if (radeon_encoder->encoder_enum == encoder_enum) { in radeon_add_legacy_encoder()
1755 radeon_encoder->devices |= supported_device; in radeon_add_legacy_encoder()
1766 encoder = &radeon_encoder->base; in radeon_add_legacy_encoder()
1767 if (rdev->flags & RADEON_SINGLE_CRTC) in radeon_add_legacy_encoder()
1768 encoder->possible_crtcs = 0x1; in radeon_add_legacy_encoder()
1770 encoder->possible_crtcs = 0x3; in radeon_add_legacy_encoder()
1772 radeon_encoder->enc_priv = NULL; in radeon_add_legacy_encoder()
1774 radeon_encoder->encoder_enum = encoder_enum; in radeon_add_legacy_encoder()
1775 radeon_encoder->encoder_id = (encoder_enum & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; in radeon_add_legacy_encoder()
1776 radeon_encoder->devices = supported_device; in radeon_add_legacy_encoder()
1777 radeon_encoder->rmx_type = RMX_OFF; in radeon_add_legacy_encoder()
1779 switch (radeon_encoder->encoder_id) { in radeon_add_legacy_encoder()
1781 encoder->possible_crtcs = 0x1; in radeon_add_legacy_encoder()
1782 drm_encoder_init(dev, encoder, &radeon_legacy_lvds_enc_funcs, in radeon_add_legacy_encoder()
1784 drm_encoder_helper_add(encoder, &radeon_legacy_lvds_helper_funcs); in radeon_add_legacy_encoder()
1785 if (rdev->is_atom_bios) in radeon_add_legacy_encoder()
1786 radeon_encoder->enc_priv = radeon_atombios_get_lvds_info(radeon_encoder); in radeon_add_legacy_encoder()
1788 radeon_encoder->enc_priv = radeon_combios_get_lvds_info(radeon_encoder); in radeon_add_legacy_encoder()
1789 radeon_encoder->rmx_type = RMX_FULL; in radeon_add_legacy_encoder()
1792 drm_encoder_init(dev, encoder, &radeon_legacy_tmds_int_enc_funcs, in radeon_add_legacy_encoder()
1794 drm_encoder_helper_add(encoder, &radeon_legacy_tmds_int_helper_funcs); in radeon_add_legacy_encoder()
1795 radeon_encoder->enc_priv = radeon_legacy_get_tmds_info(radeon_encoder); in radeon_add_legacy_encoder()
1798 drm_encoder_init(dev, encoder, &radeon_legacy_primary_dac_enc_funcs, in radeon_add_legacy_encoder()
1800 drm_encoder_helper_add(encoder, &radeon_legacy_primary_dac_helper_funcs); in radeon_add_legacy_encoder()
1801 if (rdev->is_atom_bios) in radeon_add_legacy_encoder()
1802 radeon_encoder->enc_priv = radeon_atombios_get_primary_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1804 radeon_encoder->enc_priv = radeon_combios_get_primary_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1807 drm_encoder_init(dev, encoder, &radeon_legacy_tv_dac_enc_funcs, in radeon_add_legacy_encoder()
1809 drm_encoder_helper_add(encoder, &radeon_legacy_tv_dac_helper_funcs); in radeon_add_legacy_encoder()
1810 if (rdev->is_atom_bios) in radeon_add_legacy_encoder()
1811 radeon_encoder->enc_priv = radeon_atombios_get_tv_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1813 radeon_encoder->enc_priv = radeon_combios_get_tv_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1816 drm_encoder_init(dev, encoder, &radeon_legacy_tmds_ext_enc_funcs, in radeon_add_legacy_encoder()
1818 drm_encoder_helper_add(encoder, &radeon_legacy_tmds_ext_helper_funcs); in radeon_add_legacy_encoder()
1819 if (!rdev->is_atom_bios) in radeon_add_legacy_encoder()
1820 radeon_encoder->enc_priv = radeon_legacy_get_ext_tmds_info(radeon_encoder); in radeon_add_legacy_encoder()