Detect the primary VGA device with fb_is_primary_device() in the implementation of fb_firmware_edid(). Remove the existing code. Adapt the function to receive an instance of struct fb_info and update all callers. Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> Cc: Daniel Vetter <daniel@xxxxxxxx> Cc: Helge Deller <deller@xxxxxx> Cc: Antonino Daplas <adaplas@xxxxxxxxx> Cc: Maik Broemme <mbroemme@xxxxxxxxxx> Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> --- drivers/video/fbdev/core/fbmon.c | 25 +++++++---------------- drivers/video/fbdev/i810/i810-i2c.c | 2 +- drivers/video/fbdev/intelfb/intelfbdrv.c | 2 +- drivers/video/fbdev/nvidia/nv_i2c.c | 2 +- drivers/video/fbdev/savage/savagefb-i2c.c | 2 +- include/linux/fb.h | 2 +- 6 files changed, 12 insertions(+), 23 deletions(-) diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c index 79e5bfbdd34c2..35be4431f649a 100644 --- a/drivers/video/fbdev/core/fbmon.c +++ b/drivers/video/fbdev/core/fbmon.c @@ -28,7 +28,6 @@ */ #include <linux/fb.h> #include <linux/module.h> -#include <linux/pci.h> #include <linux/slab.h> #include <video/edid.h> #include <video/of_videomode.h> @@ -1482,31 +1481,21 @@ int fb_validate_mode(const struct fb_var_screeninfo *var, struct fb_info *info) } #if defined(CONFIG_FIRMWARE_EDID) && defined(CONFIG_X86) - -/* - * We need to ensure that the EDID block is only returned for - * the primary graphics adapter. - */ - -const unsigned char *fb_firmware_edid(struct device *device) +const unsigned char *fb_firmware_edid(struct fb_info *info) { - struct pci_dev *dev = NULL; - struct resource *res = NULL; unsigned char *edid = NULL; - if (device) - dev = to_pci_dev(device); - - if (dev) - res = &dev->resource[PCI_ROM_RESOURCE]; - - if (res && res->flags & IORESOURCE_ROM_SHADOW) + /* + * We need to ensure that the EDID block is only + * returned for the primary graphics adapter. + */ + if (fb_is_primary_device(info)) edid = edid_info.dummy; return edid; } #else -const unsigned char *fb_firmware_edid(struct device *device) +const unsigned char *fb_firmware_edid(struct fb_info *info) { return NULL; } diff --git a/drivers/video/fbdev/i810/i810-i2c.c b/drivers/video/fbdev/i810/i810-i2c.c index 7db17d0d8a8cf..b605e96620c1f 100644 --- a/drivers/video/fbdev/i810/i810-i2c.c +++ b/drivers/video/fbdev/i810/i810-i2c.c @@ -161,7 +161,7 @@ int i810_probe_i2c_connector(struct fb_info *info, u8 **out_edid, int conn) if (conn < par->ddc_num) { edid = fb_ddc_read(&par->chan[conn].adapter); } else { - const u8 *e = fb_firmware_edid(info->device); + const u8 *e = fb_firmware_edid(info); if (e != NULL) { DPRINTK("i810-i2c: Getting EDID from BIOS\n"); diff --git a/drivers/video/fbdev/intelfb/intelfbdrv.c b/drivers/video/fbdev/intelfb/intelfbdrv.c index a81095b2b1ea5..4633a75e3a613 100644 --- a/drivers/video/fbdev/intelfb/intelfbdrv.c +++ b/drivers/video/fbdev/intelfb/intelfbdrv.c @@ -1024,7 +1024,7 @@ static int intelfb_init_var(struct intelfb_info *dinfo) sizeof(struct fb_var_screeninfo)); msrc = 5; } else { - const u8 *edid_s = fb_firmware_edid(&dinfo->pdev->dev); + const u8 *edid_s = fb_firmware_edid(dinfo->info); u8 *edid_d = NULL; if (edid_s) { diff --git a/drivers/video/fbdev/nvidia/nv_i2c.c b/drivers/video/fbdev/nvidia/nv_i2c.c index 0b48965a6420c..632e7d622ebfa 100644 --- a/drivers/video/fbdev/nvidia/nv_i2c.c +++ b/drivers/video/fbdev/nvidia/nv_i2c.c @@ -159,7 +159,7 @@ int nvidia_probe_i2c_connector(struct fb_info *info, int conn, u8 **out_edid) if (!edid && conn == 1) { /* try to get from firmware */ - const u8 *e = fb_firmware_edid(info->device); + const u8 *e = fb_firmware_edid(info); if (e != NULL) edid = kmemdup(e, EDID_LENGTH, GFP_KERNEL); diff --git a/drivers/video/fbdev/savage/savagefb-i2c.c b/drivers/video/fbdev/savage/savagefb-i2c.c index 80fa87e2ae2ff..cf9c376f76526 100644 --- a/drivers/video/fbdev/savage/savagefb-i2c.c +++ b/drivers/video/fbdev/savage/savagefb-i2c.c @@ -227,7 +227,7 @@ int savagefb_probe_i2c_connector(struct fb_info *info, u8 **out_edid) if (!edid) { /* try to get from firmware */ - const u8 *e = fb_firmware_edid(info->device); + const u8 *e = fb_firmware_edid(info); if (e) edid = kmemdup(e, EDID_LENGTH, GFP_KERNEL); diff --git a/include/linux/fb.h b/include/linux/fb.h index 1d5c13f34b098..5ffd2223326bf 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -761,7 +761,7 @@ extern int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, extern int fb_validate_mode(const struct fb_var_screeninfo *var, struct fb_info *info); extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var); -extern const unsigned char *fb_firmware_edid(struct device *device); +extern const unsigned char *fb_firmware_edid(struct fb_info *info); extern void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs); extern void fb_destroy_modedb(struct fb_videomode *modedb); -- 2.41.0