Browse Source

Merged TI feature audio-display into ti-linux-4.19.y

TI-Feature: audio-display
TI-Branch: audio_display-ti-linux-4.19.y

* 'audio_display-ti-linux-4.19.y' of ssh://bitbucket.itg.ti.com/lcpdpublicdom/audio-display:
  drm/bridge: tc358767: fix max_tu_symbol value
  drm/tidss: fix probe-time memleak
  drm/tidss: remove empty function

Signed-off-by: LCPD Auto Merger <lcpd_integration@list.ti.com>
LCPD Auto Merger 6 years ago
parent
commit
f15f0b04e6

+ 6 - 1
drivers/gpu/drm/bridge/tc358767.c

@@ -686,6 +686,8 @@ static int tc_set_video_mode(struct tc_data *tc,
 	int upper_margin = mode->vtotal - mode->vsync_end;
 	int lower_margin = mode->vsync_start - mode->vdisplay;
 	int vsync_len = mode->vsync_end - mode->vsync_start;
+	u32 bits_per_pixel = 24;
+	u32 in_bw, out_bw;
 
 	/*
 	 * Recommended maximum number of symbols transferred in a transfer unit:
@@ -693,7 +695,10 @@ static int tc_set_video_mode(struct tc_data *tc,
 	 *              (output active video bandwidth in bytes))
 	 * Must be less than tu_size.
 	 */
-	max_tu_symbol = TU_SIZE_RECOMMENDED - 1;
+
+	in_bw = mode->clock * bits_per_pixel / 8;
+	out_bw = tc->link.base.num_lanes * tc->link.base.rate;
+	max_tu_symbol = DIV_ROUND_UP(in_bw * TU_SIZE_RECOMMENDED, out_bw);
 
 	dev_dbg(tc->dev, "set mode %dx%d\n",
 		mode->hdisplay, mode->vdisplay);

+ 2 - 2
drivers/gpu/drm/tidss/tidss_drv.c

@@ -273,7 +273,7 @@ err_poll_fini:
 	drm_irq_uninstall(ddev);
 
 err_modeset_cleanup:
-	drm_mode_config_cleanup(ddev);
+	tidss_modeset_cleanup(tidss);
 
 err_runtime_suspend:
 #ifndef CONFIG_PM
@@ -314,7 +314,7 @@ static int tidss_remove(struct platform_device *pdev)
 
 	drm_irq_uninstall(ddev);
 
-	drm_mode_config_cleanup(ddev);
+	tidss_modeset_cleanup(tidss);
 
 #ifndef CONFIG_PM
 	/* If we don't have PM, we need to call suspend manually */

+ 17 - 13
drivers/gpu/drm/tidss/tidss_kms.c

@@ -68,11 +68,6 @@ static const struct drm_mode_config_funcs mode_config_funcs = {
 	.atomic_commit = drm_atomic_helper_commit,
 };
 
-static int tidss_modeset_init_properties(struct tidss_device *tidss)
-{
-	return 0;
-}
-
 static struct drm_crtc *tidss_v_modeset_init_v_crtc(struct tidss_device *tidss, struct rpmsg_remotedev_display_disp *vp)
 {
 	struct drm_device *dev = tidss->ddev;
@@ -151,13 +146,9 @@ int tidss_modeset_init(struct tidss_device *tidss)
 	ddev->mode_config.funcs = &mode_config_funcs;
 	ddev->mode_config.helper_private = &mode_config_helper_funcs;
 
-	ret = tidss_modeset_init_properties(tidss);
-	if (ret < 0)
-		return ret;
-
 	ret = tidss->dispc_ops->modeset_init(tidss->dispc);
 	if (ret)
-		return ret;
+		goto err_mode_config_cleanup;
 
 	if (tidss->rdev) {
 		tidss->rdev->device.display.ops->get_res_info(tidss->rdev, &tidss->rres);
@@ -167,14 +158,16 @@ int tidss_modeset_init(struct tidss_device *tidss)
 
 		for (i = 0; i < tidss->rres.num_disps; i++) {
 			tidss->v_crtcs[i] = tidss_v_modeset_init_v_crtc(tidss, &tidss->rres.disps[i]);
-			if (!tidss->v_crtcs[i])
-				return -ENOMEM;
+			if (!tidss->v_crtcs[i]) {
+				ret = -ENOMEM;
+				goto err_mode_config_cleanup;
+			}
 		}
 	}
 
 	ret = drm_vblank_init(ddev, tidss->num_crtcs + tidss->num_v_crtcs);
 	if (ret)
-		return ret;
+		goto err_mode_config_cleanup;
 
 	/* Start with vertical blanking interrupt reporting disabled. */
 	for (i = 0; i < tidss->num_crtcs; ++i)
@@ -188,4 +181,15 @@ int tidss_modeset_init(struct tidss_device *tidss)
 	dev_dbg(tidss->dev, "%s done\n", __func__);
 
 	return 0;
+
+err_mode_config_cleanup:
+	drm_mode_config_cleanup(ddev);
+	return ret;
+}
+
+void tidss_modeset_cleanup(struct tidss_device *tidss)
+{
+	struct drm_device *ddev = tidss->ddev;
+
+	drm_mode_config_cleanup(ddev);
 }

+ 1 - 0
drivers/gpu/drm/tidss/tidss_kms.h

@@ -10,5 +10,6 @@
 struct tidss_device;
 
 int tidss_modeset_init(struct tidss_device *tidss);
+void tidss_modeset_cleanup(struct tidss_device *tidss);
 
 #endif