Lines Matching refs:fbdev

108 	struct au1100fb_device *fbdev = to_au1100fb_device(fbi);  in au1100fb_fb_blank()  local
116 fbdev->regs->lcd_control |= LCD_CONTROL_GO; in au1100fb_fb_blank()
124 fbdev->regs->lcd_control &= ~LCD_CONTROL_GO; in au1100fb_fb_blank()
138 int au1100fb_setmode(struct au1100fb_device *fbdev) in au1100fb_setmode() argument
140 struct fb_info *info = &fbdev->info; in au1100fb_setmode()
144 if (!fbdev) in au1100fb_setmode()
148 if (panel_is_active(fbdev->panel) || panel_is_color(fbdev->panel)) { in au1100fb_setmode()
172 index = (fbdev->panel->control_base & LCD_CONTROL_SBPPF_MASK) >> LCD_CONTROL_SBPPF_BIT; in au1100fb_setmode()
188 info->var.rotate = ((fbdev->panel->control_base&LCD_CONTROL_SM_MASK) \ in au1100fb_setmode()
192 fbdev->regs->lcd_control = fbdev->panel->control_base; in au1100fb_setmode()
193 fbdev->regs->lcd_horztiming = fbdev->panel->horztiming; in au1100fb_setmode()
194 fbdev->regs->lcd_verttiming = fbdev->panel->verttiming; in au1100fb_setmode()
195 fbdev->regs->lcd_clkcontrol = fbdev->panel->clkcontrol_base; in au1100fb_setmode()
196 fbdev->regs->lcd_intenable = 0; in au1100fb_setmode()
197 fbdev->regs->lcd_intstatus = 0; in au1100fb_setmode()
198 fbdev->regs->lcd_dmaaddr0 = LCD_DMA_SA_N(fbdev->fb_phys); in au1100fb_setmode()
200 if (panel_is_dual(fbdev->panel)) { in au1100fb_setmode()
204 fbdev->regs->lcd_dmaaddr1 = LCD_DMA_SA_N(fbdev->fb_phys + in au1100fb_setmode()
208 fbdev->regs->lcd_dmaaddr1 = LCD_DMA_SA_N(fbdev->fb_phys); in au1100fb_setmode()
219 fbdev->regs->lcd_words = LCD_WRD_WRDS_N(words); in au1100fb_setmode()
221 fbdev->regs->lcd_pwmdiv = 0; in au1100fb_setmode()
222 fbdev->regs->lcd_pwmhi = 0; in au1100fb_setmode()
225 fbdev->regs->lcd_control |= LCD_CONTROL_GO; in au1100fb_setmode()
237 struct au1100fb_device *fbdev; in au1100fb_fb_setcolreg() local
241 fbdev = to_au1100fb_device(fbi); in au1100fb_fb_setcolreg()
242 palette = fbdev->regs->lcd_pallettebase; in au1100fb_fb_setcolreg()
269 } else if (panel_is_active(fbdev->panel)) { in au1100fb_fb_setcolreg()
274 } else if (panel_is_color(fbdev->panel)) { in au1100fb_fb_setcolreg()
276 value = (((panel_swap_rgb(fbdev->panel) ? blue : red) >> 12) & 0x000F) | in au1100fb_fb_setcolreg()
278 (((panel_swap_rgb(fbdev->panel) ? red : blue) >> 4) & 0x0F00); in au1100fb_fb_setcolreg()
296 struct au1100fb_device *fbdev; in au1100fb_fb_pan_display() local
299 fbdev = to_au1100fb_device(fbi); in au1100fb_fb_pan_display()
303 if (!var || !fbdev) { in au1100fb_fb_pan_display()
320 dmaaddr = fbdev->regs->lcd_dmaaddr0; in au1100fb_fb_pan_display()
324 fbdev->regs->lcd_dmaaddr0 = LCD_DMA_SA_N(dmaaddr); in au1100fb_fb_pan_display()
326 if (panel_is_dual(fbdev->panel)) { in au1100fb_fb_pan_display()
327 dmaaddr = fbdev->regs->lcd_dmaaddr1; in au1100fb_fb_pan_display()
329 fbdev->regs->lcd_dmaaddr0 = LCD_DMA_SA_N(dmaaddr); in au1100fb_fb_pan_display()
343 struct au1100fb_device *fbdev = to_au1100fb_device(fbi); in au1100fb_fb_mmap() local
347 return dma_mmap_coherent(fbdev->dev, vma, fbdev->fb_mem, fbdev->fb_phys, in au1100fb_fb_mmap()
348 fbdev->fb_len); in au1100fb_fb_mmap()
366 static int au1100fb_setup(struct au1100fb_device *fbdev) in au1100fb_setup() argument
389 fbdev->panel = &known_lcd_panels[i]; in au1100fb_setup()
390 fbdev->panel_idx = i; in au1100fb_setup()
404 print_info("Panel=%s", fbdev->panel->name); in au1100fb_setup()
411 struct au1100fb_device *fbdev; in au1100fb_drv_probe() local
416 fbdev = devm_kzalloc(&dev->dev, sizeof(*fbdev), GFP_KERNEL); in au1100fb_drv_probe()
417 if (!fbdev) in au1100fb_drv_probe()
420 if (au1100fb_setup(fbdev)) in au1100fb_drv_probe()
423 platform_set_drvdata(dev, (void *)fbdev); in au1100fb_drv_probe()
424 fbdev->dev = &dev->dev; in au1100fb_drv_probe()
445 fbdev->regs = (struct au1100fb_regs*)KSEG1ADDR(au1100fb_fix.mmio_start); in au1100fb_drv_probe()
447 print_dbg("Register memory map at %p", fbdev->regs); in au1100fb_drv_probe()
448 print_dbg("phys=0x%08x, size=%d", fbdev->regs_phys, fbdev->regs_len); in au1100fb_drv_probe()
452 fbdev->lcdclk = c; in au1100fb_drv_probe()
458 fbdev->fb_len = fbdev->panel->xres * fbdev->panel->yres * in au1100fb_drv_probe()
459 (fbdev->panel->bpp >> 3) * AU1100FB_NBR_VIDEO_BUFFERS; in au1100fb_drv_probe()
461 fbdev->fb_mem = dmam_alloc_coherent(&dev->dev, in au1100fb_drv_probe()
462 PAGE_ALIGN(fbdev->fb_len), in au1100fb_drv_probe()
463 &fbdev->fb_phys, GFP_KERNEL); in au1100fb_drv_probe()
464 if (!fbdev->fb_mem) { in au1100fb_drv_probe()
466 fbdev->fb_len / 1024); in au1100fb_drv_probe()
470 au1100fb_fix.smem_start = fbdev->fb_phys; in au1100fb_drv_probe()
471 au1100fb_fix.smem_len = fbdev->fb_len; in au1100fb_drv_probe()
473 print_dbg("Framebuffer memory map at %p", fbdev->fb_mem); in au1100fb_drv_probe()
474 print_dbg("phys=0x%08x, size=%dK", fbdev->fb_phys, fbdev->fb_len / 1024); in au1100fb_drv_probe()
477 au1100fb_var.bits_per_pixel = fbdev->panel->bpp; in au1100fb_drv_probe()
478 au1100fb_var.xres = fbdev->panel->xres; in au1100fb_drv_probe()
480 au1100fb_var.yres = fbdev->panel->yres; in au1100fb_drv_probe()
483 fbdev->info.screen_base = fbdev->fb_mem; in au1100fb_drv_probe()
484 fbdev->info.fbops = &au1100fb_ops; in au1100fb_drv_probe()
485 fbdev->info.fix = au1100fb_fix; in au1100fb_drv_probe()
487 fbdev->info.pseudo_palette = in au1100fb_drv_probe()
489 if (!fbdev->info.pseudo_palette) in au1100fb_drv_probe()
492 if (fb_alloc_cmap(&fbdev->info.cmap, AU1100_LCD_NBR_PALETTE_ENTRIES, 0) < 0) { in au1100fb_drv_probe()
498 fbdev->info.var = au1100fb_var; in au1100fb_drv_probe()
501 au1100fb_setmode(fbdev); in au1100fb_drv_probe()
504 if (register_framebuffer(&fbdev->info) < 0) { in au1100fb_drv_probe()
512 if (fbdev->lcdclk) { in au1100fb_drv_probe()
513 clk_disable_unprepare(fbdev->lcdclk); in au1100fb_drv_probe()
514 clk_put(fbdev->lcdclk); in au1100fb_drv_probe()
516 if (fbdev->info.cmap.len != 0) { in au1100fb_drv_probe()
517 fb_dealloc_cmap(&fbdev->info.cmap); in au1100fb_drv_probe()
525 struct au1100fb_device *fbdev = NULL; in au1100fb_drv_remove() local
530 fbdev = platform_get_drvdata(dev); in au1100fb_drv_remove()
533 au1100fb_fb_blank(VESA_POWERDOWN, &fbdev->info); in au1100fb_drv_remove()
535 fbdev->regs->lcd_control &= ~LCD_CONTROL_GO; in au1100fb_drv_remove()
538 unregister_framebuffer(&fbdev->info); in au1100fb_drv_remove()
540 fb_dealloc_cmap(&fbdev->info.cmap); in au1100fb_drv_remove()
542 if (fbdev->lcdclk) { in au1100fb_drv_remove()
543 clk_disable_unprepare(fbdev->lcdclk); in au1100fb_drv_remove()
544 clk_put(fbdev->lcdclk); in au1100fb_drv_remove()
555 struct au1100fb_device *fbdev = platform_get_drvdata(dev); in au1100fb_drv_suspend() local
557 if (!fbdev) in au1100fb_drv_suspend()
561 au1100fb_fb_blank(VESA_POWERDOWN, &fbdev->info); in au1100fb_drv_suspend()
563 if (fbdev->lcdclk) in au1100fb_drv_suspend()
564 clk_disable(fbdev->lcdclk); in au1100fb_drv_suspend()
566 memcpy(&fbregs, fbdev->regs, sizeof(struct au1100fb_regs)); in au1100fb_drv_suspend()
573 struct au1100fb_device *fbdev = platform_get_drvdata(dev); in au1100fb_drv_resume() local
575 if (!fbdev) in au1100fb_drv_resume()
578 memcpy(fbdev->regs, &fbregs, sizeof(struct au1100fb_regs)); in au1100fb_drv_resume()
580 if (fbdev->lcdclk) in au1100fb_drv_resume()
581 clk_enable(fbdev->lcdclk); in au1100fb_drv_resume()
584 au1100fb_fb_blank(VESA_NO_BLANKING, &fbdev->info); in au1100fb_drv_resume()