Example #1
0
static enum drm_connector_status
intel_hdmi_detect(struct drm_connector *connector, bool force)
{
	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
	struct drm_i915_private *dev_priv = connector->dev->dev_private;
	struct edid *edid;
	enum drm_connector_status status = connector_status_disconnected;

	if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi))
		return status;
#if 0
        /* HOTPLUG Detect is not working in some of VLV A0
         * boards. For those boards enable this WA
         */
	if (IS_VALLEYVIEW(connector->dev))
		return connector_status_connected;
#endif

	intel_hdmi->has_hdmi_sink = false;
	intel_hdmi->has_audio = false;
	edid = drm_get_edid(connector,
			    intel_gmbus_get_adapter(dev_priv,
						    intel_hdmi->ddc_bus));

	if (edid) {
		if (edid->input & DRM_EDID_INPUT_DIGITAL) {
			status = connector_status_connected;
			if (intel_hdmi->force_audio != HDMI_AUDIO_OFF_DVI)
				intel_hdmi->has_hdmi_sink =
						drm_detect_hdmi_monitor(edid);
			intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
		}
		connector->display_info.raw_edid = NULL;
		kfree(edid);
	}

	if (status == connector_status_connected) {
		if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
			intel_hdmi->has_audio =
				(intel_hdmi->force_audio == HDMI_AUDIO_ON);
	}

	return status;
}
Example #2
0
static enum drm_connector_status
intel_hdmi_detect(struct drm_connector *connector, bool force)
{
	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
	struct intel_digital_port *intel_dig_port =
		hdmi_to_dig_port(intel_hdmi);
	struct intel_encoder *intel_encoder = &intel_dig_port->base;
	struct drm_i915_private *dev_priv = connector->dev->dev_private;
	struct edid *edid;
	enum drm_connector_status status = connector_status_disconnected;

	if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi))
		return status;

	intel_hdmi->has_hdmi_sink = false;
	intel_hdmi->has_audio = false;
	edid = drm_get_edid(connector,
			    intel_gmbus_get_adapter(dev_priv,
						    intel_hdmi->ddc_bus));

	if (edid) {
		if (edid->input & DRM_EDID_INPUT_DIGITAL) {
			status = connector_status_connected;
			if (intel_hdmi->force_audio != HDMI_AUDIO_OFF_DVI)
				intel_hdmi->has_hdmi_sink =
						drm_detect_hdmi_monitor(edid);
			intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
		}
		free(edid, DRM_MEM_KMS);
	}

	if (status == connector_status_connected) {
		if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
			intel_hdmi->has_audio =
				(intel_hdmi->force_audio == HDMI_AUDIO_ON);
		intel_encoder->type = INTEL_OUTPUT_HDMI;
	}

	return status;
}
Example #3
0
static enum drm_connector_status
intel_hdmi_detect(struct drm_connector *connector, bool force)
{
    struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
    struct drm_i915_private *dev_priv = connector->dev->dev_private;
    struct edid *edid;
    enum drm_connector_status status = connector_status_disconnected;

    if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi))
        return status;

    intel_hdmi->has_hdmi_sink = false;
    intel_hdmi->has_audio = false;
    edid = drm_get_edid(connector,
    intel_gmbus_get_adapter(dev_priv,
    intel_hdmi->ddc_bus));

    if (edid) {
        if (edid->input & DRM_EDID_INPUT_DIGITAL) {
            status = connector_status_connected;
            if (intel_hdmi->force_audio != HDMI_AUDIO_OFF_DVI)
                intel_hdmi->has_hdmi_sink =
                drm_detect_hdmi_monitor(edid);
            intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
        }
        connector->display_info.raw_edid = NULL;
        kfree(edid);
    }

    if (status == connector_status_connected) {
        if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
            intel_hdmi->has_audio =
                (intel_hdmi->force_audio == HDMI_AUDIO_ON);
    }

    return status;
}