Преглед изворни кода

Merge branch 'audio_display-ti-linux-4.19.y' of git.ti.com:~jyrisarha/ti-linux-kernel/jyrisarhas-audio-video-linux-feature-tree into ti-linux-4.19.y

TI-Feature: audio-display
TI-Tree: git@git.ti.com:~jyrisarha/ti-linux-kernel/jyrisarhas-audio-video-linux-feature-tree.git
TI-Branch: audio_display-ti-linux-4.19.y

* 'audio_display-ti-linux-4.19.y' of git.ti.com:~jyrisarha/ti-linux-kernel/jyrisarhas-audio-video-linux-feature-tree:
  drm/tidss: fix crash when display does not provide bus_formats
  drm/tidss: use drm_fbdev_generic_setup
  drm/tidss: dispc7: Remove unneeded semicolon from c8_to_c12()

Signed-off-by: LCPD Auto Merger <lcpd_integration@list.ti.com>
LCPD Auto Merger пре 6 година
родитељ
комит
687fc44d0a

+ 1 - 1
drivers/gpu/drm/tidss/tidss_dispc7.c

@@ -678,7 +678,7 @@ static u16 c8_to_c12(u8 c8, enum c8_to_c12_mode mode)
 	default:
 	case C8_TO_C12_MIN:
 		break;
-	};
+	}
 
 	return c12;
 }

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

@@ -13,7 +13,6 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
-#include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 
@@ -177,22 +176,6 @@ static int tidss_probe(struct platform_device *pdev)
 		goto err_modeset_cleanup;
 	}
 
-#ifdef CONFIG_DRM_FBDEV_EMULATION
-	if (ddev->mode_config.num_connector) {
-		struct drm_fbdev_cma *fbdev;
-
-		fbdev = drm_fbdev_cma_init(ddev, 32,
-					   ddev->mode_config.num_connector);
-		if (IS_ERR(fbdev)) {
-			dev_err(tidss->dev, "fbdev init failed\n");
-			ret =  PTR_ERR(fbdev);
-			goto err_irq_uninstall;
-		}
-
-		tidss->fbdev = fbdev;
-	}
-#endif
-
 	drm_kms_helper_poll_init(ddev);
 
 	ret = drm_dev_register(ddev, 0);
@@ -201,6 +184,8 @@ static int tidss_probe(struct platform_device *pdev)
 		goto err_poll_fini;
 	}
 
+	drm_fbdev_generic_setup(ddev, 32);
+
 	dev_dbg(dev, "%s done\n", __func__);
 
 	return 0;
@@ -208,14 +193,8 @@ static int tidss_probe(struct platform_device *pdev)
 err_poll_fini:
 	drm_kms_helper_poll_fini(ddev);
 
-	if (tidss->fbdev)
-		drm_fbdev_cma_fini(tidss->fbdev);
-
 	drm_atomic_helper_shutdown(ddev);
 
-#ifdef CONFIG_DRM_FBDEV_EMULATION
-err_irq_uninstall:
-#endif
 	drm_irq_uninstall(ddev);
 
 err_modeset_cleanup:
@@ -249,9 +228,6 @@ static int tidss_remove(struct platform_device *pdev)
 
 	drm_kms_helper_poll_fini(ddev);
 
-	if (tidss->fbdev)
-		drm_fbdev_cma_fini(tidss->fbdev);
-
 	drm_atomic_helper_shutdown(ddev);
 
 	drm_irq_uninstall(ddev);

+ 6 - 0
drivers/gpu/drm/tidss/tidss_encoder.c

@@ -30,6 +30,12 @@ static int tidss_encoder_atomic_check(struct drm_encoder *encoder,
 
 	dev_dbg(ddev->dev, "%s\n", __func__);
 
+	if (!di->bus_formats || di->num_bus_formats == 0)  {
+		dev_err(ddev->dev, "%s: No bus_formats in connected display\n",
+			__func__);
+		return -EINVAL;
+	}
+
 	// XXX any cleaner way to set bus format and flags?
 	tcrtc_state->bus_format = di->bus_formats[0];
 	tcrtc_state->bus_flags = di->bus_flags;