Lines Matching defs:fbdev

87 static inline u32 ocfb_readreg(struct ocfb_dev *fbdev, loff_t offset)
89 if (fbdev->little_endian)
90 return ioread32(fbdev->regs + offset);
92 return ioread32be(fbdev->regs + offset);
95 static void ocfb_writereg(struct ocfb_dev *fbdev, loff_t offset, u32 data)
97 if (fbdev->little_endian)
98 iowrite32(data, fbdev->regs + offset);
100 iowrite32be(data, fbdev->regs + offset);
103 static int ocfb_setupfb(struct ocfb_dev *fbdev)
106 struct fb_var_screeninfo *var = &fbdev->info.var;
107 struct device *dev = fbdev->info.device;
112 ocfb_writereg(fbdev, OCFB_CTRL, 0);
115 fbdev->little_endian = 0;
116 ocfb_writereg(fbdev, OCFB_VBARA, fbdev->fb_phys);
119 if (ocfb_readreg(fbdev, OCFB_VBARA) != fbdev->fb_phys) {
120 fbdev->little_endian = 1;
121 ocfb_writereg(fbdev, OCFB_VBARA, fbdev->fb_phys);
125 ocfb_writereg(fbdev, OCFB_HTIM, (var->hsync_len - 1) << 24 |
129 ocfb_writereg(fbdev, OCFB_VTIM, (var->vsync_len - 1) << 24 |
139 ocfb_writereg(fbdev, OCFB_HVLEN, (hlen - 1) << 16 | (vlen - 1));
169 ocfb_writereg(fbdev, OCFB_CTRL, (OCFB_CTRL_VEN | bpp_config));
178 struct ocfb_dev *fbdev = (struct ocfb_dev *)info->par;
199 ocfb_writereg(fbdev, OCFB_PALETTE + regno, color);
211 static int ocfb_init_fix(struct ocfb_dev *fbdev)
213 struct fb_var_screeninfo *var = &fbdev->info.var;
214 struct fb_fix_screeninfo *fix = &fbdev->info.fix;
230 static int ocfb_init_var(struct ocfb_dev *fbdev)
232 struct fb_var_screeninfo *var = &fbdev->info.var;
299 struct ocfb_dev *fbdev;
302 fbdev = devm_kzalloc(&pdev->dev, sizeof(*fbdev), GFP_KERNEL);
303 if (!fbdev)
306 platform_set_drvdata(pdev, fbdev);
308 fbdev->info.fbops = &ocfb_ops;
309 fbdev->info.device = &pdev->dev;
310 fbdev->info.par = fbdev;
313 if (!fb_find_mode(&fbdev->info.var, &fbdev->info, mode_option,
318 ocfb_init_var(fbdev);
319 ocfb_init_fix(fbdev);
321 fbdev->regs = devm_platform_ioremap_resource(pdev, 0);
322 if (IS_ERR(fbdev->regs))
323 return PTR_ERR(fbdev->regs);
326 fbsize = fbdev->info.fix.smem_len;
327 fbdev->fb_virt = dma_alloc_coherent(&pdev->dev, PAGE_ALIGN(fbsize),
328 &fbdev->fb_phys, GFP_KERNEL);
329 if (!fbdev->fb_virt) {
334 fbdev->info.fix.smem_start = fbdev->fb_phys;
335 fbdev->info.screen_base = fbdev->fb_virt;
336 fbdev->info.pseudo_palette = fbdev->pseudo_palette;
339 memset_io(fbdev->fb_virt, 0, fbsize);
342 ocfb_setupfb(fbdev);
344 if (fbdev->little_endian)
345 fbdev->info.flags |= FBINFO_FOREIGN_ENDIAN;
348 ret = fb_alloc_cmap(&fbdev->info.cmap, PALETTE_SIZE, 0);
355 ret = register_framebuffer(&fbdev->info);
364 fb_dealloc_cmap(&fbdev->info.cmap);
367 dma_free_coherent(&pdev->dev, PAGE_ALIGN(fbsize), fbdev->fb_virt,
368 fbdev->fb_phys);
375 struct ocfb_dev *fbdev = platform_get_drvdata(pdev);
377 unregister_framebuffer(&fbdev->info);
378 fb_dealloc_cmap(&fbdev->info.cmap);
379 dma_free_coherent(&pdev->dev, PAGE_ALIGN(fbdev->info.fix.smem_len),
380 fbdev->fb_virt, fbdev->fb_phys);
383 ocfb_writereg(fbdev, OCFB_CTRL, 0);