Lines Matching refs:jzfb

117 struct jzfb {  struct
174 static int jzfb_get_controller_bpp(struct jzfb *jzfb) in jzfb_get_controller_bpp() argument
176 switch (jzfb->pdata->bpp) { in jzfb_get_controller_bpp()
183 return jzfb->pdata->bpp; in jzfb_get_controller_bpp()
187 static struct fb_videomode *jzfb_get_mode(struct jzfb *jzfb, in jzfb_get_mode() argument
191 struct fb_videomode *mode = jzfb->pdata->modes; in jzfb_get_mode()
193 for (i = 0; i < jzfb->pdata->num_modes; ++i, ++mode) { in jzfb_get_mode()
203 struct jzfb *jzfb = fb->par; in jzfb_check_var() local
206 if (var->bits_per_pixel != jzfb_get_controller_bpp(jzfb) && in jzfb_check_var()
207 var->bits_per_pixel != jzfb->pdata->bpp) in jzfb_check_var()
210 mode = jzfb_get_mode(jzfb, var); in jzfb_check_var()
216 switch (jzfb->pdata->bpp) { in jzfb_check_var()
265 struct jzfb *jzfb = info->par; in jzfb_set_par() local
266 struct jz4740_fb_platform_data *pdata = jzfb->pdata; in jzfb_set_par()
276 mode = jzfb_get_mode(jzfb, var); in jzfb_set_par()
351 mutex_lock(&jzfb->lock); in jzfb_set_par()
352 if (!jzfb->is_enabled) in jzfb_set_par()
353 clk_enable(jzfb->ldclk); in jzfb_set_par()
361 writel(pdata->special_tft_config.spl, jzfb->base + JZ_REG_LCD_SPL); in jzfb_set_par()
362 writel(pdata->special_tft_config.cls, jzfb->base + JZ_REG_LCD_CLS); in jzfb_set_par()
363 writel(pdata->special_tft_config.ps, jzfb->base + JZ_REG_LCD_PS); in jzfb_set_par()
364 writel(pdata->special_tft_config.ps, jzfb->base + JZ_REG_LCD_REV); in jzfb_set_par()
374 writel(mode->hsync_len, jzfb->base + JZ_REG_LCD_HSYNC); in jzfb_set_par()
375 writel(mode->vsync_len, jzfb->base + JZ_REG_LCD_VSYNC); in jzfb_set_par()
377 writel((ht << 16) | vt, jzfb->base + JZ_REG_LCD_VAT); in jzfb_set_par()
379 writel((hds << 16) | hde, jzfb->base + JZ_REG_LCD_DAH); in jzfb_set_par()
380 writel((vds << 16) | vde, jzfb->base + JZ_REG_LCD_DAV); in jzfb_set_par()
382 writel(cfg, jzfb->base + JZ_REG_LCD_CFG); in jzfb_set_par()
384 writel(ctrl, jzfb->base + JZ_REG_LCD_CTRL); in jzfb_set_par()
386 if (!jzfb->is_enabled) in jzfb_set_par()
387 clk_disable_unprepare(jzfb->ldclk); in jzfb_set_par()
389 mutex_unlock(&jzfb->lock); in jzfb_set_par()
391 clk_set_rate(jzfb->lpclk, rate); in jzfb_set_par()
392 clk_set_rate(jzfb->ldclk, rate * 3); in jzfb_set_par()
397 static void jzfb_enable(struct jzfb *jzfb) in jzfb_enable() argument
401 clk_prepare_enable(jzfb->ldclk); in jzfb_enable()
403 pinctrl_pm_select_default_state(&jzfb->pdev->dev); in jzfb_enable()
405 writel(0, jzfb->base + JZ_REG_LCD_STATE); in jzfb_enable()
407 writel(jzfb->framedesc->next, jzfb->base + JZ_REG_LCD_DA0); in jzfb_enable()
409 ctrl = readl(jzfb->base + JZ_REG_LCD_CTRL); in jzfb_enable()
412 writel(ctrl, jzfb->base + JZ_REG_LCD_CTRL); in jzfb_enable()
415 static void jzfb_disable(struct jzfb *jzfb) in jzfb_disable() argument
419 ctrl = readl(jzfb->base + JZ_REG_LCD_CTRL); in jzfb_disable()
421 writel(ctrl, jzfb->base + JZ_REG_LCD_CTRL); in jzfb_disable()
423 ctrl = readl(jzfb->base + JZ_REG_LCD_STATE); in jzfb_disable()
426 pinctrl_pm_select_sleep_state(&jzfb->pdev->dev); in jzfb_disable()
428 clk_disable_unprepare(jzfb->ldclk); in jzfb_disable()
433 struct jzfb *jzfb = info->par; in jzfb_blank() local
437 mutex_lock(&jzfb->lock); in jzfb_blank()
438 if (jzfb->is_enabled) { in jzfb_blank()
439 mutex_unlock(&jzfb->lock); in jzfb_blank()
443 jzfb_enable(jzfb); in jzfb_blank()
444 jzfb->is_enabled = 1; in jzfb_blank()
446 mutex_unlock(&jzfb->lock); in jzfb_blank()
449 mutex_lock(&jzfb->lock); in jzfb_blank()
450 if (!jzfb->is_enabled) { in jzfb_blank()
451 mutex_unlock(&jzfb->lock); in jzfb_blank()
455 jzfb_disable(jzfb); in jzfb_blank()
456 jzfb->is_enabled = 0; in jzfb_blank()
458 mutex_unlock(&jzfb->lock); in jzfb_blank()
465 static int jzfb_alloc_devmem(struct jzfb *jzfb) in jzfb_alloc_devmem() argument
468 struct fb_videomode *mode = jzfb->pdata->modes; in jzfb_alloc_devmem()
472 for (i = 0; i < jzfb->pdata->num_modes; ++mode, ++i) { in jzfb_alloc_devmem()
477 max_videosize *= jzfb_get_controller_bpp(jzfb) >> 3; in jzfb_alloc_devmem()
479 jzfb->framedesc = dma_alloc_coherent(&jzfb->pdev->dev, in jzfb_alloc_devmem()
480 sizeof(*jzfb->framedesc), in jzfb_alloc_devmem()
481 &jzfb->framedesc_phys, GFP_KERNEL); in jzfb_alloc_devmem()
483 if (!jzfb->framedesc) in jzfb_alloc_devmem()
486 jzfb->vidmem_size = PAGE_ALIGN(max_videosize); in jzfb_alloc_devmem()
487 jzfb->vidmem = dma_alloc_coherent(&jzfb->pdev->dev, in jzfb_alloc_devmem()
488 jzfb->vidmem_size, in jzfb_alloc_devmem()
489 &jzfb->vidmem_phys, GFP_KERNEL); in jzfb_alloc_devmem()
491 if (!jzfb->vidmem) in jzfb_alloc_devmem()
494 for (page = jzfb->vidmem; in jzfb_alloc_devmem()
495 page < jzfb->vidmem + PAGE_ALIGN(jzfb->vidmem_size); in jzfb_alloc_devmem()
500 jzfb->framedesc->next = jzfb->framedesc_phys; in jzfb_alloc_devmem()
501 jzfb->framedesc->addr = jzfb->vidmem_phys; in jzfb_alloc_devmem()
502 jzfb->framedesc->id = 0xdeafbead; in jzfb_alloc_devmem()
503 jzfb->framedesc->cmd = 0; in jzfb_alloc_devmem()
504 jzfb->framedesc->cmd |= max_videosize / 4; in jzfb_alloc_devmem()
509 dma_free_coherent(&jzfb->pdev->dev, sizeof(*jzfb->framedesc), in jzfb_alloc_devmem()
510 jzfb->framedesc, jzfb->framedesc_phys); in jzfb_alloc_devmem()
514 static void jzfb_free_devmem(struct jzfb *jzfb) in jzfb_free_devmem() argument
516 dma_free_coherent(&jzfb->pdev->dev, jzfb->vidmem_size, in jzfb_free_devmem()
517 jzfb->vidmem, jzfb->vidmem_phys); in jzfb_free_devmem()
518 dma_free_coherent(&jzfb->pdev->dev, sizeof(*jzfb->framedesc), in jzfb_free_devmem()
519 jzfb->framedesc, jzfb->framedesc_phys); in jzfb_free_devmem()
536 struct jzfb *jzfb; in jzfb_probe() local
546 fb = framebuffer_alloc(sizeof(struct jzfb), &pdev->dev); in jzfb_probe()
555 jzfb = fb->par; in jzfb_probe()
556 jzfb->pdev = pdev; in jzfb_probe()
557 jzfb->pdata = pdata; in jzfb_probe()
559 jzfb->ldclk = devm_clk_get(&pdev->dev, "lcd"); in jzfb_probe()
560 if (IS_ERR(jzfb->ldclk)) { in jzfb_probe()
561 ret = PTR_ERR(jzfb->ldclk); in jzfb_probe()
566 jzfb->lpclk = devm_clk_get(&pdev->dev, "lcd_pclk"); in jzfb_probe()
567 if (IS_ERR(jzfb->lpclk)) { in jzfb_probe()
568 ret = PTR_ERR(jzfb->lpclk); in jzfb_probe()
574 jzfb->base = devm_ioremap_resource(&pdev->dev, mem); in jzfb_probe()
575 if (IS_ERR(jzfb->base)) { in jzfb_probe()
576 ret = PTR_ERR(jzfb->base); in jzfb_probe()
580 platform_set_drvdata(pdev, jzfb); in jzfb_probe()
582 mutex_init(&jzfb->lock); in jzfb_probe()
590 ret = jzfb_alloc_devmem(jzfb); in jzfb_probe()
600 fb->fix.smem_start = jzfb->vidmem_phys; in jzfb_probe()
602 fb->screen_base = jzfb->vidmem; in jzfb_probe()
603 fb->pseudo_palette = jzfb->pseudo_palette; in jzfb_probe()
607 clk_prepare_enable(jzfb->ldclk); in jzfb_probe()
608 jzfb->is_enabled = 1; in jzfb_probe()
610 writel(jzfb->framedesc->next, jzfb->base + JZ_REG_LCD_DA0); in jzfb_probe()
621 jzfb->fb = fb; in jzfb_probe()
627 jzfb_free_devmem(jzfb); in jzfb_probe()
635 struct jzfb *jzfb = platform_get_drvdata(pdev); in jzfb_remove() local
637 jzfb_blank(FB_BLANK_POWERDOWN, jzfb->fb); in jzfb_remove()
639 fb_dealloc_cmap(&jzfb->fb->cmap); in jzfb_remove()
640 jzfb_free_devmem(jzfb); in jzfb_remove()
642 framebuffer_release(jzfb->fb); in jzfb_remove()
651 struct jzfb *jzfb = dev_get_drvdata(dev); in jzfb_suspend() local
654 fb_set_suspend(jzfb->fb, 1); in jzfb_suspend()
657 mutex_lock(&jzfb->lock); in jzfb_suspend()
658 if (jzfb->is_enabled) in jzfb_suspend()
659 jzfb_disable(jzfb); in jzfb_suspend()
660 mutex_unlock(&jzfb->lock); in jzfb_suspend()
667 struct jzfb *jzfb = dev_get_drvdata(dev); in jzfb_resume() local
668 clk_prepare_enable(jzfb->ldclk); in jzfb_resume()
670 mutex_lock(&jzfb->lock); in jzfb_resume()
671 if (jzfb->is_enabled) in jzfb_resume()
672 jzfb_enable(jzfb); in jzfb_resume()
673 mutex_unlock(&jzfb->lock); in jzfb_resume()
676 fb_set_suspend(jzfb->fb, 0); in jzfb_resume()