diff options
| author | Thierry Reding <treding@nvidia.com> | 2014-12-19 05:21:32 -0500 |
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-01-21 08:57:03 -0500 |
| commit | 01934c2a691882185b3021d437df13bcba07711d (patch) | |
| tree | 6e891d192b0e4bd35b4f00ee013ea9763d5dc48d /drivers/gpu/drm/ast | |
| parent | 7119ad5f6b0ce222072b0c0b31c3b4ac87660afa (diff) | |
drm/fb-helper: Propagate errors from initial config failure
Make drm_fb_helper_initial_config() return an int rather than a bool so
that the error can be properly propagated. While at it, update drivers
to propagate errors further rather than just ignore them.
v2:
- cirrus: No cleanup is required, the top-level cirrus_driver_load()
will do it as part of cirrus_driver_unload() in its cleanup path.
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
[danvet: Squash in simplification patch from kbuild.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/ast')
| -rw-r--r-- | drivers/gpu/drm/ast/ast_fb.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c index 5c60ae524c45..ff68eefae273 100644 --- a/drivers/gpu/drm/ast/ast_fb.c +++ b/drivers/gpu/drm/ast/ast_fb.c | |||
| @@ -335,18 +335,27 @@ int ast_fbdev_init(struct drm_device *dev) | |||
| 335 | 335 | ||
| 336 | ret = drm_fb_helper_init(dev, &afbdev->helper, | 336 | ret = drm_fb_helper_init(dev, &afbdev->helper, |
| 337 | 1, 1); | 337 | 1, 1); |
| 338 | if (ret) { | 338 | if (ret) |
| 339 | kfree(afbdev); | 339 | goto free; |
| 340 | return ret; | ||
| 341 | } | ||
| 342 | 340 | ||
| 343 | drm_fb_helper_single_add_all_connectors(&afbdev->helper); | 341 | ret = drm_fb_helper_single_add_all_connectors(&afbdev->helper); |
| 342 | if (ret) | ||
| 343 | goto fini; | ||
| 344 | 344 | ||
| 345 | /* disable all the possible outputs/crtcs before entering KMS mode */ | 345 | /* disable all the possible outputs/crtcs before entering KMS mode */ |
| 346 | drm_helper_disable_unused_functions(dev); | 346 | drm_helper_disable_unused_functions(dev); |
| 347 | 347 | ||
| 348 | drm_fb_helper_initial_config(&afbdev->helper, 32); | 348 | ret = drm_fb_helper_initial_config(&afbdev->helper, 32); |
| 349 | if (ret) | ||
| 350 | goto fini; | ||
| 351 | |||
| 349 | return 0; | 352 | return 0; |
| 353 | |||
| 354 | fini: | ||
| 355 | drm_fb_helper_fini(&afbdev->helper); | ||
| 356 | free: | ||
| 357 | kfree(afbdev); | ||
| 358 | return ret; | ||
| 350 | } | 359 | } |
| 351 | 360 | ||
| 352 | void ast_fbdev_fini(struct drm_device *dev) | 361 | void ast_fbdev_fini(struct drm_device *dev) |
