Lines Matching refs:fbdev

87 static inline u32 ocfb_readreg(struct ocfb_dev *fbdev, loff_t offset)  in ocfb_readreg()  argument
89 if (fbdev->little_endian) in ocfb_readreg()
90 return ioread32(fbdev->regs + offset); in ocfb_readreg()
92 return ioread32be(fbdev->regs + offset); in ocfb_readreg()
95 static void ocfb_writereg(struct ocfb_dev *fbdev, loff_t offset, u32 data) in ocfb_writereg() argument
97 if (fbdev->little_endian) in ocfb_writereg()
98 iowrite32(data, fbdev->regs + offset); in ocfb_writereg()
100 iowrite32be(data, fbdev->regs + offset); in ocfb_writereg()
103 static int ocfb_setupfb(struct ocfb_dev *fbdev) in ocfb_setupfb() argument
106 struct fb_var_screeninfo *var = &fbdev->info.var; in ocfb_setupfb()
107 struct device *dev = fbdev->info.device; in ocfb_setupfb()
112 ocfb_writereg(fbdev, OCFB_CTRL, 0); in ocfb_setupfb()
115 fbdev->little_endian = 0; in ocfb_setupfb()
116 ocfb_writereg(fbdev, OCFB_VBARA, fbdev->fb_phys); in ocfb_setupfb()
119 if (ocfb_readreg(fbdev, OCFB_VBARA) != fbdev->fb_phys) { in ocfb_setupfb()
120 fbdev->little_endian = 1; in ocfb_setupfb()
121 ocfb_writereg(fbdev, OCFB_VBARA, fbdev->fb_phys); in ocfb_setupfb()
125 ocfb_writereg(fbdev, OCFB_HTIM, (var->hsync_len - 1) << 24 | in ocfb_setupfb()
129 ocfb_writereg(fbdev, OCFB_VTIM, (var->vsync_len - 1) << 24 | in ocfb_setupfb()
139 ocfb_writereg(fbdev, OCFB_HVLEN, (hlen - 1) << 16 | (vlen - 1)); in ocfb_setupfb()
169 ocfb_writereg(fbdev, OCFB_CTRL, (OCFB_CTRL_VEN | bpp_config)); in ocfb_setupfb()
178 struct ocfb_dev *fbdev = (struct ocfb_dev *)info->par; in ocfb_setcolreg() local
199 ocfb_writereg(fbdev, OCFB_PALETTE + regno, color); in ocfb_setcolreg()
211 static int ocfb_init_fix(struct ocfb_dev *fbdev) in ocfb_init_fix() argument
213 struct fb_var_screeninfo *var = &fbdev->info.var; in ocfb_init_fix()
214 struct fb_fix_screeninfo *fix = &fbdev->info.fix; in ocfb_init_fix()
230 static int ocfb_init_var(struct ocfb_dev *fbdev) in ocfb_init_var() argument
232 struct fb_var_screeninfo *var = &fbdev->info.var; in ocfb_init_var()
297 struct ocfb_dev *fbdev; in ocfb_probe() local
300 fbdev = devm_kzalloc(&pdev->dev, sizeof(*fbdev), GFP_KERNEL); in ocfb_probe()
301 if (!fbdev) in ocfb_probe()
304 platform_set_drvdata(pdev, fbdev); in ocfb_probe()
306 fbdev->info.fbops = &ocfb_ops; in ocfb_probe()
307 fbdev->info.device = &pdev->dev; in ocfb_probe()
308 fbdev->info.par = fbdev; in ocfb_probe()
311 if (!fb_find_mode(&fbdev->info.var, &fbdev->info, mode_option, in ocfb_probe()
316 ocfb_init_var(fbdev); in ocfb_probe()
317 ocfb_init_fix(fbdev); in ocfb_probe()
319 fbdev->regs = devm_platform_ioremap_resource(pdev, 0); in ocfb_probe()
320 if (IS_ERR(fbdev->regs)) in ocfb_probe()
321 return PTR_ERR(fbdev->regs); in ocfb_probe()
324 fbsize = fbdev->info.fix.smem_len; in ocfb_probe()
325 fbdev->fb_virt = dma_alloc_coherent(&pdev->dev, PAGE_ALIGN(fbsize), in ocfb_probe()
326 &fbdev->fb_phys, GFP_KERNEL); in ocfb_probe()
327 if (!fbdev->fb_virt) { in ocfb_probe()
332 fbdev->info.fix.smem_start = fbdev->fb_phys; in ocfb_probe()
333 fbdev->info.screen_base = fbdev->fb_virt; in ocfb_probe()
334 fbdev->info.pseudo_palette = fbdev->pseudo_palette; in ocfb_probe()
337 memset_io(fbdev->fb_virt, 0, fbsize); in ocfb_probe()
340 ocfb_setupfb(fbdev); in ocfb_probe()
342 if (fbdev->little_endian) in ocfb_probe()
343 fbdev->info.flags |= FBINFO_FOREIGN_ENDIAN; in ocfb_probe()
346 ret = fb_alloc_cmap(&fbdev->info.cmap, PALETTE_SIZE, 0); in ocfb_probe()
353 ret = register_framebuffer(&fbdev->info); in ocfb_probe()
362 fb_dealloc_cmap(&fbdev->info.cmap); in ocfb_probe()
365 dma_free_coherent(&pdev->dev, PAGE_ALIGN(fbsize), fbdev->fb_virt, in ocfb_probe()
366 fbdev->fb_phys); in ocfb_probe()
373 struct ocfb_dev *fbdev = platform_get_drvdata(pdev); in ocfb_remove() local
375 unregister_framebuffer(&fbdev->info); in ocfb_remove()
376 fb_dealloc_cmap(&fbdev->info.cmap); in ocfb_remove()
377 dma_free_coherent(&pdev->dev, PAGE_ALIGN(fbdev->info.fix.smem_len), in ocfb_remove()
378 fbdev->fb_virt, fbdev->fb_phys); in ocfb_remove()
381 ocfb_writereg(fbdev, OCFB_CTRL, 0); in ocfb_remove()