Skip to content

Commit 1aed950

Browse files
author
Thomas Zimmermann
committed
drm/fb-helper: Remove return value from drm_fbdev_generic_setup()
Generic fbdev emulation is a DRM client. Drivers should invoke the setup function, but not depend on its success. Hence remove the return value. v3: * document stricter requirements for call sequence v2: * warn if fbdev device has not been registered yet * document the new behavior * convert the existing warning to the new dev_ interface Signed-off-by: Thomas Zimmermann <[email protected]> Reviewed-by: Sam Ravnborg <[email protected]> Reviewed-by: Noralf Trønnes <[email protected]> Acked-by: Sam Ravnborg <[email protected]> Acked-by: Gerd Hoffmann <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 3662cd1 commit 1aed950

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

drivers/gpu/drm/drm_fb_helper.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2170,6 +2170,8 @@ static const struct drm_client_funcs drm_fbdev_client_funcs = {
21702170
*
21712171
* This function sets up generic fbdev emulation for drivers that supports
21722172
* dumb buffers with a virtual address and that can be mmap'ed.
2173+
* drm_fbdev_generic_setup() shall be called after the DRM driver registered
2174+
* the new DRM device with drm_dev_register().
21732175
*
21742176
* Restore, hotplug events and teardown are all taken care of. Drivers that do
21752177
* suspend/resume need to call drm_fb_helper_set_suspend_unlocked() themselves.
@@ -2186,29 +2188,30 @@ static const struct drm_client_funcs drm_fbdev_client_funcs = {
21862188
* Setup will be retried on the next hotplug event.
21872189
*
21882190
* The fbdev is destroyed by drm_dev_unregister().
2189-
*
2190-
* Returns:
2191-
* Zero on success or negative error code on failure.
21922191
*/
2193-
int drm_fbdev_generic_setup(struct drm_device *dev, unsigned int preferred_bpp)
2192+
void drm_fbdev_generic_setup(struct drm_device *dev,
2193+
unsigned int preferred_bpp)
21942194
{
21952195
struct drm_fb_helper *fb_helper;
21962196
int ret;
21972197

2198-
WARN(dev->fb_helper, "fb_helper is already set!\n");
2198+
drm_WARN(dev, !dev->registered, "Device has not been registered.\n");
2199+
drm_WARN(dev, dev->fb_helper, "fb_helper is already set!\n");
21992200

22002201
if (!drm_fbdev_emulation)
2201-
return 0;
2202+
return;
22022203

22032204
fb_helper = kzalloc(sizeof(*fb_helper), GFP_KERNEL);
2204-
if (!fb_helper)
2205-
return -ENOMEM;
2205+
if (!fb_helper) {
2206+
drm_err(dev, "Failed to allocate fb_helper\n");
2207+
return;
2208+
}
22062209

22072210
ret = drm_client_init(dev, &fb_helper->client, "fbdev", &drm_fbdev_client_funcs);
22082211
if (ret) {
22092212
kfree(fb_helper);
22102213
drm_err(dev, "Failed to register client: %d\n", ret);
2211-
return ret;
2214+
return;
22122215
}
22132216

22142217
if (!preferred_bpp)
@@ -2222,8 +2225,6 @@ int drm_fbdev_generic_setup(struct drm_device *dev, unsigned int preferred_bpp)
22222225
drm_dbg_kms(dev, "client hotplug ret=%d\n", ret);
22232226

22242227
drm_client_register(&fb_helper->client);
2225-
2226-
return 0;
22272228
}
22282229
EXPORT_SYMBOL(drm_fbdev_generic_setup);
22292230

include/drm/drm_fb_helper.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,8 @@ int drm_fb_helper_debug_leave(struct fb_info *info);
269269
void drm_fb_helper_lastclose(struct drm_device *dev);
270270
void drm_fb_helper_output_poll_changed(struct drm_device *dev);
271271

272-
int drm_fbdev_generic_setup(struct drm_device *dev, unsigned int preferred_bpp);
272+
void drm_fbdev_generic_setup(struct drm_device *dev,
273+
unsigned int preferred_bpp);
273274
#else
274275
static inline void drm_fb_helper_prepare(struct drm_device *dev,
275276
struct drm_fb_helper *helper,
@@ -443,7 +444,7 @@ static inline void drm_fb_helper_output_poll_changed(struct drm_device *dev)
443444
{
444445
}
445446

446-
static inline int
447+
static inline void
447448
drm_fbdev_generic_setup(struct drm_device *dev, unsigned int preferred_bpp)
448449
{
449450
return 0;

0 commit comments

Comments
 (0)