Skip to content

Commit

Permalink
disp_sun4i:
Browse files Browse the repository at this point in the history
 1, lcd saturation set to 57 as default;
 2, modify csc;
 3, add lcd config for ainol_aurota/mid9742 in menuconfig;
 4, modify hdmi avi packet for hd;
 5, support deinterlace;
  • Loading branch information
danling authored and amery committed Jul 4, 2012
1 parent 67aaa26 commit 6c01b6c
Show file tree
Hide file tree
Showing 18 changed files with 1,392 additions and 280 deletions.
18 changes: 18 additions & 0 deletions drivers/video/Kconfig
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,24 @@ config LYCHEE_LCD_SUN4I
---help---
default m

choice
prompt "Choice LCD"
depends on LYCHEE_LCD_SUN4I

config LYCHEE_LCD_DEFAULT
bool "lcd_default"
select LCD_DEFAULT

config LYCHEE_LCD_MID9742
bool "lcd_mid9742"
select LCD_MID9742

config LYCHEE_LCD_AINOL_AUROTA
bool "ainol_aurota"
select LCD_AINOL_AUROTA

endchoice

config LYCHEE_HDMI_SUN4I
tristate "HDMI Driver Support(sun4i)"
depends on ARCH_SUN4I
Expand Down
49 changes: 38 additions & 11 deletions drivers/video/sun4i/disp/de_bsp/de/disp_de.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ __s32 Image_init(__u32 sel)
DE_BE_Reg_Init(sel);

BSP_disp_sprite_init(sel);
BSP_disp_set_output_csc(sel, DISP_OUTPUT_TYPE_LCD);

Image_open(sel);

Expand Down Expand Up @@ -76,7 +75,8 @@ __s32 Image_close(__u32 sel)
__s32 BSP_disp_set_bright(__u32 sel, __u32 bright)
{
gdisp.screen[sel].bright = bright;
DE_BE_Set_Enhance(sel, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);
DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en,
gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);

return DIS_SUCCESS;
}
Expand All @@ -89,7 +89,8 @@ __s32 BSP_disp_get_bright(__u32 sel)
__s32 BSP_disp_set_contrast(__u32 sel, __u32 contrast)
{
gdisp.screen[sel].contrast = contrast;
DE_BE_Set_Enhance(sel, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);
DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en,
gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);

return DIS_SUCCESS;
}
Expand All @@ -102,7 +103,8 @@ __s32 BSP_disp_get_contrast(__u32 sel)
__s32 BSP_disp_set_saturation(__u32 sel, __u32 saturation)
{
gdisp.screen[sel].saturation = saturation;
DE_BE_Set_Enhance(sel, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);
DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en,
gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);

return DIS_SUCCESS;
}
Expand All @@ -115,7 +117,8 @@ __s32 BSP_disp_get_saturation(__u32 sel)
__s32 BSP_disp_set_hue(__u32 sel, __u32 hue)
{
gdisp.screen[sel].hue = hue;
DE_BE_Set_Enhance(sel, gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);
DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en,
gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);

return DIS_SUCCESS;
}
Expand All @@ -127,9 +130,11 @@ __s32 BSP_disp_get_hue(__u32 sel)

__s32 BSP_disp_enhance_enable(__u32 sel, __bool enable)
{
DE_BE_enhance_enable(sel, enable);
gdisp.screen[sel].enhance_en = enable;

DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, gdisp.screen[sel].enhance_en,
gdisp.screen[sel].bright, gdisp.screen[sel].contrast, gdisp.screen[sel].saturation, gdisp.screen[sel].hue);

return DIS_SUCCESS;
}

Expand All @@ -152,7 +157,14 @@ __s32 BSP_disp_set_screen_size(__u32 sel, __disp_rectsz_t * size)
__s32 BSP_disp_set_output_csc(__u32 sel, __disp_output_type_t type)
{
__disp_color_range_t out_color_range = DISP_COLOR_RANGE_0_255;
__bool bout_yuv = FALSE;
__u32 out_csc = 0;
__u32 enhance_en, bright, contrast, saturation, hue;

enhance_en = gdisp.screen[sel].enhance_en;
bright = gdisp.screen[sel].bright;
contrast = gdisp.screen[sel].contrast;
saturation = gdisp.screen[sel].saturation;
hue = gdisp.screen[sel].hue;

if(type == DISP_OUTPUT_TYPE_HDMI)
{
Expand All @@ -174,12 +186,26 @@ __s32 BSP_disp_set_output_csc(__u32 sel, __disp_output_type_t type)
}
else if(type == DISP_OUTPUT_TYPE_TV)
{
bout_yuv = TRUE;
out_csc = 1;
}

else if(type == DISP_OUTPUT_TYPE_LCD)
{
if(enhance_en == 0)
{
enhance_en = 1;

bright = 50;
contrast = 50;
saturation = 57;
hue = 50;
}
}

DE_BE_Output_Cfg_Csc_Coeff(sel, bout_yuv, out_color_range);

gdisp.screen[sel].bout_yuv = bout_yuv;
gdisp.screen[sel].out_color_range = out_color_range;
gdisp.screen[sel].out_csc = out_csc;

DE_BE_Set_Enhance_ex(sel, gdisp.screen[sel].out_csc, gdisp.screen[sel].out_color_range, enhance_en, bright, contrast, saturation, hue);

return DIS_SUCCESS;
}
Expand Down Expand Up @@ -243,6 +269,7 @@ __s32 Disp_set_out_interlace(__u32 sel)
DE_BE_Set_Outitl_enable(sel, gdisp.screen[sel].b_out_interlace);

BSP_disp_cfg_finish(sel);

return DIS_SUCCESS;
}

3 changes: 3 additions & 0 deletions drivers/video/sun4i/disp/de_bsp/de/disp_display.h
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ typedef struct

__bool lcd_io_used[28];
user_gpio_set_t lcd_io[28];

__u32 init_bright;
}__disp_lcd_cfg_t;

typedef struct
Expand Down Expand Up @@ -125,6 +127,7 @@ typedef struct

__u32 lcd_bright;
__disp_color_range_t out_color_range;
__u32 out_csc;

__disp_lcd_cfg_t lcd_cfg;
__hdle gpio_hdl[4];
Expand Down
2 changes: 1 addition & 1 deletion drivers/video/sun4i/disp/de_bsp/de/disp_layer.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -992,7 +992,7 @@ __s32 BSP_disp_layer_set_para(__u32 sel, __u32 hid,__disp_layer_info_t *player)
layer_fb.offset_y = player->src_win.y;

bpp = DE_BE_Format_To_Bpp(sel, layer_fb.format);
size = (player->fb.size.width * layer_man->para.src_win.height * bpp + 7)/8;
size = (player->fb.size.width * player->scn_win.height * bpp + 7)/8;
OSAL_CacheRangeFlush((void *)player->fb.addr[0], size,CACHE_CLEAN_FLUSH_D_CACHE_REGION);
DE_BE_Layer_Set_Framebuffer(sel, hid,&layer_fb);
}
Expand Down
28 changes: 24 additions & 4 deletions drivers/video/sun4i/disp/de_bsp/de/disp_lcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ void LCD_get_sys_config(__u32 sel, __disp_lcd_cfg_t *lcd_cfg)
"lcdd23", "lcdclk", "lcdde", "lcdhsync", "lcdvsync"};
user_gpio_set_t *gpio_info;
int value = 1;
char primary_key[20];
char primary_key[20], sub_name[20];
int i = 0;
int ret;

Expand Down Expand Up @@ -671,7 +671,6 @@ void LCD_get_sys_config(__u32 sel, __disp_lcd_cfg_t *lcd_cfg)
//lcd_gpio
for(i=0; i<4; i++)
{
char sub_name[20];
sprintf(sub_name, "lcd_gpio_%d", i);

gpio_info = &(lcd_cfg->lcd_gpio[i]);
Expand Down Expand Up @@ -705,6 +704,27 @@ void LCD_get_sys_config(__u32 sel, __disp_lcd_cfg_t *lcd_cfg)
lcd_cfg->lcd_io_used[i]= 1;
}
}

//init_bright
sprintf(primary_key, "disp_init");
sprintf(sub_name, "lcd%d_bright", sel);

ret = OSAL_Script_FetchParser_Data(primary_key, sub_name, &value, 1);
if(ret < 0)
{
DE_INF("%s.%s not exit\n", primary_key,sub_name);
lcd_cfg->init_bright = 197;
}
else
{
DE_INF("%s.%s = %d\n", primary_key,sub_name, value);
if(value > 256)
{
value = 256;
}
lcd_cfg->init_bright = value;
}

}

void LCD_delay_ms(__u32 ms)
Expand Down Expand Up @@ -1266,11 +1286,11 @@ __s32 Disp_lcdc_init(__u32 sel)
pwm_info.period_ns = 1000000 / gpanel_info[sel].lcd_pwm_freq;
if(gpanel_info[sel].lcd_pwm_pol == 0)
{
pwm_info.duty_ns = (192 * pwm_info.period_ns) / 256;
pwm_info.duty_ns = (gdisp.screen[sel].lcd_cfg.init_bright * pwm_info.period_ns) / 256;
}
else
{
pwm_info.duty_ns = ((256 - 192) * pwm_info.period_ns) / 256;
pwm_info.duty_ns = ((256 - gdisp.screen[sel].lcd_cfg.init_bright) * pwm_info.period_ns) / 256;
}
pwm_set_para(gpanel_info[sel].lcd_pwm_ch, &pwm_info);
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/video/sun4i/disp/de_bsp/de/disp_scaler.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ __s32 Scaler_event_proc(void *parg)
DE_SCAL_ClearINT(sel,fe_intflags);
DE_BE_ClearINT(sel,be_intflags);

DE_INF("scaler %d interrupt, scal_int_status:0x%x!\n", sel, fe_intflags);
//DE_INF("scaler %d interrupt, scal_int_status:0x%x!\n", sel, fe_intflags);

if(be_intflags & DE_IMG_REG_LOAD_FINISH)
{
Expand Down
5 changes: 0 additions & 5 deletions drivers/video/sun4i/disp/de_bsp/de/disp_video.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -208,12 +208,7 @@ static __inline __s32 Hal_Set_Frame(__u32 sel, __u32 tcon_index, __u32 id)
g_video[sel][id].tempdiff_en = FALSE;
}
g_video[sel][id].diagintp_en = TRUE;

g_video[sel][id].fetch_field = FALSE;//todo
g_video[sel][id].fetch_bot = 0;//todo
g_video[sel][id].dit_mode = DIT_MODE_MAF_BOB;//todo
g_video[sel][id].tempdiff_en = FALSE;//todo
g_video[sel][id].diagintp_en = FALSE;//todo
}
else
{
Expand Down
Loading

0 comments on commit 6c01b6c

Please sign in to comment.