Commit e4563f6b authored by Gabriel Krisman Bertazi's avatar Gabriel Krisman Bertazi Committed by Daniel Vetter

drm: Rely on mode_config data for fb_helper initialization

Instead of receiving the num_crts as a parameter, we can read it
directly from the mode_config structure.  I audited the drivers that
invoke this helper and I believe all of them initialize the mode_config
struct accordingly, prior to calling the fb_helper.

I used the following coccinelle hack to make this transformation, except
for the function headers and comment updates.  The first and second
rules are split because I couldn't find a way to remove the unused
temporary variables at the same time I removed the parameter.

// <smpl>
@r@
expression A,B,D,E;
identifier C;
@@
(
- drm_fb_helper_init(A,B,C,D)
+ drm_fb_helper_init(A,B,D)
|
- drm_fbdev_cma_init_with_funcs(A,B,C,D,E)
+ drm_fbdev_cma_init_with_funcs(A,B,D,E)
|
- drm_fbdev_cma_init(A,B,C,D)
+ drm_fbdev_cma_init(A,B,D)
)

@@
expression A,B,C,D,E;
@@
(
- drm_fb_helper_init(A,B,C,D)
+ drm_fb_helper_init(A,B,D)
|
- drm_fbdev_cma_init_with_funcs(A,B,C,D,E)
+ drm_fbdev_cma_init_with_funcs(A,B,D,E)
|
- drm_fbdev_cma_init(A,B,C,D)
+ drm_fbdev_cma_init(A,B,D)
)

@@
identifier r.C;
type T;
expression V;
@@
- T C;
<...
when != C
- C = V;
...>
// </smpl>

Changes since v1:
 - Rebased on top of the tip of drm-misc-next.
 - Remove mention to sti since a proper fix got merged.
Suggested-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@collabora.co.uk>
Reviewed-by: default avatarEric Anholt <eric@anholt.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20170202162640.27261-1-krisman@collabora.co.uk
parent f30c9257
...@@ -374,7 +374,6 @@ int amdgpu_fbdev_init(struct amdgpu_device *adev) ...@@ -374,7 +374,6 @@ int amdgpu_fbdev_init(struct amdgpu_device *adev)
&amdgpu_fb_helper_funcs); &amdgpu_fb_helper_funcs);
ret = drm_fb_helper_init(adev->ddev, &rfbdev->helper, ret = drm_fb_helper_init(adev->ddev, &rfbdev->helper,
adev->mode_info.num_crtc,
AMDGPUFB_CONN_LIMIT); AMDGPUFB_CONN_LIMIT);
if (ret) { if (ret) {
kfree(rfbdev); kfree(rfbdev);
......
...@@ -135,8 +135,7 @@ static int arcpgu_load(struct drm_device *drm) ...@@ -135,8 +135,7 @@ static int arcpgu_load(struct drm_device *drm)
drm_kms_helper_poll_init(drm); drm_kms_helper_poll_init(drm);
arcpgu->fbdev = drm_fbdev_cma_init(drm, 16, arcpgu->fbdev = drm_fbdev_cma_init(drm, 16,
drm->mode_config.num_crtc, drm->mode_config.num_connector);
drm->mode_config.num_connector);
if (IS_ERR(arcpgu->fbdev)) { if (IS_ERR(arcpgu->fbdev)) {
ret = PTR_ERR(arcpgu->fbdev); ret = PTR_ERR(arcpgu->fbdev);
arcpgu->fbdev = NULL; arcpgu->fbdev = NULL;
......
...@@ -349,7 +349,7 @@ static int hdlcd_drm_bind(struct device *dev) ...@@ -349,7 +349,7 @@ static int hdlcd_drm_bind(struct device *dev)
drm_mode_config_reset(drm); drm_mode_config_reset(drm);
drm_kms_helper_poll_init(drm); drm_kms_helper_poll_init(drm);
hdlcd->fbdev = drm_fbdev_cma_init(drm, 32, drm->mode_config.num_crtc, hdlcd->fbdev = drm_fbdev_cma_init(drm, 32,
drm->mode_config.num_connector); drm->mode_config.num_connector);
if (IS_ERR(hdlcd->fbdev)) { if (IS_ERR(hdlcd->fbdev)) {
......
...@@ -457,7 +457,7 @@ static int malidp_bind(struct device *dev) ...@@ -457,7 +457,7 @@ static int malidp_bind(struct device *dev)
drm_mode_config_reset(drm); drm_mode_config_reset(drm);
malidp->fbdev = drm_fbdev_cma_init(drm, 32, drm->mode_config.num_crtc, malidp->fbdev = drm_fbdev_cma_init(drm, 32,
drm->mode_config.num_connector); drm->mode_config.num_connector);
if (IS_ERR(malidp->fbdev)) { if (IS_ERR(malidp->fbdev)) {
......
...@@ -137,7 +137,7 @@ int armada_fbdev_init(struct drm_device *dev) ...@@ -137,7 +137,7 @@ int armada_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, fbh, &armada_fb_helper_funcs); drm_fb_helper_prepare(dev, fbh, &armada_fb_helper_funcs);
ret = drm_fb_helper_init(dev, fbh, 1, 1); ret = drm_fb_helper_init(dev, fbh, 1);
if (ret) { if (ret) {
DRM_ERROR("failed to initialize drm fb helper\n"); DRM_ERROR("failed to initialize drm fb helper\n");
goto err_fb_helper; goto err_fb_helper;
......
...@@ -315,8 +315,7 @@ int ast_fbdev_init(struct drm_device *dev) ...@@ -315,8 +315,7 @@ int ast_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, &afbdev->helper, &ast_fb_helper_funcs); drm_fb_helper_prepare(dev, &afbdev->helper, &ast_fb_helper_funcs);
ret = drm_fb_helper_init(dev, &afbdev->helper, ret = drm_fb_helper_init(dev, &afbdev->helper, 1);
1, 1);
if (ret) if (ret)
goto free; goto free;
......
...@@ -647,7 +647,6 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev) ...@@ -647,7 +647,6 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
platform_set_drvdata(pdev, dev); platform_set_drvdata(pdev, dev);
dc->fbdev = drm_fbdev_cma_init(dev, 24, dc->fbdev = drm_fbdev_cma_init(dev, 24,
dev->mode_config.num_crtc,
dev->mode_config.num_connector); dev->mode_config.num_connector);
if (IS_ERR(dc->fbdev)) if (IS_ERR(dc->fbdev))
dc->fbdev = NULL; dc->fbdev = NULL;
......
...@@ -169,8 +169,7 @@ int bochs_fbdev_init(struct bochs_device *bochs) ...@@ -169,8 +169,7 @@ int bochs_fbdev_init(struct bochs_device *bochs)
drm_fb_helper_prepare(bochs->dev, &bochs->fb.helper, drm_fb_helper_prepare(bochs->dev, &bochs->fb.helper,
&bochs_fb_helper_funcs); &bochs_fb_helper_funcs);
ret = drm_fb_helper_init(bochs->dev, &bochs->fb.helper, ret = drm_fb_helper_init(bochs->dev, &bochs->fb.helper, 1);
1, 1);
if (ret) if (ret)
return ret; return ret;
......
...@@ -289,7 +289,7 @@ int cirrus_fbdev_init(struct cirrus_device *cdev) ...@@ -289,7 +289,7 @@ int cirrus_fbdev_init(struct cirrus_device *cdev)
&cirrus_fb_helper_funcs); &cirrus_fb_helper_funcs);
ret = drm_fb_helper_init(cdev->dev, &gfbdev->helper, ret = drm_fb_helper_init(cdev->dev, &gfbdev->helper,
cdev->num_crtc, CIRRUSFB_CONN_LIMIT); CIRRUSFB_CONN_LIMIT);
if (ret) if (ret)
return ret; return ret;
......
...@@ -489,15 +489,14 @@ static const struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = { ...@@ -489,15 +489,14 @@ static const struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = {
* drm_fbdev_cma_init_with_funcs() - Allocate and initializes a drm_fbdev_cma struct * drm_fbdev_cma_init_with_funcs() - Allocate and initializes a drm_fbdev_cma struct
* @dev: DRM device * @dev: DRM device
* @preferred_bpp: Preferred bits per pixel for the device * @preferred_bpp: Preferred bits per pixel for the device
* @num_crtc: Number of CRTCs
* @max_conn_count: Maximum number of connectors * @max_conn_count: Maximum number of connectors
* @funcs: fb helper functions, in particular a custom dirty() callback * @funcs: fb helper functions, in particular a custom dirty() callback
* *
* Returns a newly allocated drm_fbdev_cma struct or a ERR_PTR. * Returns a newly allocated drm_fbdev_cma struct or a ERR_PTR.
*/ */
struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev, struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
unsigned int preferred_bpp, unsigned int num_crtc, unsigned int preferred_bpp, unsigned int max_conn_count,
unsigned int max_conn_count, const struct drm_framebuffer_funcs *funcs) const struct drm_framebuffer_funcs *funcs)
{ {
struct drm_fbdev_cma *fbdev_cma; struct drm_fbdev_cma *fbdev_cma;
struct drm_fb_helper *helper; struct drm_fb_helper *helper;
...@@ -514,7 +513,7 @@ struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev, ...@@ -514,7 +513,7 @@ struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
drm_fb_helper_prepare(dev, helper, &drm_fb_cma_helper_funcs); drm_fb_helper_prepare(dev, helper, &drm_fb_cma_helper_funcs);
ret = drm_fb_helper_init(dev, helper, num_crtc, max_conn_count); ret = drm_fb_helper_init(dev, helper, max_conn_count);
if (ret < 0) { if (ret < 0) {
dev_err(dev->dev, "Failed to initialize drm fb helper.\n"); dev_err(dev->dev, "Failed to initialize drm fb helper.\n");
goto err_free; goto err_free;
...@@ -554,11 +553,11 @@ EXPORT_SYMBOL_GPL(drm_fbdev_cma_init_with_funcs); ...@@ -554,11 +553,11 @@ EXPORT_SYMBOL_GPL(drm_fbdev_cma_init_with_funcs);
* Returns a newly allocated drm_fbdev_cma struct or a ERR_PTR. * Returns a newly allocated drm_fbdev_cma struct or a ERR_PTR.
*/ */
struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev, struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev,
unsigned int preferred_bpp, unsigned int num_crtc, unsigned int preferred_bpp, unsigned int max_conn_count)
unsigned int max_conn_count)
{ {
return drm_fbdev_cma_init_with_funcs(dev, preferred_bpp, num_crtc, return drm_fbdev_cma_init_with_funcs(dev, preferred_bpp,
max_conn_count, &drm_fb_cma_funcs); max_conn_count,
&drm_fb_cma_funcs);
} }
EXPORT_SYMBOL_GPL(drm_fbdev_cma_init); EXPORT_SYMBOL_GPL(drm_fbdev_cma_init);
......
...@@ -712,7 +712,6 @@ EXPORT_SYMBOL(drm_fb_helper_prepare); ...@@ -712,7 +712,6 @@ EXPORT_SYMBOL(drm_fb_helper_prepare);
* drm_fb_helper_init - initialize a drm_fb_helper structure * drm_fb_helper_init - initialize a drm_fb_helper structure
* @dev: drm device * @dev: drm device
* @fb_helper: driver-allocated fbdev helper structure to initialize * @fb_helper: driver-allocated fbdev helper structure to initialize
* @crtc_count: maximum number of crtcs to support in this fbdev emulation
* @max_conn_count: max connector count * @max_conn_count: max connector count
* *
* This allocates the structures for the fbdev helper with the given limits. * This allocates the structures for the fbdev helper with the given limits.
...@@ -727,9 +726,10 @@ EXPORT_SYMBOL(drm_fb_helper_prepare); ...@@ -727,9 +726,10 @@ EXPORT_SYMBOL(drm_fb_helper_prepare);
*/ */
int drm_fb_helper_init(struct drm_device *dev, int drm_fb_helper_init(struct drm_device *dev,
struct drm_fb_helper *fb_helper, struct drm_fb_helper *fb_helper,
int crtc_count, int max_conn_count) int max_conn_count)
{ {
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct drm_mode_config *config = &dev->mode_config;
int i; int i;
if (!drm_fbdev_emulation) if (!drm_fbdev_emulation)
...@@ -738,11 +738,11 @@ int drm_fb_helper_init(struct drm_device *dev, ...@@ -738,11 +738,11 @@ int drm_fb_helper_init(struct drm_device *dev,
if (!max_conn_count) if (!max_conn_count)
return -EINVAL; return -EINVAL;
fb_helper->crtc_info = kcalloc(crtc_count, sizeof(struct drm_fb_helper_crtc), GFP_KERNEL); fb_helper->crtc_info = kcalloc(config->num_crtc, sizeof(struct drm_fb_helper_crtc), GFP_KERNEL);
if (!fb_helper->crtc_info) if (!fb_helper->crtc_info)
return -ENOMEM; return -ENOMEM;
fb_helper->crtc_count = crtc_count; fb_helper->crtc_count = config->num_crtc;
fb_helper->connector_info = kcalloc(dev->mode_config.num_connector, sizeof(struct drm_fb_helper_connector *), GFP_KERNEL); fb_helper->connector_info = kcalloc(dev->mode_config.num_connector, sizeof(struct drm_fb_helper_connector *), GFP_KERNEL);
if (!fb_helper->connector_info) { if (!fb_helper->connector_info) {
kfree(fb_helper->crtc_info); kfree(fb_helper->crtc_info);
...@@ -751,7 +751,7 @@ int drm_fb_helper_init(struct drm_device *dev, ...@@ -751,7 +751,7 @@ int drm_fb_helper_init(struct drm_device *dev,
fb_helper->connector_info_alloc_count = dev->mode_config.num_connector; fb_helper->connector_info_alloc_count = dev->mode_config.num_connector;
fb_helper->connector_count = 0; fb_helper->connector_count = 0;
for (i = 0; i < crtc_count; i++) { for (i = 0; i < fb_helper->crtc_count; i++) {
fb_helper->crtc_info[i].mode_set.connectors = fb_helper->crtc_info[i].mode_set.connectors =
kcalloc(max_conn_count, kcalloc(max_conn_count,
sizeof(struct drm_connector *), sizeof(struct drm_connector *),
......
...@@ -208,7 +208,6 @@ int exynos_drm_fbdev_init(struct drm_device *dev) ...@@ -208,7 +208,6 @@ int exynos_drm_fbdev_init(struct drm_device *dev)
struct exynos_drm_fbdev *fbdev; struct exynos_drm_fbdev *fbdev;
struct exynos_drm_private *private = dev->dev_private; struct exynos_drm_private *private = dev->dev_private;
struct drm_fb_helper *helper; struct drm_fb_helper *helper;
unsigned int num_crtc;
int ret; int ret;
if (!dev->mode_config.num_crtc || !dev->mode_config.num_connector) if (!dev->mode_config.num_crtc || !dev->mode_config.num_connector)
...@@ -225,9 +224,7 @@ int exynos_drm_fbdev_init(struct drm_device *dev) ...@@ -225,9 +224,7 @@ int exynos_drm_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, helper, &exynos_drm_fb_helper_funcs); drm_fb_helper_prepare(dev, helper, &exynos_drm_fb_helper_funcs);
num_crtc = dev->mode_config.num_crtc; ret = drm_fb_helper_init(dev, helper, MAX_CONNECTOR);
ret = drm_fb_helper_init(dev, helper, num_crtc, MAX_CONNECTOR);
if (ret < 0) { if (ret < 0) {
DRM_ERROR("failed to initialize drm fb helper.\n"); DRM_ERROR("failed to initialize drm fb helper.\n");
goto err_init; goto err_init;
......
...@@ -94,7 +94,7 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags) ...@@ -94,7 +94,7 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags)
"Invalid legacyfb_depth. Defaulting to 24bpp\n"); "Invalid legacyfb_depth. Defaulting to 24bpp\n");
legacyfb_depth = 24; legacyfb_depth = 24;
} }
fsl_dev->fbdev = drm_fbdev_cma_init(dev, legacyfb_depth, 1, 1); fsl_dev->fbdev = drm_fbdev_cma_init(dev, legacyfb_depth, 1);
if (IS_ERR(fsl_dev->fbdev)) { if (IS_ERR(fsl_dev->fbdev)) {
ret = PTR_ERR(fsl_dev->fbdev); ret = PTR_ERR(fsl_dev->fbdev);
fsl_dev->fbdev = NULL; fsl_dev->fbdev = NULL;
......
...@@ -564,7 +564,7 @@ int psb_fbdev_init(struct drm_device *dev) ...@@ -564,7 +564,7 @@ int psb_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, &fbdev->psb_fb_helper, &psb_fb_helper_funcs); drm_fb_helper_prepare(dev, &fbdev->psb_fb_helper, &psb_fb_helper_funcs);
ret = drm_fb_helper_init(dev, &fbdev->psb_fb_helper, ret = drm_fb_helper_init(dev, &fbdev->psb_fb_helper,
dev_priv->ops->crtcs, INTELFB_CONN_LIMIT); INTELFB_CONN_LIMIT);
if (ret) if (ret)
goto free; goto free;
......
...@@ -200,8 +200,7 @@ int hibmc_fbdev_init(struct hibmc_drm_private *priv) ...@@ -200,8 +200,7 @@ int hibmc_fbdev_init(struct hibmc_drm_private *priv)
&hibmc_fbdev_helper_funcs); &hibmc_fbdev_helper_funcs);
/* Now just one crtc and one channel */ /* Now just one crtc and one channel */
ret = drm_fb_helper_init(priv->dev, ret = drm_fb_helper_init(priv->dev, &hifbdev->helper, 1);
&hifbdev->helper, 1, 1);
if (ret) { if (ret) {
DRM_ERROR("failed to initialize fb helper: %d\n", ret); DRM_ERROR("failed to initialize fb helper: %d\n", ret);
return ret; return ret;
......
...@@ -59,8 +59,7 @@ static void kirin_fbdev_output_poll_changed(struct drm_device *dev) ...@@ -59,8 +59,7 @@ static void kirin_fbdev_output_poll_changed(struct drm_device *dev)
drm_fbdev_cma_hotplug_event(priv->fbdev); drm_fbdev_cma_hotplug_event(priv->fbdev);
} else { } else {
priv->fbdev = drm_fbdev_cma_init(dev, 32, priv->fbdev = drm_fbdev_cma_init(dev, 32,
dev->mode_config.num_crtc, dev->mode_config.num_connector);
dev->mode_config.num_connector);
if (IS_ERR(priv->fbdev)) if (IS_ERR(priv->fbdev))
priv->fbdev = NULL; priv->fbdev = NULL;
} }
......
...@@ -713,8 +713,7 @@ int intel_fbdev_init(struct drm_device *dev) ...@@ -713,8 +713,7 @@ int intel_fbdev_init(struct drm_device *dev)
if (!intel_fbdev_init_bios(dev, ifbdev)) if (!intel_fbdev_init_bios(dev, ifbdev))
ifbdev->preferred_bpp = 32; ifbdev->preferred_bpp = 32;
ret = drm_fb_helper_init(dev, &ifbdev->helper, ret = drm_fb_helper_init(dev, &ifbdev->helper, 4);
INTEL_INFO(dev_priv)->num_pipes, 4);
if (ret) { if (ret) {
kfree(ifbdev); kfree(ifbdev);
return ret; return ret;
......
...@@ -389,8 +389,7 @@ static int imx_drm_bind(struct device *dev) ...@@ -389,8 +389,7 @@ static int imx_drm_bind(struct device *dev)
dev_warn(dev, "Invalid legacyfb_depth. Defaulting to 16bpp\n"); dev_warn(dev, "Invalid legacyfb_depth. Defaulting to 16bpp\n");
legacyfb_depth = 16; legacyfb_depth = 16;
} }
imxdrm->fbhelper = drm_fbdev_cma_init(drm, legacyfb_depth, imxdrm->fbhelper = drm_fbdev_cma_init(drm, legacyfb_depth, MAX_CRTC);
drm->mode_config.num_crtc, MAX_CRTC);
if (IS_ERR(imxdrm->fbhelper)) { if (IS_ERR(imxdrm->fbhelper)) {
ret = PTR_ERR(imxdrm->fbhelper); ret = PTR_ERR(imxdrm->fbhelper);
imxdrm->fbhelper = NULL; imxdrm->fbhelper = NULL;
......
...@@ -279,7 +279,6 @@ static int meson_drv_probe(struct platform_device *pdev) ...@@ -279,7 +279,6 @@ static int meson_drv_probe(struct platform_device *pdev)
drm->mode_config.funcs = &meson_mode_config_funcs; drm->mode_config.funcs = &meson_mode_config_funcs;
priv->fbdev = drm_fbdev_cma_init(drm, 32, priv->fbdev = drm_fbdev_cma_init(drm, 32,
drm->mode_config.num_crtc,
drm->mode_config.num_connector); drm->mode_config.num_connector);
if (IS_ERR(priv->fbdev)) { if (IS_ERR(priv->fbdev)) {
ret = PTR_ERR(priv->fbdev); ret = PTR_ERR(priv->fbdev);
......
...@@ -286,7 +286,7 @@ int mgag200_fbdev_init(struct mga_device *mdev) ...@@ -286,7 +286,7 @@ int mgag200_fbdev_init(struct mga_device *mdev)
drm_fb_helper_prepare(mdev->dev, &mfbdev->helper, &mga_fb_helper_funcs); drm_fb_helper_prepare(mdev->dev, &mfbdev->helper, &mga_fb_helper_funcs);
ret = drm_fb_helper_init(mdev->dev, &mfbdev->helper, ret = drm_fb_helper_init(mdev->dev, &mfbdev->helper,
mdev->num_crtc, MGAG200FB_CONN_LIMIT); MGAG200FB_CONN_LIMIT);
if (ret) if (ret)
goto err_fb_helper; goto err_fb_helper;
......
...@@ -201,8 +201,7 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev) ...@@ -201,8 +201,7 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, helper, &msm_fb_helper_funcs); drm_fb_helper_prepare(dev, helper, &msm_fb_helper_funcs);
ret = drm_fb_helper_init(dev, helper, ret = drm_fb_helper_init(dev, helper, priv->num_connectors);
priv->num_crtcs, priv->num_connectors);
if (ret) { if (ret) {
dev_err(dev->dev, "could not init fbdev: ret=%d\n", ret); dev_err(dev->dev, "could not init fbdev: ret=%d\n", ret);
goto fail; goto fail;
......
...@@ -218,7 +218,7 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags) ...@@ -218,7 +218,7 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags)
drm_kms_helper_poll_init(drm); drm_kms_helper_poll_init(drm);
mxsfb->fbdev = drm_fbdev_cma_init(drm, 32, drm->mode_config.num_crtc, mxsfb->fbdev = drm_fbdev_cma_init(drm, 32,
drm->mode_config.num_connector); drm->mode_config.num_connector);
if (IS_ERR(mxsfb->fbdev)) { if (IS_ERR(mxsfb->fbdev)) {
mxsfb->fbdev = NULL; mxsfb->fbdev = NULL;
......
...@@ -507,8 +507,7 @@ nouveau_fbcon_init(struct drm_device *dev) ...@@ -507,8 +507,7 @@ nouveau_fbcon_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, &fbcon->helper, &nouveau_fbcon_helper_funcs); drm_fb_helper_prepare(dev, &fbcon->helper, &nouveau_fbcon_helper_funcs);
ret = drm_fb_helper_init(dev, &fbcon->helper, ret = drm_fb_helper_init(dev, &fbcon->helper, 4);
dev->mode_config.num_crtc, 4);
if (ret) if (ret)
goto free; goto free;
......
...@@ -263,8 +263,7 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev) ...@@ -263,8 +263,7 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, helper, &omap_fb_helper_funcs); drm_fb_helper_prepare(dev, helper, &omap_fb_helper_funcs);
ret = drm_fb_helper_init(dev, helper, ret = drm_fb_helper_init(dev, helper, priv->num_connectors);
priv->num_crtcs, priv->num_connectors);
if (ret) { if (ret) {
dev_err(dev->dev, "could not init fbdev: ret=%d\n", ret); dev_err(dev->dev, "could not init fbdev: ret=%d\n", ret);
goto fail; goto fail;
......
...@@ -399,7 +399,6 @@ int qxl_fbdev_init(struct qxl_device *qdev) ...@@ -399,7 +399,6 @@ int qxl_fbdev_init(struct qxl_device *qdev)
&qxl_fb_helper_funcs); &qxl_fb_helper_funcs);
ret = drm_fb_helper_init(&qdev->ddev, &qfbdev->helper, ret = drm_fb_helper_init(&qdev->ddev, &qfbdev->helper,
qxl_num_crtc,
QXLFB_CONN_LIMIT); QXLFB_CONN_LIMIT);
if (ret) if (ret)
goto free; goto free;
......
...@@ -366,7 +366,6 @@ int radeon_fbdev_init(struct radeon_device *rdev) ...@@ -366,7 +366,6 @@ int radeon_fbdev_init(struct radeon_device *rdev)
&radeon_fb_helper_funcs); &radeon_fb_helper_funcs);
ret = drm_fb_helper_init(rdev->ddev, &rfbdev->helper, ret = drm_fb_helper_init(rdev->ddev, &rfbdev->helper,
rdev->num_crtc,
RADEONFB_CONN_LIMIT); RADEONFB_CONN_LIMIT);
if (ret) if (ret)
goto free; goto free;
......
...@@ -662,7 +662,7 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu) ...@@ -662,7 +662,7 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
drm_kms_helper_poll_init(dev); drm_kms_helper_poll_init(dev);
if (dev->mode_config.num_connector) { if (dev->mode_config.num_connector) {
fbdev = drm_fbdev_cma_init(dev, 32, dev->mode_config.num_crtc, fbdev = drm_fbdev_cma_init(dev, 32,
dev->mode_config.num_connector); dev->mode_config.num_connector);
if (IS_ERR(fbdev)) if (IS_ERR(fbdev))
return PTR_ERR(fbdev); return PTR_ERR(fbdev);
......
...@@ -129,19 +129,16 @@ int rockchip_drm_fbdev_init(struct drm_device *dev) ...@@ -129,19 +129,16 @@ int rockchip_drm_fbdev_init(struct drm_device *dev)
{ {
struct rockchip_drm_private *private = dev->dev_private; struct rockchip_drm_private *private = dev->dev_private;
struct drm_fb_helper *helper; struct drm_fb_helper *helper;
unsigned int num_crtc;
int ret; int ret;
if (!dev->mode_config.num_crtc || !dev->mode_config.num_connector) if (!dev->mode_config.num_crtc || !dev->mode_config.num_connector)
return -EINVAL; return -EINVAL;
num_crtc = dev->mode_config.num_crtc;
helper = &private->fbdev_helper; helper = &private->fbdev_helper;
drm_fb_helper_prepare(dev, helper, &rockchip_drm_fb_helper_funcs); drm_fb_helper_prepare(dev, helper, &rockchip_drm_fb_helper_funcs);
ret = drm_fb_helper_init(dev, helper, num_crtc, ROCKCHIP_MAX_CONNECTOR); ret = drm_fb_helper_init(dev, helper, ROCKCHIP_MAX_CONNECTOR);
if (ret < 0) { if (ret < 0) {
dev_err(dev->dev, "Failed to initialize drm fb helper - %d.\n", dev_err(dev->dev, "Failed to initialize drm fb helper - %d.\n",
ret); ret);
......
...@@ -360,7 +360,7 @@ static int sti_bind(struct device *dev) ...@@ -360,7 +360,7 @@ static int sti_bind(struct device *dev)
private = ddev->dev_private; private = ddev->dev_private;
if (ddev->mode_config.num_connector) { if (ddev->mode_config.num_connector) {
fbdev = drm_fbdev_cma_init(ddev, 32, ddev->mode_config.num_crtc, fbdev = drm_fbdev_cma_init(ddev, 32,
ddev->mode_config.num_connector); ddev->mode_config.num_connector);
if (IS_ERR(fbdev)) { if (IS_ERR(fbdev)) {
DRM_DEBUG_DRIVER("Warning: fails to create fbdev\n"); DRM_DEBUG_DRIVER("Warning: fails to create fbdev\n");
......
...@@ -40,9 +40,7 @@ struct drm_fbdev_cma *sun4i_framebuffer_init(struct drm_device *drm) ...@@ -40,9 +40,7 @@ struct drm_fbdev_cma *sun4i_framebuffer_init(struct drm_device *drm)
drm->mode_config.funcs = &sun4i_de_mode_config_funcs; drm->mode_config.funcs = &sun4i_de_mode_config_funcs;
return drm_fbdev_cma_init(drm, 32, return drm_fbdev_cma_init(drm, 32, drm->mode_config.num_connector);
drm->mode_config.num_crtc,
drm->mode_config.num_connector);
} }
void sun4i_framebuffer_free(struct drm_device *drm) void sun4i_framebuffer_free(struct drm_device *drm)
......
...@@ -309,7 +309,7 @@ static int tegra_fbdev_init(struct tegra_fbdev *fbdev, ...@@ -309,7 +309,7 @@ static int tegra_fbdev_init(struct tegra_fbdev *fbdev,
struct drm_device *drm = fbdev->base.dev; struct drm_device *drm = fbdev->base.dev;
int err; int err;
err = drm_fb_helper_init(drm, &fbdev->base, num_crtc, max_connectors); err = drm_fb_helper_init(drm, &fbdev->base, max_connectors);
if (err < 0) { if (err < 0) {
dev_err(drm->dev, "failed to initialize DRM FB helper: %d\n", dev_err(drm->dev, "failed to initialize DRM FB helper: %d\n",
err); err);
......
...@@ -403,8 +403,7 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev) ...@@ -403,8 +403,7 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
drm_mode_config_reset(ddev); drm_mode_config_reset(ddev);
priv->fbdev = drm_fbdev_cma_init(ddev, bpp, priv->fbdev = drm_fbdev_cma_init(ddev, bpp,
ddev->mode_config.num_crtc, ddev->mode_config.num_connector);
ddev->mode_config.num_connector);
if (IS_ERR(priv->fbdev)) { if (IS_ERR(priv->fbdev)) {
ret = PTR_ERR(priv->fbdev); ret = PTR_ERR(priv->fbdev);
goto init_failed; goto init_failed;
......
...@@ -441,8 +441,7 @@ int udl_fbdev_init(struct drm_device *dev) ...@@ -441,8 +441,7 @@ int udl_fbdev_init(struct drm_device *dev)
drm_fb_helper_prepare(dev, &ufbdev->helper, &udl_fb_helper_funcs); drm_fb_helper_prepare(dev, &ufbdev->helper, &udl_fb_helper_funcs);
ret = drm_fb_helper_init(dev, &ufbdev->helper, ret = drm_fb_helper_init(dev, &ufbdev->helper, 1);
1, 1);
if (ret) if (ret)
goto free; goto free;
......
...@@ -231,7 +231,6 @@ int vc4_kms_load(struct drm_device *dev) ...@@ -231,7 +231,6 @@ int vc4_kms_load(struct drm_device *dev)
drm_mode_config_reset(dev); drm_mode_config_reset(dev);
vc4->fbdev = drm_fbdev_cma_init(dev, 32, vc4->fbdev = drm_fbdev_cma_init(dev, 32,
dev->mode_config.num_crtc,
dev->mode_config.num_connector); dev->mode_config.num_connector);
if (IS_ERR(vc4->fbdev)) if (IS_ERR(vc4->fbdev))
vc4->fbdev = NULL; vc4->fbdev = NULL;
......
...@@ -387,7 +387,6 @@ int virtio_gpu_fbdev_init(struct virtio_gpu_device *vgdev) ...@@ -387,7 +387,6 @@ int virtio_gpu_fbdev_init(struct virtio_gpu_device *vgdev)
drm_fb_helper_prepare(vgdev->ddev, &vgfbdev->helper, drm_fb_helper_prepare(vgdev->ddev, &vgfbdev->helper,
&virtio_gpu_fb_helper_funcs); &virtio_gpu_fb_helper_funcs);
ret = drm_fb_helper_init(vgdev->ddev, &vgfbdev->helper, ret = drm_fb_helper_init(vgdev->ddev, &vgfbdev->helper,
vgdev->num_scanouts,
VIRTIO_GPUFB_CONN_LIMIT); VIRTIO_GPUFB_CONN_LIMIT);
if (ret) { if (ret) {
kfree(vgfbdev); kfree(vgfbdev);
......
...@@ -141,7 +141,7 @@ static int zx_drm_bind(struct device *dev) ...@@ -141,7 +141,7 @@ static int zx_drm_bind(struct device *dev)
drm_mode_config_reset(drm); drm_mode_config_reset(drm);
drm_kms_helper_poll_init(drm); drm_kms_helper_poll_init(drm);
priv->fbdev = drm_fbdev_cma_init(drm, 32, drm->mode_config.num_crtc, priv->fbdev = drm_fbdev_cma_init(drm, 32,
drm->mode_config.num_connector); drm->mode_config.num_connector);
if (IS_ERR(priv->fbdev)) { if (IS_ERR(priv->fbdev)) {
ret = PTR_ERR(priv->fbdev); ret = PTR_ERR(priv->fbdev);
......
...@@ -16,11 +16,10 @@ struct drm_plane; ...@@ -16,11 +16,10 @@ struct drm_plane;
struct drm_plane_state; struct drm_plane_state;
struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev, struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
unsigned int preferred_bpp, unsigned int num_crtc, unsigned int preferred_bpp, unsigned int max_conn_count,
unsigned int max_conn_count, const struct drm_framebuffer_funcs *funcs); const struct drm_framebuffer_funcs *funcs);
struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev, struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev,
unsigned int preferred_bpp, unsigned int num_crtc, unsigned int preferred_bpp, unsigned int max_conn_count);
unsigned int max_conn_count);
void drm_fbdev_cma_fini(struct drm_fbdev_cma *fbdev_cma); void drm_fbdev_cma_fini(struct drm_fbdev_cma *fbdev_cma);
void drm_fbdev_cma_restore_mode(struct drm_fbdev_cma *fbdev_cma); void drm_fbdev_cma_restore_mode(struct drm_fbdev_cma *fbdev_cma);
......
...@@ -236,8 +236,7 @@ struct drm_fb_helper { ...@@ -236,8 +236,7 @@ struct drm_fb_helper {
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper, void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
const struct drm_fb_helper_funcs *funcs); const struct drm_fb_helper_funcs *funcs);
int drm_fb_helper_init(struct drm_device *dev, int drm_fb_helper_init(struct drm_device *dev,
struct drm_fb_helper *helper, int crtc_count, struct drm_fb_helper *helper, int max_conn);
int max_conn);
void drm_fb_helper_fini(struct drm_fb_helper *helper); void drm_fb_helper_fini(struct drm_fb_helper *helper);
int drm_fb_helper_blank(int blank, struct fb_info *info); int drm_fb_helper_blank(int blank, struct fb_info *info);
int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
......
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