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

Commit 793e91a3 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/dsi-staging: move ext bridge init from postopen to hw_init"

parents 56539598 81d5533c
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -4854,6 +4854,15 @@ static int dsi_display_bind(struct device *dev,
	if (!display->disp_node)
		return 0;

	/* defer bind if ext bridge driver is not loaded */
	for (i = 0; i < display->ext_bridge_cnt; i++) {
		if (!of_drm_find_bridge(display->ext_bridge[i].node_of)) {
			pr_err("defer for bridge[%d] %s\n", i,
				display->ext_bridge[i].node_of->full_name);
			return -EPROBE_DEFER;
		}
	}

	mutex_lock(&display->display_lock);

	rc = dsi_display_validate_split_link(display);
+12 −14
Original line number Diff line number Diff line
/*
 * Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
 * Copyright (C) 2013 Red Hat
 * Author: Rob Clark <robdclark@gmail.com>
 *
@@ -1467,6 +1467,17 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
			SDE_ERROR("dsi %d connector init failed\n", i);
			dsi_display_drm_bridge_deinit(display);
			sde_encoder_destroy(encoder);
			continue;
		}

		rc = dsi_display_drm_ext_bridge_init(display,
					encoder,
					connector);
		if (rc) {
			SDE_ERROR("dsi %d ext bridge init failed\n", rc);
			dsi_display_drm_bridge_deinit(display);
			sde_encoder_destroy(encoder);
			sde_connector_destroy(connector);
		}
	}

@@ -2359,7 +2370,6 @@ static void _sde_kms_post_open(struct msm_kms *kms, struct drm_file *file)
	struct drm_connector *connector = NULL;
	struct drm_connector_list_iter conn_iter;
	struct sde_connector *sde_conn = NULL;
	int i;

	if (!kms) {
		SDE_ERROR("invalid kms\n");
@@ -2377,18 +2387,6 @@ static void _sde_kms_post_open(struct msm_kms *kms, struct drm_file *file)
	if (!dev->mode_config.poll_enabled)
		return;

	/* init external dsi bridge here to make sure ext bridge is probed*/
	for (i = 0; i < sde_kms->dsi_display_count; ++i) {
		struct dsi_display *dsi_display;

		dsi_display = sde_kms->dsi_displays[i];
		if (dsi_display->bridge) {
			dsi_display_drm_ext_bridge_init(dsi_display,
				dsi_display->bridge->base.encoder,
				dsi_display->drm_conn);
		}
	}

	mutex_lock(&dev->mode_config.mutex);
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter) {