Commit 48fa7c17 authored by Xu YiPing's avatar Xu YiPing Committed by Sam Ravnborg

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: default avatarXinliang Liu <z.liuxinliang@hisilicon.com>
Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarXu YiPing <xuyiping@hisilicon.com>
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190820230626.23253-17-john.stultz@linaro.org
parent bdaf419e
......@@ -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,
......
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment