📄 lcd_update_if.c
字号:
lcd_para->update_layer|=lcd_para->hw_update_layer;
break;
}
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= lcd_para->update_layer;
lcd_hard_trigger_flag=0;/*XXXXX remove ?*/
save_irq_mask=SaveAndSetIRQMask();
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DRV_WriteReg32(LCD_ROI_WMEM_CTRL_REG,lcd_mem_out_ctrl_shadow);
DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_mem_out_address_shadow);
#endif
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);
if (main_lcd_operation_state!=LCD_SLEEP_STATE)
{
MainLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
}
else
{
START_LCD_TRANSFER;
}
lcd_hard_trigger_flag=1;/*XXXXX remove ?*/
for (j=0;j<10;j++);
if ((lcd_para->fb_update_mode==LCD_HW_TRIGGER_MODE)||
(lcd_para->fb_update_mode==LCD_DIRECT_COUPLE_MODE))
{
lcd_hw_trigger_layer=lcd_para->hw_update_layer;
lcd_hw_trigger_roi_offset=DRV_Reg32(LCD_ROI_OFFSET_REG);
lcd_hw_trigger_roi_size=DRV_Reg32(LCD_ROI_SIZE_REG);
lcd_hw_trigger_roi_ctrl=DRV_Reg32(LCD_ROI_CTRL_REG);
lcd_hw_trigger_flag=KAL_FALSE;
for (i=0;i<LCD_CMD_QUEUE_LENGTH;i++)
lcd_hw_trigger_para[i]=DRV_Reg32(LCD_CMD_PARAMETER_ADDR+(i<<2));
main_lcd_fb_update_para.lcm_start_x=lcd_para->lcm_start_x;
main_lcd_fb_update_para.lcm_start_y=lcd_para->lcm_start_y;
main_lcd_fb_update_para.lcm_end_x=lcd_para->lcm_end_x;
main_lcd_fb_update_para.lcm_end_y=lcd_para->lcm_end_y;
main_lcd_fb_update_para.roi_offset_x=lcd_para->roi_offset_x;
main_lcd_fb_update_para.roi_offset_y=lcd_para->roi_offset_y;
}
current_update_lcd=lcd_para->lcd_id;
if ((main_lcd_operation_state==LCD_SW_UPDATE_STATE)||(main_lcd_operation_state==LCD_SLEEP_STATE))
{
if (lcd_para->block_mode_flag==KAL_TRUE)
{
while (LCD_IS_RUNNING) {};
for (j=0;j<10;j++);
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
for (j=0;j<10;j++);
if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
main_lcd_operation_state=LCD_STANDBY_STATE;
DISABLE_LCD_ROI_CTRL_W2MEM;
}
}
}
else if ((main_lcd_operation_state==LCD_HW_UPDATE_STATE)||
(main_lcd_operation_state==LCD_DC_UPDATE_STATE))
{ /* in LCD_HW_UPDATE_STATE or LCD_DC_UPDATE_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 */
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= (lcd_para->update_layer | lcd_hw_trigger_layer);
lcd_cmd_latch_complete=KAL_FALSE;
ENABLE_LCD_CMD_COMPLETE_INT;
current_update_lcd=lcd_para->lcd_id;
lcd_hw_trigger_flag=KAL_TRUE;
#if ((defined(MT6228)||defined(MT6229))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
IRQMask(IRQ_LCD_CODE);
if (tv_output_owner == TV_OUT_OWNER_LCD)
{
if ((roi_mem_out_width>(lcd_para->tv_output_width-lcd_para->tv_output_offset_x))||
(roi_mem_out_height>(lcd_para->tv_output_height-lcd_para->tv_output_offset_y)))
ASSERT(0);
tv_output_buffer_offset_address1=tv_output_buffer_base_address1 +
(lcd_para->tv_output_offset_y*lcd_para->tv_output_width +
lcd_para->tv_output_offset_x) * 2;
tv_output_buffer_offset_address2=tv_output_buffer_base_address2 +
(lcd_para->tv_output_offset_y*lcd_para->tv_output_width +
lcd_para->tv_output_offset_x) * 2;
if (tv_out_current_fb==0)
{
lcd_mem_out_address_shadow = tv_output_buffer_offset_address1;
*((volatile unsigned int *) tv_output_buffer_offset_address1)=0x55555555;
}
else
{
lcd_mem_out_address_shadow = tv_output_buffer_offset_address2;
*((volatile unsigned int *) tv_output_buffer_offset_address2)=0x55555555;
}
tv_output_buffer_count = 0;
tv_full_screen=2;
}
else
{
tv_output_buffer_count = 2;
tv_full_screen=0;
}
#endif
save_irq_mask=SaveAndSetIRQMask();
if (main_lcd_operation_state==LCD_HW_UPDATE_STATE)
main_lcd_operation_state=LCD_HW_CMD_QUEUE_STATE;
else if (main_lcd_operation_state==LCD_DC_UPDATE_STATE)
main_lcd_operation_state=LCD_DC_CMD_QUEUE_STATE;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DRV_WriteReg32(LCD_ROI_WMEM_CTRL_REG,lcd_mem_out_ctrl_shadow);
DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_mem_out_address_shadow);
#endif
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);
MainLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
IRQUnmask(IRQ_LCD_CODE);
for (j=0;j<20;j++);
kal_retrieve_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,
KAL_OR_CONSUME,&event_group,KAL_SUSPEND);
if (main_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)
main_lcd_operation_state=LCD_HW_UPDATE_STATE;
else if (main_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)
main_lcd_operation_state=LCD_DC_UPDATE_STATE;
ENABLE_LCD_TRANSFER_COMPLETE_INT;
#if ((defined(MT6228)||defined(MT6229))&& (!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))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
else if ((main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)||
(main_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)
ASSERT(0);
if (tv_output_owner == TV_OUT_OWNER_LCD)
{
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= (lcd_para->update_layer | lcd_hw_trigger_layer);
lcd_cmd_latch_complete=KAL_FALSE;
ENABLE_LCD_CMD_COMPLETE_INT;
current_update_lcd=lcd_para->lcd_id;
lcd_hw_trigger_flag=KAL_TRUE;
IRQMask(IRQ_LCD_CODE);
tv_output_buffer_offset_address1=tv_output_buffer_base_address1;
tv_output_buffer_offset_address2=tv_output_buffer_base_address2;
if (tv_out_current_fb==0)
{
lcd_mem_out_address_shadow = tv_output_buffer_offset_address1;
*((volatile unsigned int *) tv_output_buffer_offset_address1)=0x55555555;
}
else
{
lcd_mem_out_address_shadow = tv_output_buffer_offset_address2;
*((volatile unsigned int *) tv_output_buffer_offset_address2)=0x55555555;
}
tv_output_buffer_count = 0;
tv_full_screen=2;
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_CMD_ENABLE_BIT;/*not output to LCD*/
save_irq_mask=SaveAndSetIRQMask();
if (main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)
main_lcd_operation_state=LCD_HW_SLEEP_CMD_QUEUE_STATE;
else if (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)
main_lcd_operation_state=LCD_DC_SLEEP_CMD_QUEUE_STATE;
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;
IRQUnmask(IRQ_LCD_CODE);
while (tv_full_screen!=0) {};
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
break;
#ifdef DUAL_LCD
case SUB_LCD:
if (sub_lcd_operation_state==LCD_STANDBY_STATE)
{
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_DATA_FORMAT_MASK;
lcd_roi_ctrl_shadow |= SUB_LCD_OUTPUT_FORMAT;
DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,SUB_LCD_CMD_ADDR);
DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,SUB_LCD_DATA_ADDR);
switch (lcd_para->fb_update_mode)
{
case LCD_SW_TRIGGER_MODE:
DISABLE_LCD_HW_TRIGGER_UPDATE;
sub_lcd_operation_state=LCD_SW_UPDATE_STATE;
if (lcd_para->block_mode_flag==KAL_FALSE)
{
lcd_block_cb=lcd_para->lcd_block_mode_cb;
IRQMask(IRQ_LCD_CODE);
wait_lcd_update_flag=KAL_TRUE;
IRQUnmask(IRQ_LCD_CODE);
}
else
{
IRQMask(IRQ_LCD_CODE);
wait_lcd_update_flag=KAL_FALSE;
IRQUnmask(IRQ_LCD_CODE);
}
break;
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);
}
if (sub_lcd_operation_state==LCD_SLEEP_STATE)
sub_lcd_operation_state=LCD_HW_UPDATE_SLEEP_STATE;
else if (sub_lcd_operation_state==LCD_STANDBY_STATE)
sub_lcd_operation_state=LCD_HW_UPDATE_STATE;
#else
sub_lcd_operation_state=LCD_HW_UPDATE_STATE;
#endif
SET_LCD_HW_TRIGGER_LAYER(lcd_para->hw_update_layer);
ENABLE_LCD_HW_TRIGGER_UPDATE;
lcd_para->update_layer|=lcd_para->hw_update_layer;
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);
if (sub_lcd_operation_state==LCD_SLEEP_STATE)
sub_lcd_operation_state=LCD_DC_UPDATE_SLEEP_STATE;
else if (sub_lcd_operation_state==LCD_STANDBY_STATE)
sub_lcd_operation_state=LCD_DC_UPDATE_STATE;
#else
sub_lcd_operation_state=LCD_DC_UPDATE_STATE;
#endif
SET_LCD_DIRECT_COUPLE_LAYER((lcd_para->hw_update_layer));
ENABLE_LCD_HW_TRIGGER_UPDATE;
lcd_para->update_layer|=lcd_para->hw_update_layer;
break;
}
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= lcd_para->update_layer;
save_irq_mask=SaveAndSetIRQMask();
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DRV_WriteReg32(LCD_ROI_WMEM_CTRL_REG,lcd_mem_out_ctrl_shadow);
DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_mem_out_address_shadow);
#endif
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);
SubLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
if ((lcd_para->fb_update_mode==LCD_HW_TRIGGER_MODE)||
(lcd_para->fb_update_mode==LCD_DIRECT_COUPLE_MODE))
{
lcd_hw_trigger_layer=lcd_para->hw_update_layer;
lcd_hw_trigger_roi_offset=DRV_Reg32(LCD_ROI_OFFSET_REG);
lcd_hw_trigger_roi_size=DRV_Reg32(LCD_ROI_SIZE_REG);
lcd_hw_trigger_roi_ctrl=DRV_Reg32(LCD_ROI_CTRL_REG);
lcd_hw_trigger_flag=KAL_FALSE;
for (i=0;i<LCD_CMD_QUEUE_LENGTH;i++)
lcd_hw_trigger_para[i]=DRV_Reg32(LCD_CMD_PARAMETER_ADDR+(i<<2));
}
current_update_lcd=lcd_para->lcd_id;
if (sub_lcd_operation_state==LCD_SW_UPDATE_STATE)
{
if (lcd_para->block_mode_flag==KAL_TRUE)
{
while (LCD_IS_RUNNING) {};
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
sub_lcd_operation_state=LCD_STANDBY_STATE;
DISABLE_LCD_ROI_CTRL_W2MEM;
}
}
}
else if ((sub_lcd_operation_state==LCD_HW_UPDATE_STATE)||
(sub_lcd_operation_state==LCD_DC_UPDATE_STATE))
{ /* in LCD_HW_UPDATE_STATE or LCD_DC_UPDATE_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 */
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= (lcd_para->update_layer | lcd_hw_trigger_layer);
lcd_cmd_latch_complete=KAL_FALSE;
ENABLE_LCD_CMD_COMPLETE_INT;
if (sub_lcd_operation_state==LCD_HW_UPDATE_STATE)
sub_lcd_operation_state=LCD_HW_CMD_QUEUE_STATE;
else if (sub_lcd_operation_state==LCD_DC_UPDATE_STATE)
sub_lcd_operation_state=LCD_DC_CMD_QUEUE_STATE;
current_update_lcd=lcd_para->lcd_id;
save_irq_mask=SaveAndSetIRQMask();
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DRV_WriteReg32(LCD_ROI_WMEM_CTRL_REG,lcd_mem_out_ctrl_shadow);
DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_mem_out_address_shadow);
#endif
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -