Lines Matching refs:intel_sdvo

82 struct intel_sdvo {  struct
181 static struct intel_sdvo *to_sdvo(struct intel_encoder *encoder) in to_sdvo()
183 return container_of(encoder, struct intel_sdvo, base); in to_sdvo()
186 static struct intel_sdvo *intel_attached_sdvo(struct intel_connector *connector) in intel_attached_sdvo()
201 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo);
203 intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
207 intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
215 static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val) in intel_sdvo_write_sdvox() argument
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() argument
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()
415 static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd, in intel_sdvo_debug_write() argument
418 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_debug_write()
442 DRM_DEBUG_KMS("%s: W: %02X %s\n", SDVO_NAME(intel_sdvo), cmd, buffer); in intel_sdvo_debug_write()
463 static bool __intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, in __intel_sdvo_write_cmd() argument
482 intel_sdvo_debug_write(intel_sdvo, cmd, args, args_len); in __intel_sdvo_write_cmd()
485 msgs[i].addr = intel_sdvo->slave_addr; 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() argument
535 return __intel_sdvo_write_cmd(intel_sdvo, cmd, args, args_len, true); in intel_sdvo_write_cmd()
538 static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, in intel_sdvo_read_response() argument
541 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_read_response()
567 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
579 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
599 if (!intel_sdvo_read_byte(intel_sdvo, in intel_sdvo_read_response()
609 DRM_DEBUG_KMS("%s: R: %s\n", SDVO_NAME(intel_sdvo), buffer); in intel_sdvo_read_response()
614 SDVO_NAME(intel_sdvo), buffer); in intel_sdvo_read_response()
628 static bool __intel_sdvo_set_control_bus_switch(struct intel_sdvo *intel_sdvo, in __intel_sdvo_set_control_bus_switch() argument
632 return __intel_sdvo_write_cmd(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() argument
639 if (!intel_sdvo_write_cmd(intel_sdvo, cmd, data, len)) in intel_sdvo_set_value()
642 return intel_sdvo_read_response(intel_sdvo, NULL, 0); in intel_sdvo_set_value()
646 intel_sdvo_get_value(struct intel_sdvo *intel_sdvo, u8 cmd, void *value, int len) in intel_sdvo_get_value() argument
648 if (!intel_sdvo_write_cmd(intel_sdvo, cmd, NULL, 0)) in intel_sdvo_get_value()
651 return intel_sdvo_read_response(intel_sdvo, value, len); in intel_sdvo_get_value()
654 static bool intel_sdvo_set_target_input(struct intel_sdvo *intel_sdvo) in intel_sdvo_set_target_input() argument
657 return intel_sdvo_set_value(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() argument
673 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_TRAINED_INPUTS, 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() argument
685 return intel_sdvo_set_value(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() argument
693 return intel_sdvo_get_value(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() argument
718 return intel_sdvo_set_value(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() argument
729 if (!intel_sdvo_get_value(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() argument
743 return intel_sdvo_set_value(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() argument
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() argument
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() argument
765 return intel_sdvo_set_timing(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() argument
772 return intel_sdvo_set_timing(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() argument
779 return intel_sdvo_get_timing(intel_sdvo, in intel_sdvo_get_input_timing()
784 intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_preferred_input_timing() argument
805 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_create_preferred_input_timing()
810 static bool intel_sdvo_get_preferred_input_timing(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_timing() argument
815 return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1, in intel_sdvo_get_preferred_input_timing()
817 intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2, in intel_sdvo_get_preferred_input_timing()
821 static bool intel_sdvo_set_clock_rate_mult(struct intel_sdvo *intel_sdvo, u8 val) in intel_sdvo_set_clock_rate_mult() argument
823 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1); in intel_sdvo_set_clock_rate_mult()
925 static bool intel_sdvo_check_supp_encode(struct intel_sdvo *intel_sdvo) in intel_sdvo_check_supp_encode() argument
930 return intel_sdvo_get_value(intel_sdvo, in intel_sdvo_check_supp_encode()
935 static bool intel_sdvo_set_encode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_encode() argument
938 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_ENCODE, &mode, 1); in intel_sdvo_set_encode()
941 static bool intel_sdvo_set_colorimetry(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_colorimetry() argument
944 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_COLORIMETRY, &mode, 1); in intel_sdvo_set_colorimetry()
947 static bool intel_sdvo_set_pixel_replication(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_pixel_replication() argument
950 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_PIXEL_REPLI, in intel_sdvo_set_pixel_replication()
954 static bool intel_sdvo_set_audio_state(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_audio_state() argument
957 return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_AUDIO_STAT, in intel_sdvo_set_audio_state()
961 static bool intel_sdvo_get_hbuf_size(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_hbuf_size() argument
964 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HBUF_INFO, in intel_sdvo_get_hbuf_size()
976 static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
1005 static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_write_infoframe() argument
1013 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
1018 if (!intel_sdvo_get_hbuf_size(intel_sdvo, &hbuf_size)) in intel_sdvo_write_infoframe()
1032 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
1038 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_write_infoframe()
1043 static ssize_t intel_sdvo_read_infoframe(struct intel_sdvo *intel_sdvo, in intel_sdvo_read_infoframe() argument
1051 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_read_infoframe()
1059 if (!intel_sdvo_set_value(intel_sdvo, in intel_sdvo_read_infoframe()
1064 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 void intel_sdvo_get_eld(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_eld() argument
1190 struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_get_eld()
1197 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_AUDIO_STAT, &val, 1)) in intel_sdvo_get_eld()
1203 len = intel_sdvo_read_infoframe(intel_sdvo, SDVO_HBUF_INDEX_ELD, in intel_sdvo_get_eld()
1209 static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_tv_format() argument
1220 return intel_sdvo_set_value(intel_sdvo, in intel_sdvo_set_tv_format()
1226 intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo, in intel_sdvo_set_output_timings_from_mode() argument
1231 if (!intel_sdvo_set_target_output(intel_sdvo, in intel_sdvo_set_output_timings_from_mode()
1232 intel_sdvo->attached_output)) in intel_sdvo_set_output_timings_from_mode()
1236 if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) in intel_sdvo_set_output_timings_from_mode()
1247 intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo, in intel_sdvo_get_preferred_input_mode() argument
1255 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_get_preferred_input_mode()
1258 if (!intel_sdvo_create_preferred_input_timing(intel_sdvo, in intel_sdvo_get_preferred_input_mode()
1263 if (!intel_sdvo_get_preferred_input_timing(intel_sdvo, in intel_sdvo_get_preferred_input_mode()
1268 intel_sdvo->dtd_sdvo_flags = input_dtd.part2.sdvo_flags; in intel_sdvo_get_preferred_input_mode()
1317 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_limited_color_range() local
1319 if ((intel_sdvo->colorimetry_cap & SDVO_COLORIMETRY_RGB220) == 0) in intel_sdvo_limited_color_range()
1349 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_compute_config() local
1370 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode)) in intel_sdvo_compute_config()
1373 (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, in intel_sdvo_compute_config()
1388 if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, fixed_mode)) in intel_sdvo_compute_config()
1391 (void) intel_sdvo_get_preferred_input_mode(intel_sdvo, in intel_sdvo_compute_config()
1425 if (!intel_sdvo_compute_avi_infoframe(intel_sdvo, in intel_sdvo_compute_config()
1437 intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_##NAME, &val, sizeof(val)); \
1440 static void intel_sdvo_update_props(struct intel_sdvo *intel_sdvo, in intel_sdvo_update_props() argument
1509 struct intel_sdvo *intel_sdvo = to_sdvo(intel_encoder); in intel_sdvo_pre_enable() local
1515 intel_sdvo_update_props(intel_sdvo, sdvo_state); in intel_sdvo_pre_enable()
1524 in_out.in0 = intel_sdvo->attached_output; in intel_sdvo_pre_enable()
1527 intel_sdvo_set_value(intel_sdvo, in intel_sdvo_pre_enable()
1532 if (!intel_sdvo_set_target_output(intel_sdvo, in intel_sdvo_pre_enable()
1533 intel_sdvo->attached_output)) in intel_sdvo_pre_enable()
1545 if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd)) in intel_sdvo_pre_enable()
1548 SDVO_NAME(intel_sdvo)); in intel_sdvo_pre_enable()
1551 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_pre_enable()
1555 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI); in intel_sdvo_pre_enable()
1556 intel_sdvo_set_colorimetry(intel_sdvo, in intel_sdvo_pre_enable()
1560 intel_sdvo_set_avi_infoframe(intel_sdvo, crtc_state); in intel_sdvo_pre_enable()
1561 intel_sdvo_set_pixel_replication(intel_sdvo, in intel_sdvo_pre_enable()
1565 intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI); in intel_sdvo_pre_enable()
1568 !intel_sdvo_set_tv_format(intel_sdvo, conn_state)) in intel_sdvo_pre_enable()
1574 input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags; in intel_sdvo_pre_enable()
1575 if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd)) in intel_sdvo_pre_enable()
1578 SDVO_NAME(intel_sdvo)); in intel_sdvo_pre_enable()
1589 if (!intel_sdvo_set_clock_rate_mult(intel_sdvo, rate)) in intel_sdvo_pre_enable()
1600 sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_pre_enable()
1601 if (intel_sdvo->port == PORT_B) in intel_sdvo_pre_enable()
1626 intel_sdvo_write_sdvox(intel_sdvo, sdvox); in intel_sdvo_pre_enable()
1633 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); in intel_sdvo_connector_get_hw_state() local
1636 intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); in intel_sdvo_connector_get_hw_state()
1663 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_get_hw_state() local
1667 intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); in intel_sdvo_get_hw_state()
1669 ret = intel_sdvo_port_enabled(dev_priv, intel_sdvo->sdvo_reg, pipe); in intel_sdvo_get_hw_state()
1679 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_get_config() local
1689 sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_sdvo_get_config()
1691 ret = intel_sdvo_get_input_timing(intel_sdvo, &dtd); in intel_sdvo_get_config()
1734 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_CLOCK_RATE_MULT, in intel_sdvo_get_config()
1754 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_COLORIMETRY, in intel_sdvo_get_config()
1760 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_AUDIO_STAT, in intel_sdvo_get_config()
1766 if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ENCODE, in intel_sdvo_get_config()
1772 intel_sdvo_get_avi_infoframe(intel_sdvo, pipe_config); in intel_sdvo_get_config()
1774 intel_sdvo_get_eld(intel_sdvo, pipe_config); in intel_sdvo_get_config()
1777 static void intel_sdvo_disable_audio(struct intel_sdvo *intel_sdvo) in intel_sdvo_disable_audio() argument
1779 intel_sdvo_set_audio_state(intel_sdvo, 0); in intel_sdvo_disable_audio()
1782 static void intel_sdvo_enable_audio(struct intel_sdvo *intel_sdvo, in intel_sdvo_enable_audio() argument
1788 intel_sdvo_set_audio_state(intel_sdvo, 0); in intel_sdvo_enable_audio()
1790 intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_ELD, in intel_sdvo_enable_audio()
1794 intel_sdvo_set_audio_state(intel_sdvo, SDVO_AUDIO_ELD_VALID | in intel_sdvo_enable_audio()
1804 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_disable_sdvo() local
1809 intel_sdvo_disable_audio(intel_sdvo); in intel_disable_sdvo()
1811 intel_sdvo_set_active_outputs(intel_sdvo, 0); in intel_disable_sdvo()
1813 intel_sdvo_set_encoder_power_state(intel_sdvo, in intel_disable_sdvo()
1816 temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_disable_sdvo()
1819 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_disable_sdvo()
1836 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_disable_sdvo()
1839 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_disable_sdvo()
1869 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_enable_sdvo() local
1876 temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg); in intel_enable_sdvo()
1878 intel_sdvo_write_sdvox(intel_sdvo, temp); in intel_enable_sdvo()
1883 success = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2); in intel_enable_sdvo()
1893 "sync\n", SDVO_NAME(intel_sdvo)); in intel_enable_sdvo()
1897 intel_sdvo_set_encoder_power_state(intel_sdvo, in intel_enable_sdvo()
1899 intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output); in intel_enable_sdvo()
1902 intel_sdvo_enable_audio(intel_sdvo, pipe_config, conn_state); in intel_enable_sdvo()
1910 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_mode_valid() local
1934 if (intel_sdvo->pixel_clock_min > clock) in intel_sdvo_mode_valid()
1937 if (intel_sdvo->pixel_clock_max < clock) in intel_sdvo_mode_valid()
1951 static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps) in intel_sdvo_get_capabilities() argument
1954 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_get_capabilities()
1988 static u8 intel_sdvo_get_colorimetry_cap(struct intel_sdvo *intel_sdvo) in intel_sdvo_get_colorimetry_cap() argument
1992 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_COLORIMETRY_CAP, in intel_sdvo_get_colorimetry_cap()
1999 static u16 intel_sdvo_get_hotplug_support(struct intel_sdvo *intel_sdvo) in intel_sdvo_get_hotplug_support() argument
2001 struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_get_hotplug_support()
2014 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, in intel_sdvo_get_hotplug_support()
2023 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); in intel_sdvo_enable_hotplug() local
2025 intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, in intel_sdvo_enable_hotplug()
2026 &intel_sdvo->hotplug_active, 2); in intel_sdvo_enable_hotplug()
2039 intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo) in intel_sdvo_multifunc_encoder() argument
2042 return hweight16(intel_sdvo->caps.output_flags) > 1; in intel_sdvo_multifunc_encoder()
2048 struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_get_edid()
2067 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_tmds_sink_detect() local
2073 if (!drm_edid && intel_sdvo_multifunc_encoder(intel_sdvo)) { in intel_sdvo_tmds_sink_detect()
2074 u8 ddc, saved_ddc = intel_sdvo->ddc_bus; in intel_sdvo_tmds_sink_detect()
2080 for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in intel_sdvo_tmds_sink_detect()
2081 intel_sdvo->ddc_bus = ddc; in intel_sdvo_tmds_sink_detect()
2091 intel_sdvo->ddc_bus = saved_ddc; in intel_sdvo_tmds_sink_detect()
2133 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_detect() local
2144 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_detect()
2156 intel_sdvo->attached_output = response; in intel_sdvo_detect()
2284 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_get_tv_modes() local
2302 if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output)) in intel_sdvo_get_tv_modes()
2306 if (!intel_sdvo_write_cmd(intel_sdvo, in intel_sdvo_get_tv_modes()
2310 if (!intel_sdvo_read_response(intel_sdvo, &reply, 3)) in intel_sdvo_get_tv_modes()
2470 struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_connector_register()
2485 struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); in intel_sdvo_connector_unregister()
2550 struct intel_sdvo *intel_sdvo = to_sdvo(to_intel_encoder(encoder)); in intel_sdvo_enc_destroy() local
2552 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_enc_destroy()
2561 intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo) in intel_sdvo_guess_ddc_bus()
2611 struct intel_sdvo *sdvo) in intel_sdvo_select_ddc_bus()
2628 struct intel_sdvo *sdvo) in intel_sdvo_select_i2c_bus()
2656 intel_sdvo_unselect_i2c_bus(struct intel_sdvo *sdvo) in intel_sdvo_unselect_i2c_bus()
2662 intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo) in intel_sdvo_is_hdmi_connector() argument
2664 return intel_sdvo_check_supp_encode(intel_sdvo); in intel_sdvo_is_hdmi_connector()
2669 struct intel_sdvo *sdvo) in intel_sdvo_get_slave_addr()
2708 struct intel_sdvo *encoder) in intel_sdvo_connector_init()
2734 intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo, in intel_sdvo_add_hdmi_properties() argument
2738 if (intel_sdvo->colorimetry_cap & SDVO_COLORIMETRY_RGB220) in intel_sdvo_add_hdmi_properties()
2767 intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, u16 type) in intel_sdvo_dvi_init() argument
2769 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_dvi_init()
2785 if (intel_sdvo_get_hotplug_support(intel_sdvo) & in intel_sdvo_dvi_init()
2787 intel_sdvo->hotplug_active |= intel_sdvo_connector->output_flag; in intel_sdvo_dvi_init()
2801 if (intel_sdvo_is_hdmi_connector(intel_sdvo)) { in intel_sdvo_dvi_init()
2806 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_dvi_init()
2812 intel_sdvo_add_hdmi_properties(intel_sdvo, intel_sdvo_connector); in intel_sdvo_dvi_init()
2818 intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, u16 type) in intel_sdvo_tv_init() argument
2820 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_tv_init()
2838 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_tv_init()
2843 if (!intel_sdvo_tv_create_property(intel_sdvo, intel_sdvo_connector, type)) in intel_sdvo_tv_init()
2846 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) in intel_sdvo_tv_init()
2857 intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, u16 type) in intel_sdvo_analog_init() argument
2859 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_analog_init()
2878 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_analog_init()
2887 intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type) in intel_sdvo_lvds_init() argument
2889 struct drm_encoder *encoder = &intel_sdvo->base.base; in intel_sdvo_lvds_init()
2908 if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { in intel_sdvo_lvds_init()
2913 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) in intel_sdvo_lvds_init()
2927 intel_ddc_get_modes(connector, &intel_sdvo->ddc); in intel_sdvo_lvds_init()
2962 static bool intel_sdvo_output_init(struct intel_sdvo *sdvo, u16 type) in intel_sdvo_output_init()
2977 intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo) in intel_sdvo_output_setup() argument
2991 struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev); in intel_sdvo_output_setup()
2995 flags = intel_sdvo_filter_output_flags(intel_sdvo->caps.output_flags); in intel_sdvo_output_setup()
2999 SDVO_NAME(intel_sdvo), intel_sdvo->caps.output_flags); in intel_sdvo_output_setup()
3003 intel_sdvo->controlled_output = flags; in intel_sdvo_output_setup()
3005 intel_sdvo_select_ddc_bus(i915, intel_sdvo); in intel_sdvo_output_setup()
3013 if (!intel_sdvo_output_init(intel_sdvo, type)) in intel_sdvo_output_setup()
3017 intel_sdvo->base.pipe_mask = ~0; in intel_sdvo_output_setup()
3022 static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo) in intel_sdvo_output_cleanup() argument
3024 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_output_cleanup()
3029 if (intel_attached_encoder(to_intel_connector(connector)) == &intel_sdvo->base) { in intel_sdvo_output_cleanup()
3036 static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_tv_create_property() argument
3040 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_tv_create_property()
3044 if (!intel_sdvo_set_target_output(intel_sdvo, type)) in intel_sdvo_tv_create_property()
3048 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_tv_create_property()
3083 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_MAX_##NAME, &data_value, 4) || \
3084 !intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_##NAME, &response, 2)) \
3100 intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property_tv() argument
3104 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_tv()
3113 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3118 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3147 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3152 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property_tv()
3196 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_DOT_CRAWL, &response, 2)) in intel_sdvo_create_enhance_property_tv()
3214 intel_sdvo_create_enhance_property_lvds(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property_lvds() argument
3218 struct drm_device *dev = intel_sdvo->base.base.dev; in intel_sdvo_create_enhance_property_lvds()
3229 static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo, in intel_sdvo_create_enhance_property() argument
3239 if (!intel_sdvo_get_value(intel_sdvo, in intel_sdvo_create_enhance_property()
3248 …return intel_sdvo_create_enhance_property_tv(intel_sdvo, intel_sdvo_connector, enhancements.reply); in intel_sdvo_create_enhance_property()
3250 …return intel_sdvo_create_enhance_property_lvds(intel_sdvo, intel_sdvo_connector, enhancements.repl… in intel_sdvo_create_enhance_property()
3259 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_xfer()
3269 struct intel_sdvo *sdvo = adapter->algo_data; in intel_sdvo_ddc_proxy_func()
3281 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_lock_bus()
3288 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_trylock_bus()
3295 struct intel_sdvo *sdvo = adapter->algo_data; in proxy_unlock_bus()
3306 intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo, in intel_sdvo_init_ddc_proxy()
3341 struct intel_sdvo *intel_sdvo; in intel_sdvo_init() local
3350 intel_sdvo = kzalloc(sizeof(*intel_sdvo), GFP_KERNEL); in intel_sdvo_init()
3351 if (!intel_sdvo) in intel_sdvo_init()
3354 intel_sdvo->sdvo_reg = sdvo_reg; in intel_sdvo_init()
3355 intel_sdvo->port = port; in intel_sdvo_init()
3356 intel_sdvo->slave_addr = in intel_sdvo_init()
3357 intel_sdvo_get_slave_addr(dev_priv, intel_sdvo) >> 1; in intel_sdvo_init()
3358 intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo); in intel_sdvo_init()
3359 if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev_priv)) in intel_sdvo_init()
3363 intel_encoder = &intel_sdvo->base; in intel_sdvo_init()
3375 if (!intel_sdvo_read_byte(intel_sdvo, i, &byte)) { in intel_sdvo_init()
3378 SDVO_NAME(intel_sdvo)); in intel_sdvo_init()
3396 if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps)) in intel_sdvo_init()
3399 intel_sdvo->colorimetry_cap = in intel_sdvo_init()
3400 intel_sdvo_get_colorimetry_cap(intel_sdvo); in intel_sdvo_init()
3402 if (!intel_sdvo_output_setup(intel_sdvo)) { in intel_sdvo_init()
3405 SDVO_NAME(intel_sdvo)); in intel_sdvo_init()
3414 if (intel_sdvo->hotplug_active) { in intel_sdvo_init()
3415 if (intel_sdvo->port == PORT_B) in intel_sdvo_init()
3429 intel_sdvo->base.cloneable = 0; in intel_sdvo_init()
3432 if (!intel_sdvo_set_target_input(intel_sdvo)) in intel_sdvo_init()
3435 if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo, in intel_sdvo_init()
3436 &intel_sdvo->pixel_clock_min, in intel_sdvo_init()
3437 &intel_sdvo->pixel_clock_max)) in intel_sdvo_init()
3444 SDVO_NAME(intel_sdvo), in intel_sdvo_init()
3445 intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id, in intel_sdvo_init()
3446 intel_sdvo->caps.device_rev_id, in intel_sdvo_init()
3447 intel_sdvo->pixel_clock_min / 1000, in intel_sdvo_init()
3448 intel_sdvo->pixel_clock_max / 1000, in intel_sdvo_init()
3449 (intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in intel_sdvo_init()
3450 (intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in intel_sdvo_init()
3452 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3456 intel_sdvo->caps.output_flags & in intel_sdvo_init()
3462 intel_sdvo_output_cleanup(intel_sdvo); in intel_sdvo_init()
3466 i2c_del_adapter(&intel_sdvo->ddc); in intel_sdvo_init()
3468 intel_sdvo_unselect_i2c_bus(intel_sdvo); in intel_sdvo_init()
3469 kfree(intel_sdvo); in intel_sdvo_init()