Lines Matching refs:par
312 static void lcd_blit(int load_mode, struct da8xx_fb_par *par) in lcd_blit() argument
327 start = par->dma_start; in lcd_blit()
328 end = par->dma_end; in lcd_blit()
347 start = par->p_palette_base; in lcd_blit()
348 end = start + par->palette_sz - 1; in lcd_blit()
524 static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height, in lcd_cfg_frame_buffer() argument
576 par->palette_sz = 16 * 2; in lcd_cfg_frame_buffer()
592 par->palette_sz = 256 * 2; in lcd_cfg_frame_buffer()
609 struct da8xx_fb_par *par = info->par; in fb_setcolreg() local
610 unsigned short *palette = (unsigned short *) par->v_palette_base; in fb_setcolreg()
689 lcd_blit(LOAD_PALETTE, par); in fb_setcolreg()
709 static int da8xx_fb_config_clk_divider(struct da8xx_fb_par *par, in da8xx_fb_config_clk_divider() argument
715 if (par->lcdc_clk_rate != lcdc_clk_rate) { in da8xx_fb_config_clk_divider()
716 ret = clk_set_rate(par->lcdc_clk, lcdc_clk_rate); in da8xx_fb_config_clk_divider()
718 dev_err(par->dev, in da8xx_fb_config_clk_divider()
723 par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk); in da8xx_fb_config_clk_divider()
737 static unsigned int da8xx_fb_calc_clk_divider(struct da8xx_fb_par *par, in da8xx_fb_calc_clk_divider() argument
745 *lcdc_clk_rate = par->lcdc_clk_rate; in da8xx_fb_calc_clk_divider()
748 *lcdc_clk_rate = clk_round_rate(par->lcdc_clk, in da8xx_fb_calc_clk_divider()
752 *lcdc_clk_rate = clk_round_rate(par->lcdc_clk, in da8xx_fb_calc_clk_divider()
762 static int da8xx_fb_calc_config_clk_divider(struct da8xx_fb_par *par, in da8xx_fb_calc_config_clk_divider() argument
766 unsigned lcdc_clk_div = da8xx_fb_calc_clk_divider(par, mode->pixclock, in da8xx_fb_calc_config_clk_divider()
769 return da8xx_fb_config_clk_divider(par, lcdc_clk_div, lcdc_clk_rate); in da8xx_fb_calc_config_clk_divider()
772 static unsigned da8xx_fb_round_clk(struct da8xx_fb_par *par, in da8xx_fb_round_clk() argument
777 lcdc_clk_div = da8xx_fb_calc_clk_divider(par, pixclock, &lcdc_clk_rate); in da8xx_fb_round_clk()
781 static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg, in lcd_init() argument
787 ret = da8xx_fb_calc_config_clk_divider(par, panel); in lcd_init()
789 dev_err(par->dev, "unable to configure clock\n"); in lcd_init()
820 ret = lcd_cfg_frame_buffer(par, (unsigned int)panel->xres, in lcd_init()
836 struct da8xx_fb_par *par = arg; in lcdc_irq_handler_rev02() local
858 lcd_blit(LOAD_DATA, par); in lcdc_irq_handler_rev02()
863 par->which_dma_channel_done = 0; in lcdc_irq_handler_rev02()
864 lcdc_write(par->dma_start, in lcdc_irq_handler_rev02()
866 lcdc_write(par->dma_end, in lcdc_irq_handler_rev02()
868 par->vsync_flag = 1; in lcdc_irq_handler_rev02()
869 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev02()
873 par->which_dma_channel_done = 1; in lcdc_irq_handler_rev02()
874 lcdc_write(par->dma_start, in lcdc_irq_handler_rev02()
876 lcdc_write(par->dma_end, in lcdc_irq_handler_rev02()
878 par->vsync_flag = 1; in lcdc_irq_handler_rev02()
879 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev02()
898 struct da8xx_fb_par *par = arg; in lcdc_irq_handler_rev01() local
923 lcd_blit(LOAD_DATA, par); in lcdc_irq_handler_rev01()
928 par->which_dma_channel_done = 0; in lcdc_irq_handler_rev01()
929 lcdc_write(par->dma_start, in lcdc_irq_handler_rev01()
931 lcdc_write(par->dma_end, in lcdc_irq_handler_rev01()
933 par->vsync_flag = 1; in lcdc_irq_handler_rev01()
934 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev01()
938 par->which_dma_channel_done = 1; in lcdc_irq_handler_rev01()
939 lcdc_write(par->dma_start, in lcdc_irq_handler_rev01()
941 lcdc_write(par->dma_end, in lcdc_irq_handler_rev01()
943 par->vsync_flag = 1; in lcdc_irq_handler_rev01()
944 wake_up_interruptible(&par->vsync_wait); in lcdc_irq_handler_rev01()
955 struct da8xx_fb_par *par = info->par; in fb_check_var() local
1026 if (line_size * var->yres_virtual > par->vram_size) in fb_check_var()
1027 var->yres_virtual = par->vram_size / line_size; in fb_check_var()
1040 var->pixclock = da8xx_fb_round_clk(par, var->pixclock); in fb_check_var()
1049 struct da8xx_fb_par *par; in lcd_da8xx_cpufreq_transition() local
1051 par = container_of(nb, struct da8xx_fb_par, freq_transition); in lcd_da8xx_cpufreq_transition()
1053 if (par->lcdc_clk_rate != clk_get_rate(par->lcdc_clk)) { in lcd_da8xx_cpufreq_transition()
1054 par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk); in lcd_da8xx_cpufreq_transition()
1056 da8xx_fb_calc_config_clk_divider(par, &par->mode); in lcd_da8xx_cpufreq_transition()
1057 if (par->blank == FB_BLANK_UNBLANK) in lcd_da8xx_cpufreq_transition()
1065 static int lcd_da8xx_cpufreq_register(struct da8xx_fb_par *par) in lcd_da8xx_cpufreq_register() argument
1067 par->freq_transition.notifier_call = lcd_da8xx_cpufreq_transition; in lcd_da8xx_cpufreq_register()
1069 return cpufreq_register_notifier(&par->freq_transition, in lcd_da8xx_cpufreq_register()
1073 static void lcd_da8xx_cpufreq_deregister(struct da8xx_fb_par *par) in lcd_da8xx_cpufreq_deregister() argument
1075 cpufreq_unregister_notifier(&par->freq_transition, in lcd_da8xx_cpufreq_deregister()
1085 struct da8xx_fb_par *par = info->par; in fb_remove() local
1088 lcd_da8xx_cpufreq_deregister(par); in fb_remove()
1090 if (par->panel_power_ctrl) in fb_remove()
1091 par->panel_power_ctrl(0); in fb_remove()
1101 dma_free_coherent(NULL, PALETTE_SIZE, par->v_palette_base, in fb_remove()
1102 par->p_palette_base); in fb_remove()
1103 dma_free_coherent(NULL, par->vram_size, par->vram_virt, in fb_remove()
1104 par->vram_phys); in fb_remove()
1119 struct da8xx_fb_par *par = info->par; in fb_wait_for_vsync() local
1134 par->vsync_flag = 0; in fb_wait_for_vsync()
1135 ret = wait_event_interruptible_timeout(par->vsync_wait, in fb_wait_for_vsync()
1136 par->vsync_flag != 0, in fb_wait_for_vsync()
1137 par->vsync_timeout); in fb_wait_for_vsync()
1185 struct da8xx_fb_par *par = info->par; in cfb_blank() local
1188 if (par->blank == blank) in cfb_blank()
1191 par->blank = blank; in cfb_blank()
1196 if (par->panel_power_ctrl) in cfb_blank()
1197 par->panel_power_ctrl(1); in cfb_blank()
1203 if (par->panel_power_ctrl) in cfb_blank()
1204 par->panel_power_ctrl(0); in cfb_blank()
1224 struct da8xx_fb_par *par = fbi->par; in da8xx_pan_display() local
1244 par->dma_start = start; in da8xx_pan_display()
1245 par->dma_end = end; in da8xx_pan_display()
1246 spin_lock_irqsave(&par->lock_for_chan_update, in da8xx_pan_display()
1248 if (par->which_dma_channel_done == 0) { in da8xx_pan_display()
1249 lcdc_write(par->dma_start, in da8xx_pan_display()
1251 lcdc_write(par->dma_end, in da8xx_pan_display()
1253 } else if (par->which_dma_channel_done == 1) { in da8xx_pan_display()
1254 lcdc_write(par->dma_start, in da8xx_pan_display()
1256 lcdc_write(par->dma_end, in da8xx_pan_display()
1259 spin_unlock_irqrestore(&par->lock_for_chan_update, in da8xx_pan_display()
1269 struct da8xx_fb_par *par = info->par; in da8xxfb_set_par() local
1276 fb_var_to_videomode(&par->mode, &info->var); in da8xxfb_set_par()
1278 par->cfg.bpp = info->var.bits_per_pixel; in da8xxfb_set_par()
1280 info->fix.visual = (par->cfg.bpp <= 8) ? in da8xxfb_set_par()
1282 info->fix.line_length = (par->mode.xres * par->cfg.bpp) / 8; in da8xxfb_set_par()
1284 ret = lcd_init(par, &par->cfg, &par->mode); in da8xxfb_set_par()
1286 dev_err(par->dev, "lcd init failed\n"); in da8xxfb_set_par()
1290 par->dma_start = info->fix.smem_start + in da8xxfb_set_par()
1293 par->dma_end = par->dma_start + in da8xxfb_set_par()
1296 lcdc_write(par->dma_start, LCD_DMA_FRM_BUF_BASE_ADDR_0_REG); in da8xxfb_set_par()
1297 lcdc_write(par->dma_end, LCD_DMA_FRM_BUF_CEILING_ADDR_0_REG); in da8xxfb_set_par()
1298 lcdc_write(par->dma_start, LCD_DMA_FRM_BUF_BASE_ADDR_1_REG); in da8xxfb_set_par()
1299 lcdc_write(par->dma_end, LCD_DMA_FRM_BUF_CEILING_ADDR_1_REG); in da8xxfb_set_par()
1349 struct da8xx_fb_par *par; in fb_probe() local
1409 par = da8xx_fb_info->par; in fb_probe()
1410 par->dev = &device->dev; in fb_probe()
1411 par->lcdc_clk = tmp_lcdc_clk; in fb_probe()
1412 par->lcdc_clk_rate = clk_get_rate(par->lcdc_clk); in fb_probe()
1414 par->panel_power_ctrl = fb_pdata->panel_power_ctrl; in fb_probe()
1415 par->panel_power_ctrl(1); in fb_probe()
1419 par->cfg = *lcd_cfg; in fb_probe()
1424 par->vram_size = lcdc_info->xres * lcdc_info->yres * lcd_cfg->bpp; in fb_probe()
1426 par->vram_size = roundup(par->vram_size/8, ulcm); in fb_probe()
1427 par->vram_size = par->vram_size * LCD_NUM_BUFFERS; in fb_probe()
1429 par->vram_virt = dma_alloc_coherent(NULL, in fb_probe()
1430 par->vram_size, in fb_probe()
1431 (resource_size_t *) &par->vram_phys, in fb_probe()
1433 if (!par->vram_virt) { in fb_probe()
1440 da8xx_fb_info->screen_base = (char __iomem *) par->vram_virt; in fb_probe()
1441 da8xx_fb_fix.smem_start = par->vram_phys; in fb_probe()
1442 da8xx_fb_fix.smem_len = par->vram_size; in fb_probe()
1445 par->dma_start = par->vram_phys; in fb_probe()
1446 par->dma_end = par->dma_start + lcdc_info->yres * in fb_probe()
1450 par->v_palette_base = dma_zalloc_coherent(NULL, PALETTE_SIZE, in fb_probe()
1451 (resource_size_t *)&par->p_palette_base, in fb_probe()
1453 if (!par->v_palette_base) { in fb_probe()
1460 par->irq = platform_get_irq(device, 0); in fb_probe()
1461 if (par->irq < 0) { in fb_probe()
1475 da8xx_fb_info->pseudo_palette = par->pseudo_palette; in fb_probe()
1482 da8xx_fb_info->cmap.len = par->palette_sz; in fb_probe()
1491 init_waitqueue_head(&par->vsync_wait); in fb_probe()
1492 par->vsync_timeout = HZ / 5; in fb_probe()
1493 par->which_dma_channel_done = -1; in fb_probe()
1494 spin_lock_init(&par->lock_for_chan_update); in fb_probe()
1505 ret = lcd_da8xx_cpufreq_register(par); in fb_probe()
1519 ret = devm_request_irq(&device->dev, par->irq, lcdc_irq_handler, 0, in fb_probe()
1520 DRIVER_NAME, par); in fb_probe()
1527 lcd_da8xx_cpufreq_deregister(par); in fb_probe()
1536 dma_free_coherent(NULL, PALETTE_SIZE, par->v_palette_base, in fb_probe()
1537 par->p_palette_base); in fb_probe()
1540 dma_free_coherent(NULL, par->vram_size, par->vram_virt, par->vram_phys); in fb_probe()
1619 struct da8xx_fb_par *par = info->par; in fb_suspend() local
1622 if (par->panel_power_ctrl) in fb_suspend()
1623 par->panel_power_ctrl(0); in fb_suspend()
1636 struct da8xx_fb_par *par = info->par; in fb_resume() local
1641 if (par->blank == FB_BLANK_UNBLANK) { in fb_resume()
1644 if (par->panel_power_ctrl) in fb_resume()
1645 par->panel_power_ctrl(1); in fb_resume()