📄 lcd_if.c
字号:
#endif/*(defined(MT6228)||defined(MT6229)||defined(MT6230))*/
#endif/*(defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))*/
#endif
/*End of Variable Declaration*/
/*************************************************************************
* FUNCTION
* lcd_ESD_check
*
* DESCRIPTION
* This function is to check ESD
*
* PARAMETERS
* None
*
* RETURNS
* ESD happen or not
*
* GLOBALS AFFECTED
*
*************************************************************************/
#ifdef __LCD_ESD_RECOVERY__
extern kal_uint8 ext_camera_state; //for checking the ext_cam status
kal_bool lcd_ESD_check(void)
{
kal_bool ESD_check_result;
#if (defined(CAMERA_MODULE))
/* if external camera is running do not disturb it*/
if (ext_camera_state!=EXT_CAMERA_POWER_OFF_STATE)
{
kal_prompt_trace(MOD_ENG,"LCD_ESD ext_cam state miss %d",ext_camera_state);
return KAL_TRUE;
}
#endif
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_STANDBY_STATE)
{
lcd_power_up();
ESD_check_result = MainLCD->esd_check();
lcd_power_down();
if (ESD_check_result == KAL_FALSE)
{
main_lcd_operation_state=LCD_IDLE_STATE;//force to do the cool reset
}
return ESD_check_result;
}else
{
/*LCD is not running in the STANDBY_STATE, avoid to disturb the LCD work*/
return KAL_TRUE;
}
#else
if ((main_lcd_operation_state==LCD_STANDBY_STATE)&&
(sub_lcd_operation_state==LCD_STANDBY_STATE))
{
kal_prompt_trace(MOD_ENG,"LCD_ESD LCD state hit, both main/sub in standby state");
lcd_power_up();
ESD_check_result = MainLCD->esd_check();
if (ESD_check_result == KAL_FALSE)
{
lcd_power_down();
main_lcd_operation_state=LCD_IDLE_STATE; //force to do the cool reset
sub_lcd_operation_state=LCD_IDLE_STATE; //force to do the cool reset
return KAL_FALSE;
}
ESD_check_result = SubLCD->esd_check();
if (ESD_check_result == KAL_FALSE)
{
lcd_power_down();
main_lcd_operation_state=LCD_IDLE_STATE;//force to do the cool reset
sub_lcd_operation_state=LCD_IDLE_STATE;//force to do the cool reset
return KAL_FALSE;
}
lcd_power_down();
return KAL_TRUE;
}
else
{
/*LCD is not running in the STANDBY_STATE, avoid to disturb the LCD work*/
kal_prompt_trace(MOD_ENG,"LCD_ESD LCD state miss main %d sub %d",main_lcd_operation_state,sub_lcd_operation_state);
return KAL_TRUE;
}
#endif
}
#endif
/*************************************************************************
* FUNCTION
* get_lcd_status
*
* DESCRIPTION
* This function is to get LCD busy status
*
* PARAMETERS
* None
*
* RETURNS
* ESD happen or not
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_bool get_lcd_status(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
return (LCD_IS_RUNNING);
#endif
}
void lcd_power_up(void)
{
kal_uint32 save_irq_mask;
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON1) &= (~DRVPDN_CON1_LCD); /* Power on LCD */
RestoreIRQMask(save_irq_mask);
#ifndef __MAUI_BASIC__
L1SM_SleepDisable(lcd_sleep_mode_handler);
#endif /* __MAUI_BASIC__ */
}
/*************************************************************************
* FUNCTION
* lcd_power_down
*
* DESCRIPTION
* This function is to power down LCD
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_power_down(void)
{
kal_uint32 save_irq_mask;
volatile kal_uint8 i;
kal_uint16 temp_reg;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
return;
if ((main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&& (main_lcd_operation_state!=LCD_DC_UPDATE_STATE))
{
while (LCD_IS_RUNNING) {};
for (i=0;i<10;i++);
}
#else
if ((main_lcd_operation_state==LCD_SW_UPDATE_STATE)||(sub_lcd_operation_state==LCD_SW_UPDATE_STATE))
return;
if ((main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&(main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
(sub_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&(sub_lcd_operation_state!=LCD_DC_UPDATE_STATE))
{
while (LCD_IS_RUNNING) {};
for (i=0;i<10;i++);
}
#endif
#endif
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
if (wait_lcd_update_flag==KAL_FALSE)
{
STOP_LCD_TRANSFER;
}
#endif
save_irq_mask=SaveAndSetIRQMask();
#ifndef DUAL_LCD
if (((main_lcd_operation_state==LCD_STANDBY_STATE)||
(main_lcd_operation_state==LCD_SLEEP_STATE))&&
(hpi_power_on==KAL_FALSE))
{
/*make sure there is no interrupt before turning off LCD clock*/
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
DRV_Reg(DRVPDN_CON1) |= (DRVPDN_CON1_LCD); /* Power off LCD */
#ifndef __MAUI_BASIC__
L1SM_SleepEnable(lcd_sleep_mode_handler);
#endif /* __MAUI_BASIC__ */
}
#else
if ((((main_lcd_operation_state==LCD_STANDBY_STATE)||
(main_lcd_operation_state==LCD_SLEEP_STATE))&&
((sub_lcd_operation_state==LCD_STANDBY_STATE)||
(sub_lcd_operation_state==LCD_SLEEP_STATE)))&&
(hpi_power_on==KAL_FALSE))
{
/*make sure there is no interrupt before turning off LCD clock*/
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
DRV_Reg(DRVPDN_CON1) |= (DRVPDN_CON1_LCD); /* Power off LCD */
#ifndef __MAUI_BASIC__
L1SM_SleepEnable(lcd_sleep_mode_handler);
#endif /* __MAUI_BASIC__ */
}
#endif
RestoreIRQMask(save_irq_mask);
} /* lcd_power_down() */
/*************************************************************************
* FUNCTION
* hpi_power_ctrl
*
* DESCRIPTION
* This function is to provide HPI control interface for WIFI
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void hpi_power_ctrl(kal_uint8 on)
{
kal_uint32 save_irq_mask;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
if (on==KAL_TRUE)
{
hpi_power_on=KAL_TRUE;
lcd_power_up();
old_lcd_cmd_period_count=lcd_cmd_period_count;
if (hpi_cmd_period_count>old_lcd_cmd_period_count)
{
save_irq_mask=SaveAndSetIRQMask();
SET_LCD_ROI_CTRL_CMD_LATENCY(hpi_cmd_period_count);
RestoreIRQMask(save_irq_mask);
}
}
else if (on==KAL_FALSE)
{
hpi_power_on=KAL_FALSE;
if (hpi_cmd_period_count > old_lcd_cmd_period_count)
{
save_irq_mask=SaveAndSetIRQMask();
SET_LCD_ROI_CTRL_CMD_LATENCY(old_lcd_cmd_period_count);
RestoreIRQMask(save_irq_mask);
}
lcd_power_down();
}
#endif
} /* hpi_power_ctrl() */
/*************************************************************************
* FUNCTION
* set_hpi_low_period_count
*
* DESCRIPTION
* This function is to configure command count for WIFI
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void set_hpi_low_period_count(kal_uint8 low_period)
{
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
hpi_cmd_period_count=low_period;
#endif
} /* set_hpi_low_period_count() */
/*************************************************************************
* FUNCTION
* swap_lcd_layer_window
*
* DESCRIPTION
* This function is to swap width and height
*
* PARAMETERS
* swap_layer: layer
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void swap_lcd_layer_window(kal_uint32 swap_layer)
{
#if (defined(MT6217)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
kal_uint16 width,height;
lcd_power_up();
switch (swap_layer)
{
case LCD_LAYER0_ENABLE:
width=GET_LCD_LAYER0_WINDOW_WIDTH;
height=GET_LCD_LAYER0_WINDOW_HEIGHT;
SET_LCD_LAYER0_WINDOW_SIZE(height,width);
break;
case LCD_LAYER1_ENABLE:
width=GET_LCD_LAYER1_WINDOW_WIDTH;
height=GET_LCD_LAYER1_WINDOW_HEIGHT;
SET_LCD_LAYER1_WINDOW_SIZE(height,width);
break;
case LCD_LAYER2_ENABLE:
width=GET_LCD_LAYER2_WINDOW_WIDTH;
height=GET_LCD_LAYER2_WINDOW_HEIGHT;
SET_LCD_LAYER2_WINDOW_SIZE(height,width);
break;
case LCD_LAYER3_ENABLE:
width=GET_LCD_LAYER3_WINDOW_WIDTH;
height=GET_LCD_LAYER3_WINDOW_HEIGHT;
SET_LCD_LAYER3_WINDOW_SIZE(height,width);
break;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
case LCD_LAYER4_ENABLE:
width=GET_LCD_LAYER4_WINDOW_WIDTH;
height=GET_LCD_LAYER4_WINDOW_HEIGHT;
SET_LCD_LAYER4_WINDOW_SIZE(height,width);
break;
case LCD_LAYER5_ENABLE:
width=GET_LCD_LAYER5_WINDOW_WIDTH;
height=GET_LCD_LAYER5_WINDOW_HEIGHT;
SET_LCD_LAYER5_WINDOW_SIZE(height,width);
break;
#endif
}
#endif
}
/*************************************************************************
* FUNCTION
* set_lcd_layer_roate
*
* DESCRIPTION
* This function is to set layer rotate
*
* PARAMETERS
* rotate_layer: rotate layer
* rotate_value: rotate value
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void set_lcd_layer_roate(kal_uint32 rotate_layer,kal_uint8 rotate_value)
{
#if (defined(MT6217)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
lcd_power_up();
if (rotate_value<=LCD_LAYER_MIRROR_ROTATE_270)
{
current_lcd_hw_update_layer=rotate_layer;
switch (rotate_layer)
{
case LCD_LAYER0_ENABLE:
lcd_rotate_value=GET_LCD_LAYER0_ROTATE;
SET_LCD_LAYER0_ROTATE(rotate_value);
break;
case LCD_LAYER1_ENABLE:
lcd_rotate_value=GET_LCD_LAYER1_ROTATE;
SET_LCD_LAYER1_ROTATE(rotate_value);
break;
case LCD_LAYER2_ENABLE:
lcd_rotate_value=GET_LCD_LAYER2_ROTATE;
SET_LCD_LAYER2_ROTATE(rotate_value);
break;
case LCD_LAYER3_ENABLE:
lcd_rotate_value=GET_LCD_LAYER3_ROTATE;
SET_LCD_LAYER3_ROTATE(rotate_value);
break;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
case LCD_LAYER4_ENABLE:
lcd_rotate_value=GET_LCD_LAYER4_ROTATE;
SET_LCD_LAYER4_ROTATE(rotate_value);
break;
case LCD_LAYER5_ENABLE:
lcd_rotate_value=GET_LCD_LAYER5_ROTATE;
SET_LCD_LAYER5_ROTATE(rotate_value);
break;
#endif
}
}
#endif
} /* set_lcd_layer_roate() */
/*************************************************************************
* FUNCTION
* resume_lcd_layer_rotate
*
* DESCRIPTION
* This function is to resume layer from previous rotate
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void resume_lcd_layer_rotate(void)
{
#if (defined(MT6217)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
lcd_power_up();
switch (current_lcd_hw_update_layer)
{
case LCD_LAYER0_ENABLE:
SET_LCD_LAYER0_ROTATE(lcd_rotate_value);
break;
case LCD_LAYER1_ENABLE:
SET_LCD_LAYER1_ROTATE(lcd_rotate_value);
break;
case LCD_LAYER2_ENABLE:
SET_LCD_LAYER2_ROTATE(lcd_rotate_value);
break;
case LCD_LAYER3_ENABLE:
SET_LCD_LAYER3_ROTATE(lcd_rotate_value);
break;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
case LCD_LAYER4_ENABLE:
SET_LCD_LAYER4_ROTATE(lcd_rotate_value);
break;
case LCD_LAYER5_ENABLE:
SET_LCD_LAYER5_ROTATE(lcd_rotate_value);
break;
#endif
}
current_lcd_hw_update_layer=0;
lcd_rotate_value=0;
#endif
} /* resume_lcd_layer_rotate() */
/*************************************************************************
* FUNCTION
* config_lcd_layer_window_queue
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -