Remove FB_* config options since the driver doesn't call any fbdev functions directly.
Remove FB_KMS_HELPER as this would now be selected by the top level FBDEV_EMULATION config option. If the fbdev emulation isn't selected, the drm_fb_helper functions will be stubbed out.
The code relying on DEFERRED_IO can't be stubbed out using drm_fb_helper functions. This is because the deferred io members in fbdev core structs are defined based on whether FB_DEFERRED_IO is defined or not.
For now, wrap around deferred io code with an #ifdef check for CONFIG_DEFERRED_IO. We could consider creating stub fb helper functions here, but this would require some changes in the core fbdev structs.
Cc: David Airlie airlied@linux.ie Cc: Haixia Shi hshi@chromium.org Cc: "Stéphane Marchesin" marcheu@chromium.org
Signed-off-by: Archit Taneja architt@codeaurora.org --- drivers/gpu/drm/udl/Kconfig | 5 ----- drivers/gpu/drm/udl/udl_fb.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/udl/Kconfig b/drivers/gpu/drm/udl/Kconfig index 613ab06..1616ec4 100644 --- a/drivers/gpu/drm/udl/Kconfig +++ b/drivers/gpu/drm/udl/Kconfig @@ -4,12 +4,7 @@ config DRM_UDL depends on USB_SUPPORT depends on USB_ARCH_HAS_HCD select USB - select FB_SYS_FILLRECT - select FB_SYS_COPYAREA - select FB_SYS_IMAGEBLIT - select FB_DEFERRED_IO select DRM_KMS_HELPER - select DRM_KMS_FB_HELPER help This is a KMS driver for the USB displaylink video adapters. Say M/Y to add support for these devices via drm/kms interfaces. diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c index 9fd6e83..4aa5118d 100644 --- a/drivers/gpu/drm/udl/udl_fb.c +++ b/drivers/gpu/drm/udl/udl_fb.c @@ -24,11 +24,15 @@
#define DL_DEFIO_WRITE_DELAY (HZ/20) /* fb_deferred_io.delay in jiffies */
+#ifdef CONFIG_FB_DEFERRED_IO static int fb_defio = 0; /* Optionally enable experimental fb_defio mmap support */ +#endif static int fb_bpp = 16;
module_param(fb_bpp, int, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP); +#ifdef CONFIG_FB_DEFERRED_IO module_param(fb_defio, int, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP); +#endif
struct udl_fbdev { struct drm_fb_helper helper; @@ -78,6 +82,7 @@ static uint16_t rgb16(uint32_t col) } #endif
+#ifdef CONFIG_FB_DEFERRED_IO /* * NOTE: fb_defio.c is holding info->fbdefio.mutex * Touching ANY framebuffer memory that triggers a page fault @@ -139,6 +144,7 @@ error: >> 10)), /* Kcycles */ &udl->cpu_kcycles_used); } +#endif
int udl_handle_damage(struct udl_framebuffer *fb, int x, int y, int width, int height) @@ -331,6 +337,7 @@ static int udl_fb_open(struct fb_info *info, int user)
ufbdev->fb_count++;
+#ifdef CONFIG_FB_DEFERRED_IO if (fb_defio && (info->fbdefio == NULL)) { /* enable defio at last moment if not disabled by client */
@@ -346,6 +353,7 @@ static int udl_fb_open(struct fb_info *info, int user) info->fbdefio = fbdefio; fb_deferred_io_init(info); } +#endif
pr_notice("open /dev/fb%d user=%d fb_info=%p count=%d\n", info->node, user, info, ufbdev->fb_count); @@ -363,12 +371,14 @@ static int udl_fb_release(struct fb_info *info, int user)
ufbdev->fb_count--;
+#ifdef CONFIG_FB_DEFERRED_IO if ((ufbdev->fb_count == 0) && (info->fbdefio)) { fb_deferred_io_cleanup(info); kfree(info->fbdefio); info->fbdefio = NULL; info->fbops->fb_mmap = udl_fb_mmap; } +#endif
pr_warn("released /dev/fb%d user=%d count=%d\n", info->node, user, ufbdev->fb_count);