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

Commit 25928a39 authored by Andrzej Hajda's avatar Andrzej Hajda Committed by Inki Dae
Browse files

drm/exynos: delay fbdev initialization until an output is connected



In case fbdev is initialized before any output is connected,
fb resolution defaults to 1024x768. After that any output with
bigger resolution is ignored and fbdev is not displayed.
The patch postpones fbdev initialization to avoid such situation.

Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
Reviewed-by: default avatarTomasz Figa <t.figa@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent d2ba65f6
Loading
Loading
Loading
Loading
+4 −12
Original line number Original line Diff line number Diff line
@@ -109,24 +109,15 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags)
	/* setup possible_clones. */
	/* setup possible_clones. */
	exynos_drm_encoder_setup(dev);
	exynos_drm_encoder_setup(dev);


	/*
	 * create and configure fb helper and also exynos specific
	 * fbdev object.
	 */
	ret = exynos_drm_fbdev_init(dev);
	if (ret) {
		DRM_ERROR("failed to initialize drm fbdev\n");
		goto err_drm_device;
	}

	drm_vblank_offdelay = VBLANK_OFF_DELAY;
	drm_vblank_offdelay = VBLANK_OFF_DELAY;


	platform_set_drvdata(dev->platformdev, dev);
	platform_set_drvdata(dev->platformdev, dev);


	/* force connectors detection */
	drm_helper_hpd_irq_event(dev);

	return 0;
	return 0;


err_drm_device:
	exynos_drm_device_unregister(dev);
err_vblank:
err_vblank:
	drm_vblank_cleanup(dev);
	drm_vblank_cleanup(dev);
err_display_cleanup:
err_display_cleanup:
@@ -574,6 +565,7 @@ out_hdmi:
	platform_driver_unregister(&fimd_driver);
	platform_driver_unregister(&fimd_driver);
out_fimd:
out_fimd:
#endif
#endif

#ifdef CONFIG_DRM_EXYNOS_DP
#ifdef CONFIG_DRM_EXYNOS_DP
	platform_driver_unregister(&dp_driver);
	platform_driver_unregister(&dp_driver);
out_dp:
out_dp:
+3 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@


#include "exynos_drm_drv.h"
#include "exynos_drm_drv.h"
#include "exynos_drm_fb.h"
#include "exynos_drm_fb.h"
#include "exynos_drm_fbdev.h"
#include "exynos_drm_gem.h"
#include "exynos_drm_gem.h"
#include "exynos_drm_iommu.h"
#include "exynos_drm_iommu.h"
#include "exynos_drm_crtc.h"
#include "exynos_drm_crtc.h"
@@ -300,6 +301,8 @@ static void exynos_drm_output_poll_changed(struct drm_device *dev)


	if (fb_helper)
	if (fb_helper)
		drm_fb_helper_hotplug_event(fb_helper);
		drm_fb_helper_hotplug_event(fb_helper);
	else
		exynos_drm_fbdev_init(dev);
}
}


static const struct drm_mode_config_funcs exynos_drm_mode_config_funcs = {
static const struct drm_mode_config_funcs exynos_drm_mode_config_funcs = {