drm: kirin: Move plane number and primay plane in driver data

As part of refactoring the kirin driver to better support
different hardware revisions, this patch moves the number of
planes and the primary plane value to the kirin_drm_data
structure

This will make it easier to add support for new devices
via a new kirin_drm_data structure.

Cc: Rongrong Zou <zourongrong@gmail.com>
Cc: Xinliang Liu <z.liuxinliang@hisilicon.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>
Acked-by: Xinliang Liu <z.liuxinliang@hisilicon.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Xu YiPing <xuyiping@hisilicon.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190820230626.23253-17-john.stultz@linaro.org
This commit is contained in:
Xu YiPing 2019-08-20 23:06:17 +00:00 committed by Sam Ravnborg
parent bdaf419efe
commit 48fa7c17d1
2 changed files with 15 additions and 8 deletions

View file

@ -35,7 +35,6 @@
#include "kirin_drm_drv.h"
#include "kirin_ade_reg.h"
#define PRIMARY_CH ADE_CH1 /* primary plane */
#define OUT_OVLY ADE_OVLY2 /* output overlay compositor */
#define ADE_DEBUG 1
@ -991,7 +990,7 @@ static int ade_drm_init(struct platform_device *pdev)
struct kirin_plane *kplane;
enum drm_plane_type type;
int ret;
int i;
u32 ch;
ade = devm_kzalloc(dev->dev, sizeof(*ade), GFP_KERNEL);
if (!ade) {
@ -1015,12 +1014,15 @@ static int ade_drm_init(struct platform_device *pdev)
* TODO: Now only support primary plane, overlay planes
* need to do.
*/
for (i = 0; i < ADE_CH_NUM; i++) {
kplane = &ade->planes[i];
kplane->ch = i;
for (ch = 0; ch < ade_driver_data.num_planes; ch++) {
kplane = &ade->planes[ch];
kplane->ch = ch;
kplane->hw_ctx = ctx;
type = i == PRIMARY_CH ? DRM_PLANE_TYPE_PRIMARY :
DRM_PLANE_TYPE_OVERLAY;
if (ch == ade_driver_data.prim_plane)
type = DRM_PLANE_TYPE_PRIMARY;
else
type = DRM_PLANE_TYPE_OVERLAY;
ret = ade_plane_init(dev, kplane, type);
if (ret)
@ -1028,7 +1030,8 @@ static int ade_drm_init(struct platform_device *pdev)
}
/* crtc init */
ret = ade_crtc_init(dev, &kcrtc->base, &ade->planes[PRIMARY_CH].base);
ret = ade_crtc_init(dev, &kcrtc->base,
&ade->planes[ade_driver_data.prim_plane].base);
if (ret)
return ret;
@ -1047,6 +1050,8 @@ static const struct drm_mode_config_funcs ade_mode_config_funcs = {
};
struct kirin_drm_data ade_driver_data = {
.num_planes = ADE_CH_NUM,
.prim_plane = ADE_CH1,
.channel_formats = channel_formats,
.channel_formats_cnt = ARRAY_SIZE(channel_formats),
.crtc_helper_funcs = &ade_crtc_helper_funcs,

View file

@ -37,6 +37,8 @@ struct kirin_plane {
struct kirin_drm_data {
const u32 *channel_formats;
u32 channel_formats_cnt;
u32 num_planes;
u32 prim_plane;
const struct drm_crtc_helper_funcs *crtc_helper_funcs;
const struct drm_crtc_funcs *crtc_funcs;