Lines Matching +full:simple +full:- +full:framebuffer

7  * 2002-2007 (c) MontaVista Software, Inc.
31 #include <linux/dma-mapping.h>
51 * The interface to the framebuffer is nice and simple. There are two
156 if (drvdata->flags & PLB_ACCESS_FLAG) in xilinx_fb_out_be32()
157 out_be32(drvdata->regs + (offset << 2), val); in xilinx_fb_out_be32()
160 dcr_write(drvdata->dcr_host, offset, val); in xilinx_fb_out_be32()
168 u32 *palette = fbi->pseudo_palette; in xilinx_fb_setcolreg()
171 return -EINVAL; in xilinx_fb_setcolreg()
173 if (fbi->var.grayscale) { in xilinx_fb_setcolreg()
180 /* fbi->fix.visual is always FB_VISUAL_TRUECOLOR */ in xilinx_fb_setcolreg()
200 xilinx_fb_out_be32(drvdata, REG_CTRL, drvdata->reg_ctrl_default); in xilinx_fb_blank()
226 /* ---------------------------------------------------------------------
236 int fbsize = pdata->xvirt * pdata->yvirt * BYTES_PER_PIXEL; in xilinxfb_assign()
238 if (drvdata->flags & PLB_ACCESS_FLAG) { in xilinxfb_assign()
246 rc = -ENODEV; in xilinxfb_assign()
250 drvdata->regs_phys = physaddr; in xilinxfb_assign()
251 drvdata->regs = ioremap(physaddr, 8); in xilinxfb_assign()
252 if (!drvdata->regs) { in xilinxfb_assign()
255 rc = -ENODEV; in xilinxfb_assign()
260 /* Allocate the framebuffer memory */ in xilinxfb_assign()
261 if (pdata->fb_phys) { in xilinxfb_assign()
262 drvdata->fb_phys = pdata->fb_phys; in xilinxfb_assign()
263 drvdata->fb_virt = ioremap(pdata->fb_phys, fbsize); in xilinxfb_assign()
265 drvdata->fb_alloced = 1; in xilinxfb_assign()
266 drvdata->fb_virt = dma_alloc_coherent(dev, PAGE_ALIGN(fbsize), in xilinxfb_assign()
267 &drvdata->fb_phys, GFP_KERNEL); in xilinxfb_assign()
270 if (!drvdata->fb_virt) { in xilinxfb_assign()
272 rc = -ENOMEM; in xilinxfb_assign()
273 if (drvdata->flags & PLB_ACCESS_FLAG) in xilinxfb_assign()
279 /* Clear (turn to black) the framebuffer */ in xilinxfb_assign()
280 memset_io((void __iomem *)drvdata->fb_virt, 0, fbsize); in xilinxfb_assign()
283 xilinx_fb_out_be32(drvdata, REG_FB_ADDR, drvdata->fb_phys); in xilinxfb_assign()
286 drvdata->reg_ctrl_default = REG_CTRL_ENABLE; in xilinxfb_assign()
287 if (pdata->rotate_screen) in xilinxfb_assign()
288 drvdata->reg_ctrl_default |= REG_CTRL_ROTATE; in xilinxfb_assign()
290 drvdata->reg_ctrl_default); in xilinxfb_assign()
293 drvdata->info.device = dev; in xilinxfb_assign()
294 drvdata->info.screen_base = (void __iomem *)drvdata->fb_virt; in xilinxfb_assign()
295 drvdata->info.fbops = &xilinxfb_ops; in xilinxfb_assign()
296 drvdata->info.fix = xilinx_fb_fix; in xilinxfb_assign()
297 drvdata->info.fix.smem_start = drvdata->fb_phys; in xilinxfb_assign()
298 drvdata->info.fix.smem_len = fbsize; in xilinxfb_assign()
299 drvdata->info.fix.line_length = pdata->xvirt * BYTES_PER_PIXEL; in xilinxfb_assign()
301 drvdata->info.pseudo_palette = drvdata->pseudo_palette; in xilinxfb_assign()
302 drvdata->info.flags = FBINFO_DEFAULT; in xilinxfb_assign()
303 drvdata->info.var = xilinx_fb_var; in xilinxfb_assign()
304 drvdata->info.var.height = pdata->screen_height_mm; in xilinxfb_assign()
305 drvdata->info.var.width = pdata->screen_width_mm; in xilinxfb_assign()
306 drvdata->info.var.xres = pdata->xres; in xilinxfb_assign()
307 drvdata->info.var.yres = pdata->yres; in xilinxfb_assign()
308 drvdata->info.var.xres_virtual = pdata->xvirt; in xilinxfb_assign()
309 drvdata->info.var.yres_virtual = pdata->yvirt; in xilinxfb_assign()
312 rc = fb_alloc_cmap(&drvdata->info.cmap, PALETTE_ENTRIES_NO, 0); in xilinxfb_assign()
320 rc = register_framebuffer(&drvdata->info); in xilinxfb_assign()
326 if (drvdata->flags & PLB_ACCESS_FLAG) { in xilinxfb_assign()
329 drvdata->regs); in xilinxfb_assign()
333 (unsigned long long)drvdata->fb_phys, drvdata->fb_virt, fbsize); in xilinxfb_assign()
338 fb_dealloc_cmap(&drvdata->info.cmap); in xilinxfb_assign()
341 if (drvdata->fb_alloced) in xilinxfb_assign()
342 dma_free_coherent(dev, PAGE_ALIGN(fbsize), drvdata->fb_virt, in xilinxfb_assign()
343 drvdata->fb_phys); in xilinxfb_assign()
345 iounmap(drvdata->fb_virt); in xilinxfb_assign()
351 if (drvdata->flags & PLB_ACCESS_FLAG) in xilinxfb_assign()
352 iounmap(drvdata->regs); in xilinxfb_assign()
355 if (drvdata->flags & PLB_ACCESS_FLAG) in xilinxfb_assign()
370 xilinx_fb_blank(VESA_POWERDOWN, &drvdata->info); in xilinxfb_release()
373 unregister_framebuffer(&drvdata->info); in xilinxfb_release()
375 fb_dealloc_cmap(&drvdata->info.cmap); in xilinxfb_release()
377 if (drvdata->fb_alloced) in xilinxfb_release()
378 dma_free_coherent(dev, PAGE_ALIGN(drvdata->info.fix.smem_len), in xilinxfb_release()
379 drvdata->fb_virt, drvdata->fb_phys); in xilinxfb_release()
381 iounmap(drvdata->fb_virt); in xilinxfb_release()
387 if (drvdata->flags & PLB_ACCESS_FLAG) { in xilinxfb_release()
388 iounmap(drvdata->regs); in xilinxfb_release()
389 release_mem_region(drvdata->regs_phys, 8); in xilinxfb_release()
393 dcr_unmap(drvdata->dcr_host, drvdata->dcr_len); in xilinxfb_release()
402 /* ---------------------------------------------------------------------
422 dev_err(&op->dev, "Couldn't allocate device private record\n"); in xilinxfb_of_probe()
423 return -ENOMEM; in xilinxfb_of_probe()
430 p = (u32 *)of_get_property(op->dev.of_node, "xlnx,dcr-splb-slave-if", NULL); in xilinxfb_of_probe()
438 drvdata->flags |= PLB_ACCESS_FLAG; in xilinxfb_of_probe()
439 rc = of_address_to_resource(op->dev.of_node, 0, &res); in xilinxfb_of_probe()
441 dev_err(&op->dev, "invalid address\n"); in xilinxfb_of_probe()
449 start = dcr_resource_start(op->dev.of_node, 0); in xilinxfb_of_probe()
450 drvdata->dcr_len = dcr_resource_len(op->dev.of_node, 0); in xilinxfb_of_probe()
451 drvdata->dcr_host = dcr_map(op->dev.of_node, start, drvdata->dcr_len); in xilinxfb_of_probe()
452 if (!DCR_MAP_OK(drvdata->dcr_host)) { in xilinxfb_of_probe()
453 dev_err(&op->dev, "invalid DCR address\n"); in xilinxfb_of_probe()
459 prop = of_get_property(op->dev.of_node, "phys-size", &size); in xilinxfb_of_probe()
465 prop = of_get_property(op->dev.of_node, "resolution", &size); in xilinxfb_of_probe()
471 prop = of_get_property(op->dev.of_node, "virtual-resolution", &size); in xilinxfb_of_probe()
477 if (of_find_property(op->dev.of_node, "rotate-display", NULL)) in xilinxfb_of_probe()
480 dev_set_drvdata(&op->dev, drvdata); in xilinxfb_of_probe()
481 return xilinxfb_assign(&op->dev, drvdata, res.start, &pdata); in xilinxfb_of_probe()
485 return -ENODEV; in xilinxfb_of_probe()
490 return xilinxfb_release(&op->dev); in xilinxfb_of_remove()
495 { .compatible = "xlnx,xps-tft-1.00.a", },
496 { .compatible = "xlnx,xps-tft-2.00.a", },
497 { .compatible = "xlnx,xps-tft-2.01.a", },
498 { .compatible = "xlnx,plb-tft-cntlr-ref-1.00.a", },
499 { .compatible = "xlnx,plb-dvi-cntlr-ref-1.00.c", },