예제 #1
0
__s32 BSP_disp_restore_image_reg(__u32 sel, __u32 addr)
{
        __u32 i = 0;
        __u32 value = 0;
        __u32 reg_base = 0;

        if(sel == 0)
        {
                reg_base = gdisp.init_para.base_image0;
        }
        else
        {
                reg_base = gdisp.init_para.base_image1;
        }

        DE_BE_Reg_Init(sel);
        for(i=4; i<0xe00 - 0x800; i+=4)
        {
                value = sys_get_wvalue(addr + i);
                sys_put_wvalue(reg_base + 0x800 + i,value);
        }

        value = sys_get_wvalue(addr);
        sys_put_wvalue(reg_base + 0x800,value);

        return 0;
}
예제 #2
0
__s32 bsp_disp_restore_image_reg(__u32 screen_id, __u32 addr)
{
	__u32 i = 0;
	__u32 value = 0;
	__u32 reg_base = 0;

	if(addr == 0) {
		DE_WRN("bsp_disp_restore_image_reg, addr is NULL!");
		return -1;
	}

	if(screen_id == 0) {
		reg_base = gdisp.init_para.reg_base[DISP_MOD_BE0];
	}	else {
		reg_base = gdisp.init_para.reg_base[DISP_MOD_BE1];
	}

	DE_BE_Reg_Init(screen_id);
	for(i=4; i<0xe00 - 0x800; i+=4) {
		value = sys_get_wvalue(addr + i);
		sys_put_wvalue(reg_base + 0x800 + i,value);
	}

	value = sys_get_wvalue(addr);
	sys_put_wvalue(reg_base + 0x800,value);

	return 0;
}
예제 #3
0
__s32 bsp_disp_restore_scaler_reg(__u32 scaler_index, __u32 addr)
{
	__u32 i = 0;
	__u32 value = 0;
	__u32 reg_base = 0;

	if(scaler_index == 0) {
		reg_base = gdisp.init_para.reg_base[DISP_MOD_FE0];
	}	else {
		reg_base = gdisp.init_para.reg_base[DISP_MOD_FE1];
	}

	for(i=8; i<0xa18; i+=4)	{
		value = sys_get_wvalue(addr + i);
		sys_put_wvalue(reg_base + i,value);
	}

	value = sys_get_wvalue(addr);
	sys_put_wvalue(reg_base,value);

	value = sys_get_wvalue(addr + 4);
	sys_put_wvalue(reg_base + 4,value);

	return 0;
}
예제 #4
0
__s32 BSP_disp_restore_tvec_reg(__u32 sel ,__u32 addr)
{
        __u32 i = 0;
        __u32 value = 0;
        __u32 reg_base = 0;

        if(sel == 0)
        {
                reg_base = gdisp.init_para.base_tvec0;
        }
        else
        {
                reg_base = gdisp.init_para.base_tvec1;
        }

        for(i=8; i<0x210; i+=4)
        {
                value = sys_get_wvalue(addr + i);
                sys_put_wvalue(reg_base + i,value);
        }

        value = sys_get_wvalue(addr);
        sys_put_wvalue(reg_base,value);

        value = sys_get_wvalue(addr + 4);
        sys_put_wvalue(reg_base + 4,value);

        value = sys_get_wvalue(addr + 24);
        sys_put_wvalue(reg_base + 24, value);

        return 0;
}
예제 #5
0
__s32 Disp_lcdc_pin_cfg(__u32 sel, __disp_output_type_t out_type, __u32 bon)
{
    if(out_type == DISP_OUTPUT_TYPE_LCD)
    {
        __hdle lcd_pin_hdl;
        int  i;

        for(i=0; i<28; i++)
        {
            if(gdisp.screen[sel].lcd_cfg.lcd_io_used[i])
            {
                user_gpio_set_t  gpio_info[1];

                memcpy(gpio_info, &(gdisp.screen[sel].lcd_cfg.lcd_io[i]), sizeof(user_gpio_set_t));
                if(!bon)
                {
                    gpio_info->mul_sel = 0;
                }
                else
                {
                    if((gpanel_info[sel].lcd_if == 3) && (gpio_info->mul_sel==2))
                    {
                        gpio_info->mul_sel = 3;
                    }
                }
                lcd_pin_hdl = OSAL_GPIO_Request(gpio_info, 1);
                OSAL_GPIO_Release(lcd_pin_hdl, 2);
            }
        }
    }
    else if(out_type == DISP_OUTPUT_TYPE_VGA)
    {
        __u32 reg_start = 0;
        __u32 tmp = 0;

        if(sel == 0)
        {
            reg_start = gdisp.init_para.base_pioc+0x6c;
        }
        else
        {
            reg_start = gdisp.init_para.base_pioc+0xfc;
        }

        if(bon)
        {
            tmp = sys_get_wvalue(reg_start + 0x0c) & 0xffff00ff;
            sys_put_wvalue(reg_start + 0x0c,tmp | 0x00002200);
        }
        else
        {
            tmp = sys_get_wvalue(reg_start + 0x0c) & 0xffff00ff;
            sys_put_wvalue(reg_start + 0x0c,tmp);
        }
    }

	return DIS_SUCCESS;
}
예제 #6
0
////////////////////////////////////////   back light   ////////////////////////////////////////////////////////////////////
static void LCD_bl_open(__u32 sel)
{
    __u32 tmp;
	__lcd_panel_init_para_t para;

	LCD_get_init_para(&para);

// PWM enable
    tmp = sys_get_wvalue(para.base_ccmu+0xe0);
    tmp |= (1<<4);
    sys_put_wvalue(para.base_ccmu+0xe0,tmp);

// GPIO_O_1_EN-BL, PA5 set to 1
/*
    tmp = sys_get_wvalue(para.base_pioc + 0x10);
    tmp |= 0x00000020;//set bit5
    sys_put_wvalue(para.base_pioc+0x10, tmp);
    
    tmp = sys_get_wvalue(para.base_pioc+0x00);
    tmp &= 0xff8fffff;
    sys_put_wvalue(para.base_pioc+0x00,tmp | (1<<20));//bit22:20, 1:output

    tmp = sys_get_wvalue(para.base_pioc + 0x10);
    tmp |= 0x00000020;//set bit5
    sys_put_wvalue(para.base_pioc+0x10, tmp);
    */
}
예제 #7
0
static void LCD_bl_close(__u32 sel)
{
    __u32 tmp;
    __lcd_panel_init_para_t para;

	LCD_get_init_para(&para);
/*
// GPIO_O_1_EN-BL, PA5 set to 0
    tmp = sys_get_wvalue(para.base_pioc + 0x10);
    tmp &= 0xffffffdf;//clear bit5
    sys_put_wvalue(para.base_pioc+0x10, tmp);
    
    tmp = sys_get_wvalue(para.base_pioc+0x00);
    tmp &= 0xff8fffff;
    sys_put_wvalue(para.base_pioc+0x00,tmp | (1<<20));//bit22:20, 1:output

    tmp = sys_get_wvalue(para.base_pioc + 0x10);
    tmp &= 0xffffffdf;//clear bit5
    sys_put_wvalue(para.base_pioc+0x10, tmp);
*/

// PWM disable
    tmp = sys_get_wvalue(para.base_ccmu+0xe0);
    tmp &= (~(1<<4));
    sys_put_wvalue(para.base_ccmu+0xe0,tmp);    
}
예제 #8
0
__s32 DRV_DISP_Init(void)
{
    __disp_bsp_init_para para;

    init_waitqueue_head(&g_fbi.wait[0]);
    init_waitqueue_head(&g_fbi.wait[1]);
    g_fbi.wait_count[0] = 0;
    g_fbi.wait_count[1] = 0;

    memset(&para, 0, sizeof(__disp_bsp_init_para));
    para.base_image0    = (__u32)g_fbi.base_image0;
    para.base_image1    = (__u32)g_fbi.base_image1;
    para.base_scaler0   = (__u32)g_fbi.base_scaler0;
    para.base_scaler1   = (__u32)g_fbi.base_scaler1;
    para.base_lcdc0     = (__u32)g_fbi.base_lcdc0;
    para.base_lcdc1     = (__u32)g_fbi.base_lcdc1;
    para.base_tvec0      = (__u32)g_fbi.base_tvec0;
    para.base_tvec1      = (__u32)g_fbi.base_tvec1;
    para.base_ccmu      = (__u32)g_fbi.base_ccmu;
    para.base_sdram     = (__u32)g_fbi.base_sdram;
    para.base_pioc      = (__u32)g_fbi.base_pioc;
    para.base_pwm       = (__u32)g_fbi.base_pwm;
	para.disp_int_process       = DRV_disp_int_process;

	memset(&g_disp_drv, 0, sizeof(__disp_drv_t));

    sys_put_wvalue(0xf1c20118, 1<<19);
    
    BSP_disp_init(&para);
    BSP_disp_open();


    return 0;
}
예제 #9
0
s32 fb_draw_colorbar(u32 base, u32 width, u32 height, struct fb_var_screeninfo *var)
{
	u32 i=0, j=0;

	if(!base)
		return -1;

	for(i = 0; i<height; i++) {
		for(j = 0; j<width/4; j++) {
			u32 offset = 0;

			if(var->bits_per_pixel == 32)	{
					offset = width * i + j;
					sys_put_wvalue(base + offset*4, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->red.length)-1)<<var->red.offset));

					offset = width * i + j + width/4;
					sys_put_wvalue(base + offset*4, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->green.length)-1)<<var->green.offset));

					offset = width * i + j + width/4*2;
					sys_put_wvalue(base + offset*4, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->blue.length)-1)<<var->blue.offset));

					offset = width * i + j + width/4*3;
					sys_put_wvalue(base + offset*4, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->red.length)-1)<<var->red.offset) | (((1<<var->green.length)-1)<<var->green.offset));
				}
#if 0
				else if(var->bits_per_pixel == 16) {
					offset = width * i + j;
					sys_put_hvalue(base + offset*2, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->red.length)-1)<<var->red.offset));

					offset = width * i + j + width/4;
					sys_put_hvalue(base + offset*2, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->green.length)-1)<<var->green.offset));

					offset = width * i + j + width/4*2;
					sys_put_hvalue(base + offset*2, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->blue.length)-1)<<var->blue.offset));

					offset = width * i + j + width/4*3;
					sys_put_hvalue(base + offset*2, (((1<<var->transp.length)-1)<<var->transp.offset) | (((1<<var->red.length)-1)<<var->red.offset) | (((1<<var->green.length)-1)<<var->green.offset));
			}
#endif
		}
	}

	return 0;
}
예제 #10
0
//lcd_pwm_div = log2(24K/(16*pwm_freq));
__s32 Disp_pwm_cfg(__u32 sel)
{
    __u32 tmp;
    __u32 pwm_div;
    __u8 lcd_pwm_div = 0x04;
    __u32 i;
    __u32 mul_val = 1;
    __u32 pwm_freq = gpanel_info[sel].lcd_pwm_freq;
    __u32 PWM_SOUCE_FREQ = 24000;
    __u32 PWM_LEVEL = 16;

    if(pwm_freq)
    {
        pwm_div = (PWM_SOUCE_FREQ/(PWM_LEVEL * pwm_freq));
    }
    else
    {
        pwm_div = 16;
    }

    for(i = 0;i <= 12;i++)
    {
        if(pwm_div <= mul_val)
        {
            lcd_pwm_div = i;

            break;
        }

        mul_val = mul_val * 2;
    }

    tmp = sys_get_wvalue(gdisp.init_para.base_ccmu+0xe0);
    tmp |= ((1<<6) | (1<<5) | lcd_pwm_div);//bit6:gatting the special clock for pwm0; bit5:pwm0  active state is high level
    sys_put_wvalue(gdisp.init_para.base_ccmu+0xe0,tmp);

    sys_put_wvalue(gdisp.init_para.base_ccmu+0xe4,0x000f000c);

    tmp = sys_get_wvalue(gdisp.init_para.base_pioc+0x24);
    tmp &= 0xfffff8ff;
    sys_put_wvalue(gdisp.init_para.base_pioc+0x24,tmp | (2<<8));//pwm io,PB2, bit10:8

	return DIS_SUCCESS;
}
예제 #11
0
static __s32 pwm_write_reg(__u32 offset, __u32 value)
{
	sys_put_wvalue(gdisp.init_para.base_pwm + offset, value);

#ifdef CONFIG_ARCH_SUN4I
	LCD_delay_ms(20);
#endif

	return 0;
}
예제 #12
0
파일: ILI9327_car.c 프로젝트: silview/C100A
static void LCD_bl_close(__u32 sel)
{
    __u32 tmp;
    __lcd_panel_init_para_t para;

	LCD_get_init_para(&para);
	
    tmp = sys_get_wvalue(para.base_timer+0xa0);
    tmp &= (~(1<<4));
    sys_put_wvalue(para.base_timer+0xa0,tmp);
}
예제 #13
0
static void LCD_power_off(__u32 sel)//PH27,0 active
{
	__u32 tmp = 0;
	__lcd_panel_init_para_t para;

	LCD_get_init_para(&para);

// LCD-PWR, PH27 set to 1
    tmp = sys_get_wvalue(para.base_pioc + 0x10c);
    tmp |= 0x08000000;//set bit27
    sys_put_wvalue(para.base_pioc+0x10c, tmp);
    
    tmp = sys_get_wvalue(para.base_pioc+0x108);
    tmp &= 0xffff8fff;
    sys_put_wvalue(para.base_pioc+0x108,tmp | (1<<12));//bit18:16, 1:output

    tmp = sys_get_wvalue(para.base_pioc + 0x10c);
    tmp |= 0x08000000;//set bit27
    sys_put_wvalue(para.base_pioc+0x10c, tmp);
}
예제 #14
0
__s32 iep_deu_resume (__u32 sel)//restore register
{
	__u32 i;
	__u32 reg_val;

	if(deu_reg_bak[sel]) {
		for(i=4; i<0x60; i+=4) {
			reg_val = sys_get_wvalue(deu_reg_bak[sel] + i);
			sys_put_wvalue(DEU_EBIOS_Get_Reg_Base(sel) + i,reg_val);
		}

		reg_val = sys_get_wvalue(deu_reg_bak[sel]);
		sys_put_wvalue(DEU_EBIOS_Get_Reg_Base(sel),reg_val);
#if defined(__LINUX_OSAL__)
		kfree((void*)deu_reg_bak[sel]);
		deu_reg_bak[sel] = 0;
#endif
	}

	return 0;
}
예제 #15
0
파일: iep_drc.c 프로젝트: Aorjoa/bootloader
__s32 iep_drc_resume (__u32 sel)//restore register
{
	__u32 i;
	__u32 reg_val;

	if(drc_reg_bak[sel])
	{
	for(i=4; i<0x3fc; i+=4) {
		reg_val = sys_get_wvalue(drc_reg_bak[sel] + i);
		sys_put_wvalue(DRC_EBIOS_Get_Reg_Base(sel) + i,reg_val);
	}

	reg_val = sys_get_wvalue(drc_reg_bak[sel]);
	sys_put_wvalue(DRC_EBIOS_Get_Reg_Base(sel),reg_val);
#if defined(__LINUX_OSAL__)
	kfree((void*)drc_reg_bak[sel]);
	drc_reg_bak[sel] = 0;
#else
	OSAL_PhyFree((void *)drc_reg_bak[sel], sizeof(__u32)*0x3fc);
#endif
	}

	return 0;
}
예제 #16
0
__s32 iep_drc_suspend(__u32 sel)//save register
{
	__u32 i,reg_val;
#if defined(__LINUX_OSAL__)
	drc_reg_bak[sel] = (__u32)kmalloc(sizeof(__u32)*0x3fc,GFP_KERNEL | __GFP_ZERO);
#endif
	if(drc_reg_bak[sel]) {
		for(i=0; i<0x3fc; i+=4)	{
			/*  save register */
			reg_val = sys_get_wvalue(DRC_EBIOS_Get_Reg_Base(sel) +i);
			sys_put_wvalue(drc_reg_bak[sel]+i, reg_val);
		}
	}
	return 0;
}
예제 #17
0
__s32 fb_draw_gray_pictures(__u32 base, __u32 width, __u32 height, struct fb_var_screeninfo *var)
{
	__u32 time = 0;

	for(time = 0; time<18; time++) {
		__u32 i=0, j=0;

		for(i = 0; i<height; i++)	{
			for(j = 0; j<width; j++) {
				__u32 addr = base + (i*width+ j)*4;
				__u32 value = (0xff<<24) | ((time*15)<<16) | ((time*15)<<8) | (time*15);

				sys_put_wvalue(addr, value);
			}
		}
	}
	return 0;
}
예제 #18
0
파일: disp_de.c 프로젝트: Aorjoa/bootloader
__s32 bsp_disp_store_image_reg(__u32 screen_id, __u32 addr)
{
	__u32 i = 0;
	__u32 value = 0;
	__u32 reg_base = 0;

	if(screen_id == 0) {
		reg_base = gdisp.init_para.reg_base[DISP_MOD_BE0];
	}	else {
		reg_base = gdisp.init_para.reg_base[DISP_MOD_BE1];
	}

	for(i=0; i<0xe00 - 0x800; i+=4)	{
		value = sys_get_wvalue(reg_base + 0x800 + i);
		sys_put_wvalue(addr + i, value);
	}

	return 0;
}
예제 #19
0
 //setting:  0,       1,      2,....  14,   15
//pol==0:  1,       2,      3,....  15,   0
//pol==1:  0,     15,    14, ...    2,   1
__s32 BSP_disp_lcd_set_bright(__u32 sel, __disp_lcd_bright_t  bright)
{
    if(gdisp.screen[sel].status & LCD_ON)
    {
        __u32 value = 0;
        __u32    tmp;

        if(gpanel_info[sel].lcd_pwm_pol == 0)
        {
            if(bright == DISP_LCD_BRIGHT_LEVEL15)
            {
                value = 0;
            }
            else
            {
                value = bright + 1;
            }
        }
        else
        {
            if(bright == DISP_LCD_BRIGHT_LEVEL0)
            {
                value = 0;
            }
            else
            {
                value = 16 - bright;
            }
        }

    	tmp = sys_get_wvalue(gdisp.init_para.base_ccmu+0xe4);
        sys_put_wvalue(gdisp.init_para.base_ccmu+0xe4,(tmp & 0xffff0000) | value);
    }

    return DIS_SUCCESS;
}
예제 #20
0
static __u32 sunxi_pwm_write_reg(__u32 offset, __u32 value)
{
    sys_put_wvalue(SUNXI_PWM_VBASE + offset, value);

    return 0;
}
예제 #21
0
//pwm pin
	//pB2: 2:pwm0
	//pI3:  2:pwm1
__s32 Disp_lcdc_pin_cfg(__u32 sel, __disp_output_type_t out_type, __u32 bon)	//lcd pin, pwm pin
{
    __u32 tmp = 0;

    if(bon)
    {
        if(sel == 0)
        {
            switch(out_type)
            {
                case DISP_OUTPUT_TYPE_LCD:
                case DISP_OUTPUT_TYPE_HDMI:
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x6c,0x22222222);
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x70,0x22222222);
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x74,0x22222222);
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x78,0x00002222);
                    break;
                case DISP_OUTPUT_TYPE_VGA:
                    tmp = sys_get_wvalue(gdisp.init_para.base_pioc+0x6c) & 0xffff00ff;
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x6c,tmp | 0x00002200);
                    break;
                default:
                    break;
            }
        }
        else if(sel == 1)
        {
            switch(out_type)
            {
                case DISP_OUTPUT_TYPE_LCD:
                case DISP_OUTPUT_TYPE_HDMI:
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x6c,0x44444444);
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x70,0x44444444);
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x74,0x44444444);
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x78,0x00004444);
                    break;
                case DISP_OUTPUT_TYPE_VGA:
                    tmp = sys_get_wvalue(gdisp.init_para.base_pioc+0x6c) & 0xffff00ff;
                    sys_put_wvalue(gdisp.init_para.base_pioc+0x6c,tmp | 0x00004400);
                    break;
                default:
                    break;
            }
        }

    }
    else
    {
        sys_put_wvalue(gdisp.init_para.base_pioc+0x6c,0x00000000);
        sys_put_wvalue(gdisp.init_para.base_pioc+0x70,0x00000000);
        sys_put_wvalue(gdisp.init_para.base_pioc+0x74,0x00000000);
        sys_put_wvalue(gdisp.init_para.base_pioc+0x78,0x00000000);
    }

	return DIS_SUCCESS;
}
예제 #22
0
uint sunxi_pwm_write_reg(uint offset, uint value)
{
    sys_put_wvalue(PWM03_BASE + offset, value);

    return 0;
}
예제 #23
0
__s32 audio_config(void)
{
	__s32 i;

        __inf("audio_config, sample_rate:%d\n", audio_info.sample_rate);

	HDMI_WUINT32(0x040,0x00000000);
	HDMI_WUINT32(0x040,0x40000000);
	while(HDMI_RUINT32(0x040) != 0);
	HDMI_WUINT32(0x040,0x40000000);
	while(HDMI_RUINT32(0x040) != 0);	
	
	if(!audio_info.audio_en)
	{
        return 0;
	}
	i = get_audio_info(audio_info.sample_rate);
	if(i == -1)
	{
		return 0;
	}	
	
	if(audio_info.channel_num == 1)
        {
          HDMI_WUINT32(0x044,0x00000000);             	//audio fifo rst and select ddma, 2 ch 16bit pcm 
          HDMI_WUINT32(0x048,0x00000000);				//ddma,pcm layout0 1ch
          HDMI_WUINT32(0x04c,0x76543200);
		  
          HDMI_WUINT32(0x0A0,0x710a0184);             	//audio infoframe head 
          HDMI_WUINT32(0x0A4,0x00000000);             	//CA = 0X1F 
          HDMI_WUINT32(0x0A8,0x00000000); 
          HDMI_WUINT32(0x0Ac,0x00000000);           
        }else  if(audio_info.channel_num == 2)
        {
          HDMI_WUINT32(0x044,0x00000000);             	//audio fifo rst and select ddma, 2 ch 16bit pcm 
          if(audio_info.data_raw == 0)
          {
                HDMI_WUINT32(0x048,0x00000001);				//ddma,pcm layout0 2ch
          }
          else
          {
                HDMI_WUINT32(0x048,0x01000001);				//ddma,raw layout0 2ch
          }
          HDMI_WUINT32(0x04c,0x76543210);
		  
          HDMI_WUINT32(0x0A0,0x710a0184);             	//audio infoframe head 
          HDMI_WUINT32(0x0A4,0x00000000);             	//CA = 0X1F 
          HDMI_WUINT32(0x0A8,0x00000000); 
          HDMI_WUINT32(0x0Ac,0x00000000);           
    }else if(audio_info.channel_num == 8)
    {
          HDMI_WUINT32(0x044,0x00000000);             	//audio fifo rst and select ddma, 2 ch 16bit pcm 
          HDMI_WUINT32(0x048,0x0000000f);				//ddma,pcm layout1 8ch
          HDMI_WUINT32(0x04c,0x76543210);
		  
          HDMI_WUINT32(0x0A0,0x520a0184);             	//audio infoframe head 
          HDMI_WUINT32(0x0A4,0x1F000000);             	//CA = 0X1F 
          HDMI_WUINT32(0x0A8,0x00000000); 
          HDMI_WUINT32(0x0Ac,0x00000000); 
    }else
    {
    		__wrn("unkonwn num_ch:%d\n", audio_info.channel_num);
    }     

    
    HDMI_WUINT32(0x050,audio_info.CTS			);                   	//CTS and N 
    HDMI_WUINT32(0x054,audio_info.ACR_N			);
    HDMI_WUINT32(0x058,audio_info.CH_STATUS0 	);
    HDMI_WUINT32(0x05c,audio_info.CH_STATUS1 	);

    HDMI_WUINT32(0x040,0x80000000);
    HDMI_WUINT32(0x004,0x80000000);

//for audio test
#if 0
    //dedicated dma setting  aw1623 env  
    sys_put_wvalue(0xf1c023a4,0x40c00000);	//ddma ch5 seting from addr =0x40c00000
    sys_put_wvalue(0xf1c023a8,0x00000000);	//des =0
    sys_put_wvalue(0xf1c023ac,0x01f00000);	//byte to trans
    sys_put_wvalue(0xf1c023b8,(31<<24) +(7<<16) + (31<<8) +(7<<0));	//data block and wait cycle
    sys_put_wvalue(0xf1c023a0,0xa4b80481); 	//from src0 to des1,continous mode
#endif

    return 0;
}
예제 #24
0
static __s32 pwm_write_reg(__u32 offset, __u32 value)
{
    sys_put_wvalue(gdisp.init_para.base_pwm+offset, value);

    return 0;
}
예제 #25
0
static void
Lcd_Panel_Parameter_Check(__u32 sel)
{
	__panel_para_t *info;
	__u32 cycle_num = 1;
	__u32 Lcd_Panel_Err_Flag = 0;
	__u32 Lcd_Panel_Wrn_Flag = 0;
	__u32 Disp_Driver_Bug_Flag = 0;

	__u32 lcd_fclk_frq;
	__u32 lcd_clk_div;

	info = &(gpanel_info[sel]);

	if (info->lcd_if == 0 && info->lcd_hv_if == 1 &&
	    info->lcd_hv_smode == 0)
		cycle_num = 3;
	else if (info->lcd_if == 0 && info->lcd_hv_if == 1 &&
		 info->lcd_hv_smode == 1)
		cycle_num = 2;
	else if (info->lcd_if == 1 && info->lcd_cpu_if == 1)
		cycle_num = 3;
	else if (info->lcd_if == 1 && info->lcd_cpu_if == 2)
		cycle_num = 2;
	else if (info->lcd_if == 1 && info->lcd_cpu_if == 3)
		cycle_num = 2;
	else if (info->lcd_if == 1 && info->lcd_cpu_if == 5)
		cycle_num = 2;
	else if (info->lcd_if == 1 && info->lcd_cpu_if == 6)
		cycle_num = 3;
	else if (info->lcd_if == 1 && info->lcd_cpu_if == 7)
		cycle_num = 2;
	else
		cycle_num = 1;

	if (info->lcd_hbp > info->lcd_hv_hspw)
		;
	else
		Lcd_Panel_Err_Flag |= BIT0;

	if (info->lcd_vbp > info->lcd_hv_vspw)
		;
	else
		Lcd_Panel_Err_Flag |= BIT1;

	if (info->lcd_ht >= (info->lcd_hbp + info->lcd_x * cycle_num + 4))
		;
	else
		Lcd_Panel_Err_Flag |= BIT2;

	if ((info->lcd_vt / 2) >= (info->lcd_vbp + info->lcd_y + 2))
		;
	else
		Lcd_Panel_Err_Flag |= BIT3;

	lcd_clk_div = TCON0_get_dclk_div(sel);
	if (lcd_clk_div >= 6) {
		;
	} else if ((lcd_clk_div == 5) || (lcd_clk_div == 4) ||
		   (lcd_clk_div == 2)) {
		if ((info->lcd_io_cfg0 != 0x00000000) &&
		    (info->lcd_io_cfg0 != 0x04000000))
			Lcd_Panel_Err_Flag |= BIT10;
	} else
		Disp_Driver_Bug_Flag |= 1;

	if ((info->lcd_if == 1 && info->lcd_cpu_if == 0) ||
	    (info->lcd_if == 3 && info->lcd_lvds_bitwidth == 1)) {
		if (info->lcd_frm != 1)
			Lcd_Panel_Wrn_Flag |= BIT0;
	} else if (info->lcd_if == 1 && info->lcd_cpu_if == 4) {
		if (info->lcd_frm != 2)
			Lcd_Panel_Wrn_Flag |= BIT1;
	}

	lcd_fclk_frq = (info->lcd_dclk_freq * 1000 * 1000) /
		((info->lcd_vt / 2) * info->lcd_ht);
	if (lcd_fclk_frq < 50 || lcd_fclk_frq > 70)
		Lcd_Panel_Wrn_Flag |= BIT2;

	if (Lcd_Panel_Err_Flag != 0 || Lcd_Panel_Wrn_Flag != 0) {
		if (Lcd_Panel_Err_Flag != 0) {
			__u32 i;

			for (i = 0; i < 200; i++)
				DE_WRN("*** Lcd in danger...\n");
		}

		DE_WRN("*******************************************************"
		       "**********\n");
		DE_WRN("***\n");
		DE_WRN("*** LCD Panel Parameter Check\n");
		DE_WRN("***\n");
		DE_WRN("***             by dulianping\n");
		DE_WRN("***\n");
		DE_WRN("*******************************************************"
		       "**********\n");

		DE_WRN("***\n");
		DE_WRN("*** Interface:");
		if (info->lcd_if == 0 && info->lcd_hv_if == 0) {
			DE_WRN("*** Parallel HV Panel\n");
		} else if (info->lcd_if == 0 && info->lcd_hv_if == 1) {
			DE_WRN("*** Serial HV Panel\n");
		} else if (info->lcd_if == 0 && info->lcd_hv_if == 2) {
			DE_WRN("*** Serial YUV Panel\n");
		} else if (info->lcd_if == 3 && info->lcd_lvds_bitwidth == 0) {
			DE_WRN("*** 24Bit LVDS Panel\n");
		} else if (info->lcd_if == 3 && info->lcd_lvds_bitwidth == 1) {
			DE_WRN("*** 18Bit LVDS Panel\n");
		} else if (info->lcd_if == 1 && info->lcd_cpu_if == 0) {
			DE_WRN("*** 18Bit CPU Panel\n");
		} else if (info->lcd_if == 1 && info->lcd_cpu_if == 4) {
			DE_WRN("*** 16Bit CPU Panel\n");
		} else {
			DE_WRN("\n");
			DE_WRN("*** lcd_if:     %d\n", info->lcd_if);
			DE_WRN("*** lcd_hv_if:  %d\n", info->lcd_hv_if);
			DE_WRN("*** lcd_cpu_if: %d\n", info->lcd_cpu_if);
		}

		if (info->lcd_frm == 0)
			DE_WRN("*** Lcd Frm Disable\n");
		else if (info->lcd_frm == 1)
			DE_WRN("*** Lcd Frm to RGB666\n");
		else if (info->lcd_frm == 2)
			DE_WRN("*** Lcd Frm to RGB565\n");

		DE_WRN("***\n");
		DE_WRN("*** Timing:\n");
		DE_WRN("*** lcd_x:      %d\n", info->lcd_x);
		DE_WRN("*** lcd_y:      %d\n", info->lcd_y);
		DE_WRN("*** lcd_ht:     %d\n", info->lcd_ht);
		DE_WRN("*** lcd_hbp:    %d\n", info->lcd_hbp);
		DE_WRN("*** lcd_vt:     %d\n", info->lcd_vt);
		DE_WRN("*** lcd_vbp:    %d\n", info->lcd_vbp);
		DE_WRN("*** lcd_hspw:   %d\n", info->lcd_hv_hspw);
		DE_WRN("*** lcd_vspw:   %d\n", info->lcd_hv_vspw);
		DE_WRN("*** lcd_frame_frq:  %dHz\n", lcd_fclk_frq);

		/* Print Error */
		DE_WRN("***\n");
		if (Lcd_Panel_Err_Flag & BIT0)
			DE_WRN("*** Err01: Violate \"lcd_hbp > lcd_hspw\"\n");

		if (Lcd_Panel_Err_Flag & BIT1)
			DE_WRN("*** Err02: Violate \"lcd_vbp > lcd_vspw\"\n");

		if (Lcd_Panel_Err_Flag & BIT2)
			DE_WRN("*** Err03: Violate \"lcd_ht >= "
			       "(lcd_hbp+lcd_x*%d+4)\"\n", cycle_num);

		if (Lcd_Panel_Err_Flag & BIT3)
			DE_WRN("*** Err04: Violate \"(lcd_vt/2) >= "
			       "(lcd_vbp+lcd_y+2)\"\n");

		if (Lcd_Panel_Err_Flag & BIT10)
			DE_WRN("*** Err10: Violate \"lcd_io_cfg0\", "
			       "use \"0x00000000\" or \"0x04000000\"");

		if (Lcd_Panel_Wrn_Flag & BIT0)
			DE_WRN("*** WRN01: Recommend \"lcd_frm = 1\"\n");

		if (Lcd_Panel_Wrn_Flag & BIT1)
			DE_WRN("*** WRN02: Recommend \"lcd_frm = 2\"\n");

		if (Lcd_Panel_Wrn_Flag & BIT2)
			DE_WRN("*** WRN03: Recommend \"lcd_dclk_frq = %d\"\n",
			       ((info->lcd_vt / 2) * info->lcd_ht) * 60 /
			       (1000 * 1000));
		DE_WRN("***\n");

		if (Lcd_Panel_Err_Flag != 0) {
			__u32 image_base_addr;
			__u32 reg_value = 0;

			image_base_addr = DE_Get_Reg_Base(sel);

			/* set background color */
			sys_put_wvalue(image_base_addr + 0x804, 0xffff00ff);

			reg_value = sys_get_wvalue(image_base_addr + 0x800);
			/* close all layer */
			sys_put_wvalue(image_base_addr + 0x800,
				       reg_value & 0xfffff0ff);

			LCD_delay_ms(2000);
			/* set background color */
			sys_put_wvalue(image_base_addr + 0x804, 0x00000000);
			/* open layer */
			sys_put_wvalue(image_base_addr + 0x800, reg_value);

			DE_WRN("*** Try new parameters, you can make it "
			       "pass!\n");
		}
		DE_WRN("*** LCD Panel Parameter Check End\n");
		DE_WRN("*******************************************************"
		       "**********\n");
	}
}