Lines Matching refs:par
311 static void lcd_blit(int load_mode, struct da8xx_fb_par *par) in lcd_blit() argument
326 start = par->dma_start; in lcd_blit()
327 end = par->dma_end; in lcd_blit()
346 start = par->p_palette_base; in lcd_blit()
347 end = start + par->palette_sz - 1; in lcd_blit()
523 static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height, in lcd_cfg_frame_buffer() argument
575 par->palette_sz = 16 * 2; in lcd_cfg_frame_buffer()
591 par->palette_sz = 256 * 2; in lcd_cfg_frame_buffer()
608 struct da8xx_fb_par *par = info->par; in fb_setcolreg() local
609 unsigned short *palette = (unsigned short *) par->v_palette_base; in fb_setcolreg()
688 lcd_blit(LOAD_PALETTE, par); in fb_setcolreg()
708 static int da8xx_fb_config_clk_divider(struct da8xx_fb_par *par, in da8xx_fb_config_clk_divider() argument
714 if (par->lcdc_clk_rate != lcdc_clk_rate) { in da8xx_fb_config_clk_divider()
715 ret = clk_set_rate(par->lcdc_clk, lcdc_clk_rate); in da8xx_fb_config_clk_divider()
717 dev_err(par->dev, in da8xx_fb_config_clk_divider()
722 par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk); in da8xx_fb_config_clk_divider()
736 static unsigned int da8xx_fb_calc_clk_divider(struct da8xx_fb_par *par, in da8xx_fb_calc_clk_divider() argument
744 *lcdc_clk_rate = par->lcdc_clk_rate; in da8xx_fb_calc_clk_divider()
747 *lcdc_clk_rate = clk_round_rate(par->lcdc_clk, in da8xx_fb_calc_clk_divider()
751 *lcdc_clk_rate = clk_round_rate(par->lcdc_clk, in da8xx_fb_calc_clk_divider()
761 static int da8xx_fb_calc_config_clk_divider(struct da8xx_fb_par *par, in da8xx_fb_calc_config_clk_divider() argument
765 unsigned lcdc_clk_div = da8xx_fb_calc_clk_divider(par, mode->pixclock, in da8xx_fb_calc_config_clk_divider()
768 return da8xx_fb_config_clk_divider(par, lcdc_clk_div, lcdc_clk_rate); in da8xx_fb_calc_config_clk_divider()
771 static unsigned da8xx_fb_round_clk(struct da8xx_fb_par *par, in da8xx_fb_round_clk() argument
776 lcdc_clk_div = da8xx_fb_calc_clk_divider(par, pixclock, &lcdc_clk_rate); in da8xx_fb_round_clk()
780 static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg, in lcd_init() argument
786 ret = da8xx_fb_calc_config_clk_divider(par, panel); in lcd_init()
788 dev_err(par->dev, "unable to configure clock\n"); in lcd_init()
819 ret = lcd_cfg_frame_buffer(par, (unsigned int)panel->xres, in lcd_init()
835 struct da8xx_fb_par *par = arg; in lcdc_irq_handler_rev02() local
857 lcd_blit(LOAD_DATA, par); in lcdc_irq_handler_rev02()
862 par->which_dma_channel_done = 0; in lcdc_irq_handler_rev02()
863 lcdc_write(par->dma_start, in lcdc_irq_handler_rev02()
865 lcdc_write(par->dma_end, in lcdc_irq_handler_rev02()
867 par->vsync_flag = 1; in lcdc_irq_handler_rev02()
868 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev02()
872 par->which_dma_channel_done = 1; in lcdc_irq_handler_rev02()
873 lcdc_write(par->dma_start, in lcdc_irq_handler_rev02()
875 lcdc_write(par->dma_end, in lcdc_irq_handler_rev02()
877 par->vsync_flag = 1; in lcdc_irq_handler_rev02()
878 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev02()
897 struct da8xx_fb_par *par = arg; in lcdc_irq_handler_rev01() local
922 lcd_blit(LOAD_DATA, par); in lcdc_irq_handler_rev01()
927 par->which_dma_channel_done = 0; in lcdc_irq_handler_rev01()
928 lcdc_write(par->dma_start, in lcdc_irq_handler_rev01()
930 lcdc_write(par->dma_end, in lcdc_irq_handler_rev01()
932 par->vsync_flag = 1; in lcdc_irq_handler_rev01()
933 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev01()
937 par->which_dma_channel_done = 1; in lcdc_irq_handler_rev01()
938 lcdc_write(par->dma_start, in lcdc_irq_handler_rev01()
940 lcdc_write(par->dma_end, in lcdc_irq_handler_rev01()
942 par->vsync_flag = 1; in lcdc_irq_handler_rev01()
943 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev01()
954 struct da8xx_fb_par *par = info->par; in fb_check_var() local
1025 if (line_size * var->yres_virtual > par->vram_size) in fb_check_var()
1026 var->yres_virtual = par->vram_size / line_size; in fb_check_var()
1039 var->pixclock = da8xx_fb_round_clk(par, var->pixclock); in fb_check_var()
1048 struct da8xx_fb_par *par; in lcd_da8xx_cpufreq_transition() local
1050 par = container_of(nb, struct da8xx_fb_par, freq_transition); in lcd_da8xx_cpufreq_transition()
1052 if (par->lcdc_clk_rate != clk_get_rate(par->lcdc_clk)) { in lcd_da8xx_cpufreq_transition()
1053 par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk); in lcd_da8xx_cpufreq_transition()
1055 da8xx_fb_calc_config_clk_divider(par, &par->mode); in lcd_da8xx_cpufreq_transition()
1056 if (par->blank == FB_BLANK_UNBLANK) in lcd_da8xx_cpufreq_transition()
1064 static int lcd_da8xx_cpufreq_register(struct da8xx_fb_par *par) in lcd_da8xx_cpufreq_register() argument
1066 par->freq_transition.notifier_call = lcd_da8xx_cpufreq_transition; in lcd_da8xx_cpufreq_register()
1068 return cpufreq_register_notifier(&par->freq_transition, in lcd_da8xx_cpufreq_register()
1072 static void lcd_da8xx_cpufreq_deregister(struct da8xx_fb_par *par) in lcd_da8xx_cpufreq_deregister() argument
1074 cpufreq_unregister_notifier(&par->freq_transition, in lcd_da8xx_cpufreq_deregister()
1084 struct da8xx_fb_par *par = info->par; in fb_remove() local
1087 lcd_da8xx_cpufreq_deregister(par); in fb_remove()
1089 if (par->panel_power_ctrl) in fb_remove()
1090 par->panel_power_ctrl(0); in fb_remove()
1100 dma_free_coherent(NULL, PALETTE_SIZE, par->v_palette_base, in fb_remove()
1101 par->p_palette_base); in fb_remove()
1102 dma_free_coherent(NULL, par->vram_size, par->vram_virt, in fb_remove()
1103 par->vram_phys); in fb_remove()
1118 struct da8xx_fb_par *par = info->par; in fb_wait_for_vsync() local
1133 par->vsync_flag = 0; in fb_wait_for_vsync()
1134 ret = wait_event_interruptible_timeout(par->vsync_wait, in fb_wait_for_vsync()
1135 par->vsync_flag != 0, in fb_wait_for_vsync()
1136 par->vsync_timeout); in fb_wait_for_vsync()
1184 struct da8xx_fb_par *par = info->par; in cfb_blank() local
1187 if (par->blank == blank) in cfb_blank()
1190 par->blank = blank; in cfb_blank()
1195 if (par->panel_power_ctrl) in cfb_blank()
1196 par->panel_power_ctrl(1); in cfb_blank()
1202 if (par->panel_power_ctrl) in cfb_blank()
1203 par->panel_power_ctrl(0); in cfb_blank()
1223 struct da8xx_fb_par *par = fbi->par; in da8xx_pan_display() local
1243 par->dma_start = start; in da8xx_pan_display()
1244 par->dma_end = end; in da8xx_pan_display()
1245 spin_lock_irqsave(&par->lock_for_chan_update, in da8xx_pan_display()
1247 if (par->which_dma_channel_done == 0) { in da8xx_pan_display()
1248 lcdc_write(par->dma_start, in da8xx_pan_display()
1250 lcdc_write(par->dma_end, in da8xx_pan_display()
1252 } else if (par->which_dma_channel_done == 1) { in da8xx_pan_display()
1253 lcdc_write(par->dma_start, in da8xx_pan_display()
1255 lcdc_write(par->dma_end, in da8xx_pan_display()
1258 spin_unlock_irqrestore(&par->lock_for_chan_update, in da8xx_pan_display()
1268 struct da8xx_fb_par *par = info->par; in da8xxfb_set_par() local
1275 fb_var_to_videomode(&par->mode, &info->var); in da8xxfb_set_par()
1277 par->cfg.bpp = info->var.bits_per_pixel; in da8xxfb_set_par()
1279 info->fix.visual = (par->cfg.bpp <= 8) ? in da8xxfb_set_par()
1281 info->fix.line_length = (par->mode.xres * par->cfg.bpp) / 8; in da8xxfb_set_par()
1283 ret = lcd_init(par, &par->cfg, &par->mode); in da8xxfb_set_par()
1285 dev_err(par->dev, "lcd init failed\n"); in da8xxfb_set_par()
1289 par->dma_start = info->fix.smem_start + in da8xxfb_set_par()
1292 par->dma_end = par->dma_start + in da8xxfb_set_par()
1295 lcdc_write(par->dma_start, LCD_DMA_FRM_BUF_BASE_ADDR_0_REG); in da8xxfb_set_par()
1296 lcdc_write(par->dma_end, LCD_DMA_FRM_BUF_CEILING_ADDR_0_REG); in da8xxfb_set_par()
1297 lcdc_write(par->dma_start, LCD_DMA_FRM_BUF_BASE_ADDR_1_REG); in da8xxfb_set_par()
1298 lcdc_write(par->dma_end, LCD_DMA_FRM_BUF_CEILING_ADDR_1_REG); in da8xxfb_set_par()
1348 struct da8xx_fb_par *par; in fb_probe() local
1408 par = da8xx_fb_info->par; in fb_probe()
1409 par->dev = &device->dev; in fb_probe()
1410 par->lcdc_clk = tmp_lcdc_clk; in fb_probe()
1411 par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk); in fb_probe()
1413 par->panel_power_ctrl = fb_pdata->panel_power_ctrl; in fb_probe()
1414 par->panel_power_ctrl(1); in fb_probe()
1418 par->cfg = *lcd_cfg; in fb_probe()
1423 par->vram_size = lcdc_info->xres * lcdc_info->yres * lcd_cfg->bpp; in fb_probe()
1425 par->vram_size = roundup(par->vram_size/8, ulcm); in fb_probe()
1426 par->vram_size = par->vram_size * LCD_NUM_BUFFERS; in fb_probe()
1428 par->vram_virt = dma_alloc_coherent(NULL, in fb_probe()
1429 par->vram_size, in fb_probe()
1430 (resource_size_t *) &par->vram_phys, in fb_probe()
1432 if (!par->vram_virt) { in fb_probe()
1439 da8xx_fb_info->screen_base = (char __iomem *) par->vram_virt; in fb_probe()
1440 da8xx_fb_fix.smem_start = par->vram_phys; in fb_probe()
1441 da8xx_fb_fix.smem_len = par->vram_size; in fb_probe()
1444 par->dma_start = par->vram_phys; in fb_probe()
1445 par->dma_end = par->dma_start + lcdc_info->yres * in fb_probe()
1449 par->v_palette_base = dma_zalloc_coherent(NULL, PALETTE_SIZE, in fb_probe()
1450 (resource_size_t *)&par->p_palette_base, in fb_probe()
1452 if (!par->v_palette_base) { in fb_probe()
1459 par->irq = platform_get_irq(device, 0); in fb_probe()
1460 if (par->irq < 0) { in fb_probe()
1474 da8xx_fb_info->pseudo_palette = par->pseudo_palette; in fb_probe()
1481 da8xx_fb_info->cmap.len = par->palette_sz; in fb_probe()
1490 init_waitqueue_head(&par->vsync_wait); in fb_probe()
1491 par->vsync_timeout = HZ / 5; in fb_probe()
1492 par->which_dma_channel_done = -1; in fb_probe()
1493 spin_lock_init(&par->lock_for_chan_update); in fb_probe()
1504 ret = lcd_da8xx_cpufreq_register(par); in fb_probe()
1518 ret = devm_request_irq(&device->dev, par->irq, lcdc_irq_handler, 0, in fb_probe()
1519 DRIVER_NAME, par); in fb_probe()
1526 lcd_da8xx_cpufreq_deregister(par); in fb_probe()
1535 dma_free_coherent(NULL, PALETTE_SIZE, par->v_palette_base, in fb_probe()
1536 par->p_palette_base); in fb_probe()
1539 dma_free_coherent(NULL, par->vram_size, par->vram_virt, par->vram_phys); in fb_probe()
1618 struct da8xx_fb_par *par = info->par; in fb_suspend() local
1621 if (par->panel_power_ctrl) in fb_suspend()
1622 par->panel_power_ctrl(0); in fb_suspend()
1635 struct da8xx_fb_par *par = info->par; in fb_resume() local
1640 if (par->blank == FB_BLANK_UNBLANK) { in fb_resume()
1643 if (par->panel_power_ctrl) in fb_resume()
1644 par->panel_power_ctrl(1); in fb_resume()