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

Commit a0e9449d 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: limit the maximum lane count for multi-functional dongles"

parents 7789f289 da8b3d02
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -494,7 +494,8 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
	if (!dp->dp_display.connector)
		return 0;

	rc = dp->panel->read_sink_caps(dp->panel, dp->dp_display.connector);
	rc = dp->panel->read_sink_caps(dp->panel,
		dp->dp_display.connector, dp->usbpd->multi_func);
	if (rc) {
		if (rc == -ETIMEDOUT) {
			pr_err("Sink cap read failed, skip notification\n");
+7 −3
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ static const u8 vendor_name[8] = {81, 117, 97, 108, 99, 111, 109, 109};
static const u8 product_desc[16] = {83, 110, 97, 112, 100, 114, 97, 103,
	111, 110, 0, 0, 0, 0, 0, 0};

static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
static int dp_panel_read_dpcd(struct dp_panel *dp_panel, bool multi_func)
{
	int rlen, rc = 0;
	struct dp_panel_private *panel;
@@ -176,6 +176,10 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
	link_info->num_lanes = dp_panel->dpcd[DP_MAX_LANE_COUNT] &
				DP_MAX_LANE_COUNT_MASK;

	if (multi_func)
		link_info->num_lanes = min_t(unsigned int,
			link_info->num_lanes, 2);

	pr_debug("lane_count=%d\n", link_info->num_lanes);

	if (drm_dp_enhanced_frame_cap(dpcd))
@@ -303,7 +307,7 @@ static int dp_panel_read_edid(struct dp_panel *dp_panel,
}

static int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
	struct drm_connector *connector)
	struct drm_connector *connector, bool multi_func)
{
	int rc = 0;
	struct dp_panel_private *panel;
@@ -315,7 +319,7 @@ static int dp_panel_read_sink_caps(struct dp_panel *dp_panel,

	panel = container_of(dp_panel, struct dp_panel_private, dp_panel);

	rc = dp_panel_read_dpcd(dp_panel);
	rc = dp_panel_read_dpcd(dp_panel, multi_func);
	if (rc || !is_link_rate_valid(drm_dp_link_rate_to_bw_code(
		dp_panel->link_info.rate)) || !is_lane_count_valid(
		dp_panel->link_info.num_lanes) ||
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ struct dp_panel {
	int (*deinit)(struct dp_panel *dp_panel);
	int (*timing_cfg)(struct dp_panel *dp_panel);
	int (*read_sink_caps)(struct dp_panel *dp_panel,
		struct drm_connector *connector);
		struct drm_connector *connector, bool multi_func);
	u32 (*get_min_req_link_rate)(struct dp_panel *dp_panel);
	u32 (*get_mode_bpp)(struct dp_panel *dp_panel, u32 mode_max_bpp,
			u32 mode_pclk_khz);