diff mbox

[14/16] drm/<drivers>: simplify ->fb_probe callback

Message ID 1359044448-3861-15-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter Jan. 24, 2013, 4:20 p.m. UTC
The fb helper lost its support for reallocating an fb completely, so
no need to return special success values any more.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/ast/ast_fb.c              |   21 +++-----------------
 drivers/gpu/drm/cirrus/cirrus_fbdev.c     |   22 +++------------------
 drivers/gpu/drm/drm_fb_cma_helper.c       |   17 +---------------
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   30 +----------------------------
 drivers/gpu/drm/gma500/framebuffer.c      |   10 +---------
 drivers/gpu/drm/i915/intel_fb.c           |   21 +++-----------------
 drivers/gpu/drm/mgag200/mgag200_fb.c      |   22 +++------------------
 drivers/gpu/drm/nouveau/nouveau_fbcon.c   |   22 +++------------------
 drivers/gpu/drm/radeon/radeon_fb.c        |   21 +++-----------------
 drivers/gpu/drm/udl/udl_fb.c              |   22 +++------------------
 drivers/staging/omapdrm/omap_fbdev.c      |   17 +---------------
 11 files changed, 25 insertions(+), 200 deletions(-)

Comments

Rob Clark Feb. 13, 2013, 9:51 p.m. UTC | #1
On Thu, Jan 24, 2013 at 11:20 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> The fb helper lost its support for reallocating an fb completely, so
> no need to return special success values any more.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Rob Clark <robdclark@gmail.com>

> ---
>  drivers/gpu/drm/ast/ast_fb.c              |   21 +++-----------------
>  drivers/gpu/drm/cirrus/cirrus_fbdev.c     |   22 +++------------------
>  drivers/gpu/drm/drm_fb_cma_helper.c       |   17 +---------------
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |   30 +----------------------------
>  drivers/gpu/drm/gma500/framebuffer.c      |   10 +---------
>  drivers/gpu/drm/i915/intel_fb.c           |   21 +++-----------------
>  drivers/gpu/drm/mgag200/mgag200_fb.c      |   22 +++------------------
>  drivers/gpu/drm/nouveau/nouveau_fbcon.c   |   22 +++------------------
>  drivers/gpu/drm/radeon/radeon_fb.c        |   21 +++-----------------
>  drivers/gpu/drm/udl/udl_fb.c              |   22 +++------------------
>  drivers/staging/omapdrm/omap_fbdev.c      |   17 +---------------
>  11 files changed, 25 insertions(+), 200 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c
> index 9bfd5ab..3a5a5e0 100644
> --- a/drivers/gpu/drm/ast/ast_fb.c
> +++ b/drivers/gpu/drm/ast/ast_fb.c
> @@ -146,9 +146,10 @@ static int astfb_create_object(struct ast_fbdev *afbdev,
>         return ret;
>  }
>
> -static int astfb_create(struct ast_fbdev *afbdev,
> +static int astfb_create(struct drm_fb_helper *helper,
>                         struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct ast_fbdev *afbdev = (struct ast_fbdev *)helper;
>         struct drm_device *dev = afbdev->helper.dev;
>         struct drm_mode_fb_cmd2 mode_cmd;
>         struct drm_framebuffer *fb;
> @@ -249,26 +250,10 @@ static void ast_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
>         *blue = ast_crtc->lut_b[regno] << 8;
>  }
>
> -static int ast_find_or_create_single(struct drm_fb_helper *helper,
> -                                         struct drm_fb_helper_surface_size *sizes)
> -{
> -       struct ast_fbdev *afbdev = (struct ast_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = astfb_create(afbdev, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  static struct drm_fb_helper_funcs ast_fb_helper_funcs = {
>         .gamma_set = ast_fb_gamma_set,
>         .gamma_get = ast_fb_gamma_get,
> -       .fb_probe = ast_find_or_create_single,
> +       .fb_probe = astfb_create,
>  };
>
>  static void ast_fbdev_destroy(struct drm_device *dev,
> diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> index b869b8b..778a90b 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> @@ -121,9 +121,10 @@ static int cirrusfb_create_object(struct cirrus_fbdev *afbdev,
>         return ret;
>  }
>
> -static int cirrusfb_create(struct cirrus_fbdev *gfbdev,
> +static int cirrusfb_create(struct drm_fb_helper *helper,
>                            struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct cirrus_fbdev *gfbdev = (struct cirrus_fbdev *)helper;
>         struct drm_device *dev = gfbdev->helper.dev;
>         struct cirrus_device *cdev = gfbdev->helper.dev->dev_private;
>         struct fb_info *info;
> @@ -220,23 +221,6 @@ out_iounmap:
>         return ret;
>  }
>
> -static int cirrus_fb_find_or_create_single(struct drm_fb_helper *helper,
> -                                          struct drm_fb_helper_surface_size
> -                                          *sizes)
> -{
> -       struct cirrus_fbdev *gfbdev = (struct cirrus_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = cirrusfb_create(gfbdev, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  static int cirrus_fbdev_destroy(struct drm_device *dev,
>                                 struct cirrus_fbdev *gfbdev)
>  {
> @@ -268,7 +252,7 @@ static int cirrus_fbdev_destroy(struct drm_device *dev,
>  static struct drm_fb_helper_funcs cirrus_fb_helper_funcs = {
>         .gamma_set = cirrus_crtc_fb_gamma_set,
>         .gamma_get = cirrus_crtc_fb_gamma_get,
> -       .fb_probe = cirrus_fb_find_or_create_single,
> +       .fb_probe = cirrusfb_create,
>  };
>
>  int cirrus_fbdev_init(struct cirrus_device *cdev)
> diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
> index fcf9fa3..69814d2 100644
> --- a/drivers/gpu/drm/drm_fb_cma_helper.c
> +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
> @@ -275,23 +275,8 @@ err_drm_gem_cma_free_object:
>         return ret;
>  }
>
> -static int drm_fbdev_cma_probe(struct drm_fb_helper *helper,
> -       struct drm_fb_helper_surface_size *sizes)
> -{
> -       int ret = 0;
> -
> -       if (!helper->fb) {
> -               ret = drm_fbdev_cma_create(helper, sizes);
> -               if (ret < 0)
> -                       return ret;
> -               ret = 1;
> -       }
> -
> -       return ret;
> -}
> -
>  static struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = {
> -       .fb_probe = drm_fbdev_cma_probe,
> +       .fb_probe = drm_fbdev_cma_create,
>  };
>
>  /**
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> index 77d78cd..ca70b91 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -226,36 +226,8 @@ out:
>         return ret;
>  }
>
> -static int exynos_drm_fbdev_probe(struct drm_fb_helper *helper,
> -                                  struct drm_fb_helper_surface_size *sizes)
> -{
> -       int ret = 0;
> -
> -       DRM_DEBUG_KMS("%s\n", __FILE__);
> -
> -       /*
> -        * with !helper->fb, it means that this funcion is called first time
> -        * and after that, the helper->fb would be used as clone mode.
> -        */
> -       if (!helper->fb) {
> -               ret = exynos_drm_fbdev_create(helper, sizes);
> -               if (ret < 0) {
> -                       DRM_ERROR("failed to create fbdev.\n");
> -                       return ret;
> -               }
> -
> -               /*
> -                * fb_helper expects a value more than 1 if succeed
> -                * because register_framebuffer() should be called.
> -                */
> -               ret = 1;
> -       }
> -
> -       return ret;
> -}
> -
>  static struct drm_fb_helper_funcs exynos_drm_fb_helper_funcs = {
> -       .fb_probe =     exynos_drm_fbdev_probe,
> +       .fb_probe =     exynos_drm_fbdev_create,
>  };
>
>  int exynos_drm_fbdev_init(struct drm_device *dev)
> diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
> index 7288b6d..f7a458c 100644
> --- a/drivers/gpu/drm/gma500/framebuffer.c
> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> @@ -545,9 +545,7 @@ static int psbfb_probe(struct drm_fb_helper *helper,
>         struct psb_fbdev *psb_fbdev = (struct psb_fbdev *)helper;
>         struct drm_device *dev = psb_fbdev->psb_fb_helper.dev;
>         struct drm_psb_private *dev_priv = dev->dev_private;
> -       int new_fb = 0;
>         int bytespp;
> -       int ret;
>
>         bytespp = sizes->surface_bpp / 8;
>         if (bytespp == 3)       /* no 24bit packed */
> @@ -562,13 +560,7 @@ static int psbfb_probe(struct drm_fb_helper *helper,
>                  sizes->surface_depth = 16;
>          }
>
> -       if (!helper->fb) {
> -               ret = psbfb_create(psb_fbdev, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> +       return psbfb_create(psb_fbdev, sizes);
>  }
>
>  static struct drm_fb_helper_funcs psb_fb_helper_funcs = {
> diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
> index 302bc63..3a0d16e 100644
> --- a/drivers/gpu/drm/i915/intel_fb.c
> +++ b/drivers/gpu/drm/i915/intel_fb.c
> @@ -57,9 +57,10 @@ static struct fb_ops intelfb_ops = {
>         .fb_debug_leave = drm_fb_helper_debug_leave,
>  };
>
> -static int intelfb_create(struct intel_fbdev *ifbdev,
> +static int intelfb_create(struct drm_fb_helper *helper,
>                           struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct intel_fbdev *ifbdev = (struct intel_fbdev *)helper;
>         struct drm_device *dev = ifbdev->helper.dev;
>         struct drm_i915_private *dev_priv = dev->dev_private;
>         struct fb_info *info;
> @@ -181,26 +182,10 @@ out:
>         return ret;
>  }
>
> -static int intel_fb_find_or_create_single(struct drm_fb_helper *helper,
> -                                         struct drm_fb_helper_surface_size *sizes)
> -{
> -       struct intel_fbdev *ifbdev = (struct intel_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = intelfb_create(ifbdev, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  static struct drm_fb_helper_funcs intel_fb_helper_funcs = {
>         .gamma_set = intel_crtc_fb_gamma_set,
>         .gamma_get = intel_crtc_fb_gamma_get,
> -       .fb_probe = intel_fb_find_or_create_single,
> +       .fb_probe = intelfb_create,
>  };
>
>  static void intel_fbdev_destroy(struct drm_device *dev,
> diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c
> index 674f8fb..247bbcb 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_fb.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
> @@ -121,9 +121,10 @@ static int mgag200fb_create_object(struct mga_fbdev *afbdev,
>         return ret;
>  }
>
> -static int mgag200fb_create(struct mga_fbdev *mfbdev,
> +static int mgag200fb_create(struct drm_fb_helper *helper,
>                            struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct mga_fbdev *mfbdev = (struct mga_fbdev *)helper;
>         struct drm_device *dev = mfbdev->helper.dev;
>         struct drm_mode_fb_cmd2 mode_cmd;
>         struct mga_device *mdev = dev->dev_private;
> @@ -210,23 +211,6 @@ out:
>         return ret;
>  }
>
> -static int mga_fb_find_or_create_single(struct drm_fb_helper *helper,
> -                                          struct drm_fb_helper_surface_size
> -                                          *sizes)
> -{
> -       struct mga_fbdev *mfbdev = (struct mga_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = mgag200fb_create(mfbdev, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  static int mga_fbdev_destroy(struct drm_device *dev,
>                                 struct mga_fbdev *mfbdev)
>  {
> @@ -257,7 +241,7 @@ static int mga_fbdev_destroy(struct drm_device *dev,
>  static struct drm_fb_helper_funcs mga_fb_helper_funcs = {
>         .gamma_set = mga_crtc_fb_gamma_set,
>         .gamma_get = mga_crtc_fb_gamma_get,
> -       .fb_probe = mga_fb_find_or_create_single,
> +       .fb_probe = mgag200fb_create,
>  };
>
>  int mgag200_fbdev_init(struct mga_device *mdev)
> diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
> index 7b2d231..d983371 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
> @@ -251,9 +251,10 @@ nouveau_fbcon_zfill(struct drm_device *dev, struct nouveau_fbdev *fbcon)
>  }
>
>  static int
> -nouveau_fbcon_create(struct nouveau_fbdev *fbcon,
> +nouveau_fbcon_create(struct drm_fb_helper *helper,
>                      struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct nouveau_fbdev *fbcon = (struct nouveau_fbdev *)helper;
>         struct drm_device *dev = fbcon->dev;
>         struct nouveau_drm *drm = nouveau_drm(dev);
>         struct nouveau_device *device = nv_device(drm->device);
> @@ -388,23 +389,6 @@ out:
>         return ret;
>  }
>
> -static int
> -nouveau_fbcon_find_or_create_single(struct drm_fb_helper *helper,
> -                                   struct drm_fb_helper_surface_size *sizes)
> -{
> -       struct nouveau_fbdev *fbcon = (struct nouveau_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = nouveau_fbcon_create(fbcon, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  void
>  nouveau_fbcon_output_poll_changed(struct drm_device *dev)
>  {
> @@ -450,7 +434,7 @@ void nouveau_fbcon_gpu_lockup(struct fb_info *info)
>  static struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = {
>         .gamma_set = nouveau_fbcon_gamma_set,
>         .gamma_get = nouveau_fbcon_gamma_get,
> -       .fb_probe = nouveau_fbcon_find_or_create_single,
> +       .fb_probe = nouveau_fbcon_create,
>  };
>
>
> diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
> index a44b386..b6c73b6 100644
> --- a/drivers/gpu/drm/radeon/radeon_fb.c
> +++ b/drivers/gpu/drm/radeon/radeon_fb.c
> @@ -187,9 +187,10 @@ out_unref:
>         return ret;
>  }
>
> -static int radeonfb_create(struct radeon_fbdev *rfbdev,
> +static int radeonfb_create(struct drm_fb_helper *helper,
>                            struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct radeon_fbdev *rfbdev = (struct radeon_fbdev *)helper;
>         struct radeon_device *rdev = rfbdev->rdev;
>         struct fb_info *info;
>         struct drm_framebuffer *fb = NULL;
> @@ -300,22 +301,6 @@ out_unref:
>         return ret;
>  }
>
> -static int radeon_fb_find_or_create_single(struct drm_fb_helper *helper,
> -                                          struct drm_fb_helper_surface_size *sizes)
> -{
> -       struct radeon_fbdev *rfbdev = (struct radeon_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = radeonfb_create(rfbdev, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  void radeon_fb_output_poll_changed(struct radeon_device *rdev)
>  {
>         drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
> @@ -349,7 +334,7 @@ static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfb
>  static struct drm_fb_helper_funcs radeon_fb_helper_funcs = {
>         .gamma_set = radeon_crtc_fb_gamma_set,
>         .gamma_get = radeon_crtc_fb_gamma_get,
> -       .fb_probe = radeon_fb_find_or_create_single,
> +       .fb_probe = radeonfb_create,
>  };
>
>  int radeon_fbdev_init(struct radeon_device *rdev)
> diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
> index 7d40cb7..1b51579 100644
> --- a/drivers/gpu/drm/udl/udl_fb.c
> +++ b/drivers/gpu/drm/udl/udl_fb.c
> @@ -440,9 +440,10 @@ udl_framebuffer_init(struct drm_device *dev,
>  }
>
>
> -static int udlfb_create(struct udl_fbdev *ufbdev,
> +static int udlfb_create(struct drm_fb_helper *helper,
>                         struct drm_fb_helper_surface_size *sizes)
>  {
> +       struct udl_fbdev *ufbdev = (struct udl_fbdev *)helper;
>         struct drm_device *dev = ufbdev->helper.dev;
>         struct fb_info *info;
>         struct device *device = &dev->usbdev->dev;
> @@ -520,27 +521,10 @@ out:
>         return ret;
>  }
>
> -static int udl_fb_find_or_create_single(struct drm_fb_helper *helper,
> -                                       struct drm_fb_helper_surface_size *sizes)
> -{
> -       struct udl_fbdev *ufbdev = (struct udl_fbdev *)helper;
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = udlfb_create(ufbdev, sizes);
> -               if (ret)
> -                       return ret;
> -
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  static struct drm_fb_helper_funcs udl_fb_helper_funcs = {
>         .gamma_set = udl_crtc_fb_gamma_set,
>         .gamma_get = udl_crtc_fb_gamma_get,
> -       .fb_probe = udl_fb_find_or_create_single,
> +       .fb_probe = udlfb_create,
>  };
>
>  static void udl_fbdev_destroy(struct drm_device *dev,
> diff --git a/drivers/staging/omapdrm/omap_fbdev.c b/drivers/staging/omapdrm/omap_fbdev.c
> index 6ccaf54..11f7dcb 100644
> --- a/drivers/staging/omapdrm/omap_fbdev.c
> +++ b/drivers/staging/omapdrm/omap_fbdev.c
> @@ -296,25 +296,10 @@ static void omap_crtc_fb_gamma_get(struct drm_crtc *crtc,
>         DBG("fbdev: get gamma");
>  }
>
> -static int omap_fbdev_probe(struct drm_fb_helper *helper,
> -               struct drm_fb_helper_surface_size *sizes)
> -{
> -       int new_fb = 0;
> -       int ret;
> -
> -       if (!helper->fb) {
> -               ret = omap_fbdev_create(helper, sizes);
> -               if (ret)
> -                       return ret;
> -               new_fb = 1;
> -       }
> -       return new_fb;
> -}
> -
>  static struct drm_fb_helper_funcs omap_fb_helper_funcs = {
>         .gamma_set = omap_crtc_fb_gamma_set,
>         .gamma_get = omap_crtc_fb_gamma_get,
> -       .fb_probe = omap_fbdev_probe,
> +       .fb_probe = omap_fbdev_create,
>  };
>
>  static struct drm_fb_helper *get_fb(struct fb_info *fbi)
> --
> 1.7.10.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c
index 9bfd5ab..3a5a5e0 100644
--- a/drivers/gpu/drm/ast/ast_fb.c
+++ b/drivers/gpu/drm/ast/ast_fb.c
@@ -146,9 +146,10 @@  static int astfb_create_object(struct ast_fbdev *afbdev,
 	return ret;
 }
 
-static int astfb_create(struct ast_fbdev *afbdev,
+static int astfb_create(struct drm_fb_helper *helper,
 			struct drm_fb_helper_surface_size *sizes)
 {
+	struct ast_fbdev *afbdev = (struct ast_fbdev *)helper;
 	struct drm_device *dev = afbdev->helper.dev;
 	struct drm_mode_fb_cmd2 mode_cmd;
 	struct drm_framebuffer *fb;
@@ -249,26 +250,10 @@  static void ast_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
 	*blue = ast_crtc->lut_b[regno] << 8;
 }
 
-static int ast_find_or_create_single(struct drm_fb_helper *helper,
-					  struct drm_fb_helper_surface_size *sizes)
-{
-	struct ast_fbdev *afbdev = (struct ast_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = astfb_create(afbdev, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 static struct drm_fb_helper_funcs ast_fb_helper_funcs = {
 	.gamma_set = ast_fb_gamma_set,
 	.gamma_get = ast_fb_gamma_get,
-	.fb_probe = ast_find_or_create_single,
+	.fb_probe = astfb_create,
 };
 
 static void ast_fbdev_destroy(struct drm_device *dev,
diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
index b869b8b..778a90b 100644
--- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
+++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
@@ -121,9 +121,10 @@  static int cirrusfb_create_object(struct cirrus_fbdev *afbdev,
 	return ret;
 }
 
-static int cirrusfb_create(struct cirrus_fbdev *gfbdev,
+static int cirrusfb_create(struct drm_fb_helper *helper,
 			   struct drm_fb_helper_surface_size *sizes)
 {
+	struct cirrus_fbdev *gfbdev = (struct cirrus_fbdev *)helper;
 	struct drm_device *dev = gfbdev->helper.dev;
 	struct cirrus_device *cdev = gfbdev->helper.dev->dev_private;
 	struct fb_info *info;
@@ -220,23 +221,6 @@  out_iounmap:
 	return ret;
 }
 
-static int cirrus_fb_find_or_create_single(struct drm_fb_helper *helper,
-					   struct drm_fb_helper_surface_size
-					   *sizes)
-{
-	struct cirrus_fbdev *gfbdev = (struct cirrus_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = cirrusfb_create(gfbdev, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 static int cirrus_fbdev_destroy(struct drm_device *dev,
 				struct cirrus_fbdev *gfbdev)
 {
@@ -268,7 +252,7 @@  static int cirrus_fbdev_destroy(struct drm_device *dev,
 static struct drm_fb_helper_funcs cirrus_fb_helper_funcs = {
 	.gamma_set = cirrus_crtc_fb_gamma_set,
 	.gamma_get = cirrus_crtc_fb_gamma_get,
-	.fb_probe = cirrus_fb_find_or_create_single,
+	.fb_probe = cirrusfb_create,
 };
 
 int cirrus_fbdev_init(struct cirrus_device *cdev)
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
index fcf9fa3..69814d2 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -275,23 +275,8 @@  err_drm_gem_cma_free_object:
 	return ret;
 }
 
-static int drm_fbdev_cma_probe(struct drm_fb_helper *helper,
-	struct drm_fb_helper_surface_size *sizes)
-{
-	int ret = 0;
-
-	if (!helper->fb) {
-		ret = drm_fbdev_cma_create(helper, sizes);
-		if (ret < 0)
-			return ret;
-		ret = 1;
-	}
-
-	return ret;
-}
-
 static struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = {
-	.fb_probe = drm_fbdev_cma_probe,
+	.fb_probe = drm_fbdev_cma_create,
 };
 
 /**
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 77d78cd..ca70b91 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -226,36 +226,8 @@  out:
 	return ret;
 }
 
-static int exynos_drm_fbdev_probe(struct drm_fb_helper *helper,
-				   struct drm_fb_helper_surface_size *sizes)
-{
-	int ret = 0;
-
-	DRM_DEBUG_KMS("%s\n", __FILE__);
-
-	/*
-	 * with !helper->fb, it means that this funcion is called first time
-	 * and after that, the helper->fb would be used as clone mode.
-	 */
-	if (!helper->fb) {
-		ret = exynos_drm_fbdev_create(helper, sizes);
-		if (ret < 0) {
-			DRM_ERROR("failed to create fbdev.\n");
-			return ret;
-		}
-
-		/*
-		 * fb_helper expects a value more than 1 if succeed
-		 * because register_framebuffer() should be called.
-		 */
-		ret = 1;
-	}
-
-	return ret;
-}
-
 static struct drm_fb_helper_funcs exynos_drm_fb_helper_funcs = {
-	.fb_probe =	exynos_drm_fbdev_probe,
+	.fb_probe =	exynos_drm_fbdev_create,
 };
 
 int exynos_drm_fbdev_init(struct drm_device *dev)
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index 7288b6d..f7a458c 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -545,9 +545,7 @@  static int psbfb_probe(struct drm_fb_helper *helper,
 	struct psb_fbdev *psb_fbdev = (struct psb_fbdev *)helper;
 	struct drm_device *dev = psb_fbdev->psb_fb_helper.dev;
 	struct drm_psb_private *dev_priv = dev->dev_private;
-	int new_fb = 0;
 	int bytespp;
-	int ret;
 
 	bytespp = sizes->surface_bpp / 8;
 	if (bytespp == 3)	/* no 24bit packed */
@@ -562,13 +560,7 @@  static int psbfb_probe(struct drm_fb_helper *helper,
                 sizes->surface_depth = 16;
         }
 
-	if (!helper->fb) {
-		ret = psbfb_create(psb_fbdev, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
+	return psbfb_create(psb_fbdev, sizes);
 }
 
 static struct drm_fb_helper_funcs psb_fb_helper_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index 302bc63..3a0d16e 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -57,9 +57,10 @@  static struct fb_ops intelfb_ops = {
 	.fb_debug_leave = drm_fb_helper_debug_leave,
 };
 
-static int intelfb_create(struct intel_fbdev *ifbdev,
+static int intelfb_create(struct drm_fb_helper *helper,
 			  struct drm_fb_helper_surface_size *sizes)
 {
+	struct intel_fbdev *ifbdev = (struct intel_fbdev *)helper;
 	struct drm_device *dev = ifbdev->helper.dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct fb_info *info;
@@ -181,26 +182,10 @@  out:
 	return ret;
 }
 
-static int intel_fb_find_or_create_single(struct drm_fb_helper *helper,
-					  struct drm_fb_helper_surface_size *sizes)
-{
-	struct intel_fbdev *ifbdev = (struct intel_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = intelfb_create(ifbdev, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 static struct drm_fb_helper_funcs intel_fb_helper_funcs = {
 	.gamma_set = intel_crtc_fb_gamma_set,
 	.gamma_get = intel_crtc_fb_gamma_get,
-	.fb_probe = intel_fb_find_or_create_single,
+	.fb_probe = intelfb_create,
 };
 
 static void intel_fbdev_destroy(struct drm_device *dev,
diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c
index 674f8fb..247bbcb 100644
--- a/drivers/gpu/drm/mgag200/mgag200_fb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
@@ -121,9 +121,10 @@  static int mgag200fb_create_object(struct mga_fbdev *afbdev,
 	return ret;
 }
 
-static int mgag200fb_create(struct mga_fbdev *mfbdev,
+static int mgag200fb_create(struct drm_fb_helper *helper,
 			   struct drm_fb_helper_surface_size *sizes)
 {
+	struct mga_fbdev *mfbdev = (struct mga_fbdev *)helper;
 	struct drm_device *dev = mfbdev->helper.dev;
 	struct drm_mode_fb_cmd2 mode_cmd;
 	struct mga_device *mdev = dev->dev_private;
@@ -210,23 +211,6 @@  out:
 	return ret;
 }
 
-static int mga_fb_find_or_create_single(struct drm_fb_helper *helper,
-					   struct drm_fb_helper_surface_size
-					   *sizes)
-{
-	struct mga_fbdev *mfbdev = (struct mga_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = mgag200fb_create(mfbdev, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 static int mga_fbdev_destroy(struct drm_device *dev,
 				struct mga_fbdev *mfbdev)
 {
@@ -257,7 +241,7 @@  static int mga_fbdev_destroy(struct drm_device *dev,
 static struct drm_fb_helper_funcs mga_fb_helper_funcs = {
 	.gamma_set = mga_crtc_fb_gamma_set,
 	.gamma_get = mga_crtc_fb_gamma_get,
-	.fb_probe = mga_fb_find_or_create_single,
+	.fb_probe = mgag200fb_create,
 };
 
 int mgag200_fbdev_init(struct mga_device *mdev)
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index 7b2d231..d983371 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -251,9 +251,10 @@  nouveau_fbcon_zfill(struct drm_device *dev, struct nouveau_fbdev *fbcon)
 }
 
 static int
-nouveau_fbcon_create(struct nouveau_fbdev *fbcon,
+nouveau_fbcon_create(struct drm_fb_helper *helper,
 		     struct drm_fb_helper_surface_size *sizes)
 {
+	struct nouveau_fbdev *fbcon = (struct nouveau_fbdev *)helper;
 	struct drm_device *dev = fbcon->dev;
 	struct nouveau_drm *drm = nouveau_drm(dev);
 	struct nouveau_device *device = nv_device(drm->device);
@@ -388,23 +389,6 @@  out:
 	return ret;
 }
 
-static int
-nouveau_fbcon_find_or_create_single(struct drm_fb_helper *helper,
-				    struct drm_fb_helper_surface_size *sizes)
-{
-	struct nouveau_fbdev *fbcon = (struct nouveau_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = nouveau_fbcon_create(fbcon, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 void
 nouveau_fbcon_output_poll_changed(struct drm_device *dev)
 {
@@ -450,7 +434,7 @@  void nouveau_fbcon_gpu_lockup(struct fb_info *info)
 static struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = {
 	.gamma_set = nouveau_fbcon_gamma_set,
 	.gamma_get = nouveau_fbcon_gamma_get,
-	.fb_probe = nouveau_fbcon_find_or_create_single,
+	.fb_probe = nouveau_fbcon_create,
 };
 
 
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index a44b386..b6c73b6 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -187,9 +187,10 @@  out_unref:
 	return ret;
 }
 
-static int radeonfb_create(struct radeon_fbdev *rfbdev,
+static int radeonfb_create(struct drm_fb_helper *helper,
 			   struct drm_fb_helper_surface_size *sizes)
 {
+	struct radeon_fbdev *rfbdev = (struct radeon_fbdev *)helper;
 	struct radeon_device *rdev = rfbdev->rdev;
 	struct fb_info *info;
 	struct drm_framebuffer *fb = NULL;
@@ -300,22 +301,6 @@  out_unref:
 	return ret;
 }
 
-static int radeon_fb_find_or_create_single(struct drm_fb_helper *helper,
-					   struct drm_fb_helper_surface_size *sizes)
-{
-	struct radeon_fbdev *rfbdev = (struct radeon_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = radeonfb_create(rfbdev, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 void radeon_fb_output_poll_changed(struct radeon_device *rdev)
 {
 	drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
@@ -349,7 +334,7 @@  static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfb
 static struct drm_fb_helper_funcs radeon_fb_helper_funcs = {
 	.gamma_set = radeon_crtc_fb_gamma_set,
 	.gamma_get = radeon_crtc_fb_gamma_get,
-	.fb_probe = radeon_fb_find_or_create_single,
+	.fb_probe = radeonfb_create,
 };
 
 int radeon_fbdev_init(struct radeon_device *rdev)
diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
index 7d40cb7..1b51579 100644
--- a/drivers/gpu/drm/udl/udl_fb.c
+++ b/drivers/gpu/drm/udl/udl_fb.c
@@ -440,9 +440,10 @@  udl_framebuffer_init(struct drm_device *dev,
 }
 
 
-static int udlfb_create(struct udl_fbdev *ufbdev,
+static int udlfb_create(struct drm_fb_helper *helper,
 			struct drm_fb_helper_surface_size *sizes)
 {
+	struct udl_fbdev *ufbdev = (struct udl_fbdev *)helper;
 	struct drm_device *dev = ufbdev->helper.dev;
 	struct fb_info *info;
 	struct device *device = &dev->usbdev->dev;
@@ -520,27 +521,10 @@  out:
 	return ret;
 }
 
-static int udl_fb_find_or_create_single(struct drm_fb_helper *helper,
-					struct drm_fb_helper_surface_size *sizes)
-{
-	struct udl_fbdev *ufbdev = (struct udl_fbdev *)helper;
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = udlfb_create(ufbdev, sizes);
-		if (ret)
-			return ret;
-
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 static struct drm_fb_helper_funcs udl_fb_helper_funcs = {
 	.gamma_set = udl_crtc_fb_gamma_set,
 	.gamma_get = udl_crtc_fb_gamma_get,
-	.fb_probe = udl_fb_find_or_create_single,
+	.fb_probe = udlfb_create,
 };
 
 static void udl_fbdev_destroy(struct drm_device *dev,
diff --git a/drivers/staging/omapdrm/omap_fbdev.c b/drivers/staging/omapdrm/omap_fbdev.c
index 6ccaf54..11f7dcb 100644
--- a/drivers/staging/omapdrm/omap_fbdev.c
+++ b/drivers/staging/omapdrm/omap_fbdev.c
@@ -296,25 +296,10 @@  static void omap_crtc_fb_gamma_get(struct drm_crtc *crtc,
 	DBG("fbdev: get gamma");
 }
 
-static int omap_fbdev_probe(struct drm_fb_helper *helper,
-		struct drm_fb_helper_surface_size *sizes)
-{
-	int new_fb = 0;
-	int ret;
-
-	if (!helper->fb) {
-		ret = omap_fbdev_create(helper, sizes);
-		if (ret)
-			return ret;
-		new_fb = 1;
-	}
-	return new_fb;
-}
-
 static struct drm_fb_helper_funcs omap_fb_helper_funcs = {
 	.gamma_set = omap_crtc_fb_gamma_set,
 	.gamma_get = omap_crtc_fb_gamma_get,
-	.fb_probe = omap_fbdev_probe,
+	.fb_probe = omap_fbdev_create,
 };
 
 static struct drm_fb_helper *get_fb(struct fb_info *fbi)