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

Commit 132a5b91 authored by Joonyoung Shim's avatar Joonyoung Shim Committed by Dave Airlie
Browse files

drm/exynos: remove module of exynos drm subdrv



The exynos drm driver has several subdrv. They each can be module but it
causes unfixed probe order of exynodr drm driver and each subdrv. It
also needs some weird codes such as exynos_drm_fbdev_reinit and
exynos_drm_mode_group_reinit. This patch can remove weird codes and
clear codes through we doesn't modularity each subdrv.

Also this removes unnecessary codes related module.

Signed-off-by: default avatarJoonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 3ab09435
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
config DRM_EXYNOS
	tristate "DRM Support for Samsung SoC EXYNOS Series"
	depends on DRM && PLAT_SAMSUNG
	default	n
	select DRM_KMS_HELPER
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
@@ -12,16 +11,13 @@ config DRM_EXYNOS
	  If M is selected the module will be called exynosdrm.

config DRM_EXYNOS_FIMD
	tristate "Exynos DRM FIMD"
	bool "Exynos DRM FIMD"
	depends on DRM_EXYNOS && !FB_S3C
	default n
	help
	  Choose this option if you want to use Exynos FIMD for DRM.
	  If M is selected, the module will be called exynos_drm_fimd

config DRM_EXYNOS_HDMI
	tristate "Exynos DRM HDMI"
	bool "Exynos DRM HDMI"
	depends on DRM_EXYNOS && !VIDEO_SAMSUNG_S5P_TV
	help
	  Choose this option if you want to use Exynos HDMI for DRM.
	  If M is selected, the module will be called exynos_drm_hdmi
+6 −4
Original line number Diff line number Diff line
@@ -8,7 +8,9 @@ exynosdrm-y := exynos_drm_drv.o exynos_drm_encoder.o exynos_drm_connector.o \
		exynos_drm_buf.o exynos_drm_gem.o exynos_drm_core.o \
		exynos_drm_plane.o

exynosdrm-$(CONFIG_DRM_EXYNOS_FIMD)	+= exynos_drm_fimd.o
exynosdrm-$(CONFIG_DRM_EXYNOS_HDMI)	+= exynos_hdmi.o exynos_mixer.o \
					   exynos_ddc.o exynos_hdmiphy.o \
					   exynos_drm_hdmi.o

obj-$(CONFIG_DRM_EXYNOS)		+= exynosdrm.o
obj-$(CONFIG_DRM_EXYNOS_FIMD) += exynos_drm_fimd.o
obj-$(CONFIG_DRM_EXYNOS_HDMI) += exynos_hdmi.o exynos_mixer.o exynos_ddc.o \
				 exynos_hdmiphy.o exynos_drm_hdmi.o
+0 −1
Original line number Diff line number Diff line
@@ -55,4 +55,3 @@ struct i2c_driver ddc_driver = {
	.remove		= __devexit_p(s5p_ddc_remove),
	.command		= NULL,
};
EXPORT_SYMBOL(ddc_driver);
+0 −6
Original line number Diff line number Diff line
@@ -348,9 +348,3 @@ err_connector:
	kfree(exynos_connector);
	return NULL;
}

MODULE_AUTHOR("Inki Dae <inki.dae@samsung.com>");
MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
MODULE_AUTHOR("Seung-Woo Kim <sw0312.kim@samsung.com>");
MODULE_DESCRIPTION("Samsung SoC DRM Connector Driver");
MODULE_LICENSE("GPL");
+7 −105
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@
#include "exynos_drm_connector.h"
#include "exynos_drm_fbdev.h"

static DEFINE_MUTEX(exynos_drm_mutex);
static LIST_HEAD(exynos_drm_subdrv_list);
static struct drm_device *drm_dev;

@@ -116,13 +115,10 @@ int exynos_drm_device_register(struct drm_device *dev)
	if (!dev)
		return -EINVAL;

	if (drm_dev) {
		DRM_ERROR("Already drm device were registered\n");
		return -EBUSY;
	}
	drm_dev = dev;

	mutex_lock(&exynos_drm_mutex);
	list_for_each_entry_safe(subdrv, n, &exynos_drm_subdrv_list, list) {
		subdrv->drm_dev = dev;
		err = exynos_drm_subdrv_probe(dev, subdrv);
		if (err) {
			DRM_DEBUG("exynos drm subdrv probe failed.\n");
@@ -130,9 +126,6 @@ int exynos_drm_device_register(struct drm_device *dev)
		}
	}

	drm_dev = dev;
	mutex_unlock(&exynos_drm_mutex);

	return 0;
}
EXPORT_SYMBOL_GPL(exynos_drm_device_register);
@@ -143,86 +136,28 @@ int exynos_drm_device_unregister(struct drm_device *dev)

	DRM_DEBUG_DRIVER("%s\n", __FILE__);

	if (!dev || dev != drm_dev) {
	if (!dev) {
		WARN(1, "Unexpected drm device unregister!\n");
		return -EINVAL;
	}

	mutex_lock(&exynos_drm_mutex);
	list_for_each_entry(subdrv, &exynos_drm_subdrv_list, list)
		exynos_drm_subdrv_remove(dev, subdrv);

	drm_dev = NULL;
	mutex_unlock(&exynos_drm_mutex);

	return 0;
}
EXPORT_SYMBOL_GPL(exynos_drm_device_unregister);

static int exynos_drm_mode_group_reinit(struct drm_device *dev)
{
	struct drm_mode_group *group = &dev->primary->mode_group;
	uint32_t *id_list = group->id_list;
	int ret;

	DRM_DEBUG_DRIVER("%s\n", __FILE__);

	ret = drm_mode_group_init_legacy_group(dev, group);
	if (ret < 0)
		return ret;

	kfree(id_list);
	return 0;
}

int exynos_drm_subdrv_register(struct exynos_drm_subdrv *subdrv)
{
	int err;

	DRM_DEBUG_DRIVER("%s\n", __FILE__);

	if (!subdrv)
		return -EINVAL;

	mutex_lock(&exynos_drm_mutex);
	if (drm_dev) {
		err = exynos_drm_subdrv_probe(drm_dev, subdrv);
		if (err) {
			DRM_ERROR("failed to probe exynos drm subdrv\n");
			mutex_unlock(&exynos_drm_mutex);
			return err;
		}

		/* setup possible_clones. */
		exynos_drm_encoder_setup(drm_dev);

		/*
		 * if any specific driver such as fimd or hdmi driver called
		 * exynos_drm_subdrv_register() later than drm_load(),
		 * the fb helper should be re-initialized and re-configured.
		 */
		err = exynos_drm_fbdev_reinit(drm_dev);
		if (err) {
			DRM_ERROR("failed to reinitialize exynos drm fbdev\n");
			exynos_drm_subdrv_remove(drm_dev, subdrv);
			mutex_unlock(&exynos_drm_mutex);
			return err;
		}

		err = exynos_drm_mode_group_reinit(drm_dev);
		if (err) {
			DRM_ERROR("failed to reinitialize mode group\n");
			exynos_drm_fbdev_fini(drm_dev);
			exynos_drm_subdrv_remove(drm_dev, subdrv);
			mutex_unlock(&exynos_drm_mutex);
			return err;
		}
	}

	subdrv->drm_dev = drm_dev;

	list_add_tail(&subdrv->list, &exynos_drm_subdrv_list);
	mutex_unlock(&exynos_drm_mutex);

	return 0;
}
@@ -230,46 +165,13 @@ EXPORT_SYMBOL_GPL(exynos_drm_subdrv_register);

int exynos_drm_subdrv_unregister(struct exynos_drm_subdrv *subdrv)
{
	int ret = -EFAULT;

	DRM_DEBUG_DRIVER("%s\n", __FILE__);

	if (!subdrv) {
		DRM_DEBUG("Unexpected exynos drm subdrv unregister!\n");
		return ret;
	}
	if (!subdrv)
		return -EINVAL;

	mutex_lock(&exynos_drm_mutex);
	if (drm_dev) {
		exynos_drm_subdrv_remove(drm_dev, subdrv);
	list_del(&subdrv->list);

		/*
		 * fb helper should be updated once a sub driver is released
		 * to re-configure crtc and connector and also to re-setup
		 * drm framebuffer.
		 */
		ret = exynos_drm_fbdev_reinit(drm_dev);
		if (ret < 0) {
			DRM_ERROR("failed fb helper reinit.\n");
			goto fail;
		}

		ret = exynos_drm_mode_group_reinit(drm_dev);
		if (ret < 0) {
			DRM_ERROR("failed drm mode group reinit.\n");
			goto fail;
		}
	}

fail:
	mutex_unlock(&exynos_drm_mutex);
	return ret;
	return 0;
}
EXPORT_SYMBOL_GPL(exynos_drm_subdrv_unregister);

MODULE_AUTHOR("Inki Dae <inki.dae@samsung.com>");
MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
MODULE_AUTHOR("Seung-Woo Kim <sw0312.kim@samsung.com>");
MODULE_DESCRIPTION("Samsung SoC DRM Core Driver");
MODULE_LICENSE("GPL");
Loading