From: Thomas Zimmermann <tzimmermann@suse.de>
To: javierm@redhat.com, deller@gmx.de, daniel@ffwll.ch,
sam@ravnborg.org, maxime@cerno.tech
Cc: linux-fbdev@vger.kernel.org, linux-staging@lists.linux.dev,
dri-devel@lists.freedesktop.org,
Thomas Zimmermann <tzimmermann@suse.de>
Subject: [PATCH 02/11] fbdev/vga16fb: Create EGA/VGA devices in sysfb code
Date: Thu, 7 Jul 2022 17:39:43 +0200 [thread overview]
Message-ID: <20220707153952.32264-3-tzimmermann@suse.de> (raw)
In-Reply-To: <20220707153952.32264-1-tzimmermann@suse.de>
Move the device-creation from vga16fb to sysfb code. Move the few
extra videomode checks into vga16fb's probe function.
The vga16fb driver requires a screen_info for type VIDEO_TYPE_VGAC
or VIDEO_TYPE_EGAC. Such code is nowhere present in the kernel, except
for some MIPS systems. It's not clear if the vga16fb driver actually
works in practice.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/firmware/sysfb.c | 4 +++
drivers/video/fbdev/vga16fb.c | 59 +++++++++++++++++------------------
2 files changed, 32 insertions(+), 31 deletions(-)
diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
index 1f276f108cc9..3fd3563d962b 100644
--- a/drivers/firmware/sysfb.c
+++ b/drivers/firmware/sysfb.c
@@ -94,6 +94,10 @@ static __init int sysfb_init(void)
name = "efi-framebuffer";
else if (si->orig_video_isVGA == VIDEO_TYPE_VLFB)
name = "vesa-framebuffer";
+ else if (si->orig_video_isVGA == VIDEO_TYPE_VGAC)
+ name = "vga-framebuffer";
+ else if (si->orig_video_isVGA == VIDEO_TYPE_EGAC)
+ name = "ega-framebuffer";
else
name = "platform-framebuffer";
diff --git a/drivers/video/fbdev/vga16fb.c b/drivers/video/fbdev/vga16fb.c
index faf76972114d..f7c1bb018843 100644
--- a/drivers/video/fbdev/vga16fb.c
+++ b/drivers/video/fbdev/vga16fb.c
@@ -185,19 +185,19 @@ static inline void setindex(int index)
}
/* Check if the video mode is supported by the driver */
-static inline int check_mode_supported(void)
+static inline int check_mode_supported(const struct screen_info *si)
{
/* non-x86 architectures treat orig_video_isVGA as a boolean flag */
#if defined(CONFIG_X86)
/* only EGA and VGA in 16 color graphic mode are supported */
- if (screen_info.orig_video_isVGA != VIDEO_TYPE_EGAC &&
- screen_info.orig_video_isVGA != VIDEO_TYPE_VGAC)
+ if (si->orig_video_isVGA != VIDEO_TYPE_EGAC &&
+ si->orig_video_isVGA != VIDEO_TYPE_VGAC)
return -ENODEV;
- if (screen_info.orig_video_mode != 0x0D && /* 320x200/4 (EGA) */
- screen_info.orig_video_mode != 0x0E && /* 640x200/4 (EGA) */
- screen_info.orig_video_mode != 0x10 && /* 640x350/4 (EGA) */
- screen_info.orig_video_mode != 0x12) /* 640x480/4 (VGA) */
+ if (si->orig_video_mode != 0x0D && /* 320x200/4 (EGA) */
+ si->orig_video_mode != 0x0E && /* 640x200/4 (EGA) */
+ si->orig_video_mode != 0x10 && /* 640x350/4 (EGA) */
+ si->orig_video_mode != 0x12) /* 640x480/4 (VGA) */
return -ENODEV;
#endif
return 0;
@@ -1321,11 +1321,20 @@ static int __init vga16fb_setup(char *options)
static int vga16fb_probe(struct platform_device *dev)
{
+ struct screen_info *si;
struct fb_info *info;
struct vga16fb_par *par;
int i;
int ret = 0;
+ si = dev_get_platdata(&dev->dev);
+ if (!si)
+ return -ENODEV;
+
+ ret = check_mode_supported(si);
+ if (ret)
+ return ret;
+
printk(KERN_DEBUG "vga16fb: initializing\n");
info = framebuffer_alloc(sizeof(struct vga16fb_par), &dev->dev);
@@ -1352,10 +1361,10 @@ static int vga16fb_probe(struct platform_device *dev)
par = info->par;
#if defined(CONFIG_X86)
- par->isVGA = screen_info.orig_video_isVGA == VIDEO_TYPE_VGAC;
+ par->isVGA = si->orig_video_isVGA == VIDEO_TYPE_VGAC;
#else
/* non-x86 architectures treat orig_video_isVGA as a boolean flag */
- par->isVGA = screen_info.orig_video_isVGA;
+ par->isVGA = si->orig_video_isVGA;
#endif
par->palette_blanked = 0;
par->vesa_blanked = 0;
@@ -1425,16 +1434,21 @@ static int vga16fb_remove(struct platform_device *dev)
return 0;
}
+static const struct platform_device_id vga16fb_driver_id_table[] = {
+ {"ega-framebuffer", 0},
+ {"vga-framebuffer", 0},
+ { }
+};
+
static struct platform_driver vga16fb_driver = {
.probe = vga16fb_probe,
.remove = vga16fb_remove,
.driver = {
- .name = "vga16fb",
+ .name = "vga-framebuffer",
},
+ .id_table = vga16fb_driver_id_table,
};
-static struct platform_device *vga16fb_device;
-
static int __init vga16fb_init(void)
{
int ret;
@@ -1447,32 +1461,15 @@ static int __init vga16fb_init(void)
vga16fb_setup(option);
#endif
- ret = check_mode_supported();
+ ret = platform_driver_register(&vga16fb_driver);
if (ret)
return ret;
- ret = platform_driver_register(&vga16fb_driver);
-
- if (!ret) {
- vga16fb_device = platform_device_alloc("vga16fb", 0);
-
- if (vga16fb_device)
- ret = platform_device_add(vga16fb_device);
- else
- ret = -ENOMEM;
-
- if (ret) {
- platform_device_put(vga16fb_device);
- platform_driver_unregister(&vga16fb_driver);
- }
- }
-
- return ret;
+ return 0;
}
static void __exit vga16fb_exit(void)
{
- platform_device_unregister(vga16fb_device);
platform_driver_unregister(&vga16fb_driver);
}
--
2.36.1
next prev parent reply other threads:[~2022-07-07 15:40 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-07 15:39 [PATCH 00/11] fbdev: Maintain device ownership with aperture helpers Thomas Zimmermann
2022-07-07 15:39 ` Thomas Zimmermann [this message]
2022-07-08 13:09 ` [PATCH 02/11] fbdev/vga16fb: Create EGA/VGA devices in sysfb code Javier Martinez Canillas
2022-07-11 7:58 ` Thomas Zimmermann
2022-07-11 9:54 ` Javier Martinez Canillas
2022-07-11 10:42 ` Thomas Zimmermann
2022-07-11 10:50 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 03/11] fbdev/vga16fb: Auto-generate module init/exit code Thomas Zimmermann
2022-07-08 13:16 ` Javier Martinez Canillas
2022-07-11 8:01 ` Thomas Zimmermann
2022-07-11 9:55 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 04/11] fbdev/core: Remove remove_conflicting_pci_framebuffers() Thomas Zimmermann
2022-07-11 10:51 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 05/11] fbdev: Convert drivers to aperture helpers Thomas Zimmermann
2022-07-11 11:01 ` Javier Martinez Canillas
2022-07-15 11:48 ` Thomas Zimmermann
2022-07-15 11:56 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 06/11] fbdev: Remove conflicting devices on PCI bus Thomas Zimmermann
2022-07-11 11:13 ` Javier Martinez Canillas
2022-07-15 11:52 ` Thomas Zimmermann
2022-07-07 15:39 ` [PATCH 07/11] video/aperture: Disable and unregister sysfb devices via aperture helpers Thomas Zimmermann
2022-07-11 11:16 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 08/11] video: Provide constants for VGA I/O range Thomas Zimmermann
2022-07-11 11:21 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 09/11] video/aperture: Remove conflicting VGA devices, if any Thomas Zimmermann
2022-07-11 11:24 ` Javier Martinez Canillas
2022-07-07 15:39 ` [PATCH 10/11] fbdev: Acquire framebuffer apertures for firmware devices Thomas Zimmermann
2022-07-11 11:29 ` Javier Martinez Canillas
2022-07-15 11:58 ` Thomas Zimmermann
2022-07-07 15:39 ` [PATCH 11/11] fbdev: Remove conflict-handling code Thomas Zimmermann
2022-07-11 11:33 ` Javier Martinez Canillas
[not found] ` <20220707153952.32264-2-tzimmermann@suse.de>
2022-07-08 12:49 ` [PATCH 01/11] fbdev: Remove trailing whitespaces Javier Martinez Canillas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220707153952.32264-3-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=daniel@ffwll.ch \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=javierm@redhat.com \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=maxime@cerno.tech \
--cc=sam@ravnborg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).