Commit bf0f401f authored by Thomas Zimmermann's avatar Thomas Zimmermann

fbdev/s1d13xxxfb: Initialize fb_ops to fbdev I/O-memory helpers

Initialize the instance of struct fb_ops with fbdev initializer
macros for framebuffers in I/O address space. Set the read/write,
draw and mmap callbacks to the correct implementation and avoid
implicit defaults. Also select the necessary I/O helpers in Kconfig.

Fbdev drivers sometimes rely on the callbacks being NULL for a
default implementation to be invoked; hence requiring the I/O
helpers to be built in any case. Setting all callbacks in all
drivers explicitly will allow to make the I/O helpers optional.
This benefits systems that do not use these functions.

To simplify the conversion, provide a dedicated fb_ops instance
for accelerated devices. No functional changes.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Acked-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Cc: Kristoffer Ericson <kristoffer.ericson@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230927074722.6197-32-tzimmermann@suse.de
parent 98807533
...@@ -671,6 +671,7 @@ config FB_S1D13XXX ...@@ -671,6 +671,7 @@ config FB_S1D13XXX
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
select FB_IOMEM_FOPS
help help
Support for S1D13XXX framebuffer device family (currently only Support for S1D13XXX framebuffer device family (currently only
working with S1D13806). Product specs at working with S1D13806). Product specs at
......
...@@ -596,18 +596,26 @@ s1d13xxxfb_bitblt_solidfill(struct fb_info *info, const struct fb_fillrect *rect ...@@ -596,18 +596,26 @@ s1d13xxxfb_bitblt_solidfill(struct fb_info *info, const struct fb_fillrect *rect
} }
/* framebuffer information structures */ /* framebuffer information structures */
static struct fb_ops s1d13xxxfb_fbops = { static const struct fb_ops s1d13xxxfb_fbops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
FB_DEFAULT_IOMEM_OPS,
.fb_set_par = s1d13xxxfb_set_par, .fb_set_par = s1d13xxxfb_set_par,
.fb_setcolreg = s1d13xxxfb_setcolreg, .fb_setcolreg = s1d13xxxfb_setcolreg,
.fb_blank = s1d13xxxfb_blank, .fb_blank = s1d13xxxfb_blank,
.fb_pan_display = s1d13xxxfb_pan_display, .fb_pan_display = s1d13xxxfb_pan_display,
};
/* gets replaced at chip detection time */ static const struct fb_ops s1d13xxxfb_fbops_s1d13506 = {
.fb_fillrect = cfb_fillrect, .owner = THIS_MODULE,
.fb_copyarea = cfb_copyarea, __FB_DEFAULT_IOMEM_OPS_RDWR,
.fb_set_par = s1d13xxxfb_set_par,
.fb_setcolreg = s1d13xxxfb_setcolreg,
.fb_blank = s1d13xxxfb_blank,
.fb_pan_display = s1d13xxxfb_pan_display,
.fb_fillrect = s1d13xxxfb_bitblt_solidfill,
.fb_copyarea = s1d13xxxfb_bitblt_copyarea,
.fb_imageblit = cfb_imageblit, .fb_imageblit = cfb_imageblit,
__FB_DEFAULT_IOMEM_OPS_MMAP,
}; };
static int s1d13xxxfb_width_tab[2][4] = { static int s1d13xxxfb_width_tab[2][4] = {
...@@ -869,17 +877,16 @@ static int s1d13xxxfb_probe(struct platform_device *pdev) ...@@ -869,17 +877,16 @@ static int s1d13xxxfb_probe(struct platform_device *pdev)
default_par->regs, info->fix.smem_len / 1024, info->screen_base); default_par->regs, info->fix.smem_len / 1024, info->screen_base);
info->par = default_par; info->par = default_par;
info->flags = FBINFO_HWACCEL_YPAN;
info->fbops = &s1d13xxxfb_fbops;
switch(prod_id) { switch(prod_id) {
case S1D13506_PROD_ID: /* activate acceleration */ case S1D13506_PROD_ID: /* activate acceleration */
s1d13xxxfb_fbops.fb_fillrect = s1d13xxxfb_bitblt_solidfill;
s1d13xxxfb_fbops.fb_copyarea = s1d13xxxfb_bitblt_copyarea;
info->flags = FBINFO_HWACCEL_YPAN | info->flags = FBINFO_HWACCEL_YPAN |
FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA; FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;
info->fbops = &s1d13xxxfb_fbops_s1d13506;
break; break;
default: default:
info->flags = FBINFO_HWACCEL_YPAN;
info->fbops = &s1d13xxxfb_fbops;
break; break;
} }
......
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