hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/video/fbdev/savage/savagefb_driver.c
....@@ -55,7 +55,6 @@
5555
5656 #include <asm/io.h>
5757 #include <asm/irq.h>
58
-#include <asm/pgtable.h>
5958
6059 #include "savagefb.h"
6160
....@@ -1637,7 +1636,7 @@
16371636 return 0;
16381637 }
16391638
1640
-static struct fb_ops savagefb_ops = {
1639
+static const struct fb_ops savagefb_ops = {
16411640 .owner = THIS_MODULE,
16421641 .fb_open = savagefb_open,
16431642 .fb_release = savagefb_release,
....@@ -1860,8 +1859,7 @@
18601859 vga_out8(0x3d4, 0x68, par); /* memory control 1 */
18611860 if ((vga_in8(0x3d5, par) & 0xC0) == (0x01 << 6))
18621861 RamSavage4[1] = 8;
1863
-
1864
- /*FALLTHROUGH*/
1862
+ fallthrough;
18651863
18661864 case S3_SAVAGE2000:
18671865 videoRam = RamSavage4[(config1 & 0xE0) >> 5] * 1024;
....@@ -2155,9 +2153,11 @@
21552153
21562154 err = fb_alloc_cmap(&info->cmap, NR_PALETTE, 0);
21572155 if (!err)
2158
- info->flags |= FBINFO_HWACCEL_COPYAREA |
2159
- FBINFO_HWACCEL_FILLRECT |
2160
- FBINFO_HWACCEL_IMAGEBLIT;
2156
+ info->flags |= FBINFO_HWACCEL_COPYAREA |
2157
+ FBINFO_HWACCEL_FILLRECT |
2158
+ FBINFO_HWACCEL_IMAGEBLIT;
2159
+ else
2160
+ kfree(info->pixmap.addr);
21612161 }
21622162 #endif
21632163 return err;
....@@ -2333,14 +2333,7 @@
23332333 DBG("savagefb_remove");
23342334
23352335 if (info) {
2336
- /*
2337
- * If unregister_framebuffer fails, then
2338
- * we will be leaving hooks that could cause
2339
- * oopsen laying around.
2340
- */
2341
- if (unregister_framebuffer(info))
2342
- printk(KERN_WARNING "savagefb: danger danger! "
2343
- "Oopsen imminent!\n");
2336
+ unregister_framebuffer(info);
23442337
23452338 #ifdef CONFIG_FB_SAVAGE_I2C
23462339 savagefb_delete_i2c_busses(info);
....@@ -2354,9 +2347,9 @@
23542347 }
23552348 }
23562349
2357
-static int savagefb_suspend(struct pci_dev *dev, pm_message_t mesg)
2350
+static int savagefb_suspend_late(struct device *dev, pm_message_t mesg)
23582351 {
2359
- struct fb_info *info = pci_get_drvdata(dev);
2352
+ struct fb_info *info = dev_get_drvdata(dev);
23602353 struct savagefb_par *par = info->par;
23612354
23622355 DBG("savagefb_suspend");
....@@ -2364,7 +2357,7 @@
23642357 if (mesg.event == PM_EVENT_PRETHAW)
23652358 mesg.event = PM_EVENT_FREEZE;
23662359 par->pm_state = mesg.event;
2367
- dev->dev.power.power_state = mesg;
2360
+ dev->power.power_state = mesg;
23682361
23692362 /*
23702363 * For PM_EVENT_FREEZE, do not power down so the console
....@@ -2382,17 +2375,29 @@
23822375 savagefb_blank(FB_BLANK_POWERDOWN, info);
23832376 savage_set_default_par(par, &par->save);
23842377 savage_disable_mmio(par);
2385
- pci_save_state(dev);
2386
- pci_disable_device(dev);
2387
- pci_set_power_state(dev, pci_choose_state(dev, mesg));
23882378 console_unlock();
23892379
23902380 return 0;
23912381 }
23922382
2393
-static int savagefb_resume(struct pci_dev* dev)
2383
+static int __maybe_unused savagefb_suspend(struct device *dev)
23942384 {
2395
- struct fb_info *info = pci_get_drvdata(dev);
2385
+ return savagefb_suspend_late(dev, PMSG_SUSPEND);
2386
+}
2387
+
2388
+static int __maybe_unused savagefb_hibernate(struct device *dev)
2389
+{
2390
+ return savagefb_suspend_late(dev, PMSG_HIBERNATE);
2391
+}
2392
+
2393
+static int __maybe_unused savagefb_freeze(struct device *dev)
2394
+{
2395
+ return savagefb_suspend_late(dev, PMSG_FREEZE);
2396
+}
2397
+
2398
+static int __maybe_unused savagefb_resume(struct device *dev)
2399
+{
2400
+ struct fb_info *info = dev_get_drvdata(dev);
23962401 struct savagefb_par *par = info->par;
23972402 int cur_state = par->pm_state;
23982403
....@@ -2404,20 +2409,11 @@
24042409 * The adapter was not powered down coming back from a
24052410 * PM_EVENT_FREEZE.
24062411 */
2407
- if (cur_state == PM_EVENT_FREEZE) {
2408
- pci_set_power_state(dev, PCI_D0);
2412
+ if (cur_state == PM_EVENT_FREEZE)
24092413 return 0;
2410
- }
24112414
24122415 console_lock();
24132416
2414
- pci_set_power_state(dev, PCI_D0);
2415
- pci_restore_state(dev);
2416
-
2417
- if (pci_enable_device(dev))
2418
- DBG("err");
2419
-
2420
- pci_set_master(dev);
24212417 savage_enable_mmio(par);
24222418 savage_init_hw(par);
24232419 savagefb_set_par(info);
....@@ -2428,6 +2424,16 @@
24282424 return 0;
24292425 }
24302426
2427
+static const struct dev_pm_ops savagefb_pm_ops = {
2428
+#ifdef CONFIG_PM_SLEEP
2429
+ .suspend = savagefb_suspend,
2430
+ .resume = savagefb_resume,
2431
+ .freeze = savagefb_freeze,
2432
+ .thaw = savagefb_resume,
2433
+ .poweroff = savagefb_hibernate,
2434
+ .restore = savagefb_resume,
2435
+#endif
2436
+};
24312437
24322438 static const struct pci_device_id savagefb_devices[] = {
24332439 {PCI_VENDOR_ID_S3, PCI_CHIP_SUPSAV_MX128,
....@@ -2508,8 +2514,7 @@
25082514 .name = "savagefb",
25092515 .id_table = savagefb_devices,
25102516 .probe = savagefb_probe,
2511
- .suspend = savagefb_suspend,
2512
- .resume = savagefb_resume,
2517
+ .driver.pm = &savagefb_pm_ops,
25132518 .remove = savagefb_remove,
25142519 };
25152520