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

Commit 0a4587a0 authored by Linus Walleij's avatar Linus Walleij
Browse files

drm/pl111: Fix module probe bug



Commit a30933c27602 ("drm/pl111: Support the Versatile Express")
Added a second module using the builtin_platform_driver() call,
which works fine as long as you do not try to build the PL111
driver as a module, because a module can only have one initcall
and cause the following build bug:

(...) multiple definition of `init_module' (...)

Reported-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: Robin Murphy <robin.murphy@arm.com>
Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Fixes: a30933c27602 ("drm/pl111: Support the Versatile Express")
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20180503140431.5798-1-linus.walleij@linaro.org
parent 0d49f303
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -326,6 +326,13 @@ int pl111_versatile_init(struct device *dev, struct pl111_drm_dev_private *priv)
	if (versatile_clcd_type == VEXPRESS_CLCD_V2M) {
		struct platform_device *pdev;

		/* Registers a driver for the muxfpga */
		ret = vexpress_muxfpga_init();
		if (ret) {
			dev_err(dev, "unable to initialize muxfpga driver\n");
			return ret;
		}

		/* Call into deep Vexpress configuration API */
		pdev = of_find_device_by_node(np);
		if (!pdev) {
+10 −1
Original line number Diff line number Diff line
@@ -122,4 +122,13 @@ static struct platform_driver vexpress_muxfpga_driver = {
	.probe = vexpress_muxfpga_probe,
};

builtin_platform_driver(vexpress_muxfpga_driver);
int vexpress_muxfpga_init(void)
{
	int ret;

	ret = platform_driver_register(&vexpress_muxfpga_driver);
	/* -EBUSY just means this driver is already registered */
	if (ret == -EBUSY)
		ret = 0;
	return ret;
}
+7 −0
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ int pl111_vexpress_clcd_init(struct device *dev,
			     struct pl111_drm_dev_private *priv,
			     struct regmap *map);

int vexpress_muxfpga_init(void);

#else

static inline int pl111_vexpress_clcd_init(struct device *dev,
@@ -19,4 +21,9 @@ static inline int pl111_vexpress_clcd_init(struct device *dev,
	return -ENODEV;
}

static inline int vexpress_muxfpga_init(void)
{
	return 0;
}

#endif