lkml.org 
[lkml]   [2019]   [Jul]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v3 25/26] drm: kirin: Pass driver data to crtc init and plane init
Date
From: Xu YiPing <xuyiping@hisilicon.com>

As part of refactoring the kirin driver to better support
different hardware revisions, this patch changes the code
via a passed in driver_data pointer, rather than hardcoding
them via ade_driver_data variable.

This will allow those funcitons to be later moved to the
generic kirin_drm_drv.c using alternative driver_data structures
that support other hardware.

Cc: Rongrong Zou <zourongrong@gmail.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel <dri-devel@lists.freedesktop.org>
Cc: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Xu YiPing <xuyiping@hisilicon.com>
[jstultz: Reworded commit message]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
v2: Whitespace fixups, commit message tweaks suggested by Sam.
---
.../gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 25 +++++++++++--------
1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index f729a1de6e14..ab0c5d03903d 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -572,7 +572,8 @@ static const struct drm_crtc_funcs ade_crtc_funcs = {
};

static int kirin_drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
- struct drm_plane *plane)
+ struct drm_plane *plane,
+ const struct kirin_drm_data *driver_data)
{
struct device_node *port;
int ret;
@@ -589,13 +590,13 @@ static int kirin_drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
crtc->port = port;

ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
- ade_driver_data.crtc_funcs, NULL);
+ driver_data->crtc_funcs, NULL);
if (ret) {
DRM_ERROR("failed to init crtc.\n");
return ret;
}

- drm_crtc_helper_add(crtc, ade_driver_data.crtc_helper_funcs);
+ drm_crtc_helper_add(crtc, driver_data->crtc_helper_funcs);

return 0;
}
@@ -894,21 +895,22 @@ static struct drm_plane_funcs ade_plane_funcs = {

static int kirin_drm_plane_init(struct drm_device *dev,
struct kirin_plane *kplane,
- enum drm_plane_type type)
+ enum drm_plane_type type,
+ const struct kirin_drm_data *driver_data)
{
int ret = 0;

ret = drm_universal_plane_init(dev, &kplane->base, 1,
- ade_driver_data.plane_funcs,
- ade_driver_data.channel_formats,
- ade_driver_data.channel_formats_cnt,
- NULL, type, NULL);
+ driver_data->plane_funcs,
+ driver_data->channel_formats,
+ driver_data->channel_formats_cnt,
+ NULL, type, NULL);
if (ret) {
DRM_ERROR("fail to init plane, ch=%d\n", kplane->ch);
return ret;
}

- drm_plane_helper_add(&kplane->base, ade_driver_data.plane_helper_funcs);
+ drm_plane_helper_add(&kplane->base, driver_data->plane_helper_funcs);

return 0;
}
@@ -1024,14 +1026,15 @@ static int ade_drm_init(struct platform_device *pdev)
else
type = DRM_PLANE_TYPE_OVERLAY;

- ret = kirin_drm_plane_init(dev, kplane, type);
+ ret = kirin_drm_plane_init(dev, kplane, type, &ade_driver_data);
if (ret)
return ret;
}

/* crtc init */
ret = kirin_drm_crtc_init(dev, &kcrtc->base,
- &ade->planes[ade_driver_data.prim_plane].base);
+ &ade->planes[ade_driver_data.prim_plane].base,
+ &ade_driver_data);
if (ret)
return ret;

--
2.17.1
\
 
 \ /
  Last update: 2019-08-01 06:10    [W:0.112 / U:0.248 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site