• Home
  • Raw
  • Download

Lines Matching refs:psb_intel_sdvo

67 struct psb_intel_sdvo {  struct
196 static struct psb_intel_sdvo *to_psb_intel_sdvo(struct drm_encoder *encoder) in to_psb_intel_sdvo()
198 return container_of(encoder, struct psb_intel_sdvo, base.base); in to_psb_intel_sdvo()
201 static struct psb_intel_sdvo *intel_attached_sdvo(struct drm_connector *connector) in intel_attached_sdvo()
204 struct psb_intel_sdvo, base); in intel_attached_sdvo()
213 psb_intel_sdvo_output_setup(struct psb_intel_sdvo *psb_intel_sdvo, uint16_t flags);
215 psb_intel_sdvo_tv_create_property(struct psb_intel_sdvo *psb_intel_sdvo,
219 psb_intel_sdvo_create_enhance_property(struct psb_intel_sdvo *psb_intel_sdvo,
227 static void psb_intel_sdvo_write_sdvox(struct psb_intel_sdvo *psb_intel_sdvo, u32 val) in psb_intel_sdvo_write_sdvox() argument
229 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_write_sdvox()
235 if (psb_intel_sdvo->sdvo_reg == SDVOB) in psb_intel_sdvo_write_sdvox()
254 static bool psb_intel_sdvo_read_byte(struct psb_intel_sdvo *psb_intel_sdvo, u8 addr, u8 *ch) in psb_intel_sdvo_read_byte() argument
258 .addr = psb_intel_sdvo->slave_addr, in psb_intel_sdvo_read_byte()
264 .addr = psb_intel_sdvo->slave_addr, in psb_intel_sdvo_read_byte()
272 if ((ret = i2c_transfer(psb_intel_sdvo->i2c, msgs, 2)) == 2) in psb_intel_sdvo_read_byte()
401 static void psb_intel_sdvo_debug_write(struct psb_intel_sdvo *psb_intel_sdvo, u8 cmd, in psb_intel_sdvo_debug_write() argument
407 SDVO_NAME(psb_intel_sdvo), cmd); in psb_intel_sdvo_debug_write()
435 static bool psb_intel_sdvo_write_cmd(struct psb_intel_sdvo *psb_intel_sdvo, u8 cmd, in psb_intel_sdvo_write_cmd() argument
447 psb_intel_sdvo_debug_write(psb_intel_sdvo, cmd, args, args_len); in psb_intel_sdvo_write_cmd()
450 msgs[i].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
457 msgs[i].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
466 msgs[i+1].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
471 msgs[i+2].addr = psb_intel_sdvo->slave_addr; in psb_intel_sdvo_write_cmd()
476 ret = i2c_transfer(psb_intel_sdvo->i2c, msgs, i+3); in psb_intel_sdvo_write_cmd()
490 static bool psb_intel_sdvo_read_response(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_read_response() argument
497 DRM_DEBUG_KMS("%s: R: ", SDVO_NAME(psb_intel_sdvo)); in psb_intel_sdvo_read_response()
507 if (!psb_intel_sdvo_read_byte(psb_intel_sdvo, in psb_intel_sdvo_read_response()
515 if (!psb_intel_sdvo_read_byte(psb_intel_sdvo, in psb_intel_sdvo_read_response()
531 if (!psb_intel_sdvo_read_byte(psb_intel_sdvo, in psb_intel_sdvo_read_response()
555 static bool psb_intel_sdvo_set_control_bus_switch(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_control_bus_switch() argument
559 return psb_intel_sdvo_write_cmd(psb_intel_sdvo, in psb_intel_sdvo_set_control_bus_switch()
564 static bool psb_intel_sdvo_set_value(struct psb_intel_sdvo *psb_intel_sdvo, u8 cmd, const void *dat… in psb_intel_sdvo_set_value() argument
566 if (!psb_intel_sdvo_write_cmd(psb_intel_sdvo, cmd, data, len)) in psb_intel_sdvo_set_value()
569 return psb_intel_sdvo_read_response(psb_intel_sdvo, NULL, 0); in psb_intel_sdvo_set_value()
573 psb_intel_sdvo_get_value(struct psb_intel_sdvo *psb_intel_sdvo, u8 cmd, void *value, int len) in psb_intel_sdvo_get_value() argument
575 if (!psb_intel_sdvo_write_cmd(psb_intel_sdvo, cmd, NULL, 0)) in psb_intel_sdvo_get_value()
578 return psb_intel_sdvo_read_response(psb_intel_sdvo, value, len); in psb_intel_sdvo_get_value()
581 static bool psb_intel_sdvo_set_target_input(struct psb_intel_sdvo *psb_intel_sdvo) in psb_intel_sdvo_set_target_input() argument
584 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_target_input()
595 static bool psb_intel_sdvo_get_trained_inputs(struct psb_intel_sdvo *psb_intel_sdvo, bool *input_1,… in psb_intel_sdvo_get_trained_inputs() argument
600 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_TRAINED_INPUTS, in psb_intel_sdvo_get_trained_inputs()
609 static bool psb_intel_sdvo_set_active_outputs(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_active_outputs() argument
612 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_active_outputs()
617 static bool psb_intel_sdvo_set_encoder_power_state(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_encoder_power_state() argument
637 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_encoder_power_state()
641 static bool psb_intel_sdvo_get_input_pixel_clock_range(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_get_input_pixel_clock_range() argument
648 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_get_input_pixel_clock_range()
659 static bool psb_intel_sdvo_set_target_output(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_target_output() argument
662 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_target_output()
667 static bool psb_intel_sdvo_set_timing(struct psb_intel_sdvo *psb_intel_sdvo, u8 cmd, in psb_intel_sdvo_set_timing() argument
670 return psb_intel_sdvo_set_value(psb_intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) && in psb_intel_sdvo_set_timing()
671 psb_intel_sdvo_set_value(psb_intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2)); in psb_intel_sdvo_set_timing()
674 static bool psb_intel_sdvo_set_input_timing(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_input_timing() argument
677 return psb_intel_sdvo_set_timing(psb_intel_sdvo, in psb_intel_sdvo_set_input_timing()
681 static bool psb_intel_sdvo_set_output_timing(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_output_timing() argument
684 return psb_intel_sdvo_set_timing(psb_intel_sdvo, in psb_intel_sdvo_set_output_timing()
689 psb_intel_sdvo_create_preferred_input_timing(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_create_preferred_input_timing() argument
702 if (psb_intel_sdvo->is_lvds && in psb_intel_sdvo_create_preferred_input_timing()
703 (psb_intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width || in psb_intel_sdvo_create_preferred_input_timing()
704 psb_intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height)) in psb_intel_sdvo_create_preferred_input_timing()
707 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_create_preferred_input_timing()
712 static bool psb_intel_sdvo_get_preferred_input_timing(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_get_preferred_input_timing() argument
717 return psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1, in psb_intel_sdvo_get_preferred_input_timing()
719 psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2, in psb_intel_sdvo_get_preferred_input_timing()
723 static bool psb_intel_sdvo_set_clock_rate_mult(struct psb_intel_sdvo *psb_intel_sdvo, u8 val) in psb_intel_sdvo_set_clock_rate_mult() argument
725 return psb_intel_sdvo_set_value(psb_intel_sdvo, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1); in psb_intel_sdvo_set_clock_rate_mult()
810 static bool psb_intel_sdvo_check_supp_encode(struct psb_intel_sdvo *psb_intel_sdvo) in psb_intel_sdvo_check_supp_encode() argument
815 return psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_check_supp_encode()
820 static bool psb_intel_sdvo_set_encode(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_encode() argument
823 return psb_intel_sdvo_set_value(psb_intel_sdvo, SDVO_CMD_SET_ENCODE, &mode, 1); in psb_intel_sdvo_set_encode()
826 static bool psb_intel_sdvo_set_colorimetry(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_colorimetry() argument
829 return psb_intel_sdvo_set_value(psb_intel_sdvo, SDVO_CMD_SET_COLORIMETRY, &mode, 1); in psb_intel_sdvo_set_colorimetry()
833 static void psb_intel_sdvo_dump_hdmi_buf(struct psb_intel_sdvo *psb_intel_sdvo)
862 static bool psb_intel_sdvo_set_avi_infoframe(struct psb_intel_sdvo *psb_intel_sdvo) in psb_intel_sdvo_set_avi_infoframe() argument
880 if (!psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_avi_infoframe()
886 if (!psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_avi_infoframe()
893 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_avi_infoframe()
899 static bool psb_intel_sdvo_set_tv_format(struct psb_intel_sdvo *psb_intel_sdvo) in psb_intel_sdvo_set_tv_format() argument
904 format_map = 1 << psb_intel_sdvo->tv_format_index; in psb_intel_sdvo_set_tv_format()
909 return psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_set_tv_format()
915 psb_intel_sdvo_set_output_timings_from_mode(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_output_timings_from_mode() argument
920 if (!psb_intel_sdvo_set_target_output(psb_intel_sdvo, in psb_intel_sdvo_set_output_timings_from_mode()
921 psb_intel_sdvo->attached_output)) in psb_intel_sdvo_set_output_timings_from_mode()
925 if (!psb_intel_sdvo_set_output_timing(psb_intel_sdvo, &output_dtd)) in psb_intel_sdvo_set_output_timings_from_mode()
932 psb_intel_sdvo_set_input_timings_for_mode(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_set_input_timings_for_mode() argument
937 if (!psb_intel_sdvo_set_target_input(psb_intel_sdvo)) in psb_intel_sdvo_set_input_timings_for_mode()
940 if (!psb_intel_sdvo_create_preferred_input_timing(psb_intel_sdvo, in psb_intel_sdvo_set_input_timings_for_mode()
946 if (!psb_intel_sdvo_get_preferred_input_timing(psb_intel_sdvo, in psb_intel_sdvo_set_input_timings_for_mode()
947 &psb_intel_sdvo->input_dtd)) in psb_intel_sdvo_set_input_timings_for_mode()
950 psb_intel_sdvo_get_mode_from_dtd(adjusted_mode, &psb_intel_sdvo->input_dtd); in psb_intel_sdvo_set_input_timings_for_mode()
960 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder); in psb_intel_sdvo_mode_fixup() local
968 if (psb_intel_sdvo->is_tv) { in psb_intel_sdvo_mode_fixup()
969 if (!psb_intel_sdvo_set_output_timings_from_mode(psb_intel_sdvo, mode)) in psb_intel_sdvo_mode_fixup()
972 (void) psb_intel_sdvo_set_input_timings_for_mode(psb_intel_sdvo, in psb_intel_sdvo_mode_fixup()
975 } else if (psb_intel_sdvo->is_lvds) { in psb_intel_sdvo_mode_fixup()
976 if (!psb_intel_sdvo_set_output_timings_from_mode(psb_intel_sdvo, in psb_intel_sdvo_mode_fixup()
977 psb_intel_sdvo->sdvo_lvds_fixed_mode)) in psb_intel_sdvo_mode_fixup()
980 (void) psb_intel_sdvo_set_input_timings_for_mode(psb_intel_sdvo, in psb_intel_sdvo_mode_fixup()
1001 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder); in psb_intel_sdvo_mode_set() local
1018 in_out.in0 = psb_intel_sdvo->attached_output; in psb_intel_sdvo_mode_set()
1021 psb_intel_sdvo_set_value(psb_intel_sdvo, in psb_intel_sdvo_mode_set()
1026 if (!psb_intel_sdvo_set_target_output(psb_intel_sdvo, in psb_intel_sdvo_mode_set()
1027 psb_intel_sdvo->attached_output)) in psb_intel_sdvo_mode_set()
1033 if (psb_intel_sdvo->is_tv || psb_intel_sdvo->is_lvds) { in psb_intel_sdvo_mode_set()
1034 input_dtd = psb_intel_sdvo->input_dtd; in psb_intel_sdvo_mode_set()
1037 if (!psb_intel_sdvo_set_target_output(psb_intel_sdvo, in psb_intel_sdvo_mode_set()
1038 psb_intel_sdvo->attached_output)) in psb_intel_sdvo_mode_set()
1042 (void) psb_intel_sdvo_set_output_timing(psb_intel_sdvo, &input_dtd); in psb_intel_sdvo_mode_set()
1046 if (!psb_intel_sdvo_set_target_input(psb_intel_sdvo)) in psb_intel_sdvo_mode_set()
1049 if (psb_intel_sdvo->has_hdmi_monitor) { in psb_intel_sdvo_mode_set()
1050 psb_intel_sdvo_set_encode(psb_intel_sdvo, SDVO_ENCODE_HDMI); in psb_intel_sdvo_mode_set()
1051 psb_intel_sdvo_set_colorimetry(psb_intel_sdvo, in psb_intel_sdvo_mode_set()
1053 psb_intel_sdvo_set_avi_infoframe(psb_intel_sdvo); in psb_intel_sdvo_mode_set()
1055 psb_intel_sdvo_set_encode(psb_intel_sdvo, SDVO_ENCODE_DVI); in psb_intel_sdvo_mode_set()
1057 if (psb_intel_sdvo->is_tv && in psb_intel_sdvo_mode_set()
1058 !psb_intel_sdvo_set_tv_format(psb_intel_sdvo)) in psb_intel_sdvo_mode_set()
1061 (void) psb_intel_sdvo_set_input_timing(psb_intel_sdvo, &input_dtd); in psb_intel_sdvo_mode_set()
1069 if (!psb_intel_sdvo_set_clock_rate_mult(psb_intel_sdvo, rate)) in psb_intel_sdvo_mode_set()
1074 sdvox = REG_READ_AUX(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_mode_set()
1076 sdvox = REG_READ(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_mode_set()
1078 switch (psb_intel_sdvo->sdvo_reg) { in psb_intel_sdvo_mode_set()
1090 if (psb_intel_sdvo->has_hdmi_audio) in psb_intel_sdvo_mode_set()
1099 psb_intel_sdvo_write_sdvox(psb_intel_sdvo, sdvox); in psb_intel_sdvo_mode_set()
1105 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder); in psb_intel_sdvo_dpms() local
1122 psb_intel_sdvo_set_active_outputs(psb_intel_sdvo, 0); in psb_intel_sdvo_dpms()
1124 psb_intel_sdvo_set_encoder_power_state(psb_intel_sdvo, mode); in psb_intel_sdvo_dpms()
1128 temp = REG_READ_AUX(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_dpms()
1130 temp = REG_READ(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_dpms()
1133 psb_intel_sdvo_write_sdvox(psb_intel_sdvo, temp & ~SDVO_ENABLE); in psb_intel_sdvo_dpms()
1141 temp = REG_READ_AUX(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_dpms()
1143 temp = REG_READ(psb_intel_sdvo->sdvo_reg); in psb_intel_sdvo_dpms()
1146 psb_intel_sdvo_write_sdvox(psb_intel_sdvo, temp | SDVO_ENABLE); in psb_intel_sdvo_dpms()
1151 status = psb_intel_sdvo_get_trained_inputs(psb_intel_sdvo, &input1, &input2); in psb_intel_sdvo_dpms()
1158 "sync\n", SDVO_NAME(psb_intel_sdvo)); in psb_intel_sdvo_dpms()
1162 psb_intel_sdvo_set_encoder_power_state(psb_intel_sdvo, mode); in psb_intel_sdvo_dpms()
1163 psb_intel_sdvo_set_active_outputs(psb_intel_sdvo, psb_intel_sdvo->attached_output); in psb_intel_sdvo_dpms()
1171 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_mode_valid() local
1176 if (psb_intel_sdvo->pixel_clock_min > mode->clock) in psb_intel_sdvo_mode_valid()
1179 if (psb_intel_sdvo->pixel_clock_max < mode->clock) in psb_intel_sdvo_mode_valid()
1182 if (psb_intel_sdvo->is_lvds) { in psb_intel_sdvo_mode_valid()
1183 if (mode->hdisplay > psb_intel_sdvo->sdvo_lvds_fixed_mode->hdisplay) in psb_intel_sdvo_mode_valid()
1186 if (mode->vdisplay > psb_intel_sdvo->sdvo_lvds_fixed_mode->vdisplay) in psb_intel_sdvo_mode_valid()
1193 static bool psb_intel_sdvo_get_capabilities(struct psb_intel_sdvo *psb_intel_sdvo, struct psb_intel… in psb_intel_sdvo_get_capabilities() argument
1196 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_get_capabilities()
1235 struct psb_intel_sdvo *iout = NULL;
1236 struct psb_intel_sdvo *sdvo;
1262 struct psb_intel_sdvo *psb_intel_sdvo;
1268 psb_intel_sdvo = to_psb_intel_sdvo(connector);
1270 return psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT,
1278 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(connector);
1280 psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0);
1281 psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2);
1284 psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0);
1285 status = psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2);
1287 psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2);
1291 psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2);
1294 psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0);
1295 psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2);
1300 psb_intel_sdvo_multifunc_encoder(struct psb_intel_sdvo *psb_intel_sdvo) in psb_intel_sdvo_multifunc_encoder() argument
1303 int caps = psb_intel_sdvo->caps.output_flags & 0xf; in psb_intel_sdvo_multifunc_encoder()
1310 struct psb_intel_sdvo *sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_get_edid()
1327 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_hdmi_sink_detect() local
1333 if (edid == NULL && psb_intel_sdvo_multifunc_encoder(psb_intel_sdvo)) { in psb_intel_sdvo_hdmi_sink_detect()
1334 u8 ddc, saved_ddc = psb_intel_sdvo->ddc_bus; in psb_intel_sdvo_hdmi_sink_detect()
1340 for (ddc = psb_intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) { in psb_intel_sdvo_hdmi_sink_detect()
1341 psb_intel_sdvo->ddc_bus = ddc; in psb_intel_sdvo_hdmi_sink_detect()
1351 psb_intel_sdvo->ddc_bus = saved_ddc; in psb_intel_sdvo_hdmi_sink_detect()
1366 if (psb_intel_sdvo->is_hdmi) { in psb_intel_sdvo_hdmi_sink_detect()
1367 psb_intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid); in psb_intel_sdvo_hdmi_sink_detect()
1368 psb_intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid); in psb_intel_sdvo_hdmi_sink_detect()
1378 psb_intel_sdvo->has_hdmi_audio = psb_intel_sdvo_connector->force_audio > 0; in psb_intel_sdvo_hdmi_sink_detect()
1388 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_detect() local
1392 if (!psb_intel_sdvo_write_cmd(psb_intel_sdvo, in psb_intel_sdvo_detect()
1397 if (psb_intel_sdvo->caps.output_flags & in psb_intel_sdvo_detect()
1401 if (!psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2)) in psb_intel_sdvo_detect()
1411 psb_intel_sdvo->attached_output = response; in psb_intel_sdvo_detect()
1413 psb_intel_sdvo->has_hdmi_monitor = false; in psb_intel_sdvo_detect()
1414 psb_intel_sdvo->has_hdmi_audio = false; in psb_intel_sdvo_detect()
1439 psb_intel_sdvo->is_tv = false; in psb_intel_sdvo_detect()
1440 psb_intel_sdvo->is_lvds = false; in psb_intel_sdvo_detect()
1441 psb_intel_sdvo->base.needs_tv_clock = false; in psb_intel_sdvo_detect()
1444 psb_intel_sdvo->is_tv = true; in psb_intel_sdvo_detect()
1445 psb_intel_sdvo->base.needs_tv_clock = true; in psb_intel_sdvo_detect()
1448 psb_intel_sdvo->is_lvds = psb_intel_sdvo->sdvo_lvds_fixed_mode != NULL; in psb_intel_sdvo_detect()
1551 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_get_tv_modes() local
1559 format_map = 1 << psb_intel_sdvo->tv_format_index; in psb_intel_sdvo_get_tv_modes()
1563 if (!psb_intel_sdvo_set_target_output(psb_intel_sdvo, psb_intel_sdvo->attached_output)) in psb_intel_sdvo_get_tv_modes()
1567 if (!psb_intel_sdvo_write_cmd(psb_intel_sdvo, in psb_intel_sdvo_get_tv_modes()
1571 if (!psb_intel_sdvo_read_response(psb_intel_sdvo, &reply, 3)) in psb_intel_sdvo_get_tv_modes()
1586 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_get_lvds_modes() local
1595 psb_intel_ddc_get_modes(connector, psb_intel_sdvo->i2c); in psb_intel_sdvo_get_lvds_modes()
1614 psb_intel_sdvo->sdvo_lvds_fixed_mode = in psb_intel_sdvo_get_lvds_modes()
1617 drm_mode_set_crtcinfo(psb_intel_sdvo->sdvo_lvds_fixed_mode, in psb_intel_sdvo_get_lvds_modes()
1620 psb_intel_sdvo->is_lvds = true; in psb_intel_sdvo_get_lvds_modes()
1650 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_detect_hdmi_audio() local
1654 if (!psb_intel_sdvo->is_hdmi) in psb_intel_sdvo_detect_hdmi_audio()
1669 struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); in psb_intel_sdvo_set_property() local
1694 if (has_audio == psb_intel_sdvo->has_hdmi_audio) in psb_intel_sdvo_set_property()
1697 psb_intel_sdvo->has_hdmi_audio = has_audio; in psb_intel_sdvo_set_property()
1702 if (val == !!psb_intel_sdvo->color_range) in psb_intel_sdvo_set_property()
1705 psb_intel_sdvo->color_range = val ? SDVO_COLOR_RANGE_16_235 : 0; in psb_intel_sdvo_set_property()
1722 if (psb_intel_sdvo->tv_format_index == in psb_intel_sdvo_set_property()
1726 psb_intel_sdvo->tv_format_index = psb_intel_sdvo_connector->tv_format_supported[val]; in psb_intel_sdvo_set_property()
1797 if (!psb_intel_sdvo_set_value(psb_intel_sdvo, cmd, &temp_value, 2)) in psb_intel_sdvo_set_property()
1802 if (psb_intel_sdvo->base.base.crtc) { in psb_intel_sdvo_set_property()
1803 struct drm_crtc *crtc = psb_intel_sdvo->base.base.crtc; in psb_intel_sdvo_set_property()
1816 struct psb_intel_sdvo *sdvo = to_psb_intel_sdvo(&gma_encoder->base); in psb_intel_sdvo_save()
1825 struct psb_intel_sdvo *sdvo = to_psb_intel_sdvo(encoder); in psb_intel_sdvo_restore()
1861 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder); in psb_intel_sdvo_enc_destroy() local
1863 if (psb_intel_sdvo->sdvo_lvds_fixed_mode != NULL) in psb_intel_sdvo_enc_destroy()
1865 psb_intel_sdvo->sdvo_lvds_fixed_mode); in psb_intel_sdvo_enc_destroy()
1867 i2c_del_adapter(&psb_intel_sdvo->ddc); in psb_intel_sdvo_enc_destroy()
1876 psb_intel_sdvo_guess_ddc_bus(struct psb_intel_sdvo *sdvo) in psb_intel_sdvo_guess_ddc_bus()
1928 struct psb_intel_sdvo *sdvo, u32 reg) in psb_intel_sdvo_select_ddc_bus()
1945 struct psb_intel_sdvo *sdvo, u32 reg) in psb_intel_sdvo_select_i2c_bus()
1971 psb_intel_sdvo_is_hdmi_connector(struct psb_intel_sdvo *psb_intel_sdvo, int device) in psb_intel_sdvo_is_hdmi_connector() argument
1973 return psb_intel_sdvo_check_supp_encode(psb_intel_sdvo); in psb_intel_sdvo_is_hdmi_connector()
2015 struct psb_intel_sdvo *encoder) in psb_intel_sdvo_connector_init()
2048 psb_intel_sdvo_dvi_init(struct psb_intel_sdvo *psb_intel_sdvo, int device) in psb_intel_sdvo_dvi_init() argument
2050 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_dvi_init()
2060 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; in psb_intel_sdvo_dvi_init()
2063 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; in psb_intel_sdvo_dvi_init()
2073 if (psb_intel_sdvo_is_hdmi_connector(psb_intel_sdvo, device)) { in psb_intel_sdvo_dvi_init()
2075 psb_intel_sdvo->is_hdmi = true; in psb_intel_sdvo_dvi_init()
2077 psb_intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | in psb_intel_sdvo_dvi_init()
2080 psb_intel_sdvo_connector_init(psb_intel_sdvo_connector, psb_intel_sdvo); in psb_intel_sdvo_dvi_init()
2081 if (psb_intel_sdvo->is_hdmi) in psb_intel_sdvo_dvi_init()
2088 psb_intel_sdvo_tv_init(struct psb_intel_sdvo *psb_intel_sdvo, int type) in psb_intel_sdvo_tv_init() argument
2090 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_tv_init()
2104 psb_intel_sdvo->controlled_output |= type; in psb_intel_sdvo_tv_init()
2107 psb_intel_sdvo->is_tv = true; in psb_intel_sdvo_tv_init()
2108 psb_intel_sdvo->base.needs_tv_clock = true; in psb_intel_sdvo_tv_init()
2109 psb_intel_sdvo->base.clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; in psb_intel_sdvo_tv_init()
2111 psb_intel_sdvo_connector_init(psb_intel_sdvo_connector, psb_intel_sdvo); in psb_intel_sdvo_tv_init()
2113 if (!psb_intel_sdvo_tv_create_property(psb_intel_sdvo, psb_intel_sdvo_connector, type)) in psb_intel_sdvo_tv_init()
2116 if (!psb_intel_sdvo_create_enhance_property(psb_intel_sdvo, psb_intel_sdvo_connector)) in psb_intel_sdvo_tv_init()
2127 psb_intel_sdvo_analog_init(struct psb_intel_sdvo *psb_intel_sdvo, int device) in psb_intel_sdvo_analog_init() argument
2129 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_analog_init()
2145 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; in psb_intel_sdvo_analog_init()
2148 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; in psb_intel_sdvo_analog_init()
2152 psb_intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | in psb_intel_sdvo_analog_init()
2156 psb_intel_sdvo); in psb_intel_sdvo_analog_init()
2161 psb_intel_sdvo_lvds_init(struct psb_intel_sdvo *psb_intel_sdvo, int device) in psb_intel_sdvo_lvds_init() argument
2163 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; in psb_intel_sdvo_lvds_init()
2178 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; in psb_intel_sdvo_lvds_init()
2181 psb_intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; in psb_intel_sdvo_lvds_init()
2185 psb_intel_sdvo->base.clone_mask = ((1 << INTEL_ANALOG_CLONE_BIT) | in psb_intel_sdvo_lvds_init()
2188 psb_intel_sdvo_connector_init(psb_intel_sdvo_connector, psb_intel_sdvo); in psb_intel_sdvo_lvds_init()
2189 if (!psb_intel_sdvo_create_enhance_property(psb_intel_sdvo, psb_intel_sdvo_connector)) in psb_intel_sdvo_lvds_init()
2200 psb_intel_sdvo_output_setup(struct psb_intel_sdvo *psb_intel_sdvo, uint16_t flags) in psb_intel_sdvo_output_setup() argument
2202 psb_intel_sdvo->is_tv = false; in psb_intel_sdvo_output_setup()
2203 psb_intel_sdvo->base.needs_tv_clock = false; in psb_intel_sdvo_output_setup()
2204 psb_intel_sdvo->is_lvds = false; in psb_intel_sdvo_output_setup()
2209 if (!psb_intel_sdvo_dvi_init(psb_intel_sdvo, 0)) in psb_intel_sdvo_output_setup()
2213 if (!psb_intel_sdvo_dvi_init(psb_intel_sdvo, 1)) in psb_intel_sdvo_output_setup()
2218 if (!psb_intel_sdvo_tv_init(psb_intel_sdvo, SDVO_OUTPUT_SVID0)) in psb_intel_sdvo_output_setup()
2222 if (!psb_intel_sdvo_tv_init(psb_intel_sdvo, SDVO_OUTPUT_CVBS0)) in psb_intel_sdvo_output_setup()
2226 if (!psb_intel_sdvo_analog_init(psb_intel_sdvo, 0)) in psb_intel_sdvo_output_setup()
2230 if (!psb_intel_sdvo_analog_init(psb_intel_sdvo, 1)) in psb_intel_sdvo_output_setup()
2234 if (!psb_intel_sdvo_lvds_init(psb_intel_sdvo, 0)) in psb_intel_sdvo_output_setup()
2238 if (!psb_intel_sdvo_lvds_init(psb_intel_sdvo, 1)) in psb_intel_sdvo_output_setup()
2244 psb_intel_sdvo->controlled_output = 0; in psb_intel_sdvo_output_setup()
2245 memcpy(bytes, &psb_intel_sdvo->caps.output_flags, 2); in psb_intel_sdvo_output_setup()
2247 SDVO_NAME(psb_intel_sdvo), in psb_intel_sdvo_output_setup()
2251 psb_intel_sdvo->base.crtc_mask = (1 << 0) | (1 << 1); in psb_intel_sdvo_output_setup()
2256 static bool psb_intel_sdvo_tv_create_property(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_tv_create_property() argument
2260 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_tv_create_property()
2264 if (!psb_intel_sdvo_set_target_output(psb_intel_sdvo, type)) in psb_intel_sdvo_tv_create_property()
2268 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_tv_create_property()
2295 psb_intel_sdvo->tv_format_index = psb_intel_sdvo_connector->tv_format_supported[0]; in psb_intel_sdvo_tv_create_property()
2304 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_MAX_##NAME, &data_value, 4) || \
2305 !psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_##NAME, &response, 2)) \
2321 psb_intel_sdvo_create_enhance_property_tv(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property_tv() argument
2325 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_create_enhance_property_tv()
2331 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property_tv()
2336 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property_tv()
2367 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property_tv()
2372 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property_tv()
2416 if (!psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_DOT_CRAWL, &response, 2)) in psb_intel_sdvo_create_enhance_property_tv()
2436 psb_intel_sdvo_create_enhance_property_lvds(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property_lvds() argument
2440 struct drm_device *dev = psb_intel_sdvo->base.base.dev; in psb_intel_sdvo_create_enhance_property_lvds()
2450 static bool psb_intel_sdvo_create_enhance_property(struct psb_intel_sdvo *psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property() argument
2461 psb_intel_sdvo_get_value(psb_intel_sdvo, in psb_intel_sdvo_create_enhance_property()
2470 …return psb_intel_sdvo_create_enhance_property_tv(psb_intel_sdvo, psb_intel_sdvo_connector, enhance… in psb_intel_sdvo_create_enhance_property()
2472 …return psb_intel_sdvo_create_enhance_property_lvds(psb_intel_sdvo, psb_intel_sdvo_connector, enhan… in psb_intel_sdvo_create_enhance_property()
2481 struct psb_intel_sdvo *sdvo = adapter->algo_data; in psb_intel_sdvo_ddc_proxy_xfer()
2491 struct psb_intel_sdvo *sdvo = adapter->algo_data; in psb_intel_sdvo_ddc_proxy_func()
2501 psb_intel_sdvo_init_ddc_proxy(struct psb_intel_sdvo *sdvo, in psb_intel_sdvo_init_ddc_proxy()
2518 struct psb_intel_sdvo *psb_intel_sdvo; in psb_intel_sdvo_init() local
2521 psb_intel_sdvo = kzalloc(sizeof(struct psb_intel_sdvo), GFP_KERNEL); in psb_intel_sdvo_init()
2522 if (!psb_intel_sdvo) in psb_intel_sdvo_init()
2525 psb_intel_sdvo->sdvo_reg = sdvo_reg; in psb_intel_sdvo_init()
2526 psb_intel_sdvo->slave_addr = psb_intel_sdvo_get_slave_addr(dev, sdvo_reg) >> 1; in psb_intel_sdvo_init()
2527 psb_intel_sdvo_select_i2c_bus(dev_priv, psb_intel_sdvo, sdvo_reg); in psb_intel_sdvo_init()
2528 if (!psb_intel_sdvo_init_ddc_proxy(psb_intel_sdvo, dev)) { in psb_intel_sdvo_init()
2529 kfree(psb_intel_sdvo); in psb_intel_sdvo_init()
2534 gma_encoder = &psb_intel_sdvo->base; in psb_intel_sdvo_init()
2543 if (!psb_intel_sdvo_read_byte(psb_intel_sdvo, i, &byte)) { in psb_intel_sdvo_init()
2558 if (!psb_intel_sdvo_get_capabilities(psb_intel_sdvo, &psb_intel_sdvo->caps)) in psb_intel_sdvo_init()
2561 if (psb_intel_sdvo_output_setup(psb_intel_sdvo, in psb_intel_sdvo_init()
2562 psb_intel_sdvo->caps.output_flags) != true) { in psb_intel_sdvo_init()
2568 psb_intel_sdvo_select_ddc_bus(dev_priv, psb_intel_sdvo, sdvo_reg); in psb_intel_sdvo_init()
2571 if (!psb_intel_sdvo_set_target_input(psb_intel_sdvo)) in psb_intel_sdvo_init()
2574 if (!psb_intel_sdvo_get_input_pixel_clock_range(psb_intel_sdvo, in psb_intel_sdvo_init()
2575 &psb_intel_sdvo->pixel_clock_min, in psb_intel_sdvo_init()
2576 &psb_intel_sdvo->pixel_clock_max)) in psb_intel_sdvo_init()
2583 SDVO_NAME(psb_intel_sdvo), in psb_intel_sdvo_init()
2584 psb_intel_sdvo->caps.vendor_id, psb_intel_sdvo->caps.device_id, in psb_intel_sdvo_init()
2585 psb_intel_sdvo->caps.device_rev_id, in psb_intel_sdvo_init()
2586 psb_intel_sdvo->pixel_clock_min / 1000, in psb_intel_sdvo_init()
2587 psb_intel_sdvo->pixel_clock_max / 1000, in psb_intel_sdvo_init()
2588 (psb_intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N', in psb_intel_sdvo_init()
2589 (psb_intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N', in psb_intel_sdvo_init()
2591 psb_intel_sdvo->caps.output_flags & in psb_intel_sdvo_init()
2593 psb_intel_sdvo->caps.output_flags & in psb_intel_sdvo_init()
2599 i2c_del_adapter(&psb_intel_sdvo->ddc); in psb_intel_sdvo_init()
2600 kfree(psb_intel_sdvo); in psb_intel_sdvo_init()