Lines Matching +full:clock +full:- +full:output +full:- +full:names

3  * Copyright © 2006-2007 Intel Corporation
49 #define IS_TV(c) (c->output_flag & SDVO_TV_MASK)
50 #define IS_TMDS(c) (c->output_flag & SDVO_TMDS_MASK)
51 #define IS_LVDS(c) (c->output_flag & SDVO_LVDS_MASK)
52 #define IS_TV_OR_LVDS(c) (c->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
53 #define IS_DIGITAL(c) (c->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
79 /* Active outputs controlled by this SDVO output */
88 /* Pixel clock limitations reported by the SDVO device, in kHz */
109 * This is set if we're going to treat the device as TV-out.
111 * While we have these nice friendly flags for output types that ought
112 * to decide this for us, the S-Video output on our HDMI+S-Video card
128 * This is set if we detect output of sdvo device as LVDS and
158 /* add the property for the SDVO-TV */
176 /* add the property for the SDVO-TV/LVDS */
232 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_write_sdvox()
233 struct drm_i915_private *dev_priv = dev->dev_private; in intel_sdvo_write_sdvox()
237 if (intel_sdvo->sdvo_reg == PCH_SDVOB) { in intel_sdvo_write_sdvox()
238 I915_WRITE(intel_sdvo->sdvo_reg, val); in intel_sdvo_write_sdvox()
239 I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_write_sdvox()
243 if (intel_sdvo->sdvo_reg == SDVOB) { in intel_sdvo_write_sdvox()
266 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
272 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
280 if ((ret = i2c_transfer(intel_sdvo->i2c, msgs, 2)) == 2) in intel_sdvo_read_byte()
288 /** Mapping of command numbers to names, for debug output */
407 #define SDVO_NAME(svdo) (IS_SDVOB((svdo)->sdvo_reg) ? "SDVOB" : "SDVOC")
451 msgs[i].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
455 buf[2*i + 0] = SDVO_I2C_ARG_0 - i; in intel_sdvo_write_cmd()
458 msgs[i].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
467 msgs[i+1].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
472 msgs[i+2].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
477 ret = i2c_transfer(intel_sdvo->i2c, msgs, i+3); in intel_sdvo_write_cmd()
513 while (status == SDVO_CMD_STATUS_PENDING && retry--) { in intel_sdvo_read_response()
547 if (mode->clock >= 100000) in intel_sdvo_get_pixel_multiplier()
549 else if (mode->clock >= 50000) in intel_sdvo_get_pixel_multiplier()
670 return intel_sdvo_set_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_set_timing()
671 intel_sdvo_set_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_set_timing()
690 uint16_t clock, in intel_sdvo_create_preferred_input_timing() argument
697 args.clock = clock; in intel_sdvo_create_preferred_input_timing()
702 if (intel_sdvo->is_lvds && in intel_sdvo_create_preferred_input_timing()
703 (intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width || in intel_sdvo_create_preferred_input_timing()
704 intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height)) in intel_sdvo_create_preferred_input_timing()
715 BUILD_BUG_ON(sizeof(dtd->part1) != 8); in intel_sdvo_get_preferred_input_timing()
716 BUILD_BUG_ON(sizeof(dtd->part2) != 8); in intel_sdvo_get_preferred_input_timing()
718 &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_get_preferred_input_timing()
720 &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_get_preferred_input_timing()
735 width = mode->crtc_hdisplay; in intel_sdvo_get_dtd_from_mode()
736 height = mode->crtc_vdisplay; in intel_sdvo_get_dtd_from_mode()
739 h_blank_len = mode->crtc_hblank_end - mode->crtc_hblank_start; in intel_sdvo_get_dtd_from_mode()
740 h_sync_len = mode->crtc_hsync_end - mode->crtc_hsync_start; in intel_sdvo_get_dtd_from_mode()
742 v_blank_len = mode->crtc_vblank_end - mode->crtc_vblank_start; in intel_sdvo_get_dtd_from_mode()
743 v_sync_len = mode->crtc_vsync_end - mode->crtc_vsync_start; in intel_sdvo_get_dtd_from_mode()
745 h_sync_offset = mode->crtc_hsync_start - mode->crtc_hblank_start; in intel_sdvo_get_dtd_from_mode()
746 v_sync_offset = mode->crtc_vsync_start - mode->crtc_vblank_start; in intel_sdvo_get_dtd_from_mode()
748 dtd->part1.clock = mode->clock / 10; in intel_sdvo_get_dtd_from_mode()
749 dtd->part1.h_active = width & 0xff; in intel_sdvo_get_dtd_from_mode()
750 dtd->part1.h_blank = h_blank_len & 0xff; in intel_sdvo_get_dtd_from_mode()
751 dtd->part1.h_high = (((width >> 8) & 0xf) << 4) | in intel_sdvo_get_dtd_from_mode()
753 dtd->part1.v_active = height & 0xff; in intel_sdvo_get_dtd_from_mode()
754 dtd->part1.v_blank = v_blank_len & 0xff; in intel_sdvo_get_dtd_from_mode()
755 dtd->part1.v_high = (((height >> 8) & 0xf) << 4) | in intel_sdvo_get_dtd_from_mode()
758 dtd->part2.h_sync_off = h_sync_offset & 0xff; in intel_sdvo_get_dtd_from_mode()
759 dtd->part2.h_sync_width = h_sync_len & 0xff; in intel_sdvo_get_dtd_from_mode()
760 dtd->part2.v_sync_off_width = (v_sync_offset & 0xf) << 4 | in intel_sdvo_get_dtd_from_mode()
762 dtd->part2.sync_off_width_high = ((h_sync_offset & 0x300) >> 2) | in intel_sdvo_get_dtd_from_mode()
766 dtd->part2.dtd_flags = 0x18; in intel_sdvo_get_dtd_from_mode()
767 if (mode->flags & DRM_MODE_FLAG_PHSYNC) in intel_sdvo_get_dtd_from_mode()
768 dtd->part2.dtd_flags |= 0x2; in intel_sdvo_get_dtd_from_mode()
769 if (mode->flags & DRM_MODE_FLAG_PVSYNC) in intel_sdvo_get_dtd_from_mode()
770 dtd->part2.dtd_flags |= 0x4; in intel_sdvo_get_dtd_from_mode()
772 dtd->part2.sdvo_flags = 0; in intel_sdvo_get_dtd_from_mode()
773 dtd->part2.v_sync_off_high = v_sync_offset & 0xc0; in intel_sdvo_get_dtd_from_mode()
774 dtd->part2.reserved = 0; in intel_sdvo_get_dtd_from_mode()
780 mode->hdisplay = dtd->part1.h_active; in intel_sdvo_get_mode_from_dtd()
781 mode->hdisplay += ((dtd->part1.h_high >> 4) & 0x0f) << 8; in intel_sdvo_get_mode_from_dtd()
782 mode->hsync_start = mode->hdisplay + dtd->part2.h_sync_off; in intel_sdvo_get_mode_from_dtd()
783 mode->hsync_start += (dtd->part2.sync_off_width_high & 0xc0) << 2; in intel_sdvo_get_mode_from_dtd()
784 mode->hsync_end = mode->hsync_start + dtd->part2.h_sync_width; in intel_sdvo_get_mode_from_dtd()
785 mode->hsync_end += (dtd->part2.sync_off_width_high & 0x30) << 4; in intel_sdvo_get_mode_from_dtd()
786 mode->htotal = mode->hdisplay + dtd->part1.h_blank; in intel_sdvo_get_mode_from_dtd()
787 mode->htotal += (dtd->part1.h_high & 0xf) << 8; in intel_sdvo_get_mode_from_dtd()
789 mode->vdisplay = dtd->part1.v_active; in intel_sdvo_get_mode_from_dtd()
790 mode->vdisplay += ((dtd->part1.v_high >> 4) & 0x0f) << 8; in intel_sdvo_get_mode_from_dtd()
791 mode->vsync_start = mode->vdisplay; in intel_sdvo_get_mode_from_dtd()
792 mode->vsync_start += (dtd->part2.v_sync_off_width >> 4) & 0xf; in intel_sdvo_get_mode_from_dtd()
793 mode->vsync_start += (dtd->part2.sync_off_width_high & 0x0c) << 2; in intel_sdvo_get_mode_from_dtd()
794 mode->vsync_start += dtd->part2.v_sync_off_high & 0xc0; in intel_sdvo_get_mode_from_dtd()
795 mode->vsync_end = mode->vsync_start + in intel_sdvo_get_mode_from_dtd()
796 (dtd->part2.v_sync_off_width & 0xf); in intel_sdvo_get_mode_from_dtd()
797 mode->vsync_end += (dtd->part2.sync_off_width_high & 0x3) << 4; in intel_sdvo_get_mode_from_dtd()
798 mode->vtotal = mode->vdisplay + dtd->part1.v_blank; in intel_sdvo_get_mode_from_dtd()
799 mode->vtotal += (dtd->part1.v_high & 0xf) << 8; in intel_sdvo_get_mode_from_dtd()
801 mode->clock = dtd->part1.clock * 10; in intel_sdvo_get_mode_from_dtd()
803 mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC); in intel_sdvo_get_mode_from_dtd()
804 if (dtd->part2.dtd_flags & 0x2) in intel_sdvo_get_mode_from_dtd()
805 mode->flags |= DRM_MODE_FLAG_PHSYNC; in intel_sdvo_get_mode_from_dtd()
806 if (dtd->part2.dtd_flags & 0x4) in intel_sdvo_get_mode_from_dtd()
807 mode->flags |= DRM_MODE_FLAG_PVSYNC; in intel_sdvo_get_mode_from_dtd()
899 format_map = 1 << intel_sdvo->tv_format_index; in intel_sdvo_set_tv_format()
916 intel_sdvo->attached_output)) in intel_sdvo_set_output_timings_from_mode()
936 mode->clock / 10, in intel_sdvo_set_input_timings_for_mode()
937 mode->hdisplay, in intel_sdvo_set_input_timings_for_mode()
938 mode->vdisplay)) in intel_sdvo_set_input_timings_for_mode()
942 &intel_sdvo->input_dtd)) in intel_sdvo_set_input_timings_for_mode()
945 intel_sdvo_get_mode_from_dtd(adjusted_mode, &intel_sdvo->input_dtd); in intel_sdvo_set_input_timings_for_mode()
959 * output timings. To do that, we have to set the output in intel_sdvo_mode_fixup()
963 if (intel_sdvo->is_tv) { in intel_sdvo_mode_fixup()
970 } else if (intel_sdvo->is_lvds) { in intel_sdvo_mode_fixup()
972 intel_sdvo->sdvo_lvds_fixed_mode)) in intel_sdvo_mode_fixup()
993 struct drm_device *dev = encoder->dev; in intel_sdvo_mode_set()
994 struct drm_i915_private *dev_priv = dev->dev_private; in intel_sdvo_mode_set()
995 struct drm_crtc *crtc = encoder->crtc; in intel_sdvo_mode_set()
1008 * output. This is only correct if we're a single-input device, in in intel_sdvo_mode_set()
1009 * which case the first input is the output from the appropriate SDVO in intel_sdvo_mode_set()
1010 * channel on the motherboard. In a two-input device, the first input in intel_sdvo_mode_set()
1013 in_out.in0 = intel_sdvo->attached_output; in intel_sdvo_mode_set()
1020 /* Set the output timings to the screen */ in intel_sdvo_mode_set()
1022 intel_sdvo->attached_output)) in intel_sdvo_mode_set()
1028 if (intel_sdvo->is_tv || intel_sdvo->is_lvds) { in intel_sdvo_mode_set()
1029 input_dtd = intel_sdvo->input_dtd; in intel_sdvo_mode_set()
1031 /* Set the output timing to the screen */ in intel_sdvo_mode_set()
1033 intel_sdvo->attached_output)) in intel_sdvo_mode_set()
1044 if (intel_sdvo->has_hdmi_monitor) { in intel_sdvo_mode_set()
1052 if (intel_sdvo->is_tv && in intel_sdvo_mode_set()
1068 if (INTEL_INFO(dev)->gen >= 4) { in intel_sdvo_mode_set()
1072 if (intel_sdvo->is_hdmi) in intel_sdvo_mode_set()
1073 sdvox |= intel_sdvo->color_range; in intel_sdvo_mode_set()
1074 if (INTEL_INFO(dev)->gen < 5) in intel_sdvo_mode_set()
1077 sdvox = I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_mode_set()
1078 switch (intel_sdvo->sdvo_reg) { in intel_sdvo_mode_set()
1090 sdvox |= TRANSCODER_CPT(intel_crtc->pipe); in intel_sdvo_mode_set()
1092 sdvox |= TRANSCODER(intel_crtc->pipe); in intel_sdvo_mode_set()
1094 if (intel_sdvo->has_hdmi_audio) in intel_sdvo_mode_set()
1097 if (INTEL_INFO(dev)->gen >= 4) { in intel_sdvo_mode_set()
1102 sdvox |= (pixel_multiplier - 1) << SDVO_PORT_MULTIPLY_SHIFT; in intel_sdvo_mode_set()
1106 INTEL_INFO(dev)->gen < 5) in intel_sdvo_mode_set()
1113 struct drm_device *dev = encoder->dev; in intel_sdvo_dpms()
1114 struct drm_i915_private *dev_priv = dev->dev_private; in intel_sdvo_dpms()
1116 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); in intel_sdvo_dpms()
1125 temp = I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_dpms()
1135 temp = I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_dpms()
1139 intel_wait_for_vblank(dev, intel_crtc->pipe); in intel_sdvo_dpms()
1147 DRM_DEBUG_KMS("First %s output reported failure to " in intel_sdvo_dpms()
1153 intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output); in intel_sdvo_dpms()
1163 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) in intel_sdvo_mode_valid()
1166 if (intel_sdvo->pixel_clock_min > mode->clock) in intel_sdvo_mode_valid()
1169 if (intel_sdvo->pixel_clock_max < mode->clock) in intel_sdvo_mode_valid()
1172 if (intel_sdvo->is_lvds) { in intel_sdvo_mode_valid()
1173 if (mode->hdisplay > intel_sdvo->sdvo_lvds_fixed_mode->hdisplay) in intel_sdvo_mode_valid()
1176 if (mode->vdisplay > intel_sdvo->sdvo_lvds_fixed_mode->vdisplay) in intel_sdvo_mode_valid()
1204 caps->vendor_id, in intel_sdvo_get_capabilities()
1205 caps->device_id, in intel_sdvo_get_capabilities()
1206 caps->device_rev_id, in intel_sdvo_get_capabilities()
1207 caps->sdvo_version_major, in intel_sdvo_get_capabilities()
1208 caps->sdvo_version_minor, in intel_sdvo_get_capabilities()
1209 caps->sdvo_inputs_mask, in intel_sdvo_get_capabilities()
1210 caps->smooth_scaling, in intel_sdvo_get_capabilities()
1211 caps->sharp_scaling, in intel_sdvo_get_capabilities()
1212 caps->up_scaling, in intel_sdvo_get_capabilities()
1213 caps->down_scaling, in intel_sdvo_get_capabilities()
1214 caps->stall_support, in intel_sdvo_get_capabilities()
1215 caps->output_flags); in intel_sdvo_get_capabilities()
1230 struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base); in intel_sdvo_enable_hotplug()
1232 intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &intel_sdvo->hotplug_active, 2); in intel_sdvo_enable_hotplug()
1238 /* Is there more than one type of output? */ in intel_sdvo_multifunc_encoder()
1239 return hweight16(intel_sdvo->caps.output_flags) > 1; in intel_sdvo_multifunc_encoder()
1246 return drm_get_edid(connector, &sdvo->ddc); in intel_sdvo_get_edid()
1249 /* Mac mini hack -- use the same DDC as the analog connector */
1253 struct drm_i915_private *dev_priv = connector->dev->dev_private; in intel_sdvo_get_analog_edid()
1256 &dev_priv->gmbus[dev_priv->crt_ddc_pin].adapter); in intel_sdvo_get_analog_edid()
1269 u8 ddc, saved_ddc = intel_sdvo->ddc_bus; in intel_sdvo_tmds_sink_detect()
1275 for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in intel_sdvo_tmds_sink_detect()
1276 intel_sdvo->ddc_bus = ddc; in intel_sdvo_tmds_sink_detect()
1286 intel_sdvo->ddc_bus = saved_ddc; in intel_sdvo_tmds_sink_detect()
1291 * port, try to use the CRT ddc to read the EDID for DVI-connector. in intel_sdvo_tmds_sink_detect()
1299 if (edid->input & DRM_EDID_INPUT_DIGITAL) { in intel_sdvo_tmds_sink_detect()
1301 if (intel_sdvo->is_hdmi) { in intel_sdvo_tmds_sink_detect()
1302 intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid); in intel_sdvo_tmds_sink_detect()
1303 intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid); in intel_sdvo_tmds_sink_detect()
1307 connector->display_info.raw_edid = NULL; in intel_sdvo_tmds_sink_detect()
1313 if (intel_sdvo_connector->force_audio) in intel_sdvo_tmds_sink_detect()
1314 intel_sdvo->has_hdmi_audio = intel_sdvo_connector->force_audio > 0; in intel_sdvo_tmds_sink_detect()
1324 bool monitor_is_digital = !!(edid->input & DRM_EDID_INPUT_DIGITAL); in intel_sdvo_connector_matches_edid()
1344 /* add 30ms delay when the output type might be TV */ in intel_sdvo_detect()
1345 if (intel_sdvo->caps.output_flags & in intel_sdvo_detect()
1354 intel_sdvo_connector->output_flag); in intel_sdvo_detect()
1359 intel_sdvo->attached_output = response; in intel_sdvo_detect()
1361 intel_sdvo->has_hdmi_monitor = false; in intel_sdvo_detect()
1362 intel_sdvo->has_hdmi_audio = false; in intel_sdvo_detect()
1364 if ((intel_sdvo_connector->output_flag & response) == 0) in intel_sdvo_detect()
1382 connector->display_info.raw_edid = NULL; in intel_sdvo_detect()
1388 /* May update encoder flag for like clock for SDVO TV, etc.*/ in intel_sdvo_detect()
1390 intel_sdvo->is_tv = false; in intel_sdvo_detect()
1391 intel_sdvo->is_lvds = false; in intel_sdvo_detect()
1392 intel_sdvo->base.needs_tv_clock = false; in intel_sdvo_detect()
1395 intel_sdvo->is_tv = true; in intel_sdvo_detect()
1396 intel_sdvo->base.needs_tv_clock = true; in intel_sdvo_detect()
1399 intel_sdvo->is_lvds = intel_sdvo->sdvo_lvds_fixed_mode != NULL; in intel_sdvo_detect()
1413 * Mac mini hack. On this device, the DVI-I connector shares one DDC in intel_sdvo_get_ddc_modes()
1415 * DDC fails, check to see if the analog output is disconnected, in in intel_sdvo_get_ddc_modes()
1428 connector->display_info.raw_edid = NULL; in intel_sdvo_get_ddc_modes()
1508 format_map = 1 << intel_sdvo->tv_format_index; in intel_sdvo_get_tv_modes()
1512 if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output)) in intel_sdvo_get_tv_modes()
1526 nmode = drm_mode_duplicate(connector->dev, in intel_sdvo_get_tv_modes()
1536 struct drm_i915_private *dev_priv = connector->dev->dev_private; in intel_sdvo_get_lvds_modes()
1544 intel_ddc_get_modes(connector, intel_sdvo->i2c); in intel_sdvo_get_lvds_modes()
1545 if (list_empty(&connector->probed_modes) == false) in intel_sdvo_get_lvds_modes()
1549 if (dev_priv->sdvo_lvds_vbt_mode != NULL) { in intel_sdvo_get_lvds_modes()
1550 newmode = drm_mode_duplicate(connector->dev, in intel_sdvo_get_lvds_modes()
1551 dev_priv->sdvo_lvds_vbt_mode); in intel_sdvo_get_lvds_modes()
1554 newmode->type = (DRM_MODE_TYPE_PREFERRED | in intel_sdvo_get_lvds_modes()
1561 list_for_each_entry(newmode, &connector->probed_modes, head) { in intel_sdvo_get_lvds_modes()
1562 if (newmode->type & DRM_MODE_TYPE_PREFERRED) { in intel_sdvo_get_lvds_modes()
1563 intel_sdvo->sdvo_lvds_fixed_mode = in intel_sdvo_get_lvds_modes()
1564 drm_mode_duplicate(connector->dev, newmode); in intel_sdvo_get_lvds_modes()
1566 drm_mode_set_crtcinfo(intel_sdvo->sdvo_lvds_fixed_mode, in intel_sdvo_get_lvds_modes()
1569 intel_sdvo->is_lvds = true; in intel_sdvo_get_lvds_modes()
1587 return !list_empty(&connector->probed_modes); in intel_sdvo_get_modes()
1594 struct drm_device *dev = connector->dev; in intel_sdvo_destroy_enhance_property()
1596 if (intel_sdvo_connector->left) in intel_sdvo_destroy_enhance_property()
1597 drm_property_destroy(dev, intel_sdvo_connector->left); in intel_sdvo_destroy_enhance_property()
1598 if (intel_sdvo_connector->right) in intel_sdvo_destroy_enhance_property()
1599 drm_property_destroy(dev, intel_sdvo_connector->right); in intel_sdvo_destroy_enhance_property()
1600 if (intel_sdvo_connector->top) in intel_sdvo_destroy_enhance_property()
1601 drm_property_destroy(dev, intel_sdvo_connector->top); in intel_sdvo_destroy_enhance_property()
1602 if (intel_sdvo_connector->bottom) in intel_sdvo_destroy_enhance_property()
1603 drm_property_destroy(dev, intel_sdvo_connector->bottom); in intel_sdvo_destroy_enhance_property()
1604 if (intel_sdvo_connector->hpos) in intel_sdvo_destroy_enhance_property()
1605 drm_property_destroy(dev, intel_sdvo_connector->hpos); in intel_sdvo_destroy_enhance_property()
1606 if (intel_sdvo_connector->vpos) in intel_sdvo_destroy_enhance_property()
1607 drm_property_destroy(dev, intel_sdvo_connector->vpos); in intel_sdvo_destroy_enhance_property()
1608 if (intel_sdvo_connector->saturation) in intel_sdvo_destroy_enhance_property()
1609 drm_property_destroy(dev, intel_sdvo_connector->saturation); in intel_sdvo_destroy_enhance_property()
1610 if (intel_sdvo_connector->contrast) in intel_sdvo_destroy_enhance_property()
1611 drm_property_destroy(dev, intel_sdvo_connector->contrast); in intel_sdvo_destroy_enhance_property()
1612 if (intel_sdvo_connector->hue) in intel_sdvo_destroy_enhance_property()
1613 drm_property_destroy(dev, intel_sdvo_connector->hue); in intel_sdvo_destroy_enhance_property()
1614 if (intel_sdvo_connector->sharpness) in intel_sdvo_destroy_enhance_property()
1615 drm_property_destroy(dev, intel_sdvo_connector->sharpness); in intel_sdvo_destroy_enhance_property()
1616 if (intel_sdvo_connector->flicker_filter) in intel_sdvo_destroy_enhance_property()
1617 drm_property_destroy(dev, intel_sdvo_connector->flicker_filter); in intel_sdvo_destroy_enhance_property()
1618 if (intel_sdvo_connector->flicker_filter_2d) in intel_sdvo_destroy_enhance_property()
1619 drm_property_destroy(dev, intel_sdvo_connector->flicker_filter_2d); in intel_sdvo_destroy_enhance_property()
1620 if (intel_sdvo_connector->flicker_filter_adaptive) in intel_sdvo_destroy_enhance_property()
1621 drm_property_destroy(dev, intel_sdvo_connector->flicker_filter_adaptive); in intel_sdvo_destroy_enhance_property()
1622 if (intel_sdvo_connector->tv_luma_filter) in intel_sdvo_destroy_enhance_property()
1623 drm_property_destroy(dev, intel_sdvo_connector->tv_luma_filter); in intel_sdvo_destroy_enhance_property()
1624 if (intel_sdvo_connector->tv_chroma_filter) in intel_sdvo_destroy_enhance_property()
1625 drm_property_destroy(dev, intel_sdvo_connector->tv_chroma_filter); in intel_sdvo_destroy_enhance_property()
1626 if (intel_sdvo_connector->dot_crawl) in intel_sdvo_destroy_enhance_property()
1627 drm_property_destroy(dev, intel_sdvo_connector->dot_crawl); in intel_sdvo_destroy_enhance_property()
1628 if (intel_sdvo_connector->brightness) in intel_sdvo_destroy_enhance_property()
1629 drm_property_destroy(dev, intel_sdvo_connector->brightness); in intel_sdvo_destroy_enhance_property()
1636 if (intel_sdvo_connector->tv_format) in intel_sdvo_destroy()
1637 drm_property_destroy(connector->dev, in intel_sdvo_destroy()
1638 intel_sdvo_connector->tv_format); in intel_sdvo_destroy()
1652 if (!intel_sdvo->is_hdmi) in intel_sdvo_detect_hdmi_audio()
1656 if (edid != NULL && edid->input & DRM_EDID_INPUT_DIGITAL) in intel_sdvo_detect_hdmi_audio()
1669 struct drm_i915_private *dev_priv = connector->dev->dev_private; in intel_sdvo_set_property()
1678 if (property == dev_priv->force_audio_property) { in intel_sdvo_set_property()
1682 if (i == intel_sdvo_connector->force_audio) in intel_sdvo_set_property()
1685 intel_sdvo_connector->force_audio = i; in intel_sdvo_set_property()
1692 if (has_audio == intel_sdvo->has_hdmi_audio) in intel_sdvo_set_property()
1695 intel_sdvo->has_hdmi_audio = has_audio; in intel_sdvo_set_property()
1699 if (property == dev_priv->broadcast_rgb_property) { in intel_sdvo_set_property()
1700 if (val == !!intel_sdvo->color_range) in intel_sdvo_set_property()
1703 intel_sdvo->color_range = val ? SDVO_COLOR_RANGE_16_235 : 0; in intel_sdvo_set_property()
1708 if (intel_sdvo_connector->name == property) { \ in intel_sdvo_set_property()
1709 if (intel_sdvo_connector->cur_##name == temp_value) return 0; \ in intel_sdvo_set_property()
1710 if (intel_sdvo_connector->max_##name < temp_value) return -EINVAL; \ in intel_sdvo_set_property()
1712 intel_sdvo_connector->cur_##name = temp_value; \ in intel_sdvo_set_property()
1716 if (property == intel_sdvo_connector->tv_format) { in intel_sdvo_set_property()
1718 return -EINVAL; in intel_sdvo_set_property()
1720 if (intel_sdvo->tv_format_index == in intel_sdvo_set_property()
1721 intel_sdvo_connector->tv_format_supported[val]) in intel_sdvo_set_property()
1724 intel_sdvo->tv_format_index = intel_sdvo_connector->tv_format_supported[val]; in intel_sdvo_set_property()
1728 if (intel_sdvo_connector->left == property) { in intel_sdvo_set_property()
1730 intel_sdvo_connector->right, val); in intel_sdvo_set_property()
1731 if (intel_sdvo_connector->left_margin == temp_value) in intel_sdvo_set_property()
1734 intel_sdvo_connector->left_margin = temp_value; in intel_sdvo_set_property()
1735 intel_sdvo_connector->right_margin = temp_value; in intel_sdvo_set_property()
1736 temp_value = intel_sdvo_connector->max_hscan - in intel_sdvo_set_property()
1737 intel_sdvo_connector->left_margin; in intel_sdvo_set_property()
1740 } else if (intel_sdvo_connector->right == property) { in intel_sdvo_set_property()
1742 intel_sdvo_connector->left, val); in intel_sdvo_set_property()
1743 if (intel_sdvo_connector->right_margin == temp_value) in intel_sdvo_set_property()
1746 intel_sdvo_connector->left_margin = temp_value; in intel_sdvo_set_property()
1747 intel_sdvo_connector->right_margin = temp_value; in intel_sdvo_set_property()
1748 temp_value = intel_sdvo_connector->max_hscan - in intel_sdvo_set_property()
1749 intel_sdvo_connector->left_margin; in intel_sdvo_set_property()
1752 } else if (intel_sdvo_connector->top == property) { in intel_sdvo_set_property()
1754 intel_sdvo_connector->bottom, val); in intel_sdvo_set_property()
1755 if (intel_sdvo_connector->top_margin == temp_value) in intel_sdvo_set_property()
1758 intel_sdvo_connector->top_margin = temp_value; in intel_sdvo_set_property()
1759 intel_sdvo_connector->bottom_margin = temp_value; in intel_sdvo_set_property()
1760 temp_value = intel_sdvo_connector->max_vscan - in intel_sdvo_set_property()
1761 intel_sdvo_connector->top_margin; in intel_sdvo_set_property()
1764 } else if (intel_sdvo_connector->bottom == property) { in intel_sdvo_set_property()
1766 intel_sdvo_connector->top, val); in intel_sdvo_set_property()
1767 if (intel_sdvo_connector->bottom_margin == temp_value) in intel_sdvo_set_property()
1770 intel_sdvo_connector->top_margin = temp_value; in intel_sdvo_set_property()
1771 intel_sdvo_connector->bottom_margin = temp_value; in intel_sdvo_set_property()
1772 temp_value = intel_sdvo_connector->max_vscan - in intel_sdvo_set_property()
1773 intel_sdvo_connector->top_margin; in intel_sdvo_set_property()
1792 return -EINVAL; /* unknown property */ in intel_sdvo_set_property()
1796 return -EIO; in intel_sdvo_set_property()
1800 if (intel_sdvo->base.base.crtc) { in intel_sdvo_set_property()
1801 struct drm_crtc *crtc = intel_sdvo->base.base.crtc; in intel_sdvo_set_property()
1802 drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x, in intel_sdvo_set_property()
1803 crtc->y, crtc->fb); in intel_sdvo_set_property()
1836 if (intel_sdvo->sdvo_lvds_fixed_mode != NULL) in intel_sdvo_enc_destroy()
1837 drm_mode_destroy(encoder->dev, in intel_sdvo_enc_destroy()
1838 intel_sdvo->sdvo_lvds_fixed_mode); in intel_sdvo_enc_destroy()
1840 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_enc_destroy()
1857 switch (sdvo->controlled_output) { in intel_sdvo_guess_ddc_bus()
1874 mask &= sdvo->caps.output_flags; in intel_sdvo_guess_ddc_bus()
1881 sdvo->ddc_bus = 1 << num_bits; in intel_sdvo_guess_ddc_bus()
1886 * SDVO output based on the controlled output.
1898 mapping = &(dev_priv->sdvo_mappings[0]); in intel_sdvo_select_ddc_bus()
1900 mapping = &(dev_priv->sdvo_mappings[1]); in intel_sdvo_select_ddc_bus()
1902 if (mapping->initialized) in intel_sdvo_select_ddc_bus()
1903 sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4); in intel_sdvo_select_ddc_bus()
1916 mapping = &dev_priv->sdvo_mappings[0]; in intel_sdvo_select_i2c_bus()
1918 mapping = &dev_priv->sdvo_mappings[1]; in intel_sdvo_select_i2c_bus()
1921 if (mapping->initialized) in intel_sdvo_select_i2c_bus()
1922 pin = mapping->i2c_pin; in intel_sdvo_select_i2c_bus()
1925 sdvo->i2c = &dev_priv->gmbus[pin].adapter; in intel_sdvo_select_i2c_bus()
1926 intel_gmbus_set_speed(sdvo->i2c, GMBUS_RATE_1MHZ); in intel_sdvo_select_i2c_bus()
1927 intel_gmbus_force_bit(sdvo->i2c, true); in intel_sdvo_select_i2c_bus()
1929 sdvo->i2c = &dev_priv->gmbus[GMBUS_PORT_DPB].adapter; in intel_sdvo_select_i2c_bus()
1942 struct drm_i915_private *dev_priv = dev->dev_private; in intel_sdvo_get_slave_addr()
1946 my_mapping = &dev_priv->sdvo_mappings[0]; in intel_sdvo_get_slave_addr()
1947 other_mapping = &dev_priv->sdvo_mappings[1]; in intel_sdvo_get_slave_addr()
1949 my_mapping = &dev_priv->sdvo_mappings[1]; in intel_sdvo_get_slave_addr()
1950 other_mapping = &dev_priv->sdvo_mappings[0]; in intel_sdvo_get_slave_addr()
1954 if (my_mapping->slave_addr) in intel_sdvo_get_slave_addr()
1955 return my_mapping->slave_addr; in intel_sdvo_get_slave_addr()
1960 if (other_mapping->slave_addr) { in intel_sdvo_get_slave_addr()
1961 if (other_mapping->slave_addr == 0x70) in intel_sdvo_get_slave_addr()
1980 drm_connector_init(encoder->base.base.dev, in intel_sdvo_connector_init()
1981 &connector->base.base, in intel_sdvo_connector_init()
1983 connector->base.base.connector_type); in intel_sdvo_connector_init()
1985 drm_connector_helper_add(&connector->base.base, in intel_sdvo_connector_init()
1988 connector->base.base.interlace_allowed = 0; in intel_sdvo_connector_init()
1989 connector->base.base.doublescan_allowed = 0; in intel_sdvo_connector_init()
1990 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; in intel_sdvo_connector_init()
1992 intel_connector_attach_encoder(&connector->base, &encoder->base); in intel_sdvo_connector_init()
1993 drm_sysfs_connector_add(&connector->base.base); in intel_sdvo_connector_init()
1999 struct drm_device *dev = connector->base.base.dev; in intel_sdvo_add_hdmi_properties()
2001 intel_attach_force_audio_property(&connector->base.base); in intel_sdvo_add_hdmi_properties()
2002 if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) in intel_sdvo_add_hdmi_properties()
2003 intel_attach_broadcast_rgb_property(&connector->base.base); in intel_sdvo_add_hdmi_properties()
2009 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_dvi_init()
2020 intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; in intel_sdvo_dvi_init()
2021 intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0; in intel_sdvo_dvi_init()
2023 intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; in intel_sdvo_dvi_init()
2024 intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1; in intel_sdvo_dvi_init()
2027 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_dvi_init()
2028 connector = &intel_connector->base; in intel_sdvo_dvi_init()
2030 connector->polled = DRM_CONNECTOR_POLL_HPD; in intel_sdvo_dvi_init()
2031 intel_sdvo->hotplug_active[0] |= 1 << device; in intel_sdvo_dvi_init()
2032 /* Some SDVO devices have one-shot hotplug interrupts. in intel_sdvo_dvi_init()
2033 * Ensure that they get re-enabled when an interrupt happens. in intel_sdvo_dvi_init()
2035 intel_encoder->hot_plug = intel_sdvo_enable_hotplug; in intel_sdvo_dvi_init()
2039 connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT; in intel_sdvo_dvi_init()
2040 encoder->encoder_type = DRM_MODE_ENCODER_TMDS; in intel_sdvo_dvi_init()
2041 connector->connector_type = DRM_MODE_CONNECTOR_DVID; in intel_sdvo_dvi_init()
2044 connector->connector_type = DRM_MODE_CONNECTOR_HDMIA; in intel_sdvo_dvi_init()
2045 intel_sdvo->is_hdmi = true; in intel_sdvo_dvi_init()
2047 intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | in intel_sdvo_dvi_init()
2051 if (intel_sdvo->is_hdmi) in intel_sdvo_dvi_init()
2060 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_tv_init()
2069 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_tv_init()
2070 connector = &intel_connector->base; in intel_sdvo_tv_init()
2071 encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; in intel_sdvo_tv_init()
2072 connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; in intel_sdvo_tv_init()
2074 intel_sdvo->controlled_output |= type; in intel_sdvo_tv_init()
2075 intel_sdvo_connector->output_flag = type; in intel_sdvo_tv_init()
2077 intel_sdvo->is_tv = true; in intel_sdvo_tv_init()
2078 intel_sdvo->base.needs_tv_clock = true; in intel_sdvo_tv_init()
2079 intel_sdvo->base.clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; in intel_sdvo_tv_init()
2099 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_analog_init()
2108 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_analog_init()
2109 connector = &intel_connector->base; in intel_sdvo_analog_init()
2110 connector->polled = DRM_CONNECTOR_POLL_CONNECT; in intel_sdvo_analog_init()
2111 encoder->encoder_type = DRM_MODE_ENCODER_DAC; in intel_sdvo_analog_init()
2112 connector->connector_type = DRM_MODE_CONNECTOR_VGA; in intel_sdvo_analog_init()
2115 intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; in intel_sdvo_analog_init()
2116 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0; in intel_sdvo_analog_init()
2118 intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; in intel_sdvo_analog_init()
2119 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; in intel_sdvo_analog_init()
2122 intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | in intel_sdvo_analog_init()
2133 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_lvds_init()
2142 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_lvds_init()
2143 connector = &intel_connector->base; in intel_sdvo_lvds_init()
2144 encoder->encoder_type = DRM_MODE_ENCODER_LVDS; in intel_sdvo_lvds_init()
2145 connector->connector_type = DRM_MODE_CONNECTOR_LVDS; in intel_sdvo_lvds_init()
2148 intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; in intel_sdvo_lvds_init()
2149 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0; in intel_sdvo_lvds_init()
2151 intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; in intel_sdvo_lvds_init()
2152 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; in intel_sdvo_lvds_init()
2155 intel_sdvo->base.clone_mask = ((1 << INTEL_ANALOG_CLONE_BIT) | in intel_sdvo_lvds_init()
2172 intel_sdvo->is_tv = false; in intel_sdvo_output_setup()
2173 intel_sdvo->base.needs_tv_clock = false; in intel_sdvo_output_setup()
2174 intel_sdvo->is_lvds = false; in intel_sdvo_output_setup()
2214 intel_sdvo->controlled_output = 0; in intel_sdvo_output_setup()
2215 memcpy(bytes, &intel_sdvo->caps.output_flags, 2); in intel_sdvo_output_setup()
2216 DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n", in intel_sdvo_output_setup()
2221 intel_sdvo->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); in intel_sdvo_output_setup()
2230 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_tv_create_property()
2248 intel_sdvo_connector->format_supported_num = 0; in intel_sdvo_tv_create_property()
2251 intel_sdvo_connector->tv_format_supported[intel_sdvo_connector->format_supported_num++] = i; in intel_sdvo_tv_create_property()
2254 intel_sdvo_connector->tv_format = in intel_sdvo_tv_create_property()
2256 "mode", intel_sdvo_connector->format_supported_num); in intel_sdvo_tv_create_property()
2257 if (!intel_sdvo_connector->tv_format) in intel_sdvo_tv_create_property()
2260 for (i = 0; i < intel_sdvo_connector->format_supported_num; i++) in intel_sdvo_tv_create_property()
2262 intel_sdvo_connector->tv_format, i, in intel_sdvo_tv_create_property()
2263 i, tv_format_names[intel_sdvo_connector->tv_format_supported[i]]); in intel_sdvo_tv_create_property()
2265 intel_sdvo->tv_format_index = intel_sdvo_connector->tv_format_supported[0]; in intel_sdvo_tv_create_property()
2266 drm_connector_attach_property(&intel_sdvo_connector->base.base, in intel_sdvo_tv_create_property()
2267 intel_sdvo_connector->tv_format, 0); in intel_sdvo_tv_create_property()
2277 intel_sdvo_connector->max_##name = data_value[0]; \
2278 intel_sdvo_connector->cur_##name = response; \
2279 intel_sdvo_connector->name = \
2281 if (!intel_sdvo_connector->name) return false; \
2282 intel_sdvo_connector->name->values[0] = 0; \
2283 intel_sdvo_connector->name->values[1] = data_value[0]; \
2285 intel_sdvo_connector->name, \
2286 intel_sdvo_connector->cur_##name); \
2297 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_tv()
2298 struct drm_connector *connector = &intel_sdvo_connector->base.base; in intel_sdvo_create_enhance_property_tv()
2313 intel_sdvo_connector->max_hscan = data_value[0]; in intel_sdvo_create_enhance_property_tv()
2314 intel_sdvo_connector->left_margin = data_value[0] - response; in intel_sdvo_create_enhance_property_tv()
2315 intel_sdvo_connector->right_margin = intel_sdvo_connector->left_margin; in intel_sdvo_create_enhance_property_tv()
2316 intel_sdvo_connector->left = in intel_sdvo_create_enhance_property_tv()
2319 if (!intel_sdvo_connector->left) in intel_sdvo_create_enhance_property_tv()
2322 intel_sdvo_connector->left->values[0] = 0; in intel_sdvo_create_enhance_property_tv()
2323 intel_sdvo_connector->left->values[1] = data_value[0]; in intel_sdvo_create_enhance_property_tv()
2325 intel_sdvo_connector->left, in intel_sdvo_create_enhance_property_tv()
2326 intel_sdvo_connector->left_margin); in intel_sdvo_create_enhance_property_tv()
2328 intel_sdvo_connector->right = in intel_sdvo_create_enhance_property_tv()
2331 if (!intel_sdvo_connector->right) in intel_sdvo_create_enhance_property_tv()
2334 intel_sdvo_connector->right->values[0] = 0; in intel_sdvo_create_enhance_property_tv()
2335 intel_sdvo_connector->right->values[1] = data_value[0]; in intel_sdvo_create_enhance_property_tv()
2337 intel_sdvo_connector->right, in intel_sdvo_create_enhance_property_tv()
2338 intel_sdvo_connector->right_margin); in intel_sdvo_create_enhance_property_tv()
2355 intel_sdvo_connector->max_vscan = data_value[0]; in intel_sdvo_create_enhance_property_tv()
2356 intel_sdvo_connector->top_margin = data_value[0] - response; in intel_sdvo_create_enhance_property_tv()
2357 intel_sdvo_connector->bottom_margin = intel_sdvo_connector->top_margin; in intel_sdvo_create_enhance_property_tv()
2358 intel_sdvo_connector->top = in intel_sdvo_create_enhance_property_tv()
2361 if (!intel_sdvo_connector->top) in intel_sdvo_create_enhance_property_tv()
2364 intel_sdvo_connector->top->values[0] = 0; in intel_sdvo_create_enhance_property_tv()
2365 intel_sdvo_connector->top->values[1] = data_value[0]; in intel_sdvo_create_enhance_property_tv()
2367 intel_sdvo_connector->top, in intel_sdvo_create_enhance_property_tv()
2368 intel_sdvo_connector->top_margin); in intel_sdvo_create_enhance_property_tv()
2370 intel_sdvo_connector->bottom = in intel_sdvo_create_enhance_property_tv()
2373 if (!intel_sdvo_connector->bottom) in intel_sdvo_create_enhance_property_tv()
2376 intel_sdvo_connector->bottom->values[0] = 0; in intel_sdvo_create_enhance_property_tv()
2377 intel_sdvo_connector->bottom->values[1] = data_value[0]; in intel_sdvo_create_enhance_property_tv()
2379 intel_sdvo_connector->bottom, in intel_sdvo_create_enhance_property_tv()
2380 intel_sdvo_connector->bottom_margin); in intel_sdvo_create_enhance_property_tv()
2403 intel_sdvo_connector->max_dot_crawl = 1; in intel_sdvo_create_enhance_property_tv()
2404 intel_sdvo_connector->cur_dot_crawl = response & 0x1; in intel_sdvo_create_enhance_property_tv()
2405 intel_sdvo_connector->dot_crawl = in intel_sdvo_create_enhance_property_tv()
2407 if (!intel_sdvo_connector->dot_crawl) in intel_sdvo_create_enhance_property_tv()
2410 intel_sdvo_connector->dot_crawl->values[0] = 0; in intel_sdvo_create_enhance_property_tv()
2411 intel_sdvo_connector->dot_crawl->values[1] = 1; in intel_sdvo_create_enhance_property_tv()
2413 intel_sdvo_connector->dot_crawl, in intel_sdvo_create_enhance_property_tv()
2414 intel_sdvo_connector->cur_dot_crawl); in intel_sdvo_create_enhance_property_tv()
2426 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_lvds()
2427 struct drm_connector *connector = &intel_sdvo_connector->base.base; in intel_sdvo_create_enhance_property_lvds()
2467 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_xfer()
2469 if (!intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus)) in intel_sdvo_ddc_proxy_xfer()
2470 return -EIO; in intel_sdvo_ddc_proxy_xfer()
2472 return sdvo->i2c->algo->master_xfer(sdvo->i2c, msgs, num); in intel_sdvo_ddc_proxy_xfer()
2477 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_func()
2478 return sdvo->i2c->algo->functionality(sdvo->i2c); in intel_sdvo_ddc_proxy_func()
2490 sdvo->ddc.owner = THIS_MODULE; in intel_sdvo_init_ddc_proxy()
2491 sdvo->ddc.class = I2C_CLASS_DDC; in intel_sdvo_init_ddc_proxy()
2492 snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy"); in intel_sdvo_init_ddc_proxy()
2493 sdvo->ddc.dev.parent = &dev->pdev->dev; in intel_sdvo_init_ddc_proxy()
2494 sdvo->ddc.algo_data = sdvo; in intel_sdvo_init_ddc_proxy()
2495 sdvo->ddc.algo = &intel_sdvo_ddc_proxy; in intel_sdvo_init_ddc_proxy()
2497 return i2c_add_adapter(&sdvo->ddc) == 0; in intel_sdvo_init_ddc_proxy()
2502 struct drm_i915_private *dev_priv = dev->dev_private; in intel_sdvo_init()
2511 intel_sdvo->sdvo_reg = sdvo_reg; in intel_sdvo_init()
2512 intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(dev, sdvo_reg) >> 1; in intel_sdvo_init()
2520 intel_encoder = &intel_sdvo->base; in intel_sdvo_init()
2521 intel_encoder->type = INTEL_OUTPUT_SDVO; in intel_sdvo_init()
2522 drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0); in intel_sdvo_init()
2536 dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS; in intel_sdvo_init()
2538 dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS; in intel_sdvo_init()
2540 drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs); in intel_sdvo_init()
2543 if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps)) in intel_sdvo_init()
2546 /* Set up hotplug command - note paranoia about contents of reply. in intel_sdvo_init()
2551 &intel_sdvo->hotplug_active, 2); in intel_sdvo_init()
2552 intel_sdvo->hotplug_active[0] &= ~0x3; in intel_sdvo_init()
2555 intel_sdvo->caps.output_flags) != true) { in intel_sdvo_init()
2556 DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n", in intel_sdvo_init()
2568 &intel_sdvo->pixel_clock_min, in intel_sdvo_init()
2569 &intel_sdvo->pixel_clock_max)) in intel_sdvo_init()
2573 "clock range %dMHz - %dMHz, " in intel_sdvo_init()
2575 "output 1: %c, output 2: %c\n", in intel_sdvo_init()
2577 intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id, in intel_sdvo_init()
2578 intel_sdvo->caps.device_rev_id, in intel_sdvo_init()
2579 intel_sdvo->pixel_clock_min / 1000, in intel_sdvo_init()
2580 intel_sdvo->pixel_clock_max / 1000, in intel_sdvo_init()
2581 (intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in intel_sdvo_init()
2582 (intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in intel_sdvo_init()
2584 intel_sdvo->caps.output_flags & in intel_sdvo_init()
2586 intel_sdvo->caps.output_flags & in intel_sdvo_init()
2591 drm_encoder_cleanup(&intel_encoder->base); in intel_sdvo_init()
2592 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_init()