Lines Matching +full:panel +full:- +full:specific

7  * SPDX-License-Identifier:	GPL-2.0+
13 #include <asm/arch/imx-regs.h>
20 /* this might need panel specific set-up as-well */
23 /* -------------- controller specific stuff -------------- */
101 /* IPU_CONF and its bits already defined in imx-regs.h */
350 static GraphicDevice panel; variable
355 * sdc_init_panel() - initialize a synchronous LCD panel.
356 * @width: width of panel in pixels.
357 * @height: height of panel in pixels.
374 return -EACCES; in sdc_init_panel()
376 /* Init panel size and blanking periods */ in sdc_init_panel()
377 reg = width + mode->left_margin + mode->right_margin - 1; in sdc_init_panel()
382 reg = ((mode->hsync_len - 1) << 26) | (reg << 16); in sdc_init_panel()
385 reg = height + mode->upper_margin + mode->lower_margin - 1; in sdc_init_panel()
390 reg = ((mode->vsync_len - 1) << 26) | SDC_V_SYNC_WIDTH_L | (reg << 16); in sdc_init_panel()
404 return -EINVAL; in sdc_init_panel()
411 * Opposed to the kernel driver mode->pixclock is the time of one in sdc_init_panel()
413 * pixel_clk = 1e12 / mode->pixclock in sdc_init_panel()
416 * div = ipu_clk * 16 / (1e12 / mode->pixclock) in sdc_init_panel()
418 * div = ipu_clk * 16 * mode->pixclock / 1e12 in sdc_init_panel()
424 div = ((clock/1024) * (mode->pixclock/128)) / 476837; in sdc_init_panel()
435 writel((((div / 8) - 1) << 22) | div, DI_DISP3_TIME_CONF); in sdc_init_panel()
443 writel(old_conf | mode->sync, DI_DISP_SIG_POL); in sdc_init_panel()
449 ((fmt_cfg[di_setup].acc - 1) << 12), DI_DISP_ACC_CC); in sdc_init_panel()
467 params->pp.fw = width - 1; in ipu_ch_param_set_size()
468 params->pp.fh_l = height - 1; in ipu_ch_param_set_size()
469 params->pp.fh_h = (height - 1) >> 8; in ipu_ch_param_set_size()
470 params->pp.sl = stride - 1; in ipu_ch_param_set_size()
475 params->ip.bpp = 2; in ipu_ch_param_set_size()
476 params->ip.pfs = 4; in ipu_ch_param_set_size()
477 params->ip.npb = 7; in ipu_ch_param_set_size()
478 params->ip.sat = 2; /* SAT = 32-bit access */ in ipu_ch_param_set_size()
479 params->ip.ofs0 = 0; /* Red bit offset */ in ipu_ch_param_set_size()
480 params->ip.ofs1 = 5; /* Green bit offset */ in ipu_ch_param_set_size()
481 params->ip.ofs2 = 11; /* Blue bit offset */ in ipu_ch_param_set_size()
482 params->ip.ofs3 = 16; /* Alpha bit offset */ in ipu_ch_param_set_size()
483 params->ip.wid0 = 4; /* Red bit width - 1 */ in ipu_ch_param_set_size()
484 params->ip.wid1 = 5; /* Green bit width - 1 */ in ipu_ch_param_set_size()
485 params->ip.wid2 = 4; /* Blue bit width - 1 */ in ipu_ch_param_set_size()
488 params->ip.bpp = 1; /* 24 BPP & RGB PFS */ in ipu_ch_param_set_size()
489 params->ip.pfs = 4; in ipu_ch_param_set_size()
490 params->ip.npb = 7; in ipu_ch_param_set_size()
491 params->ip.sat = 2; /* SAT = 32-bit access */ in ipu_ch_param_set_size()
492 params->ip.ofs0 = 16; /* Red bit offset */ in ipu_ch_param_set_size()
493 params->ip.ofs1 = 8; /* Green bit offset */ in ipu_ch_param_set_size()
494 params->ip.ofs2 = 0; /* Blue bit offset */ in ipu_ch_param_set_size()
495 params->ip.ofs3 = 24; /* Alpha bit offset */ in ipu_ch_param_set_size()
496 params->ip.wid0 = 7; /* Red bit width - 1 */ in ipu_ch_param_set_size()
497 params->ip.wid1 = 7; /* Green bit width - 1 */ in ipu_ch_param_set_size()
498 params->ip.wid2 = 7; /* Blue bit width - 1 */ in ipu_ch_param_set_size()
505 params->pp.nsb = 1; in ipu_ch_param_set_size()
511 params->pp.eba0 = (u32)buf0; in ipu_ch_param_set_buffer()
512 params->pp.eba1 = (u32)buf1; in ipu_ch_param_set_buffer()
518 for (; num_words > 0; num_words--) { in ipu_write_param_mem()
541 stride_bytes = (panel.plnSizeX * panel.gdfBytesPP + 3) & ~3; in ipu_init_channel_buffer()
546 ipu_ch_param_set_size(&params, panel.gdfIndex, in ipu_init_channel_buffer()
547 panel.plnSizeX, panel.plnSizeY, stride_bytes); in ipu_init_channel_buffer()
555 params.pp.npb = 16 - 1; in ipu_init_channel_buffer()
563 /* Disable double-buffering */ in ipu_init_channel_buffer()
583 * ipu_enable_channel() - enable an IPU channel.
614 return -EACCES; in ipu_update_channel_buffer()
616 /* 44.3.3.1.9 - Row Number 1 (WORD1, offset 0) */ in ipu_update_channel_buffer()
666 * mx3fb_set_par() - set framebuffer parameters and change the operating mode.
674 ret = sdc_init_panel(panel.plnSizeX, panel.plnSizeY, in mx3fb_set_par()
679 writel((mode->left_margin << 16) | mode->upper_margin, SDC_BG_POS); in mx3fb_set_par()
728 /* Service request counter to maximum - shouldn't be needed */ in ll_disp3_enable()
743 /* Might need to trigger HSP clock change - see 44.3.3.8.5 */ in ll_disp3_enable()
748 /* This might be board-specific */ in ll_disp3_enable()
754 /* Use global - not per-pixel - Alpha-blending */ in ll_disp3_enable()
764 /* Disable colour-keying for background */ in ll_disp3_enable()
781 /* ------------------------ public part ------------------- */
784 return panel.plnSizeX * panel.plnSizeY * panel.gdfBytesPP; in calc_fbsize()
850 t1 = (mode->left_margin + mode->xres + in video_hw_init()
851 mode->right_margin + mode->hsync_len) / 8; in video_hw_init()
853 t1 *= mode->pixclock; in video_hw_init()
856 t1 *= (mode->upper_margin + mode->yres + in video_hw_init()
857 mode->lower_margin + mode->vsync_len); in video_hw_init()
862 sprintf(panel.modeIdent, "%dx%dx%d %ldkHz %ldHz", in video_hw_init()
863 mode->xres, mode->yres, in video_hw_init()
865 printf("%s\n", panel.modeIdent); in video_hw_init()
866 panel.winSizeX = mode->xres; in video_hw_init()
867 panel.winSizeY = mode->yres; in video_hw_init()
868 panel.plnSizeX = mode->xres; in video_hw_init()
869 panel.plnSizeY = mode->yres; in video_hw_init()
873 panel.gdfBytesPP = 4; in video_hw_init()
874 panel.gdfIndex = GDF_32BIT_X888RGB; in video_hw_init()
877 panel.gdfBytesPP = 2; in video_hw_init()
878 panel.gdfIndex = GDF_16BIT_565RGB; in video_hw_init()
881 panel.gdfBytesPP = 1; in video_hw_init()
882 panel.gdfIndex = GDF__8BIT_INDEX; in video_hw_init()
892 panel.frameAdrs = (u32) malloc(memsize); in video_hw_init()
893 if (panel.frameAdrs == 0) { in video_hw_init()
897 panel.memSize = memsize; in video_hw_init()
899 ll_disp3_enable((void *) panel.frameAdrs); in video_hw_init()
900 memset((void *) panel.frameAdrs, 0, memsize); in video_hw_init()
903 __func__, panel.frameAdrs, memsize); in video_hw_init()
905 return (void *) &panel; in video_hw_init()