Lines Matching +full:bool +full:- +full:property
3 * Copyright © 2006-2007 Intel Corporation
60 #define IS_TV(c) (c->output_flag & SDVO_TV_MASK)
61 #define IS_TMDS(c) (c->output_flag & SDVO_TMDS_MASK)
62 #define IS_LVDS(c) (c->output_flag & SDVO_LVDS_MASK)
63 #define IS_TV_OR_LVDS(c) (c->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
64 #define IS_DIGITAL(c) (c->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
117 bool has_hdmi_monitor;
118 bool has_hdmi_audio;
124 * the sdvo flag gets lost in round trip: dtd->adjusted_mode->dtd
140 /* add the property for the SDVO-TV */
158 /* add the property for the SDVO-TV/LVDS */
167 bool is_hdmi;
200 static bool
202 static bool
206 static bool
217 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_write_sdvox()
223 intel_de_write(dev_priv, intel_sdvo->sdvo_reg, val); in intel_sdvo_write_sdvox()
224 intel_de_posting_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_write_sdvox()
230 intel_de_write(dev_priv, intel_sdvo->sdvo_reg, val); in intel_sdvo_write_sdvox()
231 intel_de_posting_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_write_sdvox()
236 if (intel_sdvo->port == PORT_B) in intel_sdvo_write_sdvox()
255 static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch) in intel_sdvo_read_byte()
259 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
265 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
273 if ((ret = i2c_transfer(intel_sdvo->i2c, msgs, 2)) == 2) in intel_sdvo_read_byte()
413 #define SDVO_NAME(svdo) ((svdo)->port == PORT_B ? "SDVOB" : "SDVOC")
418 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_debug_write()
424 pos += snprintf(buffer + pos, max_t(int, sizeof(buffer) - pos, 0), args) in intel_sdvo_debug_write()
439 drm_WARN_ON(&dev_priv->drm, pos >= sizeof(buffer) - 1); in intel_sdvo_debug_write()
463 static bool __intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, in __intel_sdvo_write_cmd()
465 bool unlocked) in __intel_sdvo_write_cmd()
485 msgs[i].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
489 buf[2*i + 0] = SDVO_I2C_ARG_0 - i; in __intel_sdvo_write_cmd()
492 msgs[i].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
501 msgs[i+1].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
506 msgs[i+2].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
512 ret = i2c_transfer(intel_sdvo->i2c, msgs, i+3); in __intel_sdvo_write_cmd()
514 ret = __i2c_transfer(intel_sdvo->i2c, msgs, i+3); in __intel_sdvo_write_cmd()
532 static bool intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_write_cmd()
538 static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, in intel_sdvo_read_response()
541 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_read_response()
573 status == SDVO_CMD_STATUS_TARGET_NOT_SPECIFIED) && --retry) { in intel_sdvo_read_response()
586 pos += snprintf(buffer + pos, max_t(int, sizeof(buffer) - pos, 0), args) in intel_sdvo_read_response()
606 drm_WARN_ON(&dev_priv->drm, pos >= sizeof(buffer) - 1); in intel_sdvo_read_response()
620 if (adjusted_mode->crtc_clock >= 100000) in intel_sdvo_get_pixel_multiplier()
622 else if (adjusted_mode->crtc_clock >= 50000) in intel_sdvo_get_pixel_multiplier()
628 static bool __intel_sdvo_set_control_bus_switch(struct intel_sdvo *intel_sdvo, in __intel_sdvo_set_control_bus_switch()
637 static bool intel_sdvo_set_value(struct intel_sdvo *intel_sdvo, u8 cmd, const void *data, int len) in intel_sdvo_set_value()
645 static bool
654 static bool intel_sdvo_set_target_input(struct intel_sdvo *intel_sdvo) in intel_sdvo_set_target_input()
668 static bool intel_sdvo_get_trained_inputs(struct intel_sdvo *intel_sdvo, bool *input_1, bool *input… in intel_sdvo_get_trained_inputs()
682 static bool intel_sdvo_set_active_outputs(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_active_outputs()
690 static bool intel_sdvo_get_active_outputs(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_active_outputs()
698 static bool intel_sdvo_set_encoder_power_state(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encoder_power_state()
722 static bool intel_sdvo_get_input_pixel_clock_range(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_input_pixel_clock_range()
740 static bool intel_sdvo_set_target_output(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_target_output()
748 static bool intel_sdvo_set_timing(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_set_timing()
751 return intel_sdvo_set_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_set_timing()
752 intel_sdvo_set_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_set_timing()
755 static bool intel_sdvo_get_timing(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_get_timing()
758 return intel_sdvo_get_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_get_timing()
759 intel_sdvo_get_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_get_timing()
762 static bool intel_sdvo_set_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_input_timing()
769 static bool intel_sdvo_set_output_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_output_timing()
776 static bool intel_sdvo_get_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_input_timing()
783 static bool
800 intel_sdvo_connector->base.panel.fixed_mode; in intel_sdvo_create_preferred_input_timing()
802 if (fixed_mode->hdisplay != width || in intel_sdvo_create_preferred_input_timing()
803 fixed_mode->vdisplay != height) in intel_sdvo_create_preferred_input_timing()
812 static bool intel_sdvo_get_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_timing()
815 BUILD_BUG_ON(sizeof(dtd->part1) != 8); in intel_sdvo_get_preferred_input_timing()
816 BUILD_BUG_ON(sizeof(dtd->part2) != 8); in intel_sdvo_get_preferred_input_timing()
818 &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_get_preferred_input_timing()
820 &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_get_preferred_input_timing()
823 static bool intel_sdvo_set_clock_rate_mult(struct intel_sdvo *intel_sdvo, u8 val) in intel_sdvo_set_clock_rate_mult()
838 width = mode->hdisplay; in intel_sdvo_get_dtd_from_mode()
839 height = mode->vdisplay; in intel_sdvo_get_dtd_from_mode()
842 h_blank_len = mode->htotal - mode->hdisplay; in intel_sdvo_get_dtd_from_mode()
843 h_sync_len = mode->hsync_end - mode->hsync_start; in intel_sdvo_get_dtd_from_mode()
845 v_blank_len = mode->vtotal - mode->vdisplay; in intel_sdvo_get_dtd_from_mode()
846 v_sync_len = mode->vsync_end - mode->vsync_start; in intel_sdvo_get_dtd_from_mode()
848 h_sync_offset = mode->hsync_start - mode->hdisplay; in intel_sdvo_get_dtd_from_mode()
849 v_sync_offset = mode->vsync_start - mode->vdisplay; in intel_sdvo_get_dtd_from_mode()
851 mode_clock = mode->clock; in intel_sdvo_get_dtd_from_mode()
853 dtd->part1.clock = mode_clock; in intel_sdvo_get_dtd_from_mode()
855 dtd->part1.h_active = width & 0xff; in intel_sdvo_get_dtd_from_mode()
856 dtd->part1.h_blank = h_blank_len & 0xff; in intel_sdvo_get_dtd_from_mode()
857 dtd->part1.h_high = (((width >> 8) & 0xf) << 4) | in intel_sdvo_get_dtd_from_mode()
859 dtd->part1.v_active = height & 0xff; in intel_sdvo_get_dtd_from_mode()
860 dtd->part1.v_blank = v_blank_len & 0xff; in intel_sdvo_get_dtd_from_mode()
861 dtd->part1.v_high = (((height >> 8) & 0xf) << 4) | in intel_sdvo_get_dtd_from_mode()
864 dtd->part2.h_sync_off = h_sync_offset & 0xff; in intel_sdvo_get_dtd_from_mode()
865 dtd->part2.h_sync_width = h_sync_len & 0xff; in intel_sdvo_get_dtd_from_mode()
866 dtd->part2.v_sync_off_width = (v_sync_offset & 0xf) << 4 | in intel_sdvo_get_dtd_from_mode()
868 dtd->part2.sync_off_width_high = ((h_sync_offset & 0x300) >> 2) | in intel_sdvo_get_dtd_from_mode()
872 dtd->part2.dtd_flags = 0x18; in intel_sdvo_get_dtd_from_mode()
873 if (mode->flags & DRM_MODE_FLAG_INTERLACE) in intel_sdvo_get_dtd_from_mode()
874 dtd->part2.dtd_flags |= DTD_FLAG_INTERLACE; in intel_sdvo_get_dtd_from_mode()
875 if (mode->flags & DRM_MODE_FLAG_PHSYNC) in intel_sdvo_get_dtd_from_mode()
876 dtd->part2.dtd_flags |= DTD_FLAG_HSYNC_POSITIVE; in intel_sdvo_get_dtd_from_mode()
877 if (mode->flags & DRM_MODE_FLAG_PVSYNC) in intel_sdvo_get_dtd_from_mode()
878 dtd->part2.dtd_flags |= DTD_FLAG_VSYNC_POSITIVE; in intel_sdvo_get_dtd_from_mode()
880 dtd->part2.v_sync_off_high = v_sync_offset & 0xc0; in intel_sdvo_get_dtd_from_mode()
888 mode.hdisplay = dtd->part1.h_active; in intel_sdvo_get_mode_from_dtd()
889 mode.hdisplay += ((dtd->part1.h_high >> 4) & 0x0f) << 8; in intel_sdvo_get_mode_from_dtd()
890 mode.hsync_start = mode.hdisplay + dtd->part2.h_sync_off; in intel_sdvo_get_mode_from_dtd()
891 mode.hsync_start += (dtd->part2.sync_off_width_high & 0xc0) << 2; in intel_sdvo_get_mode_from_dtd()
892 mode.hsync_end = mode.hsync_start + dtd->part2.h_sync_width; in intel_sdvo_get_mode_from_dtd()
893 mode.hsync_end += (dtd->part2.sync_off_width_high & 0x30) << 4; in intel_sdvo_get_mode_from_dtd()
894 mode.htotal = mode.hdisplay + dtd->part1.h_blank; in intel_sdvo_get_mode_from_dtd()
895 mode.htotal += (dtd->part1.h_high & 0xf) << 8; in intel_sdvo_get_mode_from_dtd()
897 mode.vdisplay = dtd->part1.v_active; in intel_sdvo_get_mode_from_dtd()
898 mode.vdisplay += ((dtd->part1.v_high >> 4) & 0x0f) << 8; in intel_sdvo_get_mode_from_dtd()
900 mode.vsync_start += (dtd->part2.v_sync_off_width >> 4) & 0xf; in intel_sdvo_get_mode_from_dtd()
901 mode.vsync_start += (dtd->part2.sync_off_width_high & 0x0c) << 2; in intel_sdvo_get_mode_from_dtd()
902 mode.vsync_start += dtd->part2.v_sync_off_high & 0xc0; in intel_sdvo_get_mode_from_dtd()
904 (dtd->part2.v_sync_off_width & 0xf); in intel_sdvo_get_mode_from_dtd()
905 mode.vsync_end += (dtd->part2.sync_off_width_high & 0x3) << 4; in intel_sdvo_get_mode_from_dtd()
906 mode.vtotal = mode.vdisplay + dtd->part1.v_blank; in intel_sdvo_get_mode_from_dtd()
907 mode.vtotal += (dtd->part1.v_high & 0xf) << 8; in intel_sdvo_get_mode_from_dtd()
909 mode.clock = dtd->part1.clock * 10; in intel_sdvo_get_mode_from_dtd()
911 if (dtd->part2.dtd_flags & DTD_FLAG_INTERLACE) in intel_sdvo_get_mode_from_dtd()
913 if (dtd->part2.dtd_flags & DTD_FLAG_HSYNC_POSITIVE) in intel_sdvo_get_mode_from_dtd()
917 if (dtd->part2.dtd_flags & DTD_FLAG_VSYNC_POSITIVE) in intel_sdvo_get_mode_from_dtd()
927 static bool intel_sdvo_check_supp_encode(struct intel_sdvo *intel_sdvo) in intel_sdvo_check_supp_encode()
937 static bool intel_sdvo_set_encode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encode()
943 static bool intel_sdvo_set_colorimetry(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_colorimetry()
949 static bool intel_sdvo_set_pixel_replication(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_pixel_replication()
956 static bool intel_sdvo_set_audio_state(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_audio_state()
963 static bool intel_sdvo_get_hbuf_size(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_hbuf_size()
1007 static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_write_infoframe()
1032 memcpy(tmp, data + i, min_t(unsigned, 8, length - i)); in intel_sdvo_write_infoframe()
1056 return -ENXIO; in intel_sdvo_read_infoframe()
1064 return -ENXIO; in intel_sdvo_read_infoframe()
1069 return -ENXIO; in intel_sdvo_read_infoframe()
1084 return -ENXIO; in intel_sdvo_read_infoframe()
1086 min_t(unsigned int, 8, hbuf_size - i))) in intel_sdvo_read_infoframe()
1087 return -ENXIO; in intel_sdvo_read_infoframe()
1093 static bool intel_sdvo_compute_avi_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_compute_avi_infoframe()
1097 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_compute_avi_infoframe()
1098 struct hdmi_avi_infoframe *frame = &crtc_state->infoframes.avi.avi; in intel_sdvo_compute_avi_infoframe()
1100 &crtc_state->hw.adjusted_mode; in intel_sdvo_compute_avi_infoframe()
1103 if (!crtc_state->has_hdmi_sink) in intel_sdvo_compute_avi_infoframe()
1106 crtc_state->infoframes.enable |= in intel_sdvo_compute_avi_infoframe()
1110 conn_state->connector, in intel_sdvo_compute_avi_infoframe()
1116 conn_state->connector, in intel_sdvo_compute_avi_infoframe()
1118 crtc_state->limited_color_range ? in intel_sdvo_compute_avi_infoframe()
1123 if (drm_WARN_ON(&dev_priv->drm, ret)) in intel_sdvo_compute_avi_infoframe()
1129 static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_avi_infoframe()
1132 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_set_avi_infoframe()
1134 const union hdmi_infoframe *frame = &crtc_state->infoframes.avi; in intel_sdvo_set_avi_infoframe()
1137 if ((crtc_state->infoframes.enable & in intel_sdvo_set_avi_infoframe()
1141 if (drm_WARN_ON(&dev_priv->drm, in intel_sdvo_set_avi_infoframe()
1142 frame->any.type != HDMI_INFOFRAME_TYPE_AVI)) in intel_sdvo_set_avi_infoframe()
1146 if (drm_WARN_ON(&dev_priv->drm, len < 0)) in intel_sdvo_set_avi_infoframe()
1158 union hdmi_infoframe *frame = &crtc_state->infoframes.avi; in intel_sdvo_get_avi_infoframe()
1162 if (!crtc_state->has_hdmi_sink) in intel_sdvo_get_avi_infoframe()
1174 crtc_state->infoframes.enable |= in intel_sdvo_get_avi_infoframe()
1183 if (frame->any.type != HDMI_INFOFRAME_TYPE_AVI) in intel_sdvo_get_avi_infoframe()
1185 frame->any.type, HDMI_INFOFRAME_TYPE_AVI); in intel_sdvo_get_avi_infoframe()
1188 static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_tv_format()
1194 format_map = 1 << conn_state->tv.mode; in intel_sdvo_set_tv_format()
1204 static bool
1211 intel_sdvo->attached_output)) in intel_sdvo_set_output_timings_from_mode()
1225 static bool
1239 mode->clock / 10, in intel_sdvo_get_preferred_input_mode()
1240 mode->hdisplay, in intel_sdvo_get_preferred_input_mode()
1241 mode->vdisplay)) in intel_sdvo_get_preferred_input_mode()
1249 intel_sdvo->dtd_sdvo_flags = input_dtd.part2.sdvo_flags; in intel_sdvo_get_preferred_input_mode()
1256 struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev); in i9xx_adjust_sdvo_tv_clock()
1257 unsigned dotclock = pipe_config->port_clock; in i9xx_adjust_sdvo_tv_clock()
1258 struct dpll *clock = &pipe_config->dpll; in i9xx_adjust_sdvo_tv_clock()
1265 clock->p1 = 2; in i9xx_adjust_sdvo_tv_clock()
1266 clock->p2 = 10; in i9xx_adjust_sdvo_tv_clock()
1267 clock->n = 3; in i9xx_adjust_sdvo_tv_clock()
1268 clock->m1 = 16; in i9xx_adjust_sdvo_tv_clock()
1269 clock->m2 = 8; in i9xx_adjust_sdvo_tv_clock()
1271 clock->p1 = 1; in i9xx_adjust_sdvo_tv_clock()
1272 clock->p2 = 10; in i9xx_adjust_sdvo_tv_clock()
1273 clock->n = 6; in i9xx_adjust_sdvo_tv_clock()
1274 clock->m1 = 12; in i9xx_adjust_sdvo_tv_clock()
1275 clock->m2 = 8; in i9xx_adjust_sdvo_tv_clock()
1277 drm_WARN(&dev_priv->drm, 1, in i9xx_adjust_sdvo_tv_clock()
1281 pipe_config->clock_set = true; in i9xx_adjust_sdvo_tv_clock()
1284 static bool intel_has_hdmi_sink(struct intel_sdvo *sdvo, in intel_has_hdmi_sink()
1287 return sdvo->has_hdmi_monitor && in intel_has_hdmi_sink()
1288 READ_ONCE(to_intel_digital_connector_state(conn_state)->force_audio) != HDMI_AUDIO_OFF_DVI; in intel_has_hdmi_sink()
1291 static bool intel_sdvo_limited_color_range(struct intel_encoder *encoder, in intel_sdvo_limited_color_range()
1297 if ((intel_sdvo->colorimetry_cap & SDVO_COLORIMETRY_RGB220) == 0) in intel_sdvo_limited_color_range()
1311 to_intel_sdvo_connector(conn_state->connector); in intel_sdvo_compute_config()
1312 struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; in intel_sdvo_compute_config()
1313 struct drm_display_mode *mode = &pipe_config->hw.mode; in intel_sdvo_compute_config()
1316 pipe_config->pipe_bpp = 8*3; in intel_sdvo_compute_config()
1317 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; in intel_sdvo_compute_config()
1319 if (HAS_PCH_SPLIT(to_i915(encoder->base.dev))) in intel_sdvo_compute_config()
1320 pipe_config->has_pch_encoder = true; in intel_sdvo_compute_config()
1330 return -EINVAL; in intel_sdvo_compute_config()
1336 pipe_config->sdvo_tv_clock = true; in intel_sdvo_compute_config()
1339 intel_sdvo_connector->base.panel.fixed_mode)) in intel_sdvo_compute_config()
1340 return -EINVAL; in intel_sdvo_compute_config()
1348 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) in intel_sdvo_compute_config()
1349 return -EINVAL; in intel_sdvo_compute_config()
1355 pipe_config->pixel_multiplier = in intel_sdvo_compute_config()
1358 pipe_config->has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo, conn_state); in intel_sdvo_compute_config()
1360 if (pipe_config->has_hdmi_sink) { in intel_sdvo_compute_config()
1361 if (intel_sdvo_state->base.force_audio == HDMI_AUDIO_AUTO) in intel_sdvo_compute_config()
1362 pipe_config->has_audio = intel_sdvo->has_hdmi_audio; in intel_sdvo_compute_config()
1364 pipe_config->has_audio = in intel_sdvo_compute_config()
1365 intel_sdvo_state->base.force_audio == HDMI_AUDIO_ON; in intel_sdvo_compute_config()
1368 pipe_config->limited_color_range = in intel_sdvo_compute_config()
1376 if (conn_state->picture_aspect_ratio) in intel_sdvo_compute_config()
1377 adjusted_mode->picture_aspect_ratio = in intel_sdvo_compute_config()
1378 conn_state->picture_aspect_ratio; in intel_sdvo_compute_config()
1383 return -EINVAL; in intel_sdvo_compute_config()
1398 const struct drm_connector_state *conn_state = &sdvo_state->base.base; in intel_sdvo_update_props()
1400 to_intel_sdvo_connector(conn_state->connector); in intel_sdvo_update_props()
1403 if (intel_sdvo_conn->left) in intel_sdvo_update_props()
1404 UPDATE_PROPERTY(sdvo_state->tv.overscan_h, OVERSCAN_H); in intel_sdvo_update_props()
1406 if (intel_sdvo_conn->top) in intel_sdvo_update_props()
1407 UPDATE_PROPERTY(sdvo_state->tv.overscan_v, OVERSCAN_V); in intel_sdvo_update_props()
1409 if (intel_sdvo_conn->hpos) in intel_sdvo_update_props()
1410 UPDATE_PROPERTY(sdvo_state->tv.hpos, HPOS); in intel_sdvo_update_props()
1412 if (intel_sdvo_conn->vpos) in intel_sdvo_update_props()
1413 UPDATE_PROPERTY(sdvo_state->tv.vpos, VPOS); in intel_sdvo_update_props()
1415 if (intel_sdvo_conn->saturation) in intel_sdvo_update_props()
1416 UPDATE_PROPERTY(conn_state->tv.saturation, SATURATION); in intel_sdvo_update_props()
1418 if (intel_sdvo_conn->contrast) in intel_sdvo_update_props()
1419 UPDATE_PROPERTY(conn_state->tv.contrast, CONTRAST); in intel_sdvo_update_props()
1421 if (intel_sdvo_conn->hue) in intel_sdvo_update_props()
1422 UPDATE_PROPERTY(conn_state->tv.hue, HUE); in intel_sdvo_update_props()
1424 if (intel_sdvo_conn->brightness) in intel_sdvo_update_props()
1425 UPDATE_PROPERTY(conn_state->tv.brightness, BRIGHTNESS); in intel_sdvo_update_props()
1427 if (intel_sdvo_conn->sharpness) in intel_sdvo_update_props()
1428 UPDATE_PROPERTY(sdvo_state->tv.sharpness, SHARPNESS); in intel_sdvo_update_props()
1430 if (intel_sdvo_conn->flicker_filter) in intel_sdvo_update_props()
1431 UPDATE_PROPERTY(sdvo_state->tv.flicker_filter, FLICKER_FILTER); in intel_sdvo_update_props()
1433 if (intel_sdvo_conn->flicker_filter_2d) in intel_sdvo_update_props()
1434 UPDATE_PROPERTY(sdvo_state->tv.flicker_filter_2d, FLICKER_FILTER_2D); in intel_sdvo_update_props()
1436 if (intel_sdvo_conn->flicker_filter_adaptive) in intel_sdvo_update_props()
1437 UPDATE_PROPERTY(sdvo_state->tv.flicker_filter_adaptive, FLICKER_FILTER_ADAPTIVE); in intel_sdvo_update_props()
1439 if (intel_sdvo_conn->tv_chroma_filter) in intel_sdvo_update_props()
1440 UPDATE_PROPERTY(sdvo_state->tv.chroma_filter, TV_CHROMA_FILTER); in intel_sdvo_update_props()
1442 if (intel_sdvo_conn->tv_luma_filter) in intel_sdvo_update_props()
1443 UPDATE_PROPERTY(sdvo_state->tv.luma_filter, TV_LUMA_FILTER); in intel_sdvo_update_props()
1445 if (intel_sdvo_conn->dot_crawl) in intel_sdvo_update_props()
1446 UPDATE_PROPERTY(sdvo_state->tv.dot_crawl, DOT_CRAWL); in intel_sdvo_update_props()
1456 struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev); in intel_sdvo_pre_enable()
1457 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in intel_sdvo_pre_enable()
1458 const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; in intel_sdvo_pre_enable()
1462 to_intel_sdvo_connector(conn_state->connector); in intel_sdvo_pre_enable()
1463 const struct drm_display_mode *mode = &crtc_state->hw.mode; in intel_sdvo_pre_enable()
1474 * output. This is only correct if we're a single-input device, in in intel_sdvo_pre_enable()
1476 * channel on the motherboard. In a two-input device, the first input in intel_sdvo_pre_enable()
1479 in_out.in0 = intel_sdvo->attached_output; in intel_sdvo_pre_enable()
1488 intel_sdvo->attached_output)) in intel_sdvo_pre_enable()
1494 intel_sdvo_connector->base.panel.fixed_mode); in intel_sdvo_pre_enable()
1498 drm_info(&dev_priv->drm, in intel_sdvo_pre_enable()
1506 if (crtc_state->has_hdmi_sink) { in intel_sdvo_pre_enable()
1509 crtc_state->limited_color_range ? in intel_sdvo_pre_enable()
1514 !!(adjusted_mode->flags & in intel_sdvo_pre_enable()
1526 input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags; in intel_sdvo_pre_enable()
1528 drm_info(&dev_priv->drm, in intel_sdvo_pre_enable()
1532 switch (crtc_state->pixel_multiplier) { in intel_sdvo_pre_enable()
1534 drm_WARN(&dev_priv->drm, 1, in intel_sdvo_pre_enable()
1552 sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_pre_enable()
1553 if (intel_sdvo->port == PORT_B) in intel_sdvo_pre_enable()
1561 sdvox |= SDVO_PIPE_SEL_CPT(crtc->pipe); in intel_sdvo_pre_enable()
1563 sdvox |= SDVO_PIPE_SEL(crtc->pipe); in intel_sdvo_pre_enable()
1571 sdvox |= (crtc_state->pixel_multiplier - 1) in intel_sdvo_pre_enable()
1581 static bool intel_sdvo_connector_get_hw_state(struct intel_connector *connector) in intel_sdvo_connector_get_hw_state()
1584 to_intel_sdvo_connector(&connector->base); in intel_sdvo_connector_get_hw_state()
1590 return active_outputs & intel_sdvo_connector->output_flag; in intel_sdvo_connector_get_hw_state()
1593 bool intel_sdvo_port_enabled(struct drm_i915_private *dev_priv, in intel_sdvo_port_enabled()
1611 static bool intel_sdvo_get_hw_state(struct intel_encoder *encoder, in intel_sdvo_get_hw_state()
1614 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_sdvo_get_hw_state()
1617 bool ret; in intel_sdvo_get_hw_state()
1621 ret = intel_sdvo_port_enabled(dev_priv, intel_sdvo->sdvo_reg, pipe); in intel_sdvo_get_hw_state()
1629 struct drm_device *dev = encoder->base.dev; in intel_sdvo_get_config()
1637 bool ret; in intel_sdvo_get_config()
1639 pipe_config->output_types |= BIT(INTEL_OUTPUT_SDVO); in intel_sdvo_get_config()
1641 sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_get_config()
1649 drm_dbg(&dev_priv->drm, "failed to retrieve SDVO DTD\n"); in intel_sdvo_get_config()
1650 pipe_config->quirks |= PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS; in intel_sdvo_get_config()
1663 pipe_config->hw.adjusted_mode.flags |= flags; in intel_sdvo_get_config()
1669 * encoder->get_config we so already have a valid pixel multplier on all in intel_sdvo_get_config()
1673 pipe_config->pixel_multiplier = in intel_sdvo_get_config()
1678 dotclock = pipe_config->port_clock; in intel_sdvo_get_config()
1680 if (pipe_config->pixel_multiplier) in intel_sdvo_get_config()
1681 dotclock /= pipe_config->pixel_multiplier; in intel_sdvo_get_config()
1683 pipe_config->hw.adjusted_mode.crtc_clock = dotclock; in intel_sdvo_get_config()
1702 encoder_pixel_multiplier != pipe_config->pixel_multiplier, in intel_sdvo_get_config()
1704 pipe_config->pixel_multiplier, encoder_pixel_multiplier); in intel_sdvo_get_config()
1709 pipe_config->limited_color_range = true; in intel_sdvo_get_config()
1717 pipe_config->has_audio = true; in intel_sdvo_get_config()
1723 pipe_config->has_hdmi_sink = true; in intel_sdvo_get_config()
1739 &crtc_state->hw.adjusted_mode; in intel_sdvo_enable_audio()
1740 struct drm_connector *connector = conn_state->connector; in intel_sdvo_enable_audio()
1741 u8 *eld = connector->eld; in intel_sdvo_enable_audio()
1760 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); in intel_disable_sdvo()
1762 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); in intel_disable_sdvo()
1765 if (old_crtc_state->has_audio) in intel_disable_sdvo()
1773 temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_disable_sdvo()
1783 if (HAS_PCH_IBX(dev_priv) && crtc->pipe == PIPE_B) { in intel_disable_sdvo()
1824 struct drm_device *dev = encoder->base.dev; in intel_enable_sdvo()
1827 struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); in intel_enable_sdvo()
1829 bool input1, input2; in intel_enable_sdvo()
1831 bool success; in intel_enable_sdvo()
1833 temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_enable_sdvo()
1838 intel_wait_for_vblank(dev_priv, crtc->pipe); in intel_enable_sdvo()
1848 drm_dbg_kms(&dev_priv->drm, in intel_enable_sdvo()
1856 intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output); in intel_enable_sdvo()
1858 if (pipe_config->has_audio) in intel_enable_sdvo()
1869 int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; in intel_sdvo_mode_valid()
1870 bool has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo, connector->state); in intel_sdvo_mode_valid()
1871 int clock = mode->clock; in intel_sdvo_mode_valid()
1873 if (mode->flags & DRM_MODE_FLAG_DBLSCAN) in intel_sdvo_mode_valid()
1880 if (mode->flags & DRM_MODE_FLAG_DBLCLK) { in intel_sdvo_mode_valid()
1886 if (intel_sdvo->pixel_clock_min > clock) in intel_sdvo_mode_valid()
1889 if (intel_sdvo->pixel_clock_max < clock) in intel_sdvo_mode_valid()
1894 intel_sdvo_connector->base.panel.fixed_mode; in intel_sdvo_mode_valid()
1896 if (mode->hdisplay > fixed_mode->hdisplay) in intel_sdvo_mode_valid()
1899 if (mode->vdisplay > fixed_mode->vdisplay) in intel_sdvo_mode_valid()
1906 static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps) in intel_sdvo_get_capabilities()
1927 caps->vendor_id, in intel_sdvo_get_capabilities()
1928 caps->device_id, in intel_sdvo_get_capabilities()
1929 caps->device_rev_id, in intel_sdvo_get_capabilities()
1930 caps->sdvo_version_major, in intel_sdvo_get_capabilities()
1931 caps->sdvo_version_minor, in intel_sdvo_get_capabilities()
1932 caps->sdvo_inputs_mask, in intel_sdvo_get_capabilities()
1933 caps->smooth_scaling, in intel_sdvo_get_capabilities()
1934 caps->sharp_scaling, in intel_sdvo_get_capabilities()
1935 caps->up_scaling, in intel_sdvo_get_capabilities()
1936 caps->down_scaling, in intel_sdvo_get_capabilities()
1937 caps->stall_support, in intel_sdvo_get_capabilities()
1938 caps->output_flags); in intel_sdvo_get_capabilities()
1956 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_get_hotplug_support()
1981 &intel_sdvo->hotplug_active, 2); in intel_sdvo_enable_hotplug()
1993 static bool
1997 return hweight16(intel_sdvo->caps.output_flags) > 1; in intel_sdvo_multifunc_encoder()
2004 return drm_get_edid(connector, &sdvo->ddc); in intel_sdvo_get_edid()
2007 /* Mac mini hack -- use the same DDC as the analog connector */
2011 struct drm_i915_private *dev_priv = to_i915(connector->dev); in intel_sdvo_get_analog_edid()
2015 dev_priv->vbt.crt_ddc_pin)); in intel_sdvo_get_analog_edid()
2030 u8 ddc, saved_ddc = intel_sdvo->ddc_bus; in intel_sdvo_tmds_sink_detect()
2036 for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in intel_sdvo_tmds_sink_detect()
2037 intel_sdvo->ddc_bus = ddc; in intel_sdvo_tmds_sink_detect()
2047 intel_sdvo->ddc_bus = saved_ddc; in intel_sdvo_tmds_sink_detect()
2052 * port, try to use the CRT ddc to read the EDID for DVI-connector. in intel_sdvo_tmds_sink_detect()
2060 if (edid->input & DRM_EDID_INPUT_DIGITAL) { in intel_sdvo_tmds_sink_detect()
2062 if (intel_sdvo_connector->is_hdmi) { in intel_sdvo_tmds_sink_detect()
2063 intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid); in intel_sdvo_tmds_sink_detect()
2064 intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid); in intel_sdvo_tmds_sink_detect()
2074 static bool
2078 bool monitor_is_digital = !!(edid->input & DRM_EDID_INPUT_DIGITAL); in intel_sdvo_connector_matches_edid()
2079 bool connector_is_digital = !!IS_DIGITAL(sdvo); in intel_sdvo_connector_matches_edid()
2087 intel_sdvo_detect(struct drm_connector *connector, bool force) in intel_sdvo_detect()
2089 struct drm_i915_private *i915 = to_i915(connector->dev); in intel_sdvo_detect()
2096 connector->base.id, connector->name); in intel_sdvo_detect()
2108 intel_sdvo_connector->output_flag); in intel_sdvo_detect()
2113 intel_sdvo->attached_output = response; in intel_sdvo_detect()
2115 intel_sdvo->has_hdmi_monitor = false; in intel_sdvo_detect()
2116 intel_sdvo->has_hdmi_audio = false; in intel_sdvo_detect()
2118 if ((intel_sdvo_connector->output_flag & response) == 0) in intel_sdvo_detect()
2150 connector->base.id, connector->name); in intel_sdvo_get_ddc_modes()
2156 * Mac mini hack. On this device, the DVI-I connector shares one DDC in intel_sdvo_get_ddc_modes()
2244 const struct drm_connector_state *conn_state = connector->state; in intel_sdvo_get_tv_modes()
2251 connector->base.id, connector->name); in intel_sdvo_get_tv_modes()
2257 format_map = 1 << conn_state->tv.mode; in intel_sdvo_get_tv_modes()
2261 if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output)) in intel_sdvo_get_tv_modes()
2275 nmode = drm_mode_duplicate(connector->dev, in intel_sdvo_get_tv_modes()
2290 struct drm_i915_private *dev_priv = to_i915(connector->dev); in intel_sdvo_get_lvds_modes()
2294 drm_dbg_kms(&dev_priv->drm, "[CONNECTOR:%d:%s]\n", in intel_sdvo_get_lvds_modes()
2295 connector->base.id, connector->name); in intel_sdvo_get_lvds_modes()
2299 * SDVO->LVDS transcoders can't cope with the EDID mode. in intel_sdvo_get_lvds_modes()
2301 if (dev_priv->vbt.sdvo_lvds_vbt_mode != NULL) { in intel_sdvo_get_lvds_modes()
2302 newmode = drm_mode_duplicate(connector->dev, in intel_sdvo_get_lvds_modes()
2303 dev_priv->vbt.sdvo_lvds_vbt_mode); in intel_sdvo_get_lvds_modes()
2306 newmode->type = (DRM_MODE_TYPE_PREFERRED | in intel_sdvo_get_lvds_modes()
2318 num_modes += intel_ddc_get_modes(connector, &intel_sdvo->ddc); in intel_sdvo_get_lvds_modes()
2338 struct drm_property *property, in intel_sdvo_connector_atomic_get_property() argument
2344 if (property == intel_sdvo_connector->tv_format) { in intel_sdvo_connector_atomic_get_property()
2347 for (i = 0; i < intel_sdvo_connector->format_supported_num; i++) in intel_sdvo_connector_atomic_get_property()
2348 if (state->tv.mode == intel_sdvo_connector->tv_format_supported[i]) { in intel_sdvo_connector_atomic_get_property()
2354 drm_WARN_ON(connector->dev, 1); in intel_sdvo_connector_atomic_get_property()
2356 } else if (property == intel_sdvo_connector->top || in intel_sdvo_connector_atomic_get_property()
2357 property == intel_sdvo_connector->bottom) in intel_sdvo_connector_atomic_get_property()
2358 *val = intel_sdvo_connector->max_vscan - sdvo_state->tv.overscan_v; in intel_sdvo_connector_atomic_get_property()
2359 else if (property == intel_sdvo_connector->left || in intel_sdvo_connector_atomic_get_property()
2360 property == intel_sdvo_connector->right) in intel_sdvo_connector_atomic_get_property()
2361 *val = intel_sdvo_connector->max_hscan - sdvo_state->tv.overscan_h; in intel_sdvo_connector_atomic_get_property()
2362 else if (property == intel_sdvo_connector->hpos) in intel_sdvo_connector_atomic_get_property()
2363 *val = sdvo_state->tv.hpos; in intel_sdvo_connector_atomic_get_property()
2364 else if (property == intel_sdvo_connector->vpos) in intel_sdvo_connector_atomic_get_property()
2365 *val = sdvo_state->tv.vpos; in intel_sdvo_connector_atomic_get_property()
2366 else if (property == intel_sdvo_connector->saturation) in intel_sdvo_connector_atomic_get_property()
2367 *val = state->tv.saturation; in intel_sdvo_connector_atomic_get_property()
2368 else if (property == intel_sdvo_connector->contrast) in intel_sdvo_connector_atomic_get_property()
2369 *val = state->tv.contrast; in intel_sdvo_connector_atomic_get_property()
2370 else if (property == intel_sdvo_connector->hue) in intel_sdvo_connector_atomic_get_property()
2371 *val = state->tv.hue; in intel_sdvo_connector_atomic_get_property()
2372 else if (property == intel_sdvo_connector->brightness) in intel_sdvo_connector_atomic_get_property()
2373 *val = state->tv.brightness; in intel_sdvo_connector_atomic_get_property()
2374 else if (property == intel_sdvo_connector->sharpness) in intel_sdvo_connector_atomic_get_property()
2375 *val = sdvo_state->tv.sharpness; in intel_sdvo_connector_atomic_get_property()
2376 else if (property == intel_sdvo_connector->flicker_filter) in intel_sdvo_connector_atomic_get_property()
2377 *val = sdvo_state->tv.flicker_filter; in intel_sdvo_connector_atomic_get_property()
2378 else if (property == intel_sdvo_connector->flicker_filter_2d) in intel_sdvo_connector_atomic_get_property()
2379 *val = sdvo_state->tv.flicker_filter_2d; in intel_sdvo_connector_atomic_get_property()
2380 else if (property == intel_sdvo_connector->flicker_filter_adaptive) in intel_sdvo_connector_atomic_get_property()
2381 *val = sdvo_state->tv.flicker_filter_adaptive; in intel_sdvo_connector_atomic_get_property()
2382 else if (property == intel_sdvo_connector->tv_chroma_filter) in intel_sdvo_connector_atomic_get_property()
2383 *val = sdvo_state->tv.chroma_filter; in intel_sdvo_connector_atomic_get_property()
2384 else if (property == intel_sdvo_connector->tv_luma_filter) in intel_sdvo_connector_atomic_get_property()
2385 *val = sdvo_state->tv.luma_filter; in intel_sdvo_connector_atomic_get_property()
2386 else if (property == intel_sdvo_connector->dot_crawl) in intel_sdvo_connector_atomic_get_property()
2387 *val = sdvo_state->tv.dot_crawl; in intel_sdvo_connector_atomic_get_property()
2389 return intel_digital_connector_atomic_get_property(connector, state, property, val); in intel_sdvo_connector_atomic_get_property()
2397 struct drm_property *property, in intel_sdvo_connector_atomic_set_property() argument
2403 if (property == intel_sdvo_connector->tv_format) { in intel_sdvo_connector_atomic_set_property()
2404 state->tv.mode = intel_sdvo_connector->tv_format_supported[val]; in intel_sdvo_connector_atomic_set_property()
2406 if (state->crtc) { in intel_sdvo_connector_atomic_set_property()
2408 drm_atomic_get_new_crtc_state(state->state, state->crtc); in intel_sdvo_connector_atomic_set_property()
2410 crtc_state->connectors_changed = true; in intel_sdvo_connector_atomic_set_property()
2412 } else if (property == intel_sdvo_connector->top || in intel_sdvo_connector_atomic_set_property()
2413 property == intel_sdvo_connector->bottom) in intel_sdvo_connector_atomic_set_property()
2415 sdvo_state->tv.overscan_v = intel_sdvo_connector->max_vscan - val; in intel_sdvo_connector_atomic_set_property()
2416 else if (property == intel_sdvo_connector->left || in intel_sdvo_connector_atomic_set_property()
2417 property == intel_sdvo_connector->right) in intel_sdvo_connector_atomic_set_property()
2419 sdvo_state->tv.overscan_h = intel_sdvo_connector->max_hscan - val; in intel_sdvo_connector_atomic_set_property()
2420 else if (property == intel_sdvo_connector->hpos) in intel_sdvo_connector_atomic_set_property()
2421 sdvo_state->tv.hpos = val; in intel_sdvo_connector_atomic_set_property()
2422 else if (property == intel_sdvo_connector->vpos) in intel_sdvo_connector_atomic_set_property()
2423 sdvo_state->tv.vpos = val; in intel_sdvo_connector_atomic_set_property()
2424 else if (property == intel_sdvo_connector->saturation) in intel_sdvo_connector_atomic_set_property()
2425 state->tv.saturation = val; in intel_sdvo_connector_atomic_set_property()
2426 else if (property == intel_sdvo_connector->contrast) in intel_sdvo_connector_atomic_set_property()
2427 state->tv.contrast = val; in intel_sdvo_connector_atomic_set_property()
2428 else if (property == intel_sdvo_connector->hue) in intel_sdvo_connector_atomic_set_property()
2429 state->tv.hue = val; in intel_sdvo_connector_atomic_set_property()
2430 else if (property == intel_sdvo_connector->brightness) in intel_sdvo_connector_atomic_set_property()
2431 state->tv.brightness = val; in intel_sdvo_connector_atomic_set_property()
2432 else if (property == intel_sdvo_connector->sharpness) in intel_sdvo_connector_atomic_set_property()
2433 sdvo_state->tv.sharpness = val; in intel_sdvo_connector_atomic_set_property()
2434 else if (property == intel_sdvo_connector->flicker_filter) in intel_sdvo_connector_atomic_set_property()
2435 sdvo_state->tv.flicker_filter = val; in intel_sdvo_connector_atomic_set_property()
2436 else if (property == intel_sdvo_connector->flicker_filter_2d) in intel_sdvo_connector_atomic_set_property()
2437 sdvo_state->tv.flicker_filter_2d = val; in intel_sdvo_connector_atomic_set_property()
2438 else if (property == intel_sdvo_connector->flicker_filter_adaptive) in intel_sdvo_connector_atomic_set_property()
2439 sdvo_state->tv.flicker_filter_adaptive = val; in intel_sdvo_connector_atomic_set_property()
2440 else if (property == intel_sdvo_connector->tv_chroma_filter) in intel_sdvo_connector_atomic_set_property()
2441 sdvo_state->tv.chroma_filter = val; in intel_sdvo_connector_atomic_set_property()
2442 else if (property == intel_sdvo_connector->tv_luma_filter) in intel_sdvo_connector_atomic_set_property()
2443 sdvo_state->tv.luma_filter = val; in intel_sdvo_connector_atomic_set_property()
2444 else if (property == intel_sdvo_connector->dot_crawl) in intel_sdvo_connector_atomic_set_property()
2445 sdvo_state->tv.dot_crawl = val; in intel_sdvo_connector_atomic_set_property()
2447 return intel_digital_connector_atomic_set_property(connector, state, property, val); in intel_sdvo_connector_atomic_set_property()
2462 return sysfs_create_link(&connector->kdev->kobj, in intel_sdvo_connector_register()
2463 &sdvo->ddc.dev.kobj, in intel_sdvo_connector_register()
2464 sdvo->ddc.dev.kobj.name); in intel_sdvo_connector_register()
2472 sysfs_remove_link(&connector->kdev->kobj, in intel_sdvo_connector_unregister()
2473 sdvo->ddc.dev.kobj.name); in intel_sdvo_connector_unregister()
2482 state = kmemdup(connector->state, sizeof(*state), GFP_KERNEL); in intel_sdvo_connector_duplicate_state()
2486 __drm_atomic_helper_connector_duplicate_state(connector, &state->base.base); in intel_sdvo_connector_duplicate_state()
2487 return &state->base.base; in intel_sdvo_connector_duplicate_state()
2514 if (new_conn_state->crtc && in intel_sdvo_atomic_check()
2515 (memcmp(&old_state->tv, &new_state->tv, sizeof(old_state->tv)) || in intel_sdvo_atomic_check()
2516 memcmp(&old_conn_state->tv, &new_conn_state->tv, sizeof(old_conn_state->tv)))) { in intel_sdvo_atomic_check()
2519 new_conn_state->crtc); in intel_sdvo_atomic_check()
2521 crtc_state->connectors_changed = true; in intel_sdvo_atomic_check()
2537 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_enc_destroy()
2555 switch (sdvo->controlled_output) { in intel_sdvo_guess_ddc_bus()
2577 mask &= sdvo->caps.output_flags; in intel_sdvo_guess_ddc_bus()
2584 sdvo->ddc_bus = 1 << num_bits; in intel_sdvo_guess_ddc_bus()
2600 if (sdvo->port == PORT_B) in intel_sdvo_select_ddc_bus()
2601 mapping = &dev_priv->vbt.sdvo_mappings[0]; in intel_sdvo_select_ddc_bus()
2603 mapping = &dev_priv->vbt.sdvo_mappings[1]; in intel_sdvo_select_ddc_bus()
2605 if (mapping->initialized) in intel_sdvo_select_ddc_bus()
2606 sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4); in intel_sdvo_select_ddc_bus()
2618 if (sdvo->port == PORT_B) in intel_sdvo_select_i2c_bus()
2619 mapping = &dev_priv->vbt.sdvo_mappings[0]; in intel_sdvo_select_i2c_bus()
2621 mapping = &dev_priv->vbt.sdvo_mappings[1]; in intel_sdvo_select_i2c_bus()
2623 if (mapping->initialized && in intel_sdvo_select_i2c_bus()
2624 intel_gmbus_is_valid_pin(dev_priv, mapping->i2c_pin)) in intel_sdvo_select_i2c_bus()
2625 pin = mapping->i2c_pin; in intel_sdvo_select_i2c_bus()
2629 sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin); in intel_sdvo_select_i2c_bus()
2636 intel_gmbus_force_bit(sdvo->i2c, true); in intel_sdvo_select_i2c_bus()
2639 /* undo any changes intel_sdvo_select_i2c_bus() did to sdvo->i2c */
2643 intel_gmbus_force_bit(sdvo->i2c, false); in intel_sdvo_unselect_i2c_bus()
2646 static bool
2658 if (sdvo->port == PORT_B) { in intel_sdvo_get_slave_addr()
2659 my_mapping = &dev_priv->vbt.sdvo_mappings[0]; in intel_sdvo_get_slave_addr()
2660 other_mapping = &dev_priv->vbt.sdvo_mappings[1]; in intel_sdvo_get_slave_addr()
2662 my_mapping = &dev_priv->vbt.sdvo_mappings[1]; in intel_sdvo_get_slave_addr()
2663 other_mapping = &dev_priv->vbt.sdvo_mappings[0]; in intel_sdvo_get_slave_addr()
2667 if (my_mapping->slave_addr) in intel_sdvo_get_slave_addr()
2668 return my_mapping->slave_addr; in intel_sdvo_get_slave_addr()
2674 if (other_mapping->slave_addr) { in intel_sdvo_get_slave_addr()
2675 if (other_mapping->slave_addr == 0x70) in intel_sdvo_get_slave_addr()
2685 if (sdvo->port == PORT_B) in intel_sdvo_get_slave_addr()
2698 drm_connector = &connector->base.base; in intel_sdvo_connector_init()
2699 ret = drm_connector_init(encoder->base.base.dev, in intel_sdvo_connector_init()
2702 connector->base.base.connector_type); in intel_sdvo_connector_init()
2709 connector->base.base.interlace_allowed = 1; in intel_sdvo_connector_init()
2710 connector->base.base.doublescan_allowed = 0; in intel_sdvo_connector_init()
2711 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; in intel_sdvo_connector_init()
2712 connector->base.get_hw_state = intel_sdvo_connector_get_hw_state; in intel_sdvo_connector_init()
2714 intel_connector_attach_encoder(&connector->base, &encoder->base); in intel_sdvo_connector_init()
2723 intel_attach_force_audio_property(&connector->base.base); in intel_sdvo_add_hdmi_properties()
2724 if (intel_sdvo->colorimetry_cap & SDVO_COLORIMETRY_RGB220) in intel_sdvo_add_hdmi_properties()
2725 intel_attach_broadcast_rgb_property(&connector->base.base); in intel_sdvo_add_hdmi_properties()
2726 intel_attach_aspect_ratio_property(&connector->base.base); in intel_sdvo_add_hdmi_properties()
2744 __drm_atomic_helper_connector_reset(&sdvo_connector->base.base, in intel_sdvo_connector_alloc()
2745 &conn_state->base.base); in intel_sdvo_connector_alloc()
2750 static bool
2753 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_dvi_init()
2766 intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; in intel_sdvo_dvi_init()
2767 intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0; in intel_sdvo_dvi_init()
2769 intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; in intel_sdvo_dvi_init()
2770 intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1; in intel_sdvo_dvi_init()
2773 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_dvi_init()
2774 connector = &intel_connector->base; in intel_sdvo_dvi_init()
2776 intel_sdvo_connector->output_flag) { in intel_sdvo_dvi_init()
2777 intel_sdvo->hotplug_active |= intel_sdvo_connector->output_flag; in intel_sdvo_dvi_init()
2779 * Some SDVO devices have one-shot hotplug interrupts. in intel_sdvo_dvi_init()
2780 * Ensure that they get re-enabled when an interrupt happens. in intel_sdvo_dvi_init()
2782 intel_connector->polled = DRM_CONNECTOR_POLL_HPD; in intel_sdvo_dvi_init()
2783 intel_encoder->hotplug = intel_sdvo_hotplug; in intel_sdvo_dvi_init()
2786 intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT; in intel_sdvo_dvi_init()
2788 encoder->encoder_type = DRM_MODE_ENCODER_TMDS; in intel_sdvo_dvi_init()
2789 connector->connector_type = DRM_MODE_CONNECTOR_DVID; in intel_sdvo_dvi_init()
2792 connector->connector_type = DRM_MODE_CONNECTOR_HDMIA; in intel_sdvo_dvi_init()
2793 intel_sdvo_connector->is_hdmi = true; in intel_sdvo_dvi_init()
2801 if (intel_sdvo_connector->is_hdmi) in intel_sdvo_dvi_init()
2807 static bool
2810 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_tv_init()
2821 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_tv_init()
2822 connector = &intel_connector->base; in intel_sdvo_tv_init()
2823 encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; in intel_sdvo_tv_init()
2824 connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; in intel_sdvo_tv_init()
2826 intel_sdvo->controlled_output |= type; in intel_sdvo_tv_init()
2827 intel_sdvo_connector->output_flag = type; in intel_sdvo_tv_init()
2847 static bool
2850 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_analog_init()
2861 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_analog_init()
2862 connector = &intel_connector->base; in intel_sdvo_analog_init()
2863 intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT; in intel_sdvo_analog_init()
2864 encoder->encoder_type = DRM_MODE_ENCODER_DAC; in intel_sdvo_analog_init()
2865 connector->connector_type = DRM_MODE_CONNECTOR_VGA; in intel_sdvo_analog_init()
2868 intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; in intel_sdvo_analog_init()
2869 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0; in intel_sdvo_analog_init()
2871 intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; in intel_sdvo_analog_init()
2872 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; in intel_sdvo_analog_init()
2883 static bool
2886 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_lvds_init()
2898 intel_connector = &intel_sdvo_connector->base; in intel_sdvo_lvds_init()
2899 connector = &intel_connector->base; in intel_sdvo_lvds_init()
2900 encoder->encoder_type = DRM_MODE_ENCODER_LVDS; in intel_sdvo_lvds_init()
2901 connector->connector_type = DRM_MODE_CONNECTOR_LVDS; in intel_sdvo_lvds_init()
2904 intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; in intel_sdvo_lvds_init()
2905 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0; in intel_sdvo_lvds_init()
2907 intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; in intel_sdvo_lvds_init()
2908 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; in intel_sdvo_lvds_init()
2921 list_for_each_entry(mode, &connector->probed_modes, head) { in intel_sdvo_lvds_init()
2922 if (mode->type & DRM_MODE_TYPE_PREFERRED) { in intel_sdvo_lvds_init()
2924 drm_mode_duplicate(connector->dev, mode); in intel_sdvo_lvds_init()
2926 intel_panel_init(&intel_connector->panel, in intel_sdvo_lvds_init()
2932 if (!intel_connector->panel.fixed_mode) in intel_sdvo_lvds_init()
2942 static bool
2987 intel_sdvo->controlled_output = 0; in intel_sdvo_output_setup()
2988 memcpy(bytes, &intel_sdvo->caps.output_flags, 2); in intel_sdvo_output_setup()
2994 intel_sdvo->base.pipe_mask = ~0; in intel_sdvo_output_setup()
3001 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_output_cleanup()
3005 &dev->mode_config.connector_list, head) { in intel_sdvo_output_cleanup()
3006 if (intel_attached_encoder(to_intel_connector(connector)) == &intel_sdvo->base) { in intel_sdvo_output_cleanup()
3013 static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_tv_create_property()
3017 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_tv_create_property()
3035 intel_sdvo_connector->format_supported_num = 0; in intel_sdvo_tv_create_property()
3038 intel_sdvo_connector->tv_format_supported[intel_sdvo_connector->format_supported_num++] = i; in intel_sdvo_tv_create_property()
3041 intel_sdvo_connector->tv_format = in intel_sdvo_tv_create_property()
3043 "mode", intel_sdvo_connector->format_supported_num); in intel_sdvo_tv_create_property()
3044 if (!intel_sdvo_connector->tv_format) in intel_sdvo_tv_create_property()
3047 for (i = 0; i < intel_sdvo_connector->format_supported_num; i++) in intel_sdvo_tv_create_property()
3048 drm_property_add_enum(intel_sdvo_connector->tv_format, i, in intel_sdvo_tv_create_property()
3049 tv_format_names[intel_sdvo_connector->tv_format_supported[i]]); in intel_sdvo_tv_create_property()
3051 intel_sdvo_connector->base.base.state->tv.mode = intel_sdvo_connector->tv_format_supported[0]; in intel_sdvo_tv_create_property()
3052 drm_object_attach_property(&intel_sdvo_connector->base.base.base, in intel_sdvo_tv_create_property()
3053 intel_sdvo_connector->tv_format, 0); in intel_sdvo_tv_create_property()
3063 intel_sdvo_connector->name = \
3065 if (!intel_sdvo_connector->name) return false; \
3067 drm_object_attach_property(&connector->base, \
3068 intel_sdvo_connector->name, 0); \
3074 #define ENHANCEMENT(state, name, NAME) _ENHANCEMENT((state)->name, name, NAME)
3076 static bool
3081 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_tv()
3082 struct drm_connector *connector = &intel_sdvo_connector->base.base; in intel_sdvo_create_enhance_property_tv()
3083 struct drm_connector_state *conn_state = connector->state; in intel_sdvo_create_enhance_property_tv()
3088 /* when horizontal overscan is supported, Add the left/right property */ in intel_sdvo_create_enhance_property_tv()
3100 sdvo_state->tv.overscan_h = response; in intel_sdvo_create_enhance_property_tv()
3102 intel_sdvo_connector->max_hscan = data_value[0]; in intel_sdvo_create_enhance_property_tv()
3103 intel_sdvo_connector->left = in intel_sdvo_create_enhance_property_tv()
3105 if (!intel_sdvo_connector->left) in intel_sdvo_create_enhance_property_tv()
3108 drm_object_attach_property(&connector->base, in intel_sdvo_create_enhance_property_tv()
3109 intel_sdvo_connector->left, 0); in intel_sdvo_create_enhance_property_tv()
3111 intel_sdvo_connector->right = in intel_sdvo_create_enhance_property_tv()
3113 if (!intel_sdvo_connector->right) in intel_sdvo_create_enhance_property_tv()
3116 drm_object_attach_property(&connector->base, in intel_sdvo_create_enhance_property_tv()
3117 intel_sdvo_connector->right, 0); in intel_sdvo_create_enhance_property_tv()
3134 sdvo_state->tv.overscan_v = response; in intel_sdvo_create_enhance_property_tv()
3136 intel_sdvo_connector->max_vscan = data_value[0]; in intel_sdvo_create_enhance_property_tv()
3137 intel_sdvo_connector->top = in intel_sdvo_create_enhance_property_tv()
3140 if (!intel_sdvo_connector->top) in intel_sdvo_create_enhance_property_tv()
3143 drm_object_attach_property(&connector->base, in intel_sdvo_create_enhance_property_tv()
3144 intel_sdvo_connector->top, 0); in intel_sdvo_create_enhance_property_tv()
3146 intel_sdvo_connector->bottom = in intel_sdvo_create_enhance_property_tv()
3149 if (!intel_sdvo_connector->bottom) in intel_sdvo_create_enhance_property_tv()
3152 drm_object_attach_property(&connector->base, in intel_sdvo_create_enhance_property_tv()
3153 intel_sdvo_connector->bottom, 0); in intel_sdvo_create_enhance_property_tv()
3159 ENHANCEMENT(&sdvo_state->tv, hpos, HPOS); in intel_sdvo_create_enhance_property_tv()
3160 ENHANCEMENT(&sdvo_state->tv, vpos, VPOS); in intel_sdvo_create_enhance_property_tv()
3161 ENHANCEMENT(&conn_state->tv, saturation, SATURATION); in intel_sdvo_create_enhance_property_tv()
3162 ENHANCEMENT(&conn_state->tv, contrast, CONTRAST); in intel_sdvo_create_enhance_property_tv()
3163 ENHANCEMENT(&conn_state->tv, hue, HUE); in intel_sdvo_create_enhance_property_tv()
3164 ENHANCEMENT(&conn_state->tv, brightness, BRIGHTNESS); in intel_sdvo_create_enhance_property_tv()
3165 ENHANCEMENT(&sdvo_state->tv, sharpness, SHARPNESS); in intel_sdvo_create_enhance_property_tv()
3166 ENHANCEMENT(&sdvo_state->tv, flicker_filter, FLICKER_FILTER); in intel_sdvo_create_enhance_property_tv()
3167 ENHANCEMENT(&sdvo_state->tv, flicker_filter_adaptive, FLICKER_FILTER_ADAPTIVE); in intel_sdvo_create_enhance_property_tv()
3168 ENHANCEMENT(&sdvo_state->tv, flicker_filter_2d, FLICKER_FILTER_2D); in intel_sdvo_create_enhance_property_tv()
3169 _ENHANCEMENT(sdvo_state->tv.chroma_filter, tv_chroma_filter, TV_CHROMA_FILTER); in intel_sdvo_create_enhance_property_tv()
3170 _ENHANCEMENT(sdvo_state->tv.luma_filter, tv_luma_filter, TV_LUMA_FILTER); in intel_sdvo_create_enhance_property_tv()
3176 sdvo_state->tv.dot_crawl = response & 0x1; in intel_sdvo_create_enhance_property_tv()
3177 intel_sdvo_connector->dot_crawl = in intel_sdvo_create_enhance_property_tv()
3179 if (!intel_sdvo_connector->dot_crawl) in intel_sdvo_create_enhance_property_tv()
3182 drm_object_attach_property(&connector->base, in intel_sdvo_create_enhance_property_tv()
3183 intel_sdvo_connector->dot_crawl, 0); in intel_sdvo_create_enhance_property_tv()
3190 static bool
3195 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_lvds()
3196 struct drm_connector *connector = &intel_sdvo_connector->base.base; in intel_sdvo_create_enhance_property_lvds()
3199 ENHANCEMENT(&connector->state->tv, brightness, BRIGHTNESS); in intel_sdvo_create_enhance_property_lvds()
3206 static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property()
3236 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_xfer()
3238 if (!__intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus)) in intel_sdvo_ddc_proxy_xfer()
3239 return -EIO; in intel_sdvo_ddc_proxy_xfer()
3241 return sdvo->i2c->algo->master_xfer(sdvo->i2c, msgs, num); in intel_sdvo_ddc_proxy_xfer()
3246 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_func()
3247 return sdvo->i2c->algo->functionality(sdvo->i2c); in intel_sdvo_ddc_proxy_func()
3258 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_lock_bus()
3259 sdvo->i2c->lock_ops->lock_bus(sdvo->i2c, flags); in proxy_lock_bus()
3265 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_trylock_bus()
3266 return sdvo->i2c->lock_ops->trylock_bus(sdvo->i2c, flags); in proxy_trylock_bus()
3272 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_unlock_bus()
3273 sdvo->i2c->lock_ops->unlock_bus(sdvo->i2c, flags); in proxy_unlock_bus()
3282 static bool
3286 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in intel_sdvo_init_ddc_proxy()
3288 sdvo->ddc.owner = THIS_MODULE; in intel_sdvo_init_ddc_proxy()
3289 sdvo->ddc.class = I2C_CLASS_DDC; in intel_sdvo_init_ddc_proxy()
3290 snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy"); in intel_sdvo_init_ddc_proxy()
3291 sdvo->ddc.dev.parent = &pdev->dev; in intel_sdvo_init_ddc_proxy()
3292 sdvo->ddc.algo_data = sdvo; in intel_sdvo_init_ddc_proxy()
3293 sdvo->ddc.algo = &intel_sdvo_ddc_proxy; in intel_sdvo_init_ddc_proxy()
3294 sdvo->ddc.lock_ops = &proxy_lock_ops; in intel_sdvo_init_ddc_proxy()
3296 return i2c_add_adapter(&sdvo->ddc) == 0; in intel_sdvo_init_ddc_proxy()
3303 drm_WARN_ON(&dev_priv->drm, port != PORT_B); in assert_sdvo_port_valid()
3305 drm_WARN_ON(&dev_priv->drm, port != PORT_B && port != PORT_C); in assert_sdvo_port_valid()
3308 bool intel_sdvo_init(struct drm_i915_private *dev_priv, in intel_sdvo_init()
3321 intel_sdvo->sdvo_reg = sdvo_reg; in intel_sdvo_init()
3322 intel_sdvo->port = port; in intel_sdvo_init()
3323 intel_sdvo->slave_addr = in intel_sdvo_init()
3330 intel_encoder = &intel_sdvo->base; in intel_sdvo_init()
3331 intel_encoder->type = INTEL_OUTPUT_SDVO; in intel_sdvo_init()
3332 intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER; in intel_sdvo_init()
3333 intel_encoder->port = port; in intel_sdvo_init()
3334 drm_encoder_init(&dev_priv->drm, &intel_encoder->base, in intel_sdvo_init()
3343 drm_dbg_kms(&dev_priv->drm, in intel_sdvo_init()
3350 intel_encoder->compute_config = intel_sdvo_compute_config; in intel_sdvo_init()
3352 intel_encoder->disable = pch_disable_sdvo; in intel_sdvo_init()
3353 intel_encoder->post_disable = pch_post_disable_sdvo; in intel_sdvo_init()
3355 intel_encoder->disable = intel_disable_sdvo; in intel_sdvo_init()
3357 intel_encoder->pre_enable = intel_sdvo_pre_enable; in intel_sdvo_init()
3358 intel_encoder->enable = intel_enable_sdvo; in intel_sdvo_init()
3359 intel_encoder->get_hw_state = intel_sdvo_get_hw_state; in intel_sdvo_init()
3360 intel_encoder->get_config = intel_sdvo_get_config; in intel_sdvo_init()
3363 if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps)) in intel_sdvo_init()
3366 intel_sdvo->colorimetry_cap = in intel_sdvo_init()
3370 intel_sdvo->caps.output_flags) != true) { in intel_sdvo_init()
3371 drm_dbg_kms(&dev_priv->drm, in intel_sdvo_init()
3382 if (intel_sdvo->hotplug_active) { in intel_sdvo_init()
3383 if (intel_sdvo->port == PORT_B) in intel_sdvo_init()
3384 intel_encoder->hpd_pin = HPD_SDVO_B; in intel_sdvo_init()
3386 intel_encoder->hpd_pin = HPD_SDVO_C; in intel_sdvo_init()
3397 intel_sdvo->base.cloneable = 0; in intel_sdvo_init()
3406 &intel_sdvo->pixel_clock_min, in intel_sdvo_init()
3407 &intel_sdvo->pixel_clock_max)) in intel_sdvo_init()
3410 drm_dbg_kms(&dev_priv->drm, "%s device VID/DID: %02X:%02X.%02X, " in intel_sdvo_init()
3411 "clock range %dMHz - %dMHz, " in intel_sdvo_init()
3415 intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id, in intel_sdvo_init()
3416 intel_sdvo->caps.device_rev_id, in intel_sdvo_init()
3417 intel_sdvo->pixel_clock_min / 1000, in intel_sdvo_init()
3418 intel_sdvo->pixel_clock_max / 1000, in intel_sdvo_init()
3419 (intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in intel_sdvo_init()
3420 (intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in intel_sdvo_init()
3422 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3424 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3432 drm_encoder_cleanup(&intel_encoder->base); in intel_sdvo_init()
3433 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_init()