mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-07 07:08:07 +00:00
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: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
This commit is contained in:
parent
2b2c22bf1c
commit
b3f266e428
4 changed files with 10 additions and 11 deletions
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue