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()
299 struct ocfb_dev *fbdev; in ocfb_probe() local
303 fbdev = devm_kzalloc(&pdev->dev, sizeof(*fbdev), GFP_KERNEL); in ocfb_probe()
304 if (!fbdev) in ocfb_probe()
307 platform_set_drvdata(pdev, fbdev); in ocfb_probe()
309 fbdev->info.fbops = &ocfb_ops; in ocfb_probe()
310 fbdev->info.device = &pdev->dev; in ocfb_probe()
311 fbdev->info.par = fbdev; in ocfb_probe()
314 if (!fb_find_mode(&fbdev->info.var, &fbdev->info, mode_option, in ocfb_probe()
319 ocfb_init_var(fbdev); in ocfb_probe()
320 ocfb_init_fix(fbdev); in ocfb_probe()
328 fbdev->regs = devm_ioremap_resource(&pdev->dev, res); in ocfb_probe()
329 if (IS_ERR(fbdev->regs)) in ocfb_probe()
330 return PTR_ERR(fbdev->regs); in ocfb_probe()
333 fbsize = fbdev->info.fix.smem_len; in ocfb_probe()
334 fbdev->fb_virt = dma_alloc_coherent(&pdev->dev, PAGE_ALIGN(fbsize), in ocfb_probe()
335 &fbdev->fb_phys, GFP_KERNEL); in ocfb_probe()
336 if (!fbdev->fb_virt) { in ocfb_probe()
341 fbdev->info.fix.smem_start = fbdev->fb_phys; in ocfb_probe()
342 fbdev->info.screen_base = fbdev->fb_virt; in ocfb_probe()
343 fbdev->info.pseudo_palette = fbdev->pseudo_palette; in ocfb_probe()
346 memset_io(fbdev->fb_virt, 0, fbsize); in ocfb_probe()
349 ocfb_setupfb(fbdev); in ocfb_probe()
351 if (fbdev->little_endian) in ocfb_probe()
352 fbdev->info.flags |= FBINFO_FOREIGN_ENDIAN; in ocfb_probe()
355 ret = fb_alloc_cmap(&fbdev->info.cmap, PALETTE_SIZE, 0); in ocfb_probe()
362 ret = register_framebuffer(&fbdev->info); in ocfb_probe()
371 fb_dealloc_cmap(&fbdev->info.cmap); in ocfb_probe()
374 dma_free_coherent(&pdev->dev, PAGE_ALIGN(fbsize), fbdev->fb_virt, in ocfb_probe()
375 fbdev->fb_phys); in ocfb_probe()
382 struct ocfb_dev *fbdev = platform_get_drvdata(pdev); in ocfb_remove() local
384 unregister_framebuffer(&fbdev->info); in ocfb_remove()
385 fb_dealloc_cmap(&fbdev->info.cmap); in ocfb_remove()
386 dma_free_coherent(&pdev->dev, PAGE_ALIGN(fbdev->info.fix.smem_len), in ocfb_remove()
387 fbdev->fb_virt, fbdev->fb_phys); in ocfb_remove()
390 ocfb_writereg(fbdev, OCFB_CTRL, 0); in ocfb_remove()