📄 lcd_update_if.c
字号:
RestoreIRQMask(save_irq_mask);
SubLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
lcd_hw_trigger_flag=KAL_TRUE;
kal_retrieve_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,
KAL_OR_CONSUME,&event_group,KAL_SUSPEND);
if (sub_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)
sub_lcd_operation_state=LCD_HW_UPDATE_STATE;
else if (sub_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)
sub_lcd_operation_state=LCD_DC_UPDATE_STATE;
ENABLE_LCD_TRANSFER_COMPLETE_INT;
#if ((defined(MT6228)||defined(MT6229)||defined(MT6230))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
if (tv_output_owner!=TV_OUT_OWNER_LCD)
{
DISABLE_LCD_CMD_COMPLETE_INT;
}
else
{
ENABLE_LCD_CMD_COMPLETE_INT;
}
#else
DISABLE_LCD_CMD_COMPLETE_INT;
#endif
}
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
else if ((sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)||
(sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE))
{
if (lcd_para->fb_update_mode!=LCD_SW_TRIGGER_MODE)
ASSERT(0); /* make sure that HW mode will not occur in LCD_HW_UPDATE_STATE
and LCD_DC_UPDATE_STATE */
if ((lcd_para->module_id==LCD_UPDATE_MODULE_MMI)&&((lcd_para->tv_output==KAL_TRUE)||
(lcd_para->memory_output==KAL_TRUE)))
{
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= (lcd_para->update_layer | lcd_hw_trigger_layer);
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_CMD_ENABLE_BIT;/*not output to LCD*/
save_irq_mask=SaveAndSetIRQMask();
DRV_WriteReg32(LCD_ROI_WMEM_CTRL_REG,lcd_mem_out_ctrl_shadow);
DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_mem_out_address_shadow);
DRV_WriteReg32(LCD_ROI_CTRL_REG,lcd_roi_ctrl_shadow);
DRV_WriteReg32(LCD_ROI_OFFSET_REG,lcd_roi_offset_shadow);
DRV_WriteReg32(LCD_ROI_SIZE_REG,lcd_roi_size_shadow);
RestoreIRQMask(save_irq_mask);
START_LCD_TRANSFER;
}
}
#endif
break;
#endif /* DUAL_LCD */
default:
ASSERT(0);
break;
}
lcd_power_down();
#elif (defined(MT6205B)||defined(MT6208))
lcd_power_up();
if (lcd_para->lcd_id==MAIN_LCD)
{
MainLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
}
#ifdef DUAL_LCD
else if (lcd_para->lcd_id==SUB_LCD)
{
SubLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
}
#endif /* DUAL_LCD */
lcd_power_down();
#endif /* MT6217, MT6218B, MT6219, MT6205B, MT6226, MT6227, MT6228, MT6229, MT6230 */
} /* lcd_fb_update() */
/*************************************************************************
* FUNCTION
* lcd_fb_update_to_memory
*
* DESCRIPTION
* This function trigger LCD interface to output the MMI screen to one buffer
*
* PARAMETERS
* *lcd_para : the parameters for lcd frame buffer update to memory
*
* RETURNS
* none
*
* GLOBALS AFFECTED
*
*************************************************************************/
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
void lcd_fb_update_to_memory(lcd_frame_update_to_mem_struct *lcd_para)
{
kal_uint16 temp_reg;
volatile kal_uint16 i;
kal_uint8 temp_lcd_state;
#ifdef __MTK_TARGET__
if(INT_QueryExceptionStatus())
return;
#endif
if (wait_lcd_update_flag==KAL_TRUE)
{
while (LCD_IS_RUNNING) {};
IRQMask(IRQ_LCD_CODE);
if (wait_lcd_update_flag==KAL_TRUE)
{
wait_lcd_update_flag=KAL_FALSE;
if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
main_lcd_operation_state=LCD_STANDBY_STATE;
#ifdef DUAL_LCD
if (sub_lcd_operation_state==LCD_SW_UPDATE_STATE)
sub_lcd_operation_state=LCD_STANDBY_STATE;
#endif
config_lcd_layer_window_queue();
if (lcd_block_cb!=NULL)
lcd_block_cb();
}
IRQUnmask(IRQ_LCD_CODE);
}; /* wait until LCD complete */
temp_lcd_state=main_lcd_operation_state;
#if (defined(CAMERA_MODULE))
if ((main_lcd_operation_state!=LCD_STANDBY_STATE) &&
(main_lcd_operation_state!=LCD_SLEEP_STATE)&&
(main_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE)&&
(main_lcd_operation_state!=LCD_CAMERA_CMD_QUEUE_STATE)&&
(main_lcd_operation_state!=LCD_CAMERA_ACTIVE_STATE)&&
(main_lcd_operation_state!=LCD_CAMERA_ACTIVE_UPDATE_STATE))
ASSERT(0);
#ifdef DUAL_LCD
if ((sub_lcd_operation_state!=LCD_STANDBY_STATE) &&
(sub_lcd_operation_state!=LCD_SLEEP_STATE)&&
(sub_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE)&&
(sub_lcd_operation_state!=LCD_CAMERA_CMD_QUEUE_STATE)&&
(sub_lcd_operation_state!=LCD_CAMERA_ACTIVE_STATE)&&
(sub_lcd_operation_state!=LCD_CAMERA_ACTIVE_UPDATE_STATE))
ASSERT(0);
#endif
#else
if ((main_lcd_operation_state!=LCD_STANDBY_STATE) &&
(main_lcd_operation_state!=LCD_SLEEP_STATE))
ASSERT(0);
#ifdef DUAL_LCD
if ((sub_lcd_operation_state!=LCD_STANDBY_STATE) &&
(sub_lcd_operation_state!=LCD_SLEEP_STATE))
ASSERT(0);
#endif
#endif
if (lcd_para->block_mode>LCD_WM_BLOCK_MODE)
ASSERT(0);
if (lcd_para->block_mode==LCD_WM_CONT_MODE)
{
if ((lcd_para->dest_buffer_size)<((lcd_para->roi_width * lcd_para->roi_height)<<1))
ASSERT(0);
}
else
{
if ((lcd_para->dest_buffer_size)<((lcd_para->dest_block_width * lcd_para->roi_height)<<1))
ASSERT(0);
}
if ((lcd_para->update_layer & (~LCD_LAYER_MASK))!=0)
ASSERT(0);
if ((lcd_para->hw_update_layer & (~LCD_LAYER_MASK))!=0)
ASSERT(0);
lcd_power_up();
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219))
SET_LCD_ROI_CTRL_OUTPUT_FORMAT(LCM_16BIT_16_BPP_RGB565_1);
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
LCD_WRITE_MEM_ONLY;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
REG_LCD_ROI_BACKGROUND_COLOR=lcd_para->roi_background_color;
if (lcd_para->memory_data_format==LCD_WMEM_RGB565)
{
LCD_WRITE_MEM_RGB565;
}
else if (lcd_para->memory_data_format==LCD_WMEM_RGB888)
{
LCD_WRITE_MEM_RGB888;
}
#else
REG_LCD_ROI_BACKGROUND_COLOR=(kal_uint16) lcd_para->roi_background_color;
#endif
#endif
SET_LCD_MAIN_WINDOW_SIZE(lcd_para->dest_block_width,lcd_para->roi_height+lcd_para->roi_offset_y);
SET_LCD_ROI_WINDOW_OFFSET(lcd_para->roi_offset_x,lcd_para->roi_offset_y);
SET_LCD_ROI_WINDOW_SIZE(lcd_para->roi_width,lcd_para->roi_height);
SET_LCD_ENABLE_LAYER(lcd_para->update_layer);
ENABLE_LCD_ROI_CTRL_W2MEM;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
FIX_LCD_ROI_CTRL_W2MEM_BUG;
LCD_WRITE_MEM_ONLY;
DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_para->dest_buffer_address);
#else
DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,lcd_para->dest_buffer_address);
#endif
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
if (lcd_para->block_mode==LCD_WM_BLOCK_MODE)
{
SET_LCD_ROI_CTRL_W2MEM_DISCONT;
}
else if (lcd_para->block_mode==LCD_WM_CONT_MODE)
{
SET_LCD_ROI_CTRL_W2MEM_CONT;
}
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
kal_set_eg_events(lcd_event_id,0,KAL_AND);
ENABLE_LCD_CMD_COMPLETE_INT;
ENABLE_LCD_TRANSFER_COMPLETE_INT;
#endif
switch (lcd_para->fb_update_mode)
{
case LCD_SW_TRIGGER_MODE:
#if (defined(CAMERA_MODULE))
START_LCD_TRANSFER;
for (i=0;i<10;i++) {};
while (LCD_IS_RUNNING){};
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
#else
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DISABLE_LCD_HW_TRIGGER_UPDATE;
#endif
START_LCD_TRANSFER;
main_lcd_operation_state=LCD_MEM_UPDATE_STATE;
for (i=0;i<10;i++);
while (LCD_IS_RUNNING){};
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
#endif
DISABLE_LCD_ROI_CTRL_W2MEM;
main_lcd_operation_state=temp_lcd_state;
break;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
case LCD_HW_TRIGGER_MODE:
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->hw_trigger_src==LCD_HW_TRIGGER_IBW2)
{
SET_LCD_IBW2_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
else
{
SET_LCD_IBW1_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
#endif
SET_LCD_HW_TRIGGER_LAYER(lcd_para->hw_update_layer);
ENABLE_LCD_HW_TRIGGER_UPDATE;
main_lcd_operation_state=LCD_MEM_UPDATE_STATE;
START_LCD_TRANSFER; /* latch the command */
for (i=0;i<10;i++);
break;
case LCD_DIRECT_COUPLE_MODE:
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->hw_trigger_src==LCD_HW_TRIGGER_IBW2)
{
SET_LCD_IBW2_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
else
{
SET_LCD_IBW1_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
set_lcd_dc_layer_format(lcd_para->hw_update_layer,KAL_TRUE);
#endif
SET_LCD_DIRECT_COUPLE_LAYER((lcd_para->hw_update_layer));
ENABLE_LCD_HW_TRIGGER_UPDATE;
main_lcd_operation_state=LCD_MEM_UPDATE_STATE;
START_LCD_TRANSFER; /* latch the command */
for (i=0;i<10;i++);
break;
#endif
}
lcd_power_down();
} /* lcd_fb_update_to_memory() */
#endif /* MT6217, MT6218B, MT6219 */
/*************************************************************************
* FUNCTION
* lcd_stop_hw_update
*
* DESCRIPTION
* This function stops the hardware trigger LCD update operation
*
* PARAMETERS
* lcd_id : selection MAIN_LCD or SUB_LCD
*
* RETURNS
* none
*
* GLOBALS AFFECTED
*
*************************************************************************/
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
void lcd_stop_hw_update(kal_uint8 lcd_id)
{
kal_uint16 temp_reg;
kal_uint32 hw_layer;
volatile kal_uint16 i;
kal_uint32 save_irq_mask;
#if ((defined(MT6228)||defined(MT6229)||defined(MT6230))&&((!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__))))
if (((main_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)||(main_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)||
(main_lcd_operation_state==LCD_DC_SLEEP_CMD_QUEUE_STATE)||(main_lcd_operation_state==LCD_HW_SLEEP_CMD_QUEUE_STATE))&&
(lcd_hard_trigger_flag==1))
{
while (tv_full_screen>0)
{
if ((current_image_data_path_owner==SCENARIO_MPEG_ENCODE_ID)||
(current_image_data_path_owner==SCENARIO_MPEG_DECODE_ID))
{
STOP_IBW2;
STOP_IMGDMA_VIDEO_DECODE;
START_IBW2;
START_IMGDMA_VIDEO_DECODE;
for (i=0;i<10000;i++);
while (LCD_IS_RUNNING) {};
save_irq_mask=SaveAndSetIRQMask();
if (tv_full_screen>0)
tv_full_screen--;
RestoreIRQMask(save_irq_mask);
}
else
break;
}
if (main_lcd_operation_state==LCD_HW_SLEEP_CMD_QUEUE_STATE)
main_lcd_operation_state=LCD_HW_UPDATE_SLEEP_STATE;
else if (main_lcd_operation_state==LCD_DC_SLEEP_CMD_QUEUE_STATE)
main_lcd_operation_state=LCD_DC_UPDATE_SLEEP_STATE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -