forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/video/fbdev/sm712fb.c
....@@ -1047,7 +1047,7 @@
10471047 if (count + p > total_size)
10481048 count = total_size - p;
10491049
1050
- buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
1050
+ buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
10511051 if (!buffer)
10521052 return -ENOMEM;
10531053
....@@ -1059,24 +1059,13 @@
10591059 while (count) {
10601060 c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
10611061 dst = buffer;
1062
- for (i = c >> 2; i--;) {
1063
- *dst = fb_readl(src++);
1064
- *dst = big_swap(*dst);
1065
- dst++;
1066
- }
1067
- if (c & 3) {
1068
- u8 *dst8 = (u8 *)dst;
1069
- u8 __iomem *src8 = (u8 __iomem *)src;
1062
+ for (i = (c + 3) >> 2; i--;) {
1063
+ u32 val;
10701064
1071
- for (i = c & 3; i--;) {
1072
- if (i & 1) {
1073
- *dst8++ = fb_readb(++src8);
1074
- } else {
1075
- *dst8++ = fb_readb(--src8);
1076
- src8 += 2;
1077
- }
1078
- }
1079
- src = (u32 __iomem *)src8;
1065
+ val = fb_readl(src);
1066
+ *dst = big_swap(val);
1067
+ src++;
1068
+ dst++;
10801069 }
10811070
10821071 if (copy_to_user(buf, buffer, c)) {
....@@ -1130,7 +1119,7 @@
11301119 count = total_size - p;
11311120 }
11321121
1133
- buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
1122
+ buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
11341123 if (!buffer)
11351124 return -ENOMEM;
11361125
....@@ -1148,23 +1137,10 @@
11481137 break;
11491138 }
11501139
1151
- for (i = c >> 2; i--;) {
1152
- fb_writel(big_swap(*src), dst++);
1140
+ for (i = (c + 3) >> 2; i--;) {
1141
+ fb_writel(big_swap(*src), dst);
1142
+ dst++;
11531143 src++;
1154
- }
1155
- if (c & 3) {
1156
- u8 *src8 = (u8 *)src;
1157
- u8 __iomem *dst8 = (u8 __iomem *)dst;
1158
-
1159
- for (i = c & 3; i--;) {
1160
- if (i & 1) {
1161
- fb_writeb(*src8++, ++dst8);
1162
- } else {
1163
- fb_writeb(*src8++, --dst8);
1164
- dst8 += 2;
1165
- }
1166
- }
1167
- dst = (u32 __iomem *)dst8;
11681144 }
11691145
11701146 *ppos += c;
....@@ -1369,7 +1345,7 @@
13691345 return 0;
13701346 }
13711347
1372
-static struct fb_ops smtcfb_ops = {
1348
+static const struct fb_ops smtcfb_ops = {
13731349 .owner = THIS_MODULE,
13741350 .fb_check_var = smtc_check_var,
13751351 .fb_set_par = smtc_set_par,
....@@ -1540,7 +1516,6 @@
15401516
15411517 info = framebuffer_alloc(sizeof(*sfb), &pdev->dev);
15421518 if (!info) {
1543
- dev_err(&pdev->dev, "framebuffer_alloc failed\n");
15441519 err = -ENOMEM;
15451520 goto failed_free;
15461521 }
....@@ -1605,6 +1580,14 @@
16051580 sfb->fb->fix.mmio_start = mmio_base;
16061581 sfb->fb->fix.mmio_len = 0x00200000;
16071582 sfb->dp_regs = ioremap(mmio_base, 0x00200000 + smem_size);
1583
+ if (!sfb->dp_regs) {
1584
+ dev_err(&pdev->dev,
1585
+ "%s: unable to map memory mapped IO!\n",
1586
+ sfb->fb->fix.id);
1587
+ err = -ENOMEM;
1588
+ goto failed_fb;
1589
+ }
1590
+
16081591 sfb->lfb = sfb->dp_regs + 0x00200000;
16091592 sfb->mmio = (smtc_regbaseaddress =
16101593 sfb->dp_regs + 0x000c0000);
....@@ -1617,7 +1600,7 @@
16171600 default:
16181601 dev_err(&pdev->dev,
16191602 "No valid Silicon Motion display chip was detected!\n");
1620
-
1603
+ err = -ENODEV;
16211604 goto failed_fb;
16221605 }
16231606
....@@ -1697,10 +1680,8 @@
16971680
16981681 static int __maybe_unused smtcfb_pci_suspend(struct device *device)
16991682 {
1700
- struct pci_dev *pdev = to_pci_dev(device);
1701
- struct smtcfb_info *sfb;
1683
+ struct smtcfb_info *sfb = dev_get_drvdata(device);
17021684
1703
- sfb = pci_get_drvdata(pdev);
17041685
17051686 /* set the hw in sleep mode use external clock and self memory refresh
17061687 * so that we can turn off internal PLLs later on
....@@ -1720,10 +1701,8 @@
17201701
17211702 static int __maybe_unused smtcfb_pci_resume(struct device *device)
17221703 {
1723
- struct pci_dev *pdev = to_pci_dev(device);
1724
- struct smtcfb_info *sfb;
1704
+ struct smtcfb_info *sfb = dev_get_drvdata(device);
17251705
1726
- sfb = pci_get_drvdata(pdev);
17271706
17281707 /* reinit hardware */
17291708 sm7xx_init_hw();