Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 200e541f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm: msm: dp: add support for CEC-tunneling-over-AUX channel"

parents ddfe8031 3ed05a77
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2018, 2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -608,6 +608,8 @@ static void dp_aux_init(struct dp_aux *dp_aux, struct dp_aux_cfg *aux_cfg)
	aux->catalog->enable(aux->catalog, true);
	atomic_set(&aux->aborted, 0);
	aux->retry_cnt = 0;

	drm_dp_cec_register_connector(&aux->drm_aux, "sde_dp_cec", aux->dev);
}

static void dp_aux_deinit(struct dp_aux *dp_aux)
@@ -623,6 +625,7 @@ static void dp_aux_deinit(struct dp_aux *dp_aux)

	atomic_set(&aux->aborted, 1);
	aux->catalog->enable(aux->catalog, false);
	drm_dp_cec_unregister_connector(&aux->drm_aux);
}

static int dp_aux_register(struct dp_aux *dp_aux)
+3 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2018, 2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -790,6 +790,8 @@ static int dp_link_parse_request(struct dp_link_private *link)

	pr_debug("device service irq vector = 0x%x\n", data);

	drm_dp_cec_irq(link->aux->drm_aux);

	if (!(data & DP_AUTOMATED_TEST_REQUEST)) {
		pr_debug("no test requested\n");
		return 0;
+9 −1
Original line number Diff line number Diff line
@@ -458,6 +458,7 @@ static int dp_panel_get_modes(struct dp_panel *dp_panel,
	struct drm_connector *connector, struct dp_display_mode *mode)
{
	struct dp_panel_private *panel;
	int rc = 0;

	if (!dp_panel) {
		pr_err("invalid input\n");
@@ -470,12 +471,18 @@ static int dp_panel_get_modes(struct dp_panel *dp_panel,
		dp_panel_set_test_mode(panel, mode);
		return 1;
	} else if (dp_panel->edid_ctrl->edid) {
		return _sde_edid_update_modes(connector, dp_panel->edid_ctrl);
		rc = _sde_edid_update_modes(connector, dp_panel->edid_ctrl);
	} else { /* fail-safe mode */
		memcpy(&mode->timing, &fail_safe,
			sizeof(fail_safe));
		return 1;
	}

	if (rc)
		drm_dp_cec_set_edid(panel->aux->drm_aux,
				dp_panel->edid_ctrl->edid);

	return rc;
}

static void dp_panel_handle_sink_request(struct dp_panel *dp_panel)
@@ -762,6 +769,7 @@ static int dp_panel_deinit_panel_info(struct dp_panel *dp_panel)
	panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
	hdr = &panel->catalog->hdr_data;

	drm_dp_cec_unset_edid(panel->aux->drm_aux);
	if (!panel->custom_edid)
		sde_free_edid((void **)&dp_panel->edid_ctrl);