Lines Matching refs:intel_sdvo

80 struct intel_sdvo {  struct
182 static struct intel_sdvo *to_sdvo(struct intel_encoder *encoder) in to_sdvo()
184 return container_of(encoder, struct intel_sdvo, base); in to_sdvo()
187 static struct intel_sdvo *intel_attached_sdvo(struct intel_connector *connector) in intel_attached_sdvo()
202 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags);
204 intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
208 intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
216 static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val) in intel_sdvo_write_sdvox() argument
218 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_write_sdvox()
224 intel_de_write(dev_priv, intel_sdvo->sdvo_reg, val); in intel_sdvo_write_sdvox()
225 intel_de_posting_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_write_sdvox()
231 intel_de_write(dev_priv, intel_sdvo->sdvo_reg, val); in intel_sdvo_write_sdvox()
232 intel_de_posting_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_write_sdvox()
237 if (intel_sdvo->port == PORT_B) in intel_sdvo_write_sdvox()
256 static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch) in intel_sdvo_read_byte() argument
260 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
266 .addr = intel_sdvo->slave_addr, in intel_sdvo_read_byte()
274 if ((ret = i2c_transfer(intel_sdvo->i2c, msgs, 2)) == 2) in intel_sdvo_read_byte()
416 static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_debug_write() argument
419 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_debug_write()
443 DRM_DEBUG_KMS("%s: W: %02X %s\n", SDVO_NAME(intel_sdvo), cmd, buffer); in intel_sdvo_debug_write()
464 static bool __intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, in __intel_sdvo_write_cmd() argument
483 intel_sdvo_debug_write(intel_sdvo, cmd, args, args_len); in __intel_sdvo_write_cmd()
486 msgs[i].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
493 msgs[i].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
502 msgs[i+1].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
507 msgs[i+2].addr = intel_sdvo->slave_addr; in __intel_sdvo_write_cmd()
513 ret = i2c_transfer(intel_sdvo->i2c, msgs, i+3); in __intel_sdvo_write_cmd()
515 ret = __i2c_transfer(intel_sdvo->i2c, msgs, i+3); in __intel_sdvo_write_cmd()
533 static bool intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_write_cmd() argument
536 return __intel_sdvo_write_cmd(intel_sdvo, cmd, args, args_len, true); in intel_sdvo_write_cmd()
539 static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, in intel_sdvo_read_response() argument
542 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_read_response()
568 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()
600 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
610 DRM_DEBUG_KMS("%s: R: %s\n", SDVO_NAME(intel_sdvo), buffer); in intel_sdvo_read_response()
615 SDVO_NAME(intel_sdvo), buffer); in intel_sdvo_read_response()
629 static bool __intel_sdvo_set_control_bus_switch(struct intel_sdvo *intel_sdvo, in __intel_sdvo_set_control_bus_switch() argument
633 return __intel_sdvo_write_cmd(intel_sdvo, in __intel_sdvo_set_control_bus_switch()
638 static bool intel_sdvo_set_value(struct intel_sdvo *intel_sdvo, u8 cmd, const void *data, int len) in intel_sdvo_set_value() argument
640 if (!intel_sdvo_write_cmd(intel_sdvo, cmd, data, len)) in intel_sdvo_set_value()
643 return intel_sdvo_read_response(intel_sdvo, NULL, 0); in intel_sdvo_set_value()
647 intel_sdvo_get_value(struct intel_sdvo *intel_sdvo, u8 cmd, void *value, int len) in intel_sdvo_get_value() argument
649 if (!intel_sdvo_write_cmd(intel_sdvo, cmd, NULL, 0)) in intel_sdvo_get_value()
652 return intel_sdvo_read_response(intel_sdvo, value, len); in intel_sdvo_get_value()
655 static bool intel_sdvo_set_target_input(struct intel_sdvo *intel_sdvo) in intel_sdvo_set_target_input() argument
658 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_target_input()
669 static bool intel_sdvo_get_trained_inputs(struct intel_sdvo *intel_sdvo, bool *input_1, bool *input… in intel_sdvo_get_trained_inputs() argument
674 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_TRAINED_INPUTS, in intel_sdvo_get_trained_inputs()
683 static bool intel_sdvo_set_active_outputs(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_active_outputs() argument
686 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_active_outputs()
691 static bool intel_sdvo_get_active_outputs(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_active_outputs() argument
694 return intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_active_outputs()
699 static bool intel_sdvo_set_encoder_power_state(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encoder_power_state() argument
719 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_encoder_power_state()
723 static bool intel_sdvo_get_input_pixel_clock_range(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_input_pixel_clock_range() argument
730 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_input_pixel_clock_range()
741 static bool intel_sdvo_set_target_output(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_target_output() argument
744 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_target_output()
749 static bool intel_sdvo_set_timing(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_set_timing() argument
752 return intel_sdvo_set_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_set_timing()
753 intel_sdvo_set_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_set_timing()
756 static bool intel_sdvo_get_timing(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_get_timing() argument
759 return intel_sdvo_get_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in intel_sdvo_get_timing()
760 intel_sdvo_get_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in intel_sdvo_get_timing()
763 static bool intel_sdvo_set_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_input_timing() argument
766 return intel_sdvo_set_timing(intel_sdvo, in intel_sdvo_set_input_timing()
770 static bool intel_sdvo_set_output_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_output_timing() argument
773 return intel_sdvo_set_timing(intel_sdvo, in intel_sdvo_set_output_timing()
777 static bool intel_sdvo_get_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_input_timing() argument
780 return intel_sdvo_get_timing(intel_sdvo, in intel_sdvo_get_input_timing()
785 intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_preferred_input_timing() argument
806 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_create_preferred_input_timing()
811 static bool intel_sdvo_get_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_timing() argument
816 return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1, in intel_sdvo_get_preferred_input_timing()
818 intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2, in intel_sdvo_get_preferred_input_timing()
822 static bool intel_sdvo_set_clock_rate_mult(struct intel_sdvo *intel_sdvo, u8 val) in intel_sdvo_set_clock_rate_mult() argument
824 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1); in intel_sdvo_set_clock_rate_mult()
926 static bool intel_sdvo_check_supp_encode(struct intel_sdvo *intel_sdvo) in intel_sdvo_check_supp_encode() argument
931 return intel_sdvo_get_value(intel_sdvo, in intel_sdvo_check_supp_encode()
936 static bool intel_sdvo_set_encode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encode() argument
939 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_ENCODE, &mode, 1); in intel_sdvo_set_encode()
942 static bool intel_sdvo_set_colorimetry(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_colorimetry() argument
945 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_COLORIMETRY, &mode, 1); in intel_sdvo_set_colorimetry()
948 static bool intel_sdvo_set_pixel_replication(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_pixel_replication() argument
951 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_PIXEL_REPLI, in intel_sdvo_set_pixel_replication()
955 static bool intel_sdvo_set_audio_state(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_audio_state() argument
958 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_AUDIO_STAT, in intel_sdvo_set_audio_state()
962 static bool intel_sdvo_get_hbuf_size(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_hbuf_size() argument
965 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HBUF_INFO, in intel_sdvo_get_hbuf_size()
977 static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
1006 static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_write_infoframe() argument
1014 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
1019 if (!intel_sdvo_get_hbuf_size(intel_sdvo, &hbuf_size)) in intel_sdvo_write_infoframe()
1033 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
1039 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
1044 static ssize_t intel_sdvo_read_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_read_infoframe() argument
1052 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_read_infoframe()
1060 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_read_infoframe()
1065 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_read_infoframe()
1073 if (!intel_sdvo_get_hbuf_size(intel_sdvo, &hbuf_size)) in intel_sdvo_read_infoframe()
1082 if (!intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_GET_HBUF_DATA, NULL, 0)) in intel_sdvo_read_infoframe()
1084 if (!intel_sdvo_read_response(intel_sdvo, &data[i], in intel_sdvo_read_infoframe()
1092 static bool intel_sdvo_compute_avi_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_compute_avi_infoframe() argument
1096 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_compute_avi_infoframe()
1128 static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_avi_infoframe() argument
1131 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_set_avi_infoframe()
1148 return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF, in intel_sdvo_set_avi_infoframe()
1153 static void intel_sdvo_get_avi_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_avi_infoframe() argument
1164 len = intel_sdvo_read_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF, in intel_sdvo_get_avi_infoframe()
1187 static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_tv_format() argument
1198 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_tv_format()
1204 intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_output_timings_from_mode() argument
1209 if (!intel_sdvo_set_target_output(intel_sdvo, in intel_sdvo_set_output_timings_from_mode()
1210 intel_sdvo->attached_output)) in intel_sdvo_set_output_timings_from_mode()
1214 if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) in intel_sdvo_set_output_timings_from_mode()
1225 intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_mode() argument
1233 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_get_preferred_input_mode()
1236 if (!intel_sdvo_create_preferred_input_timing(intel_sdvo, in intel_sdvo_get_preferred_input_mode()
1241 if (!intel_sdvo_get_preferred_input_timing(intel_sdvo, in intel_sdvo_get_preferred_input_mode()
1246 intel_sdvo->dtd_sdvo_flags = input_dtd.part2.sdvo_flags; in intel_sdvo_get_preferred_input_mode()
1281 static bool intel_has_hdmi_sink(struct intel_sdvo *sdvo, in intel_has_hdmi_sink()
1292 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_limited_color_range() local
1294 if ((intel_sdvo->colorimetry_cap & SDVO_COLORIMETRY_RGB220) == 0) in intel_sdvo_limited_color_range()
1304 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_compute_config() local
1326 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode)) in intel_sdvo_compute_config()
1329 (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, in intel_sdvo_compute_config()
1344 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, fixed_mode)) in intel_sdvo_compute_config()
1347 (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, in intel_sdvo_compute_config()
1363 pipe_config->has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo, conn_state); in intel_sdvo_compute_config()
1367 pipe_config->has_audio = intel_sdvo->has_hdmi_audio; in intel_sdvo_compute_config()
1385 if (!intel_sdvo_compute_avi_infoframe(intel_sdvo, in intel_sdvo_compute_config()
1397 intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_##NAME, &val, sizeof(val)); \
1400 static void intel_sdvo_update_props(struct intel_sdvo *intel_sdvo, in intel_sdvo_update_props() argument
1469 struct intel_sdvo *intel_sdvo = to_sdvo(intel_encoder); in intel_sdvo_pre_enable() local
1475 intel_sdvo_update_props(intel_sdvo, sdvo_state); in intel_sdvo_pre_enable()
1484 in_out.in0 = intel_sdvo->attached_output; in intel_sdvo_pre_enable()
1487 intel_sdvo_set_value(intel_sdvo, in intel_sdvo_pre_enable()
1492 if (!intel_sdvo_set_target_output(intel_sdvo, in intel_sdvo_pre_enable()
1493 intel_sdvo->attached_output)) in intel_sdvo_pre_enable()
1505 if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) in intel_sdvo_pre_enable()
1508 SDVO_NAME(intel_sdvo)); in intel_sdvo_pre_enable()
1511 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_pre_enable()
1515 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI); in intel_sdvo_pre_enable()
1516 intel_sdvo_set_colorimetry(intel_sdvo, in intel_sdvo_pre_enable()
1520 intel_sdvo_set_avi_infoframe(intel_sdvo, crtc_state); in intel_sdvo_pre_enable()
1521 intel_sdvo_set_pixel_replication(intel_sdvo, in intel_sdvo_pre_enable()
1525 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI); in intel_sdvo_pre_enable()
1528 !intel_sdvo_set_tv_format(intel_sdvo, conn_state)) in intel_sdvo_pre_enable()
1534 input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags; in intel_sdvo_pre_enable()
1535 if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd)) in intel_sdvo_pre_enable()
1538 SDVO_NAME(intel_sdvo)); in intel_sdvo_pre_enable()
1549 if (!intel_sdvo_set_clock_rate_mult(intel_sdvo, rate)) in intel_sdvo_pre_enable()
1560 sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_pre_enable()
1561 if (intel_sdvo->port == PORT_B) in intel_sdvo_pre_enable()
1586 intel_sdvo_write_sdvox(intel_sdvo, sdvox); in intel_sdvo_pre_enable()
1593 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_connector_get_hw_state() local
1596 intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); in intel_sdvo_connector_get_hw_state()
1623 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_get_hw_state() local
1627 intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); in intel_sdvo_get_hw_state()
1629 ret = intel_sdvo_port_enabled(dev_priv, intel_sdvo->sdvo_reg, pipe); in intel_sdvo_get_hw_state()
1639 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_get_config() local
1649 sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_get_config()
1651 ret = intel_sdvo_get_input_timing(intel_sdvo, &dtd); in intel_sdvo_get_config()
1694 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_CLOCK_RATE_MULT, in intel_sdvo_get_config()
1714 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_COLORIMETRY, in intel_sdvo_get_config()
1720 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_AUDIO_STAT, in intel_sdvo_get_config()
1728 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ENCODE, in intel_sdvo_get_config()
1734 intel_sdvo_get_avi_infoframe(intel_sdvo, pipe_config); in intel_sdvo_get_config()
1737 static void intel_sdvo_disable_audio(struct intel_sdvo *intel_sdvo) in intel_sdvo_disable_audio() argument
1739 intel_sdvo_set_audio_state(intel_sdvo, 0); in intel_sdvo_disable_audio()
1742 static void intel_sdvo_enable_audio(struct intel_sdvo *intel_sdvo, in intel_sdvo_enable_audio() argument
1753 intel_sdvo_set_audio_state(intel_sdvo, 0); in intel_sdvo_enable_audio()
1755 intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_ELD, in intel_sdvo_enable_audio()
1759 intel_sdvo_set_audio_state(intel_sdvo, SDVO_AUDIO_ELD_VALID | in intel_sdvo_enable_audio()
1769 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_disable_sdvo() local
1774 intel_sdvo_disable_audio(intel_sdvo); in intel_disable_sdvo()
1776 intel_sdvo_set_active_outputs(intel_sdvo, 0); in intel_disable_sdvo()
1778 intel_sdvo_set_encoder_power_state(intel_sdvo, in intel_disable_sdvo()
1781 temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_disable_sdvo()
1784 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_disable_sdvo()
1801 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_disable_sdvo()
1804 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_disable_sdvo()
1834 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_enable_sdvo() local
1841 temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_enable_sdvo()
1843 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_enable_sdvo()
1848 success = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2); in intel_enable_sdvo()
1858 "sync\n", SDVO_NAME(intel_sdvo)); in intel_enable_sdvo()
1862 intel_sdvo_set_encoder_power_state(intel_sdvo, in intel_enable_sdvo()
1864 intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output); in intel_enable_sdvo()
1867 intel_sdvo_enable_audio(intel_sdvo, pipe_config, conn_state); in intel_enable_sdvo()
1874 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_mode_valid() local
1878 bool has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo, connector->state); in intel_sdvo_mode_valid()
1893 if (intel_sdvo->pixel_clock_min > clock) in intel_sdvo_mode_valid()
1896 if (intel_sdvo->pixel_clock_max < clock) in intel_sdvo_mode_valid()
1910 static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps) in intel_sdvo_get_capabilities() argument
1913 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_capabilities()
1947 static u8 intel_sdvo_get_colorimetry_cap(struct intel_sdvo *intel_sdvo) in intel_sdvo_get_colorimetry_cap() argument
1951 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_COLORIMETRY_CAP, in intel_sdvo_get_colorimetry_cap()
1958 static u16 intel_sdvo_get_hotplug_support(struct intel_sdvo *intel_sdvo) in intel_sdvo_get_hotplug_support() argument
1960 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_get_hotplug_support()
1973 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, in intel_sdvo_get_hotplug_support()
1982 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_enable_hotplug() local
1984 intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, in intel_sdvo_enable_hotplug()
1985 &intel_sdvo->hotplug_active, 2); in intel_sdvo_enable_hotplug()
1998 intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo) in intel_sdvo_multifunc_encoder() argument
2001 return hweight16(intel_sdvo->caps.output_flags) > 1; in intel_sdvo_multifunc_encoder()
2007 struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_get_edid()
2025 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_tmds_sink_detect() local
2033 if (edid == NULL && intel_sdvo_multifunc_encoder(intel_sdvo)) { in intel_sdvo_tmds_sink_detect()
2034 u8 ddc, saved_ddc = intel_sdvo->ddc_bus; in intel_sdvo_tmds_sink_detect()
2040 for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in intel_sdvo_tmds_sink_detect()
2041 intel_sdvo->ddc_bus = ddc; in intel_sdvo_tmds_sink_detect()
2051 intel_sdvo->ddc_bus = saved_ddc; in intel_sdvo_tmds_sink_detect()
2067 intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid); in intel_sdvo_tmds_sink_detect()
2068 intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid); in intel_sdvo_tmds_sink_detect()
2094 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_detect() local
2105 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_detect()
2117 intel_sdvo->attached_output = response; in intel_sdvo_detect()
2119 intel_sdvo->has_hdmi_monitor = false; in intel_sdvo_detect()
2120 intel_sdvo->has_hdmi_audio = false; in intel_sdvo_detect()
2247 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_get_tv_modes() local
2265 if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output)) in intel_sdvo_get_tv_modes()
2269 if (!intel_sdvo_write_cmd(intel_sdvo, in intel_sdvo_get_tv_modes()
2273 if (!intel_sdvo_read_response(intel_sdvo, &reply, 3)) in intel_sdvo_get_tv_modes()
2293 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_get_lvds_modes() local
2301 num_modes += intel_ddc_get_modes(connector, &intel_sdvo->ddc); in intel_sdvo_get_lvds_modes()
2438 struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_connector_register()
2453 struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_connector_unregister()
2518 struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder)); in intel_sdvo_enc_destroy() local
2520 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_enc_destroy()
2529 intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo) in intel_sdvo_guess_ddc_bus()
2579 struct intel_sdvo *sdvo) in intel_sdvo_select_ddc_bus()
2596 struct intel_sdvo *sdvo) in intel_sdvo_select_i2c_bus()
2624 intel_sdvo_unselect_i2c_bus(struct intel_sdvo *sdvo) in intel_sdvo_unselect_i2c_bus()
2630 intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_is_hdmi_connector() argument
2632 return intel_sdvo_check_supp_encode(intel_sdvo); in intel_sdvo_is_hdmi_connector()
2637 struct intel_sdvo *sdvo) in intel_sdvo_get_slave_addr()
2676 struct intel_sdvo *encoder) in intel_sdvo_connector_init()
2703 intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo, in intel_sdvo_add_hdmi_properties() argument
2707 if (intel_sdvo->colorimetry_cap & SDVO_COLORIMETRY_RGB220) in intel_sdvo_add_hdmi_properties()
2736 intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_dvi_init() argument
2738 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_dvi_init()
2757 if (intel_sdvo_get_hotplug_support(intel_sdvo) & in intel_sdvo_dvi_init()
2759 intel_sdvo->hotplug_active |= intel_sdvo_connector->output_flag; in intel_sdvo_dvi_init()
2773 if (intel_sdvo_is_hdmi_connector(intel_sdvo, device)) { in intel_sdvo_dvi_init()
2778 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_dvi_init()
2784 intel_sdvo_add_hdmi_properties(intel_sdvo, intel_sdvo_connector); in intel_sdvo_dvi_init()
2790 intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type) in intel_sdvo_tv_init() argument
2792 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_tv_init()
2810 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_tv_init()
2815 if (!intel_sdvo_tv_create_property(intel_sdvo, intel_sdvo_connector, type)) in intel_sdvo_tv_init()
2818 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) in intel_sdvo_tv_init()
2829 intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_analog_init() argument
2831 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_analog_init()
2853 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_analog_init()
2862 intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) in intel_sdvo_lvds_init() argument
2864 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_lvds_init()
2886 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_lvds_init()
2891 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) in intel_sdvo_lvds_init()
2905 intel_ddc_get_modes(connector, &intel_sdvo->ddc); in intel_sdvo_lvds_init()
2941 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags) in intel_sdvo_output_setup() argument
2943 struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_output_setup()
2947 intel_sdvo->controlled_output = flags; in intel_sdvo_output_setup()
2949 intel_sdvo_select_ddc_bus(i915, intel_sdvo); in intel_sdvo_output_setup()
2952 if (!intel_sdvo_dvi_init(intel_sdvo, 0)) in intel_sdvo_output_setup()
2956 if (!intel_sdvo_dvi_init(intel_sdvo, 1)) in intel_sdvo_output_setup()
2961 if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_SVID0)) in intel_sdvo_output_setup()
2965 if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_CVBS0)) in intel_sdvo_output_setup()
2969 if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_YPRPB0)) in intel_sdvo_output_setup()
2973 if (!intel_sdvo_analog_init(intel_sdvo, 0)) in intel_sdvo_output_setup()
2977 if (!intel_sdvo_analog_init(intel_sdvo, 1)) in intel_sdvo_output_setup()
2981 if (!intel_sdvo_lvds_init(intel_sdvo, 0)) in intel_sdvo_output_setup()
2985 if (!intel_sdvo_lvds_init(intel_sdvo, 1)) in intel_sdvo_output_setup()
2991 memcpy(bytes, &intel_sdvo->caps.output_flags, 2); in intel_sdvo_output_setup()
2993 SDVO_NAME(intel_sdvo), in intel_sdvo_output_setup()
2997 intel_sdvo->base.pipe_mask = ~0; in intel_sdvo_output_setup()
3002 static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo) in intel_sdvo_output_cleanup() argument
3004 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_output_cleanup()
3009 if (intel_attached_encoder(to_intel_connector(connector)) == &intel_sdvo->base) { in intel_sdvo_output_cleanup()
3016 static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_tv_create_property() argument
3020 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_tv_create_property()
3024 if (!intel_sdvo_set_target_output(intel_sdvo, type)) in intel_sdvo_tv_create_property()
3028 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_tv_create_property()
3063 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_MAX_##NAME, &data_value, 4) || \
3064 !intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_##NAME, &response, 2)) \
3080 intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property_tv() argument
3084 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_tv()
3093 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3098 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3127 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3132 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3176 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_DOT_CRAWL, &response, 2)) in intel_sdvo_create_enhance_property_tv()
3194 intel_sdvo_create_enhance_property_lvds(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property_lvds() argument
3198 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_lvds()
3209 static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property() argument
3219 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property()
3228 …return intel_sdvo_create_enhance_property_tv(intel_sdvo, intel_sdvo_connector, enhancements.reply); in intel_sdvo_create_enhance_property()
3230 …return intel_sdvo_create_enhance_property_lvds(intel_sdvo, intel_sdvo_connector, enhancements.repl… in intel_sdvo_create_enhance_property()
3239 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_xfer()
3249 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_func()
3261 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_lock_bus()
3268 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_trylock_bus()
3275 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_unlock_bus()
3286 intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo, in intel_sdvo_init_ddc_proxy()
3315 struct intel_sdvo *intel_sdvo; in intel_sdvo_init() local
3320 intel_sdvo = kzalloc(sizeof(*intel_sdvo), GFP_KERNEL); in intel_sdvo_init()
3321 if (!intel_sdvo) in intel_sdvo_init()
3324 intel_sdvo->sdvo_reg = sdvo_reg; in intel_sdvo_init()
3325 intel_sdvo->port = port; in intel_sdvo_init()
3326 intel_sdvo->slave_addr = in intel_sdvo_init()
3327 intel_sdvo_get_slave_addr(dev_priv, intel_sdvo) >> 1; in intel_sdvo_init()
3328 intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo); in intel_sdvo_init()
3329 if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev_priv)) in intel_sdvo_init()
3333 intel_encoder = &intel_sdvo->base; in intel_sdvo_init()
3345 if (!intel_sdvo_read_byte(intel_sdvo, i, &byte)) { in intel_sdvo_init()
3348 SDVO_NAME(intel_sdvo)); in intel_sdvo_init()
3366 if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps)) in intel_sdvo_init()
3369 intel_sdvo->colorimetry_cap = in intel_sdvo_init()
3370 intel_sdvo_get_colorimetry_cap(intel_sdvo); in intel_sdvo_init()
3372 if (intel_sdvo_output_setup(intel_sdvo, in intel_sdvo_init()
3373 intel_sdvo->caps.output_flags) != true) { in intel_sdvo_init()
3376 SDVO_NAME(intel_sdvo)); in intel_sdvo_init()
3385 if (intel_sdvo->hotplug_active) { in intel_sdvo_init()
3386 if (intel_sdvo->port == PORT_B) in intel_sdvo_init()
3400 intel_sdvo->base.cloneable = 0; in intel_sdvo_init()
3403 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_init()
3406 if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo, in intel_sdvo_init()
3407 &intel_sdvo->pixel_clock_min, in intel_sdvo_init()
3408 &intel_sdvo->pixel_clock_max)) in intel_sdvo_init()
3415 SDVO_NAME(intel_sdvo), in intel_sdvo_init()
3416 intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id, in intel_sdvo_init()
3417 intel_sdvo->caps.device_rev_id, in intel_sdvo_init()
3418 intel_sdvo->pixel_clock_min / 1000, in intel_sdvo_init()
3419 intel_sdvo->pixel_clock_max / 1000, in intel_sdvo_init()
3420 (intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in intel_sdvo_init()
3421 (intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in intel_sdvo_init()
3423 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3425 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3430 intel_sdvo_output_cleanup(intel_sdvo); in intel_sdvo_init()
3434 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_init()
3436 intel_sdvo_unselect_i2c_bus(intel_sdvo); in intel_sdvo_init()
3437 kfree(intel_sdvo); in intel_sdvo_init()