hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/video/fbdev/arkfb.c
....@@ -778,7 +778,12 @@
778778 return -EINVAL;
779779 }
780780
781
- ark_set_pixclock(info, (hdiv * info->var.pixclock) / hmul);
781
+ value = (hdiv * info->var.pixclock) / hmul;
782
+ if (!value) {
783
+ fb_dbg(info, "invalid pixclock\n");
784
+ value = 1;
785
+ }
786
+ ark_set_pixclock(info, value);
782787 svga_set_timings(par->state.vgabase, &ark_timing_regs, &(info->var), hmul, hdiv,
783788 (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1,
784789 (info->var.vmode & FB_VMODE_INTERLACED) ? 2 : 1,
....@@ -789,6 +794,8 @@
789794 value = ((value * hmul / hdiv) / 8) - 5;
790795 vga_wcrt(par->state.vgabase, 0x42, (value + 1) / 2);
791796
797
+ if (screen_size > info->screen_size)
798
+ screen_size = info->screen_size;
792799 memset_io(info->screen_base, 0x00, screen_size);
793800 /* Device and screen back on */
794801 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
....@@ -917,7 +924,7 @@
917924
918925 /* Frame buffer operations */
919926
920
-static struct fb_ops arkfb_ops = {
927
+static const struct fb_ops arkfb_ops = {
921928 .owner = THIS_MODULE,
922929 .fb_open = arkfb_open,
923930 .fb_release = arkfb_release,
....@@ -954,10 +961,8 @@
954961
955962 /* Allocate and fill driver data structure */
956963 info = framebuffer_alloc(sizeof(struct arkfb_info), &(dev->dev));
957
- if (! info) {
958
- dev_err(&(dev->dev), "cannot allocate memory\n");
964
+ if (!info)
959965 return -ENOMEM;
960
- }
961966
962967 par = info->par;
963968 mutex_init(&par->open_lock);
....@@ -1087,12 +1092,11 @@
10871092 }
10881093
10891094
1090
-#ifdef CONFIG_PM
10911095 /* PCI suspend */
10921096
1093
-static int ark_pci_suspend (struct pci_dev* dev, pm_message_t state)
1097
+static int __maybe_unused ark_pci_suspend(struct device *dev)
10941098 {
1095
- struct fb_info *info = pci_get_drvdata(dev);
1099
+ struct fb_info *info = dev_get_drvdata(dev);
10961100 struct arkfb_info *par = info->par;
10971101
10981102 dev_info(info->device, "suspend\n");
....@@ -1100,17 +1104,13 @@
11001104 console_lock();
11011105 mutex_lock(&(par->open_lock));
11021106
1103
- if ((state.event == PM_EVENT_FREEZE) || (par->ref_count == 0)) {
1107
+ if (par->ref_count == 0) {
11041108 mutex_unlock(&(par->open_lock));
11051109 console_unlock();
11061110 return 0;
11071111 }
11081112
11091113 fb_set_suspend(info, 1);
1110
-
1111
- pci_save_state(dev);
1112
- pci_disable_device(dev);
1113
- pci_set_power_state(dev, pci_choose_state(dev, state));
11141114
11151115 mutex_unlock(&(par->open_lock));
11161116 console_unlock();
....@@ -1121,9 +1121,9 @@
11211121
11221122 /* PCI resume */
11231123
1124
-static int ark_pci_resume (struct pci_dev* dev)
1124
+static int __maybe_unused ark_pci_resume(struct device *dev)
11251125 {
1126
- struct fb_info *info = pci_get_drvdata(dev);
1126
+ struct fb_info *info = dev_get_drvdata(dev);
11271127 struct arkfb_info *par = info->par;
11281128
11291129 dev_info(info->device, "resume\n");
....@@ -1134,14 +1134,6 @@
11341134 if (par->ref_count == 0)
11351135 goto fail;
11361136
1137
- pci_set_power_state(dev, PCI_D0);
1138
- pci_restore_state(dev);
1139
-
1140
- if (pci_enable_device(dev))
1141
- goto fail;
1142
-
1143
- pci_set_master(dev);
1144
-
11451137 arkfb_set_par(info);
11461138 fb_set_suspend(info, 0);
11471139
....@@ -1150,10 +1142,17 @@
11501142 console_unlock();
11511143 return 0;
11521144 }
1153
-#else
1154
-#define ark_pci_suspend NULL
1155
-#define ark_pci_resume NULL
1156
-#endif /* CONFIG_PM */
1145
+
1146
+static const struct dev_pm_ops ark_pci_pm_ops = {
1147
+#ifdef CONFIG_PM_SLEEP
1148
+ .suspend = ark_pci_suspend,
1149
+ .resume = ark_pci_resume,
1150
+ .freeze = NULL,
1151
+ .thaw = ark_pci_resume,
1152
+ .poweroff = ark_pci_suspend,
1153
+ .restore = ark_pci_resume,
1154
+#endif
1155
+};
11571156
11581157 /* List of boards that we are trying to support */
11591158
....@@ -1170,8 +1169,7 @@
11701169 .id_table = ark_devices,
11711170 .probe = ark_pci_probe,
11721171 .remove = ark_pci_remove,
1173
- .suspend = ark_pci_suspend,
1174
- .resume = ark_pci_resume,
1172
+ .driver.pm = &ark_pci_pm_ops,
11751173 };
11761174
11771175 /* Cleanup */