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

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
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -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,
+2 −0
Original line number Diff line number Diff line
@@ -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;