mb862xxfbdrv.c (bf1842996aaa726bf3d108b41f366b88680acbe6) mb862xxfbdrv.c (e035a53e7b048ebd52fe8c46a2c7bc4e7e685ba3)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * drivers/mb862xx/mb862xxfb.c
4 *
5 * Fujitsu Carmine/Coral-P(A)/Lime framebuffer driver
6 *
7 * (C) 2008 Anatolij Gustschin <agust@denx.de>
8 * DENX Software Engineering

--- 4 unchanged lines hidden (view full) ---

13#include <linux/aperture.h>
14#include <linux/fb.h>
15#include <linux/delay.h>
16#include <linux/uaccess.h>
17#include <linux/module.h>
18#include <linux/init.h>
19#include <linux/interrupt.h>
20#include <linux/pci.h>
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * drivers/mb862xx/mb862xxfb.c
4 *
5 * Fujitsu Carmine/Coral-P(A)/Lime framebuffer driver
6 *
7 * (C) 2008 Anatolij Gustschin <agust@denx.de>
8 * DENX Software Engineering

--- 4 unchanged lines hidden (view full) ---

13#include <linux/aperture.h>
14#include <linux/fb.h>
15#include <linux/delay.h>
16#include <linux/uaccess.h>
17#include <linux/module.h>
18#include <linux/init.h>
19#include <linux/interrupt.h>
20#include <linux/pci.h>
21#include <linux/of.h>
21#if defined(CONFIG_OF)
22#include <linux/of_address.h>
23#include <linux/of_irq.h>
22#include <linux/of_address.h>
23#include <linux/of_irq.h>
24#include <linux/platform_device.h>
25
24#include <linux/of_platform.h>
25#endif
26#include "mb862xxfb.h"
27#include "mb862xx_reg.h"
28
29#define NR_PALETTE 256
30#define MB862XX_MEM_SIZE 0x1000000
31#define CORALP_MEM_SIZE 0x2000000
32#define CARMINE_MEM_SIZE 0x8000000
33#define DRV_NAME "mb862xxfb"

--- 73 unchanged lines hidden (view full) ---

107 return 0;
108}
109
110static int mb862xxfb_check_var(struct fb_var_screeninfo *var,
111 struct fb_info *fbi)
112{
113 unsigned long tmp;
114
26#include "mb862xxfb.h"
27#include "mb862xx_reg.h"
28
29#define NR_PALETTE 256
30#define MB862XX_MEM_SIZE 0x1000000
31#define CORALP_MEM_SIZE 0x2000000
32#define CARMINE_MEM_SIZE 0x8000000
33#define DRV_NAME "mb862xxfb"

--- 73 unchanged lines hidden (view full) ---

107 return 0;
108}
109
110static int mb862xxfb_check_var(struct fb_var_screeninfo *var,
111 struct fb_info *fbi)
112{
113 unsigned long tmp;
114
115 if (fbi->dev)
116 dev_dbg(fbi->dev, "%s\n", __func__);
115 fb_dbg(fbi, "%s\n", __func__);
117
118 /* check if these values fit into the registers */
119 if (var->hsync_len > 255 || var->vsync_len > 255)
120 return -EINVAL;
121
122 if ((var->xres + var->right_margin) >= 4096)
123 return -EINVAL;
124

--- 160 unchanged lines hidden (view full) ---

285 return 0;
286}
287
288static int mb862xxfb_blank(int mode, struct fb_info *fbi)
289{
290 struct mb862xxfb_par *par = fbi->par;
291 unsigned long reg;
292
116
117 /* check if these values fit into the registers */
118 if (var->hsync_len > 255 || var->vsync_len > 255)
119 return -EINVAL;
120
121 if ((var->xres + var->right_margin) >= 4096)
122 return -EINVAL;
123

--- 160 unchanged lines hidden (view full) ---

284 return 0;
285}
286
287static int mb862xxfb_blank(int mode, struct fb_info *fbi)
288{
289 struct mb862xxfb_par *par = fbi->par;
290 unsigned long reg;
291
293 dev_dbg(fbi->dev, "blank mode=%d\n", mode);
292 fb_dbg(fbi, "blank mode=%d\n", mode);
294
295 switch (mode) {
296 case FB_BLANK_POWERDOWN:
297 reg = inreg(disp, GC_DCM1);
298 reg &= ~GC_DCM01_DEN;
299 outreg(disp, GC_DCM1, reg);
300 break;
301 case FB_BLANK_UNBLANK:

--- 101 unchanged lines hidden (view full) ---

403 return -EINVAL;
404 }
405 return 0;
406}
407
408/* framebuffer ops */
409static struct fb_ops mb862xxfb_ops = {
410 .owner = THIS_MODULE,
293
294 switch (mode) {
295 case FB_BLANK_POWERDOWN:
296 reg = inreg(disp, GC_DCM1);
297 reg &= ~GC_DCM01_DEN;
298 outreg(disp, GC_DCM1, reg);
299 break;
300 case FB_BLANK_UNBLANK:

--- 101 unchanged lines hidden (view full) ---

402 return -EINVAL;
403 }
404 return 0;
405}
406
407/* framebuffer ops */
408static struct fb_ops mb862xxfb_ops = {
409 .owner = THIS_MODULE,
410 FB_DEFAULT_IOMEM_OPS,
411 .fb_check_var = mb862xxfb_check_var,
412 .fb_set_par = mb862xxfb_set_par,
413 .fb_setcolreg = mb862xxfb_setcolreg,
414 .fb_blank = mb862xxfb_blank,
415 .fb_pan_display = mb862xxfb_pan,
411 .fb_check_var = mb862xxfb_check_var,
412 .fb_set_par = mb862xxfb_set_par,
413 .fb_setcolreg = mb862xxfb_setcolreg,
414 .fb_blank = mb862xxfb_blank,
415 .fb_pan_display = mb862xxfb_pan,
416 .fb_fillrect = cfb_fillrect,
417 .fb_copyarea = cfb_copyarea,
418 .fb_imageblit = cfb_imageblit,
419 .fb_ioctl = mb862xxfb_ioctl,
420};
421
422/* initialize fb_info data */
423static int mb862xxfb_init_fbinfo(struct fb_info *fbi)
424{
425 struct mb862xxfb_par *par = fbi->par;
426 struct mb862xx_gc_mode *mode = par->gc_mode;

--- 70 unchanged lines hidden (view full) ---

497 fbi->var.yoffset = 0;
498 fbi->var.grayscale = 0;
499 fbi->var.nonstd = 0;
500 fbi->var.height = -1;
501 fbi->var.width = -1;
502 fbi->var.accel_flags = 0;
503 fbi->var.vmode = FB_VMODE_NONINTERLACED;
504 fbi->var.activate = FB_ACTIVATE_NOW;
416 .fb_ioctl = mb862xxfb_ioctl,
417};
418
419/* initialize fb_info data */
420static int mb862xxfb_init_fbinfo(struct fb_info *fbi)
421{
422 struct mb862xxfb_par *par = fbi->par;
423 struct mb862xx_gc_mode *mode = par->gc_mode;

--- 70 unchanged lines hidden (view full) ---

494 fbi->var.yoffset = 0;
495 fbi->var.grayscale = 0;
496 fbi->var.nonstd = 0;
497 fbi->var.height = -1;
498 fbi->var.width = -1;
499 fbi->var.accel_flags = 0;
500 fbi->var.vmode = FB_VMODE_NONINTERLACED;
501 fbi->var.activate = FB_ACTIVATE_NOW;
505 fbi->flags = FBINFO_DEFAULT |
502 fbi->flags =
506#ifdef __BIG_ENDIAN
507 FBINFO_FOREIGN_ENDIAN |
508#endif
509 FBINFO_HWACCEL_XPAN |
510 FBINFO_HWACCEL_YPAN;
511
512 /* check and possibly fix bpp */
513 if ((fbi->fbops->fb_check_var)(&fbi->var, fbi))

--- 272 unchanged lines hidden (view full) ---

786
787static void of_platform_mb862xx_remove(struct platform_device *ofdev)
788{
789 struct fb_info *fbi = dev_get_drvdata(&ofdev->dev);
790 struct mb862xxfb_par *par = fbi->par;
791 resource_size_t res_size = resource_size(par->res);
792 unsigned long reg;
793
503#ifdef __BIG_ENDIAN
504 FBINFO_FOREIGN_ENDIAN |
505#endif
506 FBINFO_HWACCEL_XPAN |
507 FBINFO_HWACCEL_YPAN;
508
509 /* check and possibly fix bpp */
510 if ((fbi->fbops->fb_check_var)(&fbi->var, fbi))

--- 272 unchanged lines hidden (view full) ---

783
784static void of_platform_mb862xx_remove(struct platform_device *ofdev)
785{
786 struct fb_info *fbi = dev_get_drvdata(&ofdev->dev);
787 struct mb862xxfb_par *par = fbi->par;
788 resource_size_t res_size = resource_size(par->res);
789 unsigned long reg;
790
794 dev_dbg(fbi->dev, "%s release\n", fbi->fix.id);
791 fb_dbg(fbi, "%s release\n", fbi->fix.id);
795
796 /* display off */
797 reg = inreg(disp, GC_DCM1);
798 reg &= ~(GC_DCM01_DEN | GC_DCM01_L0E);
799 outreg(disp, GC_DCM1, reg);
800
801 /* disable interrupts */
802 outreg(host, GC_IMASK, 0);

--- 330 unchanged lines hidden (view full) ---

1133}
1134
1135static void mb862xx_pci_remove(struct pci_dev *pdev)
1136{
1137 struct fb_info *fbi = pci_get_drvdata(pdev);
1138 struct mb862xxfb_par *par = fbi->par;
1139 unsigned long reg;
1140
792
793 /* display off */
794 reg = inreg(disp, GC_DCM1);
795 reg &= ~(GC_DCM01_DEN | GC_DCM01_L0E);
796 outreg(disp, GC_DCM1, reg);
797
798 /* disable interrupts */
799 outreg(host, GC_IMASK, 0);

--- 330 unchanged lines hidden (view full) ---

1130}
1131
1132static void mb862xx_pci_remove(struct pci_dev *pdev)
1133{
1134 struct fb_info *fbi = pci_get_drvdata(pdev);
1135 struct mb862xxfb_par *par = fbi->par;
1136 unsigned long reg;
1137
1141 dev_dbg(fbi->dev, "%s release\n", fbi->fix.id);
1138 fb_dbg(fbi, "%s release\n", fbi->fix.id);
1142
1143 /* display off */
1144 reg = inreg(disp, GC_DCM1);
1145 reg &= ~(GC_DCM01_DEN | GC_DCM01_L0E);
1146 outreg(disp, GC_DCM1, reg);
1147
1148 if (par->type == BT_CARMINE) {
1149 outreg(ctrl, GC_CTRL_INT_MASK, 0);

--- 61 unchanged lines hidden ---
1139
1140 /* display off */
1141 reg = inreg(disp, GC_DCM1);
1142 reg &= ~(GC_DCM01_DEN | GC_DCM01_L0E);
1143 outreg(disp, GC_DCM1, reg);
1144
1145 if (par->type == BT_CARMINE) {
1146 outreg(ctrl, GC_CTRL_INT_MASK, 0);

--- 61 unchanged lines hidden ---