Skip to content

Commit

Permalink
drm/sun4i: Add backend and tcon pointers to sun4i_crtc
Browse files Browse the repository at this point in the history
sun4i_crtc controls the backend and tcon hardware blocks of the display
pipeline. Instead of doing so through the master drm structure, leave
pointers to the corresponding backend and tcon in itself.

Also drop the drm_device pointer, since it is no longer needed.

The next step forward would be to pass the pointers in through
sun4i_crtc_init as parameters. This would make it easier to support
multiple display pipelines layer on.

Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
  • Loading branch information
Chen-Yu Tsai authored and Maxime Ripard committed Mar 7, 2017
1 parent ace6c09 commit 3c64fb3
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 12 deletions.
18 changes: 7 additions & 11 deletions drivers/gpu/drm/sun4i/sun4i_crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,11 @@ static void sun4i_crtc_atomic_flush(struct drm_crtc *crtc,
struct drm_crtc_state *old_state)
{
struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
struct sun4i_drv *drv = scrtc->drv;
struct drm_pending_vblank_event *event = crtc->state->event;

DRM_DEBUG_DRIVER("Committing plane changes\n");

sun4i_backend_commit(drv->backend);
sun4i_backend_commit(scrtc->backend);

if (event) {
crtc->state->event = NULL;
Expand All @@ -74,11 +73,10 @@ static void sun4i_crtc_atomic_flush(struct drm_crtc *crtc,
static void sun4i_crtc_disable(struct drm_crtc *crtc)
{
struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
struct sun4i_drv *drv = scrtc->drv;

DRM_DEBUG_DRIVER("Disabling the CRTC\n");

sun4i_tcon_disable(drv->tcon);
sun4i_tcon_disable(scrtc->tcon);

if (crtc->state->event && !crtc->state->active) {
spin_lock_irq(&crtc->dev->event_lock);
Expand All @@ -92,11 +90,10 @@ static void sun4i_crtc_disable(struct drm_crtc *crtc)
static void sun4i_crtc_enable(struct drm_crtc *crtc)
{
struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
struct sun4i_drv *drv = scrtc->drv;

DRM_DEBUG_DRIVER("Enabling the CRTC\n");

sun4i_tcon_enable(drv->tcon);
sun4i_tcon_enable(scrtc->tcon);
}

static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
Expand All @@ -109,23 +106,21 @@ static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
static int sun4i_crtc_enable_vblank(struct drm_crtc *crtc)
{
struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
struct sun4i_drv *drv = scrtc->drv;

DRM_DEBUG_DRIVER("Enabling VBLANK on crtc %p\n", crtc);

sun4i_tcon_enable_vblank(drv->tcon, true);
sun4i_tcon_enable_vblank(scrtc->tcon, true);

return 0;
}

static void sun4i_crtc_disable_vblank(struct drm_crtc *crtc)
{
struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
struct sun4i_drv *drv = scrtc->drv;

DRM_DEBUG_DRIVER("Disabling VBLANK on crtc %p\n", crtc);

sun4i_tcon_enable_vblank(drv->tcon, false);
sun4i_tcon_enable_vblank(scrtc->tcon, false);
}

static const struct drm_crtc_funcs sun4i_crtc_funcs = {
Expand All @@ -149,7 +144,8 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
scrtc = devm_kzalloc(drm->dev, sizeof(*scrtc), GFP_KERNEL);
if (!scrtc)
return ERR_PTR(-ENOMEM);
scrtc->drv = drv;
scrtc->backend = drv->backend;
scrtc->tcon = drv->tcon;

/* Create our layers */
scrtc->layers = sun4i_layers_init(drm);
Expand Down
3 changes: 2 additions & 1 deletion drivers/gpu/drm/sun4i/sun4i_crtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ struct sun4i_crtc {
struct drm_crtc crtc;
struct drm_pending_vblank_event *event;

struct sun4i_drv *drv;
struct sun4i_backend *backend;
struct sun4i_tcon *tcon;
struct sun4i_layer **layers;
};

Expand Down

0 comments on commit 3c64fb3

Please sign in to comment.