drm: kirin: Pass driver data to crtc init and plane init
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: 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> [jstultz: Reworded commit message] 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-25-john.stultz@linaro.org
This commit is contained in:
parent
2e89b4fbca
commit
28cd05eee4
|
@ -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,
|
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;
|
struct device_node *port;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -589,13 +590,13 @@ static int kirin_drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
|
||||||
crtc->port = port;
|
crtc->port = port;
|
||||||
|
|
||||||
ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
|
ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
|
||||||
ade_driver_data.crtc_funcs, NULL);
|
driver_data->crtc_funcs, NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DRM_ERROR("failed to init crtc.\n");
|
DRM_ERROR("failed to init crtc.\n");
|
||||||
return ret;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -894,21 +895,22 @@ static struct drm_plane_funcs ade_plane_funcs = {
|
||||||
|
|
||||||
static int kirin_drm_plane_init(struct drm_device *dev,
|
static int kirin_drm_plane_init(struct drm_device *dev,
|
||||||
struct kirin_plane *kplane,
|
struct kirin_plane *kplane,
|
||||||
enum drm_plane_type type)
|
enum drm_plane_type type,
|
||||||
|
const struct kirin_drm_data *driver_data)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
ret = drm_universal_plane_init(dev, &kplane->base, 1,
|
ret = drm_universal_plane_init(dev, &kplane->base, 1,
|
||||||
ade_driver_data.plane_funcs,
|
driver_data->plane_funcs,
|
||||||
ade_driver_data.channel_formats,
|
driver_data->channel_formats,
|
||||||
ade_driver_data.channel_formats_cnt,
|
driver_data->channel_formats_cnt,
|
||||||
NULL, type, NULL);
|
NULL, type, NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DRM_ERROR("fail to init plane, ch=%d\n", kplane->ch);
|
DRM_ERROR("fail to init plane, ch=%d\n", kplane->ch);
|
||||||
return ret;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1025,7 +1027,7 @@ static int ade_drm_init(struct platform_device *pdev)
|
||||||
else
|
else
|
||||||
type = DRM_PLANE_TYPE_OVERLAY;
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1033,7 +1035,8 @@ static int ade_drm_init(struct platform_device *pdev)
|
||||||
/* crtc init */
|
/* crtc init */
|
||||||
prim_plane = ade_driver_data.prim_plane;
|
prim_plane = ade_driver_data.prim_plane;
|
||||||
ret = kirin_drm_crtc_init(dev, &kcrtc->base,
|
ret = kirin_drm_crtc_init(dev, &kcrtc->base,
|
||||||
&ade->planes[prim_plane].base);
|
&ade->planes[prim_plane].base,
|
||||||
|
&ade_driver_data);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue