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

Commit b3f266e4 authored by Chen-Yu Tsai's avatar Chen-Yu Tsai Committed by Maxime Ripard
Browse files

drm/sun4i: Move layers from sun4i_drv to sun4i_crtc



This patch moves the sun4i_layers_init call from sun4i_drv_bind to
sun4i_crtc_init, and the layers pointer from struct sun4i_drv to
struct sun4i_crtc.

The layers are bound to a specific crtc, and they are not directly
used once initiated. They are used through their included drm_plane
structures.

Moving the layers into the crtc facilitates binding them to the crtc
explicitly, by setting the corresponding bit in their .possible_crtcs
fields right after the crtc is initialized. This is done in a later
patch.

Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent 2b2c22bf
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@
#include "sun4i_backend.h"
#include "sun4i_backend.h"
#include "sun4i_crtc.h"
#include "sun4i_crtc.h"
#include "sun4i_drv.h"
#include "sun4i_drv.h"
#include "sun4i_layer.h"
#include "sun4i_tcon.h"
#include "sun4i_tcon.h"


static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc,
static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc,
@@ -149,6 +150,13 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
		return ERR_PTR(-ENOMEM);
		return ERR_PTR(-ENOMEM);
	scrtc->drv = drv;
	scrtc->drv = drv;


	/* Create our layers */
	scrtc->layers = sun4i_layers_init(drm);
	if (IS_ERR(scrtc->layers)) {
		dev_err(drm->dev, "Couldn't create the planes\n");
		return ERR_CAST(scrtc->layers);
	}

	ret = drm_crtc_init_with_planes(drm, &scrtc->crtc,
	ret = drm_crtc_init_with_planes(drm, &scrtc->crtc,
					drv->primary,
					drv->primary,
					NULL,
					NULL,
+1 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ struct sun4i_crtc {
	struct drm_pending_vblank_event	*event;
	struct drm_pending_vblank_event	*event;


	struct sun4i_drv		*drv;
	struct sun4i_drv		*drv;
	struct sun4i_layer		**layers;
};
};


static inline struct sun4i_crtc *drm_crtc_to_sun4i_crtc(struct drm_crtc *crtc)
static inline struct sun4i_crtc *drm_crtc_to_sun4i_crtc(struct drm_crtc *crtc)
+1 −9
Original line number Original line Diff line number Diff line
@@ -23,7 +23,7 @@
#include "sun4i_crtc.h"
#include "sun4i_crtc.h"
#include "sun4i_drv.h"
#include "sun4i_drv.h"
#include "sun4i_framebuffer.h"
#include "sun4i_framebuffer.h"
#include "sun4i_layer.h"
#include "sun4i_tcon.h"


static const struct file_operations sun4i_drv_fops = {
static const struct file_operations sun4i_drv_fops = {
	.owner		= THIS_MODULE,
	.owner		= THIS_MODULE,
@@ -115,14 +115,6 @@ static int sun4i_drv_bind(struct device *dev)
		goto cleanup_mode_config;
		goto cleanup_mode_config;
	}
	}


	/* Create our layers */
	drv->layers = sun4i_layers_init(drm);
	if (IS_ERR(drv->layers)) {
		dev_err(drm->dev, "Couldn't create the planes\n");
		ret = PTR_ERR(drv->layers);
		goto cleanup_mode_config;
	}

	/* Create our CRTC */
	/* Create our CRTC */
	drv->crtc = sun4i_crtc_init(drm);
	drv->crtc = sun4i_crtc_init(drm);
	if (IS_ERR(drv->crtc)) {
	if (IS_ERR(drv->crtc)) {
+0 −2
Original line number Original line Diff line number Diff line
@@ -23,8 +23,6 @@ struct sun4i_drv {


	struct drm_plane	*primary;
	struct drm_plane	*primary;
	struct drm_fbdev_cma	*fbdev;
	struct drm_fbdev_cma	*fbdev;

	struct sun4i_layer	**layers;
};
};


#endif /* _SUN4I_DRV_H_ */
#endif /* _SUN4I_DRV_H_ */