Lines Matching +full:lvds +full:- +full:encoder

2  * Copyright 2007-8 Advanced Micro Devices, Inc.
44 static void radeon_legacy_encoder_disable(struct drm_encoder *encoder) in radeon_legacy_encoder_disable() argument
46 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_encoder_disable()
49 encoder_funcs = encoder->helper_private; in radeon_legacy_encoder_disable()
50 encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_encoder_disable()
51 radeon_encoder->active_device = 0; in radeon_legacy_encoder_disable()
54 static void radeon_legacy_lvds_update(struct drm_encoder *encoder, int mode) in radeon_legacy_lvds_update() argument
56 struct drm_device *dev = encoder->dev; in radeon_legacy_lvds_update()
57 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_lvds_update()
58 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_lvds_update()
68 if (radeon_encoder->enc_priv) { in radeon_legacy_lvds_update()
69 if (rdev->is_atom_bios) { in radeon_legacy_lvds_update()
70 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_update() local
71 panel_pwr_delay = lvds->panel_pwr_delay; in radeon_legacy_lvds_update()
72 if (lvds->bl_dev) in radeon_legacy_lvds_update()
73 backlight_level = lvds->backlight_level; in radeon_legacy_lvds_update()
75 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_update() local
76 panel_pwr_delay = lvds->panel_pwr_delay; in radeon_legacy_lvds_update()
77 if (lvds->bl_dev) in radeon_legacy_lvds_update()
78 backlight_level = lvds->backlight_level; in radeon_legacy_lvds_update()
82 /* macs (and possibly some x86 oem systems?) wire up LVDS strangely in radeon_legacy_lvds_update()
85 if ((rdev->mode_info.connector_table == CT_IBOOK) || in radeon_legacy_lvds_update()
86 (rdev->mode_info.connector_table == CT_POWERBOOK_EXTERNAL) || in radeon_legacy_lvds_update()
87 (rdev->mode_info.connector_table == CT_POWERBOOK_INTERNAL) || in radeon_legacy_lvds_update()
88 (rdev->mode_info.connector_table == CT_POWERBOOK_VGA)) in radeon_legacy_lvds_update()
136 if (rdev->is_atom_bios) in radeon_legacy_lvds_update()
137 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_lvds_update()
139 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_lvds_update()
143 static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_lvds_dpms() argument
145 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_lvds_dpms()
146 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_lvds_dpms()
149 if (radeon_encoder->enc_priv) { in radeon_legacy_lvds_dpms()
150 if (rdev->is_atom_bios) { in radeon_legacy_lvds_dpms()
151 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_dpms() local
152 lvds->dpms_mode = mode; in radeon_legacy_lvds_dpms()
154 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_lvds_dpms() local
155 lvds->dpms_mode = mode; in radeon_legacy_lvds_dpms()
159 radeon_legacy_lvds_update(encoder, mode); in radeon_legacy_lvds_dpms()
162 static void radeon_legacy_lvds_prepare(struct drm_encoder *encoder) in radeon_legacy_lvds_prepare() argument
164 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_lvds_prepare()
166 if (rdev->is_atom_bios) in radeon_legacy_lvds_prepare()
167 radeon_atom_output_lock(encoder, true); in radeon_legacy_lvds_prepare()
169 radeon_combios_output_lock(encoder, true); in radeon_legacy_lvds_prepare()
170 radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_lvds_prepare()
173 static void radeon_legacy_lvds_commit(struct drm_encoder *encoder) in radeon_legacy_lvds_commit() argument
175 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_lvds_commit()
177 radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_lvds_commit()
178 if (rdev->is_atom_bios) in radeon_legacy_lvds_commit()
179 radeon_atom_output_lock(encoder, false); in radeon_legacy_lvds_commit()
181 radeon_combios_output_lock(encoder, false); in radeon_legacy_lvds_commit()
184 static void radeon_legacy_lvds_mode_set(struct drm_encoder *encoder, in radeon_legacy_lvds_mode_set() argument
188 struct drm_device *dev = encoder->dev; in radeon_legacy_lvds_mode_set()
189 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_lvds_mode_set()
190 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_lvds_mode_set()
191 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_lvds_mode_set()
200 if (rdev->is_atom_bios) { in radeon_legacy_lvds_mode_set()
204 radeon_encoder->pixel_clock = adjusted_mode->clock; in radeon_legacy_lvds_mode_set()
205 atombios_digital_setup(encoder, PANEL_ENCODER_ACTION_ENABLE); in radeon_legacy_lvds_mode_set()
208 struct radeon_encoder_lvds *lvds = (struct radeon_encoder_lvds *)radeon_encoder->enc_priv; in radeon_legacy_lvds_mode_set() local
209 if (lvds) { in radeon_legacy_lvds_mode_set()
210 DRM_DEBUG_KMS("bios LVDS_GEN_CNTL: 0x%x\n", lvds->lvds_gen_cntl); in radeon_legacy_lvds_mode_set()
211 lvds_gen_cntl = lvds->lvds_gen_cntl; in radeon_legacy_lvds_mode_set()
214 lvds_ss_gen_cntl |= ((lvds->panel_digon_delay << RADEON_LVDS_PWRSEQ_DELAY1_SHIFT) | in radeon_legacy_lvds_mode_set()
215 (lvds->panel_blon_delay << RADEON_LVDS_PWRSEQ_DELAY2_SHIFT)); in radeon_legacy_lvds_mode_set()
228 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_lvds_mode_set()
230 if (radeon_encoder->rmx_type != RMX_OFF) in radeon_legacy_lvds_mode_set()
245 if (rdev->family == CHIP_RV410) in radeon_legacy_lvds_mode_set()
248 if (rdev->is_atom_bios) in radeon_legacy_lvds_mode_set()
249 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_lvds_mode_set()
251 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_lvds_mode_set()
254 static bool radeon_legacy_mode_fixup(struct drm_encoder *encoder, in radeon_legacy_mode_fixup() argument
258 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_mode_fixup()
260 /* set the active encoder to connector routing */ in radeon_legacy_mode_fixup()
261 radeon_encoder_set_active_device(encoder); in radeon_legacy_mode_fixup()
264 /* get the native mode for LVDS */ in radeon_legacy_mode_fixup()
265 if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) in radeon_legacy_mode_fixup()
266 radeon_panel_mode_fixup(encoder, adjusted_mode); in radeon_legacy_mode_fixup()
283 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_get_backlight_level()
284 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_get_backlight_level()
296 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_set_backlight_level()
297 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_set_backlight_level()
300 if (radeon_encoder->enc_priv) { in radeon_legacy_set_backlight_level()
301 if (rdev->is_atom_bios) { in radeon_legacy_set_backlight_level()
302 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_set_backlight_level() local
303 if (lvds->backlight_level > 0) in radeon_legacy_set_backlight_level()
304 dpms_mode = lvds->dpms_mode; in radeon_legacy_set_backlight_level()
307 lvds->backlight_level = level; in radeon_legacy_set_backlight_level()
309 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_set_backlight_level() local
310 if (lvds->backlight_level > 0) in radeon_legacy_set_backlight_level()
311 dpms_mode = lvds->dpms_mode; in radeon_legacy_set_backlight_level()
314 lvds->backlight_level = level; in radeon_legacy_set_backlight_level()
318 radeon_legacy_lvds_update(&radeon_encoder->base, dpms_mode); in radeon_legacy_set_backlight_level()
329 if (bd->props.brightness < 0) in radeon_legacy_lvds_level()
331 else if (bd->props.brightness > RADEON_MAX_BL_LEVEL) in radeon_legacy_lvds_level()
334 level = bd->props.brightness; in radeon_legacy_lvds_level()
336 if (pdata->negative) in radeon_legacy_lvds_level()
337 level = RADEON_MAX_BL_LEVEL - level; in radeon_legacy_lvds_level()
345 struct radeon_encoder *radeon_encoder = pdata->encoder; in radeon_legacy_backlight_update_status()
356 struct radeon_encoder *radeon_encoder = pdata->encoder; in radeon_legacy_backlight_get_brightness()
357 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_backlight_get_brightness()
358 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_backlight_get_brightness()
364 return pdata->negative ? RADEON_MAX_BL_LEVEL - backlight_level : backlight_level; in radeon_legacy_backlight_get_brightness()
375 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_backlight_init()
376 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_backlight_init()
383 if (!radeon_encoder->enc_priv) in radeon_legacy_backlight_init()
402 "radeon_bl%d", dev->primary->index); in radeon_legacy_backlight_init()
403 bd = backlight_device_register(bl_name, drm_connector->kdev, in radeon_legacy_backlight_init()
410 pdata->encoder = radeon_encoder; in radeon_legacy_backlight_init()
419 pdata->negative = true; in radeon_legacy_backlight_init()
421 pdata->negative = false; in radeon_legacy_backlight_init()
426 pdata->negative = (rdev->family != CHIP_RV200 && in radeon_legacy_backlight_init()
427 rdev->family != CHIP_RV250 && in radeon_legacy_backlight_init()
428 rdev->family != CHIP_RV280 && in radeon_legacy_backlight_init()
429 rdev->family != CHIP_RV350); in radeon_legacy_backlight_init()
432 pdata->negative = (pdata->negative || in radeon_legacy_backlight_init()
439 if (rdev->is_atom_bios) { in radeon_legacy_backlight_init()
440 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_init() local
441 lvds->bl_dev = bd; in radeon_legacy_backlight_init()
443 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_init() local
444 lvds->bl_dev = bd; in radeon_legacy_backlight_init()
447 bd->props.brightness = radeon_legacy_backlight_get_brightness(bd); in radeon_legacy_backlight_init()
448 bd->props.power = FB_BLANK_UNBLANK; in radeon_legacy_backlight_init()
451 DRM_INFO("radeon legacy LVDS backlight initialized\n"); in radeon_legacy_backlight_init()
452 rdev->mode_info.bl_encoder = radeon_encoder; in radeon_legacy_backlight_init()
463 struct drm_device *dev = radeon_encoder->base.dev; in radeon_legacy_backlight_exit()
464 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_backlight_exit()
467 if (!radeon_encoder->enc_priv) in radeon_legacy_backlight_exit()
470 if (rdev->is_atom_bios) { in radeon_legacy_backlight_exit()
471 struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_exit() local
472 bd = lvds->bl_dev; in radeon_legacy_backlight_exit()
473 lvds->bl_dev = NULL; in radeon_legacy_backlight_exit()
475 struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; in radeon_legacy_backlight_exit() local
476 bd = lvds->bl_dev; in radeon_legacy_backlight_exit()
477 lvds->bl_dev = NULL; in radeon_legacy_backlight_exit()
487 DRM_INFO("radeon legacy LVDS backlight unloaded\n"); in radeon_legacy_backlight_exit()
493 void radeon_legacy_backlight_init(struct radeon_encoder *encoder) in radeon_legacy_backlight_init() argument
497 static void radeon_legacy_backlight_exit(struct radeon_encoder *encoder) in radeon_legacy_backlight_exit() argument
504 static void radeon_lvds_enc_destroy(struct drm_encoder *encoder) in radeon_lvds_enc_destroy() argument
506 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_lvds_enc_destroy()
508 if (radeon_encoder->enc_priv) { in radeon_lvds_enc_destroy()
510 kfree(radeon_encoder->enc_priv); in radeon_lvds_enc_destroy()
512 drm_encoder_cleanup(encoder); in radeon_lvds_enc_destroy()
520 static void radeon_legacy_primary_dac_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_primary_dac_dpms() argument
522 struct drm_device *dev = encoder->dev; in radeon_legacy_primary_dac_dpms()
523 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_primary_dac_dpms()
550 if (!(rdev->flags & RADEON_SINGLE_CRTC)) in radeon_legacy_primary_dac_dpms()
555 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_dpms()
556 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_primary_dac_dpms()
558 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_primary_dac_dpms()
562 static void radeon_legacy_primary_dac_prepare(struct drm_encoder *encoder) in radeon_legacy_primary_dac_prepare() argument
564 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_primary_dac_prepare()
566 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_prepare()
567 radeon_atom_output_lock(encoder, true); in radeon_legacy_primary_dac_prepare()
569 radeon_combios_output_lock(encoder, true); in radeon_legacy_primary_dac_prepare()
570 radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_primary_dac_prepare()
573 static void radeon_legacy_primary_dac_commit(struct drm_encoder *encoder) in radeon_legacy_primary_dac_commit() argument
575 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_primary_dac_commit()
577 radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_primary_dac_commit()
579 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_commit()
580 radeon_atom_output_lock(encoder, false); in radeon_legacy_primary_dac_commit()
582 radeon_combios_output_lock(encoder, false); in radeon_legacy_primary_dac_commit()
585 static void radeon_legacy_primary_dac_mode_set(struct drm_encoder *encoder, in radeon_legacy_primary_dac_mode_set() argument
589 struct drm_device *dev = encoder->dev; in radeon_legacy_primary_dac_mode_set()
590 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_primary_dac_mode_set()
591 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_primary_dac_mode_set()
592 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_primary_dac_mode_set()
597 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_primary_dac_mode_set()
598 if (rdev->family == CHIP_R200 || ASIC_IS_R300(rdev)) { in radeon_legacy_primary_dac_mode_set()
607 if (rdev->family == CHIP_R200 || ASIC_IS_R300(rdev)) { in radeon_legacy_primary_dac_mode_set()
620 /* TODO 6-bits */ in radeon_legacy_primary_dac_mode_set()
628 if (radeon_encoder->enc_priv) { in radeon_legacy_primary_dac_mode_set()
629 …struct radeon_encoder_primary_dac *p_dac = (struct radeon_encoder_primary_dac *)radeon_encoder->en… in radeon_legacy_primary_dac_mode_set()
630 dac_macro_cntl = p_dac->ps2_pdac_adj; in radeon_legacy_primary_dac_mode_set()
636 if (rdev->is_atom_bios) in radeon_legacy_primary_dac_mode_set()
637 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_primary_dac_mode_set()
639 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_primary_dac_mode_set()
642 static enum drm_connector_status radeon_legacy_primary_dac_detect(struct drm_encoder *encoder, in radeon_legacy_primary_dac_detect() argument
645 struct drm_device *dev = encoder->dev; in radeon_legacy_primary_dac_detect()
646 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_primary_dac_detect()
654 * everyone happy report the encoder as always connected. in radeon_legacy_primary_dac_detect()
732 static void radeon_legacy_tmds_int_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_tmds_int_dpms() argument
734 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_int_dpms()
735 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_int_dpms()
752 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_dpms()
753 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_int_dpms()
755 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_int_dpms()
759 static void radeon_legacy_tmds_int_prepare(struct drm_encoder *encoder) in radeon_legacy_tmds_int_prepare() argument
761 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_int_prepare()
763 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_prepare()
764 radeon_atom_output_lock(encoder, true); in radeon_legacy_tmds_int_prepare()
766 radeon_combios_output_lock(encoder, true); in radeon_legacy_tmds_int_prepare()
767 radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_tmds_int_prepare()
770 static void radeon_legacy_tmds_int_commit(struct drm_encoder *encoder) in radeon_legacy_tmds_int_commit() argument
772 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_int_commit()
774 radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_tmds_int_commit()
776 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_commit()
777 radeon_atom_output_lock(encoder, true); in radeon_legacy_tmds_int_commit()
779 radeon_combios_output_lock(encoder, true); in radeon_legacy_tmds_int_commit()
782 static void radeon_legacy_tmds_int_mode_set(struct drm_encoder *encoder, in radeon_legacy_tmds_int_mode_set() argument
786 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_int_mode_set()
787 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_int_mode_set()
788 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_tmds_int_mode_set()
789 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tmds_int_mode_set()
797 if (rdev->family == CHIP_RV280) { in radeon_legacy_tmds_int_mode_set()
798 /* bit 22 of TMDS_PLL_CNTL is read-back inverted */ in radeon_legacy_tmds_int_mode_set()
803 if (radeon_encoder->enc_priv) { in radeon_legacy_tmds_int_mode_set()
804 struct radeon_encoder_int_tmds *tmds = (struct radeon_encoder_int_tmds *)radeon_encoder->enc_priv; in radeon_legacy_tmds_int_mode_set()
807 if (tmds->tmds_pll[i].freq == 0) in radeon_legacy_tmds_int_mode_set()
809 if ((uint32_t)(mode->clock / 10) < tmds->tmds_pll[i].freq) { in radeon_legacy_tmds_int_mode_set()
810 tmp = tmds->tmds_pll[i].value ; in radeon_legacy_tmds_int_mode_set()
816 if (ASIC_IS_R300(rdev) || (rdev->family == CHIP_RV280)) { in radeon_legacy_tmds_int_mode_set()
829 if (rdev->family == CHIP_R200 || in radeon_legacy_tmds_int_mode_set()
830 rdev->family == CHIP_R100 || in radeon_legacy_tmds_int_mode_set()
855 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tmds_int_mode_set()
856 if (ASIC_IS_R300(rdev) || rdev->family == CHIP_R200) { in radeon_legacy_tmds_int_mode_set()
858 if (radeon_encoder->rmx_type != RMX_OFF) in radeon_legacy_tmds_int_mode_set()
865 if (ASIC_IS_R300(rdev) || rdev->family == CHIP_R200) { in radeon_legacy_tmds_int_mode_set()
876 if (rdev->is_atom_bios) in radeon_legacy_tmds_int_mode_set()
877 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_int_mode_set()
879 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_int_mode_set()
896 static void radeon_legacy_tmds_ext_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_tmds_ext_dpms() argument
898 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_ext_dpms()
899 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_ext_dpms()
918 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_dpms()
919 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_ext_dpms()
921 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tmds_ext_dpms()
925 static void radeon_legacy_tmds_ext_prepare(struct drm_encoder *encoder) in radeon_legacy_tmds_ext_prepare() argument
927 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_ext_prepare()
929 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_prepare()
930 radeon_atom_output_lock(encoder, true); in radeon_legacy_tmds_ext_prepare()
932 radeon_combios_output_lock(encoder, true); in radeon_legacy_tmds_ext_prepare()
933 radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_tmds_ext_prepare()
936 static void radeon_legacy_tmds_ext_commit(struct drm_encoder *encoder) in radeon_legacy_tmds_ext_commit() argument
938 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tmds_ext_commit()
939 radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_tmds_ext_commit()
941 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_commit()
942 radeon_atom_output_lock(encoder, false); in radeon_legacy_tmds_ext_commit()
944 radeon_combios_output_lock(encoder, false); in radeon_legacy_tmds_ext_commit()
947 static void radeon_legacy_tmds_ext_mode_set(struct drm_encoder *encoder, in radeon_legacy_tmds_ext_mode_set() argument
951 struct drm_device *dev = encoder->dev; in radeon_legacy_tmds_ext_mode_set()
952 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tmds_ext_mode_set()
953 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_tmds_ext_mode_set()
954 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tmds_ext_mode_set()
959 if (rdev->is_atom_bios) { in radeon_legacy_tmds_ext_mode_set()
960 radeon_encoder->pixel_clock = adjusted_mode->clock; in radeon_legacy_tmds_ext_mode_set()
961 atombios_dvo_setup(encoder, ATOM_ENABLE); in radeon_legacy_tmds_ext_mode_set()
977 if ((rdev->pdev->device == 0x4850) && in radeon_legacy_tmds_ext_mode_set()
978 (rdev->pdev->subsystem_vendor == 0x1028) && in radeon_legacy_tmds_ext_mode_set()
979 (rdev->pdev->subsystem_device == 0x2001)) /* Dell Inspiron 8600 */ in radeon_legacy_tmds_ext_mode_set()
984 /*if (mode->clock > 165000) in radeon_legacy_tmds_ext_mode_set()
987 if (!radeon_combios_external_tmds_setup(encoder)) in radeon_legacy_tmds_ext_mode_set()
988 radeon_external_tmds_setup(encoder); in radeon_legacy_tmds_ext_mode_set()
991 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tmds_ext_mode_set()
992 if ((rdev->family == CHIP_R200) || ASIC_IS_R300(rdev)) { in radeon_legacy_tmds_ext_mode_set()
994 if (radeon_encoder->rmx_type != RMX_OFF) in radeon_legacy_tmds_ext_mode_set()
1001 if ((rdev->family == CHIP_R200) || ASIC_IS_R300(rdev)) { in radeon_legacy_tmds_ext_mode_set()
1010 if (rdev->is_atom_bios) in radeon_legacy_tmds_ext_mode_set()
1011 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_ext_mode_set()
1013 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tmds_ext_mode_set()
1016 static void radeon_ext_tmds_enc_destroy(struct drm_encoder *encoder) in radeon_ext_tmds_enc_destroy() argument
1018 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_ext_tmds_enc_destroy()
1020 kfree(radeon_encoder->enc_priv); in radeon_ext_tmds_enc_destroy()
1021 drm_encoder_cleanup(encoder); in radeon_ext_tmds_enc_destroy()
1039 static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode) in radeon_legacy_tv_dac_dpms() argument
1041 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_dac_dpms()
1042 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_dac_dpms()
1043 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tv_dac_dpms()
1049 is_tv = radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT ? true : false; in radeon_legacy_tv_dac_dpms()
1051 if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_dpms()
1063 if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_dpms()
1071 if (rdev->family == CHIP_R420 || in radeon_legacy_tv_dac_dpms()
1072 rdev->family == CHIP_R423 || in radeon_legacy_tv_dac_dpms()
1073 rdev->family == CHIP_RV410) in radeon_legacy_tv_dac_dpms()
1088 if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_dpms()
1096 if (rdev->family == CHIP_R420 || in radeon_legacy_tv_dac_dpms()
1097 rdev->family == CHIP_R423 || in radeon_legacy_tv_dac_dpms()
1098 rdev->family == CHIP_RV410) in radeon_legacy_tv_dac_dpms()
1112 if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_dpms()
1118 else if (!(rdev->flags & RADEON_SINGLE_CRTC)) in radeon_legacy_tv_dac_dpms()
1123 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_dpms()
1124 radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tv_dac_dpms()
1126 radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); in radeon_legacy_tv_dac_dpms()
1130 static void radeon_legacy_tv_dac_prepare(struct drm_encoder *encoder) in radeon_legacy_tv_dac_prepare() argument
1132 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tv_dac_prepare()
1134 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_prepare()
1135 radeon_atom_output_lock(encoder, true); in radeon_legacy_tv_dac_prepare()
1137 radeon_combios_output_lock(encoder, true); in radeon_legacy_tv_dac_prepare()
1138 radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_OFF); in radeon_legacy_tv_dac_prepare()
1141 static void radeon_legacy_tv_dac_commit(struct drm_encoder *encoder) in radeon_legacy_tv_dac_commit() argument
1143 struct radeon_device *rdev = encoder->dev->dev_private; in radeon_legacy_tv_dac_commit()
1145 radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_ON); in radeon_legacy_tv_dac_commit()
1147 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_commit()
1148 radeon_atom_output_lock(encoder, true); in radeon_legacy_tv_dac_commit()
1150 radeon_combios_output_lock(encoder, true); in radeon_legacy_tv_dac_commit()
1153 static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder, in radeon_legacy_tv_dac_mode_set() argument
1157 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_dac_mode_set()
1158 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_dac_mode_set()
1159 struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); in radeon_legacy_tv_dac_mode_set()
1160 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tv_dac_mode_set()
1161 struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv; in radeon_legacy_tv_dac_mode_set()
1168 is_tv = radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT ? true : false; in radeon_legacy_tv_dac_mode_set()
1170 if (rdev->family != CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1172 if (rdev->family == CHIP_R420 || in radeon_legacy_tv_dac_mode_set()
1173 rdev->family == CHIP_R423 || in radeon_legacy_tv_dac_mode_set()
1174 rdev->family == CHIP_RV410) { in radeon_legacy_tv_dac_mode_set()
1194 if (tv_dac->tv_std == TV_STD_NTSC || in radeon_legacy_tv_dac_mode_set()
1195 tv_dac->tv_std == TV_STD_NTSC_J || in radeon_legacy_tv_dac_mode_set()
1196 tv_dac->tv_std == TV_STD_PAL_M || in radeon_legacy_tv_dac_mode_set()
1197 tv_dac->tv_std == TV_STD_PAL_60) in radeon_legacy_tv_dac_mode_set()
1198 tv_dac_cntl |= tv_dac->ntsc_tvdac_adj; in radeon_legacy_tv_dac_mode_set()
1200 tv_dac_cntl |= tv_dac->pal_tvdac_adj; in radeon_legacy_tv_dac_mode_set()
1202 if (tv_dac->tv_std == TV_STD_NTSC || in radeon_legacy_tv_dac_mode_set()
1203 tv_dac->tv_std == TV_STD_NTSC_J) in radeon_legacy_tv_dac_mode_set()
1209 tv_dac->ps2_tvdac_adj); in radeon_legacy_tv_dac_mode_set()
1217 } else if (rdev->family != CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1219 else if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1222 if (rdev->family >= CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1236 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tv_dac_mode_set()
1242 if (rdev->family >= CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1252 if (rdev->family >= CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1263 if (radeon_crtc->crtc_id == 0) { in radeon_legacy_tv_dac_mode_set()
1267 } else if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1276 } else if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_mode_set()
1289 } else if (rdev->family != CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1291 else if (rdev->family == CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1294 if (rdev->family >= CHIP_R200) in radeon_legacy_tv_dac_mode_set()
1298 radeon_legacy_tv_mode_set(encoder, mode, adjusted_mode); in radeon_legacy_tv_dac_mode_set()
1300 if (rdev->is_atom_bios) in radeon_legacy_tv_dac_mode_set()
1301 radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tv_dac_mode_set()
1303 radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); in radeon_legacy_tv_dac_mode_set()
1307 static bool r300_legacy_tv_detect(struct drm_encoder *encoder, in r300_legacy_tv_detect() argument
1310 struct drm_device *dev = encoder->dev; in r300_legacy_tv_detect()
1311 struct radeon_device *rdev = dev->dev_private; in r300_legacy_tv_detect()
1363 DRM_DEBUG_KMS("S-video TV connection detected\n"); in r300_legacy_tv_detect()
1378 static bool radeon_legacy_tv_detect(struct drm_encoder *encoder, in radeon_legacy_tv_detect() argument
1381 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_detect()
1382 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_detect()
1388 return r300_legacy_tv_detect(encoder, connector); in radeon_legacy_tv_detect()
1429 DRM_DEBUG_KMS("S-video TV connection detected\n"); in radeon_legacy_tv_detect()
1442 static bool radeon_legacy_ext_dac_detect(struct drm_encoder *encoder, in radeon_legacy_ext_dac_detect() argument
1445 struct drm_device *dev = encoder->dev; in radeon_legacy_ext_dac_detect()
1446 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_ext_dac_detect()
1532 static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder *encoder, in radeon_legacy_tv_dac_detect() argument
1535 struct drm_device *dev = encoder->dev; in radeon_legacy_tv_dac_detect()
1536 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_tv_dac_detect()
1541 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); in radeon_legacy_tv_dac_detect()
1542 struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv; in radeon_legacy_tv_dac_detect()
1546 /* find out if crtc2 is in use or if this encoder is using it */ in radeon_legacy_tv_dac_detect()
1547 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in radeon_legacy_tv_dac_detect()
1549 if ((radeon_crtc->crtc_id == 1) && crtc->enabled) { in radeon_legacy_tv_dac_detect()
1550 if (encoder->crtc != crtc) { in radeon_legacy_tv_dac_detect()
1556 if (connector->connector_type == DRM_MODE_CONNECTOR_SVIDEO || in radeon_legacy_tv_dac_detect()
1557 connector->connector_type == DRM_MODE_CONNECTOR_Composite || in radeon_legacy_tv_dac_detect()
1558 connector->connector_type == DRM_MODE_CONNECTOR_9PinDIN) { in radeon_legacy_tv_dac_detect()
1561 if (radeon_encoder->active_device && !(radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT)) in radeon_legacy_tv_dac_detect()
1564 tv_detect = radeon_legacy_tv_detect(encoder, connector); in radeon_legacy_tv_dac_detect()
1570 /* don't probe if the encoder is being used for something else not CRT related */ in radeon_legacy_tv_dac_detect()
1571 if (radeon_encoder->active_device && !(radeon_encoder->active_device & ATOM_DEVICE_CRT_SUPPORT)) { in radeon_legacy_tv_dac_detect()
1572 DRM_INFO("not detecting due to %08x\n", radeon_encoder->active_device); in radeon_legacy_tv_dac_detect()
1577 if (rdev->family == CHIP_R200) { in radeon_legacy_tv_dac_detect()
1578 if (radeon_legacy_ext_dac_detect(encoder, connector)) in radeon_legacy_tv_dac_detect()
1586 if (rdev->flags & RADEON_SINGLE_CRTC) { in radeon_legacy_tv_dac_detect()
1605 if (rdev->flags & RADEON_SINGLE_CRTC) { in radeon_legacy_tv_dac_detect()
1665 if (rdev->flags & RADEON_SINGLE_CRTC) { in radeon_legacy_tv_dac_detect()
1699 static struct radeon_encoder_int_tmds *radeon_legacy_get_tmds_info(struct radeon_encoder *encoder) in radeon_legacy_get_tmds_info() argument
1701 struct drm_device *dev = encoder->base.dev; in radeon_legacy_get_tmds_info()
1702 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_get_tmds_info()
1711 if (rdev->is_atom_bios) in radeon_legacy_get_tmds_info()
1712 ret = radeon_atombios_get_tmds_info(encoder, tmds); in radeon_legacy_get_tmds_info()
1714 ret = radeon_legacy_get_tmds_info_from_combios(encoder, tmds); in radeon_legacy_get_tmds_info()
1717 radeon_legacy_get_tmds_info_from_table(encoder, tmds); in radeon_legacy_get_tmds_info()
1722 …tic struct radeon_encoder_ext_tmds *radeon_legacy_get_ext_tmds_info(struct radeon_encoder *encoder) in radeon_legacy_get_ext_tmds_info() argument
1724 struct drm_device *dev = encoder->base.dev; in radeon_legacy_get_ext_tmds_info()
1725 struct radeon_device *rdev = dev->dev_private; in radeon_legacy_get_ext_tmds_info()
1729 if (rdev->is_atom_bios) in radeon_legacy_get_ext_tmds_info()
1737 ret = radeon_legacy_get_ext_tmds_info_from_combios(encoder, tmds); in radeon_legacy_get_ext_tmds_info()
1740 radeon_legacy_get_ext_tmds_info_from_table(encoder, tmds); in radeon_legacy_get_ext_tmds_info()
1748 struct radeon_device *rdev = dev->dev_private; in radeon_add_legacy_encoder()
1749 struct drm_encoder *encoder; in radeon_add_legacy_encoder() local
1753 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { in radeon_add_legacy_encoder()
1754 radeon_encoder = to_radeon_encoder(encoder); in radeon_add_legacy_encoder()
1755 if (radeon_encoder->encoder_enum == encoder_enum) { in radeon_add_legacy_encoder()
1756 radeon_encoder->devices |= supported_device; in radeon_add_legacy_encoder()
1767 encoder = &radeon_encoder->base; in radeon_add_legacy_encoder()
1768 if (rdev->flags & RADEON_SINGLE_CRTC) in radeon_add_legacy_encoder()
1769 encoder->possible_crtcs = 0x1; in radeon_add_legacy_encoder()
1771 encoder->possible_crtcs = 0x3; in radeon_add_legacy_encoder()
1773 radeon_encoder->enc_priv = NULL; in radeon_add_legacy_encoder()
1775 radeon_encoder->encoder_enum = encoder_enum; in radeon_add_legacy_encoder()
1776 radeon_encoder->encoder_id = (encoder_enum & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; in radeon_add_legacy_encoder()
1777 radeon_encoder->devices = supported_device; in radeon_add_legacy_encoder()
1778 radeon_encoder->rmx_type = RMX_OFF; in radeon_add_legacy_encoder()
1780 switch (radeon_encoder->encoder_id) { in radeon_add_legacy_encoder()
1782 encoder->possible_crtcs = 0x1; in radeon_add_legacy_encoder()
1783 drm_encoder_init(dev, encoder, &radeon_legacy_lvds_enc_funcs, in radeon_add_legacy_encoder()
1785 drm_encoder_helper_add(encoder, &radeon_legacy_lvds_helper_funcs); in radeon_add_legacy_encoder()
1786 if (rdev->is_atom_bios) in radeon_add_legacy_encoder()
1787 radeon_encoder->enc_priv = radeon_atombios_get_lvds_info(radeon_encoder); in radeon_add_legacy_encoder()
1789 radeon_encoder->enc_priv = radeon_combios_get_lvds_info(radeon_encoder); in radeon_add_legacy_encoder()
1790 radeon_encoder->rmx_type = RMX_FULL; in radeon_add_legacy_encoder()
1793 drm_encoder_init(dev, encoder, &radeon_legacy_tmds_int_enc_funcs, in radeon_add_legacy_encoder()
1795 drm_encoder_helper_add(encoder, &radeon_legacy_tmds_int_helper_funcs); in radeon_add_legacy_encoder()
1796 radeon_encoder->enc_priv = radeon_legacy_get_tmds_info(radeon_encoder); in radeon_add_legacy_encoder()
1799 drm_encoder_init(dev, encoder, &radeon_legacy_primary_dac_enc_funcs, in radeon_add_legacy_encoder()
1801 drm_encoder_helper_add(encoder, &radeon_legacy_primary_dac_helper_funcs); in radeon_add_legacy_encoder()
1802 if (rdev->is_atom_bios) in radeon_add_legacy_encoder()
1803 radeon_encoder->enc_priv = radeon_atombios_get_primary_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1805 radeon_encoder->enc_priv = radeon_combios_get_primary_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1808 drm_encoder_init(dev, encoder, &radeon_legacy_tv_dac_enc_funcs, in radeon_add_legacy_encoder()
1810 drm_encoder_helper_add(encoder, &radeon_legacy_tv_dac_helper_funcs); in radeon_add_legacy_encoder()
1811 if (rdev->is_atom_bios) in radeon_add_legacy_encoder()
1812 radeon_encoder->enc_priv = radeon_atombios_get_tv_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1814 radeon_encoder->enc_priv = radeon_combios_get_tv_dac_info(radeon_encoder); in radeon_add_legacy_encoder()
1817 drm_encoder_init(dev, encoder, &radeon_legacy_tmds_ext_enc_funcs, in radeon_add_legacy_encoder()
1819 drm_encoder_helper_add(encoder, &radeon_legacy_tmds_ext_helper_funcs); in radeon_add_legacy_encoder()
1820 if (!rdev->is_atom_bios) in radeon_add_legacy_encoder()
1821 radeon_encoder->enc_priv = radeon_legacy_get_ext_tmds_info(radeon_encoder); in radeon_add_legacy_encoder()