Lines Matching refs:intel_sdvo
68 struct intel_sdvo { struct
206 static struct intel_sdvo *to_sdvo(struct intel_encoder *encoder) in to_sdvo()
208 return container_of(encoder, struct intel_sdvo, base); in to_sdvo()
211 static struct intel_sdvo *intel_attached_sdvo(struct drm_connector *connector) in intel_attached_sdvo()
222 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags);
224 intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
228 intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
236 static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val) in intel_sdvo_write_sdvox() argument
238 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_write_sdvox()
243 if (intel_sdvo->sdvo_reg == PCH_SDVOB) { in intel_sdvo_write_sdvox()
244 I915_WRITE(intel_sdvo->sdvo_reg, val); in intel_sdvo_write_sdvox()
245 I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_write_sdvox()
249 if (intel_sdvo->sdvo_reg == GEN3_SDVOB) in intel_sdvo_write_sdvox()
268 static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch) in intel_sdvo_read_byte() argument
272 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
278 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
286 if ((ret = i2c_transfer(intel_sdvo->i2c, msgs, 2)) == 2) in intel_sdvo_read_byte()
414 static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_debug_write() argument
444 DRM_DEBUG_KMS("%s: W: %02X %s\n", SDVO_NAME(intel_sdvo), cmd, buffer); in intel_sdvo_debug_write()
457 static bool intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_write_cmd() argument
475 intel_sdvo_debug_write(intel_sdvo, cmd, args, args_len); in intel_sdvo_write_cmd()
478 msgs[i].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
485 msgs[i].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
494 msgs[i+1].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
499 msgs[i+2].addr = intel_sdvo->slave_addr; in intel_sdvo_write_cmd()
504 ret = i2c_transfer(intel_sdvo->i2c, msgs, i+3); in intel_sdvo_write_cmd()
522 static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, in intel_sdvo_read_response() argument
549 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
561 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
580 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
590 DRM_DEBUG_KMS("%s: R: %s\n", SDVO_NAME(intel_sdvo), buffer); in intel_sdvo_read_response()
594 DRM_DEBUG_KMS("%s: R: ... failed\n", SDVO_NAME(intel_sdvo)); in intel_sdvo_read_response()
608 static bool intel_sdvo_set_control_bus_switch(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_control_bus_switch() argument
612 return intel_sdvo_write_cmd(intel_sdvo, in intel_sdvo_set_control_bus_switch()
617 static bool intel_sdvo_set_value(struct intel_sdvo *intel_sdvo, u8 cmd, const void *data, int len) in intel_sdvo_set_value() argument
619 if (!intel_sdvo_write_cmd(intel_sdvo, cmd, data, len)) in intel_sdvo_set_value()
622 return intel_sdvo_read_response(intel_sdvo, NULL, 0); in intel_sdvo_set_value()
626 intel_sdvo_get_value(struct intel_sdvo *intel_sdvo, u8 cmd, void *value, int len) in intel_sdvo_get_value() argument
628 if (!intel_sdvo_write_cmd(intel_sdvo, cmd, NULL, 0)) in intel_sdvo_get_value()
631 return intel_sdvo_read_response(intel_sdvo, value, len); in intel_sdvo_get_value()
634 static bool intel_sdvo_set_target_input(struct intel_sdvo *intel_sdvo) in intel_sdvo_set_target_input() argument
637 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_target_input()
648 static bool intel_sdvo_get_trained_inputs(struct intel_sdvo *intel_sdvo, bool *input_1, bool *input… in intel_sdvo_get_trained_inputs() argument
653 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_TRAINED_INPUTS, in intel_sdvo_get_trained_inputs()
662 static bool intel_sdvo_set_active_outputs(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_active_outputs() argument
665 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_active_outputs()
670 static bool intel_sdvo_get_active_outputs(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_active_outputs() argument
673 return intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_active_outputs()
678 static bool intel_sdvo_set_encoder_power_state(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encoder_power_state() argument
698 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_encoder_power_state()
702 static bool intel_sdvo_get_input_pixel_clock_range(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_input_pixel_clock_range() argument
709 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_input_pixel_clock_range()
720 static bool intel_sdvo_set_target_output(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_target_output() argument
723 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_target_output()
728 static bool intel_sdvo_set_timing(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_set_timing() argument
731 return intel_sdvo_set_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_set_timing()
732 intel_sdvo_set_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_set_timing()
735 static bool intel_sdvo_get_timing(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_get_timing() argument
738 return intel_sdvo_get_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_get_timing()
739 intel_sdvo_get_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_get_timing()
742 static bool intel_sdvo_set_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_input_timing() argument
745 return intel_sdvo_set_timing(intel_sdvo, in intel_sdvo_set_input_timing()
749 static bool intel_sdvo_set_output_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_output_timing() argument
752 return intel_sdvo_set_timing(intel_sdvo, in intel_sdvo_set_output_timing()
756 static bool intel_sdvo_get_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_input_timing() argument
759 return intel_sdvo_get_timing(intel_sdvo, in intel_sdvo_get_input_timing()
764 intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_preferred_input_timing() argument
777 if (intel_sdvo->is_lvds && in intel_sdvo_create_preferred_input_timing()
778 (intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width || in intel_sdvo_create_preferred_input_timing()
779 intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height)) in intel_sdvo_create_preferred_input_timing()
782 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_create_preferred_input_timing()
787 static bool intel_sdvo_get_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_timing() argument
792 return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1, in intel_sdvo_get_preferred_input_timing()
794 intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2, in intel_sdvo_get_preferred_input_timing()
798 static bool intel_sdvo_set_clock_rate_mult(struct intel_sdvo *intel_sdvo, u8 val) in intel_sdvo_set_clock_rate_mult() argument
800 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1); in intel_sdvo_set_clock_rate_mult()
902 static bool intel_sdvo_check_supp_encode(struct intel_sdvo *intel_sdvo) in intel_sdvo_check_supp_encode() argument
907 return intel_sdvo_get_value(intel_sdvo, in intel_sdvo_check_supp_encode()
912 static bool intel_sdvo_set_encode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encode() argument
915 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_ENCODE, &mode, 1); in intel_sdvo_set_encode()
918 static bool intel_sdvo_set_colorimetry(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_colorimetry() argument
921 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_COLORIMETRY, &mode, 1); in intel_sdvo_set_colorimetry()
925 static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
954 static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_write_infoframe() argument
962 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
967 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HBUF_INFO, in intel_sdvo_write_infoframe()
982 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
988 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
993 static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_avi_infoframe() argument
997 struct drm_crtc *crtc = intel_sdvo->base.base.crtc; in intel_sdvo_set_avi_infoframe()
1010 if (intel_sdvo->rgb_quant_range_selectable) { in intel_sdvo_set_avi_infoframe()
1023 return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF, in intel_sdvo_set_avi_infoframe()
1028 static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo) in intel_sdvo_set_tv_format() argument
1033 format_map = 1 << intel_sdvo->tv_format_index; in intel_sdvo_set_tv_format()
1038 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_tv_format()
1044 intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_output_timings_from_mode() argument
1049 if (!intel_sdvo_set_target_output(intel_sdvo, in intel_sdvo_set_output_timings_from_mode()
1050 intel_sdvo->attached_output)) in intel_sdvo_set_output_timings_from_mode()
1054 if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) in intel_sdvo_set_output_timings_from_mode()
1063 intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_mode() argument
1070 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_get_preferred_input_mode()
1073 if (!intel_sdvo_create_preferred_input_timing(intel_sdvo, in intel_sdvo_get_preferred_input_mode()
1079 if (!intel_sdvo_get_preferred_input_timing(intel_sdvo, in intel_sdvo_get_preferred_input_mode()
1084 intel_sdvo->dtd_sdvo_flags = input_dtd.part2.sdvo_flags; in intel_sdvo_get_preferred_input_mode()
1118 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_compute_config() local
1133 if (intel_sdvo->is_tv) { in intel_sdvo_compute_config()
1134 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode)) in intel_sdvo_compute_config()
1137 (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, in intel_sdvo_compute_config()
1141 } else if (intel_sdvo->is_lvds) { in intel_sdvo_compute_config()
1142 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, in intel_sdvo_compute_config()
1143 intel_sdvo->sdvo_lvds_fixed_mode)) in intel_sdvo_compute_config()
1146 (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, in intel_sdvo_compute_config()
1157 pipe_config->has_hdmi_sink = intel_sdvo->has_hdmi_monitor; in intel_sdvo_compute_config()
1159 if (intel_sdvo->color_range_auto) { in intel_sdvo_compute_config()
1168 intel_sdvo->color_range == HDMI_COLOR_RANGE_16_235) in intel_sdvo_compute_config()
1173 if (intel_sdvo->is_tv) in intel_sdvo_compute_config()
1187 struct intel_sdvo *intel_sdvo = to_sdvo(intel_encoder); in intel_sdvo_pre_enable() local
1202 in_out.in0 = intel_sdvo->attached_output; in intel_sdvo_pre_enable()
1205 intel_sdvo_set_value(intel_sdvo, in intel_sdvo_pre_enable()
1210 if (!intel_sdvo_set_target_output(intel_sdvo, in intel_sdvo_pre_enable()
1211 intel_sdvo->attached_output)) in intel_sdvo_pre_enable()
1215 if (intel_sdvo->is_lvds) in intel_sdvo_pre_enable()
1217 intel_sdvo->sdvo_lvds_fixed_mode); in intel_sdvo_pre_enable()
1220 if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) in intel_sdvo_pre_enable()
1222 SDVO_NAME(intel_sdvo)); in intel_sdvo_pre_enable()
1225 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_pre_enable()
1229 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI); in intel_sdvo_pre_enable()
1230 intel_sdvo_set_colorimetry(intel_sdvo, in intel_sdvo_pre_enable()
1232 intel_sdvo_set_avi_infoframe(intel_sdvo, adjusted_mode); in intel_sdvo_pre_enable()
1234 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI); in intel_sdvo_pre_enable()
1236 if (intel_sdvo->is_tv && in intel_sdvo_pre_enable()
1237 !intel_sdvo_set_tv_format(intel_sdvo)) in intel_sdvo_pre_enable()
1242 if (intel_sdvo->is_tv || intel_sdvo->is_lvds) in intel_sdvo_pre_enable()
1243 input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags; in intel_sdvo_pre_enable()
1244 if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd)) in intel_sdvo_pre_enable()
1246 SDVO_NAME(intel_sdvo)); in intel_sdvo_pre_enable()
1255 if (!intel_sdvo_set_clock_rate_mult(intel_sdvo, rate)) in intel_sdvo_pre_enable()
1268 sdvox = I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_pre_enable()
1269 switch (intel_sdvo->sdvo_reg) { in intel_sdvo_pre_enable()
1285 if (intel_sdvo->has_hdmi_audio) in intel_sdvo_pre_enable()
1300 intel_sdvo_write_sdvox(intel_sdvo, sdvox); in intel_sdvo_pre_enable()
1307 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(&connector->base); in intel_sdvo_connector_get_hw_state() local
1310 intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); in intel_sdvo_connector_get_hw_state()
1323 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_get_hw_state() local
1327 tmp = I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_get_hw_state()
1328 intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); in intel_sdvo_get_hw_state()
1346 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_get_config() local
1354 sdvox = I915_READ(intel_sdvo->sdvo_reg); in intel_sdvo_get_config()
1356 ret = intel_sdvo_get_input_timing(intel_sdvo, &dtd); in intel_sdvo_get_config()
1399 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_CLOCK_RATE_MULT, in intel_sdvo_get_config()
1417 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ENCODE, in intel_sdvo_get_config()
1431 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_disable_sdvo() local
1434 intel_sdvo_set_active_outputs(intel_sdvo, 0); in intel_disable_sdvo()
1436 intel_sdvo_set_encoder_power_state(intel_sdvo, in intel_disable_sdvo()
1439 temp = I915_READ(intel_sdvo->sdvo_reg); in intel_disable_sdvo()
1449 I915_WRITE(intel_sdvo->sdvo_reg, temp); in intel_disable_sdvo()
1450 POSTING_READ(intel_sdvo->sdvo_reg); in intel_disable_sdvo()
1453 I915_WRITE(intel_sdvo->sdvo_reg, temp); in intel_disable_sdvo()
1454 POSTING_READ(intel_sdvo->sdvo_reg); in intel_disable_sdvo()
1465 intel_sdvo_write_sdvox(intel_sdvo, temp & ~SDVO_ENABLE); in intel_disable_sdvo()
1473 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_enable_sdvo() local
1480 temp = I915_READ(intel_sdvo->sdvo_reg); in intel_enable_sdvo()
1487 intel_sdvo_write_sdvox(intel_sdvo, temp | SDVO_ENABLE); in intel_enable_sdvo()
1492 success = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2); in intel_enable_sdvo()
1499 "sync\n", SDVO_NAME(intel_sdvo)); in intel_enable_sdvo()
1503 intel_sdvo_set_encoder_power_state(intel_sdvo, in intel_enable_sdvo()
1505 intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output); in intel_enable_sdvo()
1512 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_dpms() local
1524 crtc = intel_sdvo->base.base.crtc; in intel_sdvo_dpms()
1526 intel_sdvo->base.connectors_active = false; in intel_sdvo_dpms()
1533 intel_sdvo_set_active_outputs(intel_sdvo, 0); in intel_sdvo_dpms()
1535 intel_sdvo_set_encoder_power_state(intel_sdvo, mode); in intel_sdvo_dpms()
1537 intel_sdvo->base.connectors_active = false; in intel_sdvo_dpms()
1541 intel_sdvo->base.connectors_active = true; in intel_sdvo_dpms()
1546 intel_sdvo_set_encoder_power_state(intel_sdvo, mode); in intel_sdvo_dpms()
1547 intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output); in intel_sdvo_dpms()
1557 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_mode_valid() local
1562 if (intel_sdvo->pixel_clock_min > mode->clock) in intel_sdvo_mode_valid()
1565 if (intel_sdvo->pixel_clock_max < mode->clock) in intel_sdvo_mode_valid()
1568 if (intel_sdvo->is_lvds) { in intel_sdvo_mode_valid()
1569 if (mode->hdisplay > intel_sdvo->sdvo_lvds_fixed_mode->hdisplay) in intel_sdvo_mode_valid()
1572 if (mode->vdisplay > intel_sdvo->sdvo_lvds_fixed_mode->vdisplay) in intel_sdvo_mode_valid()
1579 static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps) in intel_sdvo_get_capabilities() argument
1582 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_capabilities()
1616 static uint16_t intel_sdvo_get_hotplug_support(struct intel_sdvo *intel_sdvo) in intel_sdvo_get_hotplug_support() argument
1618 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_get_hotplug_support()
1629 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, in intel_sdvo_get_hotplug_support()
1638 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_enable_hotplug() local
1640 intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, in intel_sdvo_enable_hotplug()
1641 &intel_sdvo->hotplug_active, 2); in intel_sdvo_enable_hotplug()
1645 intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo) in intel_sdvo_multifunc_encoder() argument
1648 return hweight16(intel_sdvo->caps.output_flags) > 1; in intel_sdvo_multifunc_encoder()
1654 struct intel_sdvo *sdvo = intel_attached_sdvo(connector); in intel_sdvo_get_edid()
1672 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_tmds_sink_detect() local
1678 if (edid == NULL && intel_sdvo_multifunc_encoder(intel_sdvo)) { in intel_sdvo_tmds_sink_detect()
1679 u8 ddc, saved_ddc = intel_sdvo->ddc_bus; in intel_sdvo_tmds_sink_detect()
1685 for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in intel_sdvo_tmds_sink_detect()
1686 intel_sdvo->ddc_bus = ddc; in intel_sdvo_tmds_sink_detect()
1696 intel_sdvo->ddc_bus = saved_ddc; in intel_sdvo_tmds_sink_detect()
1711 if (intel_sdvo->is_hdmi) { in intel_sdvo_tmds_sink_detect()
1712 intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid); in intel_sdvo_tmds_sink_detect()
1713 intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid); in intel_sdvo_tmds_sink_detect()
1714 intel_sdvo->rgb_quant_range_selectable = in intel_sdvo_tmds_sink_detect()
1725 intel_sdvo->has_hdmi_audio = (intel_sdvo_connector->force_audio == HDMI_AUDIO_ON); in intel_sdvo_tmds_sink_detect()
1747 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_detect() local
1754 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_detect()
1766 intel_sdvo->attached_output = response; in intel_sdvo_detect()
1768 intel_sdvo->has_hdmi_monitor = false; in intel_sdvo_detect()
1769 intel_sdvo->has_hdmi_audio = false; in intel_sdvo_detect()
1770 intel_sdvo->rgb_quant_range_selectable = false; in intel_sdvo_detect()
1797 intel_sdvo->is_tv = false; in intel_sdvo_detect()
1798 intel_sdvo->is_lvds = false; in intel_sdvo_detect()
1801 intel_sdvo->is_tv = true; in intel_sdvo_detect()
1803 intel_sdvo->is_lvds = intel_sdvo->sdvo_lvds_fixed_mode != NULL; in intel_sdvo_detect()
1906 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_get_tv_modes() local
1917 format_map = 1 << intel_sdvo->tv_format_index; in intel_sdvo_get_tv_modes()
1921 if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output)) in intel_sdvo_get_tv_modes()
1925 if (!intel_sdvo_write_cmd(intel_sdvo, in intel_sdvo_get_tv_modes()
1929 if (!intel_sdvo_read_response(intel_sdvo, &reply, 3)) in intel_sdvo_get_tv_modes()
1944 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_get_lvds_modes() local
1971 intel_ddc_get_modes(connector, &intel_sdvo->ddc); in intel_sdvo_get_lvds_modes()
1975 intel_sdvo->sdvo_lvds_fixed_mode = in intel_sdvo_get_lvds_modes()
1978 intel_sdvo->is_lvds = true; in intel_sdvo_get_lvds_modes()
2008 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_detect_hdmi_audio() local
2012 if (!intel_sdvo->is_hdmi) in intel_sdvo_detect_hdmi_audio()
2028 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_set_property() local
2053 if (has_audio == intel_sdvo->has_hdmi_audio) in intel_sdvo_set_property()
2056 intel_sdvo->has_hdmi_audio = has_audio; in intel_sdvo_set_property()
2061 bool old_auto = intel_sdvo->color_range_auto; in intel_sdvo_set_property()
2062 uint32_t old_range = intel_sdvo->color_range; in intel_sdvo_set_property()
2066 intel_sdvo->color_range_auto = true; in intel_sdvo_set_property()
2069 intel_sdvo->color_range_auto = false; in intel_sdvo_set_property()
2070 intel_sdvo->color_range = 0; in intel_sdvo_set_property()
2073 intel_sdvo->color_range_auto = false; in intel_sdvo_set_property()
2076 intel_sdvo->color_range = HDMI_COLOR_RANGE_16_235; in intel_sdvo_set_property()
2082 if (old_auto == intel_sdvo->color_range_auto && in intel_sdvo_set_property()
2083 old_range == intel_sdvo->color_range) in intel_sdvo_set_property()
2102 if (intel_sdvo->tv_format_index == in intel_sdvo_set_property()
2106 intel_sdvo->tv_format_index = intel_sdvo_connector->tv_format_supported[val]; in intel_sdvo_set_property()
2177 if (!intel_sdvo_set_value(intel_sdvo, cmd, &temp_value, 2)) in intel_sdvo_set_property()
2182 if (intel_sdvo->base.base.crtc) in intel_sdvo_set_property()
2183 intel_crtc_restore_mode(intel_sdvo->base.base.crtc); in intel_sdvo_set_property()
2208 struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder)); in intel_sdvo_enc_destroy() local
2210 if (intel_sdvo->sdvo_lvds_fixed_mode != NULL) in intel_sdvo_enc_destroy()
2212 intel_sdvo->sdvo_lvds_fixed_mode); in intel_sdvo_enc_destroy()
2214 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_enc_destroy()
2223 intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo) in intel_sdvo_guess_ddc_bus()
2267 struct intel_sdvo *sdvo, u32 reg) in intel_sdvo_select_ddc_bus()
2284 struct intel_sdvo *sdvo, u32 reg) in intel_sdvo_select_i2c_bus()
2309 intel_sdvo_unselect_i2c_bus(struct intel_sdvo *sdvo) in intel_sdvo_unselect_i2c_bus()
2315 intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_is_hdmi_connector() argument
2317 return intel_sdvo_check_supp_encode(intel_sdvo); in intel_sdvo_is_hdmi_connector()
2321 intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo) in intel_sdvo_get_slave_addr()
2361 struct intel_sdvo *sdvo_encoder; in intel_sdvo_connector_unregister()
2373 struct intel_sdvo *encoder) in intel_sdvo_connector_init()
2417 intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo, in intel_sdvo_add_hdmi_properties() argument
2425 intel_sdvo->color_range_auto = true; in intel_sdvo_add_hdmi_properties()
2446 intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_dvi_init() argument
2448 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_dvi_init()
2461 intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; in intel_sdvo_dvi_init()
2464 intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; in intel_sdvo_dvi_init()
2470 if (intel_sdvo_get_hotplug_support(intel_sdvo) & in intel_sdvo_dvi_init()
2472 intel_sdvo->hotplug_active |= intel_sdvo_connector->output_flag; in intel_sdvo_dvi_init()
2484 if (intel_sdvo_is_hdmi_connector(intel_sdvo, device)) { in intel_sdvo_dvi_init()
2486 intel_sdvo->is_hdmi = true; in intel_sdvo_dvi_init()
2489 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_dvi_init()
2494 if (intel_sdvo->is_hdmi) in intel_sdvo_dvi_init()
2495 intel_sdvo_add_hdmi_properties(intel_sdvo, intel_sdvo_connector); in intel_sdvo_dvi_init()
2501 intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type) in intel_sdvo_tv_init() argument
2503 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_tv_init()
2519 intel_sdvo->controlled_output |= type; in intel_sdvo_tv_init()
2522 intel_sdvo->is_tv = true; in intel_sdvo_tv_init()
2524 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_tv_init()
2529 if (!intel_sdvo_tv_create_property(intel_sdvo, intel_sdvo_connector, type)) in intel_sdvo_tv_init()
2532 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) in intel_sdvo_tv_init()
2544 intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_analog_init() argument
2546 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_analog_init()
2564 intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; in intel_sdvo_analog_init()
2567 intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; in intel_sdvo_analog_init()
2571 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_analog_init()
2580 intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_lvds_init() argument
2582 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_lvds_init()
2599 intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; in intel_sdvo_lvds_init()
2602 intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; in intel_sdvo_lvds_init()
2606 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_lvds_init()
2611 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) in intel_sdvo_lvds_init()
2623 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags) in intel_sdvo_output_setup() argument
2625 intel_sdvo->is_tv = false; in intel_sdvo_output_setup()
2626 intel_sdvo->is_lvds = false; in intel_sdvo_output_setup()
2631 if (!intel_sdvo_dvi_init(intel_sdvo, 0)) in intel_sdvo_output_setup()
2635 if (!intel_sdvo_dvi_init(intel_sdvo, 1)) in intel_sdvo_output_setup()
2640 if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_SVID0)) in intel_sdvo_output_setup()
2644 if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_CVBS0)) in intel_sdvo_output_setup()
2648 if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_YPRPB0)) in intel_sdvo_output_setup()
2652 if (!intel_sdvo_analog_init(intel_sdvo, 0)) in intel_sdvo_output_setup()
2656 if (!intel_sdvo_analog_init(intel_sdvo, 1)) in intel_sdvo_output_setup()
2660 if (!intel_sdvo_lvds_init(intel_sdvo, 0)) in intel_sdvo_output_setup()
2664 if (!intel_sdvo_lvds_init(intel_sdvo, 1)) in intel_sdvo_output_setup()
2670 intel_sdvo->controlled_output = 0; in intel_sdvo_output_setup()
2671 memcpy(bytes, &intel_sdvo->caps.output_flags, 2); in intel_sdvo_output_setup()
2673 SDVO_NAME(intel_sdvo), in intel_sdvo_output_setup()
2677 intel_sdvo->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); in intel_sdvo_output_setup()
2682 static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo) in intel_sdvo_output_cleanup() argument
2684 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_output_cleanup()
2689 if (intel_attached_encoder(connector) == &intel_sdvo->base) { in intel_sdvo_output_cleanup()
2696 static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_tv_create_property() argument
2700 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_tv_create_property()
2704 if (!intel_sdvo_set_target_output(intel_sdvo, type)) in intel_sdvo_tv_create_property()
2708 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_tv_create_property()
2735 intel_sdvo->tv_format_index = intel_sdvo_connector->tv_format_supported[0]; in intel_sdvo_tv_create_property()
2744 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_MAX_##NAME, &data_value, 4) || \
2745 !intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_##NAME, &response, 2)) \
2761 intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property_tv() argument
2765 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_tv()
2771 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
2776 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
2807 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
2812 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
2858 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_DOT_CRAWL, &response, 2)) in intel_sdvo_create_enhance_property_tv()
2878 intel_sdvo_create_enhance_property_lvds(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property_lvds() argument
2882 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_lvds()
2892 static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property() argument
2903 intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property()
2912 …return intel_sdvo_create_enhance_property_tv(intel_sdvo, intel_sdvo_connector, enhancements.reply); in intel_sdvo_create_enhance_property()
2914 …return intel_sdvo_create_enhance_property_lvds(intel_sdvo, intel_sdvo_connector, enhancements.repl… in intel_sdvo_create_enhance_property()
2923 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_xfer()
2933 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_func()
2943 intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo, in intel_sdvo_init_ddc_proxy()
2960 struct intel_sdvo *intel_sdvo; in intel_sdvo_init() local
2962 intel_sdvo = kzalloc(sizeof(*intel_sdvo), GFP_KERNEL); in intel_sdvo_init()
2963 if (!intel_sdvo) in intel_sdvo_init()
2966 intel_sdvo->sdvo_reg = sdvo_reg; in intel_sdvo_init()
2967 intel_sdvo->is_sdvob = is_sdvob; in intel_sdvo_init()
2968 intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(dev, intel_sdvo) >> 1; in intel_sdvo_init()
2969 intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo, sdvo_reg); in intel_sdvo_init()
2970 if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev)) in intel_sdvo_init()
2974 intel_encoder = &intel_sdvo->base; in intel_sdvo_init()
2982 if (!intel_sdvo_read_byte(intel_sdvo, i, &byte)) { in intel_sdvo_init()
2984 SDVO_NAME(intel_sdvo)); in intel_sdvo_init()
2997 if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps)) in intel_sdvo_init()
3000 if (intel_sdvo_output_setup(intel_sdvo, in intel_sdvo_init()
3001 intel_sdvo->caps.output_flags) != true) { in intel_sdvo_init()
3003 SDVO_NAME(intel_sdvo)); in intel_sdvo_init()
3011 if (intel_sdvo->hotplug_active) { in intel_sdvo_init()
3013 intel_sdvo->is_sdvob ? HPD_SDVO_B : HPD_SDVO_C; in intel_sdvo_init()
3024 intel_sdvo->base.cloneable = 0; in intel_sdvo_init()
3026 intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo, sdvo_reg); in intel_sdvo_init()
3029 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_init()
3032 if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo, in intel_sdvo_init()
3033 &intel_sdvo->pixel_clock_min, in intel_sdvo_init()
3034 &intel_sdvo->pixel_clock_max)) in intel_sdvo_init()
3041 SDVO_NAME(intel_sdvo), in intel_sdvo_init()
3042 intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id, in intel_sdvo_init()
3043 intel_sdvo->caps.device_rev_id, in intel_sdvo_init()
3044 intel_sdvo->pixel_clock_min / 1000, in intel_sdvo_init()
3045 intel_sdvo->pixel_clock_max / 1000, in intel_sdvo_init()
3046 (intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in intel_sdvo_init()
3047 (intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in intel_sdvo_init()
3049 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3051 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3056 intel_sdvo_output_cleanup(intel_sdvo); in intel_sdvo_init()
3060 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_init()
3062 intel_sdvo_unselect_i2c_bus(intel_sdvo); in intel_sdvo_init()
3063 kfree(intel_sdvo); in intel_sdvo_init()