Lines Matching +full:clock +full:- +full:output +full:- +full:names
3 * Copyright © 2006-2007 Intel Corporation
50 #define IS_TV(c) (c->output_flag & SDVO_TV_MASK)
51 #define IS_TMDS(c) (c->output_flag & SDVO_TMDS_MASK)
52 #define IS_LVDS(c) (c->output_flag & SDVO_LVDS_MASK)
53 #define IS_TV_OR_LVDS(c) (c->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
79 /* Active outputs controlled by this SDVO output */
88 /* Pixel clock limitations reported by the SDVO device, in kHz */
104 * This is set if we're going to treat the device as TV-out.
106 * While we have these nice friendly flags for output types that ought
107 * to decide this for us, the S-Video output on our HDMI+S-Video card
123 * This is set if we detect output of sdvo device as LVDS and
153 /* add the property for the SDVO-TV */
171 /* add the property for the SDVO-TV/LVDS */
227 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_write_sdvox()
231 if (psb_intel_sdvo->sdvo_reg == SDVOB) { in psb_intel_sdvo_write_sdvox()
254 .addr = psb_intel_sdvo->slave_addr, in psb_intel_sdvo_read_byte()
260 .addr = psb_intel_sdvo->slave_addr, in psb_intel_sdvo_read_byte()
268 if ((ret = i2c_transfer(psb_intel_sdvo->i2c, msgs, 2)) == 2) in psb_intel_sdvo_read_byte()
276 /** Mapping of command numbers to names, for debug output */
395 #define SDVO_NAME(svdo) (IS_SDVOB((svdo)->sdvo_reg) ? "SDVOB" : "SDVOC")
439 msgs[i].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
443 buf[2*i + 0] = SDVO_I2C_ARG_0 - i; in psb_intel_sdvo_write_cmd()
446 msgs[i].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
455 msgs[i+1].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
460 msgs[i+2].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
465 ret = i2c_transfer(psb_intel_sdvo->i2c, msgs, i+3); in psb_intel_sdvo_write_cmd()
501 while (status == SDVO_CMD_STATUS_PENDING && retry--) { in psb_intel_sdvo_read_response()
535 if (mode->clock >= 100000) in psb_intel_sdvo_get_pixel_multiplier()
537 else if (mode->clock >= 50000) in psb_intel_sdvo_get_pixel_multiplier()
658 return psb_intel_sdvo_set_value(psb_intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in psb_intel_sdvo_set_timing()
659 psb_intel_sdvo_set_value(psb_intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in psb_intel_sdvo_set_timing()
678 uint16_t clock, in psb_intel_sdvo_create_preferred_input_timing() argument
685 args.clock = clock; in psb_intel_sdvo_create_preferred_input_timing()
690 if (psb_intel_sdvo->is_lvds && in psb_intel_sdvo_create_preferred_input_timing()
691 (psb_intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width || in psb_intel_sdvo_create_preferred_input_timing()
692 psb_intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height)) in psb_intel_sdvo_create_preferred_input_timing()
703 BUILD_BUG_ON(sizeof(dtd->part1) != 8); in psb_intel_sdvo_get_preferred_input_timing()
704 BUILD_BUG_ON(sizeof(dtd->part2) != 8); in psb_intel_sdvo_get_preferred_input_timing()
706 &dtd->part1, sizeof(dtd->part1)) && in psb_intel_sdvo_get_preferred_input_timing()
708 &dtd->part2, sizeof(dtd->part2)); in psb_intel_sdvo_get_preferred_input_timing()
723 width = mode->crtc_hdisplay; in psb_intel_sdvo_get_dtd_from_mode()
724 height = mode->crtc_vdisplay; in psb_intel_sdvo_get_dtd_from_mode()
727 h_blank_len = mode->crtc_hblank_end - mode->crtc_hblank_start; in psb_intel_sdvo_get_dtd_from_mode()
728 h_sync_len = mode->crtc_hsync_end - mode->crtc_hsync_start; in psb_intel_sdvo_get_dtd_from_mode()
730 v_blank_len = mode->crtc_vblank_end - mode->crtc_vblank_start; in psb_intel_sdvo_get_dtd_from_mode()
731 v_sync_len = mode->crtc_vsync_end - mode->crtc_vsync_start; in psb_intel_sdvo_get_dtd_from_mode()
733 h_sync_offset = mode->crtc_hsync_start - mode->crtc_hblank_start; in psb_intel_sdvo_get_dtd_from_mode()
734 v_sync_offset = mode->crtc_vsync_start - mode->crtc_vblank_start; in psb_intel_sdvo_get_dtd_from_mode()
736 dtd->part1.clock = mode->clock / 10; in psb_intel_sdvo_get_dtd_from_mode()
737 dtd->part1.h_active = width & 0xff; in psb_intel_sdvo_get_dtd_from_mode()
738 dtd->part1.h_blank = h_blank_len & 0xff; in psb_intel_sdvo_get_dtd_from_mode()
739 dtd->part1.h_high = (((width >> 8) & 0xf) << 4) | in psb_intel_sdvo_get_dtd_from_mode()
741 dtd->part1.v_active = height & 0xff; in psb_intel_sdvo_get_dtd_from_mode()
742 dtd->part1.v_blank = v_blank_len & 0xff; in psb_intel_sdvo_get_dtd_from_mode()
743 dtd->part1.v_high = (((height >> 8) & 0xf) << 4) | in psb_intel_sdvo_get_dtd_from_mode()
746 dtd->part2.h_sync_off = h_sync_offset & 0xff; in psb_intel_sdvo_get_dtd_from_mode()
747 dtd->part2.h_sync_width = h_sync_len & 0xff; in psb_intel_sdvo_get_dtd_from_mode()
748 dtd->part2.v_sync_off_width = (v_sync_offset & 0xf) << 4 | in psb_intel_sdvo_get_dtd_from_mode()
750 dtd->part2.sync_off_width_high = ((h_sync_offset & 0x300) >> 2) | in psb_intel_sdvo_get_dtd_from_mode()
754 dtd->part2.dtd_flags = 0x18; in psb_intel_sdvo_get_dtd_from_mode()
755 if (mode->flags & DRM_MODE_FLAG_PHSYNC) in psb_intel_sdvo_get_dtd_from_mode()
756 dtd->part2.dtd_flags |= 0x2; in psb_intel_sdvo_get_dtd_from_mode()
757 if (mode->flags & DRM_MODE_FLAG_PVSYNC) in psb_intel_sdvo_get_dtd_from_mode()
758 dtd->part2.dtd_flags |= 0x4; in psb_intel_sdvo_get_dtd_from_mode()
760 dtd->part2.sdvo_flags = 0; in psb_intel_sdvo_get_dtd_from_mode()
761 dtd->part2.v_sync_off_high = v_sync_offset & 0xc0; in psb_intel_sdvo_get_dtd_from_mode()
762 dtd->part2.reserved = 0; in psb_intel_sdvo_get_dtd_from_mode()
768 mode->hdisplay = dtd->part1.h_active; in psb_intel_sdvo_get_mode_from_dtd()
769 mode->hdisplay += ((dtd->part1.h_high >> 4) & 0x0f) << 8; in psb_intel_sdvo_get_mode_from_dtd()
770 mode->hsync_start = mode->hdisplay + dtd->part2.h_sync_off; in psb_intel_sdvo_get_mode_from_dtd()
771 mode->hsync_start += (dtd->part2.sync_off_width_high & 0xc0) << 2; in psb_intel_sdvo_get_mode_from_dtd()
772 mode->hsync_end = mode->hsync_start + dtd->part2.h_sync_width; in psb_intel_sdvo_get_mode_from_dtd()
773 mode->hsync_end += (dtd->part2.sync_off_width_high & 0x30) << 4; in psb_intel_sdvo_get_mode_from_dtd()
774 mode->htotal = mode->hdisplay + dtd->part1.h_blank; in psb_intel_sdvo_get_mode_from_dtd()
775 mode->htotal += (dtd->part1.h_high & 0xf) << 8; in psb_intel_sdvo_get_mode_from_dtd()
777 mode->vdisplay = dtd->part1.v_active; in psb_intel_sdvo_get_mode_from_dtd()
778 mode->vdisplay += ((dtd->part1.v_high >> 4) & 0x0f) << 8; in psb_intel_sdvo_get_mode_from_dtd()
779 mode->vsync_start = mode->vdisplay; in psb_intel_sdvo_get_mode_from_dtd()
780 mode->vsync_start += (dtd->part2.v_sync_off_width >> 4) & 0xf; in psb_intel_sdvo_get_mode_from_dtd()
781 mode->vsync_start += (dtd->part2.sync_off_width_high & 0x0c) << 2; in psb_intel_sdvo_get_mode_from_dtd()
782 mode->vsync_start += dtd->part2.v_sync_off_high & 0xc0; in psb_intel_sdvo_get_mode_from_dtd()
783 mode->vsync_end = mode->vsync_start + in psb_intel_sdvo_get_mode_from_dtd()
784 (dtd->part2.v_sync_off_width & 0xf); in psb_intel_sdvo_get_mode_from_dtd()
785 mode->vsync_end += (dtd->part2.sync_off_width_high & 0x3) << 4; in psb_intel_sdvo_get_mode_from_dtd()
786 mode->vtotal = mode->vdisplay + dtd->part1.v_blank; in psb_intel_sdvo_get_mode_from_dtd()
787 mode->vtotal += (dtd->part1.v_high & 0xf) << 8; in psb_intel_sdvo_get_mode_from_dtd()
789 mode->clock = dtd->part1.clock * 10; in psb_intel_sdvo_get_mode_from_dtd()
791 mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC); in psb_intel_sdvo_get_mode_from_dtd()
792 if (dtd->part2.dtd_flags & 0x2) in psb_intel_sdvo_get_mode_from_dtd()
793 mode->flags |= DRM_MODE_FLAG_PHSYNC; in psb_intel_sdvo_get_mode_from_dtd()
794 if (dtd->part2.dtd_flags & 0x4) in psb_intel_sdvo_get_mode_from_dtd()
795 mode->flags |= DRM_MODE_FLAG_PVSYNC; in psb_intel_sdvo_get_mode_from_dtd()
892 format_map = 1 << psb_intel_sdvo->tv_format_index; in psb_intel_sdvo_set_tv_format()
909 psb_intel_sdvo->attached_output)) in psb_intel_sdvo_set_output_timings_from_mode()
929 mode->clock / 10, in psb_intel_sdvo_set_input_timings_for_mode()
930 mode->hdisplay, in psb_intel_sdvo_set_input_timings_for_mode()
931 mode->vdisplay)) in psb_intel_sdvo_set_input_timings_for_mode()
935 &psb_intel_sdvo->input_dtd)) in psb_intel_sdvo_set_input_timings_for_mode()
938 psb_intel_sdvo_get_mode_from_dtd(adjusted_mode, &psb_intel_sdvo->input_dtd); in psb_intel_sdvo_set_input_timings_for_mode()
952 * output timings. To do that, we have to set the output in psb_intel_sdvo_mode_fixup()
956 if (psb_intel_sdvo->is_tv) { in psb_intel_sdvo_mode_fixup()
963 } else if (psb_intel_sdvo->is_lvds) { in psb_intel_sdvo_mode_fixup()
965 psb_intel_sdvo->sdvo_lvds_fixed_mode)) in psb_intel_sdvo_mode_fixup()
986 struct drm_device *dev = encoder->dev; in psb_intel_sdvo_mode_set()
987 struct drm_crtc *crtc = encoder->crtc; in psb_intel_sdvo_mode_set()
1000 * output. This is only correct if we're a single-input device, in in psb_intel_sdvo_mode_set()
1001 * which case the first input is the output from the appropriate SDVO in psb_intel_sdvo_mode_set()
1002 * channel on the motherboard. In a two-input device, the first input in psb_intel_sdvo_mode_set()
1005 in_out.in0 = psb_intel_sdvo->attached_output; in psb_intel_sdvo_mode_set()
1012 /* Set the output timings to the screen */ in psb_intel_sdvo_mode_set()
1014 psb_intel_sdvo->attached_output)) in psb_intel_sdvo_mode_set()
1020 if (psb_intel_sdvo->is_tv || psb_intel_sdvo->is_lvds) { in psb_intel_sdvo_mode_set()
1021 input_dtd = psb_intel_sdvo->input_dtd; in psb_intel_sdvo_mode_set()
1023 /* Set the output timing to the screen */ in psb_intel_sdvo_mode_set()
1025 psb_intel_sdvo->attached_output)) in psb_intel_sdvo_mode_set()
1036 if (psb_intel_sdvo->has_hdmi_monitor) { in psb_intel_sdvo_mode_set()
1044 if (psb_intel_sdvo->is_tv && in psb_intel_sdvo_mode_set()
1060 sdvox = REG_READ(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_mode_set()
1061 switch (psb_intel_sdvo->sdvo_reg) { in psb_intel_sdvo_mode_set()
1071 if (psb_intel_crtc->pipe == 1) in psb_intel_sdvo_mode_set()
1073 if (psb_intel_sdvo->has_hdmi_audio) in psb_intel_sdvo_mode_set()
1077 sdvox |= (pixel_multiplier - 1) << SDVO_PORT_MULTIPLY_SHIFT; in psb_intel_sdvo_mode_set()
1087 struct drm_device *dev = encoder->dev; in psb_intel_sdvo_dpms()
1108 temp = REG_READ(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_dpms()
1118 temp = REG_READ(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_dpms()
1130 DRM_DEBUG_KMS("First %s output reported failure to " in psb_intel_sdvo_dpms()
1136 psb_intel_sdvo_set_active_outputs(psb_intel_sdvo, psb_intel_sdvo->attached_output); in psb_intel_sdvo_dpms()
1144 struct drm_psb_private *dev_priv = connector->dev->dev_private; in psb_intel_sdvo_mode_valid()
1147 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) in psb_intel_sdvo_mode_valid()
1150 if (psb_intel_sdvo->pixel_clock_min > mode->clock) in psb_intel_sdvo_mode_valid()
1153 if (psb_intel_sdvo->pixel_clock_max < mode->clock) in psb_intel_sdvo_mode_valid()
1156 if (psb_intel_sdvo->is_lvds) { in psb_intel_sdvo_mode_valid()
1157 if (mode->hdisplay > psb_intel_sdvo->sdvo_lvds_fixed_mode->hdisplay) in psb_intel_sdvo_mode_valid()
1160 if (mode->vdisplay > psb_intel_sdvo->sdvo_lvds_fixed_mode->vdisplay) in psb_intel_sdvo_mode_valid()
1165 if ((ALIGN(mode->hdisplay * 4, 64) * mode->vdisplay) > in psb_intel_sdvo_mode_valid()
1166 dev_priv->vram_stolen_size) in psb_intel_sdvo_mode_valid()
1193 caps->vendor_id, in psb_intel_sdvo_get_capabilities()
1194 caps->device_id, in psb_intel_sdvo_get_capabilities()
1195 caps->device_rev_id, in psb_intel_sdvo_get_capabilities()
1196 caps->sdvo_version_major, in psb_intel_sdvo_get_capabilities()
1197 caps->sdvo_version_minor, in psb_intel_sdvo_get_capabilities()
1198 caps->sdvo_inputs_mask, in psb_intel_sdvo_get_capabilities()
1199 caps->smooth_scaling, in psb_intel_sdvo_get_capabilities()
1200 caps->sharp_scaling, in psb_intel_sdvo_get_capabilities()
1201 caps->up_scaling, in psb_intel_sdvo_get_capabilities()
1202 caps->down_scaling, in psb_intel_sdvo_get_capabilities()
1203 caps->stall_support, in psb_intel_sdvo_get_capabilities()
1204 caps->output_flags); in psb_intel_sdvo_get_capabilities()
1218 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1221 if (iout->type != INTEL_OUTPUT_SDVO)
1224 sdvo = iout->dev_priv;
1226 if (sdvo->sdvo_reg == SDVOB && sdvoB)
1229 if (sdvo->sdvo_reg == SDVOC && !sdvoB)
1281 /* Is there more than one type of output? */ in psb_intel_sdvo_multifunc_encoder()
1282 int caps = psb_intel_sdvo->caps.output_flags & 0xf; in psb_intel_sdvo_multifunc_encoder()
1283 return caps & -caps; in psb_intel_sdvo_multifunc_encoder()
1290 return drm_get_edid(connector, &sdvo->ddc); in psb_intel_sdvo_get_edid()
1293 /* Mac mini hack -- use the same DDC as the analog connector */
1297 struct drm_psb_private *dev_priv = connector->dev->dev_private; in psb_intel_sdvo_get_analog_edid()
1300 &dev_priv->gmbus[dev_priv->crt_ddc_pin].adapter); in psb_intel_sdvo_get_analog_edid()
1314 u8 ddc, saved_ddc = psb_intel_sdvo->ddc_bus; in psb_intel_sdvo_hdmi_sink_detect()
1320 for (ddc = psb_intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in psb_intel_sdvo_hdmi_sink_detect()
1321 psb_intel_sdvo->ddc_bus = ddc; in psb_intel_sdvo_hdmi_sink_detect()
1331 psb_intel_sdvo->ddc_bus = saved_ddc; in psb_intel_sdvo_hdmi_sink_detect()
1336 * port, try to use the CRT ddc to read the EDID for DVI-connector. in psb_intel_sdvo_hdmi_sink_detect()
1344 if (edid->input & DRM_EDID_INPUT_DIGITAL) { in psb_intel_sdvo_hdmi_sink_detect()
1346 if (psb_intel_sdvo->is_hdmi) { in psb_intel_sdvo_hdmi_sink_detect()
1347 psb_intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid); in psb_intel_sdvo_hdmi_sink_detect()
1348 psb_intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid); in psb_intel_sdvo_hdmi_sink_detect()
1352 connector->display_info.raw_edid = NULL; in psb_intel_sdvo_hdmi_sink_detect()
1358 if (psb_intel_sdvo_connector->force_audio) in psb_intel_sdvo_hdmi_sink_detect()
1359 psb_intel_sdvo->has_hdmi_audio = psb_intel_sdvo_connector->force_audio > 0; in psb_intel_sdvo_hdmi_sink_detect()
1377 /* add 30ms delay when the output type might be TV */ in psb_intel_sdvo_detect()
1378 if (psb_intel_sdvo->caps.output_flags & in psb_intel_sdvo_detect()
1387 psb_intel_sdvo_connector->output_flag); in psb_intel_sdvo_detect()
1392 psb_intel_sdvo->attached_output = response; in psb_intel_sdvo_detect()
1394 psb_intel_sdvo->has_hdmi_monitor = false; in psb_intel_sdvo_detect()
1395 psb_intel_sdvo->has_hdmi_audio = false; in psb_intel_sdvo_detect()
1397 if ((psb_intel_sdvo_connector->output_flag & response) == 0) in psb_intel_sdvo_detect()
1409 if (edid->input & DRM_EDID_INPUT_DIGITAL) in psb_intel_sdvo_detect()
1413 connector->display_info.raw_edid = NULL; in psb_intel_sdvo_detect()
1419 /* May update encoder flag for like clock for SDVO TV, etc.*/ in psb_intel_sdvo_detect()
1421 psb_intel_sdvo->is_tv = false; in psb_intel_sdvo_detect()
1422 psb_intel_sdvo->is_lvds = false; in psb_intel_sdvo_detect()
1423 psb_intel_sdvo->base.needs_tv_clock = false; in psb_intel_sdvo_detect()
1426 psb_intel_sdvo->is_tv = true; in psb_intel_sdvo_detect()
1427 psb_intel_sdvo->base.needs_tv_clock = true; in psb_intel_sdvo_detect()
1430 psb_intel_sdvo->is_lvds = psb_intel_sdvo->sdvo_lvds_fixed_mode != NULL; in psb_intel_sdvo_detect()
1444 * Mac mini hack. On this device, the DVI-I connector shares one DDC in psb_intel_sdvo_get_ddc_modes()
1446 * DDC fails, check to see if the analog output is disconnected, in in psb_intel_sdvo_get_ddc_modes()
1454 bool monitor_is_digital = !!(edid->input & DRM_EDID_INPUT_DIGITAL); in psb_intel_sdvo_get_ddc_modes()
1462 connector->display_info.raw_edid = NULL; in psb_intel_sdvo_get_ddc_modes()
1542 format_map = 1 << psb_intel_sdvo->tv_format_index; in psb_intel_sdvo_get_tv_modes()
1546 if (!psb_intel_sdvo_set_target_output(psb_intel_sdvo, psb_intel_sdvo->attached_output)) in psb_intel_sdvo_get_tv_modes()
1560 nmode = drm_mode_duplicate(connector->dev, in psb_intel_sdvo_get_tv_modes()
1570 struct drm_psb_private *dev_priv = connector->dev->dev_private; in psb_intel_sdvo_get_lvds_modes()
1578 psb_intel_ddc_get_modes(connector, psb_intel_sdvo->i2c); in psb_intel_sdvo_get_lvds_modes()
1579 if (list_empty(&connector->probed_modes) == false) in psb_intel_sdvo_get_lvds_modes()
1583 if (dev_priv->sdvo_lvds_vbt_mode != NULL) { in psb_intel_sdvo_get_lvds_modes()
1584 newmode = drm_mode_duplicate(connector->dev, in psb_intel_sdvo_get_lvds_modes()
1585 dev_priv->sdvo_lvds_vbt_mode); in psb_intel_sdvo_get_lvds_modes()
1588 newmode->type = (DRM_MODE_TYPE_PREFERRED | in psb_intel_sdvo_get_lvds_modes()
1595 list_for_each_entry(newmode, &connector->probed_modes, head) { in psb_intel_sdvo_get_lvds_modes()
1596 if (newmode->type & DRM_MODE_TYPE_PREFERRED) { in psb_intel_sdvo_get_lvds_modes()
1597 psb_intel_sdvo->sdvo_lvds_fixed_mode = in psb_intel_sdvo_get_lvds_modes()
1598 drm_mode_duplicate(connector->dev, newmode); in psb_intel_sdvo_get_lvds_modes()
1600 drm_mode_set_crtcinfo(psb_intel_sdvo->sdvo_lvds_fixed_mode, in psb_intel_sdvo_get_lvds_modes()
1603 psb_intel_sdvo->is_lvds = true; in psb_intel_sdvo_get_lvds_modes()
1621 return !list_empty(&connector->probed_modes); in psb_intel_sdvo_get_modes()
1628 struct drm_device *dev = connector->dev; in psb_intel_sdvo_destroy_enhance_property()
1630 if (psb_intel_sdvo_connector->left) in psb_intel_sdvo_destroy_enhance_property()
1631 drm_property_destroy(dev, psb_intel_sdvo_connector->left); in psb_intel_sdvo_destroy_enhance_property()
1632 if (psb_intel_sdvo_connector->right) in psb_intel_sdvo_destroy_enhance_property()
1633 drm_property_destroy(dev, psb_intel_sdvo_connector->right); in psb_intel_sdvo_destroy_enhance_property()
1634 if (psb_intel_sdvo_connector->top) in psb_intel_sdvo_destroy_enhance_property()
1635 drm_property_destroy(dev, psb_intel_sdvo_connector->top); in psb_intel_sdvo_destroy_enhance_property()
1636 if (psb_intel_sdvo_connector->bottom) in psb_intel_sdvo_destroy_enhance_property()
1637 drm_property_destroy(dev, psb_intel_sdvo_connector->bottom); in psb_intel_sdvo_destroy_enhance_property()
1638 if (psb_intel_sdvo_connector->hpos) in psb_intel_sdvo_destroy_enhance_property()
1639 drm_property_destroy(dev, psb_intel_sdvo_connector->hpos); in psb_intel_sdvo_destroy_enhance_property()
1640 if (psb_intel_sdvo_connector->vpos) in psb_intel_sdvo_destroy_enhance_property()
1641 drm_property_destroy(dev, psb_intel_sdvo_connector->vpos); in psb_intel_sdvo_destroy_enhance_property()
1642 if (psb_intel_sdvo_connector->saturation) in psb_intel_sdvo_destroy_enhance_property()
1643 drm_property_destroy(dev, psb_intel_sdvo_connector->saturation); in psb_intel_sdvo_destroy_enhance_property()
1644 if (psb_intel_sdvo_connector->contrast) in psb_intel_sdvo_destroy_enhance_property()
1645 drm_property_destroy(dev, psb_intel_sdvo_connector->contrast); in psb_intel_sdvo_destroy_enhance_property()
1646 if (psb_intel_sdvo_connector->hue) in psb_intel_sdvo_destroy_enhance_property()
1647 drm_property_destroy(dev, psb_intel_sdvo_connector->hue); in psb_intel_sdvo_destroy_enhance_property()
1648 if (psb_intel_sdvo_connector->sharpness) in psb_intel_sdvo_destroy_enhance_property()
1649 drm_property_destroy(dev, psb_intel_sdvo_connector->sharpness); in psb_intel_sdvo_destroy_enhance_property()
1650 if (psb_intel_sdvo_connector->flicker_filter) in psb_intel_sdvo_destroy_enhance_property()
1651 drm_property_destroy(dev, psb_intel_sdvo_connector->flicker_filter); in psb_intel_sdvo_destroy_enhance_property()
1652 if (psb_intel_sdvo_connector->flicker_filter_2d) in psb_intel_sdvo_destroy_enhance_property()
1653 drm_property_destroy(dev, psb_intel_sdvo_connector->flicker_filter_2d); in psb_intel_sdvo_destroy_enhance_property()
1654 if (psb_intel_sdvo_connector->flicker_filter_adaptive) in psb_intel_sdvo_destroy_enhance_property()
1655 drm_property_destroy(dev, psb_intel_sdvo_connector->flicker_filter_adaptive); in psb_intel_sdvo_destroy_enhance_property()
1656 if (psb_intel_sdvo_connector->tv_luma_filter) in psb_intel_sdvo_destroy_enhance_property()
1657 drm_property_destroy(dev, psb_intel_sdvo_connector->tv_luma_filter); in psb_intel_sdvo_destroy_enhance_property()
1658 if (psb_intel_sdvo_connector->tv_chroma_filter) in psb_intel_sdvo_destroy_enhance_property()
1659 drm_property_destroy(dev, psb_intel_sdvo_connector->tv_chroma_filter); in psb_intel_sdvo_destroy_enhance_property()
1660 if (psb_intel_sdvo_connector->dot_crawl) in psb_intel_sdvo_destroy_enhance_property()
1661 drm_property_destroy(dev, psb_intel_sdvo_connector->dot_crawl); in psb_intel_sdvo_destroy_enhance_property()
1662 if (psb_intel_sdvo_connector->brightness) in psb_intel_sdvo_destroy_enhance_property()
1663 drm_property_destroy(dev, psb_intel_sdvo_connector->brightness); in psb_intel_sdvo_destroy_enhance_property()
1670 if (psb_intel_sdvo_connector->tv_format) in psb_intel_sdvo_destroy()
1671 drm_property_destroy(connector->dev, in psb_intel_sdvo_destroy()
1672 psb_intel_sdvo_connector->tv_format); in psb_intel_sdvo_destroy()
1686 if (!psb_intel_sdvo->is_hdmi) in psb_intel_sdvo_detect_hdmi_audio()
1690 if (edid != NULL && edid->input & DRM_EDID_INPUT_DIGITAL) in psb_intel_sdvo_detect_hdmi_audio()
1703 struct drm_psb_private *dev_priv = connector->dev->dev_private; in psb_intel_sdvo_set_property()
1712 if (property == dev_priv->force_audio_property) { in psb_intel_sdvo_set_property()
1716 if (i == psb_intel_sdvo_connector->force_audio) in psb_intel_sdvo_set_property()
1719 psb_intel_sdvo_connector->force_audio = i; in psb_intel_sdvo_set_property()
1726 if (has_audio == psb_intel_sdvo->has_hdmi_audio) in psb_intel_sdvo_set_property()
1729 psb_intel_sdvo->has_hdmi_audio = has_audio; in psb_intel_sdvo_set_property()
1733 if (property == dev_priv->broadcast_rgb_property) { in psb_intel_sdvo_set_property()
1734 if (val == !!psb_intel_sdvo->color_range) in psb_intel_sdvo_set_property()
1737 psb_intel_sdvo->color_range = val ? SDVO_COLOR_RANGE_16_235 : 0; in psb_intel_sdvo_set_property()
1742 if (psb_intel_sdvo_connector->name == property) { \ in psb_intel_sdvo_set_property()
1743 if (psb_intel_sdvo_connector->cur_##name == temp_value) return 0; \ in psb_intel_sdvo_set_property()
1744 if (psb_intel_sdvo_connector->max_##name < temp_value) return -EINVAL; \ in psb_intel_sdvo_set_property()
1746 psb_intel_sdvo_connector->cur_##name = temp_value; \ in psb_intel_sdvo_set_property()
1750 if (property == psb_intel_sdvo_connector->tv_format) { in psb_intel_sdvo_set_property()
1752 return -EINVAL; in psb_intel_sdvo_set_property()
1754 if (psb_intel_sdvo->tv_format_index == in psb_intel_sdvo_set_property()
1755 psb_intel_sdvo_connector->tv_format_supported[val]) in psb_intel_sdvo_set_property()
1758 psb_intel_sdvo->tv_format_index = psb_intel_sdvo_connector->tv_format_supported[val]; in psb_intel_sdvo_set_property()
1762 if (psb_intel_sdvo_connector->left == property) { in psb_intel_sdvo_set_property()
1764 psb_intel_sdvo_connector->right, val); in psb_intel_sdvo_set_property()
1765 if (psb_intel_sdvo_connector->left_margin == temp_value) in psb_intel_sdvo_set_property()
1768 psb_intel_sdvo_connector->left_margin = temp_value; in psb_intel_sdvo_set_property()
1769 psb_intel_sdvo_connector->right_margin = temp_value; in psb_intel_sdvo_set_property()
1770 temp_value = psb_intel_sdvo_connector->max_hscan - in psb_intel_sdvo_set_property()
1771 psb_intel_sdvo_connector->left_margin; in psb_intel_sdvo_set_property()
1774 } else if (psb_intel_sdvo_connector->right == property) { in psb_intel_sdvo_set_property()
1776 psb_intel_sdvo_connector->left, val); in psb_intel_sdvo_set_property()
1777 if (psb_intel_sdvo_connector->right_margin == temp_value) in psb_intel_sdvo_set_property()
1780 psb_intel_sdvo_connector->left_margin = temp_value; in psb_intel_sdvo_set_property()
1781 psb_intel_sdvo_connector->right_margin = temp_value; in psb_intel_sdvo_set_property()
1782 temp_value = psb_intel_sdvo_connector->max_hscan - in psb_intel_sdvo_set_property()
1783 psb_intel_sdvo_connector->left_margin; in psb_intel_sdvo_set_property()
1786 } else if (psb_intel_sdvo_connector->top == property) { in psb_intel_sdvo_set_property()
1788 psb_intel_sdvo_connector->bottom, val); in psb_intel_sdvo_set_property()
1789 if (psb_intel_sdvo_connector->top_margin == temp_value) in psb_intel_sdvo_set_property()
1792 psb_intel_sdvo_connector->top_margin = temp_value; in psb_intel_sdvo_set_property()
1793 psb_intel_sdvo_connector->bottom_margin = temp_value; in psb_intel_sdvo_set_property()
1794 temp_value = psb_intel_sdvo_connector->max_vscan - in psb_intel_sdvo_set_property()
1795 psb_intel_sdvo_connector->top_margin; in psb_intel_sdvo_set_property()
1798 } else if (psb_intel_sdvo_connector->bottom == property) { in psb_intel_sdvo_set_property()
1800 psb_intel_sdvo_connector->top, val); in psb_intel_sdvo_set_property()
1801 if (psb_intel_sdvo_connector->bottom_margin == temp_value) in psb_intel_sdvo_set_property()
1804 psb_intel_sdvo_connector->top_margin = temp_value; in psb_intel_sdvo_set_property()
1805 psb_intel_sdvo_connector->bottom_margin = temp_value; in psb_intel_sdvo_set_property()
1806 temp_value = psb_intel_sdvo_connector->max_vscan - in psb_intel_sdvo_set_property()
1807 psb_intel_sdvo_connector->top_margin; in psb_intel_sdvo_set_property()
1826 return -EINVAL; /* unknown property */ in psb_intel_sdvo_set_property()
1830 return -EIO; in psb_intel_sdvo_set_property()
1834 if (psb_intel_sdvo->base.base.crtc) { in psb_intel_sdvo_set_property()
1835 struct drm_crtc *crtc = psb_intel_sdvo->base.base.crtc; in psb_intel_sdvo_set_property()
1836 drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x, in psb_intel_sdvo_set_property()
1837 crtc->y, crtc->fb); in psb_intel_sdvo_set_property()
1870 if (psb_intel_sdvo->sdvo_lvds_fixed_mode != NULL) in psb_intel_sdvo_enc_destroy()
1871 drm_mode_destroy(encoder->dev, in psb_intel_sdvo_enc_destroy()
1872 psb_intel_sdvo->sdvo_lvds_fixed_mode); in psb_intel_sdvo_enc_destroy()
1874 i2c_del_adapter(&psb_intel_sdvo->ddc); in psb_intel_sdvo_enc_destroy()
1889 sdvo->ddc_bus = 2; in psb_intel_sdvo_guess_ddc_bus()
1898 switch (sdvo->controlled_output) { in psb_intel_sdvo_guess_ddc_bus()
1915 mask &= sdvo->caps.output_flags; in psb_intel_sdvo_guess_ddc_bus()
1922 sdvo->ddc_bus = 1 << num_bits; in psb_intel_sdvo_guess_ddc_bus()
1928 * SDVO output based on the controlled output.
1940 mapping = &(dev_priv->sdvo_mappings[0]); in psb_intel_sdvo_select_ddc_bus()
1942 mapping = &(dev_priv->sdvo_mappings[1]); in psb_intel_sdvo_select_ddc_bus()
1944 if (mapping->initialized) in psb_intel_sdvo_select_ddc_bus()
1945 sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4); in psb_intel_sdvo_select_ddc_bus()
1958 mapping = &dev_priv->sdvo_mappings[0]; in psb_intel_sdvo_select_i2c_bus()
1960 mapping = &dev_priv->sdvo_mappings[1]; in psb_intel_sdvo_select_i2c_bus()
1964 if (mapping->initialized) { in psb_intel_sdvo_select_i2c_bus()
1965 pin = mapping->i2c_pin; in psb_intel_sdvo_select_i2c_bus()
1966 speed = mapping->i2c_speed; in psb_intel_sdvo_select_i2c_bus()
1970 sdvo->i2c = &dev_priv->gmbus[pin].adapter; in psb_intel_sdvo_select_i2c_bus()
1971 gma_intel_gmbus_set_speed(sdvo->i2c, speed); in psb_intel_sdvo_select_i2c_bus()
1972 gma_intel_gmbus_force_bit(sdvo->i2c, true); in psb_intel_sdvo_select_i2c_bus()
1974 sdvo->i2c = &dev_priv->gmbus[GMBUS_PORT_DPB].adapter; in psb_intel_sdvo_select_i2c_bus()
1986 struct drm_psb_private *dev_priv = dev->dev_private; in psb_intel_sdvo_get_slave_addr()
1990 my_mapping = &dev_priv->sdvo_mappings[0]; in psb_intel_sdvo_get_slave_addr()
1991 other_mapping = &dev_priv->sdvo_mappings[1]; in psb_intel_sdvo_get_slave_addr()
1993 my_mapping = &dev_priv->sdvo_mappings[1]; in psb_intel_sdvo_get_slave_addr()
1994 other_mapping = &dev_priv->sdvo_mappings[0]; in psb_intel_sdvo_get_slave_addr()
1998 if (my_mapping->slave_addr) in psb_intel_sdvo_get_slave_addr()
1999 return my_mapping->slave_addr; in psb_intel_sdvo_get_slave_addr()
2004 if (other_mapping->slave_addr) { in psb_intel_sdvo_get_slave_addr()
2005 if (other_mapping->slave_addr == 0x70) in psb_intel_sdvo_get_slave_addr()
2024 drm_connector_init(encoder->base.base.dev, in psb_intel_sdvo_connector_init()
2025 &connector->base.base, in psb_intel_sdvo_connector_init()
2027 connector->base.base.connector_type); in psb_intel_sdvo_connector_init()
2029 drm_connector_helper_add(&connector->base.base, in psb_intel_sdvo_connector_init()
2032 connector->base.base.interlace_allowed = 0; in psb_intel_sdvo_connector_init()
2033 connector->base.base.doublescan_allowed = 0; in psb_intel_sdvo_connector_init()
2034 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; in psb_intel_sdvo_connector_init()
2036 psb_intel_connector_attach_encoder(&connector->base, &encoder->base); in psb_intel_sdvo_connector_init()
2037 drm_sysfs_connector_add(&connector->base.base); in psb_intel_sdvo_connector_init()
2044 struct drm_device *dev = connector->base.base.dev; in psb_intel_sdvo_add_hdmi_properties()
2046 intel_attach_force_audio_property(&connector->base.base); in psb_intel_sdvo_add_hdmi_properties()
2047 if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) in psb_intel_sdvo_add_hdmi_properties()
2048 intel_attach_broadcast_rgb_property(&connector->base.base); in psb_intel_sdvo_add_hdmi_properties()
2055 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_dvi_init()
2065 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; in psb_intel_sdvo_dvi_init()
2066 psb_intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0; in psb_intel_sdvo_dvi_init()
2068 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; in psb_intel_sdvo_dvi_init()
2069 psb_intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1; in psb_intel_sdvo_dvi_init()
2072 intel_connector = &psb_intel_sdvo_connector->base; in psb_intel_sdvo_dvi_init()
2073 connector = &intel_connector->base; in psb_intel_sdvo_dvi_init()
2074 // connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT; in psb_intel_sdvo_dvi_init()
2075 encoder->encoder_type = DRM_MODE_ENCODER_TMDS; in psb_intel_sdvo_dvi_init()
2076 connector->connector_type = DRM_MODE_CONNECTOR_DVID; in psb_intel_sdvo_dvi_init()
2079 connector->connector_type = DRM_MODE_CONNECTOR_HDMIA; in psb_intel_sdvo_dvi_init()
2080 psb_intel_sdvo->is_hdmi = true; in psb_intel_sdvo_dvi_init()
2082 psb_intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | in psb_intel_sdvo_dvi_init()
2086 if (psb_intel_sdvo->is_hdmi) in psb_intel_sdvo_dvi_init()
2095 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_tv_init()
2104 intel_connector = &psb_intel_sdvo_connector->base; in psb_intel_sdvo_tv_init()
2105 connector = &intel_connector->base; in psb_intel_sdvo_tv_init()
2106 encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; in psb_intel_sdvo_tv_init()
2107 connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; in psb_intel_sdvo_tv_init()
2109 psb_intel_sdvo->controlled_output |= type; in psb_intel_sdvo_tv_init()
2110 psb_intel_sdvo_connector->output_flag = type; in psb_intel_sdvo_tv_init()
2112 psb_intel_sdvo->is_tv = true; in psb_intel_sdvo_tv_init()
2113 psb_intel_sdvo->base.needs_tv_clock = true; in psb_intel_sdvo_tv_init()
2114 psb_intel_sdvo->base.clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; in psb_intel_sdvo_tv_init()
2134 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_analog_init()
2143 intel_connector = &psb_intel_sdvo_connector->base; in psb_intel_sdvo_analog_init()
2144 connector = &intel_connector->base; in psb_intel_sdvo_analog_init()
2145 connector->polled = DRM_CONNECTOR_POLL_CONNECT; in psb_intel_sdvo_analog_init()
2146 encoder->encoder_type = DRM_MODE_ENCODER_DAC; in psb_intel_sdvo_analog_init()
2147 connector->connector_type = DRM_MODE_CONNECTOR_VGA; in psb_intel_sdvo_analog_init()
2150 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; in psb_intel_sdvo_analog_init()
2151 psb_intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0; in psb_intel_sdvo_analog_init()
2153 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; in psb_intel_sdvo_analog_init()
2154 psb_intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; in psb_intel_sdvo_analog_init()
2157 psb_intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | in psb_intel_sdvo_analog_init()
2168 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_lvds_init()
2177 intel_connector = &psb_intel_sdvo_connector->base; in psb_intel_sdvo_lvds_init()
2178 connector = &intel_connector->base; in psb_intel_sdvo_lvds_init()
2179 encoder->encoder_type = DRM_MODE_ENCODER_LVDS; in psb_intel_sdvo_lvds_init()
2180 connector->connector_type = DRM_MODE_CONNECTOR_LVDS; in psb_intel_sdvo_lvds_init()
2183 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; in psb_intel_sdvo_lvds_init()
2184 psb_intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0; in psb_intel_sdvo_lvds_init()
2186 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; in psb_intel_sdvo_lvds_init()
2187 psb_intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; in psb_intel_sdvo_lvds_init()
2190 psb_intel_sdvo->base.clone_mask = ((1 << INTEL_ANALOG_CLONE_BIT) | in psb_intel_sdvo_lvds_init()
2207 psb_intel_sdvo->is_tv = false; in psb_intel_sdvo_output_setup()
2208 psb_intel_sdvo->base.needs_tv_clock = false; in psb_intel_sdvo_output_setup()
2209 psb_intel_sdvo->is_lvds = false; in psb_intel_sdvo_output_setup()
2249 psb_intel_sdvo->controlled_output = 0; in psb_intel_sdvo_output_setup()
2250 memcpy(bytes, &psb_intel_sdvo->caps.output_flags, 2); in psb_intel_sdvo_output_setup()
2251 DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n", in psb_intel_sdvo_output_setup()
2256 psb_intel_sdvo->base.crtc_mask = (1 << 0) | (1 << 1); in psb_intel_sdvo_output_setup()
2265 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_tv_create_property()
2283 psb_intel_sdvo_connector->format_supported_num = 0; in psb_intel_sdvo_tv_create_property()
2286 …psb_intel_sdvo_connector->tv_format_supported[psb_intel_sdvo_connector->format_supported_num++] = … in psb_intel_sdvo_tv_create_property()
2289 psb_intel_sdvo_connector->tv_format = in psb_intel_sdvo_tv_create_property()
2291 "mode", psb_intel_sdvo_connector->format_supported_num); in psb_intel_sdvo_tv_create_property()
2292 if (!psb_intel_sdvo_connector->tv_format) in psb_intel_sdvo_tv_create_property()
2295 for (i = 0; i < psb_intel_sdvo_connector->format_supported_num; i++) in psb_intel_sdvo_tv_create_property()
2297 psb_intel_sdvo_connector->tv_format, i, in psb_intel_sdvo_tv_create_property()
2298 i, tv_format_names[psb_intel_sdvo_connector->tv_format_supported[i]]); in psb_intel_sdvo_tv_create_property()
2300 psb_intel_sdvo->tv_format_index = psb_intel_sdvo_connector->tv_format_supported[0]; in psb_intel_sdvo_tv_create_property()
2301 drm_connector_attach_property(&psb_intel_sdvo_connector->base.base, in psb_intel_sdvo_tv_create_property()
2302 psb_intel_sdvo_connector->tv_format, 0); in psb_intel_sdvo_tv_create_property()
2312 psb_intel_sdvo_connector->max_##name = data_value[0]; \
2313 psb_intel_sdvo_connector->cur_##name = response; \
2314 psb_intel_sdvo_connector->name = \
2316 if (!psb_intel_sdvo_connector->name) return false; \
2317 psb_intel_sdvo_connector->name->values[0] = 0; \
2318 psb_intel_sdvo_connector->name->values[1] = data_value[0]; \
2320 psb_intel_sdvo_connector->name, \
2321 psb_intel_sdvo_connector->cur_##name); \
2332 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_create_enhance_property_tv()
2333 struct drm_connector *connector = &psb_intel_sdvo_connector->base.base; in psb_intel_sdvo_create_enhance_property_tv()
2348 psb_intel_sdvo_connector->max_hscan = data_value[0]; in psb_intel_sdvo_create_enhance_property_tv()
2349 psb_intel_sdvo_connector->left_margin = data_value[0] - response; in psb_intel_sdvo_create_enhance_property_tv()
2350 psb_intel_sdvo_connector->right_margin = psb_intel_sdvo_connector->left_margin; in psb_intel_sdvo_create_enhance_property_tv()
2351 psb_intel_sdvo_connector->left = in psb_intel_sdvo_create_enhance_property_tv()
2354 if (!psb_intel_sdvo_connector->left) in psb_intel_sdvo_create_enhance_property_tv()
2357 psb_intel_sdvo_connector->left->values[0] = 0; in psb_intel_sdvo_create_enhance_property_tv()
2358 psb_intel_sdvo_connector->left->values[1] = data_value[0]; in psb_intel_sdvo_create_enhance_property_tv()
2360 psb_intel_sdvo_connector->left, in psb_intel_sdvo_create_enhance_property_tv()
2361 psb_intel_sdvo_connector->left_margin); in psb_intel_sdvo_create_enhance_property_tv()
2363 psb_intel_sdvo_connector->right = in psb_intel_sdvo_create_enhance_property_tv()
2366 if (!psb_intel_sdvo_connector->right) in psb_intel_sdvo_create_enhance_property_tv()
2369 psb_intel_sdvo_connector->right->values[0] = 0; in psb_intel_sdvo_create_enhance_property_tv()
2370 psb_intel_sdvo_connector->right->values[1] = data_value[0]; in psb_intel_sdvo_create_enhance_property_tv()
2372 psb_intel_sdvo_connector->right, in psb_intel_sdvo_create_enhance_property_tv()
2373 psb_intel_sdvo_connector->right_margin); in psb_intel_sdvo_create_enhance_property_tv()
2390 psb_intel_sdvo_connector->max_vscan = data_value[0]; in psb_intel_sdvo_create_enhance_property_tv()
2391 psb_intel_sdvo_connector->top_margin = data_value[0] - response; in psb_intel_sdvo_create_enhance_property_tv()
2392 psb_intel_sdvo_connector->bottom_margin = psb_intel_sdvo_connector->top_margin; in psb_intel_sdvo_create_enhance_property_tv()
2393 psb_intel_sdvo_connector->top = in psb_intel_sdvo_create_enhance_property_tv()
2396 if (!psb_intel_sdvo_connector->top) in psb_intel_sdvo_create_enhance_property_tv()
2399 psb_intel_sdvo_connector->top->values[0] = 0; in psb_intel_sdvo_create_enhance_property_tv()
2400 psb_intel_sdvo_connector->top->values[1] = data_value[0]; in psb_intel_sdvo_create_enhance_property_tv()
2402 psb_intel_sdvo_connector->top, in psb_intel_sdvo_create_enhance_property_tv()
2403 psb_intel_sdvo_connector->top_margin); in psb_intel_sdvo_create_enhance_property_tv()
2405 psb_intel_sdvo_connector->bottom = in psb_intel_sdvo_create_enhance_property_tv()
2408 if (!psb_intel_sdvo_connector->bottom) in psb_intel_sdvo_create_enhance_property_tv()
2411 psb_intel_sdvo_connector->bottom->values[0] = 0; in psb_intel_sdvo_create_enhance_property_tv()
2412 psb_intel_sdvo_connector->bottom->values[1] = data_value[0]; in psb_intel_sdvo_create_enhance_property_tv()
2414 psb_intel_sdvo_connector->bottom, in psb_intel_sdvo_create_enhance_property_tv()
2415 psb_intel_sdvo_connector->bottom_margin); in psb_intel_sdvo_create_enhance_property_tv()
2438 psb_intel_sdvo_connector->max_dot_crawl = 1; in psb_intel_sdvo_create_enhance_property_tv()
2439 psb_intel_sdvo_connector->cur_dot_crawl = response & 0x1; in psb_intel_sdvo_create_enhance_property_tv()
2440 psb_intel_sdvo_connector->dot_crawl = in psb_intel_sdvo_create_enhance_property_tv()
2442 if (!psb_intel_sdvo_connector->dot_crawl) in psb_intel_sdvo_create_enhance_property_tv()
2445 psb_intel_sdvo_connector->dot_crawl->values[0] = 0; in psb_intel_sdvo_create_enhance_property_tv()
2446 psb_intel_sdvo_connector->dot_crawl->values[1] = 1; in psb_intel_sdvo_create_enhance_property_tv()
2448 psb_intel_sdvo_connector->dot_crawl, in psb_intel_sdvo_create_enhance_property_tv()
2449 psb_intel_sdvo_connector->cur_dot_crawl); in psb_intel_sdvo_create_enhance_property_tv()
2461 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_create_enhance_property_lvds()
2462 struct drm_connector *connector = &psb_intel_sdvo_connector->base.base; in psb_intel_sdvo_create_enhance_property_lvds()
2502 struct psb_intel_sdvo *sdvo = adapter->algo_data; in psb_intel_sdvo_ddc_proxy_xfer()
2504 if (!psb_intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus)) in psb_intel_sdvo_ddc_proxy_xfer()
2505 return -EIO; in psb_intel_sdvo_ddc_proxy_xfer()
2507 return sdvo->i2c->algo->master_xfer(sdvo->i2c, msgs, num); in psb_intel_sdvo_ddc_proxy_xfer()
2512 struct psb_intel_sdvo *sdvo = adapter->algo_data; in psb_intel_sdvo_ddc_proxy_func()
2513 return sdvo->i2c->algo->functionality(sdvo->i2c); in psb_intel_sdvo_ddc_proxy_func()
2525 sdvo->ddc.owner = THIS_MODULE; in psb_intel_sdvo_init_ddc_proxy()
2526 sdvo->ddc.class = I2C_CLASS_DDC; in psb_intel_sdvo_init_ddc_proxy()
2527 snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy"); in psb_intel_sdvo_init_ddc_proxy()
2528 sdvo->ddc.dev.parent = &dev->pdev->dev; in psb_intel_sdvo_init_ddc_proxy()
2529 sdvo->ddc.algo_data = sdvo; in psb_intel_sdvo_init_ddc_proxy()
2530 sdvo->ddc.algo = &psb_intel_sdvo_ddc_proxy; in psb_intel_sdvo_init_ddc_proxy()
2532 return i2c_add_adapter(&sdvo->ddc) == 0; in psb_intel_sdvo_init_ddc_proxy()
2537 struct drm_psb_private *dev_priv = dev->dev_private; in psb_intel_sdvo_init()
2546 psb_intel_sdvo->sdvo_reg = sdvo_reg; in psb_intel_sdvo_init()
2547 psb_intel_sdvo->slave_addr = psb_intel_sdvo_get_slave_addr(dev, sdvo_reg) >> 1; in psb_intel_sdvo_init()
2555 psb_intel_encoder = &psb_intel_sdvo->base; in psb_intel_sdvo_init()
2556 psb_intel_encoder->type = INTEL_OUTPUT_SDVO; in psb_intel_sdvo_init()
2557 drm_encoder_init(dev, &psb_intel_encoder->base, &psb_intel_sdvo_enc_funcs, 0); in psb_intel_sdvo_init()
2571 dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS; in psb_intel_sdvo_init()
2573 dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS; in psb_intel_sdvo_init()
2575 drm_encoder_helper_add(&psb_intel_encoder->base, &psb_intel_sdvo_helper_funcs); in psb_intel_sdvo_init()
2578 if (!psb_intel_sdvo_get_capabilities(psb_intel_sdvo, &psb_intel_sdvo->caps)) in psb_intel_sdvo_init()
2582 psb_intel_sdvo->caps.output_flags) != true) { in psb_intel_sdvo_init()
2583 DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n", in psb_intel_sdvo_init()
2595 &psb_intel_sdvo->pixel_clock_min, in psb_intel_sdvo_init()
2596 &psb_intel_sdvo->pixel_clock_max)) in psb_intel_sdvo_init()
2600 "clock range %dMHz - %dMHz, " in psb_intel_sdvo_init()
2602 "output 1: %c, output 2: %c\n", in psb_intel_sdvo_init()
2604 psb_intel_sdvo->caps.vendor_id, psb_intel_sdvo->caps.device_id, in psb_intel_sdvo_init()
2605 psb_intel_sdvo->caps.device_rev_id, in psb_intel_sdvo_init()
2606 psb_intel_sdvo->pixel_clock_min / 1000, in psb_intel_sdvo_init()
2607 psb_intel_sdvo->pixel_clock_max / 1000, in psb_intel_sdvo_init()
2608 (psb_intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in psb_intel_sdvo_init()
2609 (psb_intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in psb_intel_sdvo_init()
2611 psb_intel_sdvo->caps.output_flags & in psb_intel_sdvo_init()
2613 psb_intel_sdvo->caps.output_flags & in psb_intel_sdvo_init()
2618 drm_encoder_cleanup(&psb_intel_encoder->base); in psb_intel_sdvo_init()
2619 i2c_del_adapter(&psb_intel_sdvo->ddc); in psb_intel_sdvo_init()