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_rotate() local
347 if (fbdev && (angle > 0) && !(angle % 90)) { in au1100fb_fb_rotate()
349 fbdev->regs->lcd_control &= ~LCD_CONTROL_GO; in au1100fb_fb_rotate()
351 fbdev->regs->lcd_control &= ~(LCD_CONTROL_SM_MASK); in au1100fb_fb_rotate()
352 fbdev->regs->lcd_control |= ((angle/90) << LCD_CONTROL_SM_BIT); in au1100fb_fb_rotate()
354 fbdev->regs->lcd_control |= LCD_CONTROL_GO; in au1100fb_fb_rotate()
364 struct au1100fb_device *fbdev; in au1100fb_fb_mmap() local
366 fbdev = to_au1100fb_device(fbi); in au1100fb_fb_mmap()
371 return vm_iomap_memory(vma, fbdev->fb_phys, fbdev->fb_len); in au1100fb_fb_mmap()
390 static int au1100fb_setup(struct au1100fb_device *fbdev) in au1100fb_setup() argument
413 fbdev->panel = &known_lcd_panels[i]; in au1100fb_setup()
414 fbdev->panel_idx = i; in au1100fb_setup()
428 print_info("Panel=%s", fbdev->panel->name); in au1100fb_setup()
435 struct au1100fb_device *fbdev = NULL; in au1100fb_drv_probe() local
441 fbdev = devm_kzalloc(&dev->dev, sizeof(struct au1100fb_device), in au1100fb_drv_probe()
443 if (!fbdev) { in au1100fb_drv_probe()
448 if (au1100fb_setup(fbdev)) in au1100fb_drv_probe()
451 platform_set_drvdata(dev, (void *)fbdev); in au1100fb_drv_probe()
472 fbdev->regs = (struct au1100fb_regs*)KSEG1ADDR(au1100fb_fix.mmio_start); in au1100fb_drv_probe()
474 print_dbg("Register memory map at %p", fbdev->regs); in au1100fb_drv_probe()
475 print_dbg("phys=0x%08x, size=%d", fbdev->regs_phys, fbdev->regs_len); in au1100fb_drv_probe()
479 fbdev->lcdclk = c; in au1100fb_drv_probe()
485 fbdev->fb_len = fbdev->panel->xres * fbdev->panel->yres * in au1100fb_drv_probe()
486 (fbdev->panel->bpp >> 3) * AU1100FB_NBR_VIDEO_BUFFERS; in au1100fb_drv_probe()
488 fbdev->fb_mem = dmam_alloc_coherent(&dev->dev, in au1100fb_drv_probe()
489 PAGE_ALIGN(fbdev->fb_len), in au1100fb_drv_probe()
490 &fbdev->fb_phys, GFP_KERNEL); in au1100fb_drv_probe()
491 if (!fbdev->fb_mem) { in au1100fb_drv_probe()
493 fbdev->fb_len / 1024); in au1100fb_drv_probe()
497 au1100fb_fix.smem_start = fbdev->fb_phys; in au1100fb_drv_probe()
498 au1100fb_fix.smem_len = fbdev->fb_len; in au1100fb_drv_probe()
504 for (page = (unsigned long)fbdev->fb_mem; in au1100fb_drv_probe()
505 page < PAGE_ALIGN((unsigned long)fbdev->fb_mem + fbdev->fb_len); in au1100fb_drv_probe()
514 print_dbg("Framebuffer memory map at %p", fbdev->fb_mem); in au1100fb_drv_probe()
515 print_dbg("phys=0x%08x, size=%dK", fbdev->fb_phys, fbdev->fb_len / 1024); in au1100fb_drv_probe()
518 au1100fb_var.bits_per_pixel = fbdev->panel->bpp; in au1100fb_drv_probe()
519 au1100fb_var.xres = fbdev->panel->xres; in au1100fb_drv_probe()
521 au1100fb_var.yres = fbdev->panel->yres; in au1100fb_drv_probe()
524 fbdev->info.screen_base = fbdev->fb_mem; in au1100fb_drv_probe()
525 fbdev->info.fbops = &au1100fb_ops; in au1100fb_drv_probe()
526 fbdev->info.fix = au1100fb_fix; in au1100fb_drv_probe()
528 fbdev->info.pseudo_palette = in au1100fb_drv_probe()
530 if (!fbdev->info.pseudo_palette) in au1100fb_drv_probe()
533 if (fb_alloc_cmap(&fbdev->info.cmap, AU1100_LCD_NBR_PALETTE_ENTRIES, 0) < 0) { in au1100fb_drv_probe()
539 fbdev->info.var = au1100fb_var; in au1100fb_drv_probe()
542 au1100fb_setmode(fbdev); in au1100fb_drv_probe()
545 if (register_framebuffer(&fbdev->info) < 0) { in au1100fb_drv_probe()
553 if (fbdev->lcdclk) { in au1100fb_drv_probe()
554 clk_disable_unprepare(fbdev->lcdclk); in au1100fb_drv_probe()
555 clk_put(fbdev->lcdclk); in au1100fb_drv_probe()
557 if (fbdev->fb_mem) { in au1100fb_drv_probe()
558 dma_free_noncoherent(&dev->dev, fbdev->fb_len, fbdev->fb_mem, in au1100fb_drv_probe()
559 fbdev->fb_phys); in au1100fb_drv_probe()
561 if (fbdev->info.cmap.len != 0) { in au1100fb_drv_probe()
562 fb_dealloc_cmap(&fbdev->info.cmap); in au1100fb_drv_probe()
570 struct au1100fb_device *fbdev = NULL; in au1100fb_drv_remove() local
575 fbdev = platform_get_drvdata(dev); in au1100fb_drv_remove()
578 au1100fb_fb_blank(VESA_POWERDOWN, &fbdev->info); in au1100fb_drv_remove()
580 fbdev->regs->lcd_control &= ~LCD_CONTROL_GO; in au1100fb_drv_remove()
583 unregister_framebuffer(&fbdev->info); in au1100fb_drv_remove()
585 fb_dealloc_cmap(&fbdev->info.cmap); in au1100fb_drv_remove()
587 if (fbdev->lcdclk) { in au1100fb_drv_remove()
588 clk_disable_unprepare(fbdev->lcdclk); in au1100fb_drv_remove()
589 clk_put(fbdev->lcdclk); in au1100fb_drv_remove()
600 struct au1100fb_device *fbdev = platform_get_drvdata(dev); in au1100fb_drv_suspend() local
602 if (!fbdev) in au1100fb_drv_suspend()
606 au1100fb_fb_blank(VESA_POWERDOWN, &fbdev->info); in au1100fb_drv_suspend()
608 if (fbdev->lcdclk) in au1100fb_drv_suspend()
609 clk_disable(fbdev->lcdclk); in au1100fb_drv_suspend()
611 memcpy(&fbregs, fbdev->regs, sizeof(struct au1100fb_regs)); in au1100fb_drv_suspend()
618 struct au1100fb_device *fbdev = platform_get_drvdata(dev); in au1100fb_drv_resume() local
620 if (!fbdev) in au1100fb_drv_resume()
623 memcpy(fbdev->regs, &fbregs, sizeof(struct au1100fb_regs)); in au1100fb_drv_resume()
625 if (fbdev->lcdclk) in au1100fb_drv_resume()
626 clk_enable(fbdev->lcdclk); in au1100fb_drv_resume()
629 au1100fb_fb_blank(VESA_NO_BLANKING, &fbdev->info); in au1100fb_drv_resume()