static int vesafb_probe(struct platform_device *dev)
 {
-       struct screen_info *si = &screen_info;
+       struct screen_info *si;
        struct fb_info *info;
        struct vesafb_par *par;
        int i, err;
        unsigned int size_total;
        char *option = NULL;
 
+       /*
+        * If we fail probing the device, the kernel might try a different
+        * driver. We get a copy of the attached screen_info, so that we can
+        * modify its values without affecting later drivers.
+        */
+       si = dev_get_platdata(&dev->dev);
+       if (!si)
+               return -ENODEV;
+       si = devm_kmemdup(&dev->dev, si, sizeof(*si), GFP_KERNEL);
+       if (!si)
+               return -ENOMEM;
+
        /* ignore error return of fb_get_options */
        fb_get_options("vesafb", &option);
        vesafb_setup(option);